ERC-721
NFT
Overview
Max Total Supply
10,000 XOXO
Holders
3,035
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 XOXOLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
XOXO_By_Maya_and_Yehuda_Devir
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT // @author: Exotic Technology LTD pragma solidity ^0.8.0; import "./ERC721.sol"; import "./ownable.sol"; import "./ERC721enumerable.sol"; import "./merkle.sol"; interface LVS{ function balanceOf(address owner) external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); } interface XOXO{ function balanceOf(address owner) external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); } contract XOXO_By_Maya_and_Yehuda_Devir is Ownable, ERC721, ERC721Enumerable { bool public saleIsActive = false; bool public claim = true; uint256 public claimed = 0; uint256 constant public MAX_TOKEN = 10000; uint claimToken = 1956; uint teamReserve = 1000; uint256 constant public MAX_PUBLIC_MINT = 2; uint256 public royalty = 100; uint256 public startingIndex = 0; uint256 public startingIndexBlock = 0; uint256 public SALE_START = 0; uint256 public PRE_SALE = 0; address LVScontract; address XOXOcontract; string private _baseURIextended; string public PROVENANCE; bytes32 public ogMerkle = 0x7af3b037c04981e71e6eca7e4a19623558e2093363388a98d6622b17916520c8; mapping(address => uint) public minters; mapping(address => bool) private senders; mapping(uint => bool) private claimedLvs; mapping(uint => bool) private claimedXoxo; constructor() ERC721("XOXONFT", "XOXO") { _baseURIextended = "ipfs://QmYpTwhjtVBQL8AvxJGj7bRBsd19sZpiYLemPRhU8h52L1/"; //cover senders[msg.sender] = true; // add owner SetStartingIndexBlock(); //setStartingIndex(); //launchSale(); } function updateOgMerkle(bytes32 _root)public { require(senders[_msgSender()]); ogMerkle = _root; } function prooveMerkle(bytes32[] calldata _merkleProof, bytes32 _merkleRoot)private view returns (bool) { bytes32 leaf = keccak256(abi.encodePacked(_msgSender())); require(MerkleProof.verify(_merkleProof, _merkleRoot, leaf),"merkle"); return true; } function addSender(address _address) public onlyOwner { require(_address != address(0)); senders[_address] = true; } function removeSender(address _address) public onlyOwner { require(_address != address(0)); senders[_address] = false; } function SetStartingIndexBlock() public onlyOwner { require(startingIndex == 0); startingIndexBlock = block.number; } function setStartingIndex() public onlyOwner { require(startingIndex == 0); require(startingIndexBlock != 0); startingIndex = uint(blockhash(startingIndexBlock)) % (MAX_TOKEN); // Just a sanity case in the worst case if this function is called late (EVM only stores last 256 block hashes) if (block.number - startingIndexBlock > 255) { startingIndex = uint(blockhash(block.number - 1)) % (MAX_TOKEN); } // Prevent default sequence if (startingIndex == 0) { startingIndex++; } } function updateLvsAddress(address _contract)public { require(senders[_msgSender()]); LVScontract = _contract; } function updateXoXoAddress(address _contract)public { require(senders[_msgSender()]); XOXOcontract = _contract; } function royaltyInfo( uint256 _tokenId, uint256 _salePrice ) external view override returns ( address receiver, uint256 royaltyAmount ){ require(_exists(_tokenId)); return (owner(), uint256(royalty * _salePrice / 1000)); } function flipSaleState() public { require(senders[_msgSender()]); saleIsActive = !saleIsActive; } function flipclaim() public { require(senders[_msgSender()]); claim = !claim; } function updateRoyalty(uint newRoyalty) public onlyOwner { royalty = newRoyalty ; } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function setBaseURI(string memory baseURI_) external { require(senders[_msgSender()]); _baseURIextended = baseURI_; } function _baseURI() internal view virtual override returns (string memory) { return _baseURIextended; } function setProvenance(string memory provenance) public onlyOwner { PROVENANCE = provenance; } function getSaleState() public view returns (bool) { return saleIsActive; } function launchPreSale() public { require(senders[_msgSender()]); require(SALE_START == 0 ); require(PRE_SALE == 0 ); require(startingIndex != 0); PRE_SALE = 1 ; // saleIsActive = true; claim = true; } function launchSale() public { require(senders[_msgSender()]); require(SALE_START == 0 ); PRE_SALE = 0 ; // SALE_START = 1; saleIsActive = true; claim = true; } function _confirmMint(uint _tokenNumber, uint _claim) private view returns (bool) { uint256 ts = totalSupply(); uint256 msBalance = minters[_msgSender()]; if(_claim == 1){ require(_tokenNumber <= MAX_PUBLIC_MINT,"max!"); require(msBalance + _tokenNumber <= MAX_PUBLIC_MINT, "2"); if(claim == true){ require(ts + _tokenNumber <= MAX_TOKEN - (claimToken + teamReserve) + claimed, "maxClaim"); } } require(!Address.isContract(_msgSender()),"contract"); require(saleIsActive, "closed!"); require(ts + _tokenNumber <= MAX_TOKEN, "maxTotal"); return true; } function _doMint(uint numberOfTokens, address _target)private { minters[_msgSender()]++; uint256 t = totalSupply(); for (uint256 i = 0; i < numberOfTokens; i++) { _safeMint(_target, t + i); } } function TeamReserve(uint _amount, address _target)public onlyOwner{ require(_amount >0); uint256 ts = totalSupply(); require(ts + _amount <= MAX_TOKEN); claimed += _amount; _doMint(_amount,_target); } function XOXOMint( bytes32[] calldata _proof )public{ if(PRE_SALE == 1){ require(prooveMerkle(_proof, ogMerkle),"whitelist"); } uint LvsBalance = LVS(LVScontract).balanceOf(_msgSender()); // check LVS balance for owner uint xoxoBalance = XOXO(XOXOcontract).balanceOf(_msgSender()); // check LVS balance for owner uint ownerBalance = LvsBalance*4 + xoxoBalance; if(ownerBalance > 0 && claim){ if(LvsBalance > 0){ for (uint i = 0; i < LvsBalance; i++){ // add token to claimed list uint claimedLvsToken = LVS(LVScontract).tokenOfOwnerByIndex(_msgSender(),i); require(claimedLvs[claimedLvsToken] == false, "claimed"); claimedLvs[claimedLvsToken] = true; } } if(xoxoBalance > 0){ for (uint i = 0; i < xoxoBalance; i++){ // add token to claimed list uint claimedxoToken = XOXO(XOXOcontract).tokenOfOwnerByIndex(_msgSender(),i); require(claimedXoxo[claimedxoToken] == false, "claimed"); claimedXoxo[claimedxoToken] = true; } } if(xoxoBalance > 0){ xoxoBalance = 4; // 4 free for xoxo holder } ownerBalance = LvsBalance*4 + xoxoBalance; require(_confirmMint(ownerBalance,0),"confirm"); claimed += ownerBalance; _doMint(ownerBalance, _msgSender()); } else{ uint ts = totalSupply(); uint amountMint = 2; if(ts == MAX_TOKEN - 1){ amountMint = 1; } require(_confirmMint(amountMint,1),"confirmNon"); _doMint(amountMint, _msgSender()); } } function withdraw(address _beneficiary) public onlyOwner { uint balance = address(this).balance; payable(_beneficiary).transfer(balance); } function transferOwnership(address newOwner) public override onlyOwner { require(newOwner != address(0), "address"); _transferOwnership(newOwner); } } /* %%%%%* /%%%%* %%% %% .%% %% %% % %% % %% % .% @@@@@@@@@@@@@@@@@@@@@ @@@@ %% @@@ @@@ @@@ , % @@@ @@@ @@@ %% &&& &@@@ @@@ % % &&& @@@@ @@@ ,% &&&&&&&&&&&&&&&&&&&%%(. @@@@@ % %%% @@@@@@@ % %%% @@@@ @@@@ %% %%% @@@@ @@@ % %% %%% @@@ @@@ % %% %%% @@@ @@@ % %% %%%%%%%%%%%%%%%%@@@ @@@@ % %% % %% % %% % %%% %% %%% %%# #%%%%%%% */
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// 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 // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./ERC165.sol"; import "./IERC721.sol"; import "./IERC721metadata.sol"; import "./IERC721receiver.sol"; import "./IERC2981.sol"; import "./address.sol"; import "./context.sol"; import "./strings.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, IERC2981 { 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 || interfaceId == type(IERC2981).interfaceId || interfaceId == type(IERC165).interfaceId; } function royaltyInfo( uint256 _tokenId, uint256 _salePrice ) external view virtual override returns ( address receiver, uint256 royaltyAmount ){ } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// 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 // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /// /// @dev Interface for the NFT Royalty Standard /// interface IERC2981 is IERC165 { /// ERC165 bytes to add to interface array - set in parent contract /// implementing this standard /// /// bytes4(keccak256("royaltyInfo(uint256,uint256)")) == 0x2a55205a /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; /// _registerInterface(_INTERFACE_ID_ERC2981); /// @notice Called with the sale price to determine how much royalty // is owed and to whom. /// @param _tokenId - the NFT asset queried for royalty information /// @param _salePrice - the sale price of the NFT asset specified by _tokenId /// @return receiver - address of who should be sent the royalty payment /// @return royaltyAmount - the royalty payment amount for _salePrice function royaltyInfo( uint256 _tokenId, uint256 _salePrice ) external view returns ( address receiver, uint256 royaltyAmount ); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./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; 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; interface IERC721Metadata { /** * @dev Returns a descriptive name for a collection of NFTs in this contract. * @return _name Representing name. */ function name() external view returns (string memory _name); /** * @dev Returns a abbreviated name for a collection of NFTs in this contract. * @return _symbol Representing symbol. */ function symbol() external view returns (string memory _symbol); /** * @dev Returns a distinct Uniform Resource Identifier (URI) for a given asset. It Throws if * `_tokenId` is not a valid NFT. URIs are defined in RFC3986. The URI may point to a JSON file * that conforms to the "ERC721 Metadata JSON Schema". * @return URI of _tokenId. */ function tokenURI(uint256 _tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PUBLIC_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRE_SALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_START","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SetStartingIndexBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_target","type":"address"}],"name":"TeamReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"XOXOMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addSender","outputs":[],"stateMutability":"nonpayable","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":"claim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipclaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSaleState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minters","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ogMerkle","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"_address","type":"address"}],"name":"removeSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenance","type":"string"}],"name":"setProvenance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStartingIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingIndexBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"updateLvsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"updateOgMerkle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRoyalty","type":"uint256"}],"name":"updateRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"updateXoXoAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506000600c556107a4600d556103e8600e556064600f5560006010556000601155600060125560006013557f7af3b037c04981e71e6eca7e4a19623558e2093363388a98d6622b17916520c860001b6018553480156200009857600080fd5b506040518060400160405280600781526020017f584f584f4e4654000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f584f584f000000000000000000000000000000000000000000000000000000008152506200012562000119620001f960201b60201c565b6200020160201b60201c565b81600190805190602001906200013d92919062000396565b5080600290805190602001906200015692919062000396565b50505060405180606001604052806036815260200162005e2d60369139601690805190602001906200018a92919062000396565b506001601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001f3620002c560201b60201c565b6200052e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002d5620001f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002fb6200036d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000354576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200034b906200046d565b60405180910390fd5b6000601054146200036457600080fd5b43601181905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003a490620004a0565b90600052602060002090601f016020900481019282620003c8576000855562000414565b82601f10620003e357805160ff191683800117855562000414565b8280016001018555821562000414579182015b8281111562000413578251825591602001919060010190620003f6565b5b50905062000423919062000427565b5090565b5b808211156200044257600081600090555060010162000428565b5090565b6000620004556020836200048f565b9150620004628262000505565b602082019050919050565b60006020820190508181036000830152620004888162000446565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620004b957607f821691505b60208210811415620004d057620004cf620004d6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6158ef806200053e6000396000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c80637f7376e81161019d578063cb774d47116100e9578063e985e9c5116100a2578063eee621661161007c578063eee6216614610872578063f2fde38b1461088e578063f46eccc4146108aa578063ffe630b5146108da576102f0565b8063e985e9c51461081a578063e98665501461084a578063eb8d244414610854576102f0565b8063cb774d471461077c578063d06a60fd1461079a578063e15a6556146107b6578063e36d6498146107c0578063e5f79bee146107de578063e834a834146107fc576102f0565b8063b2f8764311610156578063b88d4fde11610130578063b88d4fde1461070a578063bc82ebe014610726578063c87b56dd14610730578063c923494514610760576102f0565b8063b2f87643146106b6578063b697f531146106d2578063b714493e146106ee576102f0565b80637f7376e81461061c5780638da5cb5b146106265780638fffd8b514610644578063904ae6271461066057806395d89b411461067c578063a22cb4651461069a576102f0565b806334918dfd1161025c5780636352211e116102155780636e1bd323116101ef5780636e1bd323146105ba57806370a08231146105d8578063715018a61461060857806374101eab14610612576102f0565b80636352211e1461054e5780636373a6b11461057e57806365f130971461059c576102f0565b806334918dfd146104a257806342842e0e146104ac5780634e71d92d146104c85780634f6ccce7146104e657806351cff8d91461051657806355f804b314610532576102f0565b806322673030116102ae57806322673030146103cb57806323b872dd146103e957806325bdb2a81461040557806329ee566c146104235780632a55205a146104415780632f745c5914610472576102f0565b8062822141146102f557806301ffc9a71461031357806306fdde0314610343578063081812fc14610361578063095ea7b31461039157806318160ddd146103ad575b600080fd5b6102fd6108f6565b60405161030a91906148c5565b60405180910390f35b61032d60048036038101906103289190614171565b6108fc565b60405161033a91906148aa565b60405180910390f35b61034b61090e565b60405161035891906148e0565b60405180910390f35b61037b60048036038101906103769190614214565b6109a0565b604051610388919061481a565b60405180910390f35b6103ab60048036038101906103a691906140b7565b610a25565b005b6103b5610b3d565b6040516103c29190614ca2565b60405180910390f35b6103d3610b4a565b6040516103e09190614ca2565b60405180910390f35b61040360048036038101906103fe9190613fa1565b610b50565b005b61040d610bb0565b60405161041a91906148aa565b60405180910390f35b61042b610bc7565b6040516104389190614ca2565b60405180910390f35b61045b600480360381019061045691906142ae565b610bcd565b604051610469929190614881565b60405180910390f35b61048c600480360381019061048791906140b7565b610c10565b6040516104999190614ca2565b60405180910390f35b6104aa610cb5565b005b6104c660048036038101906104c19190613fa1565b610d3e565b005b6104d0610d5e565b6040516104dd91906148aa565b60405180910390f35b61050060048036038101906104fb9190614214565b610d71565b60405161050d9190614ca2565b60405180910390f35b610530600480360381019061052b9190613f34565b610de2565b005b61054c600480360381019061054791906141cb565b610eae565b005b61056860048036038101906105639190614214565b610f25565b604051610575919061481a565b60405180910390f35b610586610fd7565b60405161059391906148e0565b60405180910390f35b6105a4611065565b6040516105b19190614ca2565b60405180910390f35b6105c261106a565b6040516105cf9190614ca2565b60405180910390f35b6105f260048036038101906105ed9190613f34565b611070565b6040516105ff9190614ca2565b60405180910390f35b610610611128565b005b61061a6111b0565b005b610624611239565b005b61062e6112ed565b60405161063b919061481a565b60405180910390f35b61065e60048036038101906106599190614214565b611316565b005b61067a6004803603810190610675919061426e565b61139c565b005b610684611473565b60405161069191906148e0565b60405180910390f35b6106b460048036038101906106af9190614077565b611505565b005b6106d060048036038101906106cb9190613f34565b61151b565b005b6106ec60048036038101906106e79190613f34565b61162c565b005b61070860048036038101906107039190614144565b61173d565b005b610724600480360381019061071f9190613ff4565b6117a4565b005b61072e611806565b005b61074a60048036038101906107459190614214565b61189a565b60405161075791906148e0565b60405180910390f35b61077a600480360381019061077591906140f7565b611941565b005b610784611f5f565b6040516107919190614ca2565b60405180910390f35b6107b460048036038101906107af9190613f34565b611f65565b005b6107be612006565b005b6107c86120d1565b6040516107d59190614ca2565b60405180910390f35b6107e66120d7565b6040516107f39190614ca2565b60405180910390f35b6108046120dd565b6040516108119190614ca2565b60405180910390f35b610834600480360381019061082f9190613f61565b6120e3565b60405161084191906148aa565b60405180910390f35b610852612177565b005b61085c61228d565b60405161086991906148aa565b60405180910390f35b61088c60048036038101906108879190613f34565b6122a0565b005b6108a860048036038101906108a39190613f34565b612341565b005b6108c460048036038101906108bf9190613f34565b612439565b6040516108d19190614ca2565b60405180910390f35b6108f460048036038101906108ef91906141cb565b612451565b005b60185481565b6000610907826124e7565b9050919050565b60606001805461091d90614f5c565b80601f016020809104026020016040519081016040528092919081815260200182805461094990614f5c565b80156109965780601f1061096b57610100808354040283529160200191610996565b820191906000526020600020905b81548152906001019060200180831161097957829003601f168201915b5050505050905090565b60006109ab82612561565b6109ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e190614b42565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a3082610f25565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9890614c02565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ac06125cd565b73ffffffffffffffffffffffffffffffffffffffff161480610aef5750610aee81610ae96125cd565b6120e3565b5b610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590614aa2565b60405180910390fd5b610b3883836125d5565b505050565b6000600980549050905090565b60125481565b610b61610b5b6125cd565b8261268e565b610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9790614c22565b60405180910390fd5b610bab83838361276c565b505050565b6000600b60009054906101000a900460ff16905090565b600f5481565b600080610bd984612561565b610be257600080fd5b610bea6112ed565b6103e884600f54610bfb9190614e0e565b610c059190614ddd565b915091509250929050565b6000610c1b83611070565b8210610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390614922565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601a6000610cc16125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d1257600080fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b610d59838383604051806020016040528060008152506117a4565b505050565b600b60019054906101000a900460ff1681565b6000610d7b610b3d565b8210610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390614c42565b60405180910390fd5b60098281548110610dd057610dcf615119565b5b90600052602060002001549050919050565b610dea6125cd565b73ffffffffffffffffffffffffffffffffffffffff16610e086112ed565b73ffffffffffffffffffffffffffffffffffffffff1614610e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5590614b62565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ea9573d6000803e3d6000fd5b505050565b601a6000610eba6125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f0b57600080fd5b8060169080519060200190610f21929190613cc8565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc590614ae2565b60405180910390fd5b80915050919050565b60178054610fe490614f5c565b80601f016020809104026020016040519081016040528092919081815260200182805461101090614f5c565b801561105d5780601f106110325761010080835404028352916020019161105d565b820191906000526020600020905b81548152906001019060200180831161104057829003601f168201915b505050505081565b600281565b61271081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890614ac2565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111306125cd565b73ffffffffffffffffffffffffffffffffffffffff1661114e6112ed565b73ffffffffffffffffffffffffffffffffffffffff16146111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b90614b62565b60405180910390fd5b6111ae60006129d3565b565b601a60006111bc6125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661120d57600080fd5b600b60019054906101000a900460ff1615600b60016101000a81548160ff021916908315150217905550565b601a60006112456125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661129657600080fd5b6000601254146112a557600080fd5b600060138190555060016012819055506001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61131e6125cd565b73ffffffffffffffffffffffffffffffffffffffff1661133c6112ed565b73ffffffffffffffffffffffffffffffffffffffff1614611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990614b62565b60405180910390fd5b80600f8190555050565b6113a46125cd565b73ffffffffffffffffffffffffffffffffffffffff166113c26112ed565b73ffffffffffffffffffffffffffffffffffffffff1614611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90614b62565b60405180910390fd5b6000821161142557600080fd5b600061142f610b3d565b905061271083826114409190614d87565b111561144b57600080fd5b82600c600082825461145d9190614d87565b9250508190555061146e8383612a97565b505050565b60606002805461148290614f5c565b80601f01602080910402602001604051908101604052809291908181526020018280546114ae90614f5c565b80156114fb5780601f106114d0576101008083540402835291602001916114fb565b820191906000526020600020905b8154815290600101906020018083116114de57829003601f168201915b5050505050905090565b6115176115106125cd565b8383612b38565b5050565b6115236125cd565b73ffffffffffffffffffffffffffffffffffffffff166115416112ed565b73ffffffffffffffffffffffffffffffffffffffff1614611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115d157600080fd5b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6116346125cd565b73ffffffffffffffffffffffffffffffffffffffff166116526112ed565b73ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f90614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116e257600080fd5b6001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601a60006117496125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661179a57600080fd5b8060188190555050565b6117b56117af6125cd565b8361268e565b6117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90614c22565b60405180910390fd5b61180084848484612ca5565b50505050565b61180e6125cd565b73ffffffffffffffffffffffffffffffffffffffff1661182c6112ed565b73ffffffffffffffffffffffffffffffffffffffff1614611882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187990614b62565b60405180910390fd5b60006010541461189157600080fd5b43601181905550565b60606118a582612561565b6118e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118db90614ba2565b60405180910390fd5b60006118ee612d01565b9050600081511161190e5760405180602001604052806000815250611939565b8061191884612d93565b6040516020016119299291906147f6565b6040516020818303038152906040525b915050919050565b60016013541415611999576119598282601854612ef4565b611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f90614a42565b60405180910390fd5b5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316119e16125cd565b6040518263ffffffff1660e01b81526004016119fd919061481a565b60206040518083038186803b158015611a1557600080fd5b505afa158015611a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4d9190614241565b90506000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231611a976125cd565b6040518263ffffffff1660e01b8152600401611ab3919061481a565b60206040518083038186803b158015611acb57600080fd5b505afa158015611adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b039190614241565b9050600081600484611b159190614e0e565b611b1f9190614d87565b9050600081118015611b3d5750600b60019054906101000a900460ff165b15611ecd576000831115611cb75760005b83811015611cb5576000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59611b9e6125cd565b846040518363ffffffff1660e01b8152600401611bbc929190614881565b60206040518083038186803b158015611bd457600080fd5b505afa158015611be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0c9190614241565b905060001515601b600083815260200190815260200160002060009054906101000a900460ff16151514611c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6c90614a82565b60405180910390fd5b6001601b600083815260200190815260200160002060006101000a81548160ff021916908315150217905550508080611cad90614fbf565b915050611b4e565b505b6000821115611e2c5760005b82811015611e2a576000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59611d136125cd565b846040518363ffffffff1660e01b8152600401611d31929190614881565b60206040518083038186803b158015611d4957600080fd5b505afa158015611d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d819190614241565b905060001515601c600083815260200190815260200160002060009054906101000a900460ff16151514611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de190614a82565b60405180910390fd5b6001601c600083815260200190815260200160002060006101000a81548160ff021916908315150217905550508080611e2290614fbf565b915050611cc3565b505b6000821115611e3a57600491505b81600484611e489190614e0e565b611e529190614d87565b9050611e5f816000612fbe565b611e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9590614be2565b60405180910390fd5b80600c6000828254611eb09190614d87565b92505081905550611ec881611ec36125cd565b612a97565b611f58565b6000611ed7610b3d565b90506000600290506001612710611eee9190614e68565b821415611efa57600190505b611f05816001612fbe565b611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90614b82565b60405180910390fd5b611f5581611f506125cd565b612a97565b50505b5050505050565b60105481565b601a6000611f716125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611fc257600080fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a60006120126125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661206357600080fd5b60006012541461207257600080fd5b60006013541461208157600080fd5b6000601054141561209157600080fd5b60016013819055506001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b60115481565b60135481565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61217f6125cd565b73ffffffffffffffffffffffffffffffffffffffff1661219d6112ed565b73ffffffffffffffffffffffffffffffffffffffff16146121f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ea90614b62565b60405180910390fd5b60006010541461220257600080fd5b6000601154141561221257600080fd5b6127106011544060001c612226919061502c565b60108190555060ff6011544361223c9190614e68565b1115612267576127106001436122529190614e68565b4060001c612260919061502c565b6010819055505b6000601054141561228b576010600081548092919061228590614fbf565b91905055505b565b600b60009054906101000a900460ff1681565b601a60006122ac6125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122fd57600080fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123496125cd565b73ffffffffffffffffffffffffffffffffffffffff166123676112ed565b73ffffffffffffffffffffffffffffffffffffffff16146123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b490614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561242d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612424906149c2565b60405180910390fd5b612436816129d3565b50565b60196020528060005260406000206000915090505481565b6124596125cd565b73ffffffffffffffffffffffffffffffffffffffff166124776112ed565b73ffffffffffffffffffffffffffffffffffffffff16146124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c490614b62565b60405180910390fd5b80601790805190602001906124e3929190613cc8565b5050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061255a575061255982613242565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661264883610f25565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061269982612561565b6126d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cf90614a62565b60405180910390fd5b60006126e383610f25565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061275257508373ffffffffffffffffffffffffffffffffffffffff1661273a846109a0565b73ffffffffffffffffffffffffffffffffffffffff16145b80612763575061276281856120e3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661278c82610f25565b73ffffffffffffffffffffffffffffffffffffffff16146127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d990614962565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612852576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612849906149e2565b60405180910390fd5b61285d8383836133e4565b6128686000826125d5565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128b89190614e68565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461290f9190614d87565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129ce8383836133f4565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60196000612aa36125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612aee90614fbf565b91905055506000612afd610b3d565b905060005b83811015612b3257612b1f838284612b1a9190614d87565b6133f9565b8080612b2a90614fbf565b915050612b02565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90614a02565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c9891906148aa565b60405180910390a3505050565b612cb084848461276c565b612cbc84848484613417565b612cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf290614942565b60405180910390fd5b50505050565b606060168054612d1090614f5c565b80601f0160208091040260200160405190810160405280929190818152602001828054612d3c90614f5c565b8015612d895780601f10612d5e57610100808354040283529160200191612d89565b820191906000526020600020905b815481529060010190602001808311612d6c57829003601f168201915b5050505050905090565b60606000821415612ddb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612eef565b600082905060005b60008214612e0d578080612df690614fbf565b915050600a82612e069190614ddd565b9150612de3565b60008167ffffffffffffffff811115612e2957612e28615148565b5b6040519080825280601f01601f191660200182016040528015612e5b5781602001600182028036833780820191505090505b5090505b60008514612ee857600182612e749190614e68565b9150600a85612e83919061502c565b6030612e8f9190614d87565b60f81b818381518110612ea557612ea4615119565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ee19190614ddd565b9450612e5f565b8093505050505b919050565b600080612eff6125cd565b604051602001612f0f91906147db565b604051602081830303815290604052805190602001209050612f73858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505084836135ae565b612fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa9906149a2565b60405180910390fd5b60019150509392505050565b600080612fc9610b3d565b9050600060196000612fd96125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506001841415613147576002851115613063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305a90614c82565b60405180910390fd5b600285826130719190614d87565b11156130b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a990614bc2565b60405180910390fd5b60011515600b60019054906101000a900460ff161515141561314657600c54600e54600d546130e19190614d87565b6127106130ee9190614e68565b6130f89190614d87565b85836131049190614d87565b1115613145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313c90614c62565b60405180910390fd5b5b5b6131576131526125cd565b6135c5565b15613197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318e90614b02565b60405180910390fd5b600b60009054906101000a900460ff166131e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dd90614902565b60405180910390fd5b61271085836131f59190614d87565b1115613236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322d90614a22565b60405180910390fd5b60019250505092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061330d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061337557507f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806133dd57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6133ef8383836135e8565b505050565b505050565b6134138282604051806020016040528060008152506136fc565b5050565b60006134388473ffffffffffffffffffffffffffffffffffffffff166135c5565b156135a1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026134616125cd565b8786866040518563ffffffff1660e01b81526004016134839493929190614835565b602060405180830381600087803b15801561349d57600080fd5b505af19250505080156134ce57506040513d601f19601f820116820180604052508101906134cb919061419e565b60015b613551573d80600081146134fe576040519150601f19603f3d011682016040523d82523d6000602084013e613503565b606091505b50600081511415613549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354090614942565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506135a6565b600190505b949350505050565b6000826135bb8584613757565b1490509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6135f38383836137cc565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561363657613631816137d1565b613675565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461367457613673838261381a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136b8576136b381613987565b6136f7565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136f6576136f58282613a58565b5b5b505050565b6137068383613ad7565b6137136000848484613417565b613752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374990614942565b60405180910390fd5b505050565b60008082905060005b84518110156137c157600085828151811061377e5761377d615119565b5b602002602001015190508083116137a0576137998382613cb1565b92506137ad565b6137aa8184613cb1565b92505b5080806137b990614fbf565b915050613760565b508091505092915050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161382784611070565b6138319190614e68565b9050600060086000848152602001908152602001600020549050818114613916576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061399b9190614e68565b90506000600a60008481526020019081526020016000205490506000600983815481106139cb576139ca615119565b5b9060005260206000200154905080600983815481106139ed576139ec615119565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480613a3c57613a3b6150ea565b5b6001900381819060005260206000200160009055905550505050565b6000613a6383611070565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b3e90614b22565b60405180910390fd5b613b5081612561565b15613b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b8790614982565b60405180910390fd5b613b9c600083836133e4565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bec9190614d87565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613cad600083836133f4565b5050565b600082600052816020526040600020905092915050565b828054613cd490614f5c565b90600052602060002090601f016020900481019282613cf65760008555613d3d565b82601f10613d0f57805160ff1916838001178555613d3d565b82800160010185558215613d3d579182015b82811115613d3c578251825591602001919060010190613d21565b5b509050613d4a9190613d4e565b5090565b5b80821115613d67576000816000905550600101613d4f565b5090565b6000613d7e613d7984614ce2565b614cbd565b905082815260208101848484011115613d9a57613d99615186565b5b613da5848285614f1a565b509392505050565b6000613dc0613dbb84614d13565b614cbd565b905082815260208101848484011115613ddc57613ddb615186565b5b613de7848285614f1a565b509392505050565b600081359050613dfe81615846565b92915050565b60008083601f840112613e1a57613e1961517c565b5b8235905067ffffffffffffffff811115613e3757613e36615177565b5b602083019150836020820283011115613e5357613e52615181565b5b9250929050565b600081359050613e698161585d565b92915050565b600081359050613e7e81615874565b92915050565b600081359050613e938161588b565b92915050565b600081519050613ea88161588b565b92915050565b600082601f830112613ec357613ec261517c565b5b8135613ed3848260208601613d6b565b91505092915050565b600082601f830112613ef157613ef061517c565b5b8135613f01848260208601613dad565b91505092915050565b600081359050613f19816158a2565b92915050565b600081519050613f2e816158a2565b92915050565b600060208284031215613f4a57613f49615190565b5b6000613f5884828501613def565b91505092915050565b60008060408385031215613f7857613f77615190565b5b6000613f8685828601613def565b9250506020613f9785828601613def565b9150509250929050565b600080600060608486031215613fba57613fb9615190565b5b6000613fc886828701613def565b9350506020613fd986828701613def565b9250506040613fea86828701613f0a565b9150509250925092565b6000806000806080858703121561400e5761400d615190565b5b600061401c87828801613def565b945050602061402d87828801613def565b935050604061403e87828801613f0a565b925050606085013567ffffffffffffffff81111561405f5761405e61518b565b5b61406b87828801613eae565b91505092959194509250565b6000806040838503121561408e5761408d615190565b5b600061409c85828601613def565b92505060206140ad85828601613e5a565b9150509250929050565b600080604083850312156140ce576140cd615190565b5b60006140dc85828601613def565b92505060206140ed85828601613f0a565b9150509250929050565b6000806020838503121561410e5761410d615190565b5b600083013567ffffffffffffffff81111561412c5761412b61518b565b5b61413885828601613e04565b92509250509250929050565b60006020828403121561415a57614159615190565b5b600061416884828501613e6f565b91505092915050565b60006020828403121561418757614186615190565b5b600061419584828501613e84565b91505092915050565b6000602082840312156141b4576141b3615190565b5b60006141c284828501613e99565b91505092915050565b6000602082840312156141e1576141e0615190565b5b600082013567ffffffffffffffff8111156141ff576141fe61518b565b5b61420b84828501613edc565b91505092915050565b60006020828403121561422a57614229615190565b5b600061423884828501613f0a565b91505092915050565b60006020828403121561425757614256615190565b5b600061426584828501613f1f565b91505092915050565b6000806040838503121561428557614284615190565b5b600061429385828601613f0a565b92505060206142a485828601613def565b9150509250929050565b600080604083850312156142c5576142c4615190565b5b60006142d385828601613f0a565b92505060206142e485828601613f0a565b9150509250929050565b6142f781614e9c565b82525050565b61430e61430982614e9c565b615008565b82525050565b61431d81614eae565b82525050565b61432c81614eba565b82525050565b600061433d82614d44565b6143478185614d5a565b9350614357818560208601614f29565b61436081615195565b840191505092915050565b600061437682614d4f565b6143808185614d6b565b9350614390818560208601614f29565b61439981615195565b840191505092915050565b60006143af82614d4f565b6143b98185614d7c565b93506143c9818560208601614f29565b80840191505092915050565b60006143e2600783614d6b565b91506143ed826151b3565b602082019050919050565b6000614405602b83614d6b565b9150614410826151dc565b604082019050919050565b6000614428603283614d6b565b91506144338261522b565b604082019050919050565b600061444b602583614d6b565b91506144568261527a565b604082019050919050565b600061446e601c83614d6b565b9150614479826152c9565b602082019050919050565b6000614491600683614d6b565b915061449c826152f2565b602082019050919050565b60006144b4600783614d6b565b91506144bf8261531b565b602082019050919050565b60006144d7602483614d6b565b91506144e282615344565b604082019050919050565b60006144fa601983614d6b565b915061450582615393565b602082019050919050565b600061451d600883614d6b565b9150614528826153bc565b602082019050919050565b6000614540600983614d6b565b915061454b826153e5565b602082019050919050565b6000614563602c83614d6b565b915061456e8261540e565b604082019050919050565b6000614586600783614d6b565b91506145918261545d565b602082019050919050565b60006145a9603883614d6b565b91506145b482615486565b604082019050919050565b60006145cc602a83614d6b565b91506145d7826154d5565b604082019050919050565b60006145ef602983614d6b565b91506145fa82615524565b604082019050919050565b6000614612600883614d6b565b915061461d82615573565b602082019050919050565b6000614635602083614d6b565b91506146408261559c565b602082019050919050565b6000614658602c83614d6b565b9150614663826155c5565b604082019050919050565b600061467b602083614d6b565b915061468682615614565b602082019050919050565b600061469e600a83614d6b565b91506146a98261563d565b602082019050919050565b60006146c1602f83614d6b565b91506146cc82615666565b604082019050919050565b60006146e4600183614d6b565b91506146ef826156b5565b602082019050919050565b6000614707600783614d6b565b9150614712826156de565b602082019050919050565b600061472a602183614d6b565b915061473582615707565b604082019050919050565b600061474d603183614d6b565b915061475882615756565b604082019050919050565b6000614770602c83614d6b565b915061477b826157a5565b604082019050919050565b6000614793600883614d6b565b915061479e826157f4565b602082019050919050565b60006147b6600483614d6b565b91506147c18261581d565b602082019050919050565b6147d581614f10565b82525050565b60006147e782846142fd565b60148201915081905092915050565b600061480282856143a4565b915061480e82846143a4565b91508190509392505050565b600060208201905061482f60008301846142ee565b92915050565b600060808201905061484a60008301876142ee565b61485760208301866142ee565b61486460408301856147cc565b81810360608301526148768184614332565b905095945050505050565b600060408201905061489660008301856142ee565b6148a360208301846147cc565b9392505050565b60006020820190506148bf6000830184614314565b92915050565b60006020820190506148da6000830184614323565b92915050565b600060208201905081810360008301526148fa818461436b565b905092915050565b6000602082019050818103600083015261491b816143d5565b9050919050565b6000602082019050818103600083015261493b816143f8565b9050919050565b6000602082019050818103600083015261495b8161441b565b9050919050565b6000602082019050818103600083015261497b8161443e565b9050919050565b6000602082019050818103600083015261499b81614461565b9050919050565b600060208201905081810360008301526149bb81614484565b9050919050565b600060208201905081810360008301526149db816144a7565b9050919050565b600060208201905081810360008301526149fb816144ca565b9050919050565b60006020820190508181036000830152614a1b816144ed565b9050919050565b60006020820190508181036000830152614a3b81614510565b9050919050565b60006020820190508181036000830152614a5b81614533565b9050919050565b60006020820190508181036000830152614a7b81614556565b9050919050565b60006020820190508181036000830152614a9b81614579565b9050919050565b60006020820190508181036000830152614abb8161459c565b9050919050565b60006020820190508181036000830152614adb816145bf565b9050919050565b60006020820190508181036000830152614afb816145e2565b9050919050565b60006020820190508181036000830152614b1b81614605565b9050919050565b60006020820190508181036000830152614b3b81614628565b9050919050565b60006020820190508181036000830152614b5b8161464b565b9050919050565b60006020820190508181036000830152614b7b8161466e565b9050919050565b60006020820190508181036000830152614b9b81614691565b9050919050565b60006020820190508181036000830152614bbb816146b4565b9050919050565b60006020820190508181036000830152614bdb816146d7565b9050919050565b60006020820190508181036000830152614bfb816146fa565b9050919050565b60006020820190508181036000830152614c1b8161471d565b9050919050565b60006020820190508181036000830152614c3b81614740565b9050919050565b60006020820190508181036000830152614c5b81614763565b9050919050565b60006020820190508181036000830152614c7b81614786565b9050919050565b60006020820190508181036000830152614c9b816147a9565b9050919050565b6000602082019050614cb760008301846147cc565b92915050565b6000614cc7614cd8565b9050614cd38282614f8e565b919050565b6000604051905090565b600067ffffffffffffffff821115614cfd57614cfc615148565b5b614d0682615195565b9050602081019050919050565b600067ffffffffffffffff821115614d2e57614d2d615148565b5b614d3782615195565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614d9282614f10565b9150614d9d83614f10565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dd257614dd161505d565b5b828201905092915050565b6000614de882614f10565b9150614df383614f10565b925082614e0357614e0261508c565b5b828204905092915050565b6000614e1982614f10565b9150614e2483614f10565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e5d57614e5c61505d565b5b828202905092915050565b6000614e7382614f10565b9150614e7e83614f10565b925082821015614e9157614e9061505d565b5b828203905092915050565b6000614ea782614ef0565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614f47578082015181840152602081019050614f2c565b83811115614f56576000848401525b50505050565b60006002820490506001821680614f7457607f821691505b60208210811415614f8857614f876150bb565b5b50919050565b614f9782615195565b810181811067ffffffffffffffff82111715614fb657614fb5615148565b5b80604052505050565b6000614fca82614f10565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ffd57614ffc61505d565b5b600182019050919050565b60006150138261501a565b9050919050565b6000615025826151a6565b9050919050565b600061503782614f10565b915061504283614f10565b9250826150525761505161508c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f636c6f7365642100000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d65726b6c650000000000000000000000000000000000000000000000000000600082015250565b7f6164647265737300000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d6178546f74616c000000000000000000000000000000000000000000000000600082015250565b7f77686974656c6973740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f636c61696d656400000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f636f6e7472616374000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f636f6e6669726d4e6f6e00000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f3200000000000000000000000000000000000000000000000000000000000000600082015250565b7f636f6e6669726d00000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f6d6178436c61696d000000000000000000000000000000000000000000000000600082015250565b7f6d61782100000000000000000000000000000000000000000000000000000000600082015250565b61584f81614e9c565b811461585a57600080fd5b50565b61586681614eae565b811461587157600080fd5b50565b61587d81614eba565b811461588857600080fd5b50565b61589481614ec4565b811461589f57600080fd5b50565b6158ab81614f10565b81146158b657600080fd5b5056fea264697066735822122001351b773fc2871d36940f65763d1e66c844d07bdc235e0cdd6ae5b346c7c99864736f6c63430008070033697066733a2f2f516d59705477686a745642514c384176784a476a3762524273643139735a7069594c656d50526855386835324c312f
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102f05760003560e01c80637f7376e81161019d578063cb774d47116100e9578063e985e9c5116100a2578063eee621661161007c578063eee6216614610872578063f2fde38b1461088e578063f46eccc4146108aa578063ffe630b5146108da576102f0565b8063e985e9c51461081a578063e98665501461084a578063eb8d244414610854576102f0565b8063cb774d471461077c578063d06a60fd1461079a578063e15a6556146107b6578063e36d6498146107c0578063e5f79bee146107de578063e834a834146107fc576102f0565b8063b2f8764311610156578063b88d4fde11610130578063b88d4fde1461070a578063bc82ebe014610726578063c87b56dd14610730578063c923494514610760576102f0565b8063b2f87643146106b6578063b697f531146106d2578063b714493e146106ee576102f0565b80637f7376e81461061c5780638da5cb5b146106265780638fffd8b514610644578063904ae6271461066057806395d89b411461067c578063a22cb4651461069a576102f0565b806334918dfd1161025c5780636352211e116102155780636e1bd323116101ef5780636e1bd323146105ba57806370a08231146105d8578063715018a61461060857806374101eab14610612576102f0565b80636352211e1461054e5780636373a6b11461057e57806365f130971461059c576102f0565b806334918dfd146104a257806342842e0e146104ac5780634e71d92d146104c85780634f6ccce7146104e657806351cff8d91461051657806355f804b314610532576102f0565b806322673030116102ae57806322673030146103cb57806323b872dd146103e957806325bdb2a81461040557806329ee566c146104235780632a55205a146104415780632f745c5914610472576102f0565b8062822141146102f557806301ffc9a71461031357806306fdde0314610343578063081812fc14610361578063095ea7b31461039157806318160ddd146103ad575b600080fd5b6102fd6108f6565b60405161030a91906148c5565b60405180910390f35b61032d60048036038101906103289190614171565b6108fc565b60405161033a91906148aa565b60405180910390f35b61034b61090e565b60405161035891906148e0565b60405180910390f35b61037b60048036038101906103769190614214565b6109a0565b604051610388919061481a565b60405180910390f35b6103ab60048036038101906103a691906140b7565b610a25565b005b6103b5610b3d565b6040516103c29190614ca2565b60405180910390f35b6103d3610b4a565b6040516103e09190614ca2565b60405180910390f35b61040360048036038101906103fe9190613fa1565b610b50565b005b61040d610bb0565b60405161041a91906148aa565b60405180910390f35b61042b610bc7565b6040516104389190614ca2565b60405180910390f35b61045b600480360381019061045691906142ae565b610bcd565b604051610469929190614881565b60405180910390f35b61048c600480360381019061048791906140b7565b610c10565b6040516104999190614ca2565b60405180910390f35b6104aa610cb5565b005b6104c660048036038101906104c19190613fa1565b610d3e565b005b6104d0610d5e565b6040516104dd91906148aa565b60405180910390f35b61050060048036038101906104fb9190614214565b610d71565b60405161050d9190614ca2565b60405180910390f35b610530600480360381019061052b9190613f34565b610de2565b005b61054c600480360381019061054791906141cb565b610eae565b005b61056860048036038101906105639190614214565b610f25565b604051610575919061481a565b60405180910390f35b610586610fd7565b60405161059391906148e0565b60405180910390f35b6105a4611065565b6040516105b19190614ca2565b60405180910390f35b6105c261106a565b6040516105cf9190614ca2565b60405180910390f35b6105f260048036038101906105ed9190613f34565b611070565b6040516105ff9190614ca2565b60405180910390f35b610610611128565b005b61061a6111b0565b005b610624611239565b005b61062e6112ed565b60405161063b919061481a565b60405180910390f35b61065e60048036038101906106599190614214565b611316565b005b61067a6004803603810190610675919061426e565b61139c565b005b610684611473565b60405161069191906148e0565b60405180910390f35b6106b460048036038101906106af9190614077565b611505565b005b6106d060048036038101906106cb9190613f34565b61151b565b005b6106ec60048036038101906106e79190613f34565b61162c565b005b61070860048036038101906107039190614144565b61173d565b005b610724600480360381019061071f9190613ff4565b6117a4565b005b61072e611806565b005b61074a60048036038101906107459190614214565b61189a565b60405161075791906148e0565b60405180910390f35b61077a600480360381019061077591906140f7565b611941565b005b610784611f5f565b6040516107919190614ca2565b60405180910390f35b6107b460048036038101906107af9190613f34565b611f65565b005b6107be612006565b005b6107c86120d1565b6040516107d59190614ca2565b60405180910390f35b6107e66120d7565b6040516107f39190614ca2565b60405180910390f35b6108046120dd565b6040516108119190614ca2565b60405180910390f35b610834600480360381019061082f9190613f61565b6120e3565b60405161084191906148aa565b60405180910390f35b610852612177565b005b61085c61228d565b60405161086991906148aa565b60405180910390f35b61088c60048036038101906108879190613f34565b6122a0565b005b6108a860048036038101906108a39190613f34565b612341565b005b6108c460048036038101906108bf9190613f34565b612439565b6040516108d19190614ca2565b60405180910390f35b6108f460048036038101906108ef91906141cb565b612451565b005b60185481565b6000610907826124e7565b9050919050565b60606001805461091d90614f5c565b80601f016020809104026020016040519081016040528092919081815260200182805461094990614f5c565b80156109965780601f1061096b57610100808354040283529160200191610996565b820191906000526020600020905b81548152906001019060200180831161097957829003601f168201915b5050505050905090565b60006109ab82612561565b6109ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e190614b42565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a3082610f25565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9890614c02565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ac06125cd565b73ffffffffffffffffffffffffffffffffffffffff161480610aef5750610aee81610ae96125cd565b6120e3565b5b610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590614aa2565b60405180910390fd5b610b3883836125d5565b505050565b6000600980549050905090565b60125481565b610b61610b5b6125cd565b8261268e565b610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9790614c22565b60405180910390fd5b610bab83838361276c565b505050565b6000600b60009054906101000a900460ff16905090565b600f5481565b600080610bd984612561565b610be257600080fd5b610bea6112ed565b6103e884600f54610bfb9190614e0e565b610c059190614ddd565b915091509250929050565b6000610c1b83611070565b8210610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390614922565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601a6000610cc16125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d1257600080fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b610d59838383604051806020016040528060008152506117a4565b505050565b600b60019054906101000a900460ff1681565b6000610d7b610b3d565b8210610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390614c42565b60405180910390fd5b60098281548110610dd057610dcf615119565b5b90600052602060002001549050919050565b610dea6125cd565b73ffffffffffffffffffffffffffffffffffffffff16610e086112ed565b73ffffffffffffffffffffffffffffffffffffffff1614610e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5590614b62565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ea9573d6000803e3d6000fd5b505050565b601a6000610eba6125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f0b57600080fd5b8060169080519060200190610f21929190613cc8565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc590614ae2565b60405180910390fd5b80915050919050565b60178054610fe490614f5c565b80601f016020809104026020016040519081016040528092919081815260200182805461101090614f5c565b801561105d5780601f106110325761010080835404028352916020019161105d565b820191906000526020600020905b81548152906001019060200180831161104057829003601f168201915b505050505081565b600281565b61271081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890614ac2565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111306125cd565b73ffffffffffffffffffffffffffffffffffffffff1661114e6112ed565b73ffffffffffffffffffffffffffffffffffffffff16146111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b90614b62565b60405180910390fd5b6111ae60006129d3565b565b601a60006111bc6125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661120d57600080fd5b600b60019054906101000a900460ff1615600b60016101000a81548160ff021916908315150217905550565b601a60006112456125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661129657600080fd5b6000601254146112a557600080fd5b600060138190555060016012819055506001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61131e6125cd565b73ffffffffffffffffffffffffffffffffffffffff1661133c6112ed565b73ffffffffffffffffffffffffffffffffffffffff1614611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990614b62565b60405180910390fd5b80600f8190555050565b6113a46125cd565b73ffffffffffffffffffffffffffffffffffffffff166113c26112ed565b73ffffffffffffffffffffffffffffffffffffffff1614611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90614b62565b60405180910390fd5b6000821161142557600080fd5b600061142f610b3d565b905061271083826114409190614d87565b111561144b57600080fd5b82600c600082825461145d9190614d87565b9250508190555061146e8383612a97565b505050565b60606002805461148290614f5c565b80601f01602080910402602001604051908101604052809291908181526020018280546114ae90614f5c565b80156114fb5780601f106114d0576101008083540402835291602001916114fb565b820191906000526020600020905b8154815290600101906020018083116114de57829003601f168201915b5050505050905090565b6115176115106125cd565b8383612b38565b5050565b6115236125cd565b73ffffffffffffffffffffffffffffffffffffffff166115416112ed565b73ffffffffffffffffffffffffffffffffffffffff1614611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115d157600080fd5b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6116346125cd565b73ffffffffffffffffffffffffffffffffffffffff166116526112ed565b73ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f90614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116e257600080fd5b6001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601a60006117496125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661179a57600080fd5b8060188190555050565b6117b56117af6125cd565b8361268e565b6117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90614c22565b60405180910390fd5b61180084848484612ca5565b50505050565b61180e6125cd565b73ffffffffffffffffffffffffffffffffffffffff1661182c6112ed565b73ffffffffffffffffffffffffffffffffffffffff1614611882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187990614b62565b60405180910390fd5b60006010541461189157600080fd5b43601181905550565b60606118a582612561565b6118e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118db90614ba2565b60405180910390fd5b60006118ee612d01565b9050600081511161190e5760405180602001604052806000815250611939565b8061191884612d93565b6040516020016119299291906147f6565b6040516020818303038152906040525b915050919050565b60016013541415611999576119598282601854612ef4565b611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f90614a42565b60405180910390fd5b5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316119e16125cd565b6040518263ffffffff1660e01b81526004016119fd919061481a565b60206040518083038186803b158015611a1557600080fd5b505afa158015611a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4d9190614241565b90506000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231611a976125cd565b6040518263ffffffff1660e01b8152600401611ab3919061481a565b60206040518083038186803b158015611acb57600080fd5b505afa158015611adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b039190614241565b9050600081600484611b159190614e0e565b611b1f9190614d87565b9050600081118015611b3d5750600b60019054906101000a900460ff165b15611ecd576000831115611cb75760005b83811015611cb5576000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59611b9e6125cd565b846040518363ffffffff1660e01b8152600401611bbc929190614881565b60206040518083038186803b158015611bd457600080fd5b505afa158015611be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0c9190614241565b905060001515601b600083815260200190815260200160002060009054906101000a900460ff16151514611c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6c90614a82565b60405180910390fd5b6001601b600083815260200190815260200160002060006101000a81548160ff021916908315150217905550508080611cad90614fbf565b915050611b4e565b505b6000821115611e2c5760005b82811015611e2a576000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59611d136125cd565b846040518363ffffffff1660e01b8152600401611d31929190614881565b60206040518083038186803b158015611d4957600080fd5b505afa158015611d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d819190614241565b905060001515601c600083815260200190815260200160002060009054906101000a900460ff16151514611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de190614a82565b60405180910390fd5b6001601c600083815260200190815260200160002060006101000a81548160ff021916908315150217905550508080611e2290614fbf565b915050611cc3565b505b6000821115611e3a57600491505b81600484611e489190614e0e565b611e529190614d87565b9050611e5f816000612fbe565b611e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9590614be2565b60405180910390fd5b80600c6000828254611eb09190614d87565b92505081905550611ec881611ec36125cd565b612a97565b611f58565b6000611ed7610b3d565b90506000600290506001612710611eee9190614e68565b821415611efa57600190505b611f05816001612fbe565b611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90614b82565b60405180910390fd5b611f5581611f506125cd565b612a97565b50505b5050505050565b60105481565b601a6000611f716125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611fc257600080fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a60006120126125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661206357600080fd5b60006012541461207257600080fd5b60006013541461208157600080fd5b6000601054141561209157600080fd5b60016013819055506001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b60115481565b60135481565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61217f6125cd565b73ffffffffffffffffffffffffffffffffffffffff1661219d6112ed565b73ffffffffffffffffffffffffffffffffffffffff16146121f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ea90614b62565b60405180910390fd5b60006010541461220257600080fd5b6000601154141561221257600080fd5b6127106011544060001c612226919061502c565b60108190555060ff6011544361223c9190614e68565b1115612267576127106001436122529190614e68565b4060001c612260919061502c565b6010819055505b6000601054141561228b576010600081548092919061228590614fbf565b91905055505b565b600b60009054906101000a900460ff1681565b601a60006122ac6125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122fd57600080fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123496125cd565b73ffffffffffffffffffffffffffffffffffffffff166123676112ed565b73ffffffffffffffffffffffffffffffffffffffff16146123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b490614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561242d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612424906149c2565b60405180910390fd5b612436816129d3565b50565b60196020528060005260406000206000915090505481565b6124596125cd565b73ffffffffffffffffffffffffffffffffffffffff166124776112ed565b73ffffffffffffffffffffffffffffffffffffffff16146124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c490614b62565b60405180910390fd5b80601790805190602001906124e3929190613cc8565b5050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061255a575061255982613242565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661264883610f25565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061269982612561565b6126d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cf90614a62565b60405180910390fd5b60006126e383610f25565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061275257508373ffffffffffffffffffffffffffffffffffffffff1661273a846109a0565b73ffffffffffffffffffffffffffffffffffffffff16145b80612763575061276281856120e3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661278c82610f25565b73ffffffffffffffffffffffffffffffffffffffff16146127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d990614962565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612852576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612849906149e2565b60405180910390fd5b61285d8383836133e4565b6128686000826125d5565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128b89190614e68565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461290f9190614d87565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129ce8383836133f4565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60196000612aa36125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612aee90614fbf565b91905055506000612afd610b3d565b905060005b83811015612b3257612b1f838284612b1a9190614d87565b6133f9565b8080612b2a90614fbf565b915050612b02565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90614a02565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c9891906148aa565b60405180910390a3505050565b612cb084848461276c565b612cbc84848484613417565b612cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf290614942565b60405180910390fd5b50505050565b606060168054612d1090614f5c565b80601f0160208091040260200160405190810160405280929190818152602001828054612d3c90614f5c565b8015612d895780601f10612d5e57610100808354040283529160200191612d89565b820191906000526020600020905b815481529060010190602001808311612d6c57829003601f168201915b5050505050905090565b60606000821415612ddb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612eef565b600082905060005b60008214612e0d578080612df690614fbf565b915050600a82612e069190614ddd565b9150612de3565b60008167ffffffffffffffff811115612e2957612e28615148565b5b6040519080825280601f01601f191660200182016040528015612e5b5781602001600182028036833780820191505090505b5090505b60008514612ee857600182612e749190614e68565b9150600a85612e83919061502c565b6030612e8f9190614d87565b60f81b818381518110612ea557612ea4615119565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ee19190614ddd565b9450612e5f565b8093505050505b919050565b600080612eff6125cd565b604051602001612f0f91906147db565b604051602081830303815290604052805190602001209050612f73858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505084836135ae565b612fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa9906149a2565b60405180910390fd5b60019150509392505050565b600080612fc9610b3d565b9050600060196000612fd96125cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506001841415613147576002851115613063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305a90614c82565b60405180910390fd5b600285826130719190614d87565b11156130b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a990614bc2565b60405180910390fd5b60011515600b60019054906101000a900460ff161515141561314657600c54600e54600d546130e19190614d87565b6127106130ee9190614e68565b6130f89190614d87565b85836131049190614d87565b1115613145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313c90614c62565b60405180910390fd5b5b5b6131576131526125cd565b6135c5565b15613197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318e90614b02565b60405180910390fd5b600b60009054906101000a900460ff166131e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dd90614902565b60405180910390fd5b61271085836131f59190614d87565b1115613236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322d90614a22565b60405180910390fd5b60019250505092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061330d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061337557507f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806133dd57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6133ef8383836135e8565b505050565b505050565b6134138282604051806020016040528060008152506136fc565b5050565b60006134388473ffffffffffffffffffffffffffffffffffffffff166135c5565b156135a1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026134616125cd565b8786866040518563ffffffff1660e01b81526004016134839493929190614835565b602060405180830381600087803b15801561349d57600080fd5b505af19250505080156134ce57506040513d601f19601f820116820180604052508101906134cb919061419e565b60015b613551573d80600081146134fe576040519150601f19603f3d011682016040523d82523d6000602084013e613503565b606091505b50600081511415613549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354090614942565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506135a6565b600190505b949350505050565b6000826135bb8584613757565b1490509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6135f38383836137cc565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561363657613631816137d1565b613675565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461367457613673838261381a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136b8576136b381613987565b6136f7565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136f6576136f58282613a58565b5b5b505050565b6137068383613ad7565b6137136000848484613417565b613752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374990614942565b60405180910390fd5b505050565b60008082905060005b84518110156137c157600085828151811061377e5761377d615119565b5b602002602001015190508083116137a0576137998382613cb1565b92506137ad565b6137aa8184613cb1565b92505b5080806137b990614fbf565b915050613760565b508091505092915050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161382784611070565b6138319190614e68565b9050600060086000848152602001908152602001600020549050818114613916576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061399b9190614e68565b90506000600a60008481526020019081526020016000205490506000600983815481106139cb576139ca615119565b5b9060005260206000200154905080600983815481106139ed576139ec615119565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480613a3c57613a3b6150ea565b5b6001900381819060005260206000200160009055905550505050565b6000613a6383611070565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b3e90614b22565b60405180910390fd5b613b5081612561565b15613b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b8790614982565b60405180910390fd5b613b9c600083836133e4565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bec9190614d87565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613cad600083836133f4565b5050565b600082600052816020526040600020905092915050565b828054613cd490614f5c565b90600052602060002090601f016020900481019282613cf65760008555613d3d565b82601f10613d0f57805160ff1916838001178555613d3d565b82800160010185558215613d3d579182015b82811115613d3c578251825591602001919060010190613d21565b5b509050613d4a9190613d4e565b5090565b5b80821115613d67576000816000905550600101613d4f565b5090565b6000613d7e613d7984614ce2565b614cbd565b905082815260208101848484011115613d9a57613d99615186565b5b613da5848285614f1a565b509392505050565b6000613dc0613dbb84614d13565b614cbd565b905082815260208101848484011115613ddc57613ddb615186565b5b613de7848285614f1a565b509392505050565b600081359050613dfe81615846565b92915050565b60008083601f840112613e1a57613e1961517c565b5b8235905067ffffffffffffffff811115613e3757613e36615177565b5b602083019150836020820283011115613e5357613e52615181565b5b9250929050565b600081359050613e698161585d565b92915050565b600081359050613e7e81615874565b92915050565b600081359050613e938161588b565b92915050565b600081519050613ea88161588b565b92915050565b600082601f830112613ec357613ec261517c565b5b8135613ed3848260208601613d6b565b91505092915050565b600082601f830112613ef157613ef061517c565b5b8135613f01848260208601613dad565b91505092915050565b600081359050613f19816158a2565b92915050565b600081519050613f2e816158a2565b92915050565b600060208284031215613f4a57613f49615190565b5b6000613f5884828501613def565b91505092915050565b60008060408385031215613f7857613f77615190565b5b6000613f8685828601613def565b9250506020613f9785828601613def565b9150509250929050565b600080600060608486031215613fba57613fb9615190565b5b6000613fc886828701613def565b9350506020613fd986828701613def565b9250506040613fea86828701613f0a565b9150509250925092565b6000806000806080858703121561400e5761400d615190565b5b600061401c87828801613def565b945050602061402d87828801613def565b935050604061403e87828801613f0a565b925050606085013567ffffffffffffffff81111561405f5761405e61518b565b5b61406b87828801613eae565b91505092959194509250565b6000806040838503121561408e5761408d615190565b5b600061409c85828601613def565b92505060206140ad85828601613e5a565b9150509250929050565b600080604083850312156140ce576140cd615190565b5b60006140dc85828601613def565b92505060206140ed85828601613f0a565b9150509250929050565b6000806020838503121561410e5761410d615190565b5b600083013567ffffffffffffffff81111561412c5761412b61518b565b5b61413885828601613e04565b92509250509250929050565b60006020828403121561415a57614159615190565b5b600061416884828501613e6f565b91505092915050565b60006020828403121561418757614186615190565b5b600061419584828501613e84565b91505092915050565b6000602082840312156141b4576141b3615190565b5b60006141c284828501613e99565b91505092915050565b6000602082840312156141e1576141e0615190565b5b600082013567ffffffffffffffff8111156141ff576141fe61518b565b5b61420b84828501613edc565b91505092915050565b60006020828403121561422a57614229615190565b5b600061423884828501613f0a565b91505092915050565b60006020828403121561425757614256615190565b5b600061426584828501613f1f565b91505092915050565b6000806040838503121561428557614284615190565b5b600061429385828601613f0a565b92505060206142a485828601613def565b9150509250929050565b600080604083850312156142c5576142c4615190565b5b60006142d385828601613f0a565b92505060206142e485828601613f0a565b9150509250929050565b6142f781614e9c565b82525050565b61430e61430982614e9c565b615008565b82525050565b61431d81614eae565b82525050565b61432c81614eba565b82525050565b600061433d82614d44565b6143478185614d5a565b9350614357818560208601614f29565b61436081615195565b840191505092915050565b600061437682614d4f565b6143808185614d6b565b9350614390818560208601614f29565b61439981615195565b840191505092915050565b60006143af82614d4f565b6143b98185614d7c565b93506143c9818560208601614f29565b80840191505092915050565b60006143e2600783614d6b565b91506143ed826151b3565b602082019050919050565b6000614405602b83614d6b565b9150614410826151dc565b604082019050919050565b6000614428603283614d6b565b91506144338261522b565b604082019050919050565b600061444b602583614d6b565b91506144568261527a565b604082019050919050565b600061446e601c83614d6b565b9150614479826152c9565b602082019050919050565b6000614491600683614d6b565b915061449c826152f2565b602082019050919050565b60006144b4600783614d6b565b91506144bf8261531b565b602082019050919050565b60006144d7602483614d6b565b91506144e282615344565b604082019050919050565b60006144fa601983614d6b565b915061450582615393565b602082019050919050565b600061451d600883614d6b565b9150614528826153bc565b602082019050919050565b6000614540600983614d6b565b915061454b826153e5565b602082019050919050565b6000614563602c83614d6b565b915061456e8261540e565b604082019050919050565b6000614586600783614d6b565b91506145918261545d565b602082019050919050565b60006145a9603883614d6b565b91506145b482615486565b604082019050919050565b60006145cc602a83614d6b565b91506145d7826154d5565b604082019050919050565b60006145ef602983614d6b565b91506145fa82615524565b604082019050919050565b6000614612600883614d6b565b915061461d82615573565b602082019050919050565b6000614635602083614d6b565b91506146408261559c565b602082019050919050565b6000614658602c83614d6b565b9150614663826155c5565b604082019050919050565b600061467b602083614d6b565b915061468682615614565b602082019050919050565b600061469e600a83614d6b565b91506146a98261563d565b602082019050919050565b60006146c1602f83614d6b565b91506146cc82615666565b604082019050919050565b60006146e4600183614d6b565b91506146ef826156b5565b602082019050919050565b6000614707600783614d6b565b9150614712826156de565b602082019050919050565b600061472a602183614d6b565b915061473582615707565b604082019050919050565b600061474d603183614d6b565b915061475882615756565b604082019050919050565b6000614770602c83614d6b565b915061477b826157a5565b604082019050919050565b6000614793600883614d6b565b915061479e826157f4565b602082019050919050565b60006147b6600483614d6b565b91506147c18261581d565b602082019050919050565b6147d581614f10565b82525050565b60006147e782846142fd565b60148201915081905092915050565b600061480282856143a4565b915061480e82846143a4565b91508190509392505050565b600060208201905061482f60008301846142ee565b92915050565b600060808201905061484a60008301876142ee565b61485760208301866142ee565b61486460408301856147cc565b81810360608301526148768184614332565b905095945050505050565b600060408201905061489660008301856142ee565b6148a360208301846147cc565b9392505050565b60006020820190506148bf6000830184614314565b92915050565b60006020820190506148da6000830184614323565b92915050565b600060208201905081810360008301526148fa818461436b565b905092915050565b6000602082019050818103600083015261491b816143d5565b9050919050565b6000602082019050818103600083015261493b816143f8565b9050919050565b6000602082019050818103600083015261495b8161441b565b9050919050565b6000602082019050818103600083015261497b8161443e565b9050919050565b6000602082019050818103600083015261499b81614461565b9050919050565b600060208201905081810360008301526149bb81614484565b9050919050565b600060208201905081810360008301526149db816144a7565b9050919050565b600060208201905081810360008301526149fb816144ca565b9050919050565b60006020820190508181036000830152614a1b816144ed565b9050919050565b60006020820190508181036000830152614a3b81614510565b9050919050565b60006020820190508181036000830152614a5b81614533565b9050919050565b60006020820190508181036000830152614a7b81614556565b9050919050565b60006020820190508181036000830152614a9b81614579565b9050919050565b60006020820190508181036000830152614abb8161459c565b9050919050565b60006020820190508181036000830152614adb816145bf565b9050919050565b60006020820190508181036000830152614afb816145e2565b9050919050565b60006020820190508181036000830152614b1b81614605565b9050919050565b60006020820190508181036000830152614b3b81614628565b9050919050565b60006020820190508181036000830152614b5b8161464b565b9050919050565b60006020820190508181036000830152614b7b8161466e565b9050919050565b60006020820190508181036000830152614b9b81614691565b9050919050565b60006020820190508181036000830152614bbb816146b4565b9050919050565b60006020820190508181036000830152614bdb816146d7565b9050919050565b60006020820190508181036000830152614bfb816146fa565b9050919050565b60006020820190508181036000830152614c1b8161471d565b9050919050565b60006020820190508181036000830152614c3b81614740565b9050919050565b60006020820190508181036000830152614c5b81614763565b9050919050565b60006020820190508181036000830152614c7b81614786565b9050919050565b60006020820190508181036000830152614c9b816147a9565b9050919050565b6000602082019050614cb760008301846147cc565b92915050565b6000614cc7614cd8565b9050614cd38282614f8e565b919050565b6000604051905090565b600067ffffffffffffffff821115614cfd57614cfc615148565b5b614d0682615195565b9050602081019050919050565b600067ffffffffffffffff821115614d2e57614d2d615148565b5b614d3782615195565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614d9282614f10565b9150614d9d83614f10565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dd257614dd161505d565b5b828201905092915050565b6000614de882614f10565b9150614df383614f10565b925082614e0357614e0261508c565b5b828204905092915050565b6000614e1982614f10565b9150614e2483614f10565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e5d57614e5c61505d565b5b828202905092915050565b6000614e7382614f10565b9150614e7e83614f10565b925082821015614e9157614e9061505d565b5b828203905092915050565b6000614ea782614ef0565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614f47578082015181840152602081019050614f2c565b83811115614f56576000848401525b50505050565b60006002820490506001821680614f7457607f821691505b60208210811415614f8857614f876150bb565b5b50919050565b614f9782615195565b810181811067ffffffffffffffff82111715614fb657614fb5615148565b5b80604052505050565b6000614fca82614f10565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ffd57614ffc61505d565b5b600182019050919050565b60006150138261501a565b9050919050565b6000615025826151a6565b9050919050565b600061503782614f10565b915061504283614f10565b9250826150525761505161508c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f636c6f7365642100000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d65726b6c650000000000000000000000000000000000000000000000000000600082015250565b7f6164647265737300000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d6178546f74616c000000000000000000000000000000000000000000000000600082015250565b7f77686974656c6973740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f636c61696d656400000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f636f6e7472616374000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f636f6e6669726d4e6f6e00000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f3200000000000000000000000000000000000000000000000000000000000000600082015250565b7f636f6e6669726d00000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f6d6178436c61696d000000000000000000000000000000000000000000000000600082015250565b7f6d61782100000000000000000000000000000000000000000000000000000000600082015250565b61584f81614e9c565b811461585a57600080fd5b50565b61586681614eae565b811461587157600080fd5b50565b61587d81614eba565b811461588857600080fd5b50565b61589481614ec4565b811461589f57600080fd5b50565b6158ab81614f10565b81146158b657600080fd5b5056fea264697066735822122001351b773fc2871d36940f65763d1e66c844d07bdc235e0cdd6ae5b346c7c99864736f6c63430008070033
Deployed Bytecode Sourcemap
585:8770:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1278:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4454:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2708:98:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4220:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3758:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1536:111:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1086:29:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4947:330:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5045:91:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;965:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3637:284;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1212:253:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3928:118:12;;;:::i;:::-;;5343:179:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;721:24:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1719:230:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9005:159:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4637:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2411:235:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1247:24:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;911:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;785:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2149:205:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1608:101:13;;;:::i;:::-;;4052:100:12;;;:::i;:::-;;5426:224;;;:::i;:::-;;976:85:13;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4159:95:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6731:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2870:102:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4504:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2459:149:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2295:154;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1885:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5588:320:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2614:146:12;;;:::i;:::-;;3039:329:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7006:1987:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1001:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3497:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5147:273;;;:::i;:::-;;1041:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1122:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;752:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4723:162:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2766:586:12;;;:::i;:::-;;682:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3360:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9171:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1382:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4923:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1278:92;;;;:::o;4454:177::-;4557:4;4584:36;4608:11;4584:23;:36::i;:::-;4577:43;;4454:177;;;:::o;2708:98:1:-;2762:13;2794:5;2787:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2708:98;:::o;4220:217::-;4296:7;4323:16;4331:7;4323;:16::i;:::-;4315:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4406:15;:24;4422:7;4406:24;;;;;;;;;;;;;;;;;;;;;4399:31;;4220:217;;;:::o;3758:401::-;3838:13;3854:23;3869:7;3854:14;:23::i;:::-;3838:39;;3901:5;3895:11;;:2;:11;;;;3887:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3992:5;3976:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;4001:37;4018:5;4025:12;:10;:12::i;:::-;4001:16;:37::i;:::-;3976:62;3955:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;4131:21;4140:2;4144:7;4131:8;:21::i;:::-;3828:331;3758:401;;:::o;1536:111:2:-;1597:7;1623:10;:17;;;;1616:24;;1536:111;:::o;1086:29:12:-;;;;:::o;4947:330:1:-;5136:41;5155:12;:10;:12::i;:::-;5169:7;5136:18;:41::i;:::-;5128:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5242:28;5252:4;5258:2;5262:7;5242:9;:28::i;:::-;4947:330;;;:::o;5045:91:12:-;5090:4;5117:12;;;;;;;;;;;5110:19;;5045:91;:::o;965:29::-;;;;:::o;3637:284::-;3760:16;3786:21;3831:17;3839:8;3831:7;:17::i;:::-;3823:26;;;;;;3867:7;:5;:7::i;:::-;3907:4;3894:10;3884:7;;:20;;;;:::i;:::-;:27;;;;:::i;:::-;3859:54;;;;3637:284;;;;;:::o;1212:253:2:-;1309:7;1344:23;1361:5;1344:16;:23::i;:::-;1336:5;:31;1328:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1432:12;:19;1445:5;1432:19;;;;;;;;;;;;;;;:26;1452:5;1432:26;;;;;;;;;;;;1425:33;;1212:253;;;;:::o;3928:118:12:-;3979:7;:21;3987:12;:10;:12::i;:::-;3979:21;;;;;;;;;;;;;;;;;;;;;;;;;3971:30;;;;;;4027:12;;;;;;;;;;;4026:13;4011:12;;:28;;;;;;;;;;;;;;;;;;3928:118::o;5343:179:1:-;5476:39;5493:4;5499:2;5503:7;5476:39;;;;;;;;;;;;:16;:39::i;:::-;5343:179;;;:::o;721:24:12:-;;;;;;;;;;;;;:::o;1719:230:2:-;1794:7;1829:30;:28;:30::i;:::-;1821:5;:38;1813:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1925:10;1936:5;1925:17;;;;;;;;:::i;:::-;;;;;;;;;;1918:24;;1719:230;;;:::o;9005:159:12:-;1199:12:13;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9072:12:12::1;9087:21;9072:36;;9126:12;9118:30;;:39;9149:7;9118:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;9062:102;9005:159:::0;:::o;4637:151::-;4714:7;:21;4722:12;:10;:12::i;:::-;4714:21;;;;;;;;;;;;;;;;;;;;;;;;;4706:30;;;;;;4769:8;4750:16;:27;;;;;;;;;;;;:::i;:::-;;4637:151;:::o;2411:235:1:-;2483:7;2502:13;2518:7;:16;2526:7;2518:16;;;;;;;;;;;;;;;;;;;;;2502:32;;2569:1;2552:19;;:5;:19;;;;2544:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2634:5;2627:12;;;2411:235;;;:::o;1247:24:12:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;911:43::-;953:1;911:43;:::o;785:42::-;822:5;785:42;:::o;2149:205:1:-;2221:7;2265:1;2248:19;;:5;:19;;;;2240:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2331:9;:16;2341:5;2331:16;;;;;;;;;;;;;;;;2324:23;;2149:205;;;:::o;1608:101:13:-;1199:12;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1672:30:::1;1699:1;1672:18;:30::i;:::-;1608:101::o:0;4052:100:12:-;4099:7;:21;4107:12;:10;:12::i;:::-;4099:21;;;;;;;;;;;;;;;;;;;;;;;;;4091:30;;;;;;4140:5;;;;;;;;;;;4139:6;4131:5;;:14;;;;;;;;;;;;;;;;;;4052:100::o;5426:224::-;5474:7;:21;5482:12;:10;:12::i;:::-;5474:21;;;;;;;;;;;;;;;;;;;;;;;;;5466:30;;;;;;5528:1;5514:10;;:15;5506:25;;;;;;5553:1;5542:8;:12;;;;5582:1;5569:10;:14;;;;5608:4;5593:12;;:19;;;;;;;;;;;;;;;;;;5630:4;5622:5;;:12;;;;;;;;;;;;;;;;;;5426:224::o;976:85:13:-;1022:7;1048:6;;;;;;;;;;;1041:13;;976:85;:::o;4159:95:12:-;1199:12:13;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4236:10:12::1;4226:7;:20;;;;4159:95:::0;:::o;6731:268::-;1199:12:13;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6834:1:12::1;6825:7;:10;6817:19;;;::::0;::::1;;6846:10;6859:13;:11;:13::i;:::-;6846:26;;822:5;6895:7;6890:2;:12;;;;:::i;:::-;:25;;6882:34;;;::::0;::::1;;6937:7;6926;;:18;;;;;;;:::i;:::-;;;;;;;;6956:24;6964:7;6972;6956;:24::i;:::-;6798:201;6731:268:::0;;:::o;2870:102:1:-;2926:13;2958:7;2951:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2870:102;:::o;4504:153::-;4598:52;4617:12;:10;:12::i;:::-;4631:8;4641;4598:18;:52::i;:::-;4504:153;;:::o;2459:149:12:-;1199:12:13;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2554:1:12::1;2534:22;;:8;:22;;;;2526:31;;;::::0;::::1;;2587:5;2567:7;:17;2575:8;2567:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;2459:149:::0;:::o;2295:154::-;1199:12:13;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2397:1:12::1;2377:22;;:8;:22;;;;2369:31;;;::::0;::::1;;2430:4;2410:7;:17;2418:8;2410:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;2295:154:::0;:::o;1885:117::-;1948:7;:21;1956:12;:10;:12::i;:::-;1948:21;;;;;;;;;;;;;;;;;;;;;;;;;1940:30;;;;;;1990:5;1979:8;:16;;;;1885:117;:::o;5588:320:1:-;5757:41;5776:12;:10;:12::i;:::-;5790:7;5757:18;:41::i;:::-;5749:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5862:39;5876:4;5882:2;5886:7;5895:5;5862:13;:39::i;:::-;5588:320;;;;:::o;2614:146:12:-;1199:12:13;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2699:1:12::1;2682:13;;:18;2674:27;;;::::0;::::1;;2741:12;2720:18;:33;;;;2614:146::o:0;3039:329:1:-;3112:13;3145:16;3153:7;3145;:16::i;:::-;3137:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;3224:21;3248:10;:8;:10::i;:::-;3224:34;;3299:1;3281:7;3275:21;:25;:86;;;;;;;;;;;;;;;;;3327:7;3336:18;:7;:16;:18::i;:::-;3310:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3275:86;3268:93;;;3039:329;;;:::o;7006:1987:12:-;7101:1;7089:8;;:13;7086:96;;;7126:30;7139:6;;7147:8;;7126:12;:30::i;:::-;7118:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;7086:96;7200:15;7223:11;;;;;;;;;;;7219:26;;;7246:12;:10;:12::i;:::-;7219:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7200:59;;7300:16;7325:12;;;;;;;;;;;7320:28;;;7349:12;:10;:12::i;:::-;7320:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7300:62;;7412:17;7447:11;7443:1;7432:10;:12;;;;:::i;:::-;:26;;;;:::i;:::-;7412:46;;7487:1;7472:12;:16;:25;;;;;7492:5;;;;;;;;;;;7472:25;7469:1501;;;7538:1;7525:10;:14;7522:392;;;7559:6;7554:349;7575:10;7571:1;:14;7554:349;;;7658:20;7685:11;;;;;;;;;;;7681:36;;;7718:12;:10;:12::i;:::-;7731:1;7681:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7658:75;;7794:5;7763:36;;:10;:27;7774:15;7763:27;;;;;;;;;;;;;;;;;;;;;:36;;;7755:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;7863:4;7833:10;:27;7844:15;7833:27;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;7591:312;7587:3;;;;;:::i;:::-;;;;7554:349;;;;7522:392;7942:1;7928:11;:15;7925:396;;;7964:6;7959:348;7980:11;7976:1;:15;7959:348;;;8063:19;8090:12;;;;;;;;;;;8085:38;;;8124:12;:10;:12::i;:::-;8137:1;8085:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8063:76;;8200:5;8169:36;;:11;:27;8181:14;8169:27;;;;;;;;;;;;;;;;;;;;;:36;;;8161:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;8269:4;8239:11;:27;8251:14;8239:27;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;7997:310;7993:3;;;;;:::i;:::-;;;;7959:348;;;;7925:396;8368:1;8354:11;:15;8351:96;;;8404:1;8390:15;;8351:96;8490:11;8486:1;8475:10;:12;;;;:::i;:::-;:26;;;;:::i;:::-;8460:41;;8523:28;8536:12;8549:1;8523:12;:28::i;:::-;8515:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;8587:12;8576:7;;:23;;;;;;;:::i;:::-;;;;;;;;8613:35;8621:12;8635;:10;:12::i;:::-;8613:7;:35::i;:::-;7469:1501;;;8710:7;8720:13;:11;:13::i;:::-;8710:23;;8747:15;8765:1;8747:19;;8801:1;822:5;8789:13;;;;:::i;:::-;8783:2;:19;8780:70;;;8834:1;8821:14;;8780:70;8872:26;8885:10;8896:1;8872:12;:26::i;:::-;8864:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;8926:33;8934:10;8946:12;:10;:12::i;:::-;8926:7;:33::i;:::-;8695:275;;7469:1501;7058:1935;;;7006:1987;;:::o;1001:33::-;;;;:::o;3497:133::-;3567:7;:21;3575:12;:10;:12::i;:::-;3567:21;;;;;;;;;;;;;;;;;;;;;;;;;3559:30;;;;;;3614:9;3599:12;;:24;;;;;;;;;;;;;;;;;;3497:133;:::o;5147:273::-;5198:7;:21;5206:12;:10;:12::i;:::-;5198:21;;;;;;;;;;;;;;;;;;;;;;;;;5190:30;;;;;;5252:1;5238:10;;:15;5230:25;;;;;;5285:1;5273:8;;:13;5265:23;;;;;;5323:1;5306:13;;:18;;5298:27;;;;;;5347:1;5336:8;:12;;;;5378:4;5363:12;;:19;;;;;;;;;;;;;;;;;;5400:4;5392:5;;:12;;;;;;;;;;;;;;;;;;5147:273::o;1041:38::-;;;;:::o;1122:27::-;;;;:::o;752:26::-;;;;:::o;4723:162:1:-;4820:4;4843:18;:25;4862:5;4843:25;;;;;;;;;;;;;;;:35;4869:8;4843:35;;;;;;;;;;;;;;;;;;;;;;;;;4836:42;;4723:162;;;;:::o;2766:586:12:-;1199:12:13;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2846:1:12::1;2829:13;;:18;2821:27;;;::::0;::::1;;2888:1;2866:18;;:23;;2858:32;;;::::0;::::1;;822:5;2940:18;;2930:29;2925:35;;:49;;;;:::i;:::-;2909:13;:65;;;;3144:3;3123:18;;3108:12;:33;;;;:::i;:::-;:39;3104:133;;;822:5;3209:1;3194:12;:16;;;;:::i;:::-;3184:27;3179:33;;:47;;;;:::i;:::-;3163:13;:63;;;;3104:133;3303:1;3286:13;;:18;3282:64;;;3320:13;;:15;;;;;;;;;:::i;:::-;;;;;;3282:64;2766:586::o:0;682:32::-;;;;;;;;;;;;;:::o;3360:131::-;3429:7;:21;3437:12;:10;:12::i;:::-;3429:21;;;;;;;;;;;;;;;;;;;;;;;;;3421:30;;;;;;3475:9;3461:11;;:23;;;;;;;;;;;;;;;;;;3360:131;:::o;9171:177::-;1199:12:13;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9280:1:12::1;9260:22;;:8;:22;;;;9252:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;9312:28;9331:8;9312:18;:28::i;:::-;9171:177:::0;:::o;1382:39::-;;;;;;;;;;;;;;;;;:::o;4923:114::-;1199:12:13;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5016:10:12::1;5003;:23;;;;;;;;;;;;:::i;:::-;;4923:114:::0;:::o;911:222:2:-;1013:4;1051:35;1036:50;;;:11;:50;;;;:90;;;;1090:36;1114:11;1090:23;:36::i;:::-;1036:90;1029:97;;911:222;;;:::o;7380:125:1:-;7445:4;7496:1;7468:30;;:7;:16;7476:7;7468:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7461:37;;7380:125;;;:::o;640:96:10:-;693:7;719:10;712:17;;640:96;:::o;11389:171:1:-;11490:2;11463:15;:24;11479:7;11463:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11545:7;11541:2;11507:46;;11516:23;11531:7;11516:14;:23::i;:::-;11507:46;;;;;;;;;;;;11389:171;;:::o;7663:344::-;7756:4;7780:16;7788:7;7780;:16::i;:::-;7772:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7855:13;7871:23;7886:7;7871:14;:23::i;:::-;7855:39;;7923:5;7912:16;;:7;:16;;;:51;;;;7956:7;7932:31;;:20;7944:7;7932:11;:20::i;:::-;:31;;;7912:51;:87;;;;7967:32;7984:5;7991:7;7967:16;:32::i;:::-;7912:87;7904:96;;;7663:344;;;;:::o;10673:605::-;10827:4;10800:31;;:23;10815:7;10800:14;:23::i;:::-;:31;;;10792:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10905:1;10891:16;;:2;:16;;;;10883:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10959:39;10980:4;10986:2;10990:7;10959:20;:39::i;:::-;11060:29;11077:1;11081:7;11060:8;:29::i;:::-;11119:1;11100:9;:15;11110:4;11100:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11147:1;11130:9;:13;11140:2;11130:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11177:2;11158:7;:16;11166:7;11158:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11214:7;11210:2;11195:27;;11204:4;11195:27;;;;;;;;;;;;11233:38;11253:4;11259:2;11263:7;11233:19;:38::i;:::-;10673:605;;;:::o;2210:187:13:-;2283:16;2302:6;;;;;;;;;;;2283:25;;2327:8;2318:6;;:17;;;;;;;;;;;;;;;;;;2381:8;2350:40;;2371:8;2350:40;;;;;;;;;;;;2273:124;2210:187;:::o;6400:324:12:-;6485:7;:21;6493:12;:10;:12::i;:::-;6485:21;;;;;;;;;;;;;;;;:23;;;;;;;;;:::i;:::-;;;;;;6526:9;6538:13;:11;:13::i;:::-;6526:25;;6571:9;6566:130;6590:14;6586:1;:18;6566:130;;;6633:25;6643:7;6656:1;6652;:5;;;;:::i;:::-;6633:9;:25::i;:::-;6606:3;;;;;:::i;:::-;;;;6566:130;;;;6462:262;6400:324;;:::o;11695:307:1:-;11845:8;11836:17;;:5;:17;;;;11828:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11931:8;11893:18;:25;11912:5;11893:25;;;;;;;;;;;;;;;:35;11919:8;11893:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11976:8;11954:41;;11969:5;11954:41;;;11986:8;11954:41;;;;;;:::i;:::-;;;;;;;;11695:307;;;:::o;6770:::-;6921:28;6931:4;6937:2;6941:7;6921:9;:28::i;:::-;6967:48;6990:4;6996:2;7000:7;7009:5;6967:22;:48::i;:::-;6959:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6770:307;;;;:::o;4794:123:12:-;4854:13;4890:16;4883:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4794:123;:::o;328:703:14:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;2011:278:12:-;2108:4;2124:12;2166;:10;:12::i;:::-;2149:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;2139:41;;;;;;2124:56;;2199:51;2218:12;;2199:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2232:11;2245:4;2199:18;:51::i;:::-;2191:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2278:4;2271:11;;;2011:278;;;;;:::o;5662:730::-;5738:4;5763:10;5776:13;:11;:13::i;:::-;5763:26;;5799:17;5819:7;:21;5827:12;:10;:12::i;:::-;5819:21;;;;;;;;;;;;;;;;5799:41;;5872:1;5862:6;:11;5859:313;;;953:1;5896:12;:31;;5888:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;953:1;5969:12;5957:9;:24;;;;:::i;:::-;:43;;5949:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;6032:4;6023:13;;:5;;;;;;;;;;;:13;;;6020:141;;;6126:7;;6111:11;;6098:10;;:24;;;;:::i;:::-;822:5;6085:38;;;;:::i;:::-;:48;;;;:::i;:::-;6069:12;6064:2;:17;;;;:::i;:::-;:69;;6056:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;6020:141;5859:313;6198:32;6217:12;:10;:12::i;:::-;6198:18;:32::i;:::-;6197:33;6189:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:12;;;;;;;;;;;6252:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;822:5;6307:12;6302:2;:17;;;;:::i;:::-;:30;;6294:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;6381:4;6374:11;;;;5662:730;;;;:::o;1532:361:1:-;1634:4;1684:25;1669:40;;;:11;:40;;;;:104;;;;1740:33;1725:48;;;:11;:48;;;;1669:104;:161;;;;1804:26;1789:41;;;:11;:41;;;;1669:161;:217;;;;1861:25;1846:40;;;:11;:40;;;;1669:217;1650:236;;1532:361;;;:::o;4261:187:12:-;4392:45;4419:4;4425:2;4429:7;4392:26;:45::i;:::-;4261:187;;;:::o;14397:121:1:-;;;;:::o;8337:108::-;8412:26;8422:2;8426:7;8412:26;;;;;;;;;;;;:9;:26::i;:::-;8337:108;;:::o;12555:778::-;12705:4;12725:15;:2;:13;;;:15::i;:::-;12721:606;;;12776:2;12760:36;;;12797:12;:10;:12::i;:::-;12811:4;12817:7;12826:5;12760:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12756:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13016:1;12999:6;:13;:18;12995:266;;;13041:60;;;;;;;;;;:::i;:::-;;;;;;;;12995:266;13213:6;13207:13;13198:6;13194:2;13190:15;13183:38;12756:519;12892:41;;;12882:51;;;:6;:51;;;;12875:58;;;;;12721:606;13312:4;13305:11;;12555:778;;;;;;;:::o;1139:184:11:-;1260:4;1312;1283:25;1296:5;1303:4;1283:12;:25::i;:::-;:33;1276:40;;1139:184;;;;;:::o;1160:320:9:-;1220:4;1472:1;1450:7;:19;;;:23;1443:30;;1160:320;;;:::o;2545:572:2:-;2684:45;2711:4;2717:2;2721:7;2684:26;:45::i;:::-;2760:1;2744:18;;:4;:18;;;2740:183;;;2778:40;2810:7;2778:31;:40::i;:::-;2740:183;;;2847:2;2839:10;;:4;:10;;;2835:88;;2865:47;2898:4;2904:7;2865:32;:47::i;:::-;2835:88;2740:183;2950:1;2936:16;;:2;:16;;;2932:179;;;2968:45;3005:7;2968:36;:45::i;:::-;2932:179;;;3040:4;3034:10;;:2;:10;;;3030:81;;3060:40;3088:2;3092:7;3060:27;:40::i;:::-;3030:81;2932:179;2545:572;;;:::o;8666:311:1:-;8791:18;8797:2;8801:7;8791:5;:18::i;:::-;8840:54;8871:1;8875:2;8879:7;8888:5;8840:22;:54::i;:::-;8819:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8666:311;;;:::o;1674:662:11:-;1757:7;1776:20;1799:4;1776:27;;1818:9;1813:488;1837:5;:12;1833:1;:16;1813:488;;;1870:20;1893:5;1899:1;1893:8;;;;;;;;:::i;:::-;;;;;;;;1870:31;;1935:12;1919;:28;1915:376;;2060:42;2075:12;2089;2060:14;:42::i;:::-;2045:57;;1915:376;;;2234:42;2249:12;2263;2234:14;:42::i;:::-;2219:57;;1915:376;1856:445;1851:3;;;;;:::i;:::-;;;;1813:488;;;;2317:12;2310:19;;;1674:662;;;;:::o;13895:122:1:-;;;;:::o;3823:161:2:-;3926:10;:17;;;;3899:15;:24;3915:7;3899:24;;;;;;;;;;;:44;;;;3953:10;3969:7;3953:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3823:161;:::o;4601:970::-;4863:22;4913:1;4888:22;4905:4;4888:16;:22::i;:::-;:26;;;;:::i;:::-;4863:51;;4924:18;4945:17;:26;4963:7;4945:26;;;;;;;;;;;;4924:47;;5089:14;5075:10;:28;5071:323;;5119:19;5141:12;:18;5154:4;5141:18;;;;;;;;;;;;;;;:34;5160:14;5141:34;;;;;;;;;;;;5119:56;;5223:11;5190:12;:18;5203:4;5190:18;;;;;;;;;;;;;;;:30;5209:10;5190:30;;;;;;;;;;;:44;;;;5339:10;5306:17;:30;5324:11;5306:30;;;;;;;;;;;:43;;;;5105:289;5071:323;5487:17;:26;5505:7;5487:26;;;;;;;;;;;5480:33;;;5530:12;:18;5543:4;5530:18;;;;;;;;;;;;;;;:34;5549:14;5530:34;;;;;;;;;;;5523:41;;;4682:889;;4601:970;;:::o;5859:1061::-;6108:22;6153:1;6133:10;:17;;;;:21;;;;:::i;:::-;6108:46;;6164:18;6185:15;:24;6201:7;6185:24;;;;;;;;;;;;6164:45;;6531:19;6553:10;6564:14;6553:26;;;;;;;;:::i;:::-;;;;;;;;;;6531:48;;6615:11;6590:10;6601;6590:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6725:10;6694:15;:28;6710:11;6694:28;;;;;;;;;;;:41;;;;6863:15;:24;6879:7;6863:24;;;;;;;;;;;6856:31;;;6897:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5930:990;;;5859:1061;:::o;3411:217::-;3495:14;3512:20;3529:2;3512:16;:20::i;:::-;3495:37;;3569:7;3542:12;:16;3555:2;3542:16;;;;;;;;;;;;;;;:24;3559:6;3542:24;;;;;;;;;;;:34;;;;3615:6;3586:17;:26;3604:7;3586:26;;;;;;;;;;;:35;;;;3485:143;3411:217;;:::o;9299:427:1:-;9392:1;9378:16;;:2;:16;;;;9370:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9450:16;9458:7;9450;:16::i;:::-;9449:17;9441:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9510:45;9539:1;9543:2;9547:7;9510:20;:45::i;:::-;9583:1;9566:9;:13;9576:2;9566:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9613:2;9594:7;:16;9602:7;9594:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9656:7;9652:2;9631:33;;9648:1;9631:33;;;;;;;;;;;;9675:44;9703:1;9707:2;9711:7;9675:19;:44::i;:::-;9299:427;;:::o;2342:218:11:-;2410:13;2471:1;2465:4;2458:15;2499:1;2493:4;2486:15;2539:4;2533;2523:21;2514:30;;2342:218;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:15:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:143::-;3070:5;3101:6;3095:13;3086:22;;3117:33;3144:5;3117:33;:::i;:::-;3013:143;;;;:::o;3162:329::-;3221:6;3270:2;3258:9;3249:7;3245:23;3241:32;3238:119;;;3276:79;;:::i;:::-;3238:119;3396:1;3421:53;3466:7;3457:6;3446:9;3442:22;3421:53;:::i;:::-;3411:63;;3367:117;3162:329;;;;:::o;3497:474::-;3565:6;3573;3622:2;3610:9;3601:7;3597:23;3593:32;3590:119;;;3628:79;;:::i;:::-;3590:119;3748:1;3773:53;3818:7;3809:6;3798:9;3794:22;3773:53;:::i;:::-;3763:63;;3719:117;3875:2;3901:53;3946:7;3937:6;3926:9;3922:22;3901:53;:::i;:::-;3891:63;;3846:118;3497:474;;;;;:::o;3977:619::-;4054:6;4062;4070;4119:2;4107:9;4098:7;4094:23;4090:32;4087:119;;;4125:79;;:::i;:::-;4087:119;4245:1;4270:53;4315:7;4306:6;4295:9;4291:22;4270:53;:::i;:::-;4260:63;;4216:117;4372:2;4398:53;4443:7;4434:6;4423:9;4419:22;4398:53;:::i;:::-;4388:63;;4343:118;4500:2;4526:53;4571:7;4562:6;4551:9;4547:22;4526:53;:::i;:::-;4516:63;;4471:118;3977:619;;;;;:::o;4602:943::-;4697:6;4705;4713;4721;4770:3;4758:9;4749:7;4745:23;4741:33;4738:120;;;4777:79;;:::i;:::-;4738:120;4897:1;4922:53;4967:7;4958:6;4947:9;4943:22;4922:53;:::i;:::-;4912:63;;4868:117;5024:2;5050:53;5095:7;5086:6;5075:9;5071:22;5050:53;:::i;:::-;5040:63;;4995:118;5152:2;5178:53;5223:7;5214:6;5203:9;5199:22;5178:53;:::i;:::-;5168:63;;5123:118;5308:2;5297:9;5293:18;5280:32;5339:18;5331:6;5328:30;5325:117;;;5361:79;;:::i;:::-;5325:117;5466:62;5520:7;5511:6;5500:9;5496:22;5466:62;:::i;:::-;5456:72;;5251:287;4602:943;;;;;;;:::o;5551:468::-;5616:6;5624;5673:2;5661:9;5652:7;5648:23;5644:32;5641:119;;;5679:79;;:::i;:::-;5641:119;5799:1;5824:53;5869:7;5860:6;5849:9;5845:22;5824:53;:::i;:::-;5814:63;;5770:117;5926:2;5952:50;5994:7;5985:6;5974:9;5970:22;5952:50;:::i;:::-;5942:60;;5897:115;5551:468;;;;;:::o;6025:474::-;6093:6;6101;6150:2;6138:9;6129:7;6125:23;6121:32;6118:119;;;6156:79;;:::i;:::-;6118:119;6276:1;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6247:117;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;6025:474;;;;;:::o;6505:559::-;6591:6;6599;6648:2;6636:9;6627:7;6623:23;6619:32;6616:119;;;6654:79;;:::i;:::-;6616:119;6802:1;6791:9;6787:17;6774:31;6832:18;6824:6;6821:30;6818:117;;;6854:79;;:::i;:::-;6818:117;6967:80;7039:7;7030:6;7019:9;7015:22;6967:80;:::i;:::-;6949:98;;;;6745:312;6505:559;;;;;:::o;7070:329::-;7129:6;7178:2;7166:9;7157:7;7153:23;7149:32;7146:119;;;7184:79;;:::i;:::-;7146:119;7304:1;7329:53;7374:7;7365:6;7354:9;7350:22;7329:53;:::i;:::-;7319:63;;7275:117;7070:329;;;;:::o;7405:327::-;7463:6;7512:2;7500:9;7491:7;7487:23;7483:32;7480:119;;;7518:79;;:::i;:::-;7480:119;7638:1;7663:52;7707:7;7698:6;7687:9;7683:22;7663:52;:::i;:::-;7653:62;;7609:116;7405:327;;;;:::o;7738:349::-;7807:6;7856:2;7844:9;7835:7;7831:23;7827:32;7824:119;;;7862:79;;:::i;:::-;7824:119;7982:1;8007:63;8062:7;8053:6;8042:9;8038:22;8007:63;:::i;:::-;7997:73;;7953:127;7738:349;;;;:::o;8093:509::-;8162:6;8211:2;8199:9;8190:7;8186:23;8182:32;8179:119;;;8217:79;;:::i;:::-;8179:119;8365:1;8354:9;8350:17;8337:31;8395:18;8387:6;8384:30;8381:117;;;8417:79;;:::i;:::-;8381:117;8522:63;8577:7;8568:6;8557:9;8553:22;8522:63;:::i;:::-;8512:73;;8308:287;8093:509;;;;:::o;8608:329::-;8667:6;8716:2;8704:9;8695:7;8691:23;8687:32;8684:119;;;8722:79;;:::i;:::-;8684:119;8842:1;8867:53;8912:7;8903:6;8892:9;8888:22;8867:53;:::i;:::-;8857:63;;8813:117;8608:329;;;;:::o;8943:351::-;9013:6;9062:2;9050:9;9041:7;9037:23;9033:32;9030:119;;;9068:79;;:::i;:::-;9030:119;9188:1;9213:64;9269:7;9260:6;9249:9;9245:22;9213:64;:::i;:::-;9203:74;;9159:128;8943:351;;;;:::o;9300:474::-;9368:6;9376;9425:2;9413:9;9404:7;9400:23;9396:32;9393:119;;;9431:79;;:::i;:::-;9393:119;9551:1;9576:53;9621:7;9612:6;9601:9;9597:22;9576:53;:::i;:::-;9566:63;;9522:117;9678:2;9704:53;9749:7;9740:6;9729:9;9725:22;9704:53;:::i;:::-;9694:63;;9649:118;9300:474;;;;;:::o;9780:::-;9848:6;9856;9905:2;9893:9;9884:7;9880:23;9876:32;9873:119;;;9911:79;;:::i;:::-;9873:119;10031:1;10056:53;10101:7;10092:6;10081:9;10077:22;10056:53;:::i;:::-;10046:63;;10002:117;10158:2;10184:53;10229:7;10220:6;10209:9;10205:22;10184:53;:::i;:::-;10174:63;;10129:118;9780:474;;;;;:::o;10260:118::-;10347:24;10365:5;10347:24;:::i;:::-;10342:3;10335:37;10260:118;;:::o;10384:157::-;10489:45;10509:24;10527:5;10509:24;:::i;:::-;10489:45;:::i;:::-;10484:3;10477:58;10384:157;;:::o;10547:109::-;10628:21;10643:5;10628:21;:::i;:::-;10623:3;10616:34;10547:109;;:::o;10662:118::-;10749:24;10767:5;10749:24;:::i;:::-;10744:3;10737:37;10662:118;;:::o;10786:360::-;10872:3;10900:38;10932:5;10900:38;:::i;:::-;10954:70;11017:6;11012:3;10954:70;:::i;:::-;10947:77;;11033:52;11078:6;11073:3;11066:4;11059:5;11055:16;11033:52;:::i;:::-;11110:29;11132:6;11110:29;:::i;:::-;11105:3;11101:39;11094:46;;10876:270;10786:360;;;;:::o;11152:364::-;11240:3;11268:39;11301:5;11268:39;:::i;:::-;11323:71;11387:6;11382:3;11323:71;:::i;:::-;11316:78;;11403:52;11448:6;11443:3;11436:4;11429:5;11425:16;11403:52;:::i;:::-;11480:29;11502:6;11480:29;:::i;:::-;11475:3;11471:39;11464:46;;11244:272;11152:364;;;;:::o;11522:377::-;11628:3;11656:39;11689:5;11656:39;:::i;:::-;11711:89;11793:6;11788:3;11711:89;:::i;:::-;11704:96;;11809:52;11854:6;11849:3;11842:4;11835:5;11831:16;11809:52;:::i;:::-;11886:6;11881:3;11877:16;11870:23;;11632:267;11522:377;;;;:::o;11905:365::-;12047:3;12068:66;12132:1;12127:3;12068:66;:::i;:::-;12061:73;;12143:93;12232:3;12143:93;:::i;:::-;12261:2;12256:3;12252:12;12245:19;;11905:365;;;:::o;12276:366::-;12418:3;12439:67;12503:2;12498:3;12439:67;:::i;:::-;12432:74;;12515:93;12604:3;12515:93;:::i;:::-;12633:2;12628:3;12624:12;12617:19;;12276:366;;;:::o;12648:::-;12790:3;12811:67;12875:2;12870:3;12811:67;:::i;:::-;12804:74;;12887:93;12976:3;12887:93;:::i;:::-;13005:2;13000:3;12996:12;12989:19;;12648:366;;;:::o;13020:::-;13162:3;13183:67;13247:2;13242:3;13183:67;:::i;:::-;13176:74;;13259:93;13348:3;13259:93;:::i;:::-;13377:2;13372:3;13368:12;13361:19;;13020:366;;;:::o;13392:::-;13534:3;13555:67;13619:2;13614:3;13555:67;:::i;:::-;13548:74;;13631:93;13720:3;13631:93;:::i;:::-;13749:2;13744:3;13740:12;13733:19;;13392:366;;;:::o;13764:365::-;13906:3;13927:66;13991:1;13986:3;13927:66;:::i;:::-;13920:73;;14002:93;14091:3;14002:93;:::i;:::-;14120:2;14115:3;14111:12;14104:19;;13764:365;;;:::o;14135:::-;14277:3;14298:66;14362:1;14357:3;14298:66;:::i;:::-;14291:73;;14373:93;14462:3;14373:93;:::i;:::-;14491:2;14486:3;14482:12;14475:19;;14135:365;;;:::o;14506:366::-;14648:3;14669:67;14733:2;14728:3;14669:67;:::i;:::-;14662:74;;14745:93;14834:3;14745:93;:::i;:::-;14863:2;14858:3;14854:12;14847:19;;14506:366;;;:::o;14878:::-;15020:3;15041:67;15105:2;15100:3;15041:67;:::i;:::-;15034:74;;15117:93;15206:3;15117:93;:::i;:::-;15235:2;15230:3;15226:12;15219:19;;14878:366;;;:::o;15250:365::-;15392:3;15413:66;15477:1;15472:3;15413:66;:::i;:::-;15406:73;;15488:93;15577:3;15488:93;:::i;:::-;15606:2;15601:3;15597:12;15590:19;;15250:365;;;:::o;15621:::-;15763:3;15784:66;15848:1;15843:3;15784:66;:::i;:::-;15777:73;;15859:93;15948:3;15859:93;:::i;:::-;15977:2;15972:3;15968:12;15961:19;;15621:365;;;:::o;15992:366::-;16134:3;16155:67;16219:2;16214:3;16155:67;:::i;:::-;16148:74;;16231:93;16320:3;16231:93;:::i;:::-;16349:2;16344:3;16340:12;16333:19;;15992:366;;;:::o;16364:365::-;16506:3;16527:66;16591:1;16586:3;16527:66;:::i;:::-;16520:73;;16602:93;16691:3;16602:93;:::i;:::-;16720:2;16715:3;16711:12;16704:19;;16364:365;;;:::o;16735:366::-;16877:3;16898:67;16962:2;16957:3;16898:67;:::i;:::-;16891:74;;16974:93;17063:3;16974:93;:::i;:::-;17092:2;17087:3;17083:12;17076:19;;16735:366;;;:::o;17107:::-;17249:3;17270:67;17334:2;17329:3;17270:67;:::i;:::-;17263:74;;17346:93;17435:3;17346:93;:::i;:::-;17464:2;17459:3;17455:12;17448:19;;17107:366;;;:::o;17479:::-;17621:3;17642:67;17706:2;17701:3;17642:67;:::i;:::-;17635:74;;17718:93;17807:3;17718:93;:::i;:::-;17836:2;17831:3;17827:12;17820:19;;17479:366;;;:::o;17851:365::-;17993:3;18014:66;18078:1;18073:3;18014:66;:::i;:::-;18007:73;;18089:93;18178:3;18089:93;:::i;:::-;18207:2;18202:3;18198:12;18191:19;;17851:365;;;:::o;18222:366::-;18364:3;18385:67;18449:2;18444:3;18385:67;:::i;:::-;18378:74;;18461:93;18550:3;18461:93;:::i;:::-;18579:2;18574:3;18570:12;18563:19;;18222:366;;;:::o;18594:::-;18736:3;18757:67;18821:2;18816:3;18757:67;:::i;:::-;18750:74;;18833:93;18922:3;18833:93;:::i;:::-;18951:2;18946:3;18942:12;18935:19;;18594:366;;;:::o;18966:::-;19108:3;19129:67;19193:2;19188:3;19129:67;:::i;:::-;19122:74;;19205:93;19294:3;19205:93;:::i;:::-;19323:2;19318:3;19314:12;19307:19;;18966:366;;;:::o;19338:::-;19480:3;19501:67;19565:2;19560:3;19501:67;:::i;:::-;19494:74;;19577:93;19666:3;19577:93;:::i;:::-;19695:2;19690:3;19686:12;19679:19;;19338:366;;;:::o;19710:::-;19852:3;19873:67;19937:2;19932:3;19873:67;:::i;:::-;19866:74;;19949:93;20038:3;19949:93;:::i;:::-;20067:2;20062:3;20058:12;20051:19;;19710:366;;;:::o;20082:365::-;20224:3;20245:66;20309:1;20304:3;20245:66;:::i;:::-;20238:73;;20320:93;20409:3;20320:93;:::i;:::-;20438:2;20433:3;20429:12;20422:19;;20082:365;;;:::o;20453:::-;20595:3;20616:66;20680:1;20675:3;20616:66;:::i;:::-;20609:73;;20691:93;20780:3;20691:93;:::i;:::-;20809:2;20804:3;20800:12;20793:19;;20453:365;;;:::o;20824:366::-;20966:3;20987:67;21051:2;21046:3;20987:67;:::i;:::-;20980:74;;21063:93;21152:3;21063:93;:::i;:::-;21181:2;21176:3;21172:12;21165:19;;20824:366;;;:::o;21196:::-;21338:3;21359:67;21423:2;21418:3;21359:67;:::i;:::-;21352:74;;21435:93;21524:3;21435:93;:::i;:::-;21553:2;21548:3;21544:12;21537:19;;21196:366;;;:::o;21568:::-;21710:3;21731:67;21795:2;21790:3;21731:67;:::i;:::-;21724:74;;21807:93;21896:3;21807:93;:::i;:::-;21925:2;21920:3;21916:12;21909:19;;21568:366;;;:::o;21940:365::-;22082:3;22103:66;22167:1;22162:3;22103:66;:::i;:::-;22096:73;;22178:93;22267:3;22178:93;:::i;:::-;22296:2;22291:3;22287:12;22280:19;;21940:365;;;:::o;22311:::-;22453:3;22474:66;22538:1;22533:3;22474:66;:::i;:::-;22467:73;;22549:93;22638:3;22549:93;:::i;:::-;22667:2;22662:3;22658:12;22651:19;;22311:365;;;:::o;22682:118::-;22769:24;22787:5;22769:24;:::i;:::-;22764:3;22757:37;22682:118;;:::o;22806:256::-;22918:3;22933:75;23004:3;22995:6;22933:75;:::i;:::-;23033:2;23028:3;23024:12;23017:19;;23053:3;23046:10;;22806:256;;;;:::o;23068:435::-;23248:3;23270:95;23361:3;23352:6;23270:95;:::i;:::-;23263:102;;23382:95;23473:3;23464:6;23382:95;:::i;:::-;23375:102;;23494:3;23487:10;;23068:435;;;;;:::o;23509:222::-;23602:4;23640:2;23629:9;23625:18;23617:26;;23653:71;23721:1;23710:9;23706:17;23697:6;23653:71;:::i;:::-;23509:222;;;;:::o;23737:640::-;23932:4;23970:3;23959:9;23955:19;23947:27;;23984:71;24052:1;24041:9;24037:17;24028:6;23984:71;:::i;:::-;24065:72;24133:2;24122:9;24118:18;24109:6;24065:72;:::i;:::-;24147;24215:2;24204:9;24200:18;24191:6;24147:72;:::i;:::-;24266:9;24260:4;24256:20;24251:2;24240:9;24236:18;24229:48;24294:76;24365:4;24356:6;24294:76;:::i;:::-;24286:84;;23737:640;;;;;;;:::o;24383:332::-;24504:4;24542:2;24531:9;24527:18;24519:26;;24555:71;24623:1;24612:9;24608:17;24599:6;24555:71;:::i;:::-;24636:72;24704:2;24693:9;24689:18;24680:6;24636:72;:::i;:::-;24383:332;;;;;:::o;24721:210::-;24808:4;24846:2;24835:9;24831:18;24823:26;;24859:65;24921:1;24910:9;24906:17;24897:6;24859:65;:::i;:::-;24721:210;;;;:::o;24937:222::-;25030:4;25068:2;25057:9;25053:18;25045:26;;25081:71;25149:1;25138:9;25134:17;25125:6;25081:71;:::i;:::-;24937:222;;;;:::o;25165:313::-;25278:4;25316:2;25305:9;25301:18;25293:26;;25365:9;25359:4;25355:20;25351:1;25340:9;25336:17;25329:47;25393:78;25466:4;25457:6;25393:78;:::i;:::-;25385:86;;25165:313;;;;:::o;25484:419::-;25650:4;25688:2;25677:9;25673:18;25665:26;;25737:9;25731:4;25727:20;25723:1;25712:9;25708:17;25701:47;25765:131;25891:4;25765:131;:::i;:::-;25757:139;;25484:419;;;:::o;25909:::-;26075:4;26113:2;26102:9;26098:18;26090:26;;26162:9;26156:4;26152:20;26148:1;26137:9;26133:17;26126:47;26190:131;26316:4;26190:131;:::i;:::-;26182:139;;25909:419;;;:::o;26334:::-;26500:4;26538:2;26527:9;26523:18;26515:26;;26587:9;26581:4;26577:20;26573:1;26562:9;26558:17;26551:47;26615:131;26741:4;26615:131;:::i;:::-;26607:139;;26334:419;;;:::o;26759:::-;26925:4;26963:2;26952:9;26948:18;26940:26;;27012:9;27006:4;27002:20;26998:1;26987:9;26983:17;26976:47;27040:131;27166:4;27040:131;:::i;:::-;27032:139;;26759:419;;;:::o;27184:::-;27350:4;27388:2;27377:9;27373:18;27365:26;;27437:9;27431:4;27427:20;27423:1;27412:9;27408:17;27401:47;27465:131;27591:4;27465:131;:::i;:::-;27457:139;;27184:419;;;:::o;27609:::-;27775:4;27813:2;27802:9;27798:18;27790:26;;27862:9;27856:4;27852:20;27848:1;27837:9;27833:17;27826:47;27890:131;28016:4;27890:131;:::i;:::-;27882:139;;27609:419;;;:::o;28034:::-;28200:4;28238:2;28227:9;28223:18;28215:26;;28287:9;28281:4;28277:20;28273:1;28262:9;28258:17;28251:47;28315:131;28441:4;28315:131;:::i;:::-;28307:139;;28034:419;;;:::o;28459:::-;28625:4;28663:2;28652:9;28648:18;28640:26;;28712:9;28706:4;28702:20;28698:1;28687:9;28683:17;28676:47;28740:131;28866:4;28740:131;:::i;:::-;28732:139;;28459:419;;;:::o;28884:::-;29050:4;29088:2;29077:9;29073:18;29065:26;;29137:9;29131:4;29127:20;29123:1;29112:9;29108:17;29101:47;29165:131;29291:4;29165:131;:::i;:::-;29157:139;;28884:419;;;:::o;29309:::-;29475:4;29513:2;29502:9;29498:18;29490:26;;29562:9;29556:4;29552:20;29548:1;29537:9;29533:17;29526:47;29590:131;29716:4;29590:131;:::i;:::-;29582:139;;29309:419;;;:::o;29734:::-;29900:4;29938:2;29927:9;29923:18;29915:26;;29987:9;29981:4;29977:20;29973:1;29962:9;29958:17;29951:47;30015:131;30141:4;30015:131;:::i;:::-;30007:139;;29734:419;;;:::o;30159:::-;30325:4;30363:2;30352:9;30348:18;30340:26;;30412:9;30406:4;30402:20;30398:1;30387:9;30383:17;30376:47;30440:131;30566:4;30440:131;:::i;:::-;30432:139;;30159:419;;;:::o;30584:::-;30750:4;30788:2;30777:9;30773:18;30765:26;;30837:9;30831:4;30827:20;30823:1;30812:9;30808:17;30801:47;30865:131;30991:4;30865:131;:::i;:::-;30857:139;;30584:419;;;:::o;31009:::-;31175:4;31213:2;31202:9;31198:18;31190:26;;31262:9;31256:4;31252:20;31248:1;31237:9;31233:17;31226:47;31290:131;31416:4;31290:131;:::i;:::-;31282:139;;31009:419;;;:::o;31434:::-;31600:4;31638:2;31627:9;31623:18;31615:26;;31687:9;31681:4;31677:20;31673:1;31662:9;31658:17;31651:47;31715:131;31841:4;31715:131;:::i;:::-;31707:139;;31434:419;;;:::o;31859:::-;32025:4;32063:2;32052:9;32048:18;32040:26;;32112:9;32106:4;32102:20;32098:1;32087:9;32083:17;32076:47;32140:131;32266:4;32140:131;:::i;:::-;32132:139;;31859:419;;;:::o;32284:::-;32450:4;32488:2;32477:9;32473:18;32465:26;;32537:9;32531:4;32527:20;32523:1;32512:9;32508:17;32501:47;32565:131;32691:4;32565:131;:::i;:::-;32557:139;;32284:419;;;:::o;32709:::-;32875:4;32913:2;32902:9;32898:18;32890:26;;32962:9;32956:4;32952:20;32948:1;32937:9;32933:17;32926:47;32990:131;33116:4;32990:131;:::i;:::-;32982:139;;32709:419;;;:::o;33134:::-;33300:4;33338:2;33327:9;33323:18;33315:26;;33387:9;33381:4;33377:20;33373:1;33362:9;33358:17;33351:47;33415:131;33541:4;33415:131;:::i;:::-;33407:139;;33134:419;;;:::o;33559:::-;33725:4;33763:2;33752:9;33748:18;33740:26;;33812:9;33806:4;33802:20;33798:1;33787:9;33783:17;33776:47;33840:131;33966:4;33840:131;:::i;:::-;33832:139;;33559:419;;;:::o;33984:::-;34150:4;34188:2;34177:9;34173:18;34165:26;;34237:9;34231:4;34227:20;34223:1;34212:9;34208:17;34201:47;34265:131;34391:4;34265:131;:::i;:::-;34257:139;;33984:419;;;:::o;34409:::-;34575:4;34613:2;34602:9;34598:18;34590:26;;34662:9;34656:4;34652:20;34648:1;34637:9;34633:17;34626:47;34690:131;34816:4;34690:131;:::i;:::-;34682:139;;34409:419;;;:::o;34834:::-;35000:4;35038:2;35027:9;35023:18;35015:26;;35087:9;35081:4;35077:20;35073:1;35062:9;35058:17;35051:47;35115:131;35241:4;35115:131;:::i;:::-;35107:139;;34834:419;;;:::o;35259:::-;35425:4;35463:2;35452:9;35448:18;35440:26;;35512:9;35506:4;35502:20;35498:1;35487:9;35483:17;35476:47;35540:131;35666:4;35540:131;:::i;:::-;35532:139;;35259:419;;;:::o;35684:::-;35850:4;35888:2;35877:9;35873:18;35865:26;;35937:9;35931:4;35927:20;35923:1;35912:9;35908:17;35901:47;35965:131;36091:4;35965:131;:::i;:::-;35957:139;;35684:419;;;:::o;36109:::-;36275:4;36313:2;36302:9;36298:18;36290:26;;36362:9;36356:4;36352:20;36348:1;36337:9;36333:17;36326:47;36390:131;36516:4;36390:131;:::i;:::-;36382:139;;36109:419;;;:::o;36534:::-;36700:4;36738:2;36727:9;36723:18;36715:26;;36787:9;36781:4;36777:20;36773:1;36762:9;36758:17;36751:47;36815:131;36941:4;36815:131;:::i;:::-;36807:139;;36534:419;;;:::o;36959:::-;37125:4;37163:2;37152:9;37148:18;37140:26;;37212:9;37206:4;37202:20;37198:1;37187:9;37183:17;37176:47;37240:131;37366:4;37240:131;:::i;:::-;37232:139;;36959:419;;;:::o;37384:::-;37550:4;37588:2;37577:9;37573:18;37565:26;;37637:9;37631:4;37627:20;37623:1;37612:9;37608:17;37601:47;37665:131;37791:4;37665:131;:::i;:::-;37657:139;;37384:419;;;:::o;37809:222::-;37902:4;37940:2;37929:9;37925:18;37917:26;;37953:71;38021:1;38010:9;38006:17;37997:6;37953:71;:::i;:::-;37809:222;;;;:::o;38037:129::-;38071:6;38098:20;;:::i;:::-;38088:30;;38127:33;38155:4;38147:6;38127:33;:::i;:::-;38037:129;;;:::o;38172:75::-;38205:6;38238:2;38232:9;38222:19;;38172:75;:::o;38253:307::-;38314:4;38404:18;38396:6;38393:30;38390:56;;;38426:18;;:::i;:::-;38390:56;38464:29;38486:6;38464:29;:::i;:::-;38456:37;;38548:4;38542;38538:15;38530:23;;38253:307;;;:::o;38566:308::-;38628:4;38718:18;38710:6;38707:30;38704:56;;;38740:18;;:::i;:::-;38704:56;38778:29;38800:6;38778:29;:::i;:::-;38770:37;;38862:4;38856;38852:15;38844:23;;38566:308;;;:::o;38880:98::-;38931:6;38965:5;38959:12;38949:22;;38880:98;;;:::o;38984:99::-;39036:6;39070:5;39064:12;39054:22;;38984:99;;;:::o;39089:168::-;39172:11;39206:6;39201:3;39194:19;39246:4;39241:3;39237:14;39222:29;;39089:168;;;;:::o;39263:169::-;39347:11;39381:6;39376:3;39369:19;39421:4;39416:3;39412:14;39397:29;;39263:169;;;;:::o;39438:148::-;39540:11;39577:3;39562:18;;39438:148;;;;:::o;39592:305::-;39632:3;39651:20;39669:1;39651:20;:::i;:::-;39646:25;;39685:20;39703:1;39685:20;:::i;:::-;39680:25;;39839:1;39771:66;39767:74;39764:1;39761:81;39758:107;;;39845:18;;:::i;:::-;39758:107;39889:1;39886;39882:9;39875:16;;39592:305;;;;:::o;39903:185::-;39943:1;39960:20;39978:1;39960:20;:::i;:::-;39955:25;;39994:20;40012:1;39994:20;:::i;:::-;39989:25;;40033:1;40023:35;;40038:18;;:::i;:::-;40023:35;40080:1;40077;40073:9;40068:14;;39903:185;;;;:::o;40094:348::-;40134:7;40157:20;40175:1;40157:20;:::i;:::-;40152:25;;40191:20;40209:1;40191:20;:::i;:::-;40186:25;;40379:1;40311:66;40307:74;40304:1;40301:81;40296:1;40289:9;40282:17;40278:105;40275:131;;;40386:18;;:::i;:::-;40275:131;40434:1;40431;40427:9;40416:20;;40094:348;;;;:::o;40448:191::-;40488:4;40508:20;40526:1;40508:20;:::i;:::-;40503:25;;40542:20;40560:1;40542:20;:::i;:::-;40537:25;;40581:1;40578;40575:8;40572:34;;;40586:18;;:::i;:::-;40572:34;40631:1;40628;40624:9;40616:17;;40448:191;;;;:::o;40645:96::-;40682:7;40711:24;40729:5;40711:24;:::i;:::-;40700:35;;40645:96;;;:::o;40747:90::-;40781:7;40824:5;40817:13;40810:21;40799:32;;40747:90;;;:::o;40843:77::-;40880:7;40909:5;40898:16;;40843:77;;;:::o;40926:149::-;40962:7;41002:66;40995:5;40991:78;40980:89;;40926:149;;;:::o;41081:126::-;41118:7;41158:42;41151:5;41147:54;41136:65;;41081:126;;;:::o;41213:77::-;41250:7;41279:5;41268:16;;41213:77;;;:::o;41296:154::-;41380:6;41375:3;41370;41357:30;41442:1;41433:6;41428:3;41424:16;41417:27;41296:154;;;:::o;41456:307::-;41524:1;41534:113;41548:6;41545:1;41542:13;41534:113;;;41633:1;41628:3;41624:11;41618:18;41614:1;41609:3;41605:11;41598:39;41570:2;41567:1;41563:10;41558:15;;41534:113;;;41665:6;41662:1;41659:13;41656:101;;;41745:1;41736:6;41731:3;41727:16;41720:27;41656:101;41505:258;41456:307;;;:::o;41769:320::-;41813:6;41850:1;41844:4;41840:12;41830:22;;41897:1;41891:4;41887:12;41918:18;41908:81;;41974:4;41966:6;41962:17;41952:27;;41908:81;42036:2;42028:6;42025:14;42005:18;42002:38;41999:84;;;42055:18;;:::i;:::-;41999:84;41820:269;41769:320;;;:::o;42095:281::-;42178:27;42200:4;42178:27;:::i;:::-;42170:6;42166:40;42308:6;42296:10;42293:22;42272:18;42260:10;42257:34;42254:62;42251:88;;;42319:18;;:::i;:::-;42251:88;42359:10;42355:2;42348:22;42138:238;42095:281;;:::o;42382:233::-;42421:3;42444:24;42462:5;42444:24;:::i;:::-;42435:33;;42490:66;42483:5;42480:77;42477:103;;;42560:18;;:::i;:::-;42477:103;42607:1;42600:5;42596:13;42589:20;;42382:233;;;:::o;42621:100::-;42660:7;42689:26;42709:5;42689:26;:::i;:::-;42678:37;;42621:100;;;:::o;42727:94::-;42766:7;42795:20;42809:5;42795:20;:::i;:::-;42784:31;;42727:94;;;:::o;42827:176::-;42859:1;42876:20;42894:1;42876:20;:::i;:::-;42871:25;;42910:20;42928:1;42910:20;:::i;:::-;42905:25;;42949:1;42939:35;;42954:18;;:::i;:::-;42939:35;42995:1;42992;42988:9;42983:14;;42827:176;;;;:::o;43009:180::-;43057:77;43054:1;43047:88;43154:4;43151:1;43144:15;43178:4;43175:1;43168:15;43195:180;43243:77;43240:1;43233:88;43340:4;43337:1;43330:15;43364:4;43361:1;43354:15;43381:180;43429:77;43426:1;43419:88;43526:4;43523:1;43516:15;43550:4;43547:1;43540:15;43567:180;43615:77;43612:1;43605:88;43712:4;43709:1;43702:15;43736:4;43733:1;43726:15;43753:180;43801:77;43798:1;43791:88;43898:4;43895:1;43888:15;43922:4;43919:1;43912:15;43939:180;43987:77;43984:1;43977:88;44084:4;44081:1;44074:15;44108:4;44105:1;44098:15;44125:117;44234:1;44231;44224:12;44248:117;44357:1;44354;44347:12;44371:117;44480:1;44477;44470:12;44494:117;44603:1;44600;44593:12;44617:117;44726:1;44723;44716:12;44740:117;44849:1;44846;44839:12;44863:102;44904:6;44955:2;44951:7;44946:2;44939:5;44935:14;44931:28;44921:38;;44863:102;;;:::o;44971:94::-;45004:8;45052:5;45048:2;45044:14;45023:35;;44971:94;;;:::o;45071:157::-;45211:9;45207:1;45199:6;45195:14;45188:33;45071:157;:::o;45234:230::-;45374:34;45370:1;45362:6;45358:14;45351:58;45443:13;45438:2;45430:6;45426:15;45419:38;45234:230;:::o;45470:237::-;45610:34;45606:1;45598:6;45594:14;45587:58;45679:20;45674:2;45666:6;45662:15;45655:45;45470:237;:::o;45713:224::-;45853:34;45849:1;45841:6;45837:14;45830:58;45922:7;45917:2;45909:6;45905:15;45898:32;45713:224;:::o;45943:178::-;46083:30;46079:1;46071:6;46067:14;46060:54;45943:178;:::o;46127:156::-;46267:8;46263:1;46255:6;46251:14;46244:32;46127:156;:::o;46289:157::-;46429:9;46425:1;46417:6;46413:14;46406:33;46289:157;:::o;46452:223::-;46592:34;46588:1;46580:6;46576:14;46569:58;46661:6;46656:2;46648:6;46644:15;46637:31;46452:223;:::o;46681:175::-;46821:27;46817:1;46809:6;46805:14;46798:51;46681:175;:::o;46862:158::-;47002:10;46998:1;46990:6;46986:14;46979:34;46862:158;:::o;47026:159::-;47166:11;47162:1;47154:6;47150:14;47143:35;47026:159;:::o;47191:231::-;47331:34;47327:1;47319:6;47315:14;47308:58;47400:14;47395:2;47387:6;47383:15;47376:39;47191:231;:::o;47428:157::-;47568:9;47564:1;47556:6;47552:14;47545:33;47428:157;:::o;47591:243::-;47731:34;47727:1;47719:6;47715:14;47708:58;47800:26;47795:2;47787:6;47783:15;47776:51;47591:243;:::o;47840:229::-;47980:34;47976:1;47968:6;47964:14;47957:58;48049:12;48044:2;48036:6;48032:15;48025:37;47840:229;:::o;48075:228::-;48215:34;48211:1;48203:6;48199:14;48192:58;48284:11;48279:2;48271:6;48267:15;48260:36;48075:228;:::o;48309:158::-;48449:10;48445:1;48437:6;48433:14;48426:34;48309:158;:::o;48473:182::-;48613:34;48609:1;48601:6;48597:14;48590:58;48473:182;:::o;48661:231::-;48801:34;48797:1;48789:6;48785:14;48778:58;48870:14;48865:2;48857:6;48853:15;48846:39;48661:231;:::o;48898:182::-;49038:34;49034:1;49026:6;49022:14;49015:58;48898:182;:::o;49086:160::-;49226:12;49222:1;49214:6;49210:14;49203:36;49086:160;:::o;49252:234::-;49392:34;49388:1;49380:6;49376:14;49369:58;49461:17;49456:2;49448:6;49444:15;49437:42;49252:234;:::o;49492:151::-;49632:3;49628:1;49620:6;49616:14;49609:27;49492:151;:::o;49649:157::-;49789:9;49785:1;49777:6;49773:14;49766:33;49649:157;:::o;49812:220::-;49952:34;49948:1;49940:6;49936:14;49929:58;50021:3;50016:2;50008:6;50004:15;49997:28;49812:220;:::o;50038:236::-;50178:34;50174:1;50166:6;50162:14;50155:58;50247:19;50242:2;50234:6;50230:15;50223:44;50038:236;:::o;50280:231::-;50420:34;50416:1;50408:6;50404:14;50397:58;50489:14;50484:2;50476:6;50472:15;50465:39;50280:231;:::o;50517:158::-;50657:10;50653:1;50645:6;50641:14;50634:34;50517:158;:::o;50681:154::-;50821:6;50817:1;50809:6;50805:14;50798:30;50681:154;:::o;50841:122::-;50914:24;50932:5;50914:24;:::i;:::-;50907:5;50904:35;50894:63;;50953:1;50950;50943:12;50894:63;50841:122;:::o;50969:116::-;51039:21;51054:5;51039:21;:::i;:::-;51032:5;51029:32;51019:60;;51075:1;51072;51065:12;51019:60;50969:116;:::o;51091:122::-;51164:24;51182:5;51164:24;:::i;:::-;51157:5;51154:35;51144:63;;51203:1;51200;51193:12;51144:63;51091:122;:::o;51219:120::-;51291:23;51308:5;51291:23;:::i;:::-;51284:5;51281:34;51271:62;;51329:1;51326;51319:12;51271:62;51219:120;:::o;51345:122::-;51418:24;51436:5;51418:24;:::i;:::-;51411:5;51408:35;51398:63;;51457:1;51454;51447:12;51398:63;51345:122;:::o
Swarm Source
ipfs://01351b773fc2871d36940f65763d1e66c844d07bdc235e0cdd6ae5b346c7c998
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.