Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 279 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unlock Nfts | 21357004 | 7 days ago | IN | 0 ETH | 0.00037037 | ||||
Unlock Nfts | 21356982 | 7 days ago | IN | 0 ETH | 0.00036279 | ||||
Unlock Nfts | 21356978 | 7 days ago | IN | 0 ETH | 0.00037103 | ||||
Unlock Nfts | 21356974 | 7 days ago | IN | 0 ETH | 0.00035948 | ||||
Unlock Nfts | 21356972 | 7 days ago | IN | 0 ETH | 0.00033883 | ||||
Unlock Nfts | 21356968 | 7 days ago | IN | 0 ETH | 0.00036929 | ||||
Unlock Nfts | 21356950 | 7 days ago | IN | 0 ETH | 0.00097727 | ||||
Unlock Nfts | 21100173 | 43 days ago | IN | 0 ETH | 0.00020403 | ||||
Unlock Nfts | 21100167 | 43 days ago | IN | 0 ETH | 0.00019473 | ||||
Unlock Nfts | 21100083 | 43 days ago | IN | 0 ETH | 0.00019174 | ||||
Unlock Nfts | 21100074 | 43 days ago | IN | 0 ETH | 0.00021886 | ||||
Unlock Nfts | 20806148 | 84 days ago | IN | 0 ETH | 0.00033943 | ||||
Unlock Nfts | 20431702 | 136 days ago | IN | 0 ETH | 0.00035966 | ||||
Lock Nfts | 20329978 | 151 days ago | IN | 0 ETH | 0.00067135 | ||||
Lock Nfts | 20329971 | 151 days ago | IN | 0 ETH | 0.00071423 | ||||
Unlock Nfts | 20297589 | 155 days ago | IN | 0 ETH | 0.000066 | ||||
Unlock Nfts | 20297578 | 155 days ago | IN | 0 ETH | 0.00005338 | ||||
Unlock Nfts | 20297519 | 155 days ago | IN | 0 ETH | 0.00005246 | ||||
Unlock Nfts | 20111291 | 181 days ago | IN | 0 ETH | 0.00052089 | ||||
Unlock Nfts | 19989504 | 198 days ago | IN | 0 ETH | 0.00088762 | ||||
Unlock Nfts | 19907729 | 210 days ago | IN | 0 ETH | 0.00012414 | ||||
Unlock Nfts | 19907617 | 210 days ago | IN | 0 ETH | 0.00017348 | ||||
Unlock Nfts | 19901269 | 210 days ago | IN | 0 ETH | 0.00009837 | ||||
Unlock Nfts | 19901264 | 210 days ago | IN | 0 ETH | 0.00009744 | ||||
Unlock Nfts | 19889694 | 212 days ago | IN | 0 ETH | 0.00035509 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
XANACentralLockDiamond
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-27 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; /** * @title Contract ownership standard interface * @dev see https://eips.ethereum.org/EIPS/eip-173 */ interface IERC173 { event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @notice get the ERC173 contract owner * @return conract owner */ function owner() external view returns (address); /** * @notice transfer contract ownership to new account * @param account address of new owner */ function transferOwnership(address account) external; } // File @solidstate/contracts/access/[email protected] library OwnableStorage { struct Layout { address owner; } bytes32 internal constant STORAGE_SLOT = keccak256('solidstate.contracts.storage.Ownable'); function layout() internal pure returns (Layout storage l) { bytes32 slot = STORAGE_SLOT; assembly { l.slot := slot } } function setOwner(Layout storage l, address owner) internal { l.owner = owner; } } // File @solidstate/contracts/access/[email protected] abstract contract OwnableInternal { using OwnableStorage for OwnableStorage.Layout; modifier onlyOwner() { require( msg.sender == OwnableStorage.layout().owner, 'Ownable: sender must be owner' ); _; } } // File @solidstate/contracts/access/[email protected] /** * @title Ownership access control based on ERC173 */ abstract contract Ownable is IERC173, OwnableInternal { using OwnableStorage for OwnableStorage.Layout; /** * @inheritdoc IERC173 */ function owner() public view virtual returns (address) { return OwnableStorage.layout().owner; } /** * @inheritdoc IERC173 */ function transferOwnership(address account) public virtual onlyOwner { OwnableStorage.layout().setOwner(account); emit OwnershipTransferred(msg.sender, account); } } // File @solidstate/contracts/access/[email protected] library SafeOwnableStorage { struct Layout { address nomineeOwner; } bytes32 internal constant STORAGE_SLOT = keccak256('solidstate.contracts.storage.SafeOwnable'); function layout() internal pure returns (Layout storage l) { bytes32 slot = STORAGE_SLOT; assembly { l.slot := slot } } function setNomineeOwner(Layout storage l, address nomineeOwner) internal { l.nomineeOwner = nomineeOwner; } } // File @solidstate/contracts/access/[email protected] abstract contract SafeOwnableInternal { using SafeOwnableStorage for SafeOwnableStorage.Layout; modifier onlyNomineeOwner() { require( msg.sender == SafeOwnableStorage.layout().nomineeOwner, 'SafeOwnable: sender must be nominee owner' ); _; } } // File @solidstate/contracts/access/[email protected] /** * @title Ownership access control based on ERC173 with ownership transfer safety check */ abstract contract SafeOwnable is Ownable, SafeOwnableInternal { using OwnableStorage for OwnableStorage.Layout; using SafeOwnableStorage for SafeOwnableStorage.Layout; function nomineeOwner() public view virtual returns (address) { return SafeOwnableStorage.layout().nomineeOwner; } /** * @inheritdoc Ownable * @dev ownership transfer must be accepted by beneficiary before transfer is complete */ function transferOwnership(address account) public virtual override onlyOwner { SafeOwnableStorage.layout().setNomineeOwner(account); } /** * @notice accept transfer of contract ownership */ function acceptOwnership() public virtual onlyNomineeOwner { OwnableStorage.Layout storage l = OwnableStorage.layout(); emit OwnershipTransferred(l.owner, msg.sender); l.setOwner(msg.sender); SafeOwnableStorage.layout().setNomineeOwner(address(0)); } } // File @solidstate/contracts/introspection/[email protected] library ERC165Storage { struct Layout { mapping(bytes4 => bool) supportedInterfaces; } bytes32 internal constant STORAGE_SLOT = keccak256('solidstate.contracts.storage.ERC165'); function layout() internal pure returns (Layout storage l) { bytes32 slot = STORAGE_SLOT; assembly { l.slot := slot } } function isSupportedInterface(Layout storage l, bytes4 interfaceId) internal view returns (bool) { return l.supportedInterfaces[interfaceId]; } function setSupportedInterface( Layout storage l, bytes4 interfaceId, bool status ) internal { require(interfaceId != 0xffffffff, 'ERC165: invalid interface id'); l.supportedInterfaces[interfaceId] = status; } } // File @solidstate/contracts/introspection/[email protected] /** * @title ERC165 interface registration interface * @dev see https://eips.ethereum.org/EIPS/eip-165 */ interface IERC165 { /** * @notice query whether contract has registered support for given interface * @param interfaceId interface id * @return bool whether interface is supported */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @solidstate/contracts/introspection/[email protected] /** * @title ERC165 implementation */ abstract contract ERC165 is IERC165 { using ERC165Storage for ERC165Storage.Layout; /** * @inheritdoc IERC165 */ function supportsInterface(bytes4 interfaceId) public view returns (bool) { return ERC165Storage.layout().isSupportedInterface(interfaceId); } } // File @solidstate/contracts/proxy/diamond/[email protected] /** * @title Diamond proxy upgrade interface * @dev see https://eips.ethereum.org/EIPS/eip-2535 */ interface IDiamondCuttable { enum FacetCutAction { ADD, REPLACE, REMOVE } event DiamondCut(FacetCut[] facetCuts, address target, bytes data); struct FacetCut { address target; FacetCutAction action; bytes4[] selectors; } /** * @notice update diamond facets and optionally execute arbitrary initialization function * @param facetCuts facet addresses, actions, and function selectors * @param target initialization function target * @param data initialization function call data */ function diamondCut( FacetCut[] calldata facetCuts, address target, bytes calldata data ) external; } // File @solidstate/contracts/utils/[email protected] /** * @title utility functions for uint256 operations * @dev derived from https://github.com/OpenZeppelin/openzeppelin-contracts/ (MIT license) */ library UintUtils { bytes16 private constant HEX_SYMBOLS = '0123456789abcdef'; function toString(uint256 value) internal pure returns (string memory) { 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); } function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return '0x00'; } uint256 length = 0; for (uint256 temp = value; temp != 0; temp >>= 8) { unchecked { length++; } } return toHexString(value, 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'; unchecked { for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = HEX_SYMBOLS[value & 0xf]; value >>= 4; } } require(value == 0, 'UintUtils: hex length insufficient'); return string(buffer); } } // File @solidstate/contracts/utils/[email protected] library AddressUtils { using UintUtils for uint256; function toString(address account) internal pure returns (string memory) { return uint256(uint160(account)).toHexString(20); } function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable account, uint256 amount) internal { (bool success, ) = account.call{ value: amount }(''); require(success, 'AddressUtils: failed to send value'); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, 'AddressUtils: failed low-level call'); } function functionCall( address target, bytes memory data, string memory error ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, error); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, 'AddressUtils: failed low-level call with value' ); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory error ) internal returns (bytes memory) { require( address(this).balance >= value, 'AddressUtils: insufficient balance for call' ); return _functionCallWithValue(target, data, value, error); } function _functionCallWithValue( address target, bytes memory data, uint256 value, string memory error ) private returns (bytes memory) { require( isContract(target), 'AddressUtils: function call to non-contract' ); (bool success, bytes memory returnData) = target.call{ value: value }( data ); if (success) { return returnData; } else if (returnData.length > 0) { assembly { let returnData_size := mload(returnData) revert(add(32, returnData), returnData_size) } } else { revert(error); } } } // File @solidstate/contracts/proxy/diamond/[email protected] /** * @dev derived from https://github.com/mudgen/diamond-2 (MIT license) */ library DiamondBaseStorage { using AddressUtils for address; using DiamondBaseStorage for DiamondBaseStorage.Layout; struct Layout { // function selector => (facet address, selector slot position) mapping(bytes4 => bytes32) facets; // total number of selectors registered uint16 selectorCount; // array of selector slots with 8 selectors per slot mapping(uint256 => bytes32) selectorSlots; address fallbackAddress; } bytes32 constant CLEAR_ADDRESS_MASK = bytes32(uint256(0xffffffffffffffffffffffff)); bytes32 constant CLEAR_SELECTOR_MASK = bytes32(uint256(0xffffffff << 224)); bytes32 internal constant STORAGE_SLOT = keccak256('solidstate.contracts.storage.DiamondBase'); event DiamondCut( IDiamondCuttable.FacetCut[] facetCuts, address target, bytes data ); function layout() internal pure returns (Layout storage l) { bytes32 slot = STORAGE_SLOT; assembly { l.slot := slot } } /** * @notice update functions callable on Diamond proxy * @param l storage layout * @param facetCuts array of structured Diamond facet update data * @param target optional recipient of initialization delegatecall * @param data optional initialization call data */ function diamondCut( Layout storage l, IDiamondCuttable.FacetCut[] memory facetCuts, address target, bytes memory data ) internal { unchecked { uint256 originalSelectorCount = l.selectorCount; uint256 selectorCount = originalSelectorCount; bytes32 selectorSlot; // Check if last selector slot is not full if (selectorCount & 7 > 0) { // get last selectorSlot selectorSlot = l.selectorSlots[selectorCount >> 3]; } for (uint256 i; i < facetCuts.length; i++) { IDiamondCuttable.FacetCut memory facetCut = facetCuts[i]; IDiamondCuttable.FacetCutAction action = facetCut.action; require( facetCut.selectors.length > 0, 'DiamondBase: no selectors specified' ); if (action == IDiamondCuttable.FacetCutAction.ADD) { (selectorCount, selectorSlot) = l.addFacetSelectors( selectorCount, selectorSlot, facetCut ); } else if (action == IDiamondCuttable.FacetCutAction.REPLACE) { l.replaceFacetSelectors(facetCut); } else if (action == IDiamondCuttable.FacetCutAction.REMOVE) { (selectorCount, selectorSlot) = l.removeFacetSelectors( selectorCount, selectorSlot, facetCut ); } } if (selectorCount != originalSelectorCount) { l.selectorCount = uint16(selectorCount); } // If last selector slot is not full if (selectorCount & 7 > 0) { l.selectorSlots[selectorCount >> 3] = selectorSlot; } emit DiamondCut(facetCuts, target, data); initialize(target, data); } } function addFacetSelectors( Layout storage l, uint256 selectorCount, bytes32 selectorSlot, IDiamondCuttable.FacetCut memory facetCut ) internal returns (uint256, bytes32) { unchecked { require( facetCut.target == address(this) || facetCut.target.isContract(), 'DiamondBase: ADD target has no code' ); for (uint256 i; i < facetCut.selectors.length; i++) { bytes4 selector = facetCut.selectors[i]; bytes32 oldFacet = l.facets[selector]; require( address(bytes20(oldFacet)) == address(0), 'DiamondBase: selector already added' ); // add facet for selector l.facets[selector] = bytes20(facetCut.target) | bytes32(selectorCount); uint256 selectorInSlotPosition = (selectorCount & 7) << 5; // clear selector position in slot and add selector selectorSlot = (selectorSlot & ~(CLEAR_SELECTOR_MASK >> selectorInSlotPosition)) | (bytes32(selector) >> selectorInSlotPosition); // if slot is full then write it to storage if (selectorInSlotPosition == 224) { l.selectorSlots[selectorCount >> 3] = selectorSlot; selectorSlot = 0; } selectorCount++; } return (selectorCount, selectorSlot); } } function removeFacetSelectors( Layout storage l, uint256 selectorCount, bytes32 selectorSlot, IDiamondCuttable.FacetCut memory facetCut ) internal returns (uint256, bytes32) { unchecked { require( facetCut.target == address(0), 'DiamondBase: REMOVE target must be zero address' ); uint256 selectorSlotCount = selectorCount >> 3; uint256 selectorInSlotIndex = selectorCount & 7; for (uint256 i; i < facetCut.selectors.length; i++) { bytes4 selector = facetCut.selectors[i]; bytes32 oldFacet = l.facets[selector]; require( address(bytes20(oldFacet)) != address(0), 'DiamondBase: selector not found' ); require( address(bytes20(oldFacet)) != address(this), 'DiamondBase: selector is immutable' ); if (selectorSlot == 0) { selectorSlotCount--; selectorSlot = l.selectorSlots[selectorSlotCount]; selectorInSlotIndex = 7; } else { selectorInSlotIndex--; } bytes4 lastSelector; uint256 oldSelectorsSlotCount; uint256 oldSelectorInSlotPosition; // adding a block here prevents stack too deep error { // replace selector with last selector in l.facets lastSelector = bytes4( selectorSlot << (selectorInSlotIndex << 5) ); if (lastSelector != selector) { // update last selector slot position info l.facets[lastSelector] = (oldFacet & CLEAR_ADDRESS_MASK) | bytes20(l.facets[lastSelector]); } delete l.facets[selector]; uint256 oldSelectorCount = uint16(uint256(oldFacet)); oldSelectorsSlotCount = oldSelectorCount >> 3; oldSelectorInSlotPosition = (oldSelectorCount & 7) << 5; } if (oldSelectorsSlotCount != selectorSlotCount) { bytes32 oldSelectorSlot = l.selectorSlots[ oldSelectorsSlotCount ]; // clears the selector we are deleting and puts the last selector in its place. oldSelectorSlot = (oldSelectorSlot & ~(CLEAR_SELECTOR_MASK >> oldSelectorInSlotPosition)) | (bytes32(lastSelector) >> oldSelectorInSlotPosition); // update storage with the modified slot l.selectorSlots[oldSelectorsSlotCount] = oldSelectorSlot; } else { // clears the selector we are deleting and puts the last selector in its place. selectorSlot = (selectorSlot & ~(CLEAR_SELECTOR_MASK >> oldSelectorInSlotPosition)) | (bytes32(lastSelector) >> oldSelectorInSlotPosition); } if (selectorInSlotIndex == 0) { delete l.selectorSlots[selectorSlotCount]; selectorSlot = 0; } } selectorCount = (selectorSlotCount << 3) | selectorInSlotIndex; return (selectorCount, selectorSlot); } } function replaceFacetSelectors( Layout storage l, IDiamondCuttable.FacetCut memory facetCut ) internal { unchecked { require( facetCut.target.isContract(), 'DiamondBase: REPLACE target has no code' ); for (uint256 i; i < facetCut.selectors.length; i++) { bytes4 selector = facetCut.selectors[i]; bytes32 oldFacet = l.facets[selector]; address oldFacetAddress = address(bytes20(oldFacet)); require( oldFacetAddress != address(0), 'DiamondBase: selector not found' ); require( oldFacetAddress != address(this), 'DiamondBase: selector is immutable' ); require( oldFacetAddress != facetCut.target, 'DiamondBase: REPLACE target is identical' ); // replace old facet address l.facets[selector] = (oldFacet & CLEAR_ADDRESS_MASK) | bytes20(facetCut.target); } } } function initialize(address target, bytes memory data) private { require( (target == address(0)) == (data.length == 0), 'DiamondBase: invalid initialization parameters' ); if (target != address(0)) { if (target != address(this)) { require( target.isContract(), 'DiamondBase: initialization target has no code' ); } (bool success, ) = target.delegatecall(data); if (!success) { assembly { returndatacopy(0, 0, returndatasize()) revert(0, returndatasize()) } } } } } // File @solidstate/contracts/proxy/diamond/[email protected] /** * @title Diamond proxy introspection interface * @dev see https://eips.ethereum.org/EIPS/eip-2535 */ interface IDiamondLoupe { struct Facet { address target; bytes4[] selectors; } /** * @notice get all facets and their selectors * @return diamondFacets array of structured facet data */ function facets() external view returns (Facet[] memory diamondFacets); /** * @notice get all selectors for given facet address * @param facet address of facet to query * @return selectors array of function selectors */ function facetFunctionSelectors(address facet) external view returns (bytes4[] memory selectors); /** * @notice get addresses of all facets used by diamond * @return addresses array of facet addresses */ function facetAddresses() external view returns (address[] memory addresses); /** * @notice get the address of the facet associated with given selector * @param selector function selector to query * @return facet facet address (zero address if not found) */ function facetAddress(bytes4 selector) external view returns (address facet); } // File @solidstate/contracts/proxy/[email protected] /** * @title Base proxy contract */ abstract contract Proxy { using AddressUtils for address; /** * @notice delegate all calls to implementation contract * @dev reverts if implementation address contains no code, for compatibility with metamorphic contracts * @dev memory location in use by assembly may be unsafe in other contexts */ fallback() external payable virtual { address implementation = _getImplementation(); require( implementation.isContract(), 'Proxy: implementation must be contract' ); assembly { calldatacopy(0, 0, calldatasize()) let result := delegatecall( gas(), implementation, 0, calldatasize(), 0, 0 ) returndatacopy(0, 0, returndatasize()) switch result case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } /** * @notice get logic implementation address * @return implementation address */ function _getImplementation() internal virtual returns (address); } // File @solidstate/contracts/proxy/diamond/[email protected] /** * @title EIP-2535 "Diamond" proxy base contract * @dev see https://eips.ethereum.org/EIPS/eip-2535 */ abstract contract DiamondBase is Proxy { /** * @inheritdoc Proxy */ function _getImplementation() internal view override returns (address) { // inline storage layout retrieval uses less gas DiamondBaseStorage.Layout storage l; bytes32 slot = DiamondBaseStorage.STORAGE_SLOT; assembly { l.slot := slot } address implementation = address(bytes20(l.facets[msg.sig])); if (implementation == address(0)) { implementation = l.fallbackAddress; require( implementation != address(0), 'DiamondBase: no facet found for function signature' ); } return implementation; } } // File @solidstate/contracts/proxy/diamond/[email protected] /** * @title EIP-2535 "Diamond" proxy update contract */ abstract contract DiamondCuttable is IDiamondCuttable, OwnableInternal { using DiamondBaseStorage for DiamondBaseStorage.Layout; /** * @notice update functions callable on Diamond proxy * @param facetCuts array of structured Diamond facet update data * @param target optional recipient of initialization delegatecall * @param data optional initialization call data */ function diamondCut( FacetCut[] calldata facetCuts, address target, bytes calldata data ) external onlyOwner { DiamondBaseStorage.layout().diamondCut(facetCuts, target, data); } } // File @solidstate/contracts/proxy/diamond/[email protected] /** * @title EIP-2535 "Diamond" proxy introspection contract * @dev derived from https://github.com/mudgen/diamond-2 (MIT license) */ abstract contract DiamondLoupe is IDiamondLoupe { /** * @inheritdoc IDiamondLoupe */ function facets() external view returns (Facet[] memory diamondFacets) { DiamondBaseStorage.Layout storage l = DiamondBaseStorage.layout(); diamondFacets = new Facet[](l.selectorCount); uint8[] memory numFacetSelectors = new uint8[](l.selectorCount); uint256 numFacets; uint256 selectorIndex; // loop through function selectors for (uint256 slotIndex; selectorIndex < l.selectorCount; slotIndex++) { bytes32 slot = l.selectorSlots[slotIndex]; for ( uint256 selectorSlotIndex; selectorSlotIndex < 8; selectorSlotIndex++ ) { selectorIndex++; if (selectorIndex > l.selectorCount) { break; } bytes4 selector = bytes4(slot << (selectorSlotIndex << 5)); address facet = address(bytes20(l.facets[selector])); bool continueLoop; for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) { if (diamondFacets[facetIndex].target == facet) { diamondFacets[facetIndex].selectors[ numFacetSelectors[facetIndex] ] = selector; // probably will never have more than 256 functions from one facet contract require(numFacetSelectors[facetIndex] < 255); numFacetSelectors[facetIndex]++; continueLoop = true; break; } } if (continueLoop) { continue; } diamondFacets[numFacets].target = facet; diamondFacets[numFacets].selectors = new bytes4[]( l.selectorCount ); diamondFacets[numFacets].selectors[0] = selector; numFacetSelectors[numFacets] = 1; numFacets++; } } for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) { uint256 numSelectors = numFacetSelectors[facetIndex]; bytes4[] memory selectors = diamondFacets[facetIndex].selectors; // setting the number of selectors assembly { mstore(selectors, numSelectors) } } // setting the number of facets assembly { mstore(diamondFacets, numFacets) } } /** * @inheritdoc IDiamondLoupe */ function facetFunctionSelectors(address facet) external view returns (bytes4[] memory selectors) { DiamondBaseStorage.Layout storage l = DiamondBaseStorage.layout(); selectors = new bytes4[](l.selectorCount); uint256 numSelectors; uint256 selectorIndex; // loop through function selectors for (uint256 slotIndex; selectorIndex < l.selectorCount; slotIndex++) { bytes32 slot = l.selectorSlots[slotIndex]; for ( uint256 selectorSlotIndex; selectorSlotIndex < 8; selectorSlotIndex++ ) { selectorIndex++; if (selectorIndex > l.selectorCount) { break; } bytes4 selector = bytes4(slot << (selectorSlotIndex << 5)); if (facet == address(bytes20(l.facets[selector]))) { selectors[numSelectors] = selector; numSelectors++; } } } // set the number of selectors in the array assembly { mstore(selectors, numSelectors) } } /** * @inheritdoc IDiamondLoupe */ function facetAddresses() external view returns (address[] memory addresses) { DiamondBaseStorage.Layout storage l = DiamondBaseStorage.layout(); addresses = new address[](l.selectorCount); uint256 numFacets; uint256 selectorIndex; for (uint256 slotIndex; selectorIndex < l.selectorCount; slotIndex++) { bytes32 slot = l.selectorSlots[slotIndex]; for ( uint256 selectorSlotIndex; selectorSlotIndex < 8; selectorSlotIndex++ ) { selectorIndex++; if (selectorIndex > l.selectorCount) { break; } bytes4 selector = bytes4(slot << (selectorSlotIndex << 5)); address facet = address(bytes20(l.facets[selector])); bool continueLoop; for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) { if (facet == addresses[facetIndex]) { continueLoop = true; break; } } if (continueLoop) { continue; } addresses[numFacets] = facet; numFacets++; } } // set the number of facet addresses in the array assembly { mstore(addresses, numFacets) } } /** * @inheritdoc IDiamondLoupe */ function facetAddress(bytes4 selector) external view returns (address facet) { facet = address(bytes20(DiamondBaseStorage.layout().facets[selector])); } } // File @solidstate/contracts/proxy/diamond/[email protected] /** * @notice SolidState "Diamond" proxy reference implementation */ abstract contract Diamond is DiamondBase, DiamondCuttable, DiamondLoupe, SafeOwnable, ERC165 { using DiamondBaseStorage for DiamondBaseStorage.Layout; using ERC165Storage for ERC165Storage.Layout; using OwnableStorage for OwnableStorage.Layout; constructor() { ERC165Storage.Layout storage erc165 = ERC165Storage.layout(); bytes4[] memory selectors = new bytes4[](12); // register DiamondCuttable selectors[0] = IDiamondCuttable.diamondCut.selector; erc165.setSupportedInterface(type(IDiamondCuttable).interfaceId, true); // register DiamondLoupe selectors[1] = IDiamondLoupe.facets.selector; selectors[2] = IDiamondLoupe.facetFunctionSelectors.selector; selectors[3] = IDiamondLoupe.facetAddresses.selector; selectors[4] = IDiamondLoupe.facetAddress.selector; erc165.setSupportedInterface(type(IDiamondLoupe).interfaceId, true); // register ERC165 selectors[5] = IERC165.supportsInterface.selector; erc165.setSupportedInterface(type(IERC165).interfaceId, true); // register SafeOwnable selectors[6] = Ownable.owner.selector; selectors[7] = SafeOwnable.nomineeOwner.selector; selectors[8] = SafeOwnable.transferOwnership.selector; selectors[9] = SafeOwnable.acceptOwnership.selector; erc165.setSupportedInterface(type(IERC173).interfaceId, true); // register Diamond selectors[10] = Diamond.getFallbackAddress.selector; selectors[11] = Diamond.setFallbackAddress.selector; // diamond cut FacetCut[] memory facetCuts = new FacetCut[](1); facetCuts[0] = FacetCut({ target: address(this), action: IDiamondCuttable.FacetCutAction.ADD, selectors: selectors }); DiamondBaseStorage.layout().diamondCut(facetCuts, address(0), ''); // set owner OwnableStorage.layout().setOwner(msg.sender); } receive() external payable {} /** * @notice get the address of the fallback contract * @return fallback address */ function getFallbackAddress() external view returns (address) { return DiamondBaseStorage.layout().fallbackAddress; } /** * @notice set the address of the fallback contract * @param fallbackAddress fallback address */ function setFallbackAddress(address fallbackAddress) external onlyOwner { DiamondBaseStorage.layout().fallbackAddress = fallbackAddress; } } contract XANACentralLockDiamond is Diamond {}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"enum IDiamondCuttable.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCuttable.FacetCut[]","name":"facetCuts","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"DiamondCut","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"enum IDiamondCuttable.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct IDiamondCuttable.FacetCut[]","name":"facetCuts","type":"tuple[]"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"diamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"facetAddress","outputs":[{"internalType":"address","name":"facet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facetAddresses","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"facet","type":"address"}],"name":"facetFunctionSelectors","outputs":[{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facets","outputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct IDiamondLoupe.Facet[]","name":"diamondFacets","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFallbackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nomineeOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fallbackAddress","type":"address"}],"name":"setFallbackAddress","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":[{"internalType":"address","name":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506000620000296200048160201b62000d831760201c565b60408051600c8082526101a08201909252919250600091906020820161018080368337019050509050631f931c1c60e01b816000815181106200007057620000706200103a565b6001600160e01b0319909216602092830291909101820152620000aa9083906307e4c70760e21b9060019062000da7620004a5821b17901c565b637a0ed62760e01b81600181518110620000c857620000c86200103a565b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b90829060029081106200010257620001026200103a565b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b90829060039081106200013c576200013c6200103a565b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b90829060049081106200017657620001766200103a565b6001600160e01b0319909216602092830291909101820152620001b09083906348e2b09360e01b9060019062000da7620004a5821b17901c565b6301ffc9a760e01b81600581518110620001ce57620001ce6200103a565b6001600160e01b0319909216602092830291909101820152620002089083906301ffc9a760e01b9060019062000da7620004a5821b17901c565b638da5cb5b60e01b816006815181106200022657620002266200103a565b6001600160e01b031990921660209283029190910190910152805163455a8a8560e11b90829060079081106200026057620002606200103a565b6001600160e01b031990921660209283029190910190910152805163f2fde38b60e01b90829060089081106200029a576200029a6200103a565b6001600160e01b03199092166020928302919091019091015280516379ba509760e01b9082906009908110620002d457620002d46200103a565b6001600160e01b03199092166020928302919091018201526200030e9083906307f5828d60e41b9060019062000da7620004a5821b17901c565b632c40805960e01b81600a815181106200032c576200032c6200103a565b6001600160e01b0319909216602092830291909101909101528051639142376560e01b908290600b9081106200036657620003666200103a565b6001600160e01b03199290921660209283029190910190910152604080516001808252818301909252600091816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816200039757905050604080516060810190915230815290915060208101600081526020018381525081600081518110620003fd57620003fd6200103a565b60200260200101819052506200044a81600060405180602001604052806000815250620004346200053360201b62000e2f1760201c565b6200055760201b62000e5317909392919060201c565b6200047833620004646200078360201b6200102f1760201c565b620007a760201b620010531790919060201c565b505050620011df565b7f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590565b6001600160e01b03198083169003620005055760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e746572666163652069640000000060448201526064015b60405180910390fd5b6001600160e01b03199190911660009081526020929092526040909120805460ff1916911515919091179055565b7f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9390565b600184015461ffff811690819060009060071615620005885750600381901c60009081526002870160205260409020545b60005b8651811015620006f1576000878281518110620005ac57620005ac6200103a565b60200260200101519050600081602001519050600082604001515111620006225760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a206e6f2073656c6563746f7273207370656369666044820152621a595960ea1b6064820152608401620004fc565b600081600281111562000639576200063962001050565b0362000668576200065d8585848d620007c460201b6200107017909392919060201c565b9095509350620006e6565b60018160028111156200067f576200067f62001050565b03620006a5576200069f828b6200099660201b620012231790919060201c565b620006e6565b6002816002811115620006bc57620006bc62001050565b03620006e657620006e08585848d62000bd760201b6200141b17909392919060201c565b90955093505b50506001016200058b565b508282146200070e5760018701805461ffff191661ffff84161790555b60078216156200073157600382901c600090815260028801602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738686866040516200076693929190620010ba565b60405180910390a16200077a858562000ea5565b50505050505050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f67168046090565b81546001600160a01b0319166001600160a01b0391909116179055565b805160009081906001600160a01b03163014806200080057506200080083600001516001600160a01b03166200103460201b620003a41760201c565b6200085a5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a204144442074617267657420686173206e6f20636044820152626f646560e81b6064820152608401620004fc565b60005b83604001515181101562000989576000846040015182815181106200088657620008866200103a565b6020908102919091018101516001600160e01b031981166000908152918a9052604090912054909150606081901c156200090f5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a2073656c6563746f7220616c726561647920616460448201526219195960ea1b6064820152608401620004fc565b85516001600160e01b0319838116600081815260208d90526040902060609390931b6001600160601b0319168b1790925560058a901b60e090811692831c91831c199990991617978190036200097957600389901c600090815260028b0160205260408120989098555b505050600195860195016200085d565b5093959294509192505050565b620009b981600001516001600160a01b03166200103460201b620003a41760201c565b62000a175760405162461bcd60e51b815260206004820152602760248201527f4469616d6f6e64426173653a205245504c4143452074617267657420686173206044820152666e6f20636f646560c81b6064820152608401620004fc565b60005b81604001515181101562000bd25760008260400151828151811062000a435762000a436200103a565b6020908102919091018101516001600160e01b03198116600090815291869052604090912054909150606081901c8062000ac05760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e64006044820152606401620004fc565b306001600160a01b0382160362000b145760405162461bcd60e51b815260206004820152602260248201526000805160206200310e8339815191526044820152616c6560f01b6064820152608401620004fc565b84600001516001600160a01b0316816001600160a01b03160362000b8c5760405162461bcd60e51b815260206004820152602860248201527f4469616d6f6e64426173653a205245504c41434520746172676574206973206960448201526719195b9d1a58d85b60c21b6064820152608401620004fc565b5083516001600160e01b031992909216600090815260208690526040902060609290921b6001600160601b0319166001600160601b039190911617905560010162000a1a565b505050565b805160009081906001600160a01b03161562000c4e5760405162461bcd60e51b815260206004820152602f60248201527f4469616d6f6e64426173653a2052454d4f564520746172676574206d7573742060448201526e6265207a65726f206164647265737360881b6064820152608401620004fc565b600385901c6007861660005b85604001515181101562000e915760008660400151828151811062000c835762000c836200103a565b6020908102919091018101516001600160e01b031981166000908152918c9052604090912054909150606081901c62000cff5760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e64006044820152606401620004fc565b30606082901c0362000d4e5760405162461bcd60e51b815260206004820152602260248201526000805160206200310e8339815191526044820152616c6560f01b6064820152608401620004fc565b600089900362000d7c57600019909401600081815260028c0160205260409020549850936007935062000d84565b600019909301925b600584901b89901b6000806001600160e01b03198084169086161462000dd7576001600160e01b03198316600090815260208f90526040902080546001600160601b0319166001600160601b0386161790555b50506001600160e01b03198316600090815260208d90526040812055611fff600383901c1660e0600584901b1687821462000e3c57600082815260028f016020526040902080546001600160e01b031980841c19909116908516831c17905562000e60565b80836001600160e01b031916901c816001600160e01b031960001b901c198d16179b505b8660000362000e7f57600088815260028f01602052604081208190559b505b50506001909301925062000c5a915050565b5060039190911b1796939550929350505050565b8051156001600160a01b038316151462000f195760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e76616c696420696e697469616c697a617460448201526d696f6e20706172616d657465727360901b6064820152608401620004fc565b6001600160a01b0382161562001030576001600160a01b038216301462000fbe5762000f59826001600160a01b03166200103460201b620003a41760201c565b62000fbe5760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e697469616c697a6174696f6e207461726760448201526d657420686173206e6f20636f646560901b6064820152608401620004fc565b6000826001600160a01b03168260405162000fda9190620011c1565b600060405180830381855af49150503d806000811462001017576040519150601f19603f3d011682016040523d82523d6000602084013e6200101c565b606091505b505090508062000bd2573d6000803e3d6000fd5b5050565b3b151590565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b60005b838110156200108357818101518382015260200162001069565b50506000910152565b60008151808452620010a681602086016020860162001066565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156200118f57898403607f19018652815180516001600160a01b031685528381015189860190600381106200112b57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015620011795783516001600160e01b03191682529286019260019290920191908601906200114d565b50978501979550505090820190600101620010e3565b50506001600160a01b038a16908801528681036040880152620011b381896200108c565b9a9950505050505050505050565b60008251620011d581846020870162001066565b9190910192915050565b611f1f80620011ef6000396000f3fe6080604052600436106100ab5760003560e01c80638ab5150a116100645780638ab5150a1461022a5780638da5cb5b1461023f5780639142376514610254578063adfca15e14610274578063cdffacc6146102a1578063f2fde38b146102c1576100b2565b806301ffc9a71461014f5780631f931c1c146101845780632c408059146101a457806352ef6b2c146101d157806379ba5097146101f35780637a0ed62714610208576100b2565b366100b257005b60006100bc6102e1565b90506001600160a01b0381163b6101295760405162461bcd60e51b815260206004820152602660248201527f50726f78793a20696d706c656d656e746174696f6e206d75737420626520636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610148573d6000f35b3d6000fd5b005b34801561015b57600080fd5b5061016f61016a366004611840565b6103aa565b60405190151581526020015b60405180910390f35b34801561019057600080fd5b5061014d61019f3660046118bb565b6103df565b3480156101b057600080fd5b506101b961046c565b6040516001600160a01b03909116815260200161017b565b3480156101dd57600080fd5b506101e6610488565b60405161017b919061196d565b3480156101ff57600080fd5b5061014d61062b565b34801561021457600080fd5b5061021d610712565b60405161017b91906119ff565b34801561023657600080fd5b506101b9610b3a565b34801561024b57600080fd5b506101b9610b5b565b34801561026057600080fd5b5061014d61026f366004611a7c565b610b65565b34801561028057600080fd5b5061029461028f366004611a7c565b610bc2565b60405161017b9190611a97565b3480156102ad57600080fd5b506101b96102bc366004611840565b610d0e565b3480156102cd57600080fd5b5061014d6102dc366004611a7c565b610d3b565b600080356001600160e01b03191681527f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9360208190526040822054819060601c8061039d575060038201546001600160a01b03168061039d5760405162461bcd60e51b815260206004820152603260248201527f4469616d6f6e64426173653a206e6f20666163657420666f756e6420666f722060448201527166756e6374696f6e207369676e617475726560701b6064820152608401610120565b9392505050565b3b151590565b60006103d9826103b8610d83565b906001600160e01b0319166000908152602091909152604090205460ff1690565b92915050565b6103e761102f565b546001600160a01b0316331461040f5760405162461bcd60e51b815260040161012090611ad9565b61046561041c8587611ba4565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061045d9250610e2f915050565b929190610e53565b5050505050565b6000610476610e2f565b600301546001600160a01b0316919050565b60606000610494610e2f565b600181015490915061ffff1667ffffffffffffffff8111156104b8576104b8611b10565b6040519080825280602002602001820160405280156104e1578160200160208202803683370190505b50915060008060005b600184015461ffff16821015610623576000818152600285016020526040812054905b600881101561060e578361052081611cee565b600188015490955061ffff168511905061060e57600581901b82901b6001600160e01b0319811660009081526020889052604081205460601c90805b888110156105b1578a818151811061057657610576611d07565b60200260200101516001600160a01b0316836001600160a01b03160361059f57600191506105b1565b806105a981611cee565b91505061055c565b5080156105c0575050506105fc565b818a89815181106105d3576105d3611d07565b6001600160a01b0390921660209283029190910190910152876105f581611cee565b9850505050505b8061060681611cee565b91505061050d565b5050808061061b90611cee565b9150506104ea565b505082525090565b600080516020611eca833981519152546001600160a01b031633146106a45760405162461bcd60e51b815260206004820152602960248201527f536166654f776e61626c653a2073656e646572206d757374206265206e6f6d696044820152683732b29037bbb732b960b91b6064820152608401610120565b60006106ae61102f565b805460405191925033916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36106f48133611053565b61070f6000600080516020611eca8339815191525b90611053565b50565b6060600061071e610e2f565b600181015490915061ffff1667ffffffffffffffff81111561074257610742611b10565b60405190808252806020026020018201604052801561078857816020015b6040805180820190915260008152606060208201528152602001906001900390816107605790505b50600182015490925060009061ffff1667ffffffffffffffff8111156107b0576107b0611b10565b6040519080825280602002602001820160405280156107d9578160200160208202803683370190505b50905060008060005b600185015461ffff16821015610ac8576000818152600286016020526040812054905b6008811015610ab3578361081881611cee565b600189015490955061ffff1685119050610ab357600581901b82901b6001600160e01b0319811660009081526020899052604081205460601c90805b8881101561097157826001600160a01b03168c828151811061087857610878611d07565b6020026020010151600001516001600160a01b03160361095f57838c82815181106108a5576108a5611d07565b6020026020010151602001518b83815181106108c3576108c3611d07565b602002602001015160ff16815181106108de576108de611d07565b60200260200101906001600160e01b03191690816001600160e01b0319168152505060ff8a828151811061091457610914611d07565b602002602001015160ff161061092957600080fd5b89818151811061093b5761093b611d07565b60200260200101805180919061095090611d1d565b60ff1690525060019150610971565b8061096981611cee565b915050610854565b50801561098057505050610aa1565b818b898151811061099357610993611d07565b60209081029190910101516001600160a01b03909116905260018a015461ffff1667ffffffffffffffff8111156109cc576109cc611b10565b6040519080825280602002602001820160405280156109f5578160200160208202803683370190505b508b8981518110610a0857610a08611d07565b602002602001015160200181905250828b8981518110610a2a57610a2a611d07565b602002602001015160200151600081518110610a4857610a48611d07565b60200260200101906001600160e01b03191690816001600160e01b031916815250506001898981518110610a7e57610a7e611d07565b60ff9092166020928302919091019091015287610a9a81611cee565b9850505050505b80610aab81611cee565b915050610805565b50508080610ac090611cee565b9150506107e2565b5060005b82811015610b2f576000848281518110610ae857610ae8611d07565b602002602001015160ff1690506000878381518110610b0957610b09611d07565b602002602001015160200151905081815250508080610b2790611cee565b915050610acc565b508185525050505090565b6000600080516020611eca8339815191525b546001600160a01b0316919050565b6000610b4c61102f565b610b6d61102f565b546001600160a01b03163314610b955760405162461bcd60e51b815260040161012090611ad9565b80610b9e610e2f565b60030180546001600160a01b0319166001600160a01b039290921691909117905550565b60606000610bce610e2f565b600181015490915061ffff1667ffffffffffffffff811115610bf257610bf2611b10565b604051908082528060200260200182016040528015610c1b578160200160208202803683370190505b50915060008060005b600184015461ffff16821015610d04576000818152600285016020526040812054905b6008811015610cef5783610c5a81611cee565b600188015490955061ffff1685119050610cef57600581901b82901b6001600160e01b0319811660009081526020889052604090205460601c6001600160a01b038a1603610cdc5780888781518110610cb557610cb5611d07565b6001600160e01b03199092166020928302919091019091015285610cd881611cee565b9650505b5080610ce781611cee565b915050610c47565b50508080610cfc90611cee565b915050610c24565b5050825250919050565b6000610d18610e2f565b6001600160e01b0319909216600090815260209290925250604090205460601c90565b610d4361102f565b546001600160a01b03163314610d6b5760405162461bcd60e51b815260040161012090611ad9565b61070f81600080516020611eca833981519152610709565b7f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590565b6001600160e01b03198083169003610e015760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e74657266616365206964000000006044820152606401610120565b6001600160e01b03199190911660009081526020929092526040909120805460ff1916911515919091179055565b7f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9390565b600184015461ffff811690819060009060071615610e835750600381901c60009081526002870160205260409020545b60005b8651811015610fa3576000878281518110610ea357610ea3611d07565b60200260200101519050600081602001519050600082604001515111610f175760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a206e6f2073656c6563746f7273207370656369666044820152621a595960ea1b6064820152608401610120565b6000816002811115610f2b57610f2b611d3c565b03610f4657610f3c8a868685611070565b9095509350610f99565b6001816002811115610f5a57610f5a611d3c565b03610f6e57610f698a83611223565b610f99565b6002816002811115610f8257610f82611d3c565b03610f9957610f938a86868561141b565b90955093505b5050600101610e86565b50828214610fbf5760018701805461ffff191661ffff84161790555b6007821615610fe157600382901c600090815260028801602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67386868660405161101493929190611da2565b60405180910390a161102685856116b3565b50505050505050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f67168046090565b81546001600160a01b0319166001600160a01b0391909116179055565b805160009081906001600160a01b0316301480611097575082516001600160a01b03163b15155b6110ef5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a204144442074617267657420686173206e6f20636044820152626f646560e81b6064820152608401610120565b60005b8360400151518110156112165760008460400151828151811061111757611117611d07565b6020908102919091018101516001600160e01b031981166000908152918a9052604090912054909150606081901c1561119e5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a2073656c6563746f7220616c726561647920616460448201526219195960ea1b6064820152608401610120565b85516001600160e01b0319838116600081815260208d90526040902060609390931b6001600160601b0319168b1790925560058a901b60e090811692831c91831c1999909916179781900361120757600389901c600090815260028b0160205260408120989098555b505050600195860195016110f2565b5093959294509192505050565b80516001600160a01b03163b61128b5760405162461bcd60e51b815260206004820152602760248201527f4469616d6f6e64426173653a205245504c4143452074617267657420686173206044820152666e6f20636f646560c81b6064820152608401610120565b60005b816040015151811015611416576000826040015182815181106112b3576112b3611d07565b6020908102919091018101516001600160e01b03198116600090815291869052604090912054909150606081901c8061132e5760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e64006044820152606401610120565b306001600160a01b038216036113565760405162461bcd60e51b815260040161012090611e6b565b84600001516001600160a01b0316816001600160a01b0316036113cc5760405162461bcd60e51b815260206004820152602860248201527f4469616d6f6e64426173653a205245504c41434520746172676574206973206960448201526719195b9d1a58d85b60c21b6064820152608401610120565b5083516001600160e01b031992909216600090815260208690526040902060609290921b6001600160601b0319166bffffffffffffffffffffffff9190911617905560010161128e565b505050565b805160009081906001600160a01b0316156114905760405162461bcd60e51b815260206004820152602f60248201527f4469616d6f6e64426173653a2052454d4f564520746172676574206d7573742060448201526e6265207a65726f206164647265737360881b6064820152608401610120565b600385901c6007861660005b85604001515181101561169f576000866040015182815181106114c1576114c1611d07565b6020908102919091018101516001600160e01b031981166000908152918c9052604090912054909150606081901c61153b5760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e64006044820152606401610120565b30606082901c0361155e5760405162461bcd60e51b815260040161012090611e6b565b600089900361158a57600019909401600081815260028c01602052604090205498509360079350611592565b600019909301925b600584901b89901b6000806001600160e01b0319808416908616146115e9576001600160e01b03198316600090815260208f90526040902080546001600160601b0319166bffffffffffffffffffffffff86161790555b50506001600160e01b03198316600090815260208d90526040812055611fff600383901c1660e0600584901b1687821461164c57600082815260028f016020526040902080546001600160e01b031980841c19909116908516831c179055611670565b80836001600160e01b031916901c816001600160e01b031960001b901c198d16179b505b8660000361168e57600088815260028f01602052604081208190559b505b50506001909301925061149c915050565b5060039190911b1796939550929350505050565b8051156001600160a01b03831615146117255760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e76616c696420696e697469616c697a617460448201526d696f6e20706172616d657465727360901b6064820152608401610120565b6001600160a01b0382161561181f576001600160a01b03821630146117b2576001600160a01b0382163b6117b25760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e697469616c697a6174696f6e207461726760448201526d657420686173206e6f20636f646560901b6064820152608401610120565b6000826001600160a01b0316826040516117cc9190611ead565b600060405180830381855af49150503d8060008114611807576040519150601f19603f3d011682016040523d82523d6000602084013e61180c565b606091505b5050905080611416573d6000803e3d6000fd5b5050565b80356001600160e01b03198116811461183b57600080fd5b919050565b60006020828403121561185257600080fd5b61039d82611823565b80356001600160a01b038116811461183b57600080fd5b60008083601f84011261188457600080fd5b50813567ffffffffffffffff81111561189c57600080fd5b6020830191508360208285010111156118b457600080fd5b9250929050565b6000806000806000606086880312156118d357600080fd5b853567ffffffffffffffff808211156118eb57600080fd5b818801915088601f8301126118ff57600080fd5b81358181111561190e57600080fd5b8960208260051b850101111561192357600080fd5b602083019750809650506119396020890161185b565b9450604088013591508082111561194f57600080fd5b5061195c88828901611872565b969995985093965092949392505050565b6020808252825182820181905260009190848201906040850190845b818110156119ae5783516001600160a01b031683529284019291840191600101611989565b50909695505050505050565b600081518084526020808501945080840160005b838110156119f45781516001600160e01b031916875295820195908201906001016119ce565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611a6e57888303603f19018552815180516001600160a01b03168452870151878401879052611a5b878501826119ba565b9588019593505090860190600101611a26565b509098975050505050505050565b600060208284031215611a8e57600080fd5b61039d8261185b565b6020808252825182820181905260009190848201906040850190845b818110156119ae5783516001600160e01b03191683529284019291840191600101611ab3565b6020808252601d908201527f4f776e61626c653a2073656e646572206d757374206265206f776e6572000000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611b4957611b49611b10565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611b7857611b78611b10565b604052919050565b600067ffffffffffffffff821115611b9a57611b9a611b10565b5060051b60200190565b6000611bb7611bb284611b80565b611b4f565b83815260208082019190600586811b860136811115611bd557600080fd5b865b81811015611ccb57803567ffffffffffffffff80821115611bf85760008081fd5b818a01915060608236031215611c0e5760008081fd5b611c16611b26565b611c1f8361185b565b81528683013560038110611c335760008081fd5b8188015260408381013583811115611c4b5760008081fd5b939093019236601f850112611c6257600092508283fd5b83359250611c72611bb284611b80565b83815292871b84018801928881019036851115611c8f5760008081fd5b948901945b84861015611cb457611ca586611823565b82529489019490890190611c94565b918301919091525088525050948301948301611bd7565b5092979650505050505050565b634e487b7160e01b600052601160045260246000fd5b600060018201611d0057611d00611cd8565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103611d3357611d33611cd8565b60010192915050565b634e487b7160e01b600052602160045260246000fd5b60005b83811015611d6d578181015183820152602001611d55565b50506000910152565b60008151808452611d8e816020860160208601611d52565b601f01601f19169290920160200192915050565b6000606080830181845280875180835260808601915060808160051b87010192506020808a016000805b84811015611e3b57898703607f19018652825180516001600160a01b031688528481015160038110611e0c57634e487b7160e01b84526021600452602484fd5b88860152604090810151908801899052611e28898901826119ba565b9750509483019491830191600101611dcc565b5050506001600160a01b0389169087015250508381036040850152611e608186611d76565b979650505050505050565b60208082526022908201527f4469616d6f6e64426173653a2073656c6563746f7220697320696d6d757461626040820152616c6560f01b606082015260800190565b60008251611ebf818460208701611d52565b919091019291505056fe24aa1f7b31fd188a8d3ecfb06bc55c806040e59b03bd4396283442fce6617890a2646970667358221220317d3dcbd7997e60203f110d847f3020f52eedc93a9ba23dd1355c0a7b331d9564736f6c634300081100334469616d6f6e64426173653a2073656c6563746f7220697320696d6d75746162
Deployed Bytecode
0x6080604052600436106100ab5760003560e01c80638ab5150a116100645780638ab5150a1461022a5780638da5cb5b1461023f5780639142376514610254578063adfca15e14610274578063cdffacc6146102a1578063f2fde38b146102c1576100b2565b806301ffc9a71461014f5780631f931c1c146101845780632c408059146101a457806352ef6b2c146101d157806379ba5097146101f35780637a0ed62714610208576100b2565b366100b257005b60006100bc6102e1565b90506001600160a01b0381163b6101295760405162461bcd60e51b815260206004820152602660248201527f50726f78793a20696d706c656d656e746174696f6e206d75737420626520636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610148573d6000f35b3d6000fd5b005b34801561015b57600080fd5b5061016f61016a366004611840565b6103aa565b60405190151581526020015b60405180910390f35b34801561019057600080fd5b5061014d61019f3660046118bb565b6103df565b3480156101b057600080fd5b506101b961046c565b6040516001600160a01b03909116815260200161017b565b3480156101dd57600080fd5b506101e6610488565b60405161017b919061196d565b3480156101ff57600080fd5b5061014d61062b565b34801561021457600080fd5b5061021d610712565b60405161017b91906119ff565b34801561023657600080fd5b506101b9610b3a565b34801561024b57600080fd5b506101b9610b5b565b34801561026057600080fd5b5061014d61026f366004611a7c565b610b65565b34801561028057600080fd5b5061029461028f366004611a7c565b610bc2565b60405161017b9190611a97565b3480156102ad57600080fd5b506101b96102bc366004611840565b610d0e565b3480156102cd57600080fd5b5061014d6102dc366004611a7c565b610d3b565b600080356001600160e01b03191681527f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9360208190526040822054819060601c8061039d575060038201546001600160a01b03168061039d5760405162461bcd60e51b815260206004820152603260248201527f4469616d6f6e64426173653a206e6f20666163657420666f756e6420666f722060448201527166756e6374696f6e207369676e617475726560701b6064820152608401610120565b9392505050565b3b151590565b60006103d9826103b8610d83565b906001600160e01b0319166000908152602091909152604090205460ff1690565b92915050565b6103e761102f565b546001600160a01b0316331461040f5760405162461bcd60e51b815260040161012090611ad9565b61046561041c8587611ba4565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061045d9250610e2f915050565b929190610e53565b5050505050565b6000610476610e2f565b600301546001600160a01b0316919050565b60606000610494610e2f565b600181015490915061ffff1667ffffffffffffffff8111156104b8576104b8611b10565b6040519080825280602002602001820160405280156104e1578160200160208202803683370190505b50915060008060005b600184015461ffff16821015610623576000818152600285016020526040812054905b600881101561060e578361052081611cee565b600188015490955061ffff168511905061060e57600581901b82901b6001600160e01b0319811660009081526020889052604081205460601c90805b888110156105b1578a818151811061057657610576611d07565b60200260200101516001600160a01b0316836001600160a01b03160361059f57600191506105b1565b806105a981611cee565b91505061055c565b5080156105c0575050506105fc565b818a89815181106105d3576105d3611d07565b6001600160a01b0390921660209283029190910190910152876105f581611cee565b9850505050505b8061060681611cee565b91505061050d565b5050808061061b90611cee565b9150506104ea565b505082525090565b600080516020611eca833981519152546001600160a01b031633146106a45760405162461bcd60e51b815260206004820152602960248201527f536166654f776e61626c653a2073656e646572206d757374206265206e6f6d696044820152683732b29037bbb732b960b91b6064820152608401610120565b60006106ae61102f565b805460405191925033916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36106f48133611053565b61070f6000600080516020611eca8339815191525b90611053565b50565b6060600061071e610e2f565b600181015490915061ffff1667ffffffffffffffff81111561074257610742611b10565b60405190808252806020026020018201604052801561078857816020015b6040805180820190915260008152606060208201528152602001906001900390816107605790505b50600182015490925060009061ffff1667ffffffffffffffff8111156107b0576107b0611b10565b6040519080825280602002602001820160405280156107d9578160200160208202803683370190505b50905060008060005b600185015461ffff16821015610ac8576000818152600286016020526040812054905b6008811015610ab3578361081881611cee565b600189015490955061ffff1685119050610ab357600581901b82901b6001600160e01b0319811660009081526020899052604081205460601c90805b8881101561097157826001600160a01b03168c828151811061087857610878611d07565b6020026020010151600001516001600160a01b03160361095f57838c82815181106108a5576108a5611d07565b6020026020010151602001518b83815181106108c3576108c3611d07565b602002602001015160ff16815181106108de576108de611d07565b60200260200101906001600160e01b03191690816001600160e01b0319168152505060ff8a828151811061091457610914611d07565b602002602001015160ff161061092957600080fd5b89818151811061093b5761093b611d07565b60200260200101805180919061095090611d1d565b60ff1690525060019150610971565b8061096981611cee565b915050610854565b50801561098057505050610aa1565b818b898151811061099357610993611d07565b60209081029190910101516001600160a01b03909116905260018a015461ffff1667ffffffffffffffff8111156109cc576109cc611b10565b6040519080825280602002602001820160405280156109f5578160200160208202803683370190505b508b8981518110610a0857610a08611d07565b602002602001015160200181905250828b8981518110610a2a57610a2a611d07565b602002602001015160200151600081518110610a4857610a48611d07565b60200260200101906001600160e01b03191690816001600160e01b031916815250506001898981518110610a7e57610a7e611d07565b60ff9092166020928302919091019091015287610a9a81611cee565b9850505050505b80610aab81611cee565b915050610805565b50508080610ac090611cee565b9150506107e2565b5060005b82811015610b2f576000848281518110610ae857610ae8611d07565b602002602001015160ff1690506000878381518110610b0957610b09611d07565b602002602001015160200151905081815250508080610b2790611cee565b915050610acc565b508185525050505090565b6000600080516020611eca8339815191525b546001600160a01b0316919050565b6000610b4c61102f565b610b6d61102f565b546001600160a01b03163314610b955760405162461bcd60e51b815260040161012090611ad9565b80610b9e610e2f565b60030180546001600160a01b0319166001600160a01b039290921691909117905550565b60606000610bce610e2f565b600181015490915061ffff1667ffffffffffffffff811115610bf257610bf2611b10565b604051908082528060200260200182016040528015610c1b578160200160208202803683370190505b50915060008060005b600184015461ffff16821015610d04576000818152600285016020526040812054905b6008811015610cef5783610c5a81611cee565b600188015490955061ffff1685119050610cef57600581901b82901b6001600160e01b0319811660009081526020889052604090205460601c6001600160a01b038a1603610cdc5780888781518110610cb557610cb5611d07565b6001600160e01b03199092166020928302919091019091015285610cd881611cee565b9650505b5080610ce781611cee565b915050610c47565b50508080610cfc90611cee565b915050610c24565b5050825250919050565b6000610d18610e2f565b6001600160e01b0319909216600090815260209290925250604090205460601c90565b610d4361102f565b546001600160a01b03163314610d6b5760405162461bcd60e51b815260040161012090611ad9565b61070f81600080516020611eca833981519152610709565b7f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590565b6001600160e01b03198083169003610e015760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e74657266616365206964000000006044820152606401610120565b6001600160e01b03199190911660009081526020929092526040909120805460ff1916911515919091179055565b7f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9390565b600184015461ffff811690819060009060071615610e835750600381901c60009081526002870160205260409020545b60005b8651811015610fa3576000878281518110610ea357610ea3611d07565b60200260200101519050600081602001519050600082604001515111610f175760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a206e6f2073656c6563746f7273207370656369666044820152621a595960ea1b6064820152608401610120565b6000816002811115610f2b57610f2b611d3c565b03610f4657610f3c8a868685611070565b9095509350610f99565b6001816002811115610f5a57610f5a611d3c565b03610f6e57610f698a83611223565b610f99565b6002816002811115610f8257610f82611d3c565b03610f9957610f938a86868561141b565b90955093505b5050600101610e86565b50828214610fbf5760018701805461ffff191661ffff84161790555b6007821615610fe157600382901c600090815260028801602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67386868660405161101493929190611da2565b60405180910390a161102685856116b3565b50505050505050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f67168046090565b81546001600160a01b0319166001600160a01b0391909116179055565b805160009081906001600160a01b0316301480611097575082516001600160a01b03163b15155b6110ef5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a204144442074617267657420686173206e6f20636044820152626f646560e81b6064820152608401610120565b60005b8360400151518110156112165760008460400151828151811061111757611117611d07565b6020908102919091018101516001600160e01b031981166000908152918a9052604090912054909150606081901c1561119e5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a2073656c6563746f7220616c726561647920616460448201526219195960ea1b6064820152608401610120565b85516001600160e01b0319838116600081815260208d90526040902060609390931b6001600160601b0319168b1790925560058a901b60e090811692831c91831c1999909916179781900361120757600389901c600090815260028b0160205260408120989098555b505050600195860195016110f2565b5093959294509192505050565b80516001600160a01b03163b61128b5760405162461bcd60e51b815260206004820152602760248201527f4469616d6f6e64426173653a205245504c4143452074617267657420686173206044820152666e6f20636f646560c81b6064820152608401610120565b60005b816040015151811015611416576000826040015182815181106112b3576112b3611d07565b6020908102919091018101516001600160e01b03198116600090815291869052604090912054909150606081901c8061132e5760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e64006044820152606401610120565b306001600160a01b038216036113565760405162461bcd60e51b815260040161012090611e6b565b84600001516001600160a01b0316816001600160a01b0316036113cc5760405162461bcd60e51b815260206004820152602860248201527f4469616d6f6e64426173653a205245504c41434520746172676574206973206960448201526719195b9d1a58d85b60c21b6064820152608401610120565b5083516001600160e01b031992909216600090815260208690526040902060609290921b6001600160601b0319166bffffffffffffffffffffffff9190911617905560010161128e565b505050565b805160009081906001600160a01b0316156114905760405162461bcd60e51b815260206004820152602f60248201527f4469616d6f6e64426173653a2052454d4f564520746172676574206d7573742060448201526e6265207a65726f206164647265737360881b6064820152608401610120565b600385901c6007861660005b85604001515181101561169f576000866040015182815181106114c1576114c1611d07565b6020908102919091018101516001600160e01b031981166000908152918c9052604090912054909150606081901c61153b5760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e64006044820152606401610120565b30606082901c0361155e5760405162461bcd60e51b815260040161012090611e6b565b600089900361158a57600019909401600081815260028c01602052604090205498509360079350611592565b600019909301925b600584901b89901b6000806001600160e01b0319808416908616146115e9576001600160e01b03198316600090815260208f90526040902080546001600160601b0319166bffffffffffffffffffffffff86161790555b50506001600160e01b03198316600090815260208d90526040812055611fff600383901c1660e0600584901b1687821461164c57600082815260028f016020526040902080546001600160e01b031980841c19909116908516831c179055611670565b80836001600160e01b031916901c816001600160e01b031960001b901c198d16179b505b8660000361168e57600088815260028f01602052604081208190559b505b50506001909301925061149c915050565b5060039190911b1796939550929350505050565b8051156001600160a01b03831615146117255760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e76616c696420696e697469616c697a617460448201526d696f6e20706172616d657465727360901b6064820152608401610120565b6001600160a01b0382161561181f576001600160a01b03821630146117b2576001600160a01b0382163b6117b25760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e697469616c697a6174696f6e207461726760448201526d657420686173206e6f20636f646560901b6064820152608401610120565b6000826001600160a01b0316826040516117cc9190611ead565b600060405180830381855af49150503d8060008114611807576040519150601f19603f3d011682016040523d82523d6000602084013e61180c565b606091505b5050905080611416573d6000803e3d6000fd5b5050565b80356001600160e01b03198116811461183b57600080fd5b919050565b60006020828403121561185257600080fd5b61039d82611823565b80356001600160a01b038116811461183b57600080fd5b60008083601f84011261188457600080fd5b50813567ffffffffffffffff81111561189c57600080fd5b6020830191508360208285010111156118b457600080fd5b9250929050565b6000806000806000606086880312156118d357600080fd5b853567ffffffffffffffff808211156118eb57600080fd5b818801915088601f8301126118ff57600080fd5b81358181111561190e57600080fd5b8960208260051b850101111561192357600080fd5b602083019750809650506119396020890161185b565b9450604088013591508082111561194f57600080fd5b5061195c88828901611872565b969995985093965092949392505050565b6020808252825182820181905260009190848201906040850190845b818110156119ae5783516001600160a01b031683529284019291840191600101611989565b50909695505050505050565b600081518084526020808501945080840160005b838110156119f45781516001600160e01b031916875295820195908201906001016119ce565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611a6e57888303603f19018552815180516001600160a01b03168452870151878401879052611a5b878501826119ba565b9588019593505090860190600101611a26565b509098975050505050505050565b600060208284031215611a8e57600080fd5b61039d8261185b565b6020808252825182820181905260009190848201906040850190845b818110156119ae5783516001600160e01b03191683529284019291840191600101611ab3565b6020808252601d908201527f4f776e61626c653a2073656e646572206d757374206265206f776e6572000000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611b4957611b49611b10565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611b7857611b78611b10565b604052919050565b600067ffffffffffffffff821115611b9a57611b9a611b10565b5060051b60200190565b6000611bb7611bb284611b80565b611b4f565b83815260208082019190600586811b860136811115611bd557600080fd5b865b81811015611ccb57803567ffffffffffffffff80821115611bf85760008081fd5b818a01915060608236031215611c0e5760008081fd5b611c16611b26565b611c1f8361185b565b81528683013560038110611c335760008081fd5b8188015260408381013583811115611c4b5760008081fd5b939093019236601f850112611c6257600092508283fd5b83359250611c72611bb284611b80565b83815292871b84018801928881019036851115611c8f5760008081fd5b948901945b84861015611cb457611ca586611823565b82529489019490890190611c94565b918301919091525088525050948301948301611bd7565b5092979650505050505050565b634e487b7160e01b600052601160045260246000fd5b600060018201611d0057611d00611cd8565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103611d3357611d33611cd8565b60010192915050565b634e487b7160e01b600052602160045260246000fd5b60005b83811015611d6d578181015183820152602001611d55565b50506000910152565b60008151808452611d8e816020860160208601611d52565b601f01601f19169290920160200192915050565b6000606080830181845280875180835260808601915060808160051b87010192506020808a016000805b84811015611e3b57898703607f19018652825180516001600160a01b031688528481015160038110611e0c57634e487b7160e01b84526021600452602484fd5b88860152604090810151908801899052611e28898901826119ba565b9750509483019491830191600101611dcc565b5050506001600160a01b0389169087015250508381036040850152611e608186611d76565b979650505050505050565b60208082526022908201527f4469616d6f6e64426173653a2073656c6563746f7220697320696d6d757461626040820152616c6560f01b606082015260800190565b60008251611ebf818460208701611d52565b919091019291505056fe24aa1f7b31fd188a8d3ecfb06bc55c806040e59b03bd4396283442fce6617890a2646970667358221220317d3dcbd7997e60203f110d847f3020f52eedc93a9ba23dd1355c0a7b331d9564736f6c63430008110033
Deployed Bytecode Sourcemap
36162:45:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24648:22;24673:20;:18;:20::i;:::-;24648:45;-1:-1:-1;;;;;;24728:25:0;;9259:20;24706:115;;;;-1:-1:-1;;;24706:115:0;;216:2:1;24706:115:0;;;198:21:1;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:1;;;338:36;391:19;;24706:115:0;;;;;;;;;24877:14;24874:1;24871;24858:34;25081:1;25061;25028:14;25008:1;24975:14;24951:5;24920:177;25132:16;25129:1;25126;25111:38;25172:6;25192:68;;;;25311:16;25308:1;25301:27;25192:68;25228:16;25225:1;25218:27;25165:178;;5988:156;;;;;;;;;;-1:-1:-1;5988:156:0;;;;;:::i;:::-;;:::i;:::-;;;953:14:1;;946:22;928:41;;916:2;901:18;5988:156:0;;;;;;;;27048:223;;;;;;;;;;-1:-1:-1;27048:223:0;;;;;:::i;:::-;;:::i;35739:131::-;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2797:32:1;;;2779:51;;2767:2;2752:18;35739:131:0;2633:203:1;31571:1524:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4026:291::-;;;;;;;;;;;;;:::i;27598:2619::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3482:128::-;;;;;;;;;;;;;:::i;1807:110::-;;;;;;;;;;;;;:::i;36001:152::-;;;;;;;;;;-1:-1:-1;36001:152:0;;;;;:::i;:::-;;:::i;30277:1234::-;;;;;;;;;;-1:-1:-1;30277:1234:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33155:198::-;;;;;;;;;;-1:-1:-1;33155:198:0;;;;;:::i;:::-;;:::i;3756:190::-;;;;;;;;;;-1:-1:-1;3756:190:0;;;;;:::i;:::-;;:::i;25821:668::-;25883:7;26175;;-1:-1:-1;;;;;;26175:7:0;26166:17;;12401:53;26166:17;;;;;;;;12401:53;;26150:35;;;26198:250;;-1:-1:-1;26264:17:0;;;;-1:-1:-1;;;;;26264:17:0;;26296:140;;;;-1:-1:-1;;;26296:140:0;;6089:2:1;26296:140:0;;;6071:21:1;6128:2;6108:18;;;6101:30;6167:34;6147:18;;;6140:62;-1:-1:-1;;;6218:18:1;;;6211:48;6276:19;;26296:140:0;5887:414:1;26296:140:0;26467:14;25821:668;-1:-1:-1;;;25821:668:0:o;9127:196::-;9259:20;9307:8;;;9127:196::o;5988:156::-;6056:4;6080:56;6124:11;6080:22;:20;:22::i;:::-;:43;-1:-1:-1;;;;;;4936:34:0;4907:4;4936:34;;;;;;;;;;;;;;;4789:189;6080:56;6073:63;5988:156;-1:-1:-1;;5988:156:0:o;27048:223::-;1410:23;:21;:23::i;:::-;:29;-1:-1:-1;;;;;1410:29:0;1396:10;:43;1374:122;;;;-1:-1:-1;;;1374:122:0;;;;;;;:::i;:::-;27200:63:::1;;27239:9:::0;;27200:63:::1;:::i;:::-;27250:6;27258:4;;27200:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27200:27:0::1;::::0;-1:-1:-1;27200:25:0::1;::::0;-1:-1:-1;;27200:27:0:i:1;:::-;:38:::0;:63;;:38:::1;:63::i;:::-;27048:223:::0;;;;;:::o;35739:131::-;35792:7;35819:27;:25;:27::i;:::-;:43;;;-1:-1:-1;;;;;35819:43:0;;35739:131;-1:-1:-1;35739:131:0:o;31571:1524::-;31647:26;31691:35;31729:27;:25;:27::i;:::-;31795:15;;;;31691:65;;-1:-1:-1;31795:15:0;;31781:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31781:30:0;;31769:42;;31822:17;31850:21;31889:17;31884:1070;31924:15;;;;;;31908:31;;31884:1070;;;31969:12;31984:26;;;:15;;;:26;;;;;;;32027:916;32114:1;32094:17;:21;32027:916;;;32188:15;;;;:::i;:::-;32244;;;;32188;;-1:-1:-1;32244:15:0;;32228:31;;;-1:-1:-1;32284:5:0;32224:85;32384:1;32363:22;;;32354:32;;;-1:-1:-1;;;;;;32438:18:0;;32329:15;32438:18;;;;;;;;;;;32422:36;;;32329:15;32517:243;32555:9;32542:10;:22;32517:243;;;32616:9;32626:10;32616:21;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;32607:30:0;:5;-1:-1:-1;;;;;32607:30:0;;32603:138;;32681:4;32666:19;;32712:5;;32603:138;32566:12;;;;:::i;:::-;;;;32517:243;;;;32784:12;32780:69;;;32821:8;;;;;32780:69;32892:5;32869:9;32879;32869:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32869:28:0;;;:20;;;;;;;;;;;:28;32916:11;;;;:::i;:::-;;;;32169:774;;;32027:916;32134:19;;;;:::i;:::-;;;;32027:916;;;;31954:1000;31941:11;;;;;:::i;:::-;;;;31884:1070;;;-1:-1:-1;;33049:28:0;;-1:-1:-1;33056:9:0;31571:1524::o;4026:291::-;-1:-1:-1;;;;;;;;;;;2998:40:0;-1:-1:-1;;;;;2998:40:0;2984:10;:54;2962:145;;;;-1:-1:-1;;;2962:145:0;;10649:2:1;2962:145:0;;;10631:21:1;10688:2;10668:18;;;10661:30;10727:34;10707:18;;;10700:62;-1:-1:-1;;;10778:18:1;;;10771:39;10827:19;;2962:145:0;10447:405:1;2962:145:0;4096:31:::1;4130:23;:21;:23::i;:::-;4190:7:::0;;4169:41:::1;::::0;4190:7;;-1:-1:-1;4199:10:0::1;::::0;-1:-1:-1;;;;;4190:7:0;;::::1;::::0;4169:41:::1;::::0;4190:7:::1;::::0;4169:41:::1;4221:22;:1:::0;4232:10:::1;4221;:22::i;:::-;4254:55;4306:1;-1:-1:-1::0;;;;;;;;;;;4254:27:0::1;:43:::0;::::1;:55::i;:::-;4085:232;4026:291::o:0;27598:2619::-;27639:28;27680:35;27718:27;:25;:27::i;:::-;27786:15;;;;27680:65;;-1:-1:-1;27786:15:0;;27774:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;27774:28:0;;;;;;;;;;;;;;;-1:-1:-1;27862:15:0;;;;27758:44;;-1:-1:-1;27815:32:0;;27862:15;;27850:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27850:28:0;;27815:63;;27889:17;27917:21;28000:17;27995:1725;28035:15;;;;;;28019:31;;27995:1725;;;28080:12;28095:26;;;:15;;;:26;;;;;;;28138:1571;28225:1;28205:17;:21;28138:1571;;;28299:15;;;;:::i;:::-;28355;;;;28299;;-1:-1:-1;28355:15:0;;28339:31;;;-1:-1:-1;28395:5:0;28335:85;28495:1;28474:22;;;28465:32;;;-1:-1:-1;;;;;;28549:18:0;;28440:15;28549:18;;;;;;;;;;;28533:36;;;28440:15;28628:644;28666:9;28653:10;:22;28628:644;;;28754:5;-1:-1:-1;;;;;28718:41:0;:13;28732:10;28718:25;;;;;;;;:::i;:::-;;;;;;;:32;;;-1:-1:-1;;;;;28718:41:0;;28714:539;;28913:8;28788:13;28802:10;28788:25;;;;;;;;:::i;:::-;;;;;;;:35;;;28854:17;28872:10;28854:29;;;;;;;;:::i;:::-;;;;;;;28788:122;;;;;;;;;;:::i;:::-;;;;;;:133;-1:-1:-1;;;;;28788:133:0;;;;-1:-1:-1;;;;;28788:133:0;;;;;;29089:3;29057:17;29075:10;29057:29;;;;;;;;:::i;:::-;;;;;;;:35;;;29049:44;;;;;;29120:17;29138:10;29120:29;;;;;;;;:::i;:::-;;;;;;:31;;;;;;;;:::i;:::-;;;;;-1:-1:-1;29193:4:0;;-1:-1:-1;29224:5:0;;28714:539;28677:12;;;;:::i;:::-;;;;28628:644;;;;29296:12;29292:69;;;29333:8;;;;;29292:69;29415:5;29381:13;29395:9;29381:24;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;29381:39:0;;;;;29511:15;;;;;;29476:69;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29476:69:0;;29439:13;29453:9;29439:24;;;;;;;;:::i;:::-;;;;;;;:34;;:106;;;;29604:8;29564:13;29578:9;29564:24;;;;;;;;:::i;:::-;;;;;;;:34;;;29599:1;29564:37;;;;;;;;:::i;:::-;;;;;;:48;-1:-1:-1;;;;;29564:48:0;;;;-1:-1:-1;;;;;29564:48:0;;;;;;29662:1;29631:17;29649:9;29631:28;;;;;;;;:::i;:::-;:32;;;;:28;;;;;;;;;;;:32;29682:11;;;;:::i;:::-;;;;28280:1429;;;28138:1571;28245:19;;;;:::i;:::-;;;;28138:1571;;;;28065:1655;28052:11;;;;;:::i;:::-;;;;27995:1725;;;;29737:18;29732:358;29770:9;29757:10;:22;29732:358;;;29810:20;29833:17;29851:10;29833:29;;;;;;;;:::i;:::-;;;;;;;29810:52;;;;29877:25;29905:13;29919:10;29905:25;;;;;;;;:::i;:::-;;;;;;;:35;;;29877:63;;30051:12;30040:9;30033:31;30014:65;;29781:12;;;;;:::i;:::-;;;;29732:358;;;;30189:9;30174:13;30167:32;30152:58;;;;27598:2619;:::o;3482:128::-;3535:7;-1:-1:-1;;;;;;;;;;;3562:27:0;:40;-1:-1:-1;;;;;3562:40:0;;3482:128;-1:-1:-1;3482:128:0:o;1807:110::-;1853:7;1880:23;:21;:23::i;36001:152::-;1410:23;:21;:23::i;:::-;:29;-1:-1:-1;;;;;1410:29:0;1396:10;:43;1374:122;;;;-1:-1:-1;;;1374:122:0;;;;;;;:::i;:::-;36130:15:::1;36084:27;:25;:27::i;:::-;:43;;:61:::0;;-1:-1:-1;;;;;;36084:61:0::1;-1:-1:-1::0;;;;;36084:61:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;36001:152:0:o;30277:1234::-;30374:25;30417:35;30455:27;:25;:27::i;:::-;30520:15;;;;30417:65;;-1:-1:-1;30520:15:0;;30507:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30507:29:0;;30495:41;;30549:20;30580:21;30663:17;30658:715;30698:15;;;;;;30682:31;;30658:715;;;30743:12;30758:26;;;:15;;;:26;;;;;;;30801:561;30888:1;30868:17;:21;30801:561;;;30962:15;;;;:::i;:::-;31018;;;;30962;;-1:-1:-1;31018:15:0;;31002:31;;;-1:-1:-1;31058:5:0;30998:85;31158:1;31137:22;;;31128:32;;;-1:-1:-1;;;;;;31211:18:0;;31103:15;31211:18;;;;;;;;;;;31195:36;;-1:-1:-1;;;;;31186:45:0;;;31182:165;;31282:8;31256:9;31266:12;31256:23;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;31256:34:0;;;:23;;;;;;;;;;;:34;31313:14;;;;:::i;:::-;;;;31182:165;-1:-1:-1;30908:19:0;;;;:::i;:::-;;;;30801:561;;;;30728:645;30715:11;;;;;:::i;:::-;;;;30658:715;;;-1:-1:-1;;31462:31:0;;-1:-1:-1;31469:9:0;30277:1234;-1:-1:-1;30277:1234:0:o;33155:198::-;33244:13;33299:27;:25;:27::i;:::-;-1:-1:-1;;;;;;33299:44:0;;;:34;:44;;;;;;;;-1:-1:-1;33299:44:0;;;;33283:62;;;33155:198::o;3756:190::-;1410:23;:21;:23::i;:::-;:29;-1:-1:-1;;;;;1410:29:0;1396:10;:43;1374:122;;;;-1:-1:-1;;;1374:122:0;;;;;;;:::i;:::-;3886:52:::1;3930:7:::0;-1:-1:-1;;;;;;;;;;;3886:27:0::1;2442:164:::0;4617;4560:48;;4617:164::o;4986:264::-;-1:-1:-1;;;;;;5130:25:0;;;;;5122:66;;;;-1:-1:-1;;;5122:66:0;;11239:2:1;5122:66:0;;;11221:21:1;11278:2;11258:18;;;11251:30;11317;11297:18;;;11290:58;11365:18;;5122:66:0;11037:352:1;5122:66:0;-1:-1:-1;;;;;;5199:34:0;;;;:21;:34;;;;;;;;;;;;:43;;-1:-1:-1;;5199:43:0;;;;;;;;;;4986:264::o;12589:164::-;12401:53;;12589:164::o;13067:2119::-;13306:15;;;;;;;;;;13274:29;;13509:1;13493:17;:21;13489:154;;-1:-1:-1;13625:1:0;13608:18;;;13592:35;;;;:15;;;:35;;;;;;13489:154;13664:9;13659:1101;13679:9;:16;13675:1;:20;13659:1101;;;13721:41;13765:9;13775:1;13765:12;;;;;;;;:::i;:::-;;;;;;;13721:56;;13796:38;13837:8;:15;;;13796:56;;13931:1;13903:8;:18;;;:25;:29;13873:138;;;;-1:-1:-1;;;13873:138:0;;11596:2:1;13873:138:0;;;11578:21:1;11635:2;11615:18;;;11608:30;11674:34;11654:18;;;11647:62;-1:-1:-1;;;11725:18:1;;;11718:33;11768:19;;13873:138:0;11394:399:1;13873:138:0;14046:35;14036:6;:45;;;;;;;;:::i;:::-;;14032:713;;14138:156;:1;14184:13;14224:12;14263:8;14138:19;:156::i;:::-;14106:188;;-1:-1:-1;14106:188:0;-1:-1:-1;14032:713:0;;;14334:39;14324:6;:49;;;;;;;;:::i;:::-;;14320:425;;14398:33;:1;14422:8;14398:23;:33::i;:::-;14320:425;;;14471:38;14461:6;:48;;;;;;;;:::i;:::-;;14457:288;;14566:159;:1;14615:13;14655:12;14694:8;14566:22;:159::i;:::-;14534:191;;-1:-1:-1;14534:191:0;-1:-1:-1;14457:288:0;-1:-1:-1;;13697:3:0;;13659:1101;;;;14797:21;14780:13;:38;14776:118;;14839:15;;;:39;;-1:-1:-1;;14839:39:0;;;;;;;14776:118;14980:1;14964:17;;:21;14960:112;;15039:1;15022:18;;;15006:35;;;;:15;;;:35;;;;;:50;;;14960:112;15093:35;15104:9;15115:6;15123:4;15093:35;;;;;;;;:::i;:::-;;;;;;;;15143:24;15154:6;15162:4;15143:10;:24::i;:::-;13249:1930;;;13067:2119;;;;:::o;905:164::-;847:49;;905:164::o;1077:94::-;1148:15;;-1:-1:-1;;;;;;1148:15:0;-1:-1:-1;;;;;1148:15:0;;;;;;;1077:94::o;15194:1691::-;15468:15;;15388:7;;;;-1:-1:-1;;;;;15468:32:0;15495:4;15468:32;;:85;;-1:-1:-1;15525:15:0;;-1:-1:-1;;;;;15525:26:0;9259:20;9307:8;;15525:28;15442:182;;;;-1:-1:-1;;;15442:182:0;;14293:2:1;15442:182:0;;;14275:21:1;14332:2;14312:18;;;14305:30;14371:34;14351:18;;;14344:62;-1:-1:-1;;;14422:18:1;;;14415:33;14465:19;;15442:182:0;14091:399:1;15442:182:0;15646:9;15641:1173;15661:8;:18;;;:25;15657:1;:29;15641:1173;;;15712:15;15730:8;:18;;;15749:1;15730:21;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;15789:18:0;;15770:16;15789:18;;;;;;;;;;;;15730:21;;-1:-1:-1;15858:26:0;;;;:40;15828:149;;;;-1:-1:-1;;;15828:149:0;;14697:2:1;15828:149:0;;;14679:21:1;14736:2;14716:18;;;14709:30;14775:34;14755:18;;;14748:62;-1:-1:-1;;;14826:18:1;;;14819:33;14869:19;;15828:149:0;14495:399:1;15828:149:0;16091:15;;-1:-1:-1;;;;;;16041:18:0;;;16131:22;16041:18;;;;;;;;;;16083:24;;;;;-1:-1:-1;;;;;;16083:70:0;;;16041:112;;;16228:1;16205:24;;;;;;;16470:43;;;16398:45;;;16396:48;16356:88;;;;16355:159;;16600:29;;;16596:167;;16687:1;16670:18;;;16654:35;;;;:15;;;:35;;;;;:50;;;;16596:167;-1:-1:-1;;;16783:15:0;;;;;15688:3;15641:1173;;;-1:-1:-1;16838:13:0;;16853:12;;-1:-1:-1;15194:1691:0;;-1:-1:-1;;;15194:1691:0:o;20766:1252::-;20954:15;;-1:-1:-1;;;;;20954:26:0;9259:20;20928:129;;;;-1:-1:-1;;;20928:129:0;;15101:2:1;20928:129:0;;;15083:21:1;15140:2;15120:18;;;15113:30;15179:34;15159:18;;;15152:62;-1:-1:-1;;;15230:18:1;;;15223:37;15277:19;;20928:129:0;14899:403:1;20928:129:0;21079:9;21074:926;21094:8;:18;;;:25;21090:1;:29;21074:926;;;21145:15;21163:8;:18;;;21182:1;21163:21;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;21222:18:0;;21203:16;21222:18;;;;;;;;;;;;21163:21;;-1:-1:-1;21285:26:0;;;;;21332:134;;;;-1:-1:-1;;;21332:134:0;;15509:2:1;21332:134:0;;;15491:21:1;15548:2;15528:18;;;15521:30;15587:33;15567:18;;;15560:61;15638:18;;21332:134:0;15307:355:1;21332:134:0;21544:4;-1:-1:-1;;;;;21517:32:0;;;21487:140;;;;-1:-1:-1;;;21487:140:0;;;;;;;:::i;:::-;21697:8;:15;;;-1:-1:-1;;;;;21678:34:0;:15;-1:-1:-1;;;;;21678:34:0;;21648:148;;;;-1:-1:-1;;;21648:148:0;;16272:2:1;21648:148:0;;;16254:21:1;16311:2;16291:18;;;16284:30;16350:34;16330:18;;;16323:62;-1:-1:-1;;;16401:18:1;;;16394:38;16449:19;;21648:148:0;16070:404:1;21648:148:0;-1:-1:-1;21968:15:0;;-1:-1:-1;;;;;;21863:18:0;;;;21968:15;21863:18;;;;;;;;;;21960:24;;;;;-1:-1:-1;;;;;;21905:79:0;;21906:29;;;;21905:79;21863:121;;21121:3;;21074:926;;;;20766:1252;;:::o;16893:3865::-;17170:15;;17090:7;;;;-1:-1:-1;;;;;17170:29:0;;17144:138;;;;-1:-1:-1;;;17144:138:0;;16681:2:1;17144:138:0;;;16663:21:1;16720:2;16700:18;;;16693:30;16759:34;16739:18;;;16732:62;-1:-1:-1;;;16810:18:1;;;16803:45;16865:19;;17144:138:0;16479:411:1;17144:138:0;17344:1;17327:18;;;17406:1;17390:17;;17299:25;17424:3184;17444:8;:18;;;:25;17440:1;:29;17424:3184;;;17495:15;17513:8;:18;;;17532:1;17513:21;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;17572:18:0;;17553:16;17572:18;;;;;;;;;;;;17513:21;;-1:-1:-1;17641:26:0;;;;17611:145;;;;-1:-1:-1;;;17611:145:0;;15509:2:1;17611:145:0;;;15491:21:1;15548:2;15528:18;;;15521:30;15587:33;15567:18;;;15560:61;15638:18;;17611:145:0;15307:355:1;17611:145:0;17845:4;17807:26;;;;:43;17777:151;;;;-1:-1:-1;;;17777:151:0;;;;;;;:::i;:::-;17969:1;17953:17;;;17949:273;;-1:-1:-1;;17995:19:0;;;18052:34;;;;:15;;;:34;;;;;;;-1:-1:-1;17995:19:0;18131:1;;-1:-1:-1;17949:273:0;;;-1:-1:-1;;18181:21:0;;;;17949:273;18635:1;18612:24;;;18595:42;;;18242:19;;-1:-1:-1;;;;;;18689:24:0;;;;;;;18685:297;;-1:-1:-1;;;;;;18935:22:0;;:8;:22;;;;;;;;;;;;-1:-1:-1;;;;;;18864:94:0;;18865:29;;18864:94;18810:148;;18685:297;-1:-1:-1;;;;;;;;19013:18:0;;:8;:18;;;;;;;;;;19006:25;19153:21;19173:1;19153:21;;;;19225:27;19251:1;19225:27;;;;19296:42;;;19292:1128;;19363:23;19389:86;;;:15;;;:86;;;;;;;-1:-1:-1;;;;;;19694:81:0;;;19692:84;19645:131;;;19806:21;;;:50;;19644:213;19944:56;;19292:1128;;;20374:25;20357:12;-1:-1:-1;;;;;20349:21:0;;:50;;20293:25;-1:-1:-1;;;;;;12307:35:0;;20237:81;;20235:84;20191:12;:128;20190:210;20150:250;;19292:1128;20444:19;20467:1;20444:24;20440:153;;20500:34;;;;:15;;;:34;;;;;20493:41;;;20500:34;-1:-1:-1;20440:153:0;-1:-1:-1;;17471:3:0;;;;;-1:-1:-1;17424:3184:0;;-1:-1:-1;;17424:3184:0;;-1:-1:-1;20662:1:0;20641:22;;;;20640:46;;20726:12;;-1:-1:-1;16893:3865:0;;-1:-1:-1;;;;16893:3865:0:o;22026:752::-;22149:11;;:16;-1:-1:-1;;;;;22123:20:0;;;22122:44;22100:140;;;;-1:-1:-1;;;22100:140:0;;17097:2:1;22100:140:0;;;17079:21:1;17136:2;17116:18;;;17109:30;17175:34;17155:18;;;17148:62;-1:-1:-1;;;17226:18:1;;;17219:44;17280:19;;22100:140:0;16895:410:1;22100:140:0;-1:-1:-1;;;;;22257:20:0;;;22253:518;;-1:-1:-1;;;;;22298:23:0;;22316:4;22298:23;22294:203;;-1:-1:-1;;;;;22372:17:0;;9259:20;22342:139;;;;-1:-1:-1;;;22342:139:0;;17512:2:1;22342:139:0;;;17494:21:1;17551:2;17531:18;;;17524:30;17590:34;17570:18;;;17563:62;-1:-1:-1;;;17641:18:1;;;17634:44;17695:19;;22342:139:0;17310:410:1;22342:139:0;22514:12;22532:6;-1:-1:-1;;;;;22532:19:0;22552:4;22532:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22513:44;;;22579:7;22574:186;;22660:16;22657:1;;22639:38;22709:16;22657:1;22699:27;22253:518;22026:752;;:::o;421:173:1:-;488:20;;-1:-1:-1;;;;;;537:32:1;;527:43;;517:71;;584:1;581;574:12;517:71;421:173;;;:::o;599:184::-;657:6;710:2;698:9;689:7;685:23;681:32;678:52;;;726:1;723;716:12;678:52;749:28;767:9;749:28;:::i;980:173::-;1048:20;;-1:-1:-1;;;;;1097:31:1;;1087:42;;1077:70;;1143:1;1140;1133:12;1158:347;1209:8;1219:6;1273:3;1266:4;1258:6;1254:17;1250:27;1240:55;;1291:1;1288;1281:12;1240:55;-1:-1:-1;1314:20:1;;1357:18;1346:30;;1343:50;;;1389:1;1386;1379:12;1343:50;1426:4;1418:6;1414:17;1402:29;;1478:3;1471:4;1462:6;1454;1450:19;1446:30;1443:39;1440:59;;;1495:1;1492;1485:12;1440:59;1158:347;;;;;:::o;1510:1009::-;1652:6;1660;1668;1676;1684;1737:2;1725:9;1716:7;1712:23;1708:32;1705:52;;;1753:1;1750;1743:12;1705:52;1793:9;1780:23;1822:18;1863:2;1855:6;1852:14;1849:34;;;1879:1;1876;1869:12;1849:34;1917:6;1906:9;1902:22;1892:32;;1962:7;1955:4;1951:2;1947:13;1943:27;1933:55;;1984:1;1981;1974:12;1933:55;2024:2;2011:16;2050:2;2042:6;2039:14;2036:34;;;2066:1;2063;2056:12;2036:34;2121:7;2114:4;2104:6;2101:1;2097:14;2093:2;2089:23;2085:34;2082:47;2079:67;;;2142:1;2139;2132:12;2079:67;2173:4;2169:2;2165:13;2155:23;;2197:6;2187:16;;;2222:40;2256:4;2245:9;2241:20;2222:40;:::i;:::-;2212:50;;2315:2;2304:9;2300:18;2287:32;2271:48;;2344:2;2334:8;2331:16;2328:36;;;2360:1;2357;2350:12;2328:36;;2399:60;2451:7;2440:8;2429:9;2425:24;2399:60;:::i;:::-;1510:1009;;;;-1:-1:-1;1510:1009:1;;-1:-1:-1;2478:8:1;;2373:86;1510:1009;-1:-1:-1;;;1510:1009:1:o;2841:658::-;3012:2;3064:21;;;3134:13;;3037:18;;;3156:22;;;2983:4;;3012:2;3235:15;;;;3209:2;3194:18;;;2983:4;3278:195;3292:6;3289:1;3286:13;3278:195;;;3357:13;;-1:-1:-1;;;;;3353:39:1;3341:52;;3448:15;;;;3413:12;;;;3389:1;3307:9;3278:195;;;-1:-1:-1;3490:3:1;;2841:658;-1:-1:-1;;;;;;2841:658:1:o;3504:461::-;3556:3;3594:5;3588:12;3621:6;3616:3;3609:19;3647:4;3676:2;3671:3;3667:12;3660:19;;3713:2;3706:5;3702:14;3734:1;3744:196;3758:6;3755:1;3752:13;3744:196;;;3823:13;;-1:-1:-1;;;;;;3819:40:1;3807:53;;3880:12;;;;3915:15;;;;3780:1;3773:9;3744:196;;;-1:-1:-1;3956:3:1;;3504:461;-1:-1:-1;;;;;3504:461:1:o;3970:1059::-;4158:4;4187:2;4227;4216:9;4212:18;4257:2;4246:9;4239:21;4280:6;4315;4309:13;4346:6;4338;4331:22;4372:2;4362:12;;4405:2;4394:9;4390:18;4383:25;;4467:2;4457:6;4454:1;4450:14;4439:9;4435:30;4431:39;4505:2;4497:6;4493:15;4526:1;4536:464;4550:6;4547:1;4544:13;4536:464;;;4615:22;;;-1:-1:-1;;4611:36:1;4599:49;;4671:13;;4716:9;;-1:-1:-1;;;;;4712:35:1;4697:51;;4787:11;;4781:18;4819:15;;;4812:27;;;4862:58;4904:15;;;4781:18;4862:58;:::i;:::-;4978:12;;;;4852:68;-1:-1:-1;;4943:15:1;;;;4572:1;4565:9;4536:464;;;-1:-1:-1;5017:6:1;;3970:1059;-1:-1:-1;;;;;;;;3970:1059:1:o;5034:186::-;5093:6;5146:2;5134:9;5125:7;5121:23;5117:32;5114:52;;;5162:1;5159;5152:12;5114:52;5185:29;5204:9;5185:29;:::i;5225:657::-;5394:2;5446:21;;;5516:13;;5419:18;;;5538:22;;;5365:4;;5394:2;5617:15;;;;5591:2;5576:18;;;5365:4;5660:196;5674:6;5671:1;5668:13;5660:196;;;5739:13;;-1:-1:-1;;;;;;5735:40:1;5723:53;;5831:15;;;;5796:12;;;;5696:1;5689:9;5660:196;;6306:353;6508:2;6490:21;;;6547:2;6527:18;;;6520:30;6586:31;6581:2;6566:18;;6559:59;6650:2;6635:18;;6306:353::o;6664:127::-;6725:10;6720:3;6716:20;6713:1;6706:31;6756:4;6753:1;6746:15;6780:4;6777:1;6770:15;6796:253;6868:2;6862:9;6910:4;6898:17;;6945:18;6930:34;;6966:22;;;6927:62;6924:88;;;6992:18;;:::i;:::-;7028:2;7021:22;6796:253;:::o;7054:275::-;7125:2;7119:9;7190:2;7171:13;;-1:-1:-1;;7167:27:1;7155:40;;7225:18;7210:34;;7246:22;;;7207:62;7204:88;;;7272:18;;:::i;:::-;7308:2;7301:22;7054:275;;-1:-1:-1;7054:275:1:o;7334:191::-;7402:4;7435:18;7427:6;7424:30;7421:56;;;7457:18;;:::i;:::-;-1:-1:-1;7502:1:1;7498:14;7514:4;7494:25;;7334:191::o;7530:2508::-;7698:9;7733:72;7749:55;7797:6;7749:55;:::i;:::-;7733:72;:::i;:::-;7839:19;;;7877:4;7897:12;;;;7827:3;7928:1;7963:15;;;7952:27;;8002:14;7991:26;;7988:46;;;8030:1;8027;8020:12;7988:46;8054:5;8068:1937;8084:6;8079:3;8076:15;8068:1937;;;8170:3;8157:17;8197:18;8247:2;8234:11;8231:19;8228:109;;;8291:1;8320:2;8316;8309:14;8228:109;8371:11;8364:5;8360:23;8350:33;;8428:4;8423:2;8407:14;8403:23;8399:34;8396:124;;;8474:1;8503:2;8499;8492:14;8396:124;8548:22;;:::i;:::-;8599;8618:2;8599:22;:::i;:::-;8590:7;8583:39;8671:2;8667;8663:11;8650:25;8710:1;8701:7;8698:14;8688:112;;8754:1;8783:2;8779;8772:14;8688:112;8820:16;;;8813:33;8869:2;8911:11;;;8898:25;8939:14;;;8936:104;;;8994:1;9023:2;9019;9012:14;8936:104;9064:15;;;;;9122:14;9115:4;9106:14;;9102:35;9092:136;;9180:1;9169:12;;9210:3;9205;9198:16;9092:136;9265:3;9252:17;9241:28;;9295:69;9311:52;9359:3;9311:52;:::i;9295:69::-;9408:18;;;9504:12;;;9495:22;;9491:31;;;9448:14;;;;9551;9538:28;;9535:121;;;9608:1;9638:3;9633;9626:16;9535:121;9682:12;;;;9707:179;9725:8;9718:5;9715:19;9707:179;;;9807:24;9825:5;9807:24;:::i;:::-;9793:39;;9746:14;;;;9858;;;;9707:179;;;9906:16;;;9899:31;;;;-1:-1:-1;9943:20:1;;-1:-1:-1;;9983:12:1;;;;8101;;8068:1937;;;-1:-1:-1;10027:5:1;;7530:2508;-1:-1:-1;;;;;;;7530:2508:1:o;10043:127::-;10104:10;10099:3;10095:20;10092:1;10085:31;10135:4;10132:1;10125:15;10159:4;10156:1;10149:15;10175:135;10214:3;10235:17;;;10232:43;;10255:18;;:::i;:::-;-1:-1:-1;10302:1:1;10291:13;;10175:135::o;10315:127::-;10376:10;10371:3;10367:20;10364:1;10357:31;10407:4;10404:1;10397:15;10431:4;10428:1;10421:15;10857:175;10894:3;10938:4;10931:5;10927:16;10967:4;10958:7;10955:17;10952:43;;10975:18;;:::i;:::-;11024:1;11011:15;;10857:175;-1:-1:-1;;10857:175:1:o;11798:127::-;11859:10;11854:3;11850:20;11847:1;11840:31;11890:4;11887:1;11880:15;11914:4;11911:1;11904:15;11930:250;12015:1;12025:113;12039:6;12036:1;12033:13;12025:113;;;12115:11;;;12109:18;12096:11;;;12089:39;12061:2;12054:10;12025:113;;;-1:-1:-1;;12172:1:1;12154:16;;12147:27;11930:250::o;12185:270::-;12226:3;12264:5;12258:12;12291:6;12286:3;12279:19;12307:76;12376:6;12369:4;12364:3;12360:14;12353:4;12346:5;12342:16;12307:76;:::i;:::-;12437:2;12416:15;-1:-1:-1;;12412:29:1;12403:39;;;;12444:4;12399:50;;12185:270;-1:-1:-1;;12185:270:1:o;12460:1626::-;12726:4;12755:2;12795;12784:9;12780:18;12825:2;12814:9;12807:21;12848:6;12883;12877:13;12914:6;12906;12899:22;12952:3;12941:9;12937:19;12930:26;;13015:3;13005:6;13002:1;12998:14;12987:9;12983:30;12979:40;12965:54;;13038:4;13077:2;13069:6;13065:15;13098:1;13119;13129:786;13145:6;13140:3;13137:15;13129:786;;;13214:22;;;-1:-1:-1;;13210:37:1;13198:50;;13271:13;;13316:9;;-1:-1:-1;;;;;13312:35:1;13297:51;;13387:11;;;13381:18;13439:1;13422:19;;13412:170;;-1:-1:-1;;;13473:31:1;;13531:4;13528:1;13521:15;13563:4;13480:1;13553:15;13412:170;13602:15;;;13595:37;13655:4;13700:11;;;13694:18;13732:15;;;13725:27;;;13775:60;13819:15;;;13694:18;13775:60;:::i;:::-;13765:70;-1:-1:-1;;13893:12:1;;;;13858:15;;;;13171:1;13162:11;13129:786;;;-1:-1:-1;;;;;;;;2590:31:1;;13951:18;;;2578:44;-1:-1:-1;;14008:22:1;;;14001:4;13986:20;;13979:52;14048:32;14012:6;14065;14048:32;:::i;:::-;14040:40;12460:1626;-1:-1:-1;;;;;;;12460:1626:1:o;15667:398::-;15869:2;15851:21;;;15908:2;15888:18;;;15881:30;15947:34;15942:2;15927:18;;15920:62;-1:-1:-1;;;16013:2:1;15998:18;;15991:32;16055:3;16040:19;;15667:398::o;17725:287::-;17854:3;17892:6;17886:13;17908:66;17967:6;17962:3;17955:4;17947:6;17943:17;17908:66;:::i;:::-;17990:16;;;;;17725:287;-1:-1:-1;;17725:287:1:o
Swarm Source
ipfs://317d3dcbd7997e60203f110d847f3020f52eedc93a9ba23dd1355c0a7b331d95
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.