More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 65 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 19239201 | 405 days ago | IN | 0 ETH | 0.00115398 | ||||
Transfer From | 18202566 | 551 days ago | IN | 0 ETH | 0.00042067 | ||||
Safe Transfer Fr... | 16968622 | 724 days ago | IN | 0 ETH | 0.00153041 | ||||
Pre Sale Mint | 16935102 | 729 days ago | IN | 0.60105496 ETH | 0.00470548 | ||||
Pre Sale Mint | 16826403 | 744 days ago | IN | 0.60717568 ETH | 0.01093588 | ||||
Pre Sale Mint | 16816834 | 746 days ago | IN | 0.66843967 ETH | 0.0025811 | ||||
Pre Sale Mint | 16733442 | 757 days ago | IN | 0.64435012 ETH | 0.00299447 | ||||
Pre Sale Mint | 16686291 | 764 days ago | IN | 0.65547366 ETH | 0.00587469 | ||||
Transfer From | 16669223 | 766 days ago | IN | 0 ETH | 0.00126767 | ||||
Pre Sale Mint | 16640407 | 770 days ago | IN | 0.63567362 ETH | 0.00350316 | ||||
Pre Sale Mint | 16635236 | 771 days ago | IN | 0.67532002 ETH | 0.0082418 | ||||
Pre Sale Mint | 16616016 | 774 days ago | IN | 0.70551492 ETH | 0.00217613 | ||||
Pre Sale Mint | 16615311 | 774 days ago | IN | 0.69431251 ETH | 0.00205714 | ||||
Pre Sale Mint | 16592638 | 777 days ago | IN | 0.66342462 ETH | 0.00614488 | ||||
Transfer From | 16591598 | 777 days ago | IN | 0 ETH | 0.00161658 | ||||
Safe Transfer Fr... | 16579621 | 779 days ago | IN | 0 ETH | 0.00286634 | ||||
Pre Sale Mint | 16574375 | 780 days ago | IN | 0.65935251 ETH | 0.00322909 | ||||
Pre Sale Mint | 16558633 | 782 days ago | IN | 0.64181497 ETH | 0.00268229 | ||||
Pre Sale Mint | 16492330 | 791 days ago | IN | 0.68188444 ETH | 0.00460646 | ||||
Pre Sale Mint | 16490380 | 791 days ago | IN | 0.67787505 ETH | 0.00209771 | ||||
Pre Sale Mint | 16471624 | 794 days ago | IN | 0.66927176 ETH | 0.00370959 | ||||
Pre Sale Mint | 16436425 | 799 days ago | IN | 0.70590169 ETH | 0.00283723 | ||||
Safe Transfer Fr... | 16420727 | 801 days ago | IN | 0 ETH | 0.00212173 | ||||
Pre Sale Mint | 16420715 | 801 days ago | IN | 0.69776114 ETH | 0.00573663 | ||||
Pre Sale Mint | 16414866 | 802 days ago | IN | 0.69729639 ETH | 0.0079789 |
Latest 5 internal transactions
Advanced mode:
Loading...
Loading
Contract Name:
InfinityNFT
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./Ownable.sol"; import "./Strings.sol"; import "./MerkleProof.sol"; import "./AggregatorV3Interface.sol"; contract InfinityNFT is ERC721, Ownable { using Address for address payable; enum Status { Pause, Presale, WhitelistSale, PublicSale } Status public contractStatus; //PRICES AND WITHDRAW ADDRESS AggregatorV3Interface private usdByEthFeed; AggregatorV3Interface private usdByEuroFeed; address public fundsReceiver = 0x7FaEc2C729bE9deED48E1805E9F87E4FAa5a311f; uint256 public priceInEuro = 1000; uint256 public maxMintPerAddress = 10; //SUPPLIES uint256 public preSaleSupply; uint256 public PRE_SALE_MAX_SUPPLY = 499; uint256 public artistSupply; uint256 public ARTIST_MAX_SUPPLY = 1; uint256 public saleSupply; uint256 public SALE_MAX_SUPPLY = 4500; uint256 public MAX_SUPPLY = SALE_MAX_SUPPLY + PRE_SALE_MAX_SUPPLY + ARTIST_MAX_SUPPLY; //MERKLE ROOT FOR WHITELIST MINTS bytes32 public merkleRoot; //metadatas string public baseURI = "ipfs://Qmb2egjx8rQFzSk9fEpbdsT3ezPCeuF5RbiQKtTzgyzWDf/"; string public contractURI = "ipfs://QmfTt8QCkRcSZCydXp2ZD5EsdSwQarWyHHLb85BETH6h2G/contract.json"; /* * @param - usdByEthFeedAddress : chainlink usd/eth converter address * @param – usdByEuroFeedAddress: chainlink usd/euro converter address */ constructor(address usdByEthFeedAddress, address usdByEuroFeedAddress) ERC721("INFINITY NFT PASS", "INF PASS") { usdByEthFeed = AggregatorV3Interface(usdByEthFeedAddress); usdByEuroFeed = AggregatorV3Interface(usdByEuroFeedAddress); } //PRE SALE MINT FUNCTIONS function preSaleMint(address to, uint256 quantity) external payable { require(contractStatus == Status.Presale, "Pre sale not enabled"); require(balanceOf(to)+quantity<=maxMintPerAddress, "Mint limit reached"); _checkPreSaleSupply(quantity); _checkPayment(quantity); _preSaleMint(to, quantity); } function presaleGiftDrop(address to, uint256 quantity) external onlyOwner { _checkPreSaleSupply(quantity); _preSaleMint(to, quantity); } function _checkPreSaleSupply(uint256 quantity) private view { require(quantity>0, "quantity must be positive"); require(quantity+preSaleSupply<=PRE_SALE_MAX_SUPPLY, "sale max supply reached"); } function _preSaleMint(address to, uint256 quantity) private { unchecked { for(uint256 i=1;i<=quantity;i++){ _mint(to, preSaleSupply + i); } preSaleSupply = preSaleSupply + quantity; } } //ARTIST DROP FUNCTIONS function artistDrop(address to) external onlyOwner { _checkArtistSupply(1); _artistMint(to); } function _checkArtistSupply(uint256 quantity) private view { require(quantity>0, "quantity must be positive"); require(quantity+artistSupply<=ARTIST_MAX_SUPPLY, "sale max supply reached"); } function _artistMint(address to) private { unchecked { _mint(to, PRE_SALE_MAX_SUPPLY + (++artistSupply)); } } //WHITELIST AND PUBLIC SALE MINT FUNCTIONS function whiteListMint(uint256 quantity, bytes32[] calldata _proof) external payable { require(contractStatus == Status.WhitelistSale, "Whitelist sale not enabled"); require(isWhitelistedAddress(msg.sender, _proof), "Invalid merkle proof"); require(balanceOf(msg.sender)+quantity<=maxMintPerAddress, "Mint limit reached"); _checkSaleSupply(quantity); _checkPayment(quantity); _saleMint(msg.sender, quantity); } function publicMint(address to, uint256 quantity) external payable { require(contractStatus == Status.PublicSale, "Public sale not enabled"); require(balanceOf(to)+quantity<=maxMintPerAddress, "Mint limit reached"); _checkSaleSupply(quantity); _checkPayment(quantity); _saleMint(to, quantity); } function saleGiftDrop(address to, uint256 quantity) external onlyOwner { _checkSaleSupply(quantity); _saleMint(to, quantity); } function _checkSaleSupply(uint256 quantity) private view { require(quantity>0, "quantity must be positive"); require(quantity+saleSupply<=SALE_MAX_SUPPLY, "sale max supply reached"); } function _saleMint(address to, uint256 quantity) private { unchecked { for(uint256 i = 1;i<=quantity;i++){ _mint(to, PRE_SALE_MAX_SUPPLY + ARTIST_MAX_SUPPLY + saleSupply + i); } saleSupply = saleSupply + quantity; } } //PAYMENT CHECKER function _checkPayment(uint256 quantity) private view { uint256 priceInWei = getNftWeiPrice() * quantity; uint256 minPrice = (priceInWei * 995) / 1000; uint256 maxPrice = (priceInWei * 1005) / 1000; require(msg.value >= minPrice, "Not enough ETH"); require(msg.value <= maxPrice, "Too much ETH"); } //TOTAL SUPPLY REQUIRED FUNCTION function totalSupply() external view returns(uint256) { return preSaleSupply+saleSupply+artistSupply; } //ADMIN SETTERS function setStatus(uint256 step) external onlyOwner { contractStatus = Status(step); } function setMerkleRoot(bytes32 root) external onlyOwner { merkleRoot = root; } function setPriceInEuro(uint256 price) external onlyOwner { priceInEuro = price; } function setUsdByEthFeed(address usdByEthFeedAddress) external onlyOwner { usdByEthFeed = AggregatorV3Interface(usdByEthFeedAddress); } function setUsdByEuroFeed(address usdByEuroFeedAddress) external onlyOwner { usdByEuroFeed = AggregatorV3Interface(usdByEuroFeedAddress); } //METADATA URI BUILDER function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "URI query for nonexistent token"); // Concatenate the baseURI and the tokenId as the tokenId should // just be appended at the end to access the token metadata return string(abi.encodePacked(baseURI, Strings.toString(tokenId), ".json")); } //PRICE CALCULATOR FUNCTIONS function getUsdByEth() private view returns (uint256) { (, int256 price, , , ) = usdByEthFeed.latestRoundData(); return uint256(price); } function getUsdByEuro() private view returns (uint256) { (, int256 price, , , ) = usdByEuroFeed.latestRoundData(); return uint256(price); } function getNftWeiPrice() public view returns (uint256) { uint256 priceInDollar = (priceInEuro * getUsdByEuro() * 10**18) / 10**usdByEuroFeed.decimals(); uint256 weiPrice = (priceInDollar * 10**usdByEthFeed.decimals()) / getUsdByEth(); return weiPrice; } //MERKLE TREE FUNCTIONS function isWhitelistedAddress(address _address, bytes32[] calldata _proof) private view returns(bool) { bytes32 addressHash = keccak256(abi.encodePacked(_address)); return MerkleProof.verifyCalldata(_proof, merkleRoot, addressHash); } //FUNDS WITHDRAW FUNCTION function retrieveFunds() external { require( msg.sender == owner() || msg.sender == fundsReceiver, "Not allowed" ); payable(fundsReceiver).sendValue(address(this).balance); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); // getRoundData and latestRoundData should both raise "No data present" // if they do not have data to report, instead of returning unset values // which could be misinterpreted as actual reported values. function getRoundData(uint80 _roundId) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); }
// 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 // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) 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 (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); 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 overridden 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 token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); 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: caller is not token 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: caller is not token 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) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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 an {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 an {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 Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly 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 // 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 // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) 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`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (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 (last updated v4.7.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Tree 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 Calldata version of {verify} * * _Available since v4.7._ */ function verifyCalldata( bytes32[] calldata proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProofCalldata(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++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} * * _Available since v4.7._ */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be proved to be a part of a Merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * _Available since v4.7._ */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * _Available since v4.7._ */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and the sibling nodes in `proof`, * consuming from one or the other at each step according to the instructions given by * `proofFlags`. * * _Available since v4.7._ */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof} * * _Available since v4.7._ */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) 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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"usdByEthFeedAddress","type":"address"},{"internalType":"address","name":"usdByEuroFeedAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"ARTIST_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRE_SALE_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"artistDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artistSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractStatus","outputs":[{"internalType":"enum InfinityNFT.Status","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundsReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNftWeiPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preSaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"presaleGiftDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"priceInEuro","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"retrieveFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"saleGiftDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPriceInEuro","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"step","type":"uint256"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usdByEthFeedAddress","type":"address"}],"name":"setUsdByEthFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usdByEuroFeedAddress","type":"address"}],"name":"setUsdByEuroFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"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":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"whiteListMint","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052737faec2c729be9deed48e1805e9f87e4faa5a311f600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103e8600a55600a600b556101f3600d556001600f55611194601155600f54600d546011546200008a919062000365565b62000096919062000365565b6012556040518060600160405280603681526020016200515d6036913960149081620000c3919062000610565b50604051806080016040528060438152602001620051936043913960159081620000ee919062000610565b50348015620000fc57600080fd5b50604051620051d6380380620051d6833981810160405281019062000122919062000761565b6040518060400160405280601181526020017f494e46494e495459204e465420504153530000000000000000000000000000008152506040518060400160405280600881526020017f494e46205041535300000000000000000000000000000000000000000000000081525081600090816200019f919062000610565b508060019081620001b1919062000610565b505050620001d4620001c86200025e60201b60201c565b6200026660201b60201c565b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620007a8565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000372826200032c565b91506200037f836200032c565b92508282019050808211156200039a576200039962000336565b5b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200042257607f821691505b602082108103620004385762000437620003da565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000463565b620004ae868362000463565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620004f1620004eb620004e5846200032c565b620004c6565b6200032c565b9050919050565b6000819050919050565b6200050d83620004d0565b620005256200051c82620004f8565b84845462000470565b825550505050565b600090565b6200053c6200052d565b6200054981848462000502565b505050565b5b8181101562000571576200056560008262000532565b6001810190506200054f565b5050565b601f821115620005c0576200058a816200043e565b620005958462000453565b81016020851015620005a5578190505b620005bd620005b48562000453565b8301826200054e565b50505b505050565b600082821c905092915050565b6000620005e560001984600802620005c5565b1980831691505092915050565b6000620006008383620005d2565b9150826002028217905092915050565b6200061b82620003a0565b67ffffffffffffffff811115620006375762000636620003ab565b5b62000643825462000409565b6200065082828562000575565b600060209050601f83116001811462000688576000841562000673578287015190505b6200067f8582620005f2565b865550620006ef565b601f19841662000698866200043e565b60005b82811015620006c2578489015182556001820191506020850194506020810190506200069b565b86831015620006e25784890151620006de601f891682620005d2565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200072982620006fc565b9050919050565b6200073b816200071c565b81146200074757600080fd5b50565b6000815190506200075b8162000730565b92915050565b600080604083850312156200077b576200077a620006f7565b5b60006200078b858286016200074a565b92505060206200079e858286016200074a565b9150509250929050565b6149a580620007b86000396000f3fe6080604052600436106102675760003560e01c80636c0360eb11610144578063b88d4fde116100b6578063e8500e661161007a578063e8500e66146108bd578063e8a3d485146108e6578063e985e9c514610911578063f2fde38b1461094e578063fc95acd414610977578063ffd92291146109a257610267565b8063b88d4fde146107e7578063c6ee20d214610810578063c87b56dd1461083b578063ce6df2b914610878578063de730f381461089457610267565b80637e5b8106116101085780637e5b8106146106e7578063826d7001146107125780638da5cb5b1461073d57806395d89b4114610768578063a22cb46514610793578063a96af0f4146107bc57610267565b80636c0360eb1461061457806370a082311461063f578063715018a61461067c57806374f1bef7146106935780637cb64759146106be57610267565b8063259769cc116101dd57806342842e0e116101a157806342842e0e1461052757806346ff3f7814610550578063572849c41461056c57806361b20d8c146105975780636352211e146105ae57806369ba1a75146105eb57610267565b8063259769cc146104525780632e055bcc1461047d5780632eb4a7ab146104a857806330f4d784146104d357806332cb6b0c146104fc57610267565b8063118768751161022f578063118768751461036557806318160ddd146103815780632020fab7146103ac57806323b872dd146103d557806323c7e09c146103fe5780632404dec11461042957610267565b806301ffc9a71461026c57806306fdde03146102a95780630807f918146102d4578063081812fc146102ff578063095ea7b31461033c575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190612dec565b6109cb565b6040516102a09190612e34565b60405180910390f35b3480156102b557600080fd5b506102be610aad565b6040516102cb9190612edf565b60405180910390f35b3480156102e057600080fd5b506102e9610b3f565b6040516102f69190612f1a565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190612f61565b610b45565b6040516103339190612fcf565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190613016565b610b8b565b005b61037f600480360381019061037a91906130bb565b610ca2565b005b34801561038d57600080fd5b50610396610ddb565b6040516103a39190612f1a565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce919061311b565b610dff565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190613148565b610e4b565b005b34801561040a57600080fd5b50610413610eab565b6040516104209190612fcf565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190612f61565b610ed1565b005b34801561045e57600080fd5b50610467610ee3565b6040516104749190612f1a565b60405180910390f35b34801561048957600080fd5b50610492610ee9565b60405161049f9190612f1a565b60405180910390f35b3480156104b457600080fd5b506104bd610eef565b6040516104ca91906131b4565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190613016565b610ef5565b005b34801561050857600080fd5b50610511610f14565b60405161051e9190612f1a565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190613148565b610f1a565b005b61056a60048036038101906105659190613016565b610f3a565b005b34801561057857600080fd5b50610581611028565b60405161058e9190612f1a565b60405180910390f35b3480156105a357600080fd5b506105ac61102e565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190612f61565b611148565b6040516105e29190612fcf565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190612f61565b6111f9565b005b34801561062057600080fd5b50610629611240565b6040516106369190612edf565b60405180910390f35b34801561064b57600080fd5b506106666004803603810190610661919061311b565b6112ce565b6040516106739190612f1a565b60405180910390f35b34801561068857600080fd5b50610691611385565b005b34801561069f57600080fd5b506106a8611399565b6040516106b59190612f1a565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e091906131fb565b611533565b005b3480156106f357600080fd5b506106fc611545565b6040516107099190612f1a565b60405180910390f35b34801561071e57600080fd5b5061072761154b565b6040516107349190612f1a565b60405180910390f35b34801561074957600080fd5b50610752611551565b60405161075f9190612fcf565b60405180910390f35b34801561077457600080fd5b5061077d61157b565b60405161078a9190612edf565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b59190613254565b61160d565b005b3480156107c857600080fd5b506107d1611623565b6040516107de9190612f1a565b60405180910390f35b3480156107f357600080fd5b5061080e600480360381019061080991906133c4565b611629565b005b34801561081c57600080fd5b5061082561168b565b60405161083291906134be565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d9190612f61565b61169e565b60405161086f9190612edf565b60405180910390f35b610892600480360381019061088d9190613016565b61171a565b005b3480156108a057600080fd5b506108bb60048036038101906108b6919061311b565b611807565b005b3480156108c957600080fd5b506108e460048036038101906108df9190613016565b611825565b005b3480156108f257600080fd5b506108fb611844565b6040516109089190612edf565b60405180910390f35b34801561091d57600080fd5b50610938600480360381019061093391906134d9565b6118d2565b6040516109459190612e34565b60405180910390f35b34801561095a57600080fd5b506109756004803603810190610970919061311b565b611966565b005b34801561098357600080fd5b5061098c6119e9565b6040516109999190612f1a565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c4919061311b565b6119ef565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aa65750610aa582611a3b565b5b9050919050565b606060008054610abc90613548565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae890613548565b8015610b355780601f10610b0a57610100808354040283529160200191610b35565b820191906000526020600020905b815481529060010190602001808311610b1857829003601f168201915b5050505050905090565b60115481565b6000610b5082611aa5565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b9682611148565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd906135eb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c25611af0565b73ffffffffffffffffffffffffffffffffffffffff161480610c545750610c5381610c4e611af0565b6118d2565b5b610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a9061367d565b60405180910390fd5b610c9d8383611af8565b505050565b60026003811115610cb657610cb5613447565b5b600660149054906101000a900460ff166003811115610cd857610cd7613447565b5b14610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f906136e9565b60405180910390fd5b610d23338383611bb1565b610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5990613755565b60405180910390fd5b600b5483610d6f336112ce565b610d7991906137a4565b1115610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613824565b60405180910390fd5b610dc383611bf5565b610dcc83611c8d565b610dd63384611d6e565b505050565b6000600e54601054600c54610df091906137a4565b610dfa91906137a4565b905090565b610e07611daf565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610e5c610e56611af0565b82611e2d565b610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e92906138b6565b60405180910390fd5b610ea6838383611ec2565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ed9611daf565b80600a8190555050565b600d5481565b600c5481565b60135481565b610efd611daf565b610f0681611bf5565b610f108282611d6e565b5050565b60125481565b610f3583838360405180602001604052806000815250611629565b505050565b60016003811115610f4e57610f4d613447565b5b600660149054906101000a900460ff166003811115610f7057610f6f613447565b5b14610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790613922565b60405180910390fd5b600b5481610fbd846112ce565b610fc791906137a4565b1115611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90613824565b60405180910390fd5b61101181612128565b61101a81611c8d565b61102482826121c0565b5050565b600b5481565b611036611551565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110bc5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6110fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f29061398e565b60405180910390fd5b61114647600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166121f990919063ffffffff16565b565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e7906139fa565b60405180910390fd5b80915050919050565b611201611daf565b80600381111561121457611213613447565b5b600660146101000a81548160ff0219169083600381111561123857611237613447565b5b021790555050565b6014805461124d90613548565b80601f016020809104026020016040519081016040528092919081815260200182805461127990613548565b80156112c65780601f1061129b576101008083540402835291602001916112c6565b820191906000526020600020905b8154815290600101906020018083116112a957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361133e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133590613a8c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61138d611daf565b61139760006122ed565b565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142d9190613ae5565b600a6114399190613c45565b670de0b6b3a764000061144a6123b3565b600a546114579190613c90565b6114619190613c90565b61146b9190613d01565b90506000611477612454565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115089190613ae5565b600a6115149190613c45565b8361151f9190613c90565b6115299190613d01565b9050809250505090565b61153b611daf565b8060138190555050565b600e5481565b600f5481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461158a90613548565b80601f01602080910402602001604051908101604052809291908181526020018280546115b690613548565b80156116035780601f106115d857610100808354040283529160200191611603565b820191906000526020600020905b8154815290600101906020018083116115e657829003601f168201915b5050505050905090565b61161f611618611af0565b83836124f5565b5050565b60105481565b61163a611634611af0565b83611e2d565b611679576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611670906138b6565b60405180910390fd5b61168584848484612661565b50505050565b600660149054906101000a900460ff1681565b60606116a9826126bd565b6116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df90613d7e565b60405180910390fd5b60146116f383612729565b604051602001611704929190613ebe565b6040516020818303038152906040529050919050565b60038081111561172d5761172c613447565b5b600660149054906101000a900460ff16600381111561174f5761174e613447565b5b1461178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690613f39565b60405180910390fd5b600b548161179c846112ce565b6117a691906137a4565b11156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90613824565b60405180910390fd5b6117f081611bf5565b6117f981611c8d565b6118038282611d6e565b5050565b61180f611daf565b6118196001612889565b61182281612921565b50565b61182d611daf565b61183681612128565b61184082826121c0565b5050565b6015805461185190613548565b80601f016020809104026020016040519081016040528092919081815260200182805461187d90613548565b80156118ca5780601f1061189f576101008083540402835291602001916118ca565b820191906000526020600020905b8154815290600101906020018083116118ad57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61196e611daf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d490613fcb565b60405180910390fd5b6119e6816122ed565b50565b600a5481565b6119f7611daf565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611aae816126bd565b611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae4906139fa565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b6b83611148565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008084604051602001611bc59190614033565b604051602081830303815290604052805190602001209050611beb848460135484612940565b9150509392505050565b60008111611c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2f9061409a565b60405180910390fd5b60115460105482611c4991906137a4565b1115611c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8190614106565b60405180910390fd5b50565b600081611c98611399565b611ca29190613c90565b905060006103e86103e383611cb79190613c90565b611cc19190613d01565b905060006103e86103ed84611cd69190613c90565b611ce09190613d01565b905081341015611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90614172565b60405180910390fd5b80341115611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f906141de565b60405180910390fd5b50505050565b6000600190505b818111611d9f57611d928382601054600f54600d54010101612959565b8080600101915050611d75565b5080601054016010819055505050565b611db7611af0565b73ffffffffffffffffffffffffffffffffffffffff16611dd5611551565b73ffffffffffffffffffffffffffffffffffffffff1614611e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e229061424a565b60405180910390fd5b565b600080611e3983611148565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e7b5750611e7a81856118d2565b5b80611eb957508373ffffffffffffffffffffffffffffffffffffffff16611ea184610b45565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ee282611148565b73ffffffffffffffffffffffffffffffffffffffff1614611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f906142dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e9061436e565b60405180910390fd5b611fb2838383612b32565b611fbd600082611af8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461200d919061438e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461206491906137a4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612123838383612b37565b505050565b6000811161216b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121629061409a565b60405180910390fd5b600d54600c548261217c91906137a4565b11156121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b490614106565b60405180910390fd5b50565b6000600190505b8181116121e9576121dc8382600c5401612959565b80806001019150506121c7565b5080600c5401600c819055505050565b8047101561223c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122339061440e565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516122629061445f565b60006040518083038185875af1925050503d806000811461229f576040519150601f19603f3d011682016040523d82523d6000602084013e6122a4565b606091505b50509050806122e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df906144e6565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015612423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124479190614593565b5050509150508091505090565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156124c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e89190614593565b5050509150508091505090565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255a9061465a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126549190612e34565b60405180910390a3505050565b61266c848484611ec2565b61267884848484612b3c565b6126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae906146ec565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060008203612770576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612884565b600082905060005b600082146127a257808061278b9061470c565b915050600a8261279b9190613d01565b9150612778565b60008167ffffffffffffffff8111156127be576127bd613299565b5b6040519080825280601f01601f1916602001820160405280156127f05781602001600182028036833780820191505090505b5090505b6000851461287d57600182612809919061438e565b9150600a856128189190614754565b603061282491906137a4565b60f81b81838151811061283a57612839614785565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128769190613d01565b94506127f4565b8093505050505b919050565b600081116128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c39061409a565b60405180910390fd5b600f54600e54826128dd91906137a4565b111561291e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291590614106565b60405180910390fd5b50565b61293d81600e60008154600101919050819055600d5401612959565b50565b60008261294e868685612cc3565b149050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf90614800565b60405180910390fd5b6129d1816126bd565b15612a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a089061486c565b60405180910390fd5b612a1d60008383612b32565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a6d91906137a4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b2e60008383612b37565b5050565b505050565b505050565b6000612b5d8473ffffffffffffffffffffffffffffffffffffffff16612d1b565b15612cb6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b86611af0565b8786866040518563ffffffff1660e01b8152600401612ba894939291906148e1565b6020604051808303816000875af1925050508015612be457506040513d601f19601f82011682018060405250810190612be19190614942565b60015b612c66573d8060008114612c14576040519150601f19603f3d011682016040523d82523d6000602084013e612c19565b606091505b506000815103612c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c55906146ec565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cbb565b600190505b949350505050565b60008082905060005b85859050811015612d0f57612cfa82878784818110612cee57612ced614785565b5b90506020020135612d3e565b91508080612d079061470c565b915050612ccc565b50809150509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000818310612d5657612d518284612d69565b612d61565b612d608383612d69565b5b905092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612dc981612d94565b8114612dd457600080fd5b50565b600081359050612de681612dc0565b92915050565b600060208284031215612e0257612e01612d8a565b5b6000612e1084828501612dd7565b91505092915050565b60008115159050919050565b612e2e81612e19565b82525050565b6000602082019050612e496000830184612e25565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e89578082015181840152602081019050612e6e565b60008484015250505050565b6000601f19601f8301169050919050565b6000612eb182612e4f565b612ebb8185612e5a565b9350612ecb818560208601612e6b565b612ed481612e95565b840191505092915050565b60006020820190508181036000830152612ef98184612ea6565b905092915050565b6000819050919050565b612f1481612f01565b82525050565b6000602082019050612f2f6000830184612f0b565b92915050565b612f3e81612f01565b8114612f4957600080fd5b50565b600081359050612f5b81612f35565b92915050565b600060208284031215612f7757612f76612d8a565b5b6000612f8584828501612f4c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fb982612f8e565b9050919050565b612fc981612fae565b82525050565b6000602082019050612fe46000830184612fc0565b92915050565b612ff381612fae565b8114612ffe57600080fd5b50565b60008135905061301081612fea565b92915050565b6000806040838503121561302d5761302c612d8a565b5b600061303b85828601613001565b925050602061304c85828601612f4c565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f84011261307b5761307a613056565b5b8235905067ffffffffffffffff8111156130985761309761305b565b5b6020830191508360208202830111156130b4576130b3613060565b5b9250929050565b6000806000604084860312156130d4576130d3612d8a565b5b60006130e286828701612f4c565b935050602084013567ffffffffffffffff81111561310357613102612d8f565b5b61310f86828701613065565b92509250509250925092565b60006020828403121561313157613130612d8a565b5b600061313f84828501613001565b91505092915050565b60008060006060848603121561316157613160612d8a565b5b600061316f86828701613001565b935050602061318086828701613001565b925050604061319186828701612f4c565b9150509250925092565b6000819050919050565b6131ae8161319b565b82525050565b60006020820190506131c960008301846131a5565b92915050565b6131d88161319b565b81146131e357600080fd5b50565b6000813590506131f5816131cf565b92915050565b60006020828403121561321157613210612d8a565b5b600061321f848285016131e6565b91505092915050565b61323181612e19565b811461323c57600080fd5b50565b60008135905061324e81613228565b92915050565b6000806040838503121561326b5761326a612d8a565b5b600061327985828601613001565b925050602061328a8582860161323f565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132d182612e95565b810181811067ffffffffffffffff821117156132f0576132ef613299565b5b80604052505050565b6000613303612d80565b905061330f82826132c8565b919050565b600067ffffffffffffffff82111561332f5761332e613299565b5b61333882612e95565b9050602081019050919050565b82818337600083830152505050565b600061336761336284613314565b6132f9565b90508281526020810184848401111561338357613382613294565b5b61338e848285613345565b509392505050565b600082601f8301126133ab576133aa613056565b5b81356133bb848260208601613354565b91505092915050565b600080600080608085870312156133de576133dd612d8a565b5b60006133ec87828801613001565b94505060206133fd87828801613001565b935050604061340e87828801612f4c565b925050606085013567ffffffffffffffff81111561342f5761342e612d8f565b5b61343b87828801613396565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061348757613486613447565b5b50565b600081905061349882613476565b919050565b60006134a88261348a565b9050919050565b6134b88161349d565b82525050565b60006020820190506134d360008301846134af565b92915050565b600080604083850312156134f0576134ef612d8a565b5b60006134fe85828601613001565b925050602061350f85828601613001565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061356057607f821691505b60208210810361357357613572613519565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006135d5602183612e5a565b91506135e082613579565b604082019050919050565b60006020820190508181036000830152613604816135c8565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613667603e83612e5a565b91506136728261360b565b604082019050919050565b600060208201905081810360008301526136968161365a565b9050919050565b7f57686974656c6973742073616c65206e6f7420656e61626c6564000000000000600082015250565b60006136d3601a83612e5a565b91506136de8261369d565b602082019050919050565b60006020820190508181036000830152613702816136c6565b9050919050565b7f496e76616c6964206d65726b6c652070726f6f66000000000000000000000000600082015250565b600061373f601483612e5a565b915061374a82613709565b602082019050919050565b6000602082019050818103600083015261376e81613732565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137af82612f01565b91506137ba83612f01565b92508282019050808211156137d2576137d1613775565b5b92915050565b7f4d696e74206c696d697420726561636865640000000000000000000000000000600082015250565b600061380e601283612e5a565b9150613819826137d8565b602082019050919050565b6000602082019050818103600083015261383d81613801565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b60006138a0602e83612e5a565b91506138ab82613844565b604082019050919050565b600060208201905081810360008301526138cf81613893565b9050919050565b7f5072652073616c65206e6f7420656e61626c6564000000000000000000000000600082015250565b600061390c601483612e5a565b9150613917826138d6565b602082019050919050565b6000602082019050818103600083015261393b816138ff565b9050919050565b7f4e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b6000613978600b83612e5a565b915061398382613942565b602082019050919050565b600060208201905081810360008301526139a78161396b565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006139e4601883612e5a565b91506139ef826139ae565b602082019050919050565b60006020820190508181036000830152613a13816139d7565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613a76602983612e5a565b9150613a8182613a1a565b604082019050919050565b60006020820190508181036000830152613aa581613a69565b9050919050565b600060ff82169050919050565b613ac281613aac565b8114613acd57600080fd5b50565b600081519050613adf81613ab9565b92915050565b600060208284031215613afb57613afa612d8a565b5b6000613b0984828501613ad0565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115613b6957808604811115613b4557613b44613775565b5b6001851615613b545780820291505b8081029050613b6285613b12565b9450613b29565b94509492505050565b600082613b825760019050613c3e565b81613b905760009050613c3e565b8160018114613ba65760028114613bb057613bdf565b6001915050613c3e565b60ff841115613bc257613bc1613775565b5b8360020a915084821115613bd957613bd8613775565b5b50613c3e565b5060208310610133831016604e8410600b8410161715613c145782820a905083811115613c0f57613c0e613775565b5b613c3e565b613c218484846001613b1f565b92509050818404811115613c3857613c37613775565b5b81810290505b9392505050565b6000613c5082612f01565b9150613c5b83613aac565b9250613c887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b72565b905092915050565b6000613c9b82612f01565b9150613ca683612f01565b9250828202613cb481612f01565b91508282048414831517613ccb57613cca613775565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d0c82612f01565b9150613d1783612f01565b925082613d2757613d26613cd2565b5b828204905092915050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b6000613d68601f83612e5a565b9150613d7382613d32565b602082019050919050565b60006020820190508181036000830152613d9781613d5b565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613dcb81613548565b613dd58186613d9e565b94506001821660008114613df05760018114613e0557613e38565b60ff1983168652811515820286019350613e38565b613e0e85613da9565b60005b83811015613e3057815481890152600182019150602081019050613e11565b838801955050505b50505092915050565b6000613e4c82612e4f565b613e568185613d9e565b9350613e66818560208601612e6b565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613ea8600583613d9e565b9150613eb382613e72565b600582019050919050565b6000613eca8285613dbe565b9150613ed68284613e41565b9150613ee182613e9b565b91508190509392505050565b7f5075626c69632073616c65206e6f7420656e61626c6564000000000000000000600082015250565b6000613f23601783612e5a565b9150613f2e82613eed565b602082019050919050565b60006020820190508181036000830152613f5281613f16565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fb5602683612e5a565b9150613fc082613f59565b604082019050919050565b60006020820190508181036000830152613fe481613fa8565b9050919050565b60008160601b9050919050565b600061400382613feb565b9050919050565b600061401582613ff8565b9050919050565b61402d61402882612fae565b61400a565b82525050565b600061403f828461401c565b60148201915081905092915050565b7f7175616e74697479206d75737420626520706f73697469766500000000000000600082015250565b6000614084601983612e5a565b915061408f8261404e565b602082019050919050565b600060208201905081810360008301526140b381614077565b9050919050565b7f73616c65206d617820737570706c792072656163686564000000000000000000600082015250565b60006140f0601783612e5a565b91506140fb826140ba565b602082019050919050565b6000602082019050818103600083015261411f816140e3565b9050919050565b7f4e6f7420656e6f75676820455448000000000000000000000000000000000000600082015250565b600061415c600e83612e5a565b915061416782614126565b602082019050919050565b6000602082019050818103600083015261418b8161414f565b9050919050565b7f546f6f206d756368204554480000000000000000000000000000000000000000600082015250565b60006141c8600c83612e5a565b91506141d382614192565b602082019050919050565b600060208201905081810360008301526141f7816141bb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614234602083612e5a565b915061423f826141fe565b602082019050919050565b6000602082019050818103600083015261426381614227565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006142c6602583612e5a565b91506142d18261426a565b604082019050919050565b600060208201905081810360008301526142f5816142b9565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614358602483612e5a565b9150614363826142fc565b604082019050919050565b600060208201905081810360008301526143878161434b565b9050919050565b600061439982612f01565b91506143a483612f01565b92508282039050818111156143bc576143bb613775565b5b92915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006143f8601d83612e5a565b9150614403826143c2565b602082019050919050565b60006020820190508181036000830152614427816143eb565b9050919050565b600081905092915050565b50565b600061444960008361442e565b915061445482614439565b600082019050919050565b600061446a8261443c565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006144d0603a83612e5a565b91506144db82614474565b604082019050919050565b600060208201905081810360008301526144ff816144c3565b9050919050565b600069ffffffffffffffffffff82169050919050565b61452581614506565b811461453057600080fd5b50565b6000815190506145428161451c565b92915050565b6000819050919050565b61455b81614548565b811461456657600080fd5b50565b60008151905061457881614552565b92915050565b60008151905061458d81612f35565b92915050565b600080600080600060a086880312156145af576145ae612d8a565b5b60006145bd88828901614533565b95505060206145ce88828901614569565b94505060406145df8882890161457e565b93505060606145f08882890161457e565b925050608061460188828901614533565b9150509295509295909350565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614644601983612e5a565b915061464f8261460e565b602082019050919050565b6000602082019050818103600083015261467381614637565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006146d6603283612e5a565b91506146e18261467a565b604082019050919050565b60006020820190508181036000830152614705816146c9565b9050919050565b600061471782612f01565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361474957614748613775565b5b600182019050919050565b600061475f82612f01565b915061476a83612f01565b92508261477a57614779613cd2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006147ea602083612e5a565b91506147f5826147b4565b602082019050919050565b60006020820190508181036000830152614819816147dd565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614856601c83612e5a565b915061486182614820565b602082019050919050565b6000602082019050818103600083015261488581614849565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006148b38261488c565b6148bd8185614897565b93506148cd818560208601612e6b565b6148d681612e95565b840191505092915050565b60006080820190506148f66000830187612fc0565b6149036020830186612fc0565b6149106040830185612f0b565b818103606083015261492281846148a8565b905095945050505050565b60008151905061493c81612dc0565b92915050565b60006020828403121561495857614957612d8a565b5b60006149668482850161492d565b9150509291505056fea2646970667358221220abaecdfce82fa42800b1dd8a370ddb649d246cca2d5267a4416d3324f6d1ef7164736f6c63430008110033697066733a2f2f516d623265676a78387251467a536b396645706264735433657a504365754635526269514b74547a67797a5744662f697066733a2f2f516d6654743851436b5263535a4379645870325a44354573645377516172577948484c62383542455448366832472f636f6e74726163742e6a736f6e0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000b49f677943bc038e9857d61e7d053caa2c1734c1
Deployed Bytecode
0x6080604052600436106102675760003560e01c80636c0360eb11610144578063b88d4fde116100b6578063e8500e661161007a578063e8500e66146108bd578063e8a3d485146108e6578063e985e9c514610911578063f2fde38b1461094e578063fc95acd414610977578063ffd92291146109a257610267565b8063b88d4fde146107e7578063c6ee20d214610810578063c87b56dd1461083b578063ce6df2b914610878578063de730f381461089457610267565b80637e5b8106116101085780637e5b8106146106e7578063826d7001146107125780638da5cb5b1461073d57806395d89b4114610768578063a22cb46514610793578063a96af0f4146107bc57610267565b80636c0360eb1461061457806370a082311461063f578063715018a61461067c57806374f1bef7146106935780637cb64759146106be57610267565b8063259769cc116101dd57806342842e0e116101a157806342842e0e1461052757806346ff3f7814610550578063572849c41461056c57806361b20d8c146105975780636352211e146105ae57806369ba1a75146105eb57610267565b8063259769cc146104525780632e055bcc1461047d5780632eb4a7ab146104a857806330f4d784146104d357806332cb6b0c146104fc57610267565b8063118768751161022f578063118768751461036557806318160ddd146103815780632020fab7146103ac57806323b872dd146103d557806323c7e09c146103fe5780632404dec11461042957610267565b806301ffc9a71461026c57806306fdde03146102a95780630807f918146102d4578063081812fc146102ff578063095ea7b31461033c575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190612dec565b6109cb565b6040516102a09190612e34565b60405180910390f35b3480156102b557600080fd5b506102be610aad565b6040516102cb9190612edf565b60405180910390f35b3480156102e057600080fd5b506102e9610b3f565b6040516102f69190612f1a565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190612f61565b610b45565b6040516103339190612fcf565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190613016565b610b8b565b005b61037f600480360381019061037a91906130bb565b610ca2565b005b34801561038d57600080fd5b50610396610ddb565b6040516103a39190612f1a565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce919061311b565b610dff565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190613148565b610e4b565b005b34801561040a57600080fd5b50610413610eab565b6040516104209190612fcf565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190612f61565b610ed1565b005b34801561045e57600080fd5b50610467610ee3565b6040516104749190612f1a565b60405180910390f35b34801561048957600080fd5b50610492610ee9565b60405161049f9190612f1a565b60405180910390f35b3480156104b457600080fd5b506104bd610eef565b6040516104ca91906131b4565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190613016565b610ef5565b005b34801561050857600080fd5b50610511610f14565b60405161051e9190612f1a565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190613148565b610f1a565b005b61056a60048036038101906105659190613016565b610f3a565b005b34801561057857600080fd5b50610581611028565b60405161058e9190612f1a565b60405180910390f35b3480156105a357600080fd5b506105ac61102e565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190612f61565b611148565b6040516105e29190612fcf565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190612f61565b6111f9565b005b34801561062057600080fd5b50610629611240565b6040516106369190612edf565b60405180910390f35b34801561064b57600080fd5b506106666004803603810190610661919061311b565b6112ce565b6040516106739190612f1a565b60405180910390f35b34801561068857600080fd5b50610691611385565b005b34801561069f57600080fd5b506106a8611399565b6040516106b59190612f1a565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e091906131fb565b611533565b005b3480156106f357600080fd5b506106fc611545565b6040516107099190612f1a565b60405180910390f35b34801561071e57600080fd5b5061072761154b565b6040516107349190612f1a565b60405180910390f35b34801561074957600080fd5b50610752611551565b60405161075f9190612fcf565b60405180910390f35b34801561077457600080fd5b5061077d61157b565b60405161078a9190612edf565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b59190613254565b61160d565b005b3480156107c857600080fd5b506107d1611623565b6040516107de9190612f1a565b60405180910390f35b3480156107f357600080fd5b5061080e600480360381019061080991906133c4565b611629565b005b34801561081c57600080fd5b5061082561168b565b60405161083291906134be565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d9190612f61565b61169e565b60405161086f9190612edf565b60405180910390f35b610892600480360381019061088d9190613016565b61171a565b005b3480156108a057600080fd5b506108bb60048036038101906108b6919061311b565b611807565b005b3480156108c957600080fd5b506108e460048036038101906108df9190613016565b611825565b005b3480156108f257600080fd5b506108fb611844565b6040516109089190612edf565b60405180910390f35b34801561091d57600080fd5b50610938600480360381019061093391906134d9565b6118d2565b6040516109459190612e34565b60405180910390f35b34801561095a57600080fd5b506109756004803603810190610970919061311b565b611966565b005b34801561098357600080fd5b5061098c6119e9565b6040516109999190612f1a565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c4919061311b565b6119ef565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aa65750610aa582611a3b565b5b9050919050565b606060008054610abc90613548565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae890613548565b8015610b355780601f10610b0a57610100808354040283529160200191610b35565b820191906000526020600020905b815481529060010190602001808311610b1857829003601f168201915b5050505050905090565b60115481565b6000610b5082611aa5565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b9682611148565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd906135eb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c25611af0565b73ffffffffffffffffffffffffffffffffffffffff161480610c545750610c5381610c4e611af0565b6118d2565b5b610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a9061367d565b60405180910390fd5b610c9d8383611af8565b505050565b60026003811115610cb657610cb5613447565b5b600660149054906101000a900460ff166003811115610cd857610cd7613447565b5b14610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f906136e9565b60405180910390fd5b610d23338383611bb1565b610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5990613755565b60405180910390fd5b600b5483610d6f336112ce565b610d7991906137a4565b1115610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613824565b60405180910390fd5b610dc383611bf5565b610dcc83611c8d565b610dd63384611d6e565b505050565b6000600e54601054600c54610df091906137a4565b610dfa91906137a4565b905090565b610e07611daf565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610e5c610e56611af0565b82611e2d565b610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e92906138b6565b60405180910390fd5b610ea6838383611ec2565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ed9611daf565b80600a8190555050565b600d5481565b600c5481565b60135481565b610efd611daf565b610f0681611bf5565b610f108282611d6e565b5050565b60125481565b610f3583838360405180602001604052806000815250611629565b505050565b60016003811115610f4e57610f4d613447565b5b600660149054906101000a900460ff166003811115610f7057610f6f613447565b5b14610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790613922565b60405180910390fd5b600b5481610fbd846112ce565b610fc791906137a4565b1115611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90613824565b60405180910390fd5b61101181612128565b61101a81611c8d565b61102482826121c0565b5050565b600b5481565b611036611551565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110bc5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6110fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f29061398e565b60405180910390fd5b61114647600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166121f990919063ffffffff16565b565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e7906139fa565b60405180910390fd5b80915050919050565b611201611daf565b80600381111561121457611213613447565b5b600660146101000a81548160ff0219169083600381111561123857611237613447565b5b021790555050565b6014805461124d90613548565b80601f016020809104026020016040519081016040528092919081815260200182805461127990613548565b80156112c65780601f1061129b576101008083540402835291602001916112c6565b820191906000526020600020905b8154815290600101906020018083116112a957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361133e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133590613a8c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61138d611daf565b61139760006122ed565b565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142d9190613ae5565b600a6114399190613c45565b670de0b6b3a764000061144a6123b3565b600a546114579190613c90565b6114619190613c90565b61146b9190613d01565b90506000611477612454565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115089190613ae5565b600a6115149190613c45565b8361151f9190613c90565b6115299190613d01565b9050809250505090565b61153b611daf565b8060138190555050565b600e5481565b600f5481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461158a90613548565b80601f01602080910402602001604051908101604052809291908181526020018280546115b690613548565b80156116035780601f106115d857610100808354040283529160200191611603565b820191906000526020600020905b8154815290600101906020018083116115e657829003601f168201915b5050505050905090565b61161f611618611af0565b83836124f5565b5050565b60105481565b61163a611634611af0565b83611e2d565b611679576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611670906138b6565b60405180910390fd5b61168584848484612661565b50505050565b600660149054906101000a900460ff1681565b60606116a9826126bd565b6116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df90613d7e565b60405180910390fd5b60146116f383612729565b604051602001611704929190613ebe565b6040516020818303038152906040529050919050565b60038081111561172d5761172c613447565b5b600660149054906101000a900460ff16600381111561174f5761174e613447565b5b1461178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690613f39565b60405180910390fd5b600b548161179c846112ce565b6117a691906137a4565b11156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90613824565b60405180910390fd5b6117f081611bf5565b6117f981611c8d565b6118038282611d6e565b5050565b61180f611daf565b6118196001612889565b61182281612921565b50565b61182d611daf565b61183681612128565b61184082826121c0565b5050565b6015805461185190613548565b80601f016020809104026020016040519081016040528092919081815260200182805461187d90613548565b80156118ca5780601f1061189f576101008083540402835291602001916118ca565b820191906000526020600020905b8154815290600101906020018083116118ad57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61196e611daf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d490613fcb565b60405180910390fd5b6119e6816122ed565b50565b600a5481565b6119f7611daf565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611aae816126bd565b611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae4906139fa565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b6b83611148565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008084604051602001611bc59190614033565b604051602081830303815290604052805190602001209050611beb848460135484612940565b9150509392505050565b60008111611c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2f9061409a565b60405180910390fd5b60115460105482611c4991906137a4565b1115611c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8190614106565b60405180910390fd5b50565b600081611c98611399565b611ca29190613c90565b905060006103e86103e383611cb79190613c90565b611cc19190613d01565b905060006103e86103ed84611cd69190613c90565b611ce09190613d01565b905081341015611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90614172565b60405180910390fd5b80341115611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f906141de565b60405180910390fd5b50505050565b6000600190505b818111611d9f57611d928382601054600f54600d54010101612959565b8080600101915050611d75565b5080601054016010819055505050565b611db7611af0565b73ffffffffffffffffffffffffffffffffffffffff16611dd5611551565b73ffffffffffffffffffffffffffffffffffffffff1614611e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e229061424a565b60405180910390fd5b565b600080611e3983611148565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e7b5750611e7a81856118d2565b5b80611eb957508373ffffffffffffffffffffffffffffffffffffffff16611ea184610b45565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ee282611148565b73ffffffffffffffffffffffffffffffffffffffff1614611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f906142dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e9061436e565b60405180910390fd5b611fb2838383612b32565b611fbd600082611af8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461200d919061438e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461206491906137a4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612123838383612b37565b505050565b6000811161216b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121629061409a565b60405180910390fd5b600d54600c548261217c91906137a4565b11156121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b490614106565b60405180910390fd5b50565b6000600190505b8181116121e9576121dc8382600c5401612959565b80806001019150506121c7565b5080600c5401600c819055505050565b8047101561223c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122339061440e565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516122629061445f565b60006040518083038185875af1925050503d806000811461229f576040519150601f19603f3d011682016040523d82523d6000602084013e6122a4565b606091505b50509050806122e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df906144e6565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015612423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124479190614593565b5050509150508091505090565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156124c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e89190614593565b5050509150508091505090565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255a9061465a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126549190612e34565b60405180910390a3505050565b61266c848484611ec2565b61267884848484612b3c565b6126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae906146ec565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060008203612770576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612884565b600082905060005b600082146127a257808061278b9061470c565b915050600a8261279b9190613d01565b9150612778565b60008167ffffffffffffffff8111156127be576127bd613299565b5b6040519080825280601f01601f1916602001820160405280156127f05781602001600182028036833780820191505090505b5090505b6000851461287d57600182612809919061438e565b9150600a856128189190614754565b603061282491906137a4565b60f81b81838151811061283a57612839614785565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128769190613d01565b94506127f4565b8093505050505b919050565b600081116128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c39061409a565b60405180910390fd5b600f54600e54826128dd91906137a4565b111561291e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291590614106565b60405180910390fd5b50565b61293d81600e60008154600101919050819055600d5401612959565b50565b60008261294e868685612cc3565b149050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf90614800565b60405180910390fd5b6129d1816126bd565b15612a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a089061486c565b60405180910390fd5b612a1d60008383612b32565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a6d91906137a4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b2e60008383612b37565b5050565b505050565b505050565b6000612b5d8473ffffffffffffffffffffffffffffffffffffffff16612d1b565b15612cb6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b86611af0565b8786866040518563ffffffff1660e01b8152600401612ba894939291906148e1565b6020604051808303816000875af1925050508015612be457506040513d601f19601f82011682018060405250810190612be19190614942565b60015b612c66573d8060008114612c14576040519150601f19603f3d011682016040523d82523d6000602084013e612c19565b606091505b506000815103612c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c55906146ec565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cbb565b600190505b949350505050565b60008082905060005b85859050811015612d0f57612cfa82878784818110612cee57612ced614785565b5b90506020020135612d3e565b91508080612d079061470c565b915050612ccc565b50809150509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000818310612d5657612d518284612d69565b612d61565b612d608383612d69565b5b905092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612dc981612d94565b8114612dd457600080fd5b50565b600081359050612de681612dc0565b92915050565b600060208284031215612e0257612e01612d8a565b5b6000612e1084828501612dd7565b91505092915050565b60008115159050919050565b612e2e81612e19565b82525050565b6000602082019050612e496000830184612e25565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e89578082015181840152602081019050612e6e565b60008484015250505050565b6000601f19601f8301169050919050565b6000612eb182612e4f565b612ebb8185612e5a565b9350612ecb818560208601612e6b565b612ed481612e95565b840191505092915050565b60006020820190508181036000830152612ef98184612ea6565b905092915050565b6000819050919050565b612f1481612f01565b82525050565b6000602082019050612f2f6000830184612f0b565b92915050565b612f3e81612f01565b8114612f4957600080fd5b50565b600081359050612f5b81612f35565b92915050565b600060208284031215612f7757612f76612d8a565b5b6000612f8584828501612f4c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fb982612f8e565b9050919050565b612fc981612fae565b82525050565b6000602082019050612fe46000830184612fc0565b92915050565b612ff381612fae565b8114612ffe57600080fd5b50565b60008135905061301081612fea565b92915050565b6000806040838503121561302d5761302c612d8a565b5b600061303b85828601613001565b925050602061304c85828601612f4c565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f84011261307b5761307a613056565b5b8235905067ffffffffffffffff8111156130985761309761305b565b5b6020830191508360208202830111156130b4576130b3613060565b5b9250929050565b6000806000604084860312156130d4576130d3612d8a565b5b60006130e286828701612f4c565b935050602084013567ffffffffffffffff81111561310357613102612d8f565b5b61310f86828701613065565b92509250509250925092565b60006020828403121561313157613130612d8a565b5b600061313f84828501613001565b91505092915050565b60008060006060848603121561316157613160612d8a565b5b600061316f86828701613001565b935050602061318086828701613001565b925050604061319186828701612f4c565b9150509250925092565b6000819050919050565b6131ae8161319b565b82525050565b60006020820190506131c960008301846131a5565b92915050565b6131d88161319b565b81146131e357600080fd5b50565b6000813590506131f5816131cf565b92915050565b60006020828403121561321157613210612d8a565b5b600061321f848285016131e6565b91505092915050565b61323181612e19565b811461323c57600080fd5b50565b60008135905061324e81613228565b92915050565b6000806040838503121561326b5761326a612d8a565b5b600061327985828601613001565b925050602061328a8582860161323f565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132d182612e95565b810181811067ffffffffffffffff821117156132f0576132ef613299565b5b80604052505050565b6000613303612d80565b905061330f82826132c8565b919050565b600067ffffffffffffffff82111561332f5761332e613299565b5b61333882612e95565b9050602081019050919050565b82818337600083830152505050565b600061336761336284613314565b6132f9565b90508281526020810184848401111561338357613382613294565b5b61338e848285613345565b509392505050565b600082601f8301126133ab576133aa613056565b5b81356133bb848260208601613354565b91505092915050565b600080600080608085870312156133de576133dd612d8a565b5b60006133ec87828801613001565b94505060206133fd87828801613001565b935050604061340e87828801612f4c565b925050606085013567ffffffffffffffff81111561342f5761342e612d8f565b5b61343b87828801613396565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061348757613486613447565b5b50565b600081905061349882613476565b919050565b60006134a88261348a565b9050919050565b6134b88161349d565b82525050565b60006020820190506134d360008301846134af565b92915050565b600080604083850312156134f0576134ef612d8a565b5b60006134fe85828601613001565b925050602061350f85828601613001565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061356057607f821691505b60208210810361357357613572613519565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006135d5602183612e5a565b91506135e082613579565b604082019050919050565b60006020820190508181036000830152613604816135c8565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613667603e83612e5a565b91506136728261360b565b604082019050919050565b600060208201905081810360008301526136968161365a565b9050919050565b7f57686974656c6973742073616c65206e6f7420656e61626c6564000000000000600082015250565b60006136d3601a83612e5a565b91506136de8261369d565b602082019050919050565b60006020820190508181036000830152613702816136c6565b9050919050565b7f496e76616c6964206d65726b6c652070726f6f66000000000000000000000000600082015250565b600061373f601483612e5a565b915061374a82613709565b602082019050919050565b6000602082019050818103600083015261376e81613732565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137af82612f01565b91506137ba83612f01565b92508282019050808211156137d2576137d1613775565b5b92915050565b7f4d696e74206c696d697420726561636865640000000000000000000000000000600082015250565b600061380e601283612e5a565b9150613819826137d8565b602082019050919050565b6000602082019050818103600083015261383d81613801565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b60006138a0602e83612e5a565b91506138ab82613844565b604082019050919050565b600060208201905081810360008301526138cf81613893565b9050919050565b7f5072652073616c65206e6f7420656e61626c6564000000000000000000000000600082015250565b600061390c601483612e5a565b9150613917826138d6565b602082019050919050565b6000602082019050818103600083015261393b816138ff565b9050919050565b7f4e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b6000613978600b83612e5a565b915061398382613942565b602082019050919050565b600060208201905081810360008301526139a78161396b565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006139e4601883612e5a565b91506139ef826139ae565b602082019050919050565b60006020820190508181036000830152613a13816139d7565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613a76602983612e5a565b9150613a8182613a1a565b604082019050919050565b60006020820190508181036000830152613aa581613a69565b9050919050565b600060ff82169050919050565b613ac281613aac565b8114613acd57600080fd5b50565b600081519050613adf81613ab9565b92915050565b600060208284031215613afb57613afa612d8a565b5b6000613b0984828501613ad0565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115613b6957808604811115613b4557613b44613775565b5b6001851615613b545780820291505b8081029050613b6285613b12565b9450613b29565b94509492505050565b600082613b825760019050613c3e565b81613b905760009050613c3e565b8160018114613ba65760028114613bb057613bdf565b6001915050613c3e565b60ff841115613bc257613bc1613775565b5b8360020a915084821115613bd957613bd8613775565b5b50613c3e565b5060208310610133831016604e8410600b8410161715613c145782820a905083811115613c0f57613c0e613775565b5b613c3e565b613c218484846001613b1f565b92509050818404811115613c3857613c37613775565b5b81810290505b9392505050565b6000613c5082612f01565b9150613c5b83613aac565b9250613c887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b72565b905092915050565b6000613c9b82612f01565b9150613ca683612f01565b9250828202613cb481612f01565b91508282048414831517613ccb57613cca613775565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d0c82612f01565b9150613d1783612f01565b925082613d2757613d26613cd2565b5b828204905092915050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b6000613d68601f83612e5a565b9150613d7382613d32565b602082019050919050565b60006020820190508181036000830152613d9781613d5b565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613dcb81613548565b613dd58186613d9e565b94506001821660008114613df05760018114613e0557613e38565b60ff1983168652811515820286019350613e38565b613e0e85613da9565b60005b83811015613e3057815481890152600182019150602081019050613e11565b838801955050505b50505092915050565b6000613e4c82612e4f565b613e568185613d9e565b9350613e66818560208601612e6b565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613ea8600583613d9e565b9150613eb382613e72565b600582019050919050565b6000613eca8285613dbe565b9150613ed68284613e41565b9150613ee182613e9b565b91508190509392505050565b7f5075626c69632073616c65206e6f7420656e61626c6564000000000000000000600082015250565b6000613f23601783612e5a565b9150613f2e82613eed565b602082019050919050565b60006020820190508181036000830152613f5281613f16565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fb5602683612e5a565b9150613fc082613f59565b604082019050919050565b60006020820190508181036000830152613fe481613fa8565b9050919050565b60008160601b9050919050565b600061400382613feb565b9050919050565b600061401582613ff8565b9050919050565b61402d61402882612fae565b61400a565b82525050565b600061403f828461401c565b60148201915081905092915050565b7f7175616e74697479206d75737420626520706f73697469766500000000000000600082015250565b6000614084601983612e5a565b915061408f8261404e565b602082019050919050565b600060208201905081810360008301526140b381614077565b9050919050565b7f73616c65206d617820737570706c792072656163686564000000000000000000600082015250565b60006140f0601783612e5a565b91506140fb826140ba565b602082019050919050565b6000602082019050818103600083015261411f816140e3565b9050919050565b7f4e6f7420656e6f75676820455448000000000000000000000000000000000000600082015250565b600061415c600e83612e5a565b915061416782614126565b602082019050919050565b6000602082019050818103600083015261418b8161414f565b9050919050565b7f546f6f206d756368204554480000000000000000000000000000000000000000600082015250565b60006141c8600c83612e5a565b91506141d382614192565b602082019050919050565b600060208201905081810360008301526141f7816141bb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614234602083612e5a565b915061423f826141fe565b602082019050919050565b6000602082019050818103600083015261426381614227565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006142c6602583612e5a565b91506142d18261426a565b604082019050919050565b600060208201905081810360008301526142f5816142b9565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614358602483612e5a565b9150614363826142fc565b604082019050919050565b600060208201905081810360008301526143878161434b565b9050919050565b600061439982612f01565b91506143a483612f01565b92508282039050818111156143bc576143bb613775565b5b92915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006143f8601d83612e5a565b9150614403826143c2565b602082019050919050565b60006020820190508181036000830152614427816143eb565b9050919050565b600081905092915050565b50565b600061444960008361442e565b915061445482614439565b600082019050919050565b600061446a8261443c565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006144d0603a83612e5a565b91506144db82614474565b604082019050919050565b600060208201905081810360008301526144ff816144c3565b9050919050565b600069ffffffffffffffffffff82169050919050565b61452581614506565b811461453057600080fd5b50565b6000815190506145428161451c565b92915050565b6000819050919050565b61455b81614548565b811461456657600080fd5b50565b60008151905061457881614552565b92915050565b60008151905061458d81612f35565b92915050565b600080600080600060a086880312156145af576145ae612d8a565b5b60006145bd88828901614533565b95505060206145ce88828901614569565b94505060406145df8882890161457e565b93505060606145f08882890161457e565b925050608061460188828901614533565b9150509295509295909350565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614644601983612e5a565b915061464f8261460e565b602082019050919050565b6000602082019050818103600083015261467381614637565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006146d6603283612e5a565b91506146e18261467a565b604082019050919050565b60006020820190508181036000830152614705816146c9565b9050919050565b600061471782612f01565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361474957614748613775565b5b600182019050919050565b600061475f82612f01565b915061476a83612f01565b92508261477a57614779613cd2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006147ea602083612e5a565b91506147f5826147b4565b602082019050919050565b60006020820190508181036000830152614819816147dd565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614856601c83612e5a565b915061486182614820565b602082019050919050565b6000602082019050818103600083015261488581614849565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006148b38261488c565b6148bd8185614897565b93506148cd818560208601612e6b565b6148d681612e95565b840191505092915050565b60006080820190506148f66000830187612fc0565b6149036020830186612fc0565b6149106040830185612f0b565b818103606083015261492281846148a8565b905095945050505050565b60008151905061493c81612dc0565b92915050565b60006020828403121561495857614957612d8a565b5b60006149668482850161492d565b9150509291505056fea2646970667358221220abaecdfce82fa42800b1dd8a370ddb649d246cca2d5267a4416d3324f6d1ef7164736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000b49f677943bc038e9857d61e7d053caa2c1734c1
-----Decoded View---------------
Arg [0] : usdByEthFeedAddress (address): 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
Arg [1] : usdByEuroFeedAddress (address): 0xb49f677943BC038e9857d61E7d053CaA2C1734C1
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
Arg [1] : 000000000000000000000000b49f677943bc038e9857d61e7d053caa2c1734c1
Deployed Bytecode Sourcemap
195:7463:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1505:300:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2405:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;916:37:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3870:167:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3402:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3364:462:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5257:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5857:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4547:327:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;545:73:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5604:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;760:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;725:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1091:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4177:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;960:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4940:179:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1811:340:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;665:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7418:238;;;;;;;;;;;;;:::i;:::-;;2125:218:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5400:98:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1139:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1864:204:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1824:101:11;;;;;;;;;;;;;:::i;:::-;;6806:282:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5504:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;807:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;841:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1194:85:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2567:102:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4104:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;884:25:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5185:315:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;376:28:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6042:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3832:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2832:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2157:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1226:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4323:162:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2074:198:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;625:33:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5704:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1505:300:4;1607:4;1657:25;1642:40;;;:11;:40;;;;:104;;;;1713:33;1698:48;;;:11;:48;;;;1642:104;:156;;;;1762:36;1786:11;1762:23;:36::i;:::-;1642:156;1623:175;;1505:300;;;:::o;2405:98::-;2459:13;2491:5;2484:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2405:98;:::o;916:37:9:-;;;;:::o;3870:167:4:-;3946:7;3965:23;3980:7;3965:14;:23::i;:::-;4006:15;:24;4022:7;4006:24;;;;;;;;;;;;;;;;;;;;;3999:31;;3870:167;;;:::o;3402:407::-;3482:13;3498:23;3513:7;3498:14;:23::i;:::-;3482:39;;3545:5;3539:11;;:2;:11;;;3531:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3636:5;3620:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3645:37;3662:5;3669:12;:10;:12::i;:::-;3645:16;:37::i;:::-;3620:62;3599:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;3781:21;3790:2;3794:7;3781:8;:21::i;:::-;3472:337;3402:407;;:::o;3364:462:9:-;3485:20;3467:38;;;;;;;;:::i;:::-;;:14;;;;;;;;;;;:38;;;;;;;;:::i;:::-;;;3459:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;3554:40;3575:10;3587:6;;3554:20;:40::i;:::-;3546:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3669:17;;3659:8;3637:21;3647:10;3637:9;:21::i;:::-;:30;;;;:::i;:::-;:49;;3629:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;3719:26;3736:8;3719:16;:26::i;:::-;3755:23;3769:8;3755:13;:23::i;:::-;3788:31;3798:10;3810:8;3788:9;:31::i;:::-;3364:462;;;:::o;5257:115::-;5302:7;5353:12;;5342:10;;5328:13;;:24;;;;:::i;:::-;:37;;;;:::i;:::-;5321:44;;5257:115;:::o;5857:151::-;1087:13:11;:11;:13::i;:::-;5980:20:9::1;5942:13;;:59;;;;;;;;;;;;;;;;;;5857:151:::0;:::o;4547:327:4:-;4736:41;4755:12;:10;:12::i;:::-;4769:7;4736:18;:41::i;:::-;4728:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;4839:28;4849:4;4855:2;4859:7;4839:9;:28::i;:::-;4547:327;;;:::o;545:73:9:-;;;;;;;;;;;;;:::o;5604:94::-;1087:13:11;:11;:13::i;:::-;5686:5:9::1;5672:11;:19;;;;5604:94:::0;:::o;760:40::-;;;;:::o;725:28::-;;;;:::o;1091:25::-;;;;:::o;4177:147::-;1087:13:11;:11;:13::i;:::-;4258:26:9::1;4275:8;4258:16;:26::i;:::-;4294:23;4304:2;4308:8;4294:9;:23::i;:::-;4177:147:::0;;:::o;960:85::-;;;;:::o;4940:179:4:-;5073:39;5090:4;5096:2;5100:7;5073:39;;;;;;;;;;;;:16;:39::i;:::-;4940:179;;;:::o;1811:340:9:-;1915:14;1897:32;;;;;;;;:::i;:::-;;:14;;;;;;;;;;;:32;;;;;;;;:::i;:::-;;;1889:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;1996:17;;1986:8;1972:13;1982:2;1972:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;1964:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;2046:29;2066:8;2046:19;:29::i;:::-;2085:23;2099:8;2085:13;:23::i;:::-;2118:26;2131:2;2135:8;2118:12;:26::i;:::-;1811:340;;:::o;665:37::-;;;;:::o;7418:238::-;7497:7;:5;:7::i;:::-;7483:21;;:10;:21;;;:64;;;;7534:13;;;;;;;;;;;7520:27;;:10;:27;;;7483:64;7462:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;7594:55;7627:21;7602:13;;;;;;;;;;;7594:32;;;;:55;;;;:::i;:::-;7418:238::o;2125:218:4:-;2197:7;2216:13;2232:7;:16;2240:7;2232:16;;;;;;;;;;;;;;;;;;;;;2216:32;;2283:1;2266:19;;:5;:19;;;2258:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2331:5;2324:12;;;2125:218;;;:::o;5400:98:9:-;1087:13:11;:11;:13::i;:::-;5486:4:9::1;5479:12;;;;;;;;:::i;:::-;;5462:14;;:29;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;5400:98:::0;:::o;1139:80::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1864:204:4:-;1936:7;1980:1;1963:19;;:5;:19;;;1955:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2045:9;:16;2055:5;2045:16;;;;;;;;;;;;;;;;2038:23;;1864:204;;;:::o;1824:101:11:-;1087:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;6806:282:9:-;6853:7;6872:21;6942:13;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6938:2;:28;;;;:::i;:::-;6928:6;6911:14;:12;:14::i;:::-;6897:11;;:28;;;;:::i;:::-;:37;;;;:::i;:::-;6896:70;;;;:::i;:::-;6872:94;;6976:16;7043:13;:11;:13::i;:::-;7016:12;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7012:2;:27;;;;:::i;:::-;6996:13;:43;;;;:::i;:::-;6995:61;;;;:::i;:::-;6976:80;;7073:8;7066:15;;;;6806:282;:::o;5504:90::-;1087:13:11;:11;:13::i;:::-;5583:4:9::1;5570:10;:17;;;;5504:90:::0;:::o;807:27::-;;;;:::o;841:36::-;;;;:::o;1194:85:11:-;1240:7;1266:6;;;;;;;;;;;1259:13;;1194:85;:::o;2567:102:4:-;2623:13;2655:7;2648:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2567:102;:::o;4104:153::-;4198:52;4217:12;:10;:12::i;:::-;4231:8;4241;4198:18;:52::i;:::-;4104:153;;:::o;884:25:9:-;;;;:::o;5185:315:4:-;5353:41;5372:12;:10;:12::i;:::-;5386:7;5353:18;:41::i;:::-;5345:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;5455:38;5469:4;5475:2;5479:7;5488:4;5455:13;:38::i;:::-;5185:315;;;;:::o;376:28:9:-;;;;;;;;;;;;;:::o;6042:396::-;6115:13;6152:16;6160:7;6152;:16::i;:::-;6144:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;6386:7;6395:25;6412:7;6395:16;:25::i;:::-;6369:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6355:76;;6042:396;;;:::o;3832:339::-;3935:17;3917:35;;;;;;;;:::i;:::-;;:14;;;;;;;;;;;:35;;;;;;;;:::i;:::-;;;3909:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4022:17;;4012:8;3998:13;4008:2;3998:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;3990:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;4072:26;4089:8;4072:16;:26::i;:::-;4108:23;4122:8;4108:13;:23::i;:::-;4141;4151:2;4155:8;4141:9;:23::i;:::-;3832:339;;:::o;2832:114::-;1087:13:11;:11;:13::i;:::-;2893:21:9::1;2912:1;2893:18;:21::i;:::-;2924:15;2936:2;2924:11;:15::i;:::-;2832:114:::0;:::o;2157:156::-;1087:13:11;:11;:13::i;:::-;2241:29:9::1;2261:8;2241:19;:29::i;:::-;2280:26;2293:2;2297:8;2280:12;:26::i;:::-;2157:156:::0;;:::o;1226:97::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4323:162:4:-;4420:4;4443:18;:25;4462:5;4443:25;;;;;;;;;;;;;;;:35;4469:8;4443:35;;;;;;;;;;;;;;;;;;;;;;;;;4436:42;;4323:162;;;;:::o;2074:198:11:-;1087:13;:11;:13::i;:::-;2182:1:::1;2162:22;;:8;:22;;::::0;2154:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;625:33:9:-;;;;:::o;5704:147::-;1087:13:11;:11;:13::i;:::-;5824:19:9::1;5787:12;;:57;;;;;;;;;;;;;;;;;;5704:147:::0;:::o;829:155:3:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;11592:133:4:-;11673:16;11681:7;11673;:16::i;:::-;11665:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;11592:133;:::o;640:96:2:-;693:7;719:10;712:17;;640:96;:::o;10894:171:4:-;10995:2;10968:15;:24;10984:7;10968:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11050:7;11046:2;11012:46;;11021:23;11036:7;11021:14;:23::i;:::-;11012:46;;;;;;;;;;;;10894:171;;:::o;7127:254:9:-;7223:4;7239:19;7288:8;7271:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;7261:37;;;;;;7239:59;;7315;7342:6;;7350:10;;7362:11;7315:26;:59::i;:::-;7308:66;;;7127:254;;;;;:::o;4330:204::-;4414:1;4405:8;:10;4397:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;4484:15;;4472:10;;4463:8;:19;;;;:::i;:::-;:36;;4455:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;4330:204;:::o;4863:342::-;4927:18;4967:8;4948:16;:14;:16::i;:::-;:27;;;;:::i;:::-;4927:48;;4985:16;5025:4;5018:3;5005:10;:16;;;;:::i;:::-;5004:25;;;;:::i;:::-;4985:44;;5039:16;5080:4;5072;5059:10;:17;;;;:::i;:::-;5058:26;;;;:::i;:::-;5039:45;;5115:8;5102:9;:21;;5094:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;5173:8;5160:9;:21;;5152:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4917:288;;;4863:342;:::o;4540:290::-;4635:9;4647:1;4635:13;;4631:135;4652:8;4649:1;:11;4631:135;;4684:67;4690:2;4749:1;4736:10;;4716:17;;4694:19;;:39;:52;:56;4684:5;:67::i;:::-;4661:3;;;;;;;4631:135;;;;4805:8;4792:10;;:21;4779:10;:34;;;;4540:290;;:::o;1352:130:11:-;1426:12;:10;:12::i;:::-;1415:23;;:7;:5;:7::i;:::-;:23;;;1407:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1352:130::o;7252:261:4:-;7345:4;7361:13;7377:23;7392:7;7377:14;:23::i;:::-;7361:39;;7429:5;7418:16;;:7;:16;;;:52;;;;7438:32;7455:5;7462:7;7438:16;:32::i;:::-;7418:52;:87;;;;7498:7;7474:31;;:20;7486:7;7474:11;:20::i;:::-;:31;;;7418:87;7410:96;;;7252:261;;;;:::o;10177:605::-;10331:4;10304:31;;:23;10319:7;10304:14;:23::i;:::-;:31;;;10296:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10409:1;10395:16;;:2;:16;;;10387:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10463:39;10484:4;10490:2;10494:7;10463:20;:39::i;:::-;10564:29;10581:1;10585:7;10564:8;:29::i;:::-;10623:1;10604:9;:15;10614:4;10604:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10651:1;10634:9;:13;10644:2;10634:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10681:2;10662:7;:16;10670:7;10662:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10718:7;10714:2;10699:27;;10708:4;10699:27;;;;;;;;;;;;10737:38;10757:4;10763:2;10767:7;10737:19;:38::i;:::-;10177:605;;;:::o;2319:214:9:-;2406:1;2397:8;:10;2389:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;2479:19;;2464:13;;2455:8;:22;;;;:::i;:::-;:43;;2447:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;2319:214;:::o;2539:258::-;2637:9;2647:1;2637:11;;2633:94;2652:8;2649:1;:11;2633:94;;2684:28;2690:2;2710:1;2694:13;;:17;2684:5;:28::i;:::-;2661:3;;;;;;;2633:94;;;;2772:8;2756:13;;:24;2740:13;:40;;;;2539:258;;:::o;2412:312:0:-;2526:6;2501:21;:31;;2493:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2578:12;2596:9;:14;;2618:6;2596:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2483:241;2412:312;;:::o;2426:187:11:-;2499:16;2518:6;;;;;;;;;;;2499:25;;2543:8;2534:6;;:17;;;;;;;;;;;;;;;;;;2597:8;2566:40;;2587:8;2566:40;;;;;;;;;;;;2489:124;2426:187;:::o;6641:159:9:-;6687:7;6709:12;6731:13;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6706:56;;;;;;6787:5;6772:21;;;6641:159;:::o;6478:157::-;6523:7;6545:12;6567;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6542:55;;;;;;6622:5;6607:21;;;6478:157;:::o;11201:307:4:-;11351:8;11342:17;;:5;:17;;;11334:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11437:8;11399:18;:25;11418:5;11399:25;;;;;;;;;;;;;;;:35;11425:8;11399:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11482:8;11460:41;;11475:5;11460:41;;;11492:8;11460:41;;;;;;:::i;:::-;;;;;;;;11201:307;;;:::o;6361:305::-;6511:28;6521:4;6527:2;6531:7;6511:9;:28::i;:::-;6557:47;6580:4;6586:2;6590:7;6599:4;6557:22;:47::i;:::-;6549:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;6361:305;;;;:::o;6969:125::-;7034:4;7085:1;7057:30;;:7;:16;7065:7;7057:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7050:37;;6969:125;;;:::o;392:703:12:-;448:13;674:1;665:5;:10;661:51;;691:10;;;;;;;;;;;;;;;;;;;;;661:51;721:12;736:5;721:20;;751:14;775:75;790:1;782:4;:9;775:75;;807:8;;;;;:::i;:::-;;;;837:2;829:10;;;;;:::i;:::-;;;775:75;;;859:19;891:6;881:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;859:39;;908:150;924:1;915:5;:10;908:150;;951:1;941:11;;;;;:::i;:::-;;;1017:2;1009:5;:10;;;;:::i;:::-;996:2;:24;;;;:::i;:::-;983:39;;966:6;973;966:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1045:2;1036:11;;;;;:::i;:::-;;;908:150;;;1081:6;1067:21;;;;;392:703;;;;:::o;2952:210:9:-;3038:1;3029:8;:10;3021:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;3110:17;;3096:12;;3087:8;:21;;;;:::i;:::-;:40;;3079:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2952:210;:::o;3168:141::-;3243:49;3249:2;3278:12;;3276:14;;;;;;;;;;3253:19;;:38;3243:5;:49::i;:::-;3168:141;:::o;1438:202:10:-;1569:4;1629;1592:33;1613:5;;1620:4;1592:20;:33::i;:::-;:41;1585:48;;1438:202;;;;;;:::o;8803:427:4:-;8896:1;8882:16;;:2;:16;;;8874:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;8954:16;8962:7;8954;:16::i;:::-;8953:17;8945:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9014:45;9043:1;9047:2;9051:7;9014:20;:45::i;:::-;9087:1;9070:9;:13;9080:2;9070:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9117:2;9098:7;:16;9106:7;9098:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9160:7;9156:2;9135:33;;9152:1;9135:33;;;;;;;;;;;;9179:44;9207:1;9211:2;9215:7;9179:19;:44::i;:::-;8803:427;;:::o;13664:122::-;;;;:::o;14158:121::-;;;;:::o;12277:831::-;12426:4;12446:15;:2;:13;;;:15::i;:::-;12442:660;;;12497:2;12481:36;;;12518:12;:10;:12::i;:::-;12532:4;12538:7;12547:4;12481:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12477:573;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12736:1;12719:6;:13;:18;12715:321;;12761:60;;;;;;;;;;:::i;:::-;;;;;;;;12715:321;12988:6;12982:13;12973:6;12969:2;12965:15;12958:38;12477:573;12612:41;;;12602:51;;;:6;:51;;;;12595:58;;;;;12442:660;13087:4;13080:11;;12277:831;;;;;;;:::o;2388:300:10:-;2481:7;2500:20;2523:4;2500:27;;2542:9;2537:116;2561:5;;:12;;2557:1;:16;2537:116;;;2609:33;2619:12;2633:5;;2639:1;2633:8;;;;;;;:::i;:::-;;;;;;;;2609:9;:33::i;:::-;2594:48;;2575:3;;;;;:::i;:::-;;;;2537:116;;;;2669:12;2662:19;;;2388:300;;;;;:::o;1175:320:0:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;8054:147:10:-;8117:7;8147:1;8143;:5;:51;;8174:20;8189:1;8192;8174:14;:20::i;:::-;8143:51;;;8151:20;8166:1;8169;8151:14;:20::i;:::-;8143:51;8136:58;;8054:147;;;;:::o;8207:261::-;8275:13;8379:1;8373:4;8366:15;8407:1;8401:4;8394:15;8447:4;8441;8431:21;8422:30;;8207:261;;;;:::o;7:75:13:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:118::-;3030:24;3048:5;3030:24;:::i;:::-;3025:3;3018:37;2943:118;;:::o;3067:222::-;3160:4;3198:2;3187:9;3183:18;3175:26;;3211:71;3279:1;3268:9;3264:17;3255:6;3211:71;:::i;:::-;3067:222;;;;:::o;3295:122::-;3368:24;3386:5;3368:24;:::i;:::-;3361:5;3358:35;3348:63;;3407:1;3404;3397:12;3348:63;3295:122;:::o;3423:139::-;3469:5;3507:6;3494:20;3485:29;;3523:33;3550:5;3523:33;:::i;:::-;3423:139;;;;:::o;3568:329::-;3627:6;3676:2;3664:9;3655:7;3651:23;3647:32;3644:119;;;3682:79;;:::i;:::-;3644:119;3802:1;3827:53;3872:7;3863:6;3852:9;3848:22;3827:53;:::i;:::-;3817:63;;3773:117;3568:329;;;;:::o;3903:126::-;3940:7;3980:42;3973:5;3969:54;3958:65;;3903:126;;;:::o;4035:96::-;4072:7;4101:24;4119:5;4101:24;:::i;:::-;4090:35;;4035:96;;;:::o;4137:118::-;4224:24;4242:5;4224:24;:::i;:::-;4219:3;4212:37;4137:118;;:::o;4261:222::-;4354:4;4392:2;4381:9;4377:18;4369:26;;4405:71;4473:1;4462:9;4458:17;4449:6;4405:71;:::i;:::-;4261:222;;;;:::o;4489:122::-;4562:24;4580:5;4562:24;:::i;:::-;4555:5;4552:35;4542:63;;4601:1;4598;4591:12;4542:63;4489:122;:::o;4617:139::-;4663:5;4701:6;4688:20;4679:29;;4717:33;4744:5;4717:33;:::i;:::-;4617:139;;;;:::o;4762:474::-;4830:6;4838;4887:2;4875:9;4866:7;4862:23;4858:32;4855:119;;;4893:79;;:::i;:::-;4855:119;5013:1;5038:53;5083:7;5074:6;5063:9;5059:22;5038:53;:::i;:::-;5028:63;;4984:117;5140:2;5166:53;5211:7;5202:6;5191:9;5187:22;5166:53;:::i;:::-;5156:63;;5111:118;4762:474;;;;;:::o;5242:117::-;5351:1;5348;5341:12;5365:117;5474:1;5471;5464:12;5488:117;5597:1;5594;5587:12;5628:568;5701:8;5711:6;5761:3;5754:4;5746:6;5742:17;5738:27;5728:122;;5769:79;;:::i;:::-;5728:122;5882:6;5869:20;5859:30;;5912:18;5904:6;5901:30;5898:117;;;5934:79;;:::i;:::-;5898:117;6048:4;6040:6;6036:17;6024:29;;6102:3;6094:4;6086:6;6082:17;6072:8;6068:32;6065:41;6062:128;;;6109:79;;:::i;:::-;6062:128;5628:568;;;;;:::o;6202:704::-;6297:6;6305;6313;6362:2;6350:9;6341:7;6337:23;6333:32;6330:119;;;6368:79;;:::i;:::-;6330:119;6488:1;6513:53;6558:7;6549:6;6538:9;6534:22;6513:53;:::i;:::-;6503:63;;6459:117;6643:2;6632:9;6628:18;6615:32;6674:18;6666:6;6663:30;6660:117;;;6696:79;;:::i;:::-;6660:117;6809:80;6881:7;6872:6;6861:9;6857:22;6809:80;:::i;:::-;6791:98;;;;6586:313;6202:704;;;;;:::o;6912:329::-;6971:6;7020:2;7008:9;6999:7;6995:23;6991:32;6988:119;;;7026:79;;:::i;:::-;6988:119;7146:1;7171:53;7216:7;7207:6;7196:9;7192:22;7171:53;:::i;:::-;7161:63;;7117:117;6912:329;;;;:::o;7247:619::-;7324:6;7332;7340;7389:2;7377:9;7368:7;7364:23;7360:32;7357:119;;;7395:79;;:::i;:::-;7357:119;7515:1;7540:53;7585:7;7576:6;7565:9;7561:22;7540:53;:::i;:::-;7530:63;;7486:117;7642:2;7668:53;7713:7;7704:6;7693:9;7689:22;7668:53;:::i;:::-;7658:63;;7613:118;7770:2;7796:53;7841:7;7832:6;7821:9;7817:22;7796:53;:::i;:::-;7786:63;;7741:118;7247:619;;;;;:::o;7872:77::-;7909:7;7938:5;7927:16;;7872:77;;;:::o;7955:118::-;8042:24;8060:5;8042:24;:::i;:::-;8037:3;8030:37;7955:118;;:::o;8079:222::-;8172:4;8210:2;8199:9;8195:18;8187:26;;8223:71;8291:1;8280:9;8276:17;8267:6;8223:71;:::i;:::-;8079:222;;;;:::o;8307:122::-;8380:24;8398:5;8380:24;:::i;:::-;8373:5;8370:35;8360:63;;8419:1;8416;8409:12;8360:63;8307:122;:::o;8435:139::-;8481:5;8519:6;8506:20;8497:29;;8535:33;8562:5;8535:33;:::i;:::-;8435:139;;;;:::o;8580:329::-;8639:6;8688:2;8676:9;8667:7;8663:23;8659:32;8656:119;;;8694:79;;:::i;:::-;8656:119;8814:1;8839:53;8884:7;8875:6;8864:9;8860:22;8839:53;:::i;:::-;8829:63;;8785:117;8580:329;;;;:::o;8915:116::-;8985:21;9000:5;8985:21;:::i;:::-;8978:5;8975:32;8965:60;;9021:1;9018;9011:12;8965:60;8915:116;:::o;9037:133::-;9080:5;9118:6;9105:20;9096:29;;9134:30;9158:5;9134:30;:::i;:::-;9037:133;;;;:::o;9176:468::-;9241:6;9249;9298:2;9286:9;9277:7;9273:23;9269:32;9266:119;;;9304:79;;:::i;:::-;9266:119;9424:1;9449:53;9494:7;9485:6;9474:9;9470:22;9449:53;:::i;:::-;9439:63;;9395:117;9551:2;9577:50;9619:7;9610:6;9599:9;9595:22;9577:50;:::i;:::-;9567:60;;9522:115;9176:468;;;;;:::o;9650:117::-;9759:1;9756;9749:12;9773:180;9821:77;9818:1;9811:88;9918:4;9915:1;9908:15;9942:4;9939:1;9932:15;9959:281;10042:27;10064:4;10042:27;:::i;:::-;10034:6;10030:40;10172:6;10160:10;10157:22;10136:18;10124:10;10121:34;10118:62;10115:88;;;10183:18;;:::i;:::-;10115:88;10223:10;10219:2;10212:22;10002:238;9959:281;;:::o;10246:129::-;10280:6;10307:20;;:::i;:::-;10297:30;;10336:33;10364:4;10356:6;10336:33;:::i;:::-;10246:129;;;:::o;10381:307::-;10442:4;10532:18;10524:6;10521:30;10518:56;;;10554:18;;:::i;:::-;10518:56;10592:29;10614:6;10592:29;:::i;:::-;10584:37;;10676:4;10670;10666:15;10658:23;;10381:307;;;:::o;10694:146::-;10791:6;10786:3;10781;10768:30;10832:1;10823:6;10818:3;10814:16;10807:27;10694:146;;;:::o;10846:423::-;10923:5;10948:65;10964:48;11005:6;10964:48;:::i;:::-;10948:65;:::i;:::-;10939:74;;11036:6;11029:5;11022:21;11074:4;11067:5;11063:16;11112:3;11103:6;11098:3;11094:16;11091:25;11088:112;;;11119:79;;:::i;:::-;11088:112;11209:54;11256:6;11251:3;11246;11209:54;:::i;:::-;10929:340;10846:423;;;;;:::o;11288:338::-;11343:5;11392:3;11385:4;11377:6;11373:17;11369:27;11359:122;;11400:79;;:::i;:::-;11359:122;11517:6;11504:20;11542:78;11616:3;11608:6;11601:4;11593:6;11589:17;11542:78;:::i;:::-;11533:87;;11349:277;11288:338;;;;:::o;11632:943::-;11727:6;11735;11743;11751;11800:3;11788:9;11779:7;11775:23;11771:33;11768:120;;;11807:79;;:::i;:::-;11768:120;11927:1;11952:53;11997:7;11988:6;11977:9;11973:22;11952:53;:::i;:::-;11942:63;;11898:117;12054:2;12080:53;12125:7;12116:6;12105:9;12101:22;12080:53;:::i;:::-;12070:63;;12025:118;12182:2;12208:53;12253:7;12244:6;12233:9;12229:22;12208:53;:::i;:::-;12198:63;;12153:118;12338:2;12327:9;12323:18;12310:32;12369:18;12361:6;12358:30;12355:117;;;12391:79;;:::i;:::-;12355:117;12496:62;12550:7;12541:6;12530:9;12526:22;12496:62;:::i;:::-;12486:72;;12281:287;11632:943;;;;;;;:::o;12581:180::-;12629:77;12626:1;12619:88;12726:4;12723:1;12716:15;12750:4;12747:1;12740:15;12767:116;12851:1;12844:5;12841:12;12831:46;;12857:18;;:::i;:::-;12831:46;12767:116;:::o;12889:133::-;12937:7;12966:5;12955:16;;12972:44;13010:5;12972:44;:::i;:::-;12889:133;;;:::o;13028:::-;13087:9;13120:35;13149:5;13120:35;:::i;:::-;13107:48;;13028:133;;;:::o;13167:149::-;13263:46;13303:5;13263:46;:::i;:::-;13258:3;13251:59;13167:149;;:::o;13322:240::-;13424:4;13462:2;13451:9;13447:18;13439:26;;13475:80;13552:1;13541:9;13537:17;13528:6;13475:80;:::i;:::-;13322:240;;;;:::o;13568:474::-;13636:6;13644;13693:2;13681:9;13672:7;13668:23;13664:32;13661:119;;;13699:79;;:::i;:::-;13661:119;13819:1;13844:53;13889:7;13880:6;13869:9;13865:22;13844:53;:::i;:::-;13834:63;;13790:117;13946:2;13972:53;14017:7;14008:6;13997:9;13993:22;13972:53;:::i;:::-;13962:63;;13917:118;13568:474;;;;;:::o;14048:180::-;14096:77;14093:1;14086:88;14193:4;14190:1;14183:15;14217:4;14214:1;14207:15;14234:320;14278:6;14315:1;14309:4;14305:12;14295:22;;14362:1;14356:4;14352:12;14383:18;14373:81;;14439:4;14431:6;14427:17;14417:27;;14373:81;14501:2;14493:6;14490:14;14470:18;14467:38;14464:84;;14520:18;;:::i;:::-;14464:84;14285:269;14234:320;;;:::o;14560:220::-;14700:34;14696:1;14688:6;14684:14;14677:58;14769:3;14764:2;14756:6;14752:15;14745:28;14560:220;:::o;14786:366::-;14928:3;14949:67;15013:2;15008:3;14949:67;:::i;:::-;14942:74;;15025:93;15114:3;15025:93;:::i;:::-;15143:2;15138:3;15134:12;15127:19;;14786:366;;;:::o;15158:419::-;15324:4;15362:2;15351:9;15347:18;15339:26;;15411:9;15405:4;15401:20;15397:1;15386:9;15382:17;15375:47;15439:131;15565:4;15439:131;:::i;:::-;15431:139;;15158:419;;;:::o;15583:249::-;15723:34;15719:1;15711:6;15707:14;15700:58;15792:32;15787:2;15779:6;15775:15;15768:57;15583:249;:::o;15838:366::-;15980:3;16001:67;16065:2;16060:3;16001:67;:::i;:::-;15994:74;;16077:93;16166:3;16077:93;:::i;:::-;16195:2;16190:3;16186:12;16179:19;;15838:366;;;:::o;16210:419::-;16376:4;16414:2;16403:9;16399:18;16391:26;;16463:9;16457:4;16453:20;16449:1;16438:9;16434:17;16427:47;16491:131;16617:4;16491:131;:::i;:::-;16483:139;;16210:419;;;:::o;16635:176::-;16775:28;16771:1;16763:6;16759:14;16752:52;16635:176;:::o;16817:366::-;16959:3;16980:67;17044:2;17039:3;16980:67;:::i;:::-;16973:74;;17056:93;17145:3;17056:93;:::i;:::-;17174:2;17169:3;17165:12;17158:19;;16817:366;;;:::o;17189:419::-;17355:4;17393:2;17382:9;17378:18;17370:26;;17442:9;17436:4;17432:20;17428:1;17417:9;17413:17;17406:47;17470:131;17596:4;17470:131;:::i;:::-;17462:139;;17189:419;;;:::o;17614:170::-;17754:22;17750:1;17742:6;17738:14;17731:46;17614:170;:::o;17790:366::-;17932:3;17953:67;18017:2;18012:3;17953:67;:::i;:::-;17946:74;;18029:93;18118:3;18029:93;:::i;:::-;18147:2;18142:3;18138:12;18131:19;;17790:366;;;:::o;18162:419::-;18328:4;18366:2;18355:9;18351:18;18343:26;;18415:9;18409:4;18405:20;18401:1;18390:9;18386:17;18379:47;18443:131;18569:4;18443:131;:::i;:::-;18435:139;;18162:419;;;:::o;18587:180::-;18635:77;18632:1;18625:88;18732:4;18729:1;18722:15;18756:4;18753:1;18746:15;18773:191;18813:3;18832:20;18850:1;18832:20;:::i;:::-;18827:25;;18866:20;18884:1;18866:20;:::i;:::-;18861:25;;18909:1;18906;18902:9;18895:16;;18930:3;18927:1;18924:10;18921:36;;;18937:18;;:::i;:::-;18921:36;18773:191;;;;:::o;18970:168::-;19110:20;19106:1;19098:6;19094:14;19087:44;18970:168;:::o;19144:366::-;19286:3;19307:67;19371:2;19366:3;19307:67;:::i;:::-;19300:74;;19383:93;19472:3;19383:93;:::i;:::-;19501:2;19496:3;19492:12;19485:19;;19144:366;;;:::o;19516:419::-;19682:4;19720:2;19709:9;19705:18;19697:26;;19769:9;19763:4;19759:20;19755:1;19744:9;19740:17;19733:47;19797:131;19923:4;19797:131;:::i;:::-;19789:139;;19516:419;;;:::o;19941:233::-;20081:34;20077:1;20069:6;20065:14;20058:58;20150:16;20145:2;20137:6;20133:15;20126:41;19941:233;:::o;20180:366::-;20322:3;20343:67;20407:2;20402:3;20343:67;:::i;:::-;20336:74;;20419:93;20508:3;20419:93;:::i;:::-;20537:2;20532:3;20528:12;20521:19;;20180:366;;;:::o;20552:419::-;20718:4;20756:2;20745:9;20741:18;20733:26;;20805:9;20799:4;20795:20;20791:1;20780:9;20776:17;20769:47;20833:131;20959:4;20833:131;:::i;:::-;20825:139;;20552:419;;;:::o;20977:170::-;21117:22;21113:1;21105:6;21101:14;21094:46;20977:170;:::o;21153:366::-;21295:3;21316:67;21380:2;21375:3;21316:67;:::i;:::-;21309:74;;21392:93;21481:3;21392:93;:::i;:::-;21510:2;21505:3;21501:12;21494:19;;21153:366;;;:::o;21525:419::-;21691:4;21729:2;21718:9;21714:18;21706:26;;21778:9;21772:4;21768:20;21764:1;21753:9;21749:17;21742:47;21806:131;21932:4;21806:131;:::i;:::-;21798:139;;21525:419;;;:::o;21950:161::-;22090:13;22086:1;22078:6;22074:14;22067:37;21950:161;:::o;22117:366::-;22259:3;22280:67;22344:2;22339:3;22280:67;:::i;:::-;22273:74;;22356:93;22445:3;22356:93;:::i;:::-;22474:2;22469:3;22465:12;22458:19;;22117:366;;;:::o;22489:419::-;22655:4;22693:2;22682:9;22678:18;22670:26;;22742:9;22736:4;22732:20;22728:1;22717:9;22713:17;22706:47;22770:131;22896:4;22770:131;:::i;:::-;22762:139;;22489:419;;;:::o;22914:174::-;23054:26;23050:1;23042:6;23038:14;23031:50;22914:174;:::o;23094:366::-;23236:3;23257:67;23321:2;23316:3;23257:67;:::i;:::-;23250:74;;23333:93;23422:3;23333:93;:::i;:::-;23451:2;23446:3;23442:12;23435:19;;23094:366;;;:::o;23466:419::-;23632:4;23670:2;23659:9;23655:18;23647:26;;23719:9;23713:4;23709:20;23705:1;23694:9;23690:17;23683:47;23747:131;23873:4;23747:131;:::i;:::-;23739:139;;23466:419;;;:::o;23891:228::-;24031:34;24027:1;24019:6;24015:14;24008:58;24100:11;24095:2;24087:6;24083:15;24076:36;23891:228;:::o;24125:366::-;24267:3;24288:67;24352:2;24347:3;24288:67;:::i;:::-;24281:74;;24364:93;24453:3;24364:93;:::i;:::-;24482:2;24477:3;24473:12;24466:19;;24125:366;;;:::o;24497:419::-;24663:4;24701:2;24690:9;24686:18;24678:26;;24750:9;24744:4;24740:20;24736:1;24725:9;24721:17;24714:47;24778:131;24904:4;24778:131;:::i;:::-;24770:139;;24497:419;;;:::o;24922:86::-;24957:7;24997:4;24990:5;24986:16;24975:27;;24922:86;;;:::o;25014:118::-;25085:22;25101:5;25085:22;:::i;:::-;25078:5;25075:33;25065:61;;25122:1;25119;25112:12;25065:61;25014:118;:::o;25138:139::-;25193:5;25224:6;25218:13;25209:22;;25240:31;25265:5;25240:31;:::i;:::-;25138:139;;;;:::o;25283:347::-;25351:6;25400:2;25388:9;25379:7;25375:23;25371:32;25368:119;;;25406:79;;:::i;:::-;25368:119;25526:1;25551:62;25605:7;25596:6;25585:9;25581:22;25551:62;:::i;:::-;25541:72;;25497:126;25283:347;;;;:::o;25636:102::-;25678:8;25725:5;25722:1;25718:13;25697:34;;25636:102;;;:::o;25744:848::-;25805:5;25812:4;25836:6;25827:15;;25860:5;25851:14;;25874:712;25895:1;25885:8;25882:15;25874:712;;;25990:4;25985:3;25981:14;25975:4;25972:24;25969:50;;;25999:18;;:::i;:::-;25969:50;26049:1;26039:8;26035:16;26032:451;;;26464:4;26457:5;26453:16;26444:25;;26032:451;26514:4;26508;26504:15;26496:23;;26544:32;26567:8;26544:32;:::i;:::-;26532:44;;25874:712;;;25744:848;;;;;;;:::o;26598:1073::-;26652:5;26843:8;26833:40;;26864:1;26855:10;;26866:5;;26833:40;26892:4;26882:36;;26909:1;26900:10;;26911:5;;26882:36;26978:4;27026:1;27021:27;;;;27062:1;27057:191;;;;26971:277;;27021:27;27039:1;27030:10;;27041:5;;;27057:191;27102:3;27092:8;27089:17;27086:43;;;27109:18;;:::i;:::-;27086:43;27158:8;27155:1;27151:16;27142:25;;27193:3;27186:5;27183:14;27180:40;;;27200:18;;:::i;:::-;27180:40;27233:5;;;26971:277;;27357:2;27347:8;27344:16;27338:3;27332:4;27329:13;27325:36;27307:2;27297:8;27294:16;27289:2;27283:4;27280:12;27276:35;27260:111;27257:246;;;27413:8;27407:4;27403:19;27394:28;;27448:3;27441:5;27438:14;27435:40;;;27455:18;;:::i;:::-;27435:40;27488:5;;27257:246;27528:42;27566:3;27556:8;27550:4;27547:1;27528:42;:::i;:::-;27513:57;;;;27602:4;27597:3;27593:14;27586:5;27583:25;27580:51;;;27611:18;;:::i;:::-;27580:51;27660:4;27653:5;27649:16;27640:25;;26598:1073;;;;;;:::o;27677:281::-;27735:5;27759:23;27777:4;27759:23;:::i;:::-;27751:31;;27803:25;27819:8;27803:25;:::i;:::-;27791:37;;27847:104;27884:66;27874:8;27868:4;27847:104;:::i;:::-;27838:113;;27677:281;;;;:::o;27964:410::-;28004:7;28027:20;28045:1;28027:20;:::i;:::-;28022:25;;28061:20;28079:1;28061:20;:::i;:::-;28056:25;;28116:1;28113;28109:9;28138:30;28156:11;28138:30;:::i;:::-;28127:41;;28317:1;28308:7;28304:15;28301:1;28298:22;28278:1;28271:9;28251:83;28228:139;;28347:18;;:::i;:::-;28228:139;28012:362;27964:410;;;;:::o;28380:180::-;28428:77;28425:1;28418:88;28525:4;28522:1;28515:15;28549:4;28546:1;28539:15;28566:185;28606:1;28623:20;28641:1;28623:20;:::i;:::-;28618:25;;28657:20;28675:1;28657:20;:::i;:::-;28652:25;;28696:1;28686:35;;28701:18;;:::i;:::-;28686:35;28743:1;28740;28736:9;28731:14;;28566:185;;;;:::o;28757:181::-;28897:33;28893:1;28885:6;28881:14;28874:57;28757:181;:::o;28944:366::-;29086:3;29107:67;29171:2;29166:3;29107:67;:::i;:::-;29100:74;;29183:93;29272:3;29183:93;:::i;:::-;29301:2;29296:3;29292:12;29285:19;;28944:366;;;:::o;29316:419::-;29482:4;29520:2;29509:9;29505:18;29497:26;;29569:9;29563:4;29559:20;29555:1;29544:9;29540:17;29533:47;29597:131;29723:4;29597:131;:::i;:::-;29589:139;;29316:419;;;:::o;29741:148::-;29843:11;29880:3;29865:18;;29741:148;;;;:::o;29895:141::-;29944:4;29967:3;29959:11;;29990:3;29987:1;29980:14;30024:4;30021:1;30011:18;30003:26;;29895:141;;;:::o;30066:874::-;30169:3;30206:5;30200:12;30235:36;30261:9;30235:36;:::i;:::-;30287:89;30369:6;30364:3;30287:89;:::i;:::-;30280:96;;30407:1;30396:9;30392:17;30423:1;30418:166;;;;30598:1;30593:341;;;;30385:549;;30418:166;30502:4;30498:9;30487;30483:25;30478:3;30471:38;30564:6;30557:14;30550:22;30542:6;30538:35;30533:3;30529:45;30522:52;;30418:166;;30593:341;30660:38;30692:5;30660:38;:::i;:::-;30720:1;30734:154;30748:6;30745:1;30742:13;30734:154;;;30822:7;30816:14;30812:1;30807:3;30803:11;30796:35;30872:1;30863:7;30859:15;30848:26;;30770:4;30767:1;30763:12;30758:17;;30734:154;;;30917:6;30912:3;30908:16;30901:23;;30600:334;;30385:549;;30173:767;;30066:874;;;;:::o;30946:390::-;31052:3;31080:39;31113:5;31080:39;:::i;:::-;31135:89;31217:6;31212:3;31135:89;:::i;:::-;31128:96;;31233:65;31291:6;31286:3;31279:4;31272:5;31268:16;31233:65;:::i;:::-;31323:6;31318:3;31314:16;31307:23;;31056:280;30946:390;;;;:::o;31342:155::-;31482:7;31478:1;31470:6;31466:14;31459:31;31342:155;:::o;31503:400::-;31663:3;31684:84;31766:1;31761:3;31684:84;:::i;:::-;31677:91;;31777:93;31866:3;31777:93;:::i;:::-;31895:1;31890:3;31886:11;31879:18;;31503:400;;;:::o;31909:695::-;32187:3;32209:92;32297:3;32288:6;32209:92;:::i;:::-;32202:99;;32318:95;32409:3;32400:6;32318:95;:::i;:::-;32311:102;;32430:148;32574:3;32430:148;:::i;:::-;32423:155;;32595:3;32588:10;;31909:695;;;;;:::o;32610:173::-;32750:25;32746:1;32738:6;32734:14;32727:49;32610:173;:::o;32789:366::-;32931:3;32952:67;33016:2;33011:3;32952:67;:::i;:::-;32945:74;;33028:93;33117:3;33028:93;:::i;:::-;33146:2;33141:3;33137:12;33130:19;;32789:366;;;:::o;33161:419::-;33327:4;33365:2;33354:9;33350:18;33342:26;;33414:9;33408:4;33404:20;33400:1;33389:9;33385:17;33378:47;33442:131;33568:4;33442:131;:::i;:::-;33434:139;;33161:419;;;:::o;33586:225::-;33726:34;33722:1;33714:6;33710:14;33703:58;33795:8;33790:2;33782:6;33778:15;33771:33;33586:225;:::o;33817:366::-;33959:3;33980:67;34044:2;34039:3;33980:67;:::i;:::-;33973:74;;34056:93;34145:3;34056:93;:::i;:::-;34174:2;34169:3;34165:12;34158:19;;33817:366;;;:::o;34189:419::-;34355:4;34393:2;34382:9;34378:18;34370:26;;34442:9;34436:4;34432:20;34428:1;34417:9;34413:17;34406:47;34470:131;34596:4;34470:131;:::i;:::-;34462:139;;34189:419;;;:::o;34614:94::-;34647:8;34695:5;34691:2;34687:14;34666:35;;34614:94;;;:::o;34714:::-;34753:7;34782:20;34796:5;34782:20;:::i;:::-;34771:31;;34714:94;;;:::o;34814:100::-;34853:7;34882:26;34902:5;34882:26;:::i;:::-;34871:37;;34814:100;;;:::o;34920:157::-;35025:45;35045:24;35063:5;35045:24;:::i;:::-;35025:45;:::i;:::-;35020:3;35013:58;34920:157;;:::o;35083:256::-;35195:3;35210:75;35281:3;35272:6;35210:75;:::i;:::-;35310:2;35305:3;35301:12;35294:19;;35330:3;35323:10;;35083:256;;;;:::o;35345:175::-;35485:27;35481:1;35473:6;35469:14;35462:51;35345:175;:::o;35526:366::-;35668:3;35689:67;35753:2;35748:3;35689:67;:::i;:::-;35682:74;;35765:93;35854:3;35765:93;:::i;:::-;35883:2;35878:3;35874:12;35867:19;;35526:366;;;:::o;35898:419::-;36064:4;36102:2;36091:9;36087:18;36079:26;;36151:9;36145:4;36141:20;36137:1;36126:9;36122:17;36115:47;36179:131;36305:4;36179:131;:::i;:::-;36171:139;;35898:419;;;:::o;36323:173::-;36463:25;36459:1;36451:6;36447:14;36440:49;36323:173;:::o;36502:366::-;36644:3;36665:67;36729:2;36724:3;36665:67;:::i;:::-;36658:74;;36741:93;36830:3;36741:93;:::i;:::-;36859:2;36854:3;36850:12;36843:19;;36502:366;;;:::o;36874:419::-;37040:4;37078:2;37067:9;37063:18;37055:26;;37127:9;37121:4;37117:20;37113:1;37102:9;37098:17;37091:47;37155:131;37281:4;37155:131;:::i;:::-;37147:139;;36874:419;;;:::o;37299:164::-;37439:16;37435:1;37427:6;37423:14;37416:40;37299:164;:::o;37469:366::-;37611:3;37632:67;37696:2;37691:3;37632:67;:::i;:::-;37625:74;;37708:93;37797:3;37708:93;:::i;:::-;37826:2;37821:3;37817:12;37810:19;;37469:366;;;:::o;37841:419::-;38007:4;38045:2;38034:9;38030:18;38022:26;;38094:9;38088:4;38084:20;38080:1;38069:9;38065:17;38058:47;38122:131;38248:4;38122:131;:::i;:::-;38114:139;;37841:419;;;:::o;38266:162::-;38406:14;38402:1;38394:6;38390:14;38383:38;38266:162;:::o;38434:366::-;38576:3;38597:67;38661:2;38656:3;38597:67;:::i;:::-;38590:74;;38673:93;38762:3;38673:93;:::i;:::-;38791:2;38786:3;38782:12;38775:19;;38434:366;;;:::o;38806:419::-;38972:4;39010:2;38999:9;38995:18;38987:26;;39059:9;39053:4;39049:20;39045:1;39034:9;39030:17;39023:47;39087:131;39213:4;39087:131;:::i;:::-;39079:139;;38806:419;;;:::o;39231:182::-;39371:34;39367:1;39359:6;39355:14;39348:58;39231:182;:::o;39419:366::-;39561:3;39582:67;39646:2;39641:3;39582:67;:::i;:::-;39575:74;;39658:93;39747:3;39658:93;:::i;:::-;39776:2;39771:3;39767:12;39760:19;;39419:366;;;:::o;39791:419::-;39957:4;39995:2;39984:9;39980:18;39972:26;;40044:9;40038:4;40034:20;40030:1;40019:9;40015:17;40008:47;40072:131;40198:4;40072:131;:::i;:::-;40064:139;;39791:419;;;:::o;40216:224::-;40356:34;40352:1;40344:6;40340:14;40333:58;40425:7;40420:2;40412:6;40408:15;40401:32;40216:224;:::o;40446:366::-;40588:3;40609:67;40673:2;40668:3;40609:67;:::i;:::-;40602:74;;40685:93;40774:3;40685:93;:::i;:::-;40803:2;40798:3;40794:12;40787:19;;40446:366;;;:::o;40818:419::-;40984:4;41022:2;41011:9;41007:18;40999:26;;41071:9;41065:4;41061:20;41057:1;41046:9;41042:17;41035:47;41099:131;41225:4;41099:131;:::i;:::-;41091:139;;40818:419;;;:::o;41243:223::-;41383:34;41379:1;41371:6;41367:14;41360:58;41452:6;41447:2;41439:6;41435:15;41428:31;41243:223;:::o;41472:366::-;41614:3;41635:67;41699:2;41694:3;41635:67;:::i;:::-;41628:74;;41711:93;41800:3;41711:93;:::i;:::-;41829:2;41824:3;41820:12;41813:19;;41472:366;;;:::o;41844:419::-;42010:4;42048:2;42037:9;42033:18;42025:26;;42097:9;42091:4;42087:20;42083:1;42072:9;42068:17;42061:47;42125:131;42251:4;42125:131;:::i;:::-;42117:139;;41844:419;;;:::o;42269:194::-;42309:4;42329:20;42347:1;42329:20;:::i;:::-;42324:25;;42363:20;42381:1;42363:20;:::i;:::-;42358:25;;42407:1;42404;42400:9;42392:17;;42431:1;42425:4;42422:11;42419:37;;;42436:18;;:::i;:::-;42419:37;42269:194;;;;:::o;42469:179::-;42609:31;42605:1;42597:6;42593:14;42586:55;42469:179;:::o;42654:366::-;42796:3;42817:67;42881:2;42876:3;42817:67;:::i;:::-;42810:74;;42893:93;42982:3;42893:93;:::i;:::-;43011:2;43006:3;43002:12;42995:19;;42654:366;;;:::o;43026:419::-;43192:4;43230:2;43219:9;43215:18;43207:26;;43279:9;43273:4;43269:20;43265:1;43254:9;43250:17;43243:47;43307:131;43433:4;43307:131;:::i;:::-;43299:139;;43026:419;;;:::o;43451:147::-;43552:11;43589:3;43574:18;;43451:147;;;;:::o;43604:114::-;;:::o;43724:398::-;43883:3;43904:83;43985:1;43980:3;43904:83;:::i;:::-;43897:90;;43996:93;44085:3;43996:93;:::i;:::-;44114:1;44109:3;44105:11;44098:18;;43724:398;;;:::o;44128:379::-;44312:3;44334:147;44477:3;44334:147;:::i;:::-;44327:154;;44498:3;44491:10;;44128:379;;;:::o;44513:245::-;44653:34;44649:1;44641:6;44637:14;44630:58;44722:28;44717:2;44709:6;44705:15;44698:53;44513:245;:::o;44764:366::-;44906:3;44927:67;44991:2;44986:3;44927:67;:::i;:::-;44920:74;;45003:93;45092:3;45003:93;:::i;:::-;45121:2;45116:3;45112:12;45105:19;;44764:366;;;:::o;45136:419::-;45302:4;45340:2;45329:9;45325:18;45317:26;;45389:9;45383:4;45379:20;45375:1;45364:9;45360:17;45353:47;45417:131;45543:4;45417:131;:::i;:::-;45409:139;;45136:419;;;:::o;45561:105::-;45597:7;45637:22;45630:5;45626:34;45615:45;;45561:105;;;:::o;45672:120::-;45744:23;45761:5;45744:23;:::i;:::-;45737:5;45734:34;45724:62;;45782:1;45779;45772:12;45724:62;45672:120;:::o;45798:141::-;45854:5;45885:6;45879:13;45870:22;;45901:32;45927:5;45901:32;:::i;:::-;45798:141;;;;:::o;45945:76::-;45981:7;46010:5;45999:16;;45945:76;;;:::o;46027:120::-;46099:23;46116:5;46099:23;:::i;:::-;46092:5;46089:34;46079:62;;46137:1;46134;46127:12;46079:62;46027:120;:::o;46153:141::-;46209:5;46240:6;46234:13;46225:22;;46256:32;46282:5;46256:32;:::i;:::-;46153:141;;;;:::o;46300:143::-;46357:5;46388:6;46382:13;46373:22;;46404:33;46431:5;46404:33;:::i;:::-;46300:143;;;;:::o;46449:971::-;46552:6;46560;46568;46576;46584;46633:3;46621:9;46612:7;46608:23;46604:33;46601:120;;;46640:79;;:::i;:::-;46601:120;46760:1;46785:63;46840:7;46831:6;46820:9;46816:22;46785:63;:::i;:::-;46775:73;;46731:127;46897:2;46923:63;46978:7;46969:6;46958:9;46954:22;46923:63;:::i;:::-;46913:73;;46868:128;47035:2;47061:64;47117:7;47108:6;47097:9;47093:22;47061:64;:::i;:::-;47051:74;;47006:129;47174:2;47200:64;47256:7;47247:6;47236:9;47232:22;47200:64;:::i;:::-;47190:74;;47145:129;47313:3;47340:63;47395:7;47386:6;47375:9;47371:22;47340:63;:::i;:::-;47330:73;;47284:129;46449:971;;;;;;;;:::o;47426:175::-;47566:27;47562:1;47554:6;47550:14;47543:51;47426:175;:::o;47607:366::-;47749:3;47770:67;47834:2;47829:3;47770:67;:::i;:::-;47763:74;;47846:93;47935:3;47846:93;:::i;:::-;47964:2;47959:3;47955:12;47948:19;;47607:366;;;:::o;47979:419::-;48145:4;48183:2;48172:9;48168:18;48160:26;;48232:9;48226:4;48222:20;48218:1;48207:9;48203:17;48196:47;48260:131;48386:4;48260:131;:::i;:::-;48252:139;;47979:419;;;:::o;48404:237::-;48544:34;48540:1;48532:6;48528:14;48521:58;48613:20;48608:2;48600:6;48596:15;48589:45;48404:237;:::o;48647:366::-;48789:3;48810:67;48874:2;48869:3;48810:67;:::i;:::-;48803:74;;48886:93;48975:3;48886:93;:::i;:::-;49004:2;48999:3;48995:12;48988:19;;48647:366;;;:::o;49019:419::-;49185:4;49223:2;49212:9;49208:18;49200:26;;49272:9;49266:4;49262:20;49258:1;49247:9;49243:17;49236:47;49300:131;49426:4;49300:131;:::i;:::-;49292:139;;49019:419;;;:::o;49444:233::-;49483:3;49506:24;49524:5;49506:24;:::i;:::-;49497:33;;49552:66;49545:5;49542:77;49539:103;;49622:18;;:::i;:::-;49539:103;49669:1;49662:5;49658:13;49651:20;;49444:233;;;:::o;49683:176::-;49715:1;49732:20;49750:1;49732:20;:::i;:::-;49727:25;;49766:20;49784:1;49766:20;:::i;:::-;49761:25;;49805:1;49795:35;;49810:18;;:::i;:::-;49795:35;49851:1;49848;49844:9;49839:14;;49683:176;;;;:::o;49865:180::-;49913:77;49910:1;49903:88;50010:4;50007:1;50000:15;50034:4;50031:1;50024:15;50051:182;50191:34;50187:1;50179:6;50175:14;50168:58;50051:182;:::o;50239:366::-;50381:3;50402:67;50466:2;50461:3;50402:67;:::i;:::-;50395:74;;50478:93;50567:3;50478:93;:::i;:::-;50596:2;50591:3;50587:12;50580:19;;50239:366;;;:::o;50611:419::-;50777:4;50815:2;50804:9;50800:18;50792:26;;50864:9;50858:4;50854:20;50850:1;50839:9;50835:17;50828:47;50892:131;51018:4;50892:131;:::i;:::-;50884:139;;50611:419;;;:::o;51036:178::-;51176:30;51172:1;51164:6;51160:14;51153:54;51036:178;:::o;51220:366::-;51362:3;51383:67;51447:2;51442:3;51383:67;:::i;:::-;51376:74;;51459:93;51548:3;51459:93;:::i;:::-;51577:2;51572:3;51568:12;51561:19;;51220:366;;;:::o;51592:419::-;51758:4;51796:2;51785:9;51781:18;51773:26;;51845:9;51839:4;51835:20;51831:1;51820:9;51816:17;51809:47;51873:131;51999:4;51873:131;:::i;:::-;51865:139;;51592:419;;;:::o;52017:98::-;52068:6;52102:5;52096:12;52086:22;;52017:98;;;:::o;52121:168::-;52204:11;52238:6;52233:3;52226:19;52278:4;52273:3;52269:14;52254:29;;52121:168;;;;:::o;52295:373::-;52381:3;52409:38;52441:5;52409:38;:::i;:::-;52463:70;52526:6;52521:3;52463:70;:::i;:::-;52456:77;;52542:65;52600:6;52595:3;52588:4;52581:5;52577:16;52542:65;:::i;:::-;52632:29;52654:6;52632:29;:::i;:::-;52627:3;52623:39;52616:46;;52385:283;52295:373;;;;:::o;52674:640::-;52869:4;52907:3;52896:9;52892:19;52884:27;;52921:71;52989:1;52978:9;52974:17;52965:6;52921:71;:::i;:::-;53002:72;53070:2;53059:9;53055:18;53046:6;53002:72;:::i;:::-;53084;53152:2;53141:9;53137:18;53128:6;53084:72;:::i;:::-;53203:9;53197:4;53193:20;53188:2;53177:9;53173:18;53166:48;53231:76;53302:4;53293:6;53231:76;:::i;:::-;53223:84;;52674:640;;;;;;;:::o;53320:141::-;53376:5;53407:6;53401:13;53392:22;;53423:32;53449:5;53423:32;:::i;:::-;53320:141;;;;:::o;53467:349::-;53536:6;53585:2;53573:9;53564:7;53560:23;53556:32;53553:119;;;53591:79;;:::i;:::-;53553:119;53711:1;53736:63;53791:7;53782:6;53771:9;53767:22;53736:63;:::i;:::-;53726:73;;53682:127;53467:349;;;;:::o
Swarm Source
ipfs://abaecdfce82fa42800b1dd8a370ddb649d246cca2d5267a4416d3324f6d1ef71
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $1,914.21 | 0.6011 | $1,150.55 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.