Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
46 SPD
Holders
44
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 SPDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
UniqNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.6; import "../../utils/ERC721/ERC721ClaimableV2.sol"; import "../../utils/libs/IERC20.sol"; import "../../utils/uniq/Ierc20.sol"; contract UniqNFT is ERC721ClaimableV2 { uint256 internal _tokenNum = 0; mapping(uint256 => uint256) internal _tokenType; mapping(uint256 => mapping(bytes => bool)) internal _isHashUsed; address public administrator; event MintTokens(address indexed resquester, bytes indexed transactionHash, uint256[] indexed TokenIds, uint256 _networkId, uint256 tokenType); // ----- CONSTRUCTOR ----- // constructor( string memory _name, string memory _symbol, string memory _ttokenUri, address paymentProxy ) ERC721ClaimableV2(_name, _symbol, _ttokenUri, 750000) { administrator = msg.sender; transferOwnership(paymentProxy); } 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) { bytes16 _HEX_SYMBOLS = "0123456789abcdef"; buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), 20); } function tokenURI(uint256 _tokenId) public view override returns (string memory) { return string( abi.encodePacked(baseTokenURI(), Strings.toString(_tokenId)) ); } function baseTokenURI() public view override returns(string memory) { return string( abi.encodePacked(super.baseTokenURI(), toHexString(address(this)), "/") ); } function setOwner(address _newOwner) external { require(msg.sender == administrator, "Only admin"); transferOwnership(_newOwner); } function setAdministrator(address _newOwner) external { require(msg.sender == administrator, "Only admin"); require(_newOwner != address(0), "Cant be zero"); administrator = _newOwner; } // ----- VIEWS ----- // function contractURI() public pure returns (string memory) { return "https://uniqly.io/nft-collections/tradeableNFT"; } function getTokenType(uint256 _tokenId) external view returns(uint256){ return _tokenType[_tokenId]; } function isHashUsed(bytes memory _transactionHash, uint256 _networkId) external view returns(bool){ return _isHashUsed[_networkId][_transactionHash]; } function batchMintSelectedIds( uint[] memory _ids, address[] memory _addresses ) external onlyOwner { uint len = _ids.length; require(len == _addresses.length, "Arrays length"); uint256 i = 0; for (i = 0; i < len; i++) { _safeMint(_addresses[i], _ids[i]); } } /// Used by admin function mintNFTTokens(address _requesterAddress, uint256 _bundleId, uint256[] memory _tokenIds, uint256 _chainId, bytes memory _transactionHash) external{ require(msg.sender == administrator, "Only admin"); require(!_isHashUsed[_chainId][_transactionHash], "Cant be minted twice"); uint256 len = _tokenIds.length; require(len!=0, "At least one token"); _isHashUsed[_chainId][_transactionHash] = true; for(uint i=0; i<len;i++){ _safeMint(_requesterAddress, _tokenIds[i]); _tokenType[_tokenIds[i]] = _bundleId; } emit MintTokens(_requesterAddress, _transactionHash, _tokenIds, _chainId, _bundleId); } function recoverERC20(address token) external { require(msg.sender == administrator, "Only admin"); uint256 val = IERC20(token).balanceOf(address(this)); require(val > 0, "Nothing to recover"); // use interface that not return value (USDT case) Ierc20(token).transfer(owner(), val); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.6; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "../common/meta-transactions/ContentMixin.sol"; import "../common/meta-transactions/NativeMetaTransaction.sol"; abstract contract ERC721ClaimableV2 is ContextMixin, ERC721Enumerable, NativeMetaTransaction, Ownable { // ----- VARIABLES ----- // string internal _token_uri; string public METADATA_PROVENANCE_HASH; uint256 public ROYALTY_FEE; // ----- EVENTS ----- // event ReceivedRoyalties( address indexed _royaltyRecipient, address indexed _buyer, uint256 indexed _tokenId, address _tokenPaid, uint256 _amount ); // ----- CONSTRUCTOR ----- // constructor( string memory _name, string memory _symbol, string memory _uri, uint256 _royaltyFee ) ERC721(_name, _symbol) { _token_uri = _uri; _initializeEIP712(_name); ROYALTY_FEE = _royaltyFee; } // ----- VIEWS ----- // function baseTokenURI() public view virtual returns (string memory){ return _token_uri; } function tokenURI(uint256 _tokenId) public view override virtual returns (string memory) { return string( abi.encodePacked(baseTokenURI(), Strings.toString(_tokenId)) ); } function royaltyInfo(uint256) external view returns (address receiver, uint256 amount) { return (owner(), ROYALTY_FEE); } function _msgSender() internal view override returns (address sender) { return ContextMixin.msgSender(); } function tokensOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } // ----- PUBLIC METHODS ----- // function receivedRoyalties( address, address _buyer, uint256 _tokenId, address _tokenPaid, uint256 _amount ) external { emit ReceivedRoyalties(owner(), _buyer, _tokenId, _tokenPaid, _amount); } // ----- OWNERS METHODS ----- // function editRoyaltyFee(uint256 _newFee) external onlyOwner{ ROYALTY_FEE = _newFee; } function burn(uint256 _tokenId) external { require( _isApprovedOrOwner(msg.sender, _tokenId), "Ownership or approval required" ); _burn(_tokenId); } function setProvenanceHash(string memory _hash) external onlyOwner { METADATA_PROVENANCE_HASH = _hash; } function editTokenUri(string memory _ttokenUri) external onlyOwner { _token_uri = _ttokenUri; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract ContextMixin { function msgSender() internal view returns (address payable sender) { if (msg.sender == address(this)) { bytes memory array = msg.data; uint256 index = msg.data.length; assembly { // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those. sender := and( mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff ) } } else { sender = payable(msg.sender); } return sender; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./EIP712Base.sol"; contract NativeMetaTransaction is EIP712Base { bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256( bytes( "MetaTransaction(uint256 nonce,address from,bytes functionSignature)" ) ); event MetaTransactionExecuted( address userAddress, address payable relayerAddress, bytes functionSignature ); mapping(address => uint256) nonces; /* * Meta transaction structure. * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas * He should call the desired function directly in that case. */ struct MetaTransaction { uint256 nonce; address from; bytes functionSignature; } function executeMetaTransaction( address userAddress, bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV ) public payable returns (bytes memory) { MetaTransaction memory metaTx = MetaTransaction({ nonce: nonces[userAddress], from: userAddress, functionSignature: functionSignature }); require( verify(userAddress, metaTx, sigR, sigS, sigV), "Signer and signature do not match" ); // increase nonce for user (to avoid re-use) nonces[userAddress]++; emit MetaTransactionExecuted( userAddress, payable(msg.sender), functionSignature ); // Append userAddress and relayer address at the end to extract it from calling context (bool success, bytes memory returnData) = address(this).call( abi.encodePacked(functionSignature, userAddress) ); require(success, "Function call not successful"); return returnData; } function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) { return keccak256( abi.encode( META_TRANSACTION_TYPEHASH, metaTx.nonce, metaTx.from, keccak256(metaTx.functionSignature) ) ); } function getNonce(address user) public view returns (uint256 nonce) { nonce = nonces[user]; } function verify( address signer, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV ) internal view returns (bool) { require(signer != address(0), "NativeMetaTransaction: INVALID_SIGNER"); return signer == ecrecover( toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS ); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {Initializable} from "./Initializable.sol"; contract EIP712Base is Initializable { struct EIP712Domain { string name; string version; address verifyingContract; bytes32 salt; } string constant public ERC712_VERSION = "1"; bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256( bytes( "EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)" ) ); bytes32 internal domainSeperator; // supposed to be called once while initializing. // one of the contracts that inherits this contract follows proxy pattern // so it is not possible to do this in a constructor function _initializeEIP712( string memory name ) internal initializer { _setDomainSeperator(name); } function _setDomainSeperator(string memory name) internal { domainSeperator = keccak256( abi.encode( EIP712_DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(ERC712_VERSION)), address(this), bytes32(getChainId()) ) ); } function getDomainSeperator() public view returns (bytes32) { return domainSeperator; } function getChainId() public view returns (uint256) { uint256 id; assembly { id := chainid() } return id; } /** * Accept message hash and returns hash message in EIP712 compatible form * So that it can be used to recover signer from signature signed using EIP712 formatted data * https://eips.ethereum.org/EIPS/eip-712 * "\\x19" makes the encoding deterministic * "\\x01" is the version byte to make it compatible to EIP-191 */ function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) { return keccak256( abi.encodePacked("\x19\x01", getDomainSeperator(), messageHash) ); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Initializable { bool inited = false; modifier initializer() { require(!inited, "already inited"); _; inited = true; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; // we need some information from token contract // we also need ability to transfer tokens from/to this contract interface Ierc20 { function transferFrom( address from, address to, uint256 value ) external returns (bool); function transfer(address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./extensions/IERC721Metadata.sol"; import "../../utils/Address.sol"; import "../../utils/Context.sol"; import "../../utils/Strings.sol"; import "../../utils/introspection/ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { 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(to).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 {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../ERC721.sol"; import "./IERC721Enumerable.sol"; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _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); } }
{ "metadata": { "useLiteralContent": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_ttokenUri","type":"string"},{"internalType":"address","name":"paymentProxy","type":"address"}],"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":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"resquester","type":"address"},{"indexed":true,"internalType":"bytes","name":"transactionHash","type":"bytes"},{"indexed":true,"internalType":"uint256[]","name":"TokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"_networkId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenType","type":"uint256"}],"name":"MintTokens","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":"_royaltyRecipient","type":"address"},{"indexed":true,"internalType":"address","name":"_buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"_tokenPaid","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ReceivedRoyalties","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":[],"name":"ERC712_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"METADATA_PROVENANCE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROYALTY_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"administrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"batchMintSelectedIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"editRoyaltyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_ttokenUri","type":"string"}],"name":"editTokenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDomainSeperator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getTokenType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_transactionHash","type":"bytes"},{"internalType":"uint256","name":"_networkId","type":"uint256"}],"name":"isHashUsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_requesterAddress","type":"address"},{"internalType":"uint256","name":"_bundleId","type":"uint256"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"uint256","name":"_chainId","type":"uint256"},{"internalType":"bytes","name":"_transactionHash","type":"bytes"}],"name":"mintNFTTokens","outputs":[],"stateMutability":"nonpayable","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":"address","name":"","type":"address"},{"internalType":"address","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_tokenPaid","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"receivedRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"setAdministrator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600a60006101000a81548160ff02191690831515021790555060006011553480156200003157600080fd5b5060405162006b1738038062006b1783398181016040528101906200005791906200069d565b838383620b71b0838381600090805190602001906200007892919062000558565b5080600190805190602001906200009192919062000558565b505050620000b4620000a86200014560201b60201c565b6200016160201b60201c565b81600e9080519060200190620000cc92919062000558565b50620000de846200022760201b60201c565b806010819055505050505033601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200013b81620002a960201b60201c565b5050505062000b54565b60006200015c620003bf60201b6200246f1760201c565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600a60009054906101000a900460ff16156200027a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027190620008a4565b60405180910390fd5b6200028b816200047260201b60201c565b6001600a60006101000a81548160ff02191690831515021790555050565b620002b96200014560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002df6200052160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000338576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200032f9062000882565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620003ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a29062000860565b60405180910390fd5b620003bc816200016160201b60201c565b50565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156200046b57600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff8183015116925050506200046f565b3390505b90565b6040518060800160405280604f815260200162006ac8604f91398051906020012081805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012030620004e96200054b60201b60201c565b60001b6040516020016200050295949392919062000803565b60405160208183030381529060405280519060200120600b8190555050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000804690508091505090565b8280546200056690620009aa565b90600052602060002090601f0160209004810192826200058a5760008555620005d6565b82601f10620005a557805160ff1916838001178555620005d6565b82800160010185558215620005d6579182015b82811115620005d5578251825591602001919060010190620005b8565b5b509050620005e59190620005e9565b5090565b5b8082111562000604576000816000905550600101620005ea565b5090565b60006200061f6200061984620008ef565b620008c6565b9050828152602081018484840111156200063e576200063d62000a79565b5b6200064b84828562000974565b509392505050565b600081519050620006648162000b3a565b92915050565b600082601f83011262000682576200068162000a74565b5b81516200069484826020860162000608565b91505092915050565b60008060008060808587031215620006ba57620006b962000a83565b5b600085015167ffffffffffffffff811115620006db57620006da62000a7e565b5b620006e9878288016200066a565b945050602085015167ffffffffffffffff8111156200070d576200070c62000a7e565b5b6200071b878288016200066a565b935050604085015167ffffffffffffffff8111156200073f576200073e62000a7e565b5b6200074d878288016200066a565b9250506060620007608782880162000653565b91505092959194509250565b620007778162000936565b82525050565b62000788816200094a565b82525050565b60006200079d60268362000925565b9150620007aa8262000a99565b604082019050919050565b6000620007c460208362000925565b9150620007d18262000ae8565b602082019050919050565b6000620007eb600e8362000925565b9150620007f88262000b11565b602082019050919050565b600060a0820190506200081a60008301886200077d565b6200082960208301876200077d565b6200083860408301866200077d565b6200084760608301856200076c565b6200085660808301846200077d565b9695505050505050565b600060208201905081810360008301526200087b816200078e565b9050919050565b600060208201905081810360008301526200089d81620007b5565b9050919050565b60006020820190508181036000830152620008bf81620007dc565b9050919050565b6000620008d2620008e5565b9050620008e08282620009e0565b919050565b6000604051905090565b600067ffffffffffffffff8211156200090d576200090c62000a45565b5b620009188262000a88565b9050602081019050919050565b600082825260208201905092915050565b6000620009438262000954565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200099457808201518184015260208101905062000977565b83811115620009a4576000848401525b50505050565b60006002820490506001821680620009c357607f821691505b60208210811415620009da57620009d962000a16565b5b50919050565b620009eb8262000a88565b810181811067ffffffffffffffff8211171562000a0d5762000a0c62000a45565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f616c726561647920696e69746564000000000000000000000000000000000000600082015250565b62000b458162000936565b811462000b5157600080fd5b50565b615f648062000b646000396000f3fe60806040526004361061025c5760003560e01c8063652489d411610144578063a22cb465116100b6578063df8089ef1161007a578063df8089ef14610946578063e8a3d4851461096f578063e985e9c51461099a578063f0c9dc60146109d7578063f2fde38b14610a02578063f53d0a8e14610a2b5761025c565b8063a22cb4651461084e578063b88d4fde14610877578063c87b56dd146108a0578063cef6d368146108dd578063d547cfb71461091b5761025c565b80638462151c116101085780638462151c146107405780638589ff451461077d5780638da5cb5b146107a657806395d89b41146107d15780639bd25e09146107fc5780639e8c708e146108255761025c565b8063652489d41461065d57806370a0823114610686578063715018a6146106c3578063742af72b146106da57806376aed2e1146107035761025c565b80631bac5914116101dd578063335477fc116101a1578063335477fc1461053b5780633408e4701461056657806342842e0e1461059157806342966c68146105ba5780634f6ccce7146105e35780636352211e146106205761025c565b80631bac59141461043057806320379ee51461046d57806323b872dd146104985780632d0335ab146104c15780632f745c59146104fe5761025c565b80630f7e5970116102245780630f7e59701461035f5780630fac06101461038a57806310969523146103b357806313af4035146103dc57806318160ddd146104055761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b3146103065780630c53c51c1461032f575b600080fd5b34801561026d57600080fd5b50610288600480360381019061028391906142cf565b610a56565b6040516102959190614c78565b60405180910390f35b3480156102aa57600080fd5b506102b3610ad0565b6040516102c09190614d5a565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906143ce565b610b62565b6040516102fd9190614b88565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190614137565b610be7565b005b610349600480360381019061034491906140a0565b610cff565b6040516103569190614d38565b60405180910390f35b34801561036b57600080fd5b50610374610f30565b6040516103819190614d5a565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac919061422a565b610f69565b005b3480156103bf57600080fd5b506103da60048036038101906103d59190614385565b611090565b005b3480156103e857600080fd5b5061040360048036038101906103fe9190613ea2565b611126565b005b34801561041157600080fd5b5061041a6111c2565b60405161042791906150fc565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190614329565b6111cf565b6040516104649190614c78565b60405180910390f35b34801561047957600080fd5b50610482611216565b60405161048f9190614c93565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba9190613f0f565b611220565b005b3480156104cd57600080fd5b506104e860048036038101906104e39190613ea2565b611280565b6040516104f591906150fc565b60405180910390f35b34801561050a57600080fd5b5061052560048036038101906105209190614137565b6112c9565b60405161053291906150fc565b60405180910390f35b34801561054757600080fd5b5061055061136e565b60405161055d91906150fc565b60405180910390f35b34801561057257600080fd5b5061057b611374565b60405161058891906150fc565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b39190613f0f565b611381565b005b3480156105c657600080fd5b506105e160048036038101906105dc91906143ce565b6113a1565b005b3480156105ef57600080fd5b5061060a600480360381019061060591906143ce565b6113f6565b60405161061791906150fc565b60405180910390f35b34801561062c57600080fd5b50610647600480360381019061064291906143ce565b611467565b6040516106549190614b88565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190614385565b611519565b005b34801561069257600080fd5b506106ad60048036038101906106a89190613ea2565b6115af565b6040516106ba91906150fc565b60405180910390f35b3480156106cf57600080fd5b506106d8611667565b005b3480156106e657600080fd5b5061070160048036038101906106fc91906143ce565b6116ef565b005b34801561070f57600080fd5b5061072a600480360381019061072591906143ce565b611775565b60405161073791906150fc565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190613ea2565b611792565b6040516107749190614c56565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f9190613f62565b61189c565b005b3480156107b257600080fd5b506107bb611912565b6040516107c89190614b88565b60405180910390f35b3480156107dd57600080fd5b506107e661193c565b6040516107f39190614d5a565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190614177565b6119ce565b005b34801561083157600080fd5b5061084c60048036038101906108479190613ea2565b611c66565b005b34801561085a57600080fd5b5061087560048036038101906108709190614060565b611e5f565b005b34801561088357600080fd5b5061089e60048036038101906108999190613fdd565b611fe0565b005b3480156108ac57600080fd5b506108c760048036038101906108c291906143ce565b612042565b6040516108d49190614d5a565b60405180910390f35b3480156108e957600080fd5b5061090460048036038101906108ff91906143ce565b61207c565b604051610912929190614c2d565b60405180910390f35b34801561092757600080fd5b50610930612093565b60405161093d9190614d5a565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190613ea2565b6120cb565b005b34801561097b57600080fd5b5061098461220f565b6040516109919190614d5a565b60405180910390f35b3480156109a657600080fd5b506109c160048036038101906109bc9190613ecf565b61222f565b6040516109ce9190614c78565b60405180910390f35b3480156109e357600080fd5b506109ec6122c3565b6040516109f99190614d5a565b60405180910390f35b348015610a0e57600080fd5b50610a296004803603810190610a249190613ea2565b612351565b005b348015610a3757600080fd5b50610a40612449565b604051610a4d9190614b88565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ac95750610ac882612520565b5b9050919050565b606060008054610adf906154cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0b906154cf565b8015610b585780601f10610b2d57610100808354040283529160200191610b58565b820191906000526020600020905b815481529060010190602001808311610b3b57829003601f168201915b5050505050905090565b6000610b6d82612602565b610bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba390614fdc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bf282611467565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5a9061507c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c8261266e565b73ffffffffffffffffffffffffffffffffffffffff161480610cb15750610cb081610cab61266e565b61222f565b5b610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce790614f3c565b60405180910390fd5b610cfa838361267d565b505050565b606060006040518060600160405280600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610d828782878787612736565b610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db89061503c565b60405180910390fd5b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610e1190615532565b91905055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610e4993929190614ba3565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610e7e929190614ad6565b604051602081830303815290604052604051610e9a9190614abf565b6000604051808303816000865af19150503d8060008114610ed7576040519150601f19603f3d011682016040523d82523d6000602084013e610edc565b606091505b509150915081610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890614e1c565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b610f7161266e565b73ffffffffffffffffffffffffffffffffffffffff16610f8f611912565b73ffffffffffffffffffffffffffffffffffffffff1614610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc90614ffc565b60405180910390fd5b6000825190508151811461102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590614efc565b60405180910390fd5b60005b8181101561108a5761107783828151811061104f5761104e615696565b5b602002602001015185838151811061106a57611069615696565b5b602002602001015161283f565b808061108290615532565b915050611031565b50505050565b61109861266e565b73ffffffffffffffffffffffffffffffffffffffff166110b6611912565b73ffffffffffffffffffffffffffffffffffffffff161461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390614ffc565b60405180910390fd5b80600f9080519060200190611122929190613b26565b5050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90614ebc565b60405180910390fd5b6111bf81612351565b50565b6000600880549050905090565b600060136000838152602001908152602001600020836040516111f29190614abf565b908152602001604051809103902060009054906101000a900460ff16905092915050565b6000600b54905090565b61123161122b61266e565b8261285d565b611270576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112679061509c565b60405180910390fd5b61127b83838361293b565b505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112d4836115af565b8210611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90614dbc565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60105481565b6000804690508091505090565b61139c83838360405180602001604052806000815250611fe0565b505050565b6113ab338261285d565b6113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190614f9c565b60405180910390fd5b6113f381612b97565b50565b60006114006111c2565b8210611441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611438906150dc565b60405180910390fd5b6008828154811061145557611454615696565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790614f7c565b60405180910390fd5b80915050919050565b61152161266e565b73ffffffffffffffffffffffffffffffffffffffff1661153f611912565b73ffffffffffffffffffffffffffffffffffffffff1614611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c90614ffc565b60405180910390fd5b80600e90805190602001906115ab929190613b26565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161790614f5c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61166f61266e565b73ffffffffffffffffffffffffffffffffffffffff1661168d611912565b73ffffffffffffffffffffffffffffffffffffffff16146116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da90614ffc565b60405180910390fd5b6116ed6000612ca8565b565b6116f761266e565b73ffffffffffffffffffffffffffffffffffffffff16611715611912565b73ffffffffffffffffffffffffffffffffffffffff161461176b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176290614ffc565b60405180910390fd5b8060108190555050565b600060126000838152602001908152602001600020549050919050565b6060600061179f836115af565b905060008114156117fc57600067ffffffffffffffff8111156117c5576117c46156c5565b5b6040519080825280602002602001820160405280156117f35781602001602082028036833780820191505090505b50915050611897565b60008167ffffffffffffffff811115611818576118176156c5565b5b6040519080825280602002602001820160405280156118465781602001602082028036833780820191505090505b50905060005b828110156118905761185e85826112c9565b82828151811061187157611870615696565b5b602002602001018181525050808061188890615532565b91505061184c565b8193505050505b919050565b828473ffffffffffffffffffffffffffffffffffffffff166118bc611912565b73ffffffffffffffffffffffffffffffffffffffff167f096a55ec842afaa98cb78cb0352921e73c0d1caa9136309fa9c07f13f4a39a608585604051611903929190614c2d565b60405180910390a45050505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461194b906154cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611977906154cf565b80156119c45780601f10611999576101008083540402835291602001916119c4565b820191906000526020600020905b8154815290600101906020018083116119a757829003601f168201915b5050505050905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5590614ebc565b60405180910390fd5b6013600083815260200190815260200160002081604051611a7f9190614abf565b908152602001604051809103902060009054906101000a900460ff1615611adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad290614e5c565b60405180910390fd5b6000835190506000811415611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c906150bc565b60405180910390fd5b60016013600085815260200190815260200160002083604051611b489190614abf565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060005b81811015611be157611b9c87868381518110611b8f57611b8e615696565b5b602002602001015161283f565b8560126000878481518110611bb457611bb3615696565b5b60200260200101518152602001908152602001600020819055508080611bd990615532565b915050611b70565b5083604051611bf09190614aa8565b604051809103902082604051611c069190614abf565b60405180910390208773ffffffffffffffffffffffffffffffffffffffff167f14a9404913283bcc369ae0e7eec8ce189e8ace2820fd7183a129a10f1eb544a68689604051611c56929190615117565b60405180910390a4505050505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced90614ebc565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d319190614b88565b60206040518083038186803b158015611d4957600080fd5b505afa158015611d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8191906143fb565b905060008111611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90614d7c565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611dea611912565b836040518363ffffffff1660e01b8152600401611e08929190614c2d565b602060405180830381600087803b158015611e2257600080fd5b505af1158015611e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5a91906142a2565b505050565b611e6761266e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90614e9c565b60405180910390fd5b8060056000611ee261266e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f8f61266e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fd49190614c78565b60405180910390a35050565b611ff1611feb61266e565b8361285d565b612030576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120279061509c565b60405180910390fd5b61203c84848484612d6e565b50505050565b606061204c612093565b61205583612dca565b604051602001612066929190614afe565b6040516020818303038152906040529050919050565b600080612087611912565b60105491509150915091565b606061209d612f2b565b6120a630612fbd565b6040516020016120b7929190614b22565b604051602081830303815290604052905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290614ebc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c29061505c565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060600160405280602e8152602001615f01602e9139905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f80546122d0906154cf565b80601f01602080910402602001604051908101604052809291908181526020018280546122fc906154cf565b80156123495780601f1061231e57610100808354040283529160200191612349565b820191906000526020600020905b81548152906001019060200180831161232c57829003601f168201915b505050505081565b61235961266e565b73ffffffffffffffffffffffffffffffffffffffff16612377611912565b73ffffffffffffffffffffffffffffffffffffffff16146123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c490614ffc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614dfc565b60405180910390fd5b61244681612ca8565b50565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561251957600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff81830151169250505061251d565b3390505b90565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806125eb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806125fb57506125fa82612fe7565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600061267861246f565b905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126f083611467565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279e90614f1c565b60405180910390fd5b60016127ba6127b587613051565b6130b9565b838686604051600081526020016040526040516127da9493929190614cf3565b6020604051602081039080840390855afa1580156127fc573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b6128598282604051806020016040528060008152506130f2565b5050565b600061286882612602565b6128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e90614edc565b60405180910390fd5b60006128b283611467565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061292157508373ffffffffffffffffffffffffffffffffffffffff1661290984610b62565b73ffffffffffffffffffffffffffffffffffffffff16145b806129325750612931818561222f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661295b82611467565b73ffffffffffffffffffffffffffffffffffffffff16146129b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a89061501c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1890614e7c565b60405180910390fd5b612a2c83838361314d565b612a3760008261267d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a879190615392565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ade91906152b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612ba282611467565b9050612bb08160008461314d565b612bbb60008361267d565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c0b9190615392565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d7984848461293b565b612d8584848484613261565b612dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbb90614ddc565b60405180910390fd5b50505050565b60606000821415612e12576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f26565b600082905060005b60008214612e44578080612e2d90615532565b915050600a82612e3d9190615307565b9150612e1a565b60008167ffffffffffffffff811115612e6057612e5f6156c5565b5b6040519080825280601f01601f191660200182016040528015612e925781602001600182028036833780820191505090505b5090505b60008514612f1f57600182612eab9190615392565b9150600a85612eba91906155a9565b6030612ec691906152b1565b60f81b818381518110612edc57612edb615696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f189190615307565b9450612e96565b8093505050505b919050565b6060600e8054612f3a906154cf565b80601f0160208091040260200160405190810160405280929190818152602001828054612f66906154cf565b8015612fb35780601f10612f8857610100808354040283529160200191612fb3565b820191906000526020600020905b815481529060010190602001808311612f9657829003601f168201915b5050505050905090565b6060612fe08273ffffffffffffffffffffffffffffffffffffffff1660146133f8565b9050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000604051806080016040528060438152602001615ebe60439139805190602001208260000151836020015184604001518051906020012060405160200161309c9493929190614cae565b604051602081830303815290604052805190602001209050919050565b60006130c3611216565b826040516020016130d5929190614b51565b604051602081830303815290604052805190602001209050919050565b6130fc838361363a565b6131096000848484613261565b613148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313f90614ddc565b60405180910390fd5b505050565b613158838383613808565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561319b576131968161380d565b6131da565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146131d9576131d88382613856565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561321d57613218816139c3565b61325c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461325b5761325a8282613a94565b5b5b505050565b60006132828473ffffffffffffffffffffffffffffffffffffffff16613b13565b156133eb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132ab61266e565b8786866040518563ffffffff1660e01b81526004016132cd9493929190614be1565b602060405180830381600087803b1580156132e757600080fd5b505af192505050801561331857506040513d601f19601f8201168201806040525081019061331591906142fc565b60015b61339b573d8060008114613348576040519150601f19603f3d011682016040523d82523d6000602084013e61334d565b606091505b50600081511415613393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338a90614ddc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133f0565b600190505b949350505050565b60606000600283600261340b9190615338565b61341591906152b1565b67ffffffffffffffff81111561342e5761342d6156c5565b5b6040519080825280601f01601f1916602001820160405280156134605781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061349857613497615696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106134fc576134fb615696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261353c9190615338565b61354691906152b1565b90505b60018111156135ec5760007f3031323334353637383961626364656600000000000000000000000000000000905080600f87166010811061358d5761358c615696565b5b1a60f81b8383815181106135a4576135a3615696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600486901c955050806135e5906154a5565b9050613549565b5060008414613630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362790614d9c565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a190614fbc565b60405180910390fd5b6136b381612602565b156136f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ea90614e3c565b60405180910390fd5b6136ff6000838361314d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461374f91906152b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613863846115af565b61386d9190615392565b9050600060076000848152602001908152602001600020549050818114613952576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506139d79190615392565b9050600060096000848152602001908152602001600020549050600060088381548110613a0757613a06615696565b5b906000526020600020015490508060088381548110613a2957613a28615696565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613a7857613a77615667565b5b6001900381819060005260206000200160009055905550505050565b6000613a9f836115af565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613b32906154cf565b90600052602060002090601f016020900481019282613b545760008555613b9b565b82601f10613b6d57805160ff1916838001178555613b9b565b82800160010185558215613b9b579182015b82811115613b9a578251825591602001919060010190613b7f565b5b509050613ba89190613bac565b5090565b5b80821115613bc5576000816000905550600101613bad565b5090565b6000613bdc613bd784615165565b615140565b90508083825260208201905082856020860282011115613bff57613bfe6156f9565b5b60005b85811015613c2f5781613c158882613d2d565b845260208401935060208301925050600181019050613c02565b5050509392505050565b6000613c4c613c4784615191565b615140565b90508083825260208201905082856020860282011115613c6f57613c6e6156f9565b5b60005b85811015613c9f5781613c858882613e63565b845260208401935060208301925050600181019050613c72565b5050509392505050565b6000613cbc613cb7846151bd565b615140565b905082815260208101848484011115613cd857613cd76156fe565b5b613ce3848285615463565b509392505050565b6000613cfe613cf9846151ee565b615140565b905082815260208101848484011115613d1a57613d196156fe565b5b613d25848285615463565b509392505050565b600081359050613d3c81615e33565b92915050565b600082601f830112613d5757613d566156f4565b5b8135613d67848260208601613bc9565b91505092915050565b600082601f830112613d8557613d846156f4565b5b8135613d95848260208601613c39565b91505092915050565b600081359050613dad81615e4a565b92915050565b600081519050613dc281615e4a565b92915050565b600081359050613dd781615e61565b92915050565b600081359050613dec81615e78565b92915050565b600081519050613e0181615e78565b92915050565b600082601f830112613e1c57613e1b6156f4565b5b8135613e2c848260208601613ca9565b91505092915050565b600082601f830112613e4a57613e496156f4565b5b8135613e5a848260208601613ceb565b91505092915050565b600081359050613e7281615e8f565b92915050565b600081519050613e8781615e8f565b92915050565b600081359050613e9c81615ea6565b92915050565b600060208284031215613eb857613eb7615708565b5b6000613ec684828501613d2d565b91505092915050565b60008060408385031215613ee657613ee5615708565b5b6000613ef485828601613d2d565b9250506020613f0585828601613d2d565b9150509250929050565b600080600060608486031215613f2857613f27615708565b5b6000613f3686828701613d2d565b9350506020613f4786828701613d2d565b9250506040613f5886828701613e63565b9150509250925092565b600080600080600060a08688031215613f7e57613f7d615708565b5b6000613f8c88828901613d2d565b9550506020613f9d88828901613d2d565b9450506040613fae88828901613e63565b9350506060613fbf88828901613d2d565b9250506080613fd088828901613e63565b9150509295509295909350565b60008060008060808587031215613ff757613ff6615708565b5b600061400587828801613d2d565b945050602061401687828801613d2d565b935050604061402787828801613e63565b925050606085013567ffffffffffffffff81111561404857614047615703565b5b61405487828801613e07565b91505092959194509250565b6000806040838503121561407757614076615708565b5b600061408585828601613d2d565b925050602061409685828601613d9e565b9150509250929050565b600080600080600060a086880312156140bc576140bb615708565b5b60006140ca88828901613d2d565b955050602086013567ffffffffffffffff8111156140eb576140ea615703565b5b6140f788828901613e07565b945050604061410888828901613dc8565b935050606061411988828901613dc8565b925050608061412a88828901613e8d565b9150509295509295909350565b6000806040838503121561414e5761414d615708565b5b600061415c85828601613d2d565b925050602061416d85828601613e63565b9150509250929050565b600080600080600060a0868803121561419357614192615708565b5b60006141a188828901613d2d565b95505060206141b288828901613e63565b945050604086013567ffffffffffffffff8111156141d3576141d2615703565b5b6141df88828901613d70565b93505060606141f088828901613e63565b925050608086013567ffffffffffffffff81111561421157614210615703565b5b61421d88828901613e07565b9150509295509295909350565b6000806040838503121561424157614240615708565b5b600083013567ffffffffffffffff81111561425f5761425e615703565b5b61426b85828601613d70565b925050602083013567ffffffffffffffff81111561428c5761428b615703565b5b61429885828601613d42565b9150509250929050565b6000602082840312156142b8576142b7615708565b5b60006142c684828501613db3565b91505092915050565b6000602082840312156142e5576142e4615708565b5b60006142f384828501613ddd565b91505092915050565b60006020828403121561431257614311615708565b5b600061432084828501613df2565b91505092915050565b600080604083850312156143405761433f615708565b5b600083013567ffffffffffffffff81111561435e5761435d615703565b5b61436a85828601613e07565b925050602061437b85828601613e63565b9150509250929050565b60006020828403121561439b5761439a615708565b5b600082013567ffffffffffffffff8111156143b9576143b8615703565b5b6143c584828501613e35565b91505092915050565b6000602082840312156143e4576143e3615708565b5b60006143f284828501613e63565b91505092915050565b60006020828403121561441157614410615708565b5b600061441f84828501613e78565b91505092915050565b60006144348383614a6c565b60208301905092915050565b600061444c8383614a8a565b60208301905092915050565b614461816153d8565b82525050565b614470816153c6565b82525050565b614487614482826153c6565b61557b565b82525050565b60006144988261522f565b6144a2818561525d565b93506144ad8361521f565b8060005b838110156144de5781516144c58882614428565b97506144d083615250565b9250506001810190506144b1565b5085935050505092915050565b60006144f68261522f565b614500818561526e565b935061450b8361521f565b8060005b8381101561453c5781516145238882614440565b975061452e83615250565b92505060018101905061450f565b5085935050505092915050565b614552816153ea565b82525050565b614561816153f6565b82525050565b614578614573826153f6565b61558d565b82525050565b60006145898261523a565b6145938185615279565b93506145a3818560208601615472565b6145ac8161570d565b840191505092915050565b60006145c28261523a565b6145cc818561528a565b93506145dc818560208601615472565b80840191505092915050565b60006145f382615245565b6145fd8185615295565b935061460d818560208601615472565b6146168161570d565b840191505092915050565b600061462c82615245565b61463681856152a6565b9350614646818560208601615472565b80840191505092915050565b600061465f601283615295565b915061466a8261572b565b602082019050919050565b6000614682602083615295565b915061468d82615754565b602082019050919050565b60006146a5602b83615295565b91506146b08261577d565b604082019050919050565b60006146c8603283615295565b91506146d3826157cc565b604082019050919050565b60006146eb602683615295565b91506146f68261581b565b604082019050919050565b600061470e601c83615295565b91506147198261586a565b602082019050919050565b6000614731601c83615295565b915061473c82615893565b602082019050919050565b60006147546002836152a6565b915061475f826158bc565b600282019050919050565b6000614777601483615295565b9150614782826158e5565b602082019050919050565b600061479a602483615295565b91506147a58261590e565b604082019050919050565b60006147bd601983615295565b91506147c88261595d565b602082019050919050565b60006147e0600a83615295565b91506147eb82615986565b602082019050919050565b6000614803602c83615295565b915061480e826159af565b604082019050919050565b6000614826600d83615295565b9150614831826159fe565b602082019050919050565b6000614849602583615295565b915061485482615a27565b604082019050919050565b600061486c603883615295565b915061487782615a76565b604082019050919050565b600061488f602a83615295565b915061489a82615ac5565b604082019050919050565b60006148b2602983615295565b91506148bd82615b14565b604082019050919050565b60006148d5601e83615295565b91506148e082615b63565b602082019050919050565b60006148f8602083615295565b915061490382615b8c565b602082019050919050565b600061491b602c83615295565b915061492682615bb5565b604082019050919050565b600061493e602083615295565b915061494982615c04565b602082019050919050565b6000614961602983615295565b915061496c82615c2d565b604082019050919050565b6000614984602183615295565b915061498f82615c7c565b604082019050919050565b60006149a7600c83615295565b91506149b282615ccb565b602082019050919050565b60006149ca602183615295565b91506149d582615cf4565b604082019050919050565b60006149ed603183615295565b91506149f882615d43565b604082019050919050565b6000614a10601283615295565b9150614a1b82615d92565b602082019050919050565b6000614a33602c83615295565b9150614a3e82615dbb565b604082019050919050565b6000614a566001836152a6565b9150614a6182615e0a565b600182019050919050565b614a758161544c565b82525050565b614a848161544c565b82525050565b614a938161544c565b82525050565b614aa281615456565b82525050565b6000614ab482846144eb565b915081905092915050565b6000614acb82846145b7565b915081905092915050565b6000614ae282856145b7565b9150614aee8284614476565b6014820191508190509392505050565b6000614b0a8285614621565b9150614b168284614621565b91508190509392505050565b6000614b2e8285614621565b9150614b3a8284614621565b9150614b4582614a49565b91508190509392505050565b6000614b5c82614747565b9150614b688285614567565b602082019150614b788284614567565b6020820191508190509392505050565b6000602082019050614b9d6000830184614467565b92915050565b6000606082019050614bb86000830186614467565b614bc56020830185614458565b8181036040830152614bd7818461457e565b9050949350505050565b6000608082019050614bf66000830187614467565b614c036020830186614467565b614c106040830185614a7b565b8181036060830152614c22818461457e565b905095945050505050565b6000604082019050614c426000830185614467565b614c4f6020830184614a7b565b9392505050565b60006020820190508181036000830152614c70818461448d565b905092915050565b6000602082019050614c8d6000830184614549565b92915050565b6000602082019050614ca86000830184614558565b92915050565b6000608082019050614cc36000830187614558565b614cd06020830186614a7b565b614cdd6040830185614467565b614cea6060830184614558565b95945050505050565b6000608082019050614d086000830187614558565b614d156020830186614a99565b614d226040830185614558565b614d2f6060830184614558565b95945050505050565b60006020820190508181036000830152614d52818461457e565b905092915050565b60006020820190508181036000830152614d7481846145e8565b905092915050565b60006020820190508181036000830152614d9581614652565b9050919050565b60006020820190508181036000830152614db581614675565b9050919050565b60006020820190508181036000830152614dd581614698565b9050919050565b60006020820190508181036000830152614df5816146bb565b9050919050565b60006020820190508181036000830152614e15816146de565b9050919050565b60006020820190508181036000830152614e3581614701565b9050919050565b60006020820190508181036000830152614e5581614724565b9050919050565b60006020820190508181036000830152614e758161476a565b9050919050565b60006020820190508181036000830152614e958161478d565b9050919050565b60006020820190508181036000830152614eb5816147b0565b9050919050565b60006020820190508181036000830152614ed5816147d3565b9050919050565b60006020820190508181036000830152614ef5816147f6565b9050919050565b60006020820190508181036000830152614f1581614819565b9050919050565b60006020820190508181036000830152614f358161483c565b9050919050565b60006020820190508181036000830152614f558161485f565b9050919050565b60006020820190508181036000830152614f7581614882565b9050919050565b60006020820190508181036000830152614f95816148a5565b9050919050565b60006020820190508181036000830152614fb5816148c8565b9050919050565b60006020820190508181036000830152614fd5816148eb565b9050919050565b60006020820190508181036000830152614ff58161490e565b9050919050565b6000602082019050818103600083015261501581614931565b9050919050565b6000602082019050818103600083015261503581614954565b9050919050565b6000602082019050818103600083015261505581614977565b9050919050565b600060208201905081810360008301526150758161499a565b9050919050565b60006020820190508181036000830152615095816149bd565b9050919050565b600060208201905081810360008301526150b5816149e0565b9050919050565b600060208201905081810360008301526150d581614a03565b9050919050565b600060208201905081810360008301526150f581614a26565b9050919050565b60006020820190506151116000830184614a7b565b92915050565b600060408201905061512c6000830185614a7b565b6151396020830184614a7b565b9392505050565b600061514a61515b565b90506151568282615501565b919050565b6000604051905090565b600067ffffffffffffffff8211156151805761517f6156c5565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156151ac576151ab6156c5565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156151d8576151d76156c5565b5b6151e18261570d565b9050602081019050919050565b600067ffffffffffffffff821115615209576152086156c5565b5b6152128261570d565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006152bc8261544c565b91506152c78361544c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152fc576152fb6155da565b5b828201905092915050565b60006153128261544c565b915061531d8361544c565b92508261532d5761532c615609565b5b828204905092915050565b60006153438261544c565b915061534e8361544c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615387576153866155da565b5b828202905092915050565b600061539d8261544c565b91506153a88361544c565b9250828210156153bb576153ba6155da565b5b828203905092915050565b60006153d18261542c565b9050919050565b60006153e38261542c565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015615490578082015181840152602081019050615475565b8381111561549f576000848401525b50505050565b60006154b08261544c565b915060008214156154c4576154c36155da565b5b600182039050919050565b600060028204905060018216806154e757607f821691505b602082108114156154fb576154fa615638565b5b50919050565b61550a8261570d565b810181811067ffffffffffffffff82111715615529576155286156c5565b5b80604052505050565b600061553d8261544c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155705761556f6155da565b5b600182019050919050565b600061558682615597565b9050919050565b6000819050919050565b60006155a28261571e565b9050919050565b60006155b48261544c565b91506155bf8361544c565b9250826155cf576155ce615609565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4e6f7468696e6720746f207265636f7665720000000000000000000000000000600082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f43616e74206265206d696e746564207477696365000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4f6e6c792061646d696e00000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f417272617973206c656e67746800000000000000000000000000000000000000600082015250565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4f776e657273686970206f7220617070726f76616c2072657175697265640000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e74206265207a65726f0000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4174206c65617374206f6e6520746f6b656e0000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b615e3c816153c6565b8114615e4757600080fd5b50565b615e53816153ea565b8114615e5e57600080fd5b50565b615e6a816153f6565b8114615e7557600080fd5b50565b615e8181615400565b8114615e8c57600080fd5b50565b615e988161544c565b8114615ea357600080fd5b50565b615eaf81615456565b8114615eba57600080fd5b5056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e61747572652968747470733a2f2f756e69716c792e696f2f6e66742d636f6c6c656374696f6e732f747261646561626c654e4654a264697066735822122069b627445c149cdae22afe0f83f6bd68f247abb14d218b64674223a5e0a6f87064736f6c63430008070033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c7429000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000208429b9d0cb6eae9bedaa34aeee5d80524fb4ef00000000000000000000000000000000000000000000000000000000000000155365726769746f20506879676974616c2044726f70000000000000000000000000000000000000000000000000000000000000000000000000000000000000035350440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f7777772e756e69716c792e696f2f6170692f6d657461646174612f6e66742f00000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061025c5760003560e01c8063652489d411610144578063a22cb465116100b6578063df8089ef1161007a578063df8089ef14610946578063e8a3d4851461096f578063e985e9c51461099a578063f0c9dc60146109d7578063f2fde38b14610a02578063f53d0a8e14610a2b5761025c565b8063a22cb4651461084e578063b88d4fde14610877578063c87b56dd146108a0578063cef6d368146108dd578063d547cfb71461091b5761025c565b80638462151c116101085780638462151c146107405780638589ff451461077d5780638da5cb5b146107a657806395d89b41146107d15780639bd25e09146107fc5780639e8c708e146108255761025c565b8063652489d41461065d57806370a0823114610686578063715018a6146106c3578063742af72b146106da57806376aed2e1146107035761025c565b80631bac5914116101dd578063335477fc116101a1578063335477fc1461053b5780633408e4701461056657806342842e0e1461059157806342966c68146105ba5780634f6ccce7146105e35780636352211e146106205761025c565b80631bac59141461043057806320379ee51461046d57806323b872dd146104985780632d0335ab146104c15780632f745c59146104fe5761025c565b80630f7e5970116102245780630f7e59701461035f5780630fac06101461038a57806310969523146103b357806313af4035146103dc57806318160ddd146104055761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b3146103065780630c53c51c1461032f575b600080fd5b34801561026d57600080fd5b50610288600480360381019061028391906142cf565b610a56565b6040516102959190614c78565b60405180910390f35b3480156102aa57600080fd5b506102b3610ad0565b6040516102c09190614d5a565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906143ce565b610b62565b6040516102fd9190614b88565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190614137565b610be7565b005b610349600480360381019061034491906140a0565b610cff565b6040516103569190614d38565b60405180910390f35b34801561036b57600080fd5b50610374610f30565b6040516103819190614d5a565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac919061422a565b610f69565b005b3480156103bf57600080fd5b506103da60048036038101906103d59190614385565b611090565b005b3480156103e857600080fd5b5061040360048036038101906103fe9190613ea2565b611126565b005b34801561041157600080fd5b5061041a6111c2565b60405161042791906150fc565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190614329565b6111cf565b6040516104649190614c78565b60405180910390f35b34801561047957600080fd5b50610482611216565b60405161048f9190614c93565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba9190613f0f565b611220565b005b3480156104cd57600080fd5b506104e860048036038101906104e39190613ea2565b611280565b6040516104f591906150fc565b60405180910390f35b34801561050a57600080fd5b5061052560048036038101906105209190614137565b6112c9565b60405161053291906150fc565b60405180910390f35b34801561054757600080fd5b5061055061136e565b60405161055d91906150fc565b60405180910390f35b34801561057257600080fd5b5061057b611374565b60405161058891906150fc565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b39190613f0f565b611381565b005b3480156105c657600080fd5b506105e160048036038101906105dc91906143ce565b6113a1565b005b3480156105ef57600080fd5b5061060a600480360381019061060591906143ce565b6113f6565b60405161061791906150fc565b60405180910390f35b34801561062c57600080fd5b50610647600480360381019061064291906143ce565b611467565b6040516106549190614b88565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190614385565b611519565b005b34801561069257600080fd5b506106ad60048036038101906106a89190613ea2565b6115af565b6040516106ba91906150fc565b60405180910390f35b3480156106cf57600080fd5b506106d8611667565b005b3480156106e657600080fd5b5061070160048036038101906106fc91906143ce565b6116ef565b005b34801561070f57600080fd5b5061072a600480360381019061072591906143ce565b611775565b60405161073791906150fc565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190613ea2565b611792565b6040516107749190614c56565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f9190613f62565b61189c565b005b3480156107b257600080fd5b506107bb611912565b6040516107c89190614b88565b60405180910390f35b3480156107dd57600080fd5b506107e661193c565b6040516107f39190614d5a565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190614177565b6119ce565b005b34801561083157600080fd5b5061084c60048036038101906108479190613ea2565b611c66565b005b34801561085a57600080fd5b5061087560048036038101906108709190614060565b611e5f565b005b34801561088357600080fd5b5061089e60048036038101906108999190613fdd565b611fe0565b005b3480156108ac57600080fd5b506108c760048036038101906108c291906143ce565b612042565b6040516108d49190614d5a565b60405180910390f35b3480156108e957600080fd5b5061090460048036038101906108ff91906143ce565b61207c565b604051610912929190614c2d565b60405180910390f35b34801561092757600080fd5b50610930612093565b60405161093d9190614d5a565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190613ea2565b6120cb565b005b34801561097b57600080fd5b5061098461220f565b6040516109919190614d5a565b60405180910390f35b3480156109a657600080fd5b506109c160048036038101906109bc9190613ecf565b61222f565b6040516109ce9190614c78565b60405180910390f35b3480156109e357600080fd5b506109ec6122c3565b6040516109f99190614d5a565b60405180910390f35b348015610a0e57600080fd5b50610a296004803603810190610a249190613ea2565b612351565b005b348015610a3757600080fd5b50610a40612449565b604051610a4d9190614b88565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ac95750610ac882612520565b5b9050919050565b606060008054610adf906154cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0b906154cf565b8015610b585780601f10610b2d57610100808354040283529160200191610b58565b820191906000526020600020905b815481529060010190602001808311610b3b57829003601f168201915b5050505050905090565b6000610b6d82612602565b610bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba390614fdc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bf282611467565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5a9061507c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c8261266e565b73ffffffffffffffffffffffffffffffffffffffff161480610cb15750610cb081610cab61266e565b61222f565b5b610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce790614f3c565b60405180910390fd5b610cfa838361267d565b505050565b606060006040518060600160405280600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610d828782878787612736565b610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db89061503c565b60405180910390fd5b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610e1190615532565b91905055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610e4993929190614ba3565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610e7e929190614ad6565b604051602081830303815290604052604051610e9a9190614abf565b6000604051808303816000865af19150503d8060008114610ed7576040519150601f19603f3d011682016040523d82523d6000602084013e610edc565b606091505b509150915081610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890614e1c565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b610f7161266e565b73ffffffffffffffffffffffffffffffffffffffff16610f8f611912565b73ffffffffffffffffffffffffffffffffffffffff1614610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc90614ffc565b60405180910390fd5b6000825190508151811461102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590614efc565b60405180910390fd5b60005b8181101561108a5761107783828151811061104f5761104e615696565b5b602002602001015185838151811061106a57611069615696565b5b602002602001015161283f565b808061108290615532565b915050611031565b50505050565b61109861266e565b73ffffffffffffffffffffffffffffffffffffffff166110b6611912565b73ffffffffffffffffffffffffffffffffffffffff161461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390614ffc565b60405180910390fd5b80600f9080519060200190611122929190613b26565b5050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90614ebc565b60405180910390fd5b6111bf81612351565b50565b6000600880549050905090565b600060136000838152602001908152602001600020836040516111f29190614abf565b908152602001604051809103902060009054906101000a900460ff16905092915050565b6000600b54905090565b61123161122b61266e565b8261285d565b611270576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112679061509c565b60405180910390fd5b61127b83838361293b565b505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112d4836115af565b8210611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90614dbc565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60105481565b6000804690508091505090565b61139c83838360405180602001604052806000815250611fe0565b505050565b6113ab338261285d565b6113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190614f9c565b60405180910390fd5b6113f381612b97565b50565b60006114006111c2565b8210611441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611438906150dc565b60405180910390fd5b6008828154811061145557611454615696565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790614f7c565b60405180910390fd5b80915050919050565b61152161266e565b73ffffffffffffffffffffffffffffffffffffffff1661153f611912565b73ffffffffffffffffffffffffffffffffffffffff1614611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c90614ffc565b60405180910390fd5b80600e90805190602001906115ab929190613b26565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161790614f5c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61166f61266e565b73ffffffffffffffffffffffffffffffffffffffff1661168d611912565b73ffffffffffffffffffffffffffffffffffffffff16146116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da90614ffc565b60405180910390fd5b6116ed6000612ca8565b565b6116f761266e565b73ffffffffffffffffffffffffffffffffffffffff16611715611912565b73ffffffffffffffffffffffffffffffffffffffff161461176b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176290614ffc565b60405180910390fd5b8060108190555050565b600060126000838152602001908152602001600020549050919050565b6060600061179f836115af565b905060008114156117fc57600067ffffffffffffffff8111156117c5576117c46156c5565b5b6040519080825280602002602001820160405280156117f35781602001602082028036833780820191505090505b50915050611897565b60008167ffffffffffffffff811115611818576118176156c5565b5b6040519080825280602002602001820160405280156118465781602001602082028036833780820191505090505b50905060005b828110156118905761185e85826112c9565b82828151811061187157611870615696565b5b602002602001018181525050808061188890615532565b91505061184c565b8193505050505b919050565b828473ffffffffffffffffffffffffffffffffffffffff166118bc611912565b73ffffffffffffffffffffffffffffffffffffffff167f096a55ec842afaa98cb78cb0352921e73c0d1caa9136309fa9c07f13f4a39a608585604051611903929190614c2d565b60405180910390a45050505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461194b906154cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611977906154cf565b80156119c45780601f10611999576101008083540402835291602001916119c4565b820191906000526020600020905b8154815290600101906020018083116119a757829003601f168201915b5050505050905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5590614ebc565b60405180910390fd5b6013600083815260200190815260200160002081604051611a7f9190614abf565b908152602001604051809103902060009054906101000a900460ff1615611adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad290614e5c565b60405180910390fd5b6000835190506000811415611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c906150bc565b60405180910390fd5b60016013600085815260200190815260200160002083604051611b489190614abf565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060005b81811015611be157611b9c87868381518110611b8f57611b8e615696565b5b602002602001015161283f565b8560126000878481518110611bb457611bb3615696565b5b60200260200101518152602001908152602001600020819055508080611bd990615532565b915050611b70565b5083604051611bf09190614aa8565b604051809103902082604051611c069190614abf565b60405180910390208773ffffffffffffffffffffffffffffffffffffffff167f14a9404913283bcc369ae0e7eec8ce189e8ace2820fd7183a129a10f1eb544a68689604051611c56929190615117565b60405180910390a4505050505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced90614ebc565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d319190614b88565b60206040518083038186803b158015611d4957600080fd5b505afa158015611d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8191906143fb565b905060008111611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90614d7c565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611dea611912565b836040518363ffffffff1660e01b8152600401611e08929190614c2d565b602060405180830381600087803b158015611e2257600080fd5b505af1158015611e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5a91906142a2565b505050565b611e6761266e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90614e9c565b60405180910390fd5b8060056000611ee261266e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f8f61266e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fd49190614c78565b60405180910390a35050565b611ff1611feb61266e565b8361285d565b612030576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120279061509c565b60405180910390fd5b61203c84848484612d6e565b50505050565b606061204c612093565b61205583612dca565b604051602001612066929190614afe565b6040516020818303038152906040529050919050565b600080612087611912565b60105491509150915091565b606061209d612f2b565b6120a630612fbd565b6040516020016120b7929190614b22565b604051602081830303815290604052905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290614ebc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c29061505c565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060600160405280602e8152602001615f01602e9139905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f80546122d0906154cf565b80601f01602080910402602001604051908101604052809291908181526020018280546122fc906154cf565b80156123495780601f1061231e57610100808354040283529160200191612349565b820191906000526020600020905b81548152906001019060200180831161232c57829003601f168201915b505050505081565b61235961266e565b73ffffffffffffffffffffffffffffffffffffffff16612377611912565b73ffffffffffffffffffffffffffffffffffffffff16146123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c490614ffc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614dfc565b60405180910390fd5b61244681612ca8565b50565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561251957600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff81830151169250505061251d565b3390505b90565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806125eb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806125fb57506125fa82612fe7565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600061267861246f565b905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126f083611467565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279e90614f1c565b60405180910390fd5b60016127ba6127b587613051565b6130b9565b838686604051600081526020016040526040516127da9493929190614cf3565b6020604051602081039080840390855afa1580156127fc573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b6128598282604051806020016040528060008152506130f2565b5050565b600061286882612602565b6128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e90614edc565b60405180910390fd5b60006128b283611467565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061292157508373ffffffffffffffffffffffffffffffffffffffff1661290984610b62565b73ffffffffffffffffffffffffffffffffffffffff16145b806129325750612931818561222f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661295b82611467565b73ffffffffffffffffffffffffffffffffffffffff16146129b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a89061501c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1890614e7c565b60405180910390fd5b612a2c83838361314d565b612a3760008261267d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a879190615392565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ade91906152b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612ba282611467565b9050612bb08160008461314d565b612bbb60008361267d565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c0b9190615392565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d7984848461293b565b612d8584848484613261565b612dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbb90614ddc565b60405180910390fd5b50505050565b60606000821415612e12576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f26565b600082905060005b60008214612e44578080612e2d90615532565b915050600a82612e3d9190615307565b9150612e1a565b60008167ffffffffffffffff811115612e6057612e5f6156c5565b5b6040519080825280601f01601f191660200182016040528015612e925781602001600182028036833780820191505090505b5090505b60008514612f1f57600182612eab9190615392565b9150600a85612eba91906155a9565b6030612ec691906152b1565b60f81b818381518110612edc57612edb615696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f189190615307565b9450612e96565b8093505050505b919050565b6060600e8054612f3a906154cf565b80601f0160208091040260200160405190810160405280929190818152602001828054612f66906154cf565b8015612fb35780601f10612f8857610100808354040283529160200191612fb3565b820191906000526020600020905b815481529060010190602001808311612f9657829003601f168201915b5050505050905090565b6060612fe08273ffffffffffffffffffffffffffffffffffffffff1660146133f8565b9050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000604051806080016040528060438152602001615ebe60439139805190602001208260000151836020015184604001518051906020012060405160200161309c9493929190614cae565b604051602081830303815290604052805190602001209050919050565b60006130c3611216565b826040516020016130d5929190614b51565b604051602081830303815290604052805190602001209050919050565b6130fc838361363a565b6131096000848484613261565b613148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313f90614ddc565b60405180910390fd5b505050565b613158838383613808565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561319b576131968161380d565b6131da565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146131d9576131d88382613856565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561321d57613218816139c3565b61325c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461325b5761325a8282613a94565b5b5b505050565b60006132828473ffffffffffffffffffffffffffffffffffffffff16613b13565b156133eb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132ab61266e565b8786866040518563ffffffff1660e01b81526004016132cd9493929190614be1565b602060405180830381600087803b1580156132e757600080fd5b505af192505050801561331857506040513d601f19601f8201168201806040525081019061331591906142fc565b60015b61339b573d8060008114613348576040519150601f19603f3d011682016040523d82523d6000602084013e61334d565b606091505b50600081511415613393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338a90614ddc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133f0565b600190505b949350505050565b60606000600283600261340b9190615338565b61341591906152b1565b67ffffffffffffffff81111561342e5761342d6156c5565b5b6040519080825280601f01601f1916602001820160405280156134605781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061349857613497615696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106134fc576134fb615696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261353c9190615338565b61354691906152b1565b90505b60018111156135ec5760007f3031323334353637383961626364656600000000000000000000000000000000905080600f87166010811061358d5761358c615696565b5b1a60f81b8383815181106135a4576135a3615696565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600486901c955050806135e5906154a5565b9050613549565b5060008414613630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362790614d9c565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a190614fbc565b60405180910390fd5b6136b381612602565b156136f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ea90614e3c565b60405180910390fd5b6136ff6000838361314d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461374f91906152b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613863846115af565b61386d9190615392565b9050600060076000848152602001908152602001600020549050818114613952576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506139d79190615392565b9050600060096000848152602001908152602001600020549050600060088381548110613a0757613a06615696565b5b906000526020600020015490508060088381548110613a2957613a28615696565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613a7857613a77615667565b5b6001900381819060005260206000200160009055905550505050565b6000613a9f836115af565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613b32906154cf565b90600052602060002090601f016020900481019282613b545760008555613b9b565b82601f10613b6d57805160ff1916838001178555613b9b565b82800160010185558215613b9b579182015b82811115613b9a578251825591602001919060010190613b7f565b5b509050613ba89190613bac565b5090565b5b80821115613bc5576000816000905550600101613bad565b5090565b6000613bdc613bd784615165565b615140565b90508083825260208201905082856020860282011115613bff57613bfe6156f9565b5b60005b85811015613c2f5781613c158882613d2d565b845260208401935060208301925050600181019050613c02565b5050509392505050565b6000613c4c613c4784615191565b615140565b90508083825260208201905082856020860282011115613c6f57613c6e6156f9565b5b60005b85811015613c9f5781613c858882613e63565b845260208401935060208301925050600181019050613c72565b5050509392505050565b6000613cbc613cb7846151bd565b615140565b905082815260208101848484011115613cd857613cd76156fe565b5b613ce3848285615463565b509392505050565b6000613cfe613cf9846151ee565b615140565b905082815260208101848484011115613d1a57613d196156fe565b5b613d25848285615463565b509392505050565b600081359050613d3c81615e33565b92915050565b600082601f830112613d5757613d566156f4565b5b8135613d67848260208601613bc9565b91505092915050565b600082601f830112613d8557613d846156f4565b5b8135613d95848260208601613c39565b91505092915050565b600081359050613dad81615e4a565b92915050565b600081519050613dc281615e4a565b92915050565b600081359050613dd781615e61565b92915050565b600081359050613dec81615e78565b92915050565b600081519050613e0181615e78565b92915050565b600082601f830112613e1c57613e1b6156f4565b5b8135613e2c848260208601613ca9565b91505092915050565b600082601f830112613e4a57613e496156f4565b5b8135613e5a848260208601613ceb565b91505092915050565b600081359050613e7281615e8f565b92915050565b600081519050613e8781615e8f565b92915050565b600081359050613e9c81615ea6565b92915050565b600060208284031215613eb857613eb7615708565b5b6000613ec684828501613d2d565b91505092915050565b60008060408385031215613ee657613ee5615708565b5b6000613ef485828601613d2d565b9250506020613f0585828601613d2d565b9150509250929050565b600080600060608486031215613f2857613f27615708565b5b6000613f3686828701613d2d565b9350506020613f4786828701613d2d565b9250506040613f5886828701613e63565b9150509250925092565b600080600080600060a08688031215613f7e57613f7d615708565b5b6000613f8c88828901613d2d565b9550506020613f9d88828901613d2d565b9450506040613fae88828901613e63565b9350506060613fbf88828901613d2d565b9250506080613fd088828901613e63565b9150509295509295909350565b60008060008060808587031215613ff757613ff6615708565b5b600061400587828801613d2d565b945050602061401687828801613d2d565b935050604061402787828801613e63565b925050606085013567ffffffffffffffff81111561404857614047615703565b5b61405487828801613e07565b91505092959194509250565b6000806040838503121561407757614076615708565b5b600061408585828601613d2d565b925050602061409685828601613d9e565b9150509250929050565b600080600080600060a086880312156140bc576140bb615708565b5b60006140ca88828901613d2d565b955050602086013567ffffffffffffffff8111156140eb576140ea615703565b5b6140f788828901613e07565b945050604061410888828901613dc8565b935050606061411988828901613dc8565b925050608061412a88828901613e8d565b9150509295509295909350565b6000806040838503121561414e5761414d615708565b5b600061415c85828601613d2d565b925050602061416d85828601613e63565b9150509250929050565b600080600080600060a0868803121561419357614192615708565b5b60006141a188828901613d2d565b95505060206141b288828901613e63565b945050604086013567ffffffffffffffff8111156141d3576141d2615703565b5b6141df88828901613d70565b93505060606141f088828901613e63565b925050608086013567ffffffffffffffff81111561421157614210615703565b5b61421d88828901613e07565b9150509295509295909350565b6000806040838503121561424157614240615708565b5b600083013567ffffffffffffffff81111561425f5761425e615703565b5b61426b85828601613d70565b925050602083013567ffffffffffffffff81111561428c5761428b615703565b5b61429885828601613d42565b9150509250929050565b6000602082840312156142b8576142b7615708565b5b60006142c684828501613db3565b91505092915050565b6000602082840312156142e5576142e4615708565b5b60006142f384828501613ddd565b91505092915050565b60006020828403121561431257614311615708565b5b600061432084828501613df2565b91505092915050565b600080604083850312156143405761433f615708565b5b600083013567ffffffffffffffff81111561435e5761435d615703565b5b61436a85828601613e07565b925050602061437b85828601613e63565b9150509250929050565b60006020828403121561439b5761439a615708565b5b600082013567ffffffffffffffff8111156143b9576143b8615703565b5b6143c584828501613e35565b91505092915050565b6000602082840312156143e4576143e3615708565b5b60006143f284828501613e63565b91505092915050565b60006020828403121561441157614410615708565b5b600061441f84828501613e78565b91505092915050565b60006144348383614a6c565b60208301905092915050565b600061444c8383614a8a565b60208301905092915050565b614461816153d8565b82525050565b614470816153c6565b82525050565b614487614482826153c6565b61557b565b82525050565b60006144988261522f565b6144a2818561525d565b93506144ad8361521f565b8060005b838110156144de5781516144c58882614428565b97506144d083615250565b9250506001810190506144b1565b5085935050505092915050565b60006144f68261522f565b614500818561526e565b935061450b8361521f565b8060005b8381101561453c5781516145238882614440565b975061452e83615250565b92505060018101905061450f565b5085935050505092915050565b614552816153ea565b82525050565b614561816153f6565b82525050565b614578614573826153f6565b61558d565b82525050565b60006145898261523a565b6145938185615279565b93506145a3818560208601615472565b6145ac8161570d565b840191505092915050565b60006145c28261523a565b6145cc818561528a565b93506145dc818560208601615472565b80840191505092915050565b60006145f382615245565b6145fd8185615295565b935061460d818560208601615472565b6146168161570d565b840191505092915050565b600061462c82615245565b61463681856152a6565b9350614646818560208601615472565b80840191505092915050565b600061465f601283615295565b915061466a8261572b565b602082019050919050565b6000614682602083615295565b915061468d82615754565b602082019050919050565b60006146a5602b83615295565b91506146b08261577d565b604082019050919050565b60006146c8603283615295565b91506146d3826157cc565b604082019050919050565b60006146eb602683615295565b91506146f68261581b565b604082019050919050565b600061470e601c83615295565b91506147198261586a565b602082019050919050565b6000614731601c83615295565b915061473c82615893565b602082019050919050565b60006147546002836152a6565b915061475f826158bc565b600282019050919050565b6000614777601483615295565b9150614782826158e5565b602082019050919050565b600061479a602483615295565b91506147a58261590e565b604082019050919050565b60006147bd601983615295565b91506147c88261595d565b602082019050919050565b60006147e0600a83615295565b91506147eb82615986565b602082019050919050565b6000614803602c83615295565b915061480e826159af565b604082019050919050565b6000614826600d83615295565b9150614831826159fe565b602082019050919050565b6000614849602583615295565b915061485482615a27565b604082019050919050565b600061486c603883615295565b915061487782615a76565b604082019050919050565b600061488f602a83615295565b915061489a82615ac5565b604082019050919050565b60006148b2602983615295565b91506148bd82615b14565b604082019050919050565b60006148d5601e83615295565b91506148e082615b63565b602082019050919050565b60006148f8602083615295565b915061490382615b8c565b602082019050919050565b600061491b602c83615295565b915061492682615bb5565b604082019050919050565b600061493e602083615295565b915061494982615c04565b602082019050919050565b6000614961602983615295565b915061496c82615c2d565b604082019050919050565b6000614984602183615295565b915061498f82615c7c565b604082019050919050565b60006149a7600c83615295565b91506149b282615ccb565b602082019050919050565b60006149ca602183615295565b91506149d582615cf4565b604082019050919050565b60006149ed603183615295565b91506149f882615d43565b604082019050919050565b6000614a10601283615295565b9150614a1b82615d92565b602082019050919050565b6000614a33602c83615295565b9150614a3e82615dbb565b604082019050919050565b6000614a566001836152a6565b9150614a6182615e0a565b600182019050919050565b614a758161544c565b82525050565b614a848161544c565b82525050565b614a938161544c565b82525050565b614aa281615456565b82525050565b6000614ab482846144eb565b915081905092915050565b6000614acb82846145b7565b915081905092915050565b6000614ae282856145b7565b9150614aee8284614476565b6014820191508190509392505050565b6000614b0a8285614621565b9150614b168284614621565b91508190509392505050565b6000614b2e8285614621565b9150614b3a8284614621565b9150614b4582614a49565b91508190509392505050565b6000614b5c82614747565b9150614b688285614567565b602082019150614b788284614567565b6020820191508190509392505050565b6000602082019050614b9d6000830184614467565b92915050565b6000606082019050614bb86000830186614467565b614bc56020830185614458565b8181036040830152614bd7818461457e565b9050949350505050565b6000608082019050614bf66000830187614467565b614c036020830186614467565b614c106040830185614a7b565b8181036060830152614c22818461457e565b905095945050505050565b6000604082019050614c426000830185614467565b614c4f6020830184614a7b565b9392505050565b60006020820190508181036000830152614c70818461448d565b905092915050565b6000602082019050614c8d6000830184614549565b92915050565b6000602082019050614ca86000830184614558565b92915050565b6000608082019050614cc36000830187614558565b614cd06020830186614a7b565b614cdd6040830185614467565b614cea6060830184614558565b95945050505050565b6000608082019050614d086000830187614558565b614d156020830186614a99565b614d226040830185614558565b614d2f6060830184614558565b95945050505050565b60006020820190508181036000830152614d52818461457e565b905092915050565b60006020820190508181036000830152614d7481846145e8565b905092915050565b60006020820190508181036000830152614d9581614652565b9050919050565b60006020820190508181036000830152614db581614675565b9050919050565b60006020820190508181036000830152614dd581614698565b9050919050565b60006020820190508181036000830152614df5816146bb565b9050919050565b60006020820190508181036000830152614e15816146de565b9050919050565b60006020820190508181036000830152614e3581614701565b9050919050565b60006020820190508181036000830152614e5581614724565b9050919050565b60006020820190508181036000830152614e758161476a565b9050919050565b60006020820190508181036000830152614e958161478d565b9050919050565b60006020820190508181036000830152614eb5816147b0565b9050919050565b60006020820190508181036000830152614ed5816147d3565b9050919050565b60006020820190508181036000830152614ef5816147f6565b9050919050565b60006020820190508181036000830152614f1581614819565b9050919050565b60006020820190508181036000830152614f358161483c565b9050919050565b60006020820190508181036000830152614f558161485f565b9050919050565b60006020820190508181036000830152614f7581614882565b9050919050565b60006020820190508181036000830152614f95816148a5565b9050919050565b60006020820190508181036000830152614fb5816148c8565b9050919050565b60006020820190508181036000830152614fd5816148eb565b9050919050565b60006020820190508181036000830152614ff58161490e565b9050919050565b6000602082019050818103600083015261501581614931565b9050919050565b6000602082019050818103600083015261503581614954565b9050919050565b6000602082019050818103600083015261505581614977565b9050919050565b600060208201905081810360008301526150758161499a565b9050919050565b60006020820190508181036000830152615095816149bd565b9050919050565b600060208201905081810360008301526150b5816149e0565b9050919050565b600060208201905081810360008301526150d581614a03565b9050919050565b600060208201905081810360008301526150f581614a26565b9050919050565b60006020820190506151116000830184614a7b565b92915050565b600060408201905061512c6000830185614a7b565b6151396020830184614a7b565b9392505050565b600061514a61515b565b90506151568282615501565b919050565b6000604051905090565b600067ffffffffffffffff8211156151805761517f6156c5565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156151ac576151ab6156c5565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156151d8576151d76156c5565b5b6151e18261570d565b9050602081019050919050565b600067ffffffffffffffff821115615209576152086156c5565b5b6152128261570d565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006152bc8261544c565b91506152c78361544c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152fc576152fb6155da565b5b828201905092915050565b60006153128261544c565b915061531d8361544c565b92508261532d5761532c615609565b5b828204905092915050565b60006153438261544c565b915061534e8361544c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615387576153866155da565b5b828202905092915050565b600061539d8261544c565b91506153a88361544c565b9250828210156153bb576153ba6155da565b5b828203905092915050565b60006153d18261542c565b9050919050565b60006153e38261542c565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015615490578082015181840152602081019050615475565b8381111561549f576000848401525b50505050565b60006154b08261544c565b915060008214156154c4576154c36155da565b5b600182039050919050565b600060028204905060018216806154e757607f821691505b602082108114156154fb576154fa615638565b5b50919050565b61550a8261570d565b810181811067ffffffffffffffff82111715615529576155286156c5565b5b80604052505050565b600061553d8261544c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155705761556f6155da565b5b600182019050919050565b600061558682615597565b9050919050565b6000819050919050565b60006155a28261571e565b9050919050565b60006155b48261544c565b91506155bf8361544c565b9250826155cf576155ce615609565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4e6f7468696e6720746f207265636f7665720000000000000000000000000000600082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f43616e74206265206d696e746564207477696365000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4f6e6c792061646d696e00000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f417272617973206c656e67746800000000000000000000000000000000000000600082015250565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4f776e657273686970206f7220617070726f76616c2072657175697265640000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e74206265207a65726f0000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4174206c65617374206f6e6520746f6b656e0000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b615e3c816153c6565b8114615e4757600080fd5b50565b615e53816153ea565b8114615e5e57600080fd5b50565b615e6a816153f6565b8114615e7557600080fd5b50565b615e8181615400565b8114615e8c57600080fd5b50565b615e988161544c565b8114615ea357600080fd5b50565b615eaf81615456565b8114615eba57600080fd5b5056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e61747572652968747470733a2f2f756e69716c792e696f2f6e66742d636f6c6c656374696f6e732f747261646561626c654e4654a264697066735822122069b627445c149cdae22afe0f83f6bd68f247abb14d218b64674223a5e0a6f87064736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000208429b9d0cb6eae9bedaa34aeee5d80524fb4ef00000000000000000000000000000000000000000000000000000000000000155365726769746f20506879676974616c2044726f70000000000000000000000000000000000000000000000000000000000000000000000000000000000000035350440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f7777772e756e69716c792e696f2f6170692f6d657461646174612f6e66742f00000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Sergito Phygital Drop
Arg [1] : _symbol (string): SPD
Arg [2] : _ttokenUri (string): https://www.uniqly.io/api/metadata/nft/
Arg [3] : paymentProxy (address): 0x208429b9D0Cb6eAe9BeDAa34AEeE5D80524Fb4EF
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 000000000000000000000000208429b9d0cb6eae9bedaa34aeee5d80524fb4ef
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [5] : 5365726769746f20506879676974616c2044726f700000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 5350440000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000027
Arg [9] : 68747470733a2f2f7777772e756e69716c792e696f2f6170692f6d6574616461
Arg [10] : 74612f6e66742f00000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
185:4091:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:222:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2414:98:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3925:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3463:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;875:1090:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;288:43:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2886:335:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3122:116:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2053:151:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1535:111:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2717:163:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1264:99:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4789:330:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2373:105:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1211:253:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;653:26:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1369:155:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5185:179:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2908:208:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1718:230:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2117:235:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3244:107:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1855:205:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1605:92:8;;;;;;;;;;;;;:::i;:::-;;2805:97:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2597:114:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1913:555:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2512:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;973:85:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2576:102:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3249:691:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3946:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4209:290:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5430:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1550:251:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1622:161:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1807:239:7;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2211:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2460:131;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4565:162:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;609:38:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1846:189:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;390:28:7;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;910:222:12;1012:4;1050:35;1035:50;;;:11;:50;;;;:90;;;;1089:36;1113:11;1089:23;:36::i;:::-;1035:90;1028:97;;910:222;;;:::o;2414:98:9:-;2468:13;2500:5;2493:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2414:98;:::o;3925:217::-;4001:7;4028:16;4036:7;4028;:16::i;:::-;4020:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4111:15;:24;4127:7;4111:24;;;;;;;;;;;;;;;;;;;;;4104:31;;3925:217;;;:::o;3463:401::-;3543:13;3559:23;3574:7;3559:14;:23::i;:::-;3543:39;;3606:5;3600:11;;:2;:11;;;;3592:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3697:5;3681:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3706:37;3723:5;3730:12;:10;:12::i;:::-;3706:16;:37::i;:::-;3681:62;3660:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3836:21;3845:2;3849:7;3836:8;:21::i;:::-;3533:331;3463:401;;:::o;875:1090:4:-;1070:12;1094:29;1126:148;;;;;;;;1163:6;:19;1170:11;1163:19;;;;;;;;;;;;;;;;1126:148;;;;1202:11;1126:148;;;;;;1246:17;1126:148;;;1094:180;;1306:45;1313:11;1326:6;1334:4;1340;1346;1306:6;:45::i;:::-;1285:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;1474:6;:19;1481:11;1474:19;;;;;;;;;;;;;;;;:21;;;;;;;;;:::i;:::-;;;;;;1511:122;1548:11;1581:10;1606:17;1511:122;;;;;;;;:::i;:::-;;;;;;;;1741:12;1755:23;1790:4;1782:18;;1831:17;1850:11;1814:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1782:90;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1740:132;;;;1890:7;1882:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;1948:10;1941:17;;;;;875:1090;;;;;;;:::o;288:43:2:-;;;;;;;;;;;;;;;;;;;:::o;2886:335:7:-;1196:12:8;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3016:8:7::1;3027:4;:11;3016:22;;3063:10;:17;3056:3;:24;3048:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;3108:9;3131:84;3147:3;3143:1;:7;3131:84;;;3171:33;3181:10;3192:1;3181:13;;;;;;;;:::i;:::-;;;;;;;;3196:4;3201:1;3196:7;;;;;;;;:::i;:::-;;;;;;;;3171:9;:33::i;:::-;3152:3;;;;;:::i;:::-;;;;3131:84;;;3006:215;;2886:335:::0;;:::o;3122:116:0:-;1196:12:8;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3226:5:0::1;3199:24;:32;;;;;;;;;;;;:::i;:::-;;3122:116:::0;:::o;2053:151:7:-;2131:13;;;;;;;;;;;2117:27;;:10;:27;;;2109:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;2169:28;2187:9;2169:17;:28::i;:::-;2053:151;:::o;1535:111:12:-;1596:7;1622:10;:17;;;;1615:24;;1535:111;:::o;2717:163:7:-;2810:4;2832:11;:23;2844:10;2832:23;;;;;;;;;;;2856:16;2832:41;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2825:48;;2717:163;;;;:::o;1264:99:2:-;1315:7;1341:15;;1334:22;;1264:99;:::o;4789:330:9:-;4978:41;4997:12;:10;:12::i;:::-;5011:7;4978:18;:41::i;:::-;4970:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5084:28;5094:4;5100:2;5104:7;5084:9;:28::i;:::-;4789:330;;;:::o;2373:105:4:-;2426:13;2459:6;:12;2466:4;2459:12;;;;;;;;;;;;;;;;2451:20;;2373:105;;;:::o;1211:253:12:-;1308:7;1343:23;1360:5;1343:16;:23::i;:::-;1335:5;:31;1327:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1431:12;:19;1444:5;1431:19;;;;;;;;;;;;;;;:26;1451:5;1431:26;;;;;;;;;;;;1424:33;;1211:253;;;;:::o;653:26:0:-;;;;:::o;1369:155:2:-;1412:7;1431:10;1480:9;1474:15;;1515:2;1508:9;;;1369:155;:::o;5185:179:9:-;5318:39;5335:4;5341:2;5345:7;5318:39;;;;;;;;;;;;:16;:39::i;:::-;5185:179;;;:::o;2908:208:0:-;2984:40;3003:10;3015:8;2984:18;:40::i;:::-;2959:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;3094:15;3100:8;3094:5;:15::i;:::-;2908:208;:::o;1718:230:12:-;1793:7;1828:30;:28;:30::i;:::-;1820:5;:38;1812:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1924:10;1935:5;1924:17;;;;;;;;:::i;:::-;;;;;;;;;;1917:24;;1718:230;;;:::o;2117:235:9:-;2189:7;2208:13;2224:7;:16;2232:7;2224:16;;;;;;;;;;;;;;;;;;;;;2208:32;;2275:1;2258:19;;:5;:19;;;;2250:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2340:5;2333:12;;;2117:235;;;:::o;3244:107:0:-;1196:12:8;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3334:10:0::1;3321;:23;;;;;;;;;;;;:::i;:::-;;3244:107:::0;:::o;1855:205:9:-;1927:7;1971:1;1954:19;;:5;:19;;;;1946:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2037:9;:16;2047:5;2037:16;;;;;;;;;;;;;;;;2030:23;;1855:205;;;:::o;1605:92:8:-;1196:12;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1669:21:::1;1687:1;1669:9;:21::i;:::-;1605:92::o:0;2805:97:0:-;1196:12:8;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2888:7:0::1;2874:11;:21;;;;2805:97:::0;:::o;2597:114:7:-;2659:7;2684:10;:20;2695:8;2684:20;;;;;;;;;;;;2677:27;;2597:114;;;:::o;1913:555:0:-;1999:16;2031:18;2052:17;2062:6;2052:9;:17::i;:::-;2031:38;;2097:1;2083:10;:15;2079:383;;;2172:1;2158:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2151:23;;;;;2079:383;2205:23;2245:10;2231:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2205:51;;2270:13;2297:128;2321:10;2313:5;:18;2297:128;;;2376:34;2396:6;2404:5;2376:19;:34::i;:::-;2360:6;2367:5;2360:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;2333:7;;;;;:::i;:::-;;;;2297:128;;;2445:6;2438:13;;;;;1913:555;;;;:::o;2512:249::-;2724:8;2716:6;2689:65;;2707:7;:5;:7::i;:::-;2689:65;;;2734:10;2746:7;2689:65;;;;;;;:::i;:::-;;;;;;;;2512:249;;;;;:::o;973:85:8:-;1019:7;1045:6;;;;;;;;;;;1038:13;;973:85;:::o;2576:102:9:-;2632:13;2664:7;2657:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:102;:::o;3249:691:7:-;3435:13;;;;;;;;;;;3421:27;;:10;:27;;;3413:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;3482:11;:21;3494:8;3482:21;;;;;;;;;;;3504:16;3482:39;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3481:40;3473:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3556:11;3570:9;:16;3556:30;;3609:1;3604:3;:6;;3596:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;3685:4;3643:11;:21;3655:8;3643:21;;;;;;;;;;;3665:16;3643:39;;;;;;:::i;:::-;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;3703:6;3699:141;3715:3;3713:1;:5;3699:141;;;3737:42;3747:17;3766:9;3776:1;3766:12;;;;;;;;:::i;:::-;;;;;;;;3737:9;:42::i;:::-;3820:9;3793:10;:24;3804:9;3814:1;3804:12;;;;;;;;:::i;:::-;;;;;;;;3793:24;;;;;;;;;;;:36;;;;3719:3;;;;;:::i;:::-;;;;3699:141;;;;3902:9;3854:79;;;;;;:::i;:::-;;;;;;;;3884:16;3854:79;;;;;;:::i;:::-;;;;;;;;3865:17;3854:79;;;3913:8;3923:9;3854:79;;;;;;;:::i;:::-;;;;;;;;3403:537;3249:691;;;;;:::o;3946:328::-;4024:13;;;;;;;;;;;4010:27;;:10;:27;;;4002:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;4062:11;4083:5;4076:23;;;4108:4;4076:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4062:52;;4138:1;4132:3;:7;4124:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4238:5;4231:22;;;4254:7;:5;:7::i;:::-;4263:3;4231:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3992:282;3946:328;:::o;4209:290:9:-;4323:12;:10;:12::i;:::-;4311:24;;:8;:24;;;;4303:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4421:8;4376:18;:32;4395:12;:10;:12::i;:::-;4376:32;;;;;;;;;;;;;;;:42;4409:8;4376:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4473:8;4444:48;;4459:12;:10;:12::i;:::-;4444:48;;;4483:8;4444:48;;;;;;:::i;:::-;;;;;;;;4209:290;;:::o;5430:320::-;5599:41;5618:12;:10;:12::i;:::-;5632:7;5599:18;:41::i;:::-;5591:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5704:39;5718:4;5724:2;5728:7;5737:5;5704:13;:39::i;:::-;5430:320;;;;:::o;1550:251:7:-;1648:13;1737:14;:12;:14::i;:::-;1753:26;1770:8;1753:16;:26::i;:::-;1720:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1677:117;;1550:251;;;:::o;1622:161:0:-;1699:16;1717:14;1755:7;:5;:7::i;:::-;1764:11;;1747:29;;;;1622:161;;;:::o;1807:239:7:-;1894:13;1971:20;:18;:20::i;:::-;1993:26;2013:4;1993:11;:26::i;:::-;1954:71;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1923:116;;1807:239;:::o;2211:214::-;2297:13;;;;;;;;;;;2283:27;;:10;:27;;;2275:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;2364:1;2343:23;;:9;:23;;;;2335:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;2409:9;2393:13;;:25;;;;;;;;;;;;;;;;;;2211:214;:::o;2460:131::-;2504:13;2529:55;;;;;;;;;;;;;;;;;;;2460:131;:::o;4565:162:9:-;4662:4;4685:18;:25;4704:5;4685:25;;;;;;;;;;;;;;;:35;4711:8;4685:35;;;;;;;;;;;;;;;;;;;;;;;;;4678:42;;4565:162;;;;:::o;609:38:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1846:189:8:-;1196:12;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1954:1:::1;1934:22;;:8;:22;;;;1926:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2009:19;2019:8;2009:9;:19::i;:::-;1846:189:::0;:::o;390:28:7:-;;;;;;;;;;;;;:::o;95:631:1:-;163:22;227:4;205:27;;:10;:27;;;201:496;;;248:18;269:8;;248:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;291:13;307:8;;:15;;291:31;;554:42;525:5;518;514:17;508:24;483:131;473:141;;345:283;;201:496;;;675:10;658:28;;201:496;95:631;:::o;1496:300:9:-;1598:4;1648:25;1633:40;;;:11;:40;;;;:104;;;;1704:33;1689:48;;;:11;:48;;;;1633:104;:156;;;;1753:36;1777:11;1753:23;:36::i;:::-;1633:156;1614:175;;1496:300;;;:::o;7222:125::-;7287:4;7338:1;7310:30;;:7;:16;7318:7;7310:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7303:37;;7222:125;;;:::o;1789:118:0:-;1843:14;1876:24;:22;:24::i;:::-;1869:31;;1789:118;:::o;11073:171:9:-;11174:2;11147:15;:24;11163:7;11147:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11229:7;11225:2;11191:46;;11200:23;11215:7;11200:14;:23::i;:::-;11191:46;;;;;;;;;;;;11073:171;;:::o;2484:470:4:-;2656:4;2698:1;2680:20;;:6;:20;;;;2672:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;2793:154;2820:47;2839:27;2859:6;2839:19;:27::i;:::-;2820:18;:47::i;:::-;2885:4;2907;2929;2793:154;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2771:176;;:6;:176;;;2752:195;;2484:470;;;;;;;:::o;8179:108:9:-;8254:26;8264:2;8268:7;8254:26;;;;;;;;;;;;:9;:26::i;:::-;8179:108;;:::o;7505:344::-;7598:4;7622:16;7630:7;7622;:16::i;:::-;7614:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7697:13;7713:23;7728:7;7713:14;:23::i;:::-;7697:39;;7765:5;7754:16;;:7;:16;;;:51;;;;7798:7;7774:31;;:20;7786:7;7774:11;:20::i;:::-;:31;;;7754:51;:87;;;;7809:32;7826:5;7833:7;7809:16;:32::i;:::-;7754:87;7746:96;;;7505:344;;;;:::o;10402:560::-;10556:4;10529:31;;:23;10544:7;10529:14;:23::i;:::-;:31;;;10521:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10638:1;10624:16;;:2;:16;;;;10616:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10692:39;10713:4;10719:2;10723:7;10692:20;:39::i;:::-;10793:29;10810:1;10814:7;10793:8;:29::i;:::-;10852:1;10833:9;:15;10843:4;10833:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10880:1;10863:9;:13;10873:2;10863:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10910:2;10891:7;:16;10899:7;10891:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10947:7;10943:2;10928:27;;10937:4;10928:27;;;;;;;;;;;;10402:560;;;:::o;9730:348::-;9789:13;9805:23;9820:7;9805:14;:23::i;:::-;9789:39;;9839:48;9860:5;9875:1;9879:7;9839:20;:48::i;:::-;9925:29;9942:1;9946:7;9925:8;:29::i;:::-;9985:1;9965:9;:16;9975:5;9965:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;10003:7;:16;10011:7;10003:16;;;;;;;;;;;;9996:23;;;;;;;;;;;10063:7;10059:1;10035:36;;10044:5;10035:36;;;;;;;;;;;;9779:299;9730:348;:::o;2041:169:8:-;2096:16;2115:6;;;;;;;;;;;2096:25;;2140:8;2131:6;;:17;;;;;;;;;;;;;;;;;;2194:8;2163:40;;2184:8;2163:40;;;;;;;;;;;;2086:124;2041:169;:::o;6612:307:9:-;6763:28;6773:4;6779:2;6783:7;6763:9;:28::i;:::-;6809:48;6832:4;6838:2;6842:7;6851:5;6809:22;:48::i;:::-;6801:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6612:307;;;;:::o;275:703:17:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;1242:101:0:-;1295:13;1326:10;1319:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1242:101;:::o;1408:136:7:-;1466:13;1498:39;1526:4;1510:22;;1534:2;1498:11;:39::i;:::-;1491:46;;1408:136;;;:::o;763:155:18:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;1971:396:4:-;2078:7;221:106;;;;;;;;;;;;;;;;;198:139;;;;;;2226:6;:12;;;2260:6;:11;;;2303:6;:24;;;2293:35;;;;;;2147:199;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2120:240;;;;;;2101:259;;1971:396;;;:::o;1884:249:2:-;1980:7;2078:20;:18;:20::i;:::-;2100:11;2049:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2022:104;;;;;;2003:123;;1884:249;;;:::o;8508:311:9:-;8633:18;8639:2;8643:7;8633:5;:18::i;:::-;8682:54;8713:1;8717:2;8721:7;8730:5;8682:22;:54::i;:::-;8661:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8508:311;;;:::o;2544:572:12:-;2683:45;2710:4;2716:2;2720:7;2683:26;:45::i;:::-;2759:1;2743:18;;:4;:18;;;2739:183;;;2777:40;2809:7;2777:31;:40::i;:::-;2739:183;;;2846:2;2838:10;;:4;:10;;;2834:88;;2864:47;2897:4;2903:7;2864:32;:47::i;:::-;2834:88;2739:183;2949:1;2935:16;;:2;:16;;;2931:179;;;2967:45;3004:7;2967:36;:45::i;:::-;2931:179;;;3039:4;3033:10;;:2;:10;;;3029:81;;3059:40;3087:2;3091:7;3059:27;:40::i;:::-;3029:81;2931:179;2544:572;;;:::o;11797:782:9:-;11947:4;11967:15;:2;:13;;;:15::i;:::-;11963:610;;;12018:2;12002:36;;;12039:12;:10;:12::i;:::-;12053:4;12059:7;12068:5;12002:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11998:523;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12262:1;12245:6;:13;:18;12241:266;;;12287:60;;;;;;;;;;:::i;:::-;;;;;;;;12241:266;12459:6;12453:13;12444:6;12440:2;12436:15;12429:38;11998:523;12134:45;;;12124:55;;;:6;:55;;;;12117:62;;;;;11963:610;12558:4;12551:11;;11797:782;;;;;;;:::o;906:496:7:-;981:13;1006:19;1051:1;1042:6;1038:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1028:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1006:47;;1063:15;:6;1070:1;1063:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;1088;:6;1095:1;1088:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;1118:9;1143:1;1134:6;1130:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1118:26;;1113:187;1150:1;1146;:5;1113:187;;;1172:20;:41;;;1239:12;1260:3;1252:5;:11;1239:25;;;;;;;:::i;:::-;;;;;1227:6;1234:1;1227:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;1288:1;1278:11;;;;;1158:142;1153:3;;;;:::i;:::-;;;1113:187;;;;1326:1;1317:5;:10;1309:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;1388:6;1374:21;;;906:496;;;;:::o;9141:372:9:-;9234:1;9220:16;;:2;:16;;;;9212:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9292:16;9300:7;9292;:16::i;:::-;9291:17;9283:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9352:45;9381:1;9385:2;9389:7;9352:20;:45::i;:::-;9425:1;9408:9;:13;9418:2;9408:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9455:2;9436:7;:16;9444:7;9436:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9498:7;9494:2;9473:33;;9490:1;9473:33;;;;;;;;;;;;9141:372;;:::o;13135:122::-;;;;:::o;3822:161:12:-;3925:10;:17;;;;3898:15;:24;3914:7;3898:24;;;;;;;;;;;:44;;;;3952:10;3968:7;3952:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3822:161;:::o;4600:970::-;4862:22;4912:1;4887:22;4904:4;4887:16;:22::i;:::-;:26;;;;:::i;:::-;4862:51;;4923:18;4944:17;:26;4962:7;4944:26;;;;;;;;;;;;4923:47;;5088:14;5074:10;:28;5070:323;;5118:19;5140:12;:18;5153:4;5140:18;;;;;;;;;;;;;;;:34;5159:14;5140:34;;;;;;;;;;;;5118:56;;5222:11;5189:12;:18;5202:4;5189:18;;;;;;;;;;;;;;;:30;5208:10;5189:30;;;;;;;;;;;:44;;;;5338:10;5305:17;:30;5323:11;5305:30;;;;;;;;;;;:43;;;;5104:289;5070:323;5486:17;:26;5504:7;5486:26;;;;;;;;;;;5479:33;;;5529:12;:18;5542:4;5529:18;;;;;;;;;;;;;;;:34;5548:14;5529:34;;;;;;;;;;;5522:41;;;4681:889;;4600:970;;:::o;5858:1061::-;6107:22;6152:1;6132:10;:17;;;;:21;;;;:::i;:::-;6107:46;;6163:18;6184:15;:24;6200:7;6184:24;;;;;;;;;;;;6163:45;;6530:19;6552:10;6563:14;6552:26;;;;;;;;:::i;:::-;;;;;;;;;;6530:48;;6614:11;6589:10;6600;6589:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6724:10;6693:15;:28;6709:11;6693:28;;;;;;;;;;;:41;;;;6862:15;:24;6878:7;6862:24;;;;;;;;;;;6855:31;;;6896:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5929:990;;;5858:1061;:::o;3410:217::-;3494:14;3511:20;3528:2;3511:16;:20::i;:::-;3494:37;;3568:7;3541:12;:16;3554:2;3541:16;;;;;;;;;;;;;;;:24;3558:6;3541:24;;;;;;;;;;;:34;;;;3614:6;3585:17;:26;3603:7;3585:26;;;;;;;;;;;:35;;;;3484:143;3410:217;;:::o;718:377:15:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:20:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3455:5;3486:6;3480:13;3471:22;;3502:30;3526:5;3502:30;:::i;:::-;3401:137;;;;:::o;3544:139::-;3590:5;3628:6;3615:20;3606:29;;3644:33;3671:5;3644:33;:::i;:::-;3544:139;;;;:::o;3689:137::-;3734:5;3772:6;3759:20;3750:29;;3788:32;3814:5;3788:32;:::i;:::-;3689:137;;;;:::o;3832:141::-;3888:5;3919:6;3913:13;3904:22;;3935:32;3961:5;3935:32;:::i;:::-;3832:141;;;;:::o;3992:338::-;4047:5;4096:3;4089:4;4081:6;4077:17;4073:27;4063:122;;4104:79;;:::i;:::-;4063:122;4221:6;4208:20;4246:78;4320:3;4312:6;4305:4;4297:6;4293:17;4246:78;:::i;:::-;4237:87;;4053:277;3992:338;;;;:::o;4350:340::-;4406:5;4455:3;4448:4;4440:6;4436:17;4432:27;4422:122;;4463:79;;:::i;:::-;4422:122;4580:6;4567:20;4605:79;4680:3;4672:6;4665:4;4657:6;4653:17;4605:79;:::i;:::-;4596:88;;4412:278;4350:340;;;;:::o;4696:139::-;4742:5;4780:6;4767:20;4758:29;;4796:33;4823:5;4796:33;:::i;:::-;4696:139;;;;:::o;4841:143::-;4898:5;4929:6;4923:13;4914:22;;4945:33;4972:5;4945:33;:::i;:::-;4841:143;;;;:::o;4990:135::-;5034:5;5072:6;5059:20;5050:29;;5088:31;5113:5;5088:31;:::i;:::-;4990:135;;;;:::o;5131:329::-;5190:6;5239:2;5227:9;5218:7;5214:23;5210:32;5207:119;;;5245:79;;:::i;:::-;5207:119;5365:1;5390:53;5435:7;5426:6;5415:9;5411:22;5390:53;:::i;:::-;5380:63;;5336:117;5131:329;;;;:::o;5466:474::-;5534:6;5542;5591:2;5579:9;5570:7;5566:23;5562:32;5559:119;;;5597:79;;:::i;:::-;5559:119;5717:1;5742:53;5787:7;5778:6;5767:9;5763:22;5742:53;:::i;:::-;5732:63;;5688:117;5844:2;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5815:118;5466:474;;;;;:::o;5946:619::-;6023:6;6031;6039;6088:2;6076:9;6067:7;6063:23;6059:32;6056:119;;;6094:79;;:::i;:::-;6056:119;6214:1;6239:53;6284:7;6275:6;6264:9;6260:22;6239:53;:::i;:::-;6229:63;;6185:117;6341:2;6367:53;6412:7;6403:6;6392:9;6388:22;6367:53;:::i;:::-;6357:63;;6312:118;6469:2;6495:53;6540:7;6531:6;6520:9;6516:22;6495:53;:::i;:::-;6485:63;;6440:118;5946:619;;;;;:::o;6571:911::-;6666:6;6674;6682;6690;6698;6747:3;6735:9;6726:7;6722:23;6718:33;6715:120;;;6754:79;;:::i;:::-;6715:120;6874:1;6899:53;6944:7;6935:6;6924:9;6920:22;6899:53;:::i;:::-;6889:63;;6845:117;7001:2;7027:53;7072:7;7063:6;7052:9;7048:22;7027:53;:::i;:::-;7017:63;;6972:118;7129:2;7155:53;7200:7;7191:6;7180:9;7176:22;7155:53;:::i;:::-;7145:63;;7100:118;7257:2;7283:53;7328:7;7319:6;7308:9;7304:22;7283:53;:::i;:::-;7273:63;;7228:118;7385:3;7412:53;7457:7;7448:6;7437:9;7433:22;7412:53;:::i;:::-;7402:63;;7356:119;6571:911;;;;;;;;:::o;7488:943::-;7583:6;7591;7599;7607;7656:3;7644:9;7635:7;7631:23;7627:33;7624:120;;;7663:79;;:::i;:::-;7624:120;7783:1;7808:53;7853:7;7844:6;7833:9;7829:22;7808:53;:::i;:::-;7798:63;;7754:117;7910:2;7936:53;7981:7;7972:6;7961:9;7957:22;7936:53;:::i;:::-;7926:63;;7881:118;8038:2;8064:53;8109:7;8100:6;8089:9;8085:22;8064:53;:::i;:::-;8054:63;;8009:118;8194:2;8183:9;8179:18;8166:32;8225:18;8217:6;8214:30;8211:117;;;8247:79;;:::i;:::-;8211:117;8352:62;8406:7;8397:6;8386:9;8382:22;8352:62;:::i;:::-;8342:72;;8137:287;7488:943;;;;;;;:::o;8437:468::-;8502:6;8510;8559:2;8547:9;8538:7;8534:23;8530:32;8527:119;;;8565:79;;:::i;:::-;8527:119;8685:1;8710:53;8755:7;8746:6;8735:9;8731:22;8710:53;:::i;:::-;8700:63;;8656:117;8812:2;8838:50;8880:7;8871:6;8860:9;8856:22;8838:50;:::i;:::-;8828:60;;8783:115;8437:468;;;;;:::o;8911:1085::-;9013:6;9021;9029;9037;9045;9094:3;9082:9;9073:7;9069:23;9065:33;9062:120;;;9101:79;;:::i;:::-;9062:120;9221:1;9246:53;9291:7;9282:6;9271:9;9267:22;9246:53;:::i;:::-;9236:63;;9192:117;9376:2;9365:9;9361:18;9348:32;9407:18;9399:6;9396:30;9393:117;;;9429:79;;:::i;:::-;9393:117;9534:62;9588:7;9579:6;9568:9;9564:22;9534:62;:::i;:::-;9524:72;;9319:287;9645:2;9671:53;9716:7;9707:6;9696:9;9692:22;9671:53;:::i;:::-;9661:63;;9616:118;9773:2;9799:53;9844:7;9835:6;9824:9;9820:22;9799:53;:::i;:::-;9789:63;;9744:118;9901:3;9928:51;9971:7;9962:6;9951:9;9947:22;9928:51;:::i;:::-;9918:61;;9872:117;8911:1085;;;;;;;;:::o;10002:474::-;10070:6;10078;10127:2;10115:9;10106:7;10102:23;10098:32;10095:119;;;10133:79;;:::i;:::-;10095:119;10253:1;10278:53;10323:7;10314:6;10303:9;10299:22;10278:53;:::i;:::-;10268:63;;10224:117;10380:2;10406:53;10451:7;10442:6;10431:9;10427:22;10406:53;:::i;:::-;10396:63;;10351:118;10002:474;;;;;:::o;10482:1299::-;10611:6;10619;10627;10635;10643;10692:3;10680:9;10671:7;10667:23;10663:33;10660:120;;;10699:79;;:::i;:::-;10660:120;10819:1;10844:53;10889:7;10880:6;10869:9;10865:22;10844:53;:::i;:::-;10834:63;;10790:117;10946:2;10972:53;11017:7;11008:6;10997:9;10993:22;10972:53;:::i;:::-;10962:63;;10917:118;11102:2;11091:9;11087:18;11074:32;11133:18;11125:6;11122:30;11119:117;;;11155:79;;:::i;:::-;11119:117;11260:78;11330:7;11321:6;11310:9;11306:22;11260:78;:::i;:::-;11250:88;;11045:303;11387:2;11413:53;11458:7;11449:6;11438:9;11434:22;11413:53;:::i;:::-;11403:63;;11358:118;11543:3;11532:9;11528:19;11515:33;11575:18;11567:6;11564:30;11561:117;;;11597:79;;:::i;:::-;11561:117;11702:62;11756:7;11747:6;11736:9;11732:22;11702:62;:::i;:::-;11692:72;;11486:288;10482:1299;;;;;;;;:::o;11787:894::-;11905:6;11913;11962:2;11950:9;11941:7;11937:23;11933:32;11930:119;;;11968:79;;:::i;:::-;11930:119;12116:1;12105:9;12101:17;12088:31;12146:18;12138:6;12135:30;12132:117;;;12168:79;;:::i;:::-;12132:117;12273:78;12343:7;12334:6;12323:9;12319:22;12273:78;:::i;:::-;12263:88;;12059:302;12428:2;12417:9;12413:18;12400:32;12459:18;12451:6;12448:30;12445:117;;;12481:79;;:::i;:::-;12445:117;12586:78;12656:7;12647:6;12636:9;12632:22;12586:78;:::i;:::-;12576:88;;12371:303;11787:894;;;;;:::o;12687:345::-;12754:6;12803:2;12791:9;12782:7;12778:23;12774:32;12771:119;;;12809:79;;:::i;:::-;12771:119;12929:1;12954:61;13007:7;12998:6;12987:9;12983:22;12954:61;:::i;:::-;12944:71;;12900:125;12687:345;;;;:::o;13038:327::-;13096:6;13145:2;13133:9;13124:7;13120:23;13116:32;13113:119;;;13151:79;;:::i;:::-;13113:119;13271:1;13296:52;13340:7;13331:6;13320:9;13316:22;13296:52;:::i;:::-;13286:62;;13242:116;13038:327;;;;:::o;13371:349::-;13440:6;13489:2;13477:9;13468:7;13464:23;13460:32;13457:119;;;13495:79;;:::i;:::-;13457:119;13615:1;13640:63;13695:7;13686:6;13675:9;13671:22;13640:63;:::i;:::-;13630:73;;13586:127;13371:349;;;;:::o;13726:652::-;13803:6;13811;13860:2;13848:9;13839:7;13835:23;13831:32;13828:119;;;13866:79;;:::i;:::-;13828:119;14014:1;14003:9;13999:17;13986:31;14044:18;14036:6;14033:30;14030:117;;;14066:79;;:::i;:::-;14030:117;14171:62;14225:7;14216:6;14205:9;14201:22;14171:62;:::i;:::-;14161:72;;13957:286;14282:2;14308:53;14353:7;14344:6;14333:9;14329:22;14308:53;:::i;:::-;14298:63;;14253:118;13726:652;;;;;:::o;14384:509::-;14453:6;14502:2;14490:9;14481:7;14477:23;14473:32;14470:119;;;14508:79;;:::i;:::-;14470:119;14656:1;14645:9;14641:17;14628:31;14686:18;14678:6;14675:30;14672:117;;;14708:79;;:::i;:::-;14672:117;14813:63;14868:7;14859:6;14848:9;14844:22;14813:63;:::i;:::-;14803:73;;14599:287;14384:509;;;;:::o;14899:329::-;14958:6;15007:2;14995:9;14986:7;14982:23;14978:32;14975:119;;;15013:79;;:::i;:::-;14975:119;15133:1;15158:53;15203:7;15194:6;15183:9;15179:22;15158:53;:::i;:::-;15148:63;;15104:117;14899:329;;;;:::o;15234:351::-;15304:6;15353:2;15341:9;15332:7;15328:23;15324:32;15321:119;;;15359:79;;:::i;:::-;15321:119;15479:1;15504:64;15560:7;15551:6;15540:9;15536:22;15504:64;:::i;:::-;15494:74;;15450:128;15234:351;;;;:::o;15591:179::-;15660:10;15681:46;15723:3;15715:6;15681:46;:::i;:::-;15759:4;15754:3;15750:14;15736:28;;15591:179;;;;:::o;15776:195::-;15853:10;15874:54;15924:3;15916:6;15874:54;:::i;:::-;15960:4;15955:3;15951:14;15937:28;;15776:195;;;;:::o;15977:142::-;16080:32;16106:5;16080:32;:::i;:::-;16075:3;16068:45;15977:142;;:::o;16125:118::-;16212:24;16230:5;16212:24;:::i;:::-;16207:3;16200:37;16125:118;;:::o;16249:157::-;16354:45;16374:24;16392:5;16374:24;:::i;:::-;16354:45;:::i;:::-;16349:3;16342:58;16249:157;;:::o;16442:732::-;16561:3;16590:54;16638:5;16590:54;:::i;:::-;16660:86;16739:6;16734:3;16660:86;:::i;:::-;16653:93;;16770:56;16820:5;16770:56;:::i;:::-;16849:7;16880:1;16865:284;16890:6;16887:1;16884:13;16865:284;;;16966:6;16960:13;16993:63;17052:3;17037:13;16993:63;:::i;:::-;16986:70;;17079:60;17132:6;17079:60;:::i;:::-;17069:70;;16925:224;16912:1;16909;16905:9;16900:14;;16865:284;;;16869:14;17165:3;17158:10;;16566:608;;;16442:732;;;;:::o;17210:776::-;17347:3;17376:54;17424:5;17376:54;:::i;:::-;17446:104;17543:6;17538:3;17446:104;:::i;:::-;17439:111;;17574:56;17624:5;17574:56;:::i;:::-;17653:7;17684:1;17669:292;17694:6;17691:1;17688:13;17669:292;;;17770:6;17764:13;17797:71;17864:3;17849:13;17797:71;:::i;:::-;17790:78;;17891:60;17944:6;17891:60;:::i;:::-;17881:70;;17729:232;17716:1;17713;17709:9;17704:14;;17669:292;;;17673:14;17977:3;17970:10;;17352:634;;;17210:776;;;;:::o;17992:109::-;18073:21;18088:5;18073:21;:::i;:::-;18068:3;18061:34;17992:109;;:::o;18107:118::-;18194:24;18212:5;18194:24;:::i;:::-;18189:3;18182:37;18107:118;;:::o;18231:157::-;18336:45;18356:24;18374:5;18356:24;:::i;:::-;18336:45;:::i;:::-;18331:3;18324:58;18231:157;;:::o;18394:360::-;18480:3;18508:38;18540:5;18508:38;:::i;:::-;18562:70;18625:6;18620:3;18562:70;:::i;:::-;18555:77;;18641:52;18686:6;18681:3;18674:4;18667:5;18663:16;18641:52;:::i;:::-;18718:29;18740:6;18718:29;:::i;:::-;18713:3;18709:39;18702:46;;18484:270;18394:360;;;;:::o;18760:373::-;18864:3;18892:38;18924:5;18892:38;:::i;:::-;18946:88;19027:6;19022:3;18946:88;:::i;:::-;18939:95;;19043:52;19088:6;19083:3;19076:4;19069:5;19065:16;19043:52;:::i;:::-;19120:6;19115:3;19111:16;19104:23;;18868:265;18760:373;;;;:::o;19139:364::-;19227:3;19255:39;19288:5;19255:39;:::i;:::-;19310:71;19374:6;19369:3;19310:71;:::i;:::-;19303:78;;19390:52;19435:6;19430:3;19423:4;19416:5;19412:16;19390:52;:::i;:::-;19467:29;19489:6;19467:29;:::i;:::-;19462:3;19458:39;19451:46;;19231:272;19139:364;;;;:::o;19509:377::-;19615:3;19643:39;19676:5;19643:39;:::i;:::-;19698:89;19780:6;19775:3;19698:89;:::i;:::-;19691:96;;19796:52;19841:6;19836:3;19829:4;19822:5;19818:16;19796:52;:::i;:::-;19873:6;19868:3;19864:16;19857:23;;19619:267;19509:377;;;;:::o;19892:366::-;20034:3;20055:67;20119:2;20114:3;20055:67;:::i;:::-;20048:74;;20131:93;20220:3;20131:93;:::i;:::-;20249:2;20244:3;20240:12;20233:19;;19892:366;;;:::o;20264:::-;20406:3;20427:67;20491:2;20486:3;20427:67;:::i;:::-;20420:74;;20503:93;20592:3;20503:93;:::i;:::-;20621:2;20616:3;20612:12;20605:19;;20264:366;;;:::o;20636:::-;20778:3;20799:67;20863:2;20858:3;20799:67;:::i;:::-;20792:74;;20875:93;20964:3;20875:93;:::i;:::-;20993:2;20988:3;20984:12;20977:19;;20636:366;;;:::o;21008:::-;21150:3;21171:67;21235:2;21230:3;21171:67;:::i;:::-;21164:74;;21247:93;21336:3;21247:93;:::i;:::-;21365:2;21360:3;21356:12;21349:19;;21008:366;;;:::o;21380:::-;21522:3;21543:67;21607:2;21602:3;21543:67;:::i;:::-;21536:74;;21619:93;21708:3;21619:93;:::i;:::-;21737:2;21732:3;21728:12;21721:19;;21380:366;;;:::o;21752:::-;21894:3;21915:67;21979:2;21974:3;21915:67;:::i;:::-;21908:74;;21991:93;22080:3;21991:93;:::i;:::-;22109:2;22104:3;22100:12;22093:19;;21752:366;;;:::o;22124:::-;22266:3;22287:67;22351:2;22346:3;22287:67;:::i;:::-;22280:74;;22363:93;22452:3;22363:93;:::i;:::-;22481:2;22476:3;22472:12;22465:19;;22124:366;;;:::o;22496:400::-;22656:3;22677:84;22759:1;22754:3;22677:84;:::i;:::-;22670:91;;22770:93;22859:3;22770:93;:::i;:::-;22888:1;22883:3;22879:11;22872:18;;22496:400;;;:::o;22902:366::-;23044:3;23065:67;23129:2;23124:3;23065:67;:::i;:::-;23058:74;;23141:93;23230:3;23141:93;:::i;:::-;23259:2;23254:3;23250:12;23243:19;;22902:366;;;:::o;23274:::-;23416:3;23437:67;23501:2;23496:3;23437:67;:::i;:::-;23430:74;;23513:93;23602:3;23513:93;:::i;:::-;23631:2;23626:3;23622:12;23615:19;;23274:366;;;:::o;23646:::-;23788:3;23809:67;23873:2;23868:3;23809:67;:::i;:::-;23802:74;;23885:93;23974:3;23885:93;:::i;:::-;24003:2;23998:3;23994:12;23987:19;;23646:366;;;:::o;24018:::-;24160:3;24181:67;24245:2;24240:3;24181:67;:::i;:::-;24174:74;;24257:93;24346:3;24257:93;:::i;:::-;24375:2;24370:3;24366:12;24359:19;;24018:366;;;:::o;24390:::-;24532:3;24553:67;24617:2;24612:3;24553:67;:::i;:::-;24546:74;;24629:93;24718:3;24629:93;:::i;:::-;24747:2;24742:3;24738:12;24731:19;;24390:366;;;:::o;24762:::-;24904:3;24925:67;24989:2;24984:3;24925:67;:::i;:::-;24918:74;;25001:93;25090:3;25001:93;:::i;:::-;25119:2;25114:3;25110:12;25103:19;;24762:366;;;:::o;25134:::-;25276:3;25297:67;25361:2;25356:3;25297:67;:::i;:::-;25290:74;;25373:93;25462:3;25373:93;:::i;:::-;25491:2;25486:3;25482:12;25475:19;;25134:366;;;:::o;25506:::-;25648:3;25669:67;25733:2;25728:3;25669:67;:::i;:::-;25662:74;;25745:93;25834:3;25745:93;:::i;:::-;25863:2;25858:3;25854:12;25847:19;;25506:366;;;:::o;25878:::-;26020:3;26041:67;26105:2;26100:3;26041:67;:::i;:::-;26034:74;;26117:93;26206:3;26117:93;:::i;:::-;26235:2;26230:3;26226:12;26219:19;;25878:366;;;:::o;26250:::-;26392:3;26413:67;26477:2;26472:3;26413:67;:::i;:::-;26406:74;;26489:93;26578:3;26489:93;:::i;:::-;26607:2;26602:3;26598:12;26591:19;;26250:366;;;:::o;26622:::-;26764:3;26785:67;26849:2;26844:3;26785:67;:::i;:::-;26778:74;;26861:93;26950:3;26861:93;:::i;:::-;26979:2;26974:3;26970:12;26963:19;;26622:366;;;:::o;26994:::-;27136:3;27157:67;27221:2;27216:3;27157:67;:::i;:::-;27150:74;;27233:93;27322:3;27233:93;:::i;:::-;27351:2;27346:3;27342:12;27335:19;;26994:366;;;:::o;27366:::-;27508:3;27529:67;27593:2;27588:3;27529:67;:::i;:::-;27522:74;;27605:93;27694:3;27605:93;:::i;:::-;27723:2;27718:3;27714:12;27707:19;;27366:366;;;:::o;27738:::-;27880:3;27901:67;27965:2;27960:3;27901:67;:::i;:::-;27894:74;;27977:93;28066:3;27977:93;:::i;:::-;28095:2;28090:3;28086:12;28079:19;;27738:366;;;:::o;28110:::-;28252:3;28273:67;28337:2;28332:3;28273:67;:::i;:::-;28266:74;;28349:93;28438:3;28349:93;:::i;:::-;28467:2;28462:3;28458:12;28451:19;;28110:366;;;:::o;28482:::-;28624:3;28645:67;28709:2;28704:3;28645:67;:::i;:::-;28638:74;;28721:93;28810:3;28721:93;:::i;:::-;28839:2;28834:3;28830:12;28823:19;;28482:366;;;:::o;28854:::-;28996:3;29017:67;29081:2;29076:3;29017:67;:::i;:::-;29010:74;;29093:93;29182:3;29093:93;:::i;:::-;29211:2;29206:3;29202:12;29195:19;;28854:366;;;:::o;29226:::-;29368:3;29389:67;29453:2;29448:3;29389:67;:::i;:::-;29382:74;;29465:93;29554:3;29465:93;:::i;:::-;29583:2;29578:3;29574:12;29567:19;;29226:366;;;:::o;29598:::-;29740:3;29761:67;29825:2;29820:3;29761:67;:::i;:::-;29754:74;;29837:93;29926:3;29837:93;:::i;:::-;29955:2;29950:3;29946:12;29939:19;;29598:366;;;:::o;29970:::-;30112:3;30133:67;30197:2;30192:3;30133:67;:::i;:::-;30126:74;;30209:93;30298:3;30209:93;:::i;:::-;30327:2;30322:3;30318:12;30311:19;;29970:366;;;:::o;30342:::-;30484:3;30505:67;30569:2;30564:3;30505:67;:::i;:::-;30498:74;;30581:93;30670:3;30581:93;:::i;:::-;30699:2;30694:3;30690:12;30683:19;;30342:366;;;:::o;30714:400::-;30874:3;30895:84;30977:1;30972:3;30895:84;:::i;:::-;30888:91;;30988:93;31077:3;30988:93;:::i;:::-;31106:1;31101:3;31097:11;31090:18;;30714:400;;;:::o;31120:108::-;31197:24;31215:5;31197:24;:::i;:::-;31192:3;31185:37;31120:108;;:::o;31234:118::-;31321:24;31339:5;31321:24;:::i;:::-;31316:3;31309:37;31234:118;;:::o;31358:116::-;31443:24;31461:5;31443:24;:::i;:::-;31438:3;31431:37;31358:116;;:::o;31480:112::-;31563:22;31579:5;31563:22;:::i;:::-;31558:3;31551:35;31480:112;;:::o;31598:335::-;31760:3;31782:125;31903:3;31894:6;31782:125;:::i;:::-;31775:132;;31924:3;31917:10;;31598:335;;;;:::o;31939:271::-;32069:3;32091:93;32180:3;32171:6;32091:93;:::i;:::-;32084:100;;32201:3;32194:10;;31939:271;;;;:::o;32216:412::-;32374:3;32396:93;32485:3;32476:6;32396:93;:::i;:::-;32389:100;;32499:75;32570:3;32561:6;32499:75;:::i;:::-;32599:2;32594:3;32590:12;32583:19;;32619:3;32612:10;;32216:412;;;;;:::o;32634:435::-;32814:3;32836:95;32927:3;32918:6;32836:95;:::i;:::-;32829:102;;32948:95;33039:3;33030:6;32948:95;:::i;:::-;32941:102;;33060:3;33053:10;;32634:435;;;;;:::o;33075:701::-;33356:3;33378:95;33469:3;33460:6;33378:95;:::i;:::-;33371:102;;33490:95;33581:3;33572:6;33490:95;:::i;:::-;33483:102;;33602:148;33746:3;33602:148;:::i;:::-;33595:155;;33767:3;33760:10;;33075:701;;;;;:::o;33782:663::-;34023:3;34045:148;34189:3;34045:148;:::i;:::-;34038:155;;34203:75;34274:3;34265:6;34203:75;:::i;:::-;34303:2;34298:3;34294:12;34287:19;;34316:75;34387:3;34378:6;34316:75;:::i;:::-;34416:2;34411:3;34407:12;34400:19;;34436:3;34429:10;;33782:663;;;;;:::o;34451:222::-;34544:4;34582:2;34571:9;34567:18;34559:26;;34595:71;34663:1;34652:9;34648:17;34639:6;34595:71;:::i;:::-;34451:222;;;;:::o;34679:561::-;34862:4;34900:2;34889:9;34885:18;34877:26;;34913:71;34981:1;34970:9;34966:17;34957:6;34913:71;:::i;:::-;34994:88;35078:2;35067:9;35063:18;35054:6;34994:88;:::i;:::-;35129:9;35123:4;35119:20;35114:2;35103:9;35099:18;35092:48;35157:76;35228:4;35219:6;35157:76;:::i;:::-;35149:84;;34679:561;;;;;;:::o;35246:640::-;35441:4;35479:3;35468:9;35464:19;35456:27;;35493:71;35561:1;35550:9;35546:17;35537:6;35493:71;:::i;:::-;35574:72;35642:2;35631:9;35627:18;35618:6;35574:72;:::i;:::-;35656;35724:2;35713:9;35709:18;35700:6;35656:72;:::i;:::-;35775:9;35769:4;35765:20;35760:2;35749:9;35745:18;35738:48;35803:76;35874:4;35865:6;35803:76;:::i;:::-;35795:84;;35246:640;;;;;;;:::o;35892:332::-;36013:4;36051:2;36040:9;36036:18;36028:26;;36064:71;36132:1;36121:9;36117:17;36108:6;36064:71;:::i;:::-;36145:72;36213:2;36202:9;36198:18;36189:6;36145:72;:::i;:::-;35892:332;;;;;:::o;36230:373::-;36373:4;36411:2;36400:9;36396:18;36388:26;;36460:9;36454:4;36450:20;36446:1;36435:9;36431:17;36424:47;36488:108;36591:4;36582:6;36488:108;:::i;:::-;36480:116;;36230:373;;;;:::o;36609:210::-;36696:4;36734:2;36723:9;36719:18;36711:26;;36747:65;36809:1;36798:9;36794:17;36785:6;36747:65;:::i;:::-;36609:210;;;;:::o;36825:222::-;36918:4;36956:2;36945:9;36941:18;36933:26;;36969:71;37037:1;37026:9;37022:17;37013:6;36969:71;:::i;:::-;36825:222;;;;:::o;37053:553::-;37230:4;37268:3;37257:9;37253:19;37245:27;;37282:71;37350:1;37339:9;37335:17;37326:6;37282:71;:::i;:::-;37363:72;37431:2;37420:9;37416:18;37407:6;37363:72;:::i;:::-;37445;37513:2;37502:9;37498:18;37489:6;37445:72;:::i;:::-;37527;37595:2;37584:9;37580:18;37571:6;37527:72;:::i;:::-;37053:553;;;;;;;:::o;37612:545::-;37785:4;37823:3;37812:9;37808:19;37800:27;;37837:71;37905:1;37894:9;37890:17;37881:6;37837:71;:::i;:::-;37918:68;37982:2;37971:9;37967:18;37958:6;37918:68;:::i;:::-;37996:72;38064:2;38053:9;38049:18;38040:6;37996:72;:::i;:::-;38078;38146:2;38135:9;38131:18;38122:6;38078:72;:::i;:::-;37612:545;;;;;;;:::o;38163:309::-;38274:4;38312:2;38301:9;38297:18;38289:26;;38361:9;38355:4;38351:20;38347:1;38336:9;38332:17;38325:47;38389:76;38460:4;38451:6;38389:76;:::i;:::-;38381:84;;38163:309;;;;:::o;38478:313::-;38591:4;38629:2;38618:9;38614:18;38606:26;;38678:9;38672:4;38668:20;38664:1;38653:9;38649:17;38642:47;38706:78;38779:4;38770:6;38706:78;:::i;:::-;38698:86;;38478:313;;;;:::o;38797:419::-;38963:4;39001:2;38990:9;38986:18;38978:26;;39050:9;39044:4;39040:20;39036:1;39025:9;39021:17;39014:47;39078:131;39204:4;39078:131;:::i;:::-;39070:139;;38797:419;;;:::o;39222:::-;39388:4;39426:2;39415:9;39411:18;39403:26;;39475:9;39469:4;39465:20;39461:1;39450:9;39446:17;39439:47;39503:131;39629:4;39503:131;:::i;:::-;39495:139;;39222:419;;;:::o;39647:::-;39813:4;39851:2;39840:9;39836:18;39828:26;;39900:9;39894:4;39890:20;39886:1;39875:9;39871:17;39864:47;39928:131;40054:4;39928:131;:::i;:::-;39920:139;;39647:419;;;:::o;40072:::-;40238:4;40276:2;40265:9;40261:18;40253:26;;40325:9;40319:4;40315:20;40311:1;40300:9;40296:17;40289:47;40353:131;40479:4;40353:131;:::i;:::-;40345:139;;40072:419;;;:::o;40497:::-;40663:4;40701:2;40690:9;40686:18;40678:26;;40750:9;40744:4;40740:20;40736:1;40725:9;40721:17;40714:47;40778:131;40904:4;40778:131;:::i;:::-;40770:139;;40497:419;;;:::o;40922:::-;41088:4;41126:2;41115:9;41111:18;41103:26;;41175:9;41169:4;41165:20;41161:1;41150:9;41146:17;41139:47;41203:131;41329:4;41203:131;:::i;:::-;41195:139;;40922:419;;;:::o;41347:::-;41513:4;41551:2;41540:9;41536:18;41528:26;;41600:9;41594:4;41590:20;41586:1;41575:9;41571:17;41564:47;41628:131;41754:4;41628:131;:::i;:::-;41620:139;;41347:419;;;:::o;41772:::-;41938:4;41976:2;41965:9;41961:18;41953:26;;42025:9;42019:4;42015:20;42011:1;42000:9;41996:17;41989:47;42053:131;42179:4;42053:131;:::i;:::-;42045:139;;41772:419;;;:::o;42197:::-;42363:4;42401:2;42390:9;42386:18;42378:26;;42450:9;42444:4;42440:20;42436:1;42425:9;42421:17;42414:47;42478:131;42604:4;42478:131;:::i;:::-;42470:139;;42197:419;;;:::o;42622:::-;42788:4;42826:2;42815:9;42811:18;42803:26;;42875:9;42869:4;42865:20;42861:1;42850:9;42846:17;42839:47;42903:131;43029:4;42903:131;:::i;:::-;42895:139;;42622:419;;;:::o;43047:::-;43213:4;43251:2;43240:9;43236:18;43228:26;;43300:9;43294:4;43290:20;43286:1;43275:9;43271:17;43264:47;43328:131;43454:4;43328:131;:::i;:::-;43320:139;;43047:419;;;:::o;43472:::-;43638:4;43676:2;43665:9;43661:18;43653:26;;43725:9;43719:4;43715:20;43711:1;43700:9;43696:17;43689:47;43753:131;43879:4;43753:131;:::i;:::-;43745:139;;43472:419;;;:::o;43897:::-;44063:4;44101:2;44090:9;44086:18;44078:26;;44150:9;44144:4;44140:20;44136:1;44125:9;44121:17;44114:47;44178:131;44304:4;44178:131;:::i;:::-;44170:139;;43897:419;;;:::o;44322:::-;44488:4;44526:2;44515:9;44511:18;44503:26;;44575:9;44569:4;44565:20;44561:1;44550:9;44546:17;44539:47;44603:131;44729:4;44603:131;:::i;:::-;44595:139;;44322:419;;;:::o;44747:::-;44913:4;44951:2;44940:9;44936:18;44928:26;;45000:9;44994:4;44990:20;44986:1;44975:9;44971:17;44964:47;45028:131;45154:4;45028:131;:::i;:::-;45020:139;;44747:419;;;:::o;45172:::-;45338:4;45376:2;45365:9;45361:18;45353:26;;45425:9;45419:4;45415:20;45411:1;45400:9;45396:17;45389:47;45453:131;45579:4;45453:131;:::i;:::-;45445:139;;45172:419;;;:::o;45597:::-;45763:4;45801:2;45790:9;45786:18;45778:26;;45850:9;45844:4;45840:20;45836:1;45825:9;45821:17;45814:47;45878:131;46004:4;45878:131;:::i;:::-;45870:139;;45597:419;;;:::o;46022:::-;46188:4;46226:2;46215:9;46211:18;46203:26;;46275:9;46269:4;46265:20;46261:1;46250:9;46246:17;46239:47;46303:131;46429:4;46303:131;:::i;:::-;46295:139;;46022:419;;;:::o;46447:::-;46613:4;46651:2;46640:9;46636:18;46628:26;;46700:9;46694:4;46690:20;46686:1;46675:9;46671:17;46664:47;46728:131;46854:4;46728:131;:::i;:::-;46720:139;;46447:419;;;:::o;46872:::-;47038:4;47076:2;47065:9;47061:18;47053:26;;47125:9;47119:4;47115:20;47111:1;47100:9;47096:17;47089:47;47153:131;47279:4;47153:131;:::i;:::-;47145:139;;46872:419;;;:::o;47297:::-;47463:4;47501:2;47490:9;47486:18;47478:26;;47550:9;47544:4;47540:20;47536:1;47525:9;47521:17;47514:47;47578:131;47704:4;47578:131;:::i;:::-;47570:139;;47297:419;;;:::o;47722:::-;47888:4;47926:2;47915:9;47911:18;47903:26;;47975:9;47969:4;47965:20;47961:1;47950:9;47946:17;47939:47;48003:131;48129:4;48003:131;:::i;:::-;47995:139;;47722:419;;;:::o;48147:::-;48313:4;48351:2;48340:9;48336:18;48328:26;;48400:9;48394:4;48390:20;48386:1;48375:9;48371:17;48364:47;48428:131;48554:4;48428:131;:::i;:::-;48420:139;;48147:419;;;:::o;48572:::-;48738:4;48776:2;48765:9;48761:18;48753:26;;48825:9;48819:4;48815:20;48811:1;48800:9;48796:17;48789:47;48853:131;48979:4;48853:131;:::i;:::-;48845:139;;48572:419;;;:::o;48997:::-;49163:4;49201:2;49190:9;49186:18;49178:26;;49250:9;49244:4;49240:20;49236:1;49225:9;49221:17;49214:47;49278:131;49404:4;49278:131;:::i;:::-;49270:139;;48997:419;;;:::o;49422:::-;49588:4;49626:2;49615:9;49611:18;49603:26;;49675:9;49669:4;49665:20;49661:1;49650:9;49646:17;49639:47;49703:131;49829:4;49703:131;:::i;:::-;49695:139;;49422:419;;;:::o;49847:::-;50013:4;50051:2;50040:9;50036:18;50028:26;;50100:9;50094:4;50090:20;50086:1;50075:9;50071:17;50064:47;50128:131;50254:4;50128:131;:::i;:::-;50120:139;;49847:419;;;:::o;50272:::-;50438:4;50476:2;50465:9;50461:18;50453:26;;50525:9;50519:4;50515:20;50511:1;50500:9;50496:17;50489:47;50553:131;50679:4;50553:131;:::i;:::-;50545:139;;50272:419;;;:::o;50697:222::-;50790:4;50828:2;50817:9;50813:18;50805:26;;50841:71;50909:1;50898:9;50894:17;50885:6;50841:71;:::i;:::-;50697:222;;;;:::o;50925:332::-;51046:4;51084:2;51073:9;51069:18;51061:26;;51097:71;51165:1;51154:9;51150:17;51141:6;51097:71;:::i;:::-;51178:72;51246:2;51235:9;51231:18;51222:6;51178:72;:::i;:::-;50925:332;;;;;:::o;51263:129::-;51297:6;51324:20;;:::i;:::-;51314:30;;51353:33;51381:4;51373:6;51353:33;:::i;:::-;51263:129;;;:::o;51398:75::-;51431:6;51464:2;51458:9;51448:19;;51398:75;:::o;51479:311::-;51556:4;51646:18;51638:6;51635:30;51632:56;;;51668:18;;:::i;:::-;51632:56;51718:4;51710:6;51706:17;51698:25;;51778:4;51772;51768:15;51760:23;;51479:311;;;:::o;51796:::-;51873:4;51963:18;51955:6;51952:30;51949:56;;;51985:18;;:::i;:::-;51949:56;52035:4;52027:6;52023:17;52015:25;;52095:4;52089;52085:15;52077:23;;51796:311;;;:::o;52113:307::-;52174:4;52264:18;52256:6;52253:30;52250:56;;;52286:18;;:::i;:::-;52250:56;52324:29;52346:6;52324:29;:::i;:::-;52316:37;;52408:4;52402;52398:15;52390:23;;52113:307;;;:::o;52426:308::-;52488:4;52578:18;52570:6;52567:30;52564:56;;;52600:18;;:::i;:::-;52564:56;52638:29;52660:6;52638:29;:::i;:::-;52630:37;;52722:4;52716;52712:15;52704:23;;52426:308;;;:::o;52740:132::-;52807:4;52830:3;52822:11;;52860:4;52855:3;52851:14;52843:22;;52740:132;;;:::o;52878:114::-;52945:6;52979:5;52973:12;52963:22;;52878:114;;;:::o;52998:98::-;53049:6;53083:5;53077:12;53067:22;;52998:98;;;:::o;53102:99::-;53154:6;53188:5;53182:12;53172:22;;53102:99;;;:::o;53207:113::-;53277:4;53309;53304:3;53300:14;53292:22;;53207:113;;;:::o;53326:184::-;53425:11;53459:6;53454:3;53447:19;53499:4;53494:3;53490:14;53475:29;;53326:184;;;;:::o;53516:163::-;53633:11;53670:3;53655:18;;53516:163;;;;:::o;53685:168::-;53768:11;53802:6;53797:3;53790:19;53842:4;53837:3;53833:14;53818:29;;53685:168;;;;:::o;53859:147::-;53960:11;53997:3;53982:18;;53859:147;;;;:::o;54012:169::-;54096:11;54130:6;54125:3;54118:19;54170:4;54165:3;54161:14;54146:29;;54012:169;;;;:::o;54187:148::-;54289:11;54326:3;54311:18;;54187:148;;;;:::o;54341:305::-;54381:3;54400:20;54418:1;54400:20;:::i;:::-;54395:25;;54434:20;54452:1;54434:20;:::i;:::-;54429:25;;54588:1;54520:66;54516:74;54513:1;54510:81;54507:107;;;54594:18;;:::i;:::-;54507:107;54638:1;54635;54631:9;54624:16;;54341:305;;;;:::o;54652:185::-;54692:1;54709:20;54727:1;54709:20;:::i;:::-;54704:25;;54743:20;54761:1;54743:20;:::i;:::-;54738:25;;54782:1;54772:35;;54787:18;;:::i;:::-;54772:35;54829:1;54826;54822:9;54817:14;;54652:185;;;;:::o;54843:348::-;54883:7;54906:20;54924:1;54906:20;:::i;:::-;54901:25;;54940:20;54958:1;54940:20;:::i;:::-;54935:25;;55128:1;55060:66;55056:74;55053:1;55050:81;55045:1;55038:9;55031:17;55027:105;55024:131;;;55135:18;;:::i;:::-;55024:131;55183:1;55180;55176:9;55165:20;;54843:348;;;;:::o;55197:191::-;55237:4;55257:20;55275:1;55257:20;:::i;:::-;55252:25;;55291:20;55309:1;55291:20;:::i;:::-;55286:25;;55330:1;55327;55324:8;55321:34;;;55335:18;;:::i;:::-;55321:34;55380:1;55377;55373:9;55365:17;;55197:191;;;;:::o;55394:96::-;55431:7;55460:24;55478:5;55460:24;:::i;:::-;55449:35;;55394:96;;;:::o;55496:104::-;55541:7;55570:24;55588:5;55570:24;:::i;:::-;55559:35;;55496:104;;;:::o;55606:90::-;55640:7;55683:5;55676:13;55669:21;55658:32;;55606:90;;;:::o;55702:77::-;55739:7;55768:5;55757:16;;55702:77;;;:::o;55785:149::-;55821:7;55861:66;55854:5;55850:78;55839:89;;55785:149;;;:::o;55940:126::-;55977:7;56017:42;56010:5;56006:54;55995:65;;55940:126;;;:::o;56072:77::-;56109:7;56138:5;56127:16;;56072:77;;;:::o;56155:86::-;56190:7;56230:4;56223:5;56219:16;56208:27;;56155:86;;;:::o;56247:154::-;56331:6;56326:3;56321;56308:30;56393:1;56384:6;56379:3;56375:16;56368:27;56247:154;;;:::o;56407:307::-;56475:1;56485:113;56499:6;56496:1;56493:13;56485:113;;;56584:1;56579:3;56575:11;56569:18;56565:1;56560:3;56556:11;56549:39;56521:2;56518:1;56514:10;56509:15;;56485:113;;;56616:6;56613:1;56610:13;56607:101;;;56696:1;56687:6;56682:3;56678:16;56671:27;56607:101;56456:258;56407:307;;;:::o;56720:171::-;56759:3;56782:24;56800:5;56782:24;:::i;:::-;56773:33;;56828:4;56821:5;56818:15;56815:41;;;56836:18;;:::i;:::-;56815:41;56883:1;56876:5;56872:13;56865:20;;56720:171;;;:::o;56897:320::-;56941:6;56978:1;56972:4;56968:12;56958:22;;57025:1;57019:4;57015:12;57046:18;57036:81;;57102:4;57094:6;57090:17;57080:27;;57036:81;57164:2;57156:6;57153:14;57133:18;57130:38;57127:84;;;57183:18;;:::i;:::-;57127:84;56948:269;56897:320;;;:::o;57223:281::-;57306:27;57328:4;57306:27;:::i;:::-;57298:6;57294:40;57436:6;57424:10;57421:22;57400:18;57388:10;57385:34;57382:62;57379:88;;;57447:18;;:::i;:::-;57379:88;57487:10;57483:2;57476:22;57266:238;57223:281;;:::o;57510:233::-;57549:3;57572:24;57590:5;57572:24;:::i;:::-;57563:33;;57618:66;57611:5;57608:77;57605:103;;;57688:18;;:::i;:::-;57605:103;57735:1;57728:5;57724:13;57717:20;;57510:233;;;:::o;57749:100::-;57788:7;57817:26;57837:5;57817:26;:::i;:::-;57806:37;;57749:100;;;:::o;57855:79::-;57894:7;57923:5;57912:16;;57855:79;;;:::o;57940:94::-;57979:7;58008:20;58022:5;58008:20;:::i;:::-;57997:31;;57940:94;;;:::o;58040:176::-;58072:1;58089:20;58107:1;58089:20;:::i;:::-;58084:25;;58123:20;58141:1;58123:20;:::i;:::-;58118:25;;58162:1;58152:35;;58167:18;;:::i;:::-;58152:35;58208:1;58205;58201:9;58196:14;;58040:176;;;;:::o;58222:180::-;58270:77;58267:1;58260:88;58367:4;58364:1;58357:15;58391:4;58388:1;58381:15;58408:180;58456:77;58453:1;58446:88;58553:4;58550:1;58543:15;58577:4;58574:1;58567:15;58594:180;58642:77;58639:1;58632:88;58739:4;58736:1;58729:15;58763:4;58760:1;58753:15;58780:180;58828:77;58825:1;58818:88;58925:4;58922:1;58915:15;58949:4;58946:1;58939:15;58966:180;59014:77;59011:1;59004:88;59111:4;59108:1;59101:15;59135:4;59132:1;59125:15;59152:180;59200:77;59197:1;59190:88;59297:4;59294:1;59287:15;59321:4;59318:1;59311:15;59338:117;59447:1;59444;59437:12;59461:117;59570:1;59567;59560:12;59584:117;59693:1;59690;59683:12;59707:117;59816:1;59813;59806:12;59830:117;59939:1;59936;59929:12;59953:102;59994:6;60045:2;60041:7;60036:2;60029:5;60025:14;60021:28;60011:38;;59953:102;;;:::o;60061:94::-;60094:8;60142:5;60138:2;60134:14;60113:35;;60061:94;;;:::o;60161:168::-;60301:20;60297:1;60289:6;60285:14;60278:44;60161:168;:::o;60335:182::-;60475:34;60471:1;60463:6;60459:14;60452:58;60335:182;:::o;60523:230::-;60663:34;60659:1;60651:6;60647:14;60640:58;60732:13;60727:2;60719:6;60715:15;60708:38;60523:230;:::o;60759:237::-;60899:34;60895:1;60887:6;60883:14;60876:58;60968:20;60963:2;60955:6;60951:15;60944:45;60759:237;:::o;61002:225::-;61142:34;61138:1;61130:6;61126:14;61119:58;61211:8;61206:2;61198:6;61194:15;61187:33;61002:225;:::o;61233:178::-;61373:30;61369:1;61361:6;61357:14;61350:54;61233:178;:::o;61417:::-;61557:30;61553:1;61545:6;61541:14;61534:54;61417:178;:::o;61601:214::-;61741:66;61737:1;61729:6;61725:14;61718:90;61601:214;:::o;61821:170::-;61961:22;61957:1;61949:6;61945:14;61938:46;61821:170;:::o;61997:223::-;62137:34;62133:1;62125:6;62121:14;62114:58;62206:6;62201:2;62193:6;62189:15;62182:31;61997:223;:::o;62226:175::-;62366:27;62362:1;62354:6;62350:14;62343:51;62226:175;:::o;62407:160::-;62547:12;62543:1;62535:6;62531:14;62524:36;62407:160;:::o;62573:231::-;62713:34;62709:1;62701:6;62697:14;62690:58;62782:14;62777:2;62769:6;62765:15;62758:39;62573:231;:::o;62810:163::-;62950:15;62946:1;62938:6;62934:14;62927:39;62810:163;:::o;62979:224::-;63119:34;63115:1;63107:6;63103:14;63096:58;63188:7;63183:2;63175:6;63171:15;63164:32;62979:224;:::o;63209:243::-;63349:34;63345:1;63337:6;63333:14;63326:58;63418:26;63413:2;63405:6;63401:15;63394:51;63209:243;:::o;63458:229::-;63598:34;63594:1;63586:6;63582:14;63575:58;63667:12;63662:2;63654:6;63650:15;63643:37;63458:229;:::o;63693:228::-;63833:34;63829:1;63821:6;63817:14;63810:58;63902:11;63897:2;63889:6;63885:15;63878:36;63693:228;:::o;63927:180::-;64067:32;64063:1;64055:6;64051:14;64044:56;63927:180;:::o;64113:182::-;64253:34;64249:1;64241:6;64237:14;64230:58;64113:182;:::o;64301:231::-;64441:34;64437:1;64429:6;64425:14;64418:58;64510:14;64505:2;64497:6;64493:15;64486:39;64301:231;:::o;64538:182::-;64678:34;64674:1;64666:6;64662:14;64655:58;64538:182;:::o;64726:228::-;64866:34;64862:1;64854:6;64850:14;64843:58;64935:11;64930:2;64922:6;64918:15;64911:36;64726:228;:::o;64960:220::-;65100:34;65096:1;65088:6;65084:14;65077:58;65169:3;65164:2;65156:6;65152:15;65145:28;64960:220;:::o;65186:162::-;65326:14;65322:1;65314:6;65310:14;65303:38;65186:162;:::o;65354:220::-;65494:34;65490:1;65482:6;65478:14;65471:58;65563:3;65558:2;65550:6;65546:15;65539:28;65354:220;:::o;65580:236::-;65720:34;65716:1;65708:6;65704:14;65697:58;65789:19;65784:2;65776:6;65772:15;65765:44;65580:236;:::o;65822:168::-;65962:20;65958:1;65950:6;65946:14;65939:44;65822:168;:::o;65996:231::-;66136:34;66132:1;66124:6;66120:14;66113:58;66205:14;66200:2;66192:6;66188:15;66181:39;65996:231;:::o;66233:151::-;66373:3;66369:1;66361:6;66357:14;66350:27;66233:151;:::o;66390:122::-;66463:24;66481:5;66463:24;:::i;:::-;66456:5;66453:35;66443:63;;66502:1;66499;66492:12;66443:63;66390:122;:::o;66518:116::-;66588:21;66603:5;66588:21;:::i;:::-;66581:5;66578:32;66568:60;;66624:1;66621;66614:12;66568:60;66518:116;:::o;66640:122::-;66713:24;66731:5;66713:24;:::i;:::-;66706:5;66703:35;66693:63;;66752:1;66749;66742:12;66693:63;66640:122;:::o;66768:120::-;66840:23;66857:5;66840:23;:::i;:::-;66833:5;66830:34;66820:62;;66878:1;66875;66868:12;66820:62;66768:120;:::o;66894:122::-;66967:24;66985:5;66967:24;:::i;:::-;66960:5;66957:35;66947:63;;67006:1;67003;66996:12;66947:63;66894:122;:::o;67022:118::-;67093:22;67109:5;67093:22;:::i;:::-;67086:5;67083:33;67073:61;;67130:1;67127;67120:12;67073:61;67022:118;:::o
Swarm Source
ipfs://69b627445c149cdae22afe0f83f6bd68f247abb14d218b64674223a5e0a6f870
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.