Overview
POL Balance
0 POL
POL Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 4,005 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 65003801 | 13 hrs ago | IN | 0 POL | 0.00613994 | ||||
Safe Transfer Fr... | 65002008 | 14 hrs ago | IN | 0 POL | 0.00621101 | ||||
Set Approval For... | 64963183 | 38 hrs ago | IN | 0 POL | 0.0023506 | ||||
Set Approval For... | 64939569 | 2 days ago | IN | 0 POL | 0.00227619 | ||||
Safe Transfer Fr... | 64930983 | 2 days ago | IN | 0 POL | 0.00365613 | ||||
Safe Transfer Fr... | 64921136 | 2 days ago | IN | 0 POL | 0.01254756 | ||||
Bridge Item | 64912310 | 2 days ago | IN | 0.05 POL | 0.01420905 | ||||
Safe Transfer Fr... | 64911521 | 2 days ago | IN | 0 POL | 0.00424973 | ||||
Bridge Item | 64856302 | 4 days ago | IN | 0.3 POL | 0.01041307 | ||||
Diamond Cut | 64856274 | 4 days ago | IN | 0 POL | 0.14152416 | ||||
Set Approval For... | 64836615 | 4 days ago | IN | 0 POL | 0.015476 | ||||
Set Approval For... | 64835095 | 4 days ago | IN | 0 POL | 0.0092856 | ||||
Set Approval For... | 64834970 | 4 days ago | IN | 0 POL | 0.0092856 | ||||
Bridge Item | 64834866 | 4 days ago | IN | 0.3 POL | 0.02676768 | ||||
Diamond Cut | 64834801 | 4 days ago | IN | 0 POL | 0.17093331 | ||||
Set Approval For... | 64820343 | 5 days ago | IN | 0 POL | 0.00129629 | ||||
Set Approval For... | 64813789 | 5 days ago | IN | 0 POL | 0.00185648 | ||||
Safe Transfer Fr... | 64725176 | 7 days ago | IN | 0 POL | 0.00449154 | ||||
Safe Transfer Fr... | 64697870 | 8 days ago | IN | 0 POL | 0.00535985 | ||||
Set Approval For... | 64695273 | 8 days ago | IN | 0 POL | 0.00455526 | ||||
Set Approval For... | 64671112 | 8 days ago | IN | 0 POL | 0.00217816 | ||||
Safe Transfer Fr... | 64657523 | 9 days ago | IN | 0 POL | 0.00433649 | ||||
Set Approval For... | 64628686 | 9 days ago | IN | 0 POL | 0.00908701 | ||||
Set Approval For... | 64620542 | 10 days ago | IN | 0 POL | 0.00354782 | ||||
Safe Transfer Fr... | 64563746 | 11 days ago | IN | 0 POL | 0.00541612 |
Loading...
Loading
Contract Name:
WearableDiamond
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-11-24 */ /** * SourceUnit: /home/null/Desktop/aavegotchi-contracts/contracts/Aavegotchi/WearableDiamond/WearableDiamond.sol */ /// SPDX-License-Identifier: MIT pragma solidity 0.8.1; library LibMeta { bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(bytes("EIP712Domain(string name,string version,uint256 salt,address verifyingContract)")); function domainSeparator(string memory name, string memory version) internal view returns (bytes32 domainSeparator_) { domainSeparator_ = keccak256( abi.encode(EIP712_DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(version)), getChainID(), address(this)) ); } function getChainID() internal view returns (uint256 id) { assembly { id := chainid() } } function msgSender() internal view returns (address sender_) { if (msg.sender == address(this)) { bytes memory array = msg.data; uint256 index = msg.data.length; assembly { // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those. sender_ := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff) } } else { sender_ = msg.sender; } } } /** * SourceUnit: /home/null/Desktop/aavegotchi-contracts/contracts/Aavegotchi/WearableDiamond/WearableDiamond.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT pragma solidity 0.8.1; /// @title ERC-173 Contract Ownership Standard /// Note: the ERC-165 identifier for this interface is 0x7f5828d0 /* is ERC165 */ interface IERC173 { /// @notice Get the address of the owner /// @return owner_ The address of the owner. function owner() external view returns (address owner_); /// @notice Set the address of the new owner of the contract /// @dev Set _newOwner to address(0) to renounce any ownership. /// @param _newOwner The address of the new owner of the contract function transferOwnership(address _newOwner) external; } /** * SourceUnit: /home/null/Desktop/aavegotchi-contracts/contracts/Aavegotchi/WearableDiamond/WearableDiamond.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT pragma solidity 0.8.1; interface IERC165 { /// @notice Query if a contract implements an interface /// @param interfaceId The interface identifier, as specified in ERC-165 /// @dev Interface identification is specified in ERC-165. This function /// uses less than 30,000 gas. /// @return `true` if the contract implements `interfaceID` and /// `interfaceID` is not 0xffffffff, `false` otherwise function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * SourceUnit: /home/null/Desktop/aavegotchi-contracts/contracts/Aavegotchi/WearableDiamond/WearableDiamond.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT pragma solidity 0.8.1; // A loupe is a small magnifying glass used to look at diamonds. // These functions look at diamonds interface IDiamondLoupe { /// These functions are expected to be called frequently /// by tools. struct Facet { address facetAddress; bytes4[] functionSelectors; } /// @notice Gets all facet addresses and their four byte function selectors. /// @return facets_ Facet function facets() external view returns (Facet[] memory facets_); /// @notice Gets all the function selectors supported by a specific facet. /// @param _facet The facet address. /// @return facetFunctionSelectors_ function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_); /// @notice Get all the facet addresses used by a diamond. /// @return facetAddresses_ function facetAddresses() external view returns (address[] memory facetAddresses_); /// @notice Gets the facet that supports the given selector. /// @dev If facet is not found return address(0). /// @param _functionSelector The function selector. /// @return facetAddress_ The facet address. function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_); } /** * SourceUnit: /home/null/Desktop/aavegotchi-contracts/contracts/Aavegotchi/WearableDiamond/WearableDiamond.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT pragma solidity 0.8.1; /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) /******************************************************************************/ interface IDiamondCut { enum FacetCutAction {Add, Replace, Remove} struct FacetCut { address facetAddress; FacetCutAction action; bytes4[] functionSelectors; } /// @notice Add/replace/remove any number of functions and optionally execute /// a function with delegatecall /// @param _diamondCut Contains the facet addresses and function selectors /// @param _init The address of the contract or facet to execute _calldata /// @param _calldata A function call, including function selector and arguments /// _calldata is executed with delegatecall on _init function diamondCut( FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata ) external; event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata); } /** * SourceUnit: /home/null/Desktop/aavegotchi-contracts/contracts/Aavegotchi/WearableDiamond/WearableDiamond.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT pragma solidity 0.8.1; /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535 /******************************************************************************/ ////import {IDiamondCut} from "../interfaces/IDiamondCut.sol"; ////import {IDiamondLoupe} from "../interfaces/IDiamondLoupe.sol"; ////import {IERC165} from "../interfaces/IERC165.sol"; ////import {IERC173} from "../interfaces/IERC173.sol"; ////import {LibMeta} from "./LibMeta.sol"; library LibDiamond { bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage"); struct FacetAddressAndPosition { address facetAddress; uint16 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array } struct FacetFunctionSelectors { bytes4[] functionSelectors; uint16 facetAddressPosition; // position of facetAddress in facetAddresses array } struct DiamondStorage { // maps function selector to the facet address and // the position of the selector in the facetFunctionSelectors.selectors array mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition; // maps facet addresses to function selectors mapping(address => FacetFunctionSelectors) facetFunctionSelectors; // facet addresses address[] facetAddresses; // Used to query if a contract implements an interface. // Used to implement ERC-165. mapping(bytes4 => bool) supportedInterfaces; // owner of the contract address contractOwner; } function diamondStorage() internal pure returns (DiamondStorage storage ds) { bytes32 position = DIAMOND_STORAGE_POSITION; assembly { ds.slot := position } } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function setContractOwner(address _newOwner) internal { DiamondStorage storage ds = diamondStorage(); address previousOwner = ds.contractOwner; ds.contractOwner = _newOwner; emit OwnershipTransferred(previousOwner, _newOwner); } function contractOwner() internal view returns (address contractOwner_) { contractOwner_ = diamondStorage().contractOwner; } function enforceIsContractOwner() internal view { require(LibMeta.msgSender() == diamondStorage().contractOwner, "LibDiamond: Must be contract owner"); } event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata); function addDiamondFunctions( address _diamondCutFacet, address _diamondLoupeFacet, address _ownershipFacet ) internal { IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](3); bytes4[] memory functionSelectors = new bytes4[](1); functionSelectors[0] = IDiamondCut.diamondCut.selector; cut[0] = IDiamondCut.FacetCut({facetAddress: _diamondCutFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors}); functionSelectors = new bytes4[](5); functionSelectors[0] = IDiamondLoupe.facets.selector; functionSelectors[1] = IDiamondLoupe.facetFunctionSelectors.selector; functionSelectors[2] = IDiamondLoupe.facetAddresses.selector; functionSelectors[3] = IDiamondLoupe.facetAddress.selector; functionSelectors[4] = IERC165.supportsInterface.selector; cut[1] = IDiamondCut.FacetCut({ facetAddress: _diamondLoupeFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors }); functionSelectors = new bytes4[](2); functionSelectors[0] = IERC173.transferOwnership.selector; functionSelectors[1] = IERC173.owner.selector; cut[2] = IDiamondCut.FacetCut({facetAddress: _ownershipFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors}); diamondCut(cut, address(0), ""); } // Internal function version of diamondCut function diamondCut( IDiamondCut.FacetCut[] memory _diamondCut, address _init, bytes memory _calldata ) internal { for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) { IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action; if (action == IDiamondCut.FacetCutAction.Add) { addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else if (action == IDiamondCut.FacetCutAction.Replace) { replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else if (action == IDiamondCut.FacetCutAction.Remove) { removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else { revert("LibDiamondCut: Incorrect FacetCutAction"); } } emit DiamondCut(_diamondCut, _init, _calldata); initializeDiamondCut(_init, _calldata); } function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); // uint16 selectorCount = uint16(diamondStorage().selectors.length); require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); // add new facet address if it does not exist if (selectorPosition == 0) { enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code"); ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length); ds.facetAddresses.push(_facetAddress); } for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; require(oldFacetAddress == address(0), "LibDiamondCut: Can't add function that already exists"); ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector); ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress; ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition; selectorPosition++; } } function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); // add new facet address if it does not exist if (selectorPosition == 0) { enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code"); ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length); ds.facetAddresses.push(_facetAddress); } for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; require(oldFacetAddress != _facetAddress, "LibDiamondCut: Can't replace function with same function"); removeFunction(oldFacetAddress, selector); // add function ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition; ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector); ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress; selectorPosition++; } } function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); // if function does not exist then do nothing and return require(_facetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)"); for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; removeFunction(oldFacetAddress, selector); } } function removeFunction(address _facetAddress, bytes4 _selector) internal { DiamondStorage storage ds = diamondStorage(); require(_facetAddress != address(0), "LibDiamondCut: Can't remove function that doesn't exist"); // an immutable function is a function defined directly in a diamond require(_facetAddress != address(this), "LibDiamondCut: Can't remove immutable function"); // replace selector with last selector, then delete last selector uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition; uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1; // if not the same then replace _selector with lastSelector if (selectorPosition != lastSelectorPosition) { bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition]; ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector; ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint16(selectorPosition); } // delete the last selector ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop(); delete ds.selectorToFacetAndPosition[_selector]; // if no more selectors for facet address then delete the facet address if (lastSelectorPosition == 0) { // replace facet address with last facet address and delete last facet address uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1; uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; if (facetAddressPosition != lastFacetAddressPosition) { address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition]; ds.facetAddresses[facetAddressPosition] = lastFacetAddress; ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = uint16(facetAddressPosition); } ds.facetAddresses.pop(); delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; } } function initializeDiamondCut(address _init, bytes memory _calldata) internal { if (_init == address(0)) { require(_calldata.length == 0, "LibDiamondCut: _init is address(0) but_calldata is not empty"); } else { require(_calldata.length > 0, "LibDiamondCut: _calldata is empty but _init is not address(0)"); if (_init != address(this)) { enforceHasContractCode(_init, "LibDiamondCut: _init address has no code"); } (bool success, bytes memory error) = _init.delegatecall(_calldata); if (success == false) { if (error.length > 0) { // bubble up the error revert(string(error)); } else { revert("LibDiamondCut: _init function reverted"); } } } } function enforceHasContractCode(address _contract, string memory _errorMessage) internal view { uint256 contractSize; assembly { contractSize := extcodesize(_contract) } require(contractSize != 0, _errorMessage); } } /** * SourceUnit: /home/null/Desktop/aavegotchi-contracts/contracts/Aavegotchi/WearableDiamond/WearableDiamond.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT pragma solidity 0.8.1; ////import {LibDiamond} from "../libraries/LibDiamond.sol"; ////import {IERC173} from "../interfaces/IERC173.sol"; contract OwnershipFacet is IERC173 { function transferOwnership(address _newOwner) external override { LibDiamond.enforceIsContractOwner(); LibDiamond.setContractOwner(_newOwner); } function owner() external view override returns (address owner_) { owner_ = LibDiamond.contractOwner(); } } /** * SourceUnit: /home/null/Desktop/aavegotchi-contracts/contracts/Aavegotchi/WearableDiamond/WearableDiamond.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT pragma solidity 0.8.1; /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535 /******************************************************************************/ ////import {LibDiamond} from "../libraries/LibDiamond.sol"; ////import {IDiamondLoupe} from "../interfaces/IDiamondLoupe.sol"; ////import {IERC165} from "../interfaces/IERC165.sol"; contract DiamondLoupeFacet is IDiamondLoupe, IERC165 { // Diamond Loupe Functions //////////////////////////////////////////////////////////////////// /// These functions are expected to be called frequently by tools. // // struct Facet { // address facetAddress; // bytes4[] functionSelectors; // } /// @notice Gets all facets and their selectors. /// @return facets_ Facet function facets() external view override returns (Facet[] memory facets_) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); uint256 numFacets = ds.facetAddresses.length; facets_ = new Facet[](numFacets); for (uint256 i; i < numFacets; i++) { address facetAddress_ = ds.facetAddresses[i]; facets_[i].facetAddress = facetAddress_; facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors; } } /// @notice Gets all the function selectors provided by a facet. /// @param _facet The facet address. /// @return facetFunctionSelectors_ function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors; } /// @notice Get all the facet addresses used by a diamond. /// @return facetAddresses_ function facetAddresses() external view override returns (address[] memory facetAddresses_) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); facetAddresses_ = ds.facetAddresses; } /// @notice Gets the facet that supports the given selector. /// @dev If facet is not found return address(0). /// @param _functionSelector The function selector. /// @return facetAddress_ The facet address. function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress; } // This implements ERC-165. function supportsInterface(bytes4 _interfaceId) external view override returns (bool) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); return ds.supportedInterfaces[_interfaceId]; } } /** * SourceUnit: /home/null/Desktop/aavegotchi-contracts/contracts/Aavegotchi/WearableDiamond/WearableDiamond.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT pragma solidity 0.8.1; /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535 /******************************************************************************/ ////import {IDiamondCut} from "../interfaces/IDiamondCut.sol"; ////import {LibDiamond} from "../libraries/LibDiamond.sol"; contract DiamondCutFacet is IDiamondCut { /// @notice Add/replace/remove any number of functions and optionally execute /// a function with delegatecall /// @param _diamondCut Contains the facet addresses and function selectors /// @param _init The address of the contract or facet to execute _calldata /// @param _calldata A function call, including function selector and arguments /// _calldata is executed with delegatecall on _init function diamondCut( FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata ) external override { LibDiamond.enforceIsContractOwner(); LibDiamond.diamondCut(_diamondCut, _init, _calldata); } } /** * SourceUnit: /home/null/Desktop/aavegotchi-contracts/contracts/Aavegotchi/WearableDiamond/WearableDiamond.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT pragma solidity 0.8.1; /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535 /******************************************************************************/ ////import {IDiamondCut} from "../../../shared/interfaces/IDiamondCut.sol"; ////import {IDiamondLoupe} from "../../../shared/interfaces/IDiamondLoupe.sol"; ////import {IERC165} from "../../../shared/interfaces/IERC165.sol"; ////import {IERC173} from "../../../shared/interfaces/IERC173.sol"; ////import {LibMeta} from "../../../shared/libraries/LibMeta.sol"; library WearableLibDiamond { bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage"); address constant AAVEGOTCHI_DIAMOND = 0x86935F11C86623deC8a25696E1C19a8659CbF95d; struct FacetAddressAndPosition { address facetAddress; uint16 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array } struct FacetFunctionSelectors { bytes4[] functionSelectors; uint16 facetAddressPosition; // position of facetAddress in facetAddresses array } struct DiamondStorage { // maps function selector to the facet address and // the position of the selector in the facetFunctionSelectors.selectors array mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition; // maps facet addresses to function selectors mapping(address => FacetFunctionSelectors) facetFunctionSelectors; // facet addresses address[] facetAddresses; // Used to query if a contract implements an interface. // Used to implement ERC-165. mapping(bytes4 => bool) supportedInterfaces; // owner of the contract address contractOwner; //aavegotchi master diamond address address aavegotchiDiamond; } function diamondStorage() internal pure returns (DiamondStorage storage ds) { bytes32 position = DIAMOND_STORAGE_POSITION; assembly { ds.slot := position } } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function setContractOwner(address _newOwner) internal { DiamondStorage storage ds = diamondStorage(); address previousOwner = ds.contractOwner; ds.contractOwner = _newOwner; emit OwnershipTransferred(previousOwner, _newOwner); } function contractOwner() internal view returns (address contractOwner_) { contractOwner_ = diamondStorage().contractOwner; } function enforceIsContractOwner() internal view { require(LibMeta.msgSender() == diamondStorage().contractOwner, "LibDiamond: Must be contract owner"); } function enforceIsDiamond() internal view { require(msg.sender == AAVEGOTCHI_DIAMOND, "LibDiamond: Caller must be Aavegotchi Diamond"); } event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata); function addDiamondFunctions( address _diamondCutFacet, address _diamondLoupeFacet, address _ownershipFacet ) internal { IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](3); bytes4[] memory functionSelectors = new bytes4[](1); functionSelectors[0] = IDiamondCut.diamondCut.selector; cut[0] = IDiamondCut.FacetCut({facetAddress: _diamondCutFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors}); functionSelectors = new bytes4[](5); functionSelectors[0] = IDiamondLoupe.facets.selector; functionSelectors[1] = IDiamondLoupe.facetFunctionSelectors.selector; functionSelectors[2] = IDiamondLoupe.facetAddresses.selector; functionSelectors[3] = IDiamondLoupe.facetAddress.selector; functionSelectors[4] = IERC165.supportsInterface.selector; cut[1] = IDiamondCut.FacetCut({ facetAddress: _diamondLoupeFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors }); functionSelectors = new bytes4[](2); functionSelectors[0] = IERC173.transferOwnership.selector; functionSelectors[1] = IERC173.owner.selector; cut[2] = IDiamondCut.FacetCut({facetAddress: _ownershipFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors}); diamondCut(cut, address(0), ""); } // Internal function version of diamondCut function diamondCut( IDiamondCut.FacetCut[] memory _diamondCut, address _init, bytes memory _calldata ) internal { for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) { IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action; if (action == IDiamondCut.FacetCutAction.Add) { addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else if (action == IDiamondCut.FacetCutAction.Replace) { replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else if (action == IDiamondCut.FacetCutAction.Remove) { removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else { revert("LibDiamondCut: Incorrect FacetCutAction"); } } emit DiamondCut(_diamondCut, _init, _calldata); initializeDiamondCut(_init, _calldata); } function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); // uint16 selectorCount = uint16(diamondStorage().selectors.length); require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); // add new facet address if it does not exist if (selectorPosition == 0) { enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code"); ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length); ds.facetAddresses.push(_facetAddress); } for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; require(oldFacetAddress == address(0), "LibDiamondCut: Can't add function that already exists"); ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector); ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress; ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition; selectorPosition++; } } function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); // add new facet address if it does not exist if (selectorPosition == 0) { enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code"); ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length); ds.facetAddresses.push(_facetAddress); } for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; require(oldFacetAddress != _facetAddress, "LibDiamondCut: Can't replace function with same function"); removeFunction(oldFacetAddress, selector); // add function ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition; ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector); ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress; selectorPosition++; } } function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); // if function does not exist then do nothing and return require(_facetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)"); for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; removeFunction(oldFacetAddress, selector); } } function removeFunction(address _facetAddress, bytes4 _selector) internal { DiamondStorage storage ds = diamondStorage(); require(_facetAddress != address(0), "LibDiamondCut: Can't remove function that doesn't exist"); // an immutable function is a function defined directly in a diamond require(_facetAddress != address(this), "LibDiamondCut: Can't remove immutable function"); // replace selector with last selector, then delete last selector uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition; uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1; // if not the same then replace _selector with lastSelector if (selectorPosition != lastSelectorPosition) { bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition]; ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector; ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint16(selectorPosition); } // delete the last selector ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop(); delete ds.selectorToFacetAndPosition[_selector]; // if no more selectors for facet address then delete the facet address if (lastSelectorPosition == 0) { // replace facet address with last facet address and delete last facet address uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1; uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; if (facetAddressPosition != lastFacetAddressPosition) { address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition]; ds.facetAddresses[facetAddressPosition] = lastFacetAddress; ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = uint16(facetAddressPosition); } ds.facetAddresses.pop(); delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; } } function initializeDiamondCut(address _init, bytes memory _calldata) internal { if (_init == address(0)) { require(_calldata.length == 0, "LibDiamondCut: _init is address(0) but_calldata is not empty"); } else { require(_calldata.length > 0, "LibDiamondCut: _calldata is empty but _init is not address(0)"); if (_init != address(this)) { enforceHasContractCode(_init, "LibDiamondCut: _init address has no code"); } (bool success, bytes memory error) = _init.delegatecall(_calldata); if (success == false) { if (error.length > 0) { // bubble up the error revert(string(error)); } else { revert("LibDiamondCut: _init function reverted"); } } } } function enforceHasContractCode(address _contract, string memory _errorMessage) internal view { uint256 contractSize; assembly { contractSize := extcodesize(_contract) } require(contractSize != 0, _errorMessage); } } /** * SourceUnit: /home/null/Desktop/aavegotchi-contracts/contracts/Aavegotchi/WearableDiamond/WearableDiamond.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT pragma solidity 0.8.1; /******************************************************************************\ * Authors: Nick Mudge (https://twitter.com/mudgen) * * Implementation of a diamond. /******************************************************************************/ ////import {WearableLibDiamond} from "./libraries/WearableLibDiamond.sol"; ////import {DiamondCutFacet} from "../../shared/facets/DiamondCutFacet.sol"; ////import {DiamondLoupeFacet} from "../../shared/facets/DiamondLoupeFacet.sol"; ////import {OwnershipFacet} from "../../shared/facets/OwnershipFacet.sol"; contract WearableDiamond { constructor( address _contractOwner, address _diamondCutFacet, address _diaomondLoupeFacet, address _ownershipFacet ) { WearableLibDiamond.setContractOwner(_contractOwner); WearableLibDiamond.addDiamondFunctions(_diamondCutFacet, _diaomondLoupeFacet, _ownershipFacet); WearableLibDiamond.DiamondStorage storage ds = WearableLibDiamond.diamondStorage(); ds.supportedInterfaces[0xd9b67a26] = true; //erc1155 } // Find facet for function that is called and execute the // function if a facet is found and return any value. fallback() external payable { WearableLibDiamond.DiamondStorage storage ds; bytes32 position = WearableLibDiamond.DIAMOND_STORAGE_POSITION; assembly { ds.slot := position } address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress; require(facet != address(0), "Diamond: Function does not exist"); assembly { calldatacopy(0, 0, calldatasize()) let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch result case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"},{"internalType":"address","name":"_diamondCutFacet","type":"address"},{"internalType":"address","name":"_diaomondLoupeFacet","type":"address"},{"internalType":"address","name":"_ownershipFacet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620030cf380380620030cf833981016040819052620000349162001283565b6200004a84620000a960201b620000951760201c565b620000628383836200010b60201b620000f51760201c565b600062000079620004f060201b620004c41760201c565b636cdb3d1360e11b6000908152600390910160205260409020805460ff1916600117905550620018989350505050565b6000620000b5620004f0565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60408051600380825260808201909252600091816020015b6200012d62001247565b815260200190600190039081620001235750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b816000815181106200019057634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b0387168152908101600081526020018281525082600081518110620001ef57634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408051600580825260c0820190925290816020016020820280368337019050509050637a0ed62760e01b816000815181106200024757634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b90829060019081106200028d57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b9082906002908110620002d357634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b90829060039081106200031957634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516301ffc9a760e01b90829060049081106200035f57634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b0386168152908101600081526020018281525082600181518110620003be57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152604080516002808252606082019092529081602001602082028036833701905050905063f2fde38b60e01b816000815181106200041657634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101909101528051638da5cb5b60e01b90829060019081106200045c57634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b0385168152908101600081526020018281525082600281518110620004bb57634e487b7160e01b600052603260045260246000fd5b6020026020010181905250620004e9826000604051806020016040528060008152506200051460201b60201c565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60005b83518110156200076d5760008482815181106200054457634e487b7160e01b600052603260045260246000fd5b6020026020010151602001519050600060028111156200057457634e487b7160e01b600052602160045260246000fd5b8160028111156200059557634e487b7160e01b600052602160045260246000fd5b14156200060c5762000606858381518110620005c157634e487b7160e01b600052603260045260246000fd5b602002602001015160000151868481518110620005ee57634e487b7160e01b600052603260045260246000fd5b602002602001015160400151620007bc60201b60201c565b62000757565b60018160028111156200062f57634e487b7160e01b600052602160045260246000fd5b1415620006a057620006068583815181106200065b57634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106200068857634e487b7160e01b600052603260045260246000fd5b602002602001015160400151620009f560201b60201c565b6002816002811115620006c357634e487b7160e01b600052602160045260246000fd5b1415620007345762000606858381518110620006ef57634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106200071c57634e487b7160e01b600052603260045260246000fd5b60200260200101516040015162000c4a60201b60201c565b60405162461bcd60e51b81526004016200074e90620015a1565b60405180910390fd5b5080620007648162001864565b91505062000517565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051620007a39392919062001338565b60405180910390a1620007b7828262000d32565b505050565b6000815111620007e05760405162461bcd60e51b81526004016200074e90620014f9565b6000620007ec620004f0565b90506001600160a01b038316620008175760405162461bcd60e51b81526004016200074e90620015e8565b6001600160a01b038316600090815260018201602052604090205461ffff8116620008bd576200086184604051806060016040528060248152602001620030ab6024913962000e70565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b8351811015620004e9576000848281518110620008ed57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03168015620009405760405162461bcd60e51b81526004016200074e90620016df565b6001600160a01b03871660008181526001878101602090815260408084208054938401815584528184206008840401805463ffffffff60079095166004026101000a948502191660e089901c94909402939093179092556001600160e01b031986168352889052902080546001600160a01b03191690911761ffff60a01b1916600160a01b61ffff87160217905583620009da816200183f565b94505050508080620009ec9062001864565b915050620008c0565b600081511162000a195760405162461bcd60e51b81526004016200074e90620014f9565b600062000a25620004f0565b90506001600160a01b03831662000a505760405162461bcd60e51b81526004016200074e90620015e8565b6001600160a01b038316600090815260018201602052604090205461ffff811662000af65762000a9a84604051806060016040528060248152602001620030ab6024913962000e70565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b8351811015620004e957600084828151811062000b2657634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690871681141562000b7f5760405162461bcd60e51b81526004016200074e906200173c565b62000b8b818362000e94565b6001600160e01b03198216600081815260208781526040808320805461ffff60a01b1916600160a01b61ffff8b16021781556001600160a01b038c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b0319161790558362000c2f816200183f565b9450505050808062000c419062001864565b91505062000af9565b600081511162000c6e5760405162461bcd60e51b81526004016200074e90620014f9565b600062000c7a620004f0565b90506001600160a01b0383161562000ca65760405162461bcd60e51b81526004016200074e9062001799565b60005b825181101562000d2c57600083828151811062000cd657634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b031662000d14818362000e94565b5050808062000d239062001864565b91505062000ca9565b50505050565b6001600160a01b03821662000d695780511562000d635760405162461bcd60e51b81526004016200074e9062001456565b62000e6c565b600081511162000d8d5760405162461bcd60e51b81526004016200074e9062001634565b6001600160a01b038216301462000dc35762000dc382604051806060016040528060288152602001620030836028913962000e70565b600080836001600160a01b03168360405162000de091906200131a565b600060405180830381855af49150503d806000811462000e1d576040519150601f19603f3d011682016040523d82523d6000602084013e62000e22565b606091505b5090925090508162000d2c5780511562000e52578060405162461bcd60e51b81526004016200074e91906200143a565b60405162461bcd60e51b81526004016200074e90620014b3565b5050565b813b818162000d2c5760405162461bcd60e51b81526004016200074e91906200143a565b600062000ea0620004f0565b90506001600160a01b03831662000ecb5760405162461bcd60e51b81526004016200074e9062001544565b6001600160a01b03831630141562000ef75760405162461bcd60e51b81526004016200074e9062001691565b6001600160e01b03198216600090815260208281526040808320546001600160a01b0387168452600180860190935290832054600160a01b90910461ffff16929162000f4391620017f6565b90508082146200104e576001600160a01b0385166000908152600184016020526040812080548390811062000f8857634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b92508291908590811062000fe857634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b038516600090815260018401602052604090208054806200108657634e487b7160e01b600052603160045260246000fd5b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080546001600160b01b031916905580620004e9576002830154600090620010f590600190620017f6565b6001600160a01b038716600090815260018087016020526040909120015490915061ffff16808214620011d35760008560020183815481106200114857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546002870180546001600160a01b0390921692508291849081106200118857634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b84600201805480620011f557634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b6040805160608082018352600080835260208301529181019190915290565b80516001600160a01b03811681146200127e57600080fd5b919050565b6000806000806080858703121562001299578384fd5b620012a48562001266565b9350620012b46020860162001266565b9250620012c46040860162001266565b9150620012d46060860162001266565b905092959194509250565b6001600160a01b03169052565b600081518084526200130681602086016020860162001810565b601f01601f19169290920160200192915050565b600082516200132e81846020870162001810565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b848110156200140757898303607f19018652815180516001600160a01b03168452848101518985019060038110620013a457634e487b7160e01b8c52602160045260248cfd5b858701526040918201519185018a9052815190819052908501908a90898601905b80831015620013f15783516001600160e01b0319168252928701926001929092019190870190620013c5565b509786019794505050908301906001016200135e565b5050620014178289018b620012df565b87810360408901526200142b818a620012ec565b9b9a5050505050505050505050565b6000602082526200144f6020830184620012ec565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656040820152651d995c9d195960d21b606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756040820152663a20b1ba34b7b760c91b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201526d3a30b1363290333ab731ba34b7b760911b606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60408201527f6e207468617420616c7265616479206578697374730000000000000000000000606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260408201527f657373206d757374206265206164647265737328302900000000000000000000606082015260800190565b6000828210156200180b576200180b62001882565b500390565b60005b838110156200182d57818101518382015260200162001813565b8381111562000d2c5750506000910152565b600061ffff808316818114156200185a576200185a62001882565b6001019392505050565b60006000198214156200187b576200187b62001882565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6117db80620018a86000396000f3fe60806040908152600080356001600160e01b03191681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c60208190529190205481906001600160a01b0316806100715760405162461bcd60e51b8152600401610068906114db565b60405180910390fd5b3660008037600080366000845af43d6000803e808015610090573d6000f35b3d6000fd5b600061009f6104c4565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60408051600380825260808201909252600091816020015b610115611176565b81526020019060019003908161010d5750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b8160008151811061017657634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b03871681529081016000815260200182815250826000815181106101d457634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408051600580825260c0820190925290816020016020820280368337019050509050637a0ed62760e01b8160008151811061022b57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b908290600190811061027057634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b90829060029081106102b557634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b90829060039081106102fa57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516301ffc9a760e01b908290600490811061033f57634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b038616815290810160008152602001828152508260018151811061039d57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152604080516002808252606082019092529081602001602082028036833701905050905063f2fde38b60e01b816000815181106103f457634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101909101528051638da5cb5b60e01b908290600190811061043957634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b038516815290810160008152602001828152508260028151811061049757634e487b7160e01b600052603260045260246000fd5b60200260200101819052506104bd826000604051806020016040528060008152506104e8565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60005b835181101561070b57600084828151811061051657634e487b7160e01b600052603260045260246000fd5b60200260200101516020015190506000600281111561054557634e487b7160e01b600052602160045260246000fd5b81600281111561056557634e487b7160e01b600052602160045260246000fd5b14156105d0576105cb85838151811061058e57634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106105ba57634e487b7160e01b600052603260045260246000fd5b602002602001015160400151610756565b6106f8565b60018160028111156105f257634e487b7160e01b600052602160045260246000fd5b1415610658576105cb85838151811061061b57634e487b7160e01b600052603260045260246000fd5b60200260200101516000015186848151811061064757634e487b7160e01b600052603260045260246000fd5b602002602001015160400151610979565b600281600281111561067a57634e487b7160e01b600052602160045260246000fd5b14156106e0576105cb8583815181106106a357634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106106cf57634e487b7160e01b600052603260045260246000fd5b602002602001015160400151610bb6565b60405162461bcd60e51b815260040161006890611448565b508061070381611728565b9150506104eb565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161073f939291906111ea565b60405180910390a16107518282610c8f565b505050565b60008151116107775760405162461bcd60e51b8152600401610068906113a0565b60006107816104c4565b90506001600160a01b0383166107a95760405162461bcd60e51b81526004016100689061148f565b6001600160a01b038316600090815260018201602052604090205461ffff811661084b576107ef8460405180606001604052806024815260200161178260249139610db7565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156104bd57600084828151811061087957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b031680156108c95760405162461bcd60e51b8152600401610068906115bb565b6001600160a01b03871660008181526001878101602090815260408084208054938401815584528184206008840401805463ffffffff60079095166004026101000a948502191660e089901c94909402939093179092556001600160e01b031986168352889052902080546001600160a01b03191690911761ffff60a01b1916600160a01b61ffff8716021790558361096181611706565b9450505050808061097190611728565b91505061084e565b600081511161099a5760405162461bcd60e51b8152600401610068906113a0565b60006109a46104c4565b90506001600160a01b0383166109cc5760405162461bcd60e51b81526004016100689061148f565b6001600160a01b038316600090815260018201602052604090205461ffff8116610a6e57610a128460405180606001604052806024815260200161178260249139610db7565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156104bd576000848281518110610a9c57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03908116908716811415610af25760405162461bcd60e51b815260040161006890611610565b610afc8183610dd8565b6001600160e01b03198216600081815260208781526040808320805461ffff60a01b1916600160a01b61ffff8b16021781556001600160a01b038c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b03191617905583610b9e81611706565b94505050508080610bae90611728565b915050610a71565b6000815111610bd75760405162461bcd60e51b8152600401610068906113a0565b6000610be16104c4565b90506001600160a01b03831615610c0a5760405162461bcd60e51b81526004016100689061166d565b60005b8251811015610c89576000838281518110610c3857634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b0316610c748183610dd8565b50508080610c8190611728565b915050610c0d565b50505050565b6001600160a01b038216610cc157805115610cbc5760405162461bcd60e51b8152600401610068906112fd565b610db3565b6000815111610ce25760405162461bcd60e51b815260040161006890611510565b6001600160a01b0382163014610d1457610d148260405180606001604052806028815260200161175a60289139610db7565b600080836001600160a01b031683604051610d2f91906111ce565b600060405180830381855af49150503d8060008114610d6a576040519150601f19603f3d011682016040523d82523d6000602084013e610d6f565b606091505b50909250905081610c8957805115610d9b578060405162461bcd60e51b815260040161006891906112e3565b60405162461bcd60e51b81526004016100689061135a565b5050565b813b8181610c895760405162461bcd60e51b815260040161006891906112e3565b6000610de26104c4565b90506001600160a01b038316610e0a5760405162461bcd60e51b8152600401610068906113eb565b6001600160a01b038316301415610e335760405162461bcd60e51b81526004016100689061156d565b6001600160e01b03198216600090815260208281526040808320546001600160a01b0387168452600180860190935290832054600160a01b90910461ffff169291610e7d916116c3565b9050808214610f85576001600160a01b03851660009081526001840160205260408120805483908110610ec057634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b925082919085908110610f1f57634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b03851660009081526001840160205260409020805480610fbc57634e487b7160e01b600052603160045260246000fd5b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080546001600160b01b0319169055806104bd576002830154600090611028906001906116c3565b6001600160a01b038716600090815260018087016020526040909120015490915061ffff1680821461110357600085600201838154811061107957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546002870180546001600160a01b0390921692508291849081106110b857634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b8460020180548061112457634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b6040805160608082018352600080835260208301529181019190915290565b6001600160a01b03169052565b600081518084526111ba8160208601602086016116da565b601f01601f19169290920160200192915050565b600082516111e08184602087016116da565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b848110156112b457898303607f19018652815180516001600160a01b0316845284810151898501906003811061125457634e487b7160e01b8c52602160045260248cfd5b858701526040918201519185018a9052815190819052908501908a90898601905b8083101561129f5783516001600160e01b0319168252928701926001929092019190870190611275565b50978601979450505090830190600101611210565b50506112c28289018b611195565b87810360408901526112d4818a6111a2565b9b9a5050505050505050505050565b6000602082526112f660208301846111a2565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656040820152651d995c9d195960d21b606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756040820152663a20b1ba34b7b760c91b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b6020808252818101527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374604082015260600190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201526d3a30b1363290333ab731ba34b7b760911b606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6040820152746e207468617420616c72656164792065786973747360581b606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604082015275657373206d757374206265206164647265737328302960501b606082015260800190565b6000828210156116d5576116d5611743565b500390565b60005b838110156116f55781810151838201526020016116dd565b83811115610c895750506000910152565b600061ffff8083168181141561171e5761171e611743565b6001019392505050565b600060001982141561173c5761173c611743565b5060010190565b634e487b7160e01b600052601160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220fd8ac4033fb49697dfb475e058cd7d7702ac0a653d6ea63668d75985ee3266ed64736f6c634300080100334c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f64650000000000000000000000008d46fd7160940d89da026d59b2e819208e714e820000000000000000000000004f908fa47f10bc2254dae7c74d8b797c1749a8a600000000000000000000000058f64b56b1e15d8c932c51287d814edaa8d6feb9000000000000000000000000ae7df9f59fec446903c64f21a76d039bc81712ef
Deployed Bytecode
0x60806040908152600080356001600160e01b03191681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c60208190529190205481906001600160a01b0316806100715760405162461bcd60e51b8152600401610068906114db565b60405180910390fd5b3660008037600080366000845af43d6000803e808015610090573d6000f35b3d6000fd5b600061009f6104c4565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60408051600380825260808201909252600091816020015b610115611176565b81526020019060019003908161010d5750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b8160008151811061017657634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b03871681529081016000815260200182815250826000815181106101d457634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408051600580825260c0820190925290816020016020820280368337019050509050637a0ed62760e01b8160008151811061022b57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b908290600190811061027057634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b90829060029081106102b557634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b90829060039081106102fa57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516301ffc9a760e01b908290600490811061033f57634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b038616815290810160008152602001828152508260018151811061039d57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152604080516002808252606082019092529081602001602082028036833701905050905063f2fde38b60e01b816000815181106103f457634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101909101528051638da5cb5b60e01b908290600190811061043957634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b038516815290810160008152602001828152508260028151811061049757634e487b7160e01b600052603260045260246000fd5b60200260200101819052506104bd826000604051806020016040528060008152506104e8565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60005b835181101561070b57600084828151811061051657634e487b7160e01b600052603260045260246000fd5b60200260200101516020015190506000600281111561054557634e487b7160e01b600052602160045260246000fd5b81600281111561056557634e487b7160e01b600052602160045260246000fd5b14156105d0576105cb85838151811061058e57634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106105ba57634e487b7160e01b600052603260045260246000fd5b602002602001015160400151610756565b6106f8565b60018160028111156105f257634e487b7160e01b600052602160045260246000fd5b1415610658576105cb85838151811061061b57634e487b7160e01b600052603260045260246000fd5b60200260200101516000015186848151811061064757634e487b7160e01b600052603260045260246000fd5b602002602001015160400151610979565b600281600281111561067a57634e487b7160e01b600052602160045260246000fd5b14156106e0576105cb8583815181106106a357634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106106cf57634e487b7160e01b600052603260045260246000fd5b602002602001015160400151610bb6565b60405162461bcd60e51b815260040161006890611448565b508061070381611728565b9150506104eb565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161073f939291906111ea565b60405180910390a16107518282610c8f565b505050565b60008151116107775760405162461bcd60e51b8152600401610068906113a0565b60006107816104c4565b90506001600160a01b0383166107a95760405162461bcd60e51b81526004016100689061148f565b6001600160a01b038316600090815260018201602052604090205461ffff811661084b576107ef8460405180606001604052806024815260200161178260249139610db7565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156104bd57600084828151811061087957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b031680156108c95760405162461bcd60e51b8152600401610068906115bb565b6001600160a01b03871660008181526001878101602090815260408084208054938401815584528184206008840401805463ffffffff60079095166004026101000a948502191660e089901c94909402939093179092556001600160e01b031986168352889052902080546001600160a01b03191690911761ffff60a01b1916600160a01b61ffff8716021790558361096181611706565b9450505050808061097190611728565b91505061084e565b600081511161099a5760405162461bcd60e51b8152600401610068906113a0565b60006109a46104c4565b90506001600160a01b0383166109cc5760405162461bcd60e51b81526004016100689061148f565b6001600160a01b038316600090815260018201602052604090205461ffff8116610a6e57610a128460405180606001604052806024815260200161178260249139610db7565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156104bd576000848281518110610a9c57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03908116908716811415610af25760405162461bcd60e51b815260040161006890611610565b610afc8183610dd8565b6001600160e01b03198216600081815260208781526040808320805461ffff60a01b1916600160a01b61ffff8b16021781556001600160a01b038c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b03191617905583610b9e81611706565b94505050508080610bae90611728565b915050610a71565b6000815111610bd75760405162461bcd60e51b8152600401610068906113a0565b6000610be16104c4565b90506001600160a01b03831615610c0a5760405162461bcd60e51b81526004016100689061166d565b60005b8251811015610c89576000838281518110610c3857634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b0316610c748183610dd8565b50508080610c8190611728565b915050610c0d565b50505050565b6001600160a01b038216610cc157805115610cbc5760405162461bcd60e51b8152600401610068906112fd565b610db3565b6000815111610ce25760405162461bcd60e51b815260040161006890611510565b6001600160a01b0382163014610d1457610d148260405180606001604052806028815260200161175a60289139610db7565b600080836001600160a01b031683604051610d2f91906111ce565b600060405180830381855af49150503d8060008114610d6a576040519150601f19603f3d011682016040523d82523d6000602084013e610d6f565b606091505b50909250905081610c8957805115610d9b578060405162461bcd60e51b815260040161006891906112e3565b60405162461bcd60e51b81526004016100689061135a565b5050565b813b8181610c895760405162461bcd60e51b815260040161006891906112e3565b6000610de26104c4565b90506001600160a01b038316610e0a5760405162461bcd60e51b8152600401610068906113eb565b6001600160a01b038316301415610e335760405162461bcd60e51b81526004016100689061156d565b6001600160e01b03198216600090815260208281526040808320546001600160a01b0387168452600180860190935290832054600160a01b90910461ffff169291610e7d916116c3565b9050808214610f85576001600160a01b03851660009081526001840160205260408120805483908110610ec057634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b925082919085908110610f1f57634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b03851660009081526001840160205260409020805480610fbc57634e487b7160e01b600052603160045260246000fd5b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080546001600160b01b0319169055806104bd576002830154600090611028906001906116c3565b6001600160a01b038716600090815260018087016020526040909120015490915061ffff1680821461110357600085600201838154811061107957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546002870180546001600160a01b0390921692508291849081106110b857634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b8460020180548061112457634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b6040805160608082018352600080835260208301529181019190915290565b6001600160a01b03169052565b600081518084526111ba8160208601602086016116da565b601f01601f19169290920160200192915050565b600082516111e08184602087016116da565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b848110156112b457898303607f19018652815180516001600160a01b0316845284810151898501906003811061125457634e487b7160e01b8c52602160045260248cfd5b858701526040918201519185018a9052815190819052908501908a90898601905b8083101561129f5783516001600160e01b0319168252928701926001929092019190870190611275565b50978601979450505090830190600101611210565b50506112c28289018b611195565b87810360408901526112d4818a6111a2565b9b9a5050505050505050505050565b6000602082526112f660208301846111a2565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656040820152651d995c9d195960d21b606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756040820152663a20b1ba34b7b760c91b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b6020808252818101527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374604082015260600190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201526d3a30b1363290333ab731ba34b7b760911b606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6040820152746e207468617420616c72656164792065786973747360581b606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604082015275657373206d757374206265206164647265737328302960501b606082015260800190565b6000828210156116d5576116d5611743565b500390565b60005b838110156116f55781810151838201526020016116dd565b83811115610c895750506000910152565b600061ffff8083168181141561171e5761171e611743565b6001019392505050565b600060001982141561173c5761173c611743565b5060010190565b634e487b7160e01b600052601160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220fd8ac4033fb49697dfb475e058cd7d7702ac0a653d6ea63668d75985ee3266ed64736f6c63430008010033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008d46fd7160940d89da026d59b2e819208e714e820000000000000000000000004f908fa47f10bc2254dae7c74d8b797c1749a8a600000000000000000000000058f64b56b1e15d8c932c51287d814edaa8d6feb9000000000000000000000000ae7df9f59fec446903c64f21a76d039bc81712ef
-----Decoded View---------------
Arg [0] : _contractOwner (address): 0x8D46fd7160940d89dA026D59B2e819208E714E82
Arg [1] : _diamondCutFacet (address): 0x4f908Fa47F10bc2254dae7c74d8B797C1749A8a6
Arg [2] : _diaomondLoupeFacet (address): 0x58f64b56B1e15D8C932c51287d814EDaa8d6feb9
Arg [3] : _ownershipFacet (address): 0xAE7DF9f59FEc446903c64f21a76d039Bc81712ef
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000008d46fd7160940d89da026d59b2e819208e714e82
Arg [1] : 0000000000000000000000004f908fa47f10bc2254dae7c74d8b797c1749a8a6
Arg [2] : 00000000000000000000000058f64b56b1e15d8c932c51287d814edaa8d6feb9
Arg [3] : 000000000000000000000000ae7df9f59fec446903c64f21a76d039bc81712ef
Deployed Bytecode Sourcemap
38389:1437:0:-:0;;;;;39079:44;39317:7;;-1:-1:-1;;;;;;39317:7:0;39287:38;;25198:45;39287:38;;;;;;;:51;25198:45;;-1:-1:-1;;;;;39287:51:0;;39349:64;;;;-1:-1:-1;;;39349:64:0;;;;;;;:::i;:::-;;;;;;;;;39467:14;39464:1;39461;39448:34;39559:1;39556;39540:14;39537:1;39530:5;39523;39510:51;39596:16;39593:1;39590;39575:38;39634:6;39654:68;;;;39773:16;39770:1;39763:27;39654:68;39690:16;39687:1;39680:27;26760:269;26825:25;26853:16;:14;:16::i;:::-;26904;;;;;-1:-1:-1;;;;;26931:28:0;;;-1:-1:-1;;;;;;26931:28:0;;;;;;;26975:46;;26825:44;;-1:-1:-1;26904:16:0;;;;26975:46;;26880:21;;26975:46;26760:269;;;:::o;27610:1477::-;27808:29;;;27835:1;27808:29;;;;;;;;;27772:33;;27808:29;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;27884:15:0;;;27897:1;27884:15;;;;;;;;;27772:65;;-1:-1:-1;27848:33:0;;27884:15;;;;;;;;;;;;-1:-1:-1;27884:15:0;27848:51;;27933:31;;;27910:17;27928:1;27910:20;;;;;;-1:-1:-1;;;27910:20:0;;;;;;;;;-1:-1:-1;;;;;;27910:54:0;;;:20;;;;;;;;;;:54;27984:132;;;;;;;;;-1:-1:-1;;;;;27984:132:0;;;;;;;-1:-1:-1;27984:132:0;;;;28097:17;27984:132;;;27975:3;27979:1;27975:6;;;;;;-1:-1:-1;;;27975:6:0;;;;;;;;;;;;;;;;;;:141;28147:15;;;28160:1;28147:15;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28147:15:0;28127:35;;28196:29;;;28173:17;28191:1;28173:20;;;;;;-1:-1:-1;;;28173:20:0;;;;;;;;;-1:-1:-1;;;;;;28173:52:0;;;:20;;;;;;;;;;;:52;28236:20;;-1:-1:-1;;;28259:45:0;28236:17;;28254:1;;28236:20;;;;-1:-1:-1;;;28236:20:0;;;;;;;;;-1:-1:-1;;;;;;28236:68:0;;;:20;;;;;;;;;;;:68;28315:20;;-1:-1:-1;;;28338:37:0;28315:17;;28333:1;;28315:20;;;;-1:-1:-1;;;28315:20:0;;;;;;;;;-1:-1:-1;;;;;;28315:60:0;;;:20;;;;;;;;;;;:60;28386:20;;-1:-1:-1;;;28409:35:0;28386:17;;28404:1;;28386:20;;;;-1:-1:-1;;;28386:20:0;;;;;;;;;-1:-1:-1;;;;;;28386:58:0;;;:20;;;;;;;;;;;:58;28455:20;;-1:-1:-1;;;28478:34:0;28455:17;;28473:1;;28455:20;;;;-1:-1:-1;;;28455:20:0;;;;;;;;;-1:-1:-1;;;;;;28455:57:0;;;:20;;;;;;;;;;:57;28532:184;;;;;;;;;-1:-1:-1;;;;;28532:184:0;;;;;;;-1:-1:-1;28532:184:0;;;;28687:17;28532:184;;;28523:3;28527:1;28523:6;;;;;;-1:-1:-1;;;28523:6:0;;;;;;;;;;;;;;;;;;:193;28747:15;;;28760:1;28747:15;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28747:15:0;28727:35;;28796:34;;;28773:17;28791:1;28773:20;;;;;;-1:-1:-1;;;28773:20:0;;;;;;;;;-1:-1:-1;;;;;;28773:57:0;;;:20;;;;;;;;;;;:57;28841:20;;-1:-1:-1;;;28864:22:0;28841:17;;28859:1;;28841:20;;;;-1:-1:-1;;;28841:20:0;;;;;;;;;-1:-1:-1;;;;;;28841:45:0;;;:20;;;;;;;;;;:45;28906:131;;;;;;;;;-1:-1:-1;;;;;28906:131:0;;;;;;;-1:-1:-1;28906:131:0;;;;29018:17;28906:131;;;28897:3;28901:1;28897:6;;;;;;-1:-1:-1;;;28897:6:0;;;;;;;;;;;;;;:140;;;;29048:31;29059:3;29072:1;29048:31;;;;;;;;;;;;:10;:31::i;:::-;27610:1477;;;;;:::o;26458:202::-;25198:45;;26608:::o;29143:1086::-;29304:18;29299:817;29337:11;:18;29324:10;:31;29299:817;;;29386:33;29422:11;29434:10;29422:23;;;;;;-1:-1:-1;;;29422:23:0;;;;;;;;;;;;;;;:30;;;29386:66;;29481:30;29471:40;;;;;;-1:-1:-1;;;29471:40:0;;;;;;;;;:6;:40;;;;;;-1:-1:-1;;;29471:40:0;;;;;;;;;;29467:638;;;29532:93;29545:11;29557:10;29545:23;;;;;;-1:-1:-1;;;29545:23:0;;;;;;;;;;;;;;;:36;;;29583:11;29595:10;29583:23;;;;;;-1:-1:-1;;;29583:23:0;;;;;;;;;;;;;;;:41;;;29532:12;:93::i;:::-;29467:638;;;29661:34;29651:6;:44;;;;;;-1:-1:-1;;;29651:44:0;;;;;;;;;;29647:458;;;29716:97;29733:11;29745:10;29733:23;;;;;;-1:-1:-1;;;29733:23:0;;;;;;;;;;;;;;;:36;;;29771:11;29783:10;29771:23;;;;;;-1:-1:-1;;;29771:23:0;;;;;;;;;;;;;;;:41;;;29716:16;:97::i;29647:458::-;29849:33;29839:6;:43;;;;;;-1:-1:-1;;;29839:43:0;;;;;;;;;;29835:270;;;29903:96;29919:11;29931:10;29919:23;;;;;;-1:-1:-1;;;29919:23:0;;;;;;;;;;;;;;;:36;;;29957:11;29969:10;29957:23;;;;;;-1:-1:-1;;;29957:23:0;;;;;;;;;;;;;;;:41;;;29903:15;:96::i;29835:270::-;30040:49;;-1:-1:-1;;;30040:49:0;;;;;;;:::i;29835:270::-;-1:-1:-1;29357:12:0;;;;:::i;:::-;;;;29299:817;;;;30131:41;30142:11;30155:5;30162:9;30131:41;;;;;;;;:::i;:::-;;;;;;;;30183:38;30204:5;30211:9;30183:20;:38::i;:::-;29143:1086;;;:::o;30237:1572::-;30374:1;30346:18;:25;:29;30338:85;;;;-1:-1:-1;;;30338:85:0;;;;;;;:::i;:::-;30434:25;30462:16;:14;:16::i;:::-;30434:44;-1:-1:-1;;;;;;30575:27:0;;30567:84;;;;-1:-1:-1;;;30567:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30695:40:0;;30662:23;30695:40;;;:25;;;:40;;;;;:65;30831:21;;;30827:294;;30869:77;30892:13;30869:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;31032:17;;;:24;;-1:-1:-1;;;;;30961:40:0;;;;;;:25;;;;:40;;;;;;;:61;;:96;;-1:-1:-1;;30961:96:0;;;;;;;;;;;;31072:37;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31072:37:0;;;;;;30827:294;31136:21;31131:671;31175:18;:25;31159:13;:41;31131:671;;;31234:15;31252:18;31271:13;31252:33;;;;;;-1:-1:-1;;;31252:33:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31326:39:0;;31300:23;31326:39;;;;;;;;;;;:52;31252:33;;-1:-1:-1;;;;;;31326:52:0;31401:29;;31393:95;;;;-1:-1:-1;;;31393:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31503:40:0;;;;;;:25;;;;:40;;;;;;;;:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31591:39:0;;;;;;;;;:68;;-1:-1:-1;;;;;;31591:68:0;;;;-1:-1:-1;;;;31674:83:0;-1:-1:-1;;;31674:83:0;;;;;;;;31772:18;31674:83;31772:18;:::i;:::-;;;;31131:671;;31202:15;;;;;:::i;:::-;;;;31131:671;;31817:1589;31958:1;31930:18;:25;:29;31922:85;;;;-1:-1:-1;;;31922:85:0;;;;;;;:::i;:::-;32018:25;32046:16;:14;:16::i;:::-;32018:44;-1:-1:-1;;;;;;32081:27:0;;32073:84;;;;-1:-1:-1;;;32073:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32201:40:0;;32168:23;32201:40;;;:25;;;:40;;;;;:65;32337:21;;;32333:294;;32375:77;32398:13;32375:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;32538:17;;;:24;;-1:-1:-1;;;;;32467:40:0;;;;;;:25;;;;:40;;;;;;;:61;;:96;;-1:-1:-1;;32467:96:0;;;;;;;;;;;;32578:37;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32578:37:0;;;;;;32333:294;32642:21;32637:762;32681:18;:25;32665:13;:41;32637:762;;;32740:15;32758:18;32777:13;32758:33;;;;;;-1:-1:-1;;;32758:33:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32832:39:0;;32806:23;32832:39;;;;;;;;;;;:52;32758:33;;-1:-1:-1;;;;;;32832:52:0;;;;32907:32;;;;;32899:101;;;;-1:-1:-1;;;32899:101:0;;;;;;;:::i;:::-;33015:41;33030:15;33047:8;33015:14;:41::i;:::-;-1:-1:-1;;;;;;33100:39:0;;:29;:39;;;;;;;;;;;:83;;-1:-1:-1;;;;33100:83:0;-1:-1:-1;;;33100:83:0;;;;;;;-1:-1:-1;;;;;33198:40:0;;;;;-1:-1:-1;33198:25:0;;;:40;;;;;:73;;;;;;;;;;;;;;;;;;;;;;;;;33100:83;33198:73;;;;;;;;;;;;;;;;;;;;;33286:39;;;;;;;:68;;-1:-1:-1;;;;;;33286:68:0;;;;33100:83;33369:18;33100:83;33369:18;:::i;:::-;;;;32637:762;;32708:15;;;;;:::i;:::-;;;;32637:762;;33414:748;33554:1;33526:18;:25;:29;33518:85;;;;-1:-1:-1;;;33518:85:0;;;;;;;:::i;:::-;33614:25;33642:16;:14;:16::i;:::-;33614:44;-1:-1:-1;;;;;;33743:27:0;;;33735:94;;;;-1:-1:-1;;;33735:94:0;;;;;;;:::i;:::-;33845:21;33840:315;33884:18;:25;33868:13;:41;33840:315;;;33943:15;33961:18;33980:13;33961:33;;;;;;-1:-1:-1;;;33961:33:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34035:39:0;;34009:23;34035:39;;;;;;;;;;;:52;33961:33;;-1:-1:-1;;;;;;34035:52:0;34102:41;34035:52;33961:33;34102:14;:41::i;:::-;33840:315;;33911:15;;;;;:::i;:::-;;;;33840:315;;;;33414:748;;;:::o;36426:897::-;-1:-1:-1;;;;;36519:19:0;;36515:801;;36563:16;;:21;36555:94;;;;-1:-1:-1;;;36555:94:0;;;;;;;:::i;:::-;36515:801;;;36709:1;36690:9;:16;:20;36682:94;;;;-1:-1:-1;;;36682:94:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36795:22:0;;36812:4;36795:22;36791:136;;36838:73;36861:5;36838:73;;;;;;;;;;;;;;;;;:22;:73::i;:::-;36942:12;36956:18;36978:5;-1:-1:-1;;;;;36978:18:0;36997:9;36978:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36941:66:0;;-1:-1:-1;36941:66:0;-1:-1:-1;37026:16:0;37022:283;;37067:12;;:16;37063:227;;37166:5;37152:21;;-1:-1:-1;;;37152:21:0;;;;;;;;:::i;37063:227::-;37222:48;;-1:-1:-1;;;37222:48:0;;;;;;;:::i;36515:801::-;36426:897;;:::o;37331:268::-;37507:22;;37577:13;37558:17;37550:41;;;;-1:-1:-1;;;37550:41:0;;;;;;;;:::i;34170:2248::-;34255:25;34283:16;:14;:16::i;:::-;34255:44;-1:-1:-1;;;;;;34318:27:0;;34310:95;;;;-1:-1:-1;;;34310:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34502:30:0;;34527:4;34502:30;;34494:89;;;;-1:-1:-1;;;34494:89:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;34696:40:0;;34669:24;34696:40;;;;;;;;;;;:65;-1:-1:-1;;;;;34803:40:0;;;;34871:1;34803:25;;;:40;;;;;;:65;-1:-1:-1;;;34696:65:0;;;;;;34669:24;34803:69;;;:::i;:::-;34772:100;;34976:20;34956:16;:40;34952:391;;-1:-1:-1;;;;;35035:40:0;;35013:19;35035:40;;;:25;;;:40;;;;;:80;;35094:20;;35035:80;;;;-1:-1:-1;;;35035:80:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35130:40:0;;;;:25;;;:40;;;;;;;:76;;35035:80;;;;;;;;;;;;;;-1:-1:-1;35035:80:0;;35130:40;35189:16;;35130:76;;;;-1:-1:-1;;;35130:76:0;;;;;;;;;;;;;;;;;;;;;:91;;;:76;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35236:43:0;;;;;;;;;;;;:95;;-1:-1:-1;;;;35236:95:0;-1:-1:-1;;;35236:95:0;;;;;;;34952:391;-1:-1:-1;;;;;35390:40:0;;;;;;:25;;;:40;;;;;:64;;;;;-1:-1:-1;;;35390:64:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;35390:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35472:40:0;;;;;;;;;;35465:47;;-1:-1:-1;;;;;;35465:47:0;;;35610:25;35606:805;;35779:17;;;:24;35744:32;;35779:28;;35806:1;;35779:28;:::i;:::-;-1:-1:-1;;;;;35853:40:0;;35822:28;35853:40;;;:25;;;;:40;;;;;;:61;;35744:63;;-1:-1:-1;35853:61:0;;35933:48;;;35929:350;;36002:24;36029:2;:17;;36047:24;36029:43;;;;;;-1:-1:-1;;;36029:43:0;;;;;;;;;;;;;;;;;;;36091:17;;;:39;;-1:-1:-1;;;;;36029:43:0;;;;-1:-1:-1;36029:43:0;;36109:20;;36091:39;;;;-1:-1:-1;;;36091:39:0;;;;;;;;;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;36091:58:0;-1:-1:-1;;;;;36091:58:0;;;;;;36168:43;;;;;;-1:-1:-1;36168:25:0;;;:43;;;;;;:64;:95;;-1:-1:-1;;36168:95:0;;;;;;;35929:350;36293:2;:17;;:23;;;;;-1:-1:-1;;;36293:23:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36293:23:0;;;;;-1:-1:-1;;;;;;36293:23:0;;;;;;;;;-1:-1:-1;;;;;36338:40:0;;;;36293:23;36338:25;;;:40;;;;;;;:61;36331:68;;-1:-1:-1;;36331:68:0;;;-1:-1:-1;;34170:2248:0;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:106:1:-;-1:-1:-1;;;;;82:31:1;70:44;;60:60::o;125:259::-;;206:5;200:12;233:6;228:3;221:19;249:63;305:6;298:4;293:3;289:14;282:4;275:5;271:16;249:63;:::i;:::-;366:2;345:15;-1:-1:-1;;341:29:1;332:39;;;;373:4;328:50;;176:208;-1:-1:-1;;176:208:1:o;389:274::-;;556:6;550:13;572:53;618:6;613:3;606:4;598:6;594:17;572:53;:::i;:::-;641:16;;;;;526:137;-1:-1:-1;;526:137:1:o;668:2105::-;963:2;1015:21;;;1085:13;;988:18;;;1107:22;;;668:2105;;963:2;1148:3;;1167:18;;;;1204:4;1250:15;;;1235:31;;1231:40;;1294:15;;;668:2105;1340:1258;1354:6;1351:1;1348:13;1340:1258;;;1419:22;;;-1:-1:-1;;1415:37:1;1403:50;;1476:13;;1563:9;;-1:-1:-1;;;;;1559:35:1;1544:51;;1634:11;;;1628:18;1516:15;;;;1686:1;1669:19;;1659:2;;-1:-1:-1;;;1720:34:1;;1781:4;1778:1;1771:15;1816:4;1727;1803:18;1659:2;1855:15;;;1848:37;1908:4;1953:11;;;1947:18;1985:15;;;1978:27;;;2066:21;;2100:24;;;;2190:23;;;;2237:4;;2146:15;;;;2254:236;2270:8;2265:3;2262:17;2254:236;;;2351:15;;-1:-1:-1;;;;;;2347:42:1;2333:57;;2459:17;;;;2298:1;2289:11;;;;;2416:14;;;;2254:236;;;-1:-1:-1;2576:12:1;;;;2513:5;-1:-1:-1;;;2541:15:1;;;;1376:1;1369:9;1340:1258;;;1344:3;;2607:48;2651:2;2640:9;2636:18;2628:6;2607:48;:::i;:::-;2705:9;2697:6;2693:22;2686:4;2675:9;2671:20;2664:52;2733:34;2760:6;2752;2733:34;:::i;:::-;2725:42;943:1830;-1:-1:-1;;;;;;;;;;;943:1830:1:o;2778:221::-;;2927:2;2916:9;2909:21;2947:46;2989:2;2978:9;2974:18;2966:6;2947:46;:::i;:::-;2939:54;2899:100;-1:-1:-1;;;2899:100:1:o;3004:424::-;3206:2;3188:21;;;3245:2;3225:18;;;3218:30;3284:34;3279:2;3264:18;;3257:62;3355:30;3350:2;3335:18;;3328:58;3418:3;3403:19;;3178:250::o;3433:402::-;3635:2;3617:21;;;3674:2;3654:18;;;3647:30;3713:34;3708:2;3693:18;;3686:62;-1:-1:-1;;;3779:2:1;3764:18;;3757:36;3825:3;3810:19;;3607:228::o;3840:407::-;4042:2;4024:21;;;4081:2;4061:18;;;4054:30;4120:34;4115:2;4100:18;;4093:62;-1:-1:-1;;;4186:2:1;4171:18;;4164:41;4237:3;4222:19;;4014:233::o;4252:419::-;4454:2;4436:21;;;4493:2;4473:18;;;4466:30;4532:34;4527:2;4512:18;;4505:62;4603:25;4598:2;4583:18;;4576:53;4661:3;4646:19;;4426:245::o;4676:403::-;4878:2;4860:21;;;4917:2;4897:18;;;4890:30;4956:34;4951:2;4936:18;;4929:62;-1:-1:-1;;;5022:2:1;5007:18;;5000:37;5069:3;5054:19;;4850:229::o;5084:408::-;5286:2;5268:21;;;5325:2;5305:18;;;5298:30;5364:34;5359:2;5344:18;;5337:62;-1:-1:-1;;;5430:2:1;5415:18;;5408:42;5482:3;5467:19;;5258:234::o;5497:356::-;5699:2;5681:21;;;5718:18;;;5711:30;5777:34;5772:2;5757:18;;5750:62;5844:2;5829:18;;5671:182::o;5858:425::-;6060:2;6042:21;;;6099:2;6079:18;;;6072:30;6138:34;6133:2;6118:18;;6111:62;6209:31;6204:2;6189:18;;6182:59;6273:3;6258:19;;6032:251::o;6288:410::-;6490:2;6472:21;;;6529:2;6509:18;;;6502:30;6568:34;6563:2;6548:18;;6541:62;-1:-1:-1;;;6634:2:1;6619:18;;6612:44;6688:3;6673:19;;6462:236::o;6703:417::-;6905:2;6887:21;;;6944:2;6924:18;;;6917:30;6983:34;6978:2;6963:18;;6956:62;-1:-1:-1;;;7049:2:1;7034:18;;7027:51;7110:3;7095:19;;6877:243::o;7125:420::-;7327:2;7309:21;;;7366:2;7346:18;;;7339:30;7405:34;7400:2;7385:18;;7378:62;7476:26;7471:2;7456:18;;7449:54;7535:3;7520:19;;7299:246::o;7550:418::-;7752:2;7734:21;;;7791:2;7771:18;;;7764:30;7830:34;7825:2;7810:18;;7803:62;-1:-1:-1;;;7896:2:1;7881:18;;7874:52;7958:3;7943:19;;7724:244::o;7973:125::-;;8041:1;8038;8035:8;8032:2;;;8046:18;;:::i;:::-;-1:-1:-1;8083:9:1;;8022:76::o;8103:258::-;8175:1;8185:113;8199:6;8196:1;8193:13;8185:113;;;8275:11;;;8269:18;8256:11;;;8249:39;8221:2;8214:10;8185:113;;;8316:6;8313:1;8310:13;8307:2;;;-1:-1:-1;;8351:1:1;8333:16;;8326:27;8156:205::o;8366:197::-;;8432:6;8473:2;8466:5;8462:14;8500:2;8491:7;8488:15;8485:2;;;8506:18;;:::i;:::-;8555:1;8542:15;;8412:151;-1:-1:-1;;;8412:151:1:o;8568:135::-;;-1:-1:-1;;8628:17:1;;8625:2;;;8648:18;;:::i;:::-;-1:-1:-1;8695:1:1;8684:13;;8615:88::o;8708:127::-;8769:10;8764:3;8760:20;8757:1;8750:31;8800:4;8797:1;8790:15;8824:4;8821:1;8814:15
Swarm Source
ipfs://fd8ac4033fb49697dfb475e058cd7d7702ac0a653d6ea63668d75985ee3266ed
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 29 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.