Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 78 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 21482924 | 26 days ago | IN | 0 ETH | 0.00034348 | ||||
Set Approval For... | 20621284 | 146 days ago | IN | 0 ETH | 0.0002938 | ||||
Safe Transfer Fr... | 20370064 | 181 days ago | IN | 0 ETH | 0.00035778 | ||||
Safe Transfer Fr... | 19449046 | 310 days ago | IN | 0 ETH | 0.00188657 | ||||
Safe Transfer Fr... | 19445142 | 311 days ago | IN | 0 ETH | 0.00148577 | ||||
Safe Transfer Fr... | 19293536 | 332 days ago | IN | 0 ETH | 0.00120448 | ||||
Safe Transfer Fr... | 19275745 | 334 days ago | IN | 0 ETH | 0.00131488 | ||||
Safe Transfer Fr... | 19257103 | 337 days ago | IN | 0 ETH | 0.00121198 | ||||
Safe Transfer Fr... | 19220640 | 342 days ago | IN | 0 ETH | 0.00148067 | ||||
Safe Transfer Fr... | 18802181 | 401 days ago | IN | 0 ETH | 0.00171507 | ||||
Safe Transfer Fr... | 18641033 | 423 days ago | IN | 0 ETH | 0.00150534 | ||||
Safe Transfer Fr... | 18457623 | 449 days ago | IN | 0 ETH | 0.00083534 | ||||
Set Approval For... | 18390213 | 458 days ago | IN | 0 ETH | 0.0002668 | ||||
Set Approval For... | 18390213 | 458 days ago | IN | 0 ETH | 0.00026773 | ||||
Set Approval For... | 18191987 | 486 days ago | IN | 0 ETH | 0.00060493 | ||||
Set Approval For... | 18169307 | 489 days ago | IN | 0 ETH | 0.00038991 | ||||
Set Approval For... | 17926262 | 523 days ago | IN | 0 ETH | 0.0008418 | ||||
Safe Transfer Fr... | 17508759 | 582 days ago | IN | 0 ETH | 0.00072853 | ||||
Safe Transfer Fr... | 17349738 | 604 days ago | IN | 0 ETH | 0.00111502 | ||||
Safe Transfer Fr... | 16938872 | 662 days ago | IN | 0 ETH | 0.00163095 | ||||
Safe Transfer Fr... | 16883261 | 670 days ago | IN | 0 ETH | 0.00090149 | ||||
Safe Transfer Fr... | 16645093 | 704 days ago | IN | 0 ETH | 0.0013698 | ||||
Safe Transfer Fr... | 16597643 | 710 days ago | IN | 0 ETH | 0.00109322 | ||||
Set Approval For... | 16548009 | 717 days ago | IN | 0 ETH | 0.00095834 | ||||
Set Approval For... | 16527962 | 720 days ago | IN | 0 ETH | 0.00155784 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ResistanceClub
Compiler Version
v0.7.4+commit.3f05b770
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-11 */ // File: contracts/interfaces/IERC1155Metadata.sol pragma solidity 0.7.4; interface IERC1155Metadata { event URI(string _uri, uint256 indexed _id); /****************************************| | Functions | |_______________________________________*/ /** * @notice A distinct Uniform Resource Identifier (URI) for a given token. * @dev URIs are defined in RFC 3986. * URIs are assumed to be deterministically generated based on token ID * Token IDs are assumed to be represented in their hex format in URIs * @return URI string */ function uri(uint256 _id) external view returns (string memory); } // File: contracts/utils/Ownable.sol pragma solidity 0.7.4; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address private _owner_; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor () { _owner_ = msg.sender; emit OwnershipTransferred(address(0), _owner_); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == _owner_, "Ownable#onlyOwner: SENDER_IS_NOT_OWNER"); _; } /** * @notice Transfers the ownership of the contract to new address * @param _newOwner Address of the new owner */ function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != address(0), "Ownable#transferOwnership: INVALID_ADDRESS"); emit OwnershipTransferred(_owner_, _newOwner); _owner_ = _newOwner; } /** * @notice Returns the address of the owner. */ function owner() public view returns (address) { return _owner_; } } // File: contracts/utils/Address.sol pragma solidity 0.7.4; /** * Utility library of inline functions on addresses */ library Address { // Default hash for EOA accounts returned by extcodehash bytes32 constant internal ACCOUNT_HASH = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract. * @param _address address of the account to check * @return Whether the target address is a contract */ function isContract(address _address) internal view returns (bool) { bytes32 codehash; // Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address or if it has a non-zero code hash or account hash assembly { codehash := extcodehash(_address) } return (codehash != 0x0 && codehash != ACCOUNT_HASH); } } // File: contracts/interfaces/IERC165.sol pragma solidity 0.7.4; /** * @title ERC165 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md */ interface IERC165 { /** * @notice Query if a contract implements an interface * @dev Interface identification is specified in ERC-165. This function * uses less than 30,000 gas * @param _interfaceId The interface identifier, as specified in ERC-165 */ function supportsInterface(bytes4 _interfaceId) external view returns (bool); } // File: contracts/utils/ERC165.sol pragma solidity 0.7.4; abstract contract ERC165 is IERC165 { /** * @notice Query if a contract implements an interface * @param _interfaceID The interface identifier, as specified in ERC-165 * @return `true` if the contract implements `_interfaceID` */ function supportsInterface(bytes4 _interfaceID) virtual override public view returns (bool) { return _interfaceID == this.supportsInterface.selector; } } // File: contracts/interfaces/IERC1155.sol pragma solidity 0.7.4; interface IERC1155 is IERC165 { /****************************************| | Events | |_______________________________________*/ /** * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning * Operator MUST be msg.sender * When minting/creating tokens, the `_from` field MUST be set to `0x0` * When burning/destroying tokens, the `_to` field MUST be set to `0x0` * The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID * To broadcast the existence of a token ID with no initial balance, the contract SHOULD emit the TransferSingle event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0 */ event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount); /** * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning * Operator MUST be msg.sender * When minting/creating tokens, the `_from` field MUST be set to `0x0` * When burning/destroying tokens, the `_to` field MUST be set to `0x0` * The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID * To broadcast the existence of multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0 */ event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts); /** * @dev MUST emit when an approval is updated */ event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /****************************************| | Functions | |_______________________________________*/ /** * @notice Transfers amount of an _id from the _from address to the _to address specified * @dev MUST emit TransferSingle event on success * Caller must be approved to manage the _from account's tokens (see isApprovedForAll) * MUST throw if `_to` is the zero address * MUST throw if balance of sender for token `_id` is lower than the `_amount` sent * MUST throw on any other error * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155Received` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount * @param _data Additional data with no specified format, sent in call to `_to` */ function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external; /** * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call) * @dev MUST emit TransferBatch event on success * Caller must be approved to manage the _from account's tokens (see isApprovedForAll) * MUST throw if `_to` is the zero address * MUST throw if length of `_ids` is not the same as length of `_amounts` * MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_amounts` sent * MUST throw on any other error * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * Transfers and events MUST occur in the array order they were submitted (_ids[0] before _ids[1], etc) * @param _from Source addresses * @param _to Target addresses * @param _ids IDs of each token type * @param _amounts Transfer amounts per token type * @param _data Additional data with no specified format, sent in call to `_to` */ function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external; /** * @notice Get the balance of an account's Tokens * @param _owner The address of the token holder * @param _id ID of the Token * @return The _owner's balance of the Token type requested */ function balanceOf(address _owner, uint256 _id) external view returns (uint256); /** * @notice Get the balance of multiple account/token pairs * @param _owners The addresses of the token holders * @param _ids ID of the Tokens * @return The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair) */ function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory); /** * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens * @dev MUST emit the ApprovalForAll event on success * @param _operator Address to add to the set of authorized operators * @param _approved True if the operator is approved, false to revoke approval */ function setApprovalForAll(address _operator, bool _approved) external; /** * @notice Queries the approval status of an operator for a given owner * @param _owner The owner of the Tokens * @param _operator Address of authorized operator * @return isOperator True if the operator is approved, false if not */ function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator); } // File: contracts/interfaces/IERC1155TokenReceiver.sol pragma solidity 0.7.4; /** * @dev ERC-1155 interface for accepting safe transfers. */ interface IERC1155TokenReceiver { /** * @notice Handle the receipt of a single ERC1155 token type * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated * This function MAY throw to revert and reject the transfer * Return of other amount than the magic value MUST result in the transaction being reverted * Note: The token contract address is always the message sender * @param _operator The address which called the `safeTransferFrom` function * @param _from The address which previously owned the token * @param _id The id of the token being transferred * @param _amount The amount of tokens being transferred * @param _data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` */ function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _amount, bytes calldata _data) external returns(bytes4); /** * @notice Handle the receipt of multiple ERC1155 token types * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated * This function MAY throw to revert and reject the transfer * Return of other amount than the magic value WILL result in the transaction being reverted * Note: The token contract address is always the message sender * @param _operator The address which called the `safeBatchTransferFrom` function * @param _from The address which previously owned the token * @param _ids An array containing ids of each token being transferred * @param _amounts An array containing amounts of each token being transferred * @param _data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` */ function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external returns(bytes4); } // File: contracts/utils/SafeMath.sol pragma solidity 0.7.4; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath#mul: OVERFLOW"); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath#div: DIVISION_BY_ZERO"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath#sub: UNDERFLOW"); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath#add: OVERFLOW"); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath#mod: DIVISION_BY_ZERO"); return a % b; } } // File: contracts/ERC1155PackedBalance.sol pragma solidity 0.7.4; /** * @dev Implementation of Multi-Token Standard contract. This implementation of the ERC-1155 standard * utilizes the fact that balances of different token ids can be concatenated within individual * uint256 storage slots. This allows the contract to batch transfer tokens more efficiently at * the cost of limiting the maximum token balance each address can hold. This limit is * 2^IDS_BITS_SIZE, which can be adjusted below. In practice, using IDS_BITS_SIZE smaller than 16 * did not lead to major efficiency gains. */ contract ERC1155PackedBalance is IERC1155, ERC165 { using SafeMath for uint256; using Address for address; /***********************************| | Variables and Events | |__________________________________*/ // onReceive function signatures bytes4 constant internal ERC1155_RECEIVED_VALUE = 0xf23a6e61; bytes4 constant internal ERC1155_BATCH_RECEIVED_VALUE = 0xbc197c81; // Constants regarding bin sizes for balance packing // IDS_BITS_SIZE **MUST** be a power of 2 (e.g. 2, 4, 8, 16, 32, 64, 128) uint256 internal constant IDS_BITS_SIZE = 32; // Max balance amount in bits per token ID uint256 internal constant IDS_PER_UINT256 = 256 / IDS_BITS_SIZE; // Number of ids per uint256 // Operations for _updateIDBalance enum Operations { Add, Sub } // Token IDs balances ; balances[address][id] => balance (using array instead of mapping for efficiency) mapping (address => mapping(uint256 => uint256)) internal balances; // Operators mapping (address => mapping(address => bool)) internal operators; /***********************************| | Public Transfer Functions | |__________________________________*/ /** * @notice Transfers amount amount of an _id from the _from address to the _to address specified * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount * @param _data Additional data with no specified format, sent in call to `_to` */ function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data) public override { // Requirements require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155PackedBalance#safeTransferFrom: INVALID_OPERATOR"); require(_to != address(0),"ERC1155PackedBalance#safeTransferFrom: INVALID_RECIPIENT"); // require(_amount <= balances); Not necessary since checked with _viewUpdateBinValue() checks _safeTransferFrom(_from, _to, _id, _amount); _callonERC1155Received(_from, _to, _id, _amount, gasleft(), _data); } /** * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call) * @dev Arrays should be sorted so that all ids in a same storage slot are adjacent (more efficient) * @param _from Source addresses * @param _to Target addresses * @param _ids IDs of each token type * @param _amounts Transfer amounts per token type * @param _data Additional data with no specified format, sent in call to `_to` */ function safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data) public override { // Requirements require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155PackedBalance#safeBatchTransferFrom: INVALID_OPERATOR"); require(_to != address(0),"ERC1155PackedBalance#safeBatchTransferFrom: INVALID_RECIPIENT"); _safeBatchTransferFrom(_from, _to, _ids, _amounts); _callonERC1155BatchReceived(_from, _to, _ids, _amounts, gasleft(), _data); } /***********************************| | Internal Transfer Functions | |__________________________________*/ /** * @notice Transfers amount amount of an _id from the _from address to the _to address specified * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount */ function _safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount) internal { //Update balances _updateIDBalance(_from, _id, _amount, Operations.Sub); // Subtract amount from sender _updateIDBalance(_to, _id, _amount, Operations.Add); // Add amount to recipient // Emit event emit TransferSingle(msg.sender, _from, _to, _id, _amount); } /** * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155Received(...) */ function _callonERC1155Received(address _from, address _to, uint256 _id, uint256 _amount, uint256 _gasLimit, bytes memory _data) internal { // Check if recipient is contract if (_to.isContract()) { bytes4 retval = IERC1155TokenReceiver(_to).onERC1155Received{gas:_gasLimit}(msg.sender, _from, _id, _amount, _data); require(retval == ERC1155_RECEIVED_VALUE, "ERC1155PackedBalance#_callonERC1155Received: INVALID_ON_RECEIVE_MESSAGE"); } } /** * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call) * @dev Arrays should be sorted so that all ids in a same storage slot are adjacent (more efficient) * @param _from Source addresses * @param _to Target addresses * @param _ids IDs of each token type * @param _amounts Transfer amounts per token type */ function _safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts) internal { uint256 nTransfer = _ids.length; // Number of transfer to execute require(nTransfer == _amounts.length, "ERC1155PackedBalance#_safeBatchTransferFrom: INVALID_ARRAYS_LENGTH"); if (_from != _to && nTransfer > 0) { // Load first bin and index where the token ID balance exists (uint256 bin, uint256 index) = getIDBinIndex(_ids[0]); // Balance for current bin in memory (initialized with first transfer) uint256 balFrom = _viewUpdateBinValue(balances[_from][bin], index, _amounts[0], Operations.Sub); uint256 balTo = _viewUpdateBinValue(balances[_to][bin], index, _amounts[0], Operations.Add); // Last bin updated uint256 lastBin = bin; for (uint256 i = 1; i < nTransfer; i++) { (bin, index) = getIDBinIndex(_ids[i]); // If new bin if (bin != lastBin) { // Update storage balance of previous bin balances[_from][lastBin] = balFrom; balances[_to][lastBin] = balTo; balFrom = balances[_from][bin]; balTo = balances[_to][bin]; // Bin will be the most recent bin lastBin = bin; } // Update memory balance balFrom = _viewUpdateBinValue(balFrom, index, _amounts[i], Operations.Sub); balTo = _viewUpdateBinValue(balTo, index, _amounts[i], Operations.Add); } // Update storage of the last bin visited balances[_from][bin] = balFrom; balances[_to][bin] = balTo; // If transfer to self, just make sure all amounts are valid } else { for (uint256 i = 0; i < nTransfer; i++) { require(balanceOf(_from, _ids[i]) >= _amounts[i], "ERC1155PackedBalance#_safeBatchTransferFrom: UNDERFLOW"); } } // Emit event emit TransferBatch(msg.sender, _from, _to, _ids, _amounts); } /** * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155BatchReceived(...) */ function _callonERC1155BatchReceived(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, uint256 _gasLimit, bytes memory _data) internal { // Pass data if recipient is contract if (_to.isContract()) { bytes4 retval = IERC1155TokenReceiver(_to).onERC1155BatchReceived{gas: _gasLimit}(msg.sender, _from, _ids, _amounts, _data); require(retval == ERC1155_BATCH_RECEIVED_VALUE, "ERC1155PackedBalance#_callonERC1155BatchReceived: INVALID_ON_RECEIVE_MESSAGE"); } } /***********************************| | Operator Functions | |__________________________________*/ /** * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens * @param _operator Address to add to the set of authorized operators * @param _approved True if the operator is approved, false to revoke approval */ function setApprovalForAll(address _operator, bool _approved) external override { // Update operator status operators[msg.sender][_operator] = _approved; emit ApprovalForAll(msg.sender, _operator, _approved); } /** * @notice Queries the approval status of an operator for a given owner * @param _owner The owner of the Tokens * @param _operator Address of authorized operator * @return isOperator True if the operator is approved, false if not */ function isApprovedForAll(address _owner, address _operator) public override view returns (bool isOperator) { return operators[_owner][_operator]; } /***********************************| | Public Balance Functions | |__________________________________*/ /** * @notice Get the balance of an account's Tokens * @param _owner The address of the token holder * @param _id ID of the Token * @return The _owner's balance of the Token type requested */ function balanceOf(address _owner, uint256 _id) public override view returns (uint256) { uint256 bin; uint256 index; //Get bin and index of _id (bin, index) = getIDBinIndex(_id); return getValueInBin(balances[_owner][bin], index); } /** * @notice Get the balance of multiple account/token pairs * @param _owners The addresses of the token holders (sorted owners will lead to less gas usage) * @param _ids ID of the Tokens (sorted ids will lead to less gas usage * @return The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair) */ function balanceOfBatch(address[] memory _owners, uint256[] memory _ids) public override view returns (uint256[] memory) { uint256 n_owners = _owners.length; require(n_owners == _ids.length, "ERC1155PackedBalance#balanceOfBatch: INVALID_ARRAY_LENGTH"); // First values (uint256 bin, uint256 index) = getIDBinIndex(_ids[0]); uint256 balance_bin = balances[_owners[0]][bin]; uint256 last_bin = bin; // Initialization uint256[] memory batchBalances = new uint256[](n_owners); batchBalances[0] = getValueInBin(balance_bin, index); // Iterate over each owner and token ID for (uint256 i = 1; i < n_owners; i++) { (bin, index) = getIDBinIndex(_ids[i]); // SLOAD if bin changed for the same owner or if owner changed if (bin != last_bin || _owners[i-1] != _owners[i]) { balance_bin = balances[_owners[i]][bin]; last_bin = bin; } batchBalances[i] = getValueInBin(balance_bin, index); } return batchBalances; } /***********************************| | Packed Balance Functions | |__________________________________*/ /** * @notice Update the balance of a id for a given address * @param _address Address to update id balance * @param _id Id to update balance of * @param _amount Amount to update the id balance * @param _operation Which operation to conduct : * Operations.Add: Add _amount to id balance * Operations.Sub: Substract _amount from id balance */ function _updateIDBalance(address _address, uint256 _id, uint256 _amount, Operations _operation) internal { uint256 bin; uint256 index; // Get bin and index of _id (bin, index) = getIDBinIndex(_id); // Update balance balances[_address][bin] = _viewUpdateBinValue(balances[_address][bin], index, _amount, _operation); } /** * @notice Update a value in _binValues * @param _binValues Uint256 containing values of size IDS_BITS_SIZE (the token balances) * @param _index Index of the value in the provided bin * @param _amount Amount to update the id balance * @param _operation Which operation to conduct : * Operations.Add: Add _amount to value in _binValues at _index * Operations.Sub: Substract _amount from value in _binValues at _index */ function _viewUpdateBinValue(uint256 _binValues, uint256 _index, uint256 _amount, Operations _operation) internal pure returns (uint256 newBinValues) { uint256 shift = IDS_BITS_SIZE * _index; uint256 mask = (uint256(1) << IDS_BITS_SIZE) - 1; if (_operation == Operations.Add) { newBinValues = _binValues + (_amount << shift); require(newBinValues >= _binValues, "ERC1155PackedBalance#_viewUpdateBinValue: OVERFLOW"); require( ((_binValues >> shift) & mask) + _amount < 2**IDS_BITS_SIZE, // Checks that no other id changed "ERC1155PackedBalance#_viewUpdateBinValue: OVERFLOW" ); } else if (_operation == Operations.Sub) { newBinValues = _binValues - (_amount << shift); require(newBinValues <= _binValues, "ERC1155PackedBalance#_viewUpdateBinValue: UNDERFLOW"); require( ((_binValues >> shift) & mask) >= _amount, // Checks that no other id changed "ERC1155PackedBalance#_viewUpdateBinValue: UNDERFLOW" ); } else { revert("ERC1155PackedBalance#_viewUpdateBinValue: INVALID_BIN_WRITE_OPERATION"); // Bad operation } return newBinValues; } /** * @notice Return the bin number and index within that bin where ID is * @param _id Token id * @return bin index (Bin number, ID"s index within that bin) */ function getIDBinIndex(uint256 _id) public pure returns (uint256 bin, uint256 index) { bin = _id / IDS_PER_UINT256; index = _id % IDS_PER_UINT256; return (bin, index); } /** * @notice Return amount in _binValues at position _index * @param _binValues uint256 containing the balances of IDS_PER_UINT256 ids * @param _index Index at which to retrieve amount * @return amount at given _index in _bin */ function getValueInBin(uint256 _binValues, uint256 _index) public pure returns (uint256) { // require(_index < IDS_PER_UINT256) is not required since getIDBinIndex ensures `_index < IDS_PER_UINT256` // Mask to retrieve data for a given binData uint256 mask = (uint256(1) << IDS_BITS_SIZE) - 1; // Shift amount uint256 rightShift = IDS_BITS_SIZE * _index; return (_binValues >> rightShift) & mask; } /***********************************| | ERC165 Functions | |__________________________________*/ /** * @notice Query if a contract implements an interface * @param _interfaceID The interface identifier, as specified in ERC-165 * @return `true` if the contract implements `_interfaceID` and */ function supportsInterface(bytes4 _interfaceID) public override(ERC165, IERC165) virtual view returns (bool) { if (_interfaceID == type(IERC1155).interfaceId) { return true; } return super.supportsInterface(_interfaceID); } } // File: contracts/ERC1155MintBurnPackedBalance.sol pragma solidity 0.7.4; /** * @dev Multi-Fungible Tokens with minting and burning methods. These methods assume * a parent contract to be executed as they are `internal` functions. */ contract ERC1155MintBurnPackedBalance is ERC1155PackedBalance { /****************************************| | Minting Functions | |_______________________________________*/ /** * @notice Mint _amount of tokens of a given id * @param _to The address to mint tokens to * @param _id Token id to mint * @param _amount The amount to be minted * @param _data Data to pass if receiver is contract */ function _mint(address _to, uint256 _id, uint256 _amount, bytes memory _data) internal { //Add _amount _updateIDBalance(_to, _id, _amount, Operations.Add); // Add amount to recipient // Emit event emit TransferSingle(msg.sender, address(0x0), _to, _id, _amount); // Calling onReceive method if recipient is contract _callonERC1155Received(address(0x0), _to, _id, _amount, gasleft(), _data); } /** * @notice Mint tokens for each (_ids[i], _amounts[i]) pair * @param _to The address to mint tokens to * @param _ids Array of ids to mint * @param _amounts Array of amount of tokens to mint per id * @param _data Data to pass if receiver is contract */ function _batchMint(address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data) internal { require(_ids.length == _amounts.length, "ERC1155MintBurnPackedBalance#_batchMint: INVALID_ARRAYS_LENGTH"); if (_ids.length > 0) { // Load first bin and index where the token ID balance exists (uint256 bin, uint256 index) = getIDBinIndex(_ids[0]); // Balance for current bin in memory (initialized with first transfer) uint256 balTo = _viewUpdateBinValue(balances[_to][bin], index, _amounts[0], Operations.Add); // Number of transfer to execute uint256 nTransfer = _ids.length; // Last bin updated uint256 lastBin = bin; for (uint256 i = 1; i < nTransfer; i++) { (bin, index) = getIDBinIndex(_ids[i]); // If new bin if (bin != lastBin) { // Update storage balance of previous bin balances[_to][lastBin] = balTo; balTo = balances[_to][bin]; // Bin will be the most recent bin lastBin = bin; } // Update memory balance balTo = _viewUpdateBinValue(balTo, index, _amounts[i], Operations.Add); } // Update storage of the last bin visited balances[_to][bin] = balTo; } // //Emit event emit TransferBatch(msg.sender, address(0x0), _to, _ids, _amounts); // Calling onReceive method if recipient is contract _callonERC1155BatchReceived(address(0x0), _to, _ids, _amounts, gasleft(), _data); } /****************************************| | Burning Functions | |_______________________________________*/ /** * @notice Burn _amount of tokens of a given token id * @param _from The address to burn tokens from * @param _id Token id to burn * @param _amount The amount to be burned */ function _burn(address _from, uint256 _id, uint256 _amount) internal { // Substract _amount _updateIDBalance(_from, _id, _amount, Operations.Sub); // Emit event emit TransferSingle(msg.sender, _from, address(0x0), _id, _amount); } /** * @notice Burn tokens of given token id for each (_ids[i], _amounts[i]) pair * @dev This batchBurn method does not implement the most efficient way of updating * balances to reduce the potential bug surface as this function is expected to * be less common than transfers. EIP-2200 makes this method significantly * more efficient already for packed balances. * @param _from The address to burn tokens from * @param _ids Array of token ids to burn * @param _amounts Array of the amount to be burned */ function _batchBurn(address _from, uint256[] memory _ids, uint256[] memory _amounts) internal { // Number of burning to execute uint256 nBurn = _ids.length; require(nBurn == _amounts.length, "ERC1155MintBurnPackedBalance#batchBurn: INVALID_ARRAYS_LENGTH"); // Executing all burning for (uint256 i = 0; i < nBurn; i++) { // Update storage balance _updateIDBalance(_from, _ids[i], _amounts[i], Operations.Sub); // Add amount to recipient } // Emit batch burn event emit TransferBatch(msg.sender, _from, address(0x0), _ids, _amounts); } } // File: contracts/ResistanceClub.sol pragma solidity 0.7.4; contract ResistanceClub is ERC1155MintBurnPackedBalance, Ownable, IERC1155Metadata { uint256 public constant RED = 0; uint256 public constant BEIGE = 1; mapping (uint => string) private _metadata; string private _contractMetadataURI; uint96 royaltyFeesInBips; address royaltyAddress; function setMetadata(uint _tokenId, string calldata newMetadata) public onlyOwner { _metadata[_tokenId] = newMetadata; } function setContractMetadataURI(string memory contractMetadataURI) public onlyOwner { _contractMetadataURI = contractMetadataURI; } function contractURI() public view returns (string memory) { return _contractMetadataURI; } function uri (uint _tokenId) override public view returns (string memory) { return _metadata[_tokenId]; } function name() public pure returns (string memory) { return "Resistance Club"; } function symbol() public pure returns (string memory) { return "RESISTANCE"; } function setRoyaltyInfo(address _receiver, uint96 _royaltyFeesInBips) public onlyOwner { royaltyAddress = _receiver; royaltyFeesInBips = _royaltyFeesInBips; } function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view virtual returns (address, uint256) { return (royaltyAddress, calculateRoyalty(_salePrice)); } function calculateRoyalty(uint256 _salePrice) view public returns (uint256) { return (_salePrice / 10000) * royaltyFeesInBips; } function supportsInterface(bytes4 interfaceId) public view override returns (bool){ return interfaceId == 0x2a55205a || super.supportsInterface(interfaceId); } constructor() ERC1155MintBurnPackedBalance() { _mint(address(0x2DADCD5248FB059a47192b8b182c8811E0ECDc9e), RED, 50, ""); _mint(address(0x2DADCD5248FB059a47192b8b182c8811E0ECDc9e), BEIGE, 100, ""); _metadata[0] = "ipfs://QmQXaU23fXTbM3BCkj4811pyAgcZAf8ukT14wskJYkPr2r"; _metadata[1] = "ipfs://QmehLQ8vmizor9uEXE2HDwh3rCBfJ8BPTmUECg81udon8n"; _contractMetadataURI = "ipfs://QmVa6y1jqCAbXH9HG6GjHATnjch5Cqmj799SM34yfZbsZy"; royaltyFeesInBips = 1000; royaltyAddress = 0x2DADCD5248FB059a47192b8b182c8811E0ECDc9e; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_uri","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"BEIGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"calculateRoyalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getIDBinIndex","outputs":[{"internalType":"uint256","name":"bin","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_binValues","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getValueInBin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractMetadataURI","type":"string"}],"name":"setContractMetadataURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"newMetadata","type":"string"}],"name":"setMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint96","name":"_royaltyFeesInBips","type":"uint96"}],"name":"setRoyaltyInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50600280546001600160a01b0319163317908190556040516001600160a01b0391909116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a362000097732dadcd5248fb059a47192b8b182c8811e0ecdc9e6000603260405180602001604052806000815250620001f760201b60201c565b620000d0732dadcd5248fb059a47192b8b182c8811e0ecdc9e6001606460405180602001604052806000815250620001f760201b60201c565b6040518060600160405280603581526020016200277d603591396000805260036020908152815162000126927f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff92019062000652565b50604051806060016040528060358152602001620027486035913960016000526003602090815281516200017e927fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c92019062000652565b50604051806060016040528060358152602001620028a3603591398051620001af9160049160209091019062000652565b50600580547f2dadcd5248fb059a47192b8b182c8811e0ecdc9e0000000000000000000000006001600160601b03199091166103e8176001600160601b0316179055620006fe565b62000206848484600062000268565b604080518481526020810184905281516001600160a01b0387169260009233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a46200026260008585855a86620002d9565b50505050565b60008062000276856200046b565b6001600160a01b0388166000908152602081815260408083208584529091529020549193509150620002ab9082868662000478565b6001600160a01b03909616600090815260208181526040808320948352939052919091209490945550505050565b620002f8856001600160a01b03166200061760201b620011fa1760201c565b1562000463576000856001600160a01b031663f23a6e6184338a8989886040518763ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156200038d57818101518382015260200162000373565b50505050905090810190601f168015620003bb5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600088803b158015620003df57600080fd5b5087f1158015620003f4573d6000803e3d6000fd5b50505050506040513d60208110156200040c57600080fd5b505190506001600160e01b0319811663f23a6e6160e01b14620004615760405162461bcd60e51b8152600401808060200182810382526047815260200180620027e56047913960600191505060405180910390fd5b505b505050505050565b6008810491600790911690565b60006020840263ffffffff828460018111156200049157fe5b1415620005315784821b8701925086831015620004e05760405162461bcd60e51b8152600401808060200182810382526032815260200180620028716032913960400191505060405180910390fd5b64010000000087831c82168601106200052b5760405162461bcd60e51b8152600401808060200182810382526032815260200180620028716032913960400191505060405180910390fd5b6200060d565b60018460018111156200054057fe5b1415620005d55784821b87039250868311156200058f5760405162461bcd60e51b8152600401808060200182810382526033815260200180620027b26033913960400191505060405180910390fd5b84818389901c1610156200052b5760405162461bcd60e51b8152600401808060200182810382526033815260200180620027b26033913960400191505060405180910390fd5b60405162461bcd60e51b81526004018080602001828103825260458152602001806200282c6045913960600191505060405180910390fd5b5050949350505050565b6000813f80158015906200064b57507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200068a5760008555620006d5565b82601f10620006a557805160ff1916838001178555620006d5565b82800160010185558215620006d5579182015b82811115620006d5578251825591602001919060010190620006b8565b50620006e3929150620006e7565b5090565b5b80821115620006e35760008155600101620006e8565b61203a806200070e6000396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c80638da5cb5b116100b8578063db90e83c1161007c578063db90e83c146107aa578063e8a3d485146107e0578063e985e9c5146107e8578063eaec5f8114610816578063f242432a14610839578063f2fde38b1461090257610141565b80638da5cb5b1461068f57806395d89b41146106b3578063a201fc50146106bb578063a22cb4651461075f578063a2e696131461078d57610141565b80630e89341c1161010a5780630e89341c1461027b5780632a55205a146102985780632eb2c2d6146102de57806336d18b671461049f5780634e1273f4146104a7578063593aa2831461061a57610141565b8062fdd58e1461014657806301ffc9a71461018457806302fa7c47146101bf57806306fdde03146101f65780630b9fd4e514610273575b600080fd5b6101726004803603604081101561015c57600080fd5b506001600160a01b038135169060200135610928565b60408051918252519081900360200190f35b6101ab6004803603602081101561019a57600080fd5b50356001600160e01b031916610970565b604080519115158252519081900360200190f35b6101f4600480360360408110156101d557600080fd5b5080356001600160a01b031690602001356001600160601b031661099d565b005b6101fe610a23565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610238578181015183820152602001610220565b50505050905090810190601f1680156102655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610172610a4c565b6101fe6004803603602081101561029157600080fd5b5035610a51565b6102bb600480360360408110156102ae57600080fd5b5080359060200135610af2565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6101f4600480360360a08110156102f457600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561032757600080fd5b82018360208201111561033957600080fd5b803590602001918460208302840111600160201b8311171561035a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103a957600080fd5b8201836020820111156103bb57600080fd5b803590602001918460208302840111600160201b831117156103dc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561042b57600080fd5b82018360208201111561043d57600080fd5b803590602001918460018302840111600160201b8311171561045e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b1e945050505050565b610172610bdb565b6105ca600480360360408110156104bd57600080fd5b810190602081018135600160201b8111156104d757600080fd5b8201836020820111156104e957600080fd5b803590602001918460208302840111600160201b8311171561050a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561055957600080fd5b82018360208201111561056b57600080fd5b803590602001918460208302840111600160201b8311171561058c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610be0945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106065781810151838201526020016105ee565b505050509050019250505060405180910390f35b6101f46004803603604081101561063057600080fd5b81359190810190604081016020820135600160201b81111561065157600080fd5b82018360208201111561066357600080fd5b803590602001918460018302840111600160201b8311171561068457600080fd5b509092509050610df7565b610697610e5f565b604080516001600160a01b039092168252519081900360200190f35b6101fe610e6e565b6101f4600480360360208110156106d157600080fd5b810190602081018135600160201b8111156106eb57600080fd5b8201836020820111156106fd57600080fd5b803590602001918460018302840111600160201b8311171561071e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e92945050505050565b6101f46004803603604081101561077557600080fd5b506001600160a01b0381351690602001351515610ef2565b610172600480360360208110156107a357600080fd5b5035610f60565b6107c7600480360360208110156107c057600080fd5b5035610f76565b6040805192835260208301919091528051918290030190f35b6101fe610f83565b6101ab600480360360408110156107fe57600080fd5b506001600160a01b0381358116916020013516611019565b6101726004803603604081101561082c57600080fd5b5080359060200135611047565b6101f4600480360360a081101561084f57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561088e57600080fd5b8201836020820111156108a057600080fd5b803590602001918460018302840111600160201b831117156108c157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061105a945050505050565b6101f46004803603602081101561091857600080fd5b50356001600160a01b0316611110565b600080600061093684610f76565b6001600160a01b03871660009081526020818152604080832085845290915290205491935091506109679082611047565b95945050505050565b600063152a902d60e11b6001600160e01b031983161480610995575061099582611234565b90505b919050565b6002546001600160a01b031633146109e65760405162461bcd60e51b8152600401808060200182810382526026815260200180611f686026913960400191505060405180910390fd5b600580546001600160601b039283166001600160a01b03909416600160601b029216919091176bffffffffffffffffffffffff1916919091179055565b60408051808201909152600f81526e2932b9b4b9ba30b731b29021b63ab160891b602082015290565b600181565b60008181526003602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845260609392830182828015610ae65780601f10610abb57610100808354040283529160200191610ae6565b820191906000526020600020905b815481529060010190602001808311610ac957829003601f168201915b50505050509050919050565b6005546000908190600160601b90046001600160a01b0316610b1384610f60565b915091509250929050565b336001600160a01b0386161480610b3a5750610b3a8533611019565b610b755760405162461bcd60e51b815260040180806020018281038252603c815260200180611e77603c913960400191505060405180910390fd5b6001600160a01b038416610bba5760405162461bcd60e51b815260040180806020018281038252603d815260200180611d18603d913960400191505060405180910390fd5b610bc685858585611260565b610bd4858585855a866115c4565b5050505050565b600081565b81518151606091908114610c255760405162461bcd60e51b8152600401808060200182810382526039815260200180611cdf6039913960400191505060405180910390fd5b600080610c4585600081518110610c3857fe5b6020026020010151610f76565b91509150600080600088600081518110610c5b57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000848152602001908152602001600020549050600083905060608567ffffffffffffffff81118015610cb557600080fd5b50604051908082528060200260200182016040528015610cdf578160200160208202803683370190505b509050610cec8385611047565b81600081518110610cf957fe5b602090810291909101015260015b86811015610dea57610d1e898281518110610c3857fe5b90965094508286141580610d6d5750898181518110610d3957fe5b60200260200101516001600160a01b03168a6001830381518110610d5957fe5b60200260200101516001600160a01b031614155b15610dc1576000808b8381518110610d8157fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008781526020019081526020016000205493508592505b610dcb8486611047565b828281518110610dd757fe5b6020908102919091010152600101610d07565b5098975050505050505050565b6002546001600160a01b03163314610e405760405162461bcd60e51b8152600401808060200182810382526026815260200180611f686026913960400191505060405180910390fd5b6000838152600360205260409020610e59908383611bc1565b50505050565b6002546001600160a01b031690565b60408051808201909152600a815269524553495354414e434560b01b602082015290565b6002546001600160a01b03163314610edb5760405162461bcd60e51b8152600401808060200182810382526026815260200180611f686026913960400191505060405180910390fd5b8051610eee906004906020840190611c4d565b5050565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6005546001600160601b03166127109091040290565b6008810491600790911690565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561100f5780601f10610fe45761010080835404028352916020019161100f565b820191906000526020600020905b815481529060010190602001808311610ff257829003601f168201915b5050505050905090565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6020810282901c63ffffffff1692915050565b336001600160a01b038616148061107657506110768533611019565b6110b15760405162461bcd60e51b8152600401808060200182810382526037815260200180611db26037913960400191505060405180910390fd5b6001600160a01b0384166110f65760405162461bcd60e51b8152600401808060200182810382526038815260200180611f306038913960400191505060405180910390fd5b611102858585856117bc565b610bd4858585855a86611839565b6002546001600160a01b031633146111595760405162461bcd60e51b8152600401808060200182810382526026815260200180611f686026913960400191505060405180910390fd5b6001600160a01b03811661119e5760405162461bcd60e51b815260040180806020018281038252602a815260200180611d88602a913960400191505060405180910390fd5b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000813f801580159061122d57507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b60006001600160e01b03198216636cdb3d1360e11b141561125757506001610998565b610995826119ab565b8151815181146112a15760405162461bcd60e51b8152600401808060200182810382526042815260200180611de96042913960600191505060405180910390fd5b836001600160a01b0316856001600160a01b0316141580156112c35750600081115b15611461576000806112db85600081518110610c3857fe5b6001600160a01b038916600090815260208181526040808320858452909152812054875193955091935091611326919084908890859061131757fe5b602002602001015160016119c4565b6001600160a01b0388166000908152602081815260408083208784529091528120548751929350909161136f919085908990859061136057fe5b602002602001015160006119c4565b90508360015b8681101561141c5761138c898281518110610c3857fe5b90965094508186146113ee576001600160a01b038b811660009081526020818152604080832086845280835281842098909855928d16825281815282822094825284815282822095909555878152948452808520549290935291909220549084905b6113ff84868a848151811061131757fe5b935061141283868a848151811061136057fe5b9250600101611375565b50506001600160a01b03808a16600090815260208181526040808320888452825280832095909555918a168152808252838120958152949052922091909155506114e4565b60005b818110156114e25782818151811061147857fe5b602002602001015161149d8786848151811061149057fe5b6020026020010151610928565b10156114da5760405162461bcd60e51b8152600401808060200182810382526036815260200180611eb36036913960400191505060405180910390fd5b600101611464565b505b836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611569578181015183820152602001611551565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156115a8578181015183820152602001611590565b5050505090500194505050505060405180910390a45050505050565b6115d6856001600160a01b03166111fa565b156117b4576000856001600160a01b031663bc197c8184338a8989886040518763ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561166757818101518382015260200161164f565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156116a657818101518382015260200161168e565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156116e25781810151838201526020016116ca565b50505050905090810190601f16801561170f5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600088803b15801561173457600080fd5b5087f1158015611748573d6000803e3d6000fd5b50505050506040513d602081101561175f57600080fd5b505190506001600160e01b0319811663bc197c8160e01b146117b25760405162461bcd60e51b815260040180806020018281038252604c815260200180611e2b604c913960600191505060405180910390fd5b505b505050505050565b6117c98483836001611b54565b6117d68383836000611b54565b826001600160a01b0316846001600160a01b0316336001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051808381526020018281526020019250505060405180910390a450505050565b61184b856001600160a01b03166111fa565b156117b4576000856001600160a01b031663f23a6e6184338a8989886040518763ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156118dd5781810151838201526020016118c5565b50505050905090810190601f16801561190a5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600088803b15801561192d57600080fd5b5087f1158015611941573d6000803e3d6000fd5b50505050506040513d602081101561195857600080fd5b505190506001600160e01b0319811663f23a6e6160e01b146117b25760405162461bcd60e51b8152600401808060200182810382526047815260200180611ee96047913960600191505060405180910390fd5b6001600160e01b031981166301ffc9a760e01b14919050565b60006020840263ffffffff828460018111156119dc57fe5b1415611a755784821b8701925086831015611a285760405162461bcd60e51b8152600401808060200182810382526032815260200180611fd36032913960400191505060405180910390fd5b600160201b87831c8216860110611a705760405162461bcd60e51b8152600401808060200182810382526032815260200180611fd36032913960400191505060405180910390fd5b611b4a565b6001846001811115611a8357fe5b1415611b135784821b8703925086831115611acf5760405162461bcd60e51b8152600401808060200182810382526033815260200180611d556033913960400191505060405180910390fd5b84818389901c161015611a705760405162461bcd60e51b8152600401808060200182810382526033815260200180611d556033913960400191505060405180910390fd5b60405162461bcd60e51b8152600401808060200182810382526045815260200180611f8e6045913960600191505060405180910390fd5b5050949350505050565b600080611b6085610f76565b6001600160a01b0388166000908152602081815260408083208584529091529020549193509150611b93908286866119c4565b6001600160a01b03909616600090815260208181526040808320948352939052919091209490945550505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611bf75760008555611c3d565b82601f10611c105782800160ff19823516178555611c3d565b82800160010185558215611c3d579182015b82811115611c3d578235825591602001919060010190611c22565b50611c49929150611cc9565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611c835760008555611c3d565b82601f10611c9c57805160ff1916838001178555611c3d565b82800160010185558215611c3d579182015b82811115611c3d578251825591602001919060010190611cae565b5b80821115611c495760008155600101611cca56fe455243313135355061636b656442616c616e63652362616c616e63654f6642617463683a20494e56414c49445f41525241595f4c454e475448455243313135355061636b656442616c616e6365237361666542617463685472616e7366657246726f6d3a20494e56414c49445f524543495049454e54455243313135355061636b656442616c616e6365235f7669657755706461746542696e56616c75653a20554e444552464c4f574f776e61626c65237472616e736665724f776e6572736869703a20494e56414c49445f41444452455353455243313135355061636b656442616c616e636523736166655472616e7366657246726f6d3a20494e56414c49445f4f50455241544f52455243313135355061636b656442616c616e6365235f7361666542617463685472616e7366657246726f6d3a20494e56414c49445f4152524159535f4c454e475448455243313135355061636b656442616c616e6365235f63616c6c6f6e45524331313535426174636852656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745455243313135355061636b656442616c616e6365237361666542617463685472616e7366657246726f6d3a20494e56414c49445f4f50455241544f52455243313135355061636b656442616c616e6365235f7361666542617463685472616e7366657246726f6d3a20554e444552464c4f57455243313135355061636b656442616c616e6365235f63616c6c6f6e4552433131353552656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745455243313135355061636b656442616c616e636523736166655472616e7366657246726f6d3a20494e56414c49445f524543495049454e544f776e61626c65236f6e6c794f776e65723a2053454e4445525f49535f4e4f545f4f574e4552455243313135355061636b656442616c616e6365235f7669657755706461746542696e56616c75653a20494e56414c49445f42494e5f57524954455f4f5045524154494f4e455243313135355061636b656442616c616e6365235f7669657755706461746542696e56616c75653a204f564552464c4f57a26469706673582212200fb733503f7d9c44f254b45e6f4a519a9496b110ada0c417512038c0dd20da1f64736f6c63430007040033697066733a2f2f516d65684c5138766d697a6f723975455845324844776833724342664a384250546d55454367383175646f6e386e697066733a2f2f516d515861553233665854624d3342436b6a3438313170794167635a416638756b54313477736b4a596b50723272455243313135355061636b656442616c616e6365235f7669657755706461746542696e56616c75653a20554e444552464c4f57455243313135355061636b656442616c616e6365235f63616c6c6f6e4552433131353552656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745455243313135355061636b656442616c616e6365235f7669657755706461746542696e56616c75653a20494e56414c49445f42494e5f57524954455f4f5045524154494f4e455243313135355061636b656442616c616e6365235f7669657755706461746542696e56616c75653a204f564552464c4f57697066733a2f2f516d56613679316a71434162584839484736476a4841546e6a63683543716d6a373939534d333479665a62735a79
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101415760003560e01c80638da5cb5b116100b8578063db90e83c1161007c578063db90e83c146107aa578063e8a3d485146107e0578063e985e9c5146107e8578063eaec5f8114610816578063f242432a14610839578063f2fde38b1461090257610141565b80638da5cb5b1461068f57806395d89b41146106b3578063a201fc50146106bb578063a22cb4651461075f578063a2e696131461078d57610141565b80630e89341c1161010a5780630e89341c1461027b5780632a55205a146102985780632eb2c2d6146102de57806336d18b671461049f5780634e1273f4146104a7578063593aa2831461061a57610141565b8062fdd58e1461014657806301ffc9a71461018457806302fa7c47146101bf57806306fdde03146101f65780630b9fd4e514610273575b600080fd5b6101726004803603604081101561015c57600080fd5b506001600160a01b038135169060200135610928565b60408051918252519081900360200190f35b6101ab6004803603602081101561019a57600080fd5b50356001600160e01b031916610970565b604080519115158252519081900360200190f35b6101f4600480360360408110156101d557600080fd5b5080356001600160a01b031690602001356001600160601b031661099d565b005b6101fe610a23565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610238578181015183820152602001610220565b50505050905090810190601f1680156102655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610172610a4c565b6101fe6004803603602081101561029157600080fd5b5035610a51565b6102bb600480360360408110156102ae57600080fd5b5080359060200135610af2565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6101f4600480360360a08110156102f457600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561032757600080fd5b82018360208201111561033957600080fd5b803590602001918460208302840111600160201b8311171561035a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103a957600080fd5b8201836020820111156103bb57600080fd5b803590602001918460208302840111600160201b831117156103dc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561042b57600080fd5b82018360208201111561043d57600080fd5b803590602001918460018302840111600160201b8311171561045e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b1e945050505050565b610172610bdb565b6105ca600480360360408110156104bd57600080fd5b810190602081018135600160201b8111156104d757600080fd5b8201836020820111156104e957600080fd5b803590602001918460208302840111600160201b8311171561050a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561055957600080fd5b82018360208201111561056b57600080fd5b803590602001918460208302840111600160201b8311171561058c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610be0945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106065781810151838201526020016105ee565b505050509050019250505060405180910390f35b6101f46004803603604081101561063057600080fd5b81359190810190604081016020820135600160201b81111561065157600080fd5b82018360208201111561066357600080fd5b803590602001918460018302840111600160201b8311171561068457600080fd5b509092509050610df7565b610697610e5f565b604080516001600160a01b039092168252519081900360200190f35b6101fe610e6e565b6101f4600480360360208110156106d157600080fd5b810190602081018135600160201b8111156106eb57600080fd5b8201836020820111156106fd57600080fd5b803590602001918460018302840111600160201b8311171561071e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e92945050505050565b6101f46004803603604081101561077557600080fd5b506001600160a01b0381351690602001351515610ef2565b610172600480360360208110156107a357600080fd5b5035610f60565b6107c7600480360360208110156107c057600080fd5b5035610f76565b6040805192835260208301919091528051918290030190f35b6101fe610f83565b6101ab600480360360408110156107fe57600080fd5b506001600160a01b0381358116916020013516611019565b6101726004803603604081101561082c57600080fd5b5080359060200135611047565b6101f4600480360360a081101561084f57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561088e57600080fd5b8201836020820111156108a057600080fd5b803590602001918460018302840111600160201b831117156108c157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061105a945050505050565b6101f46004803603602081101561091857600080fd5b50356001600160a01b0316611110565b600080600061093684610f76565b6001600160a01b03871660009081526020818152604080832085845290915290205491935091506109679082611047565b95945050505050565b600063152a902d60e11b6001600160e01b031983161480610995575061099582611234565b90505b919050565b6002546001600160a01b031633146109e65760405162461bcd60e51b8152600401808060200182810382526026815260200180611f686026913960400191505060405180910390fd5b600580546001600160601b039283166001600160a01b03909416600160601b029216919091176bffffffffffffffffffffffff1916919091179055565b60408051808201909152600f81526e2932b9b4b9ba30b731b29021b63ab160891b602082015290565b600181565b60008181526003602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845260609392830182828015610ae65780601f10610abb57610100808354040283529160200191610ae6565b820191906000526020600020905b815481529060010190602001808311610ac957829003601f168201915b50505050509050919050565b6005546000908190600160601b90046001600160a01b0316610b1384610f60565b915091509250929050565b336001600160a01b0386161480610b3a5750610b3a8533611019565b610b755760405162461bcd60e51b815260040180806020018281038252603c815260200180611e77603c913960400191505060405180910390fd5b6001600160a01b038416610bba5760405162461bcd60e51b815260040180806020018281038252603d815260200180611d18603d913960400191505060405180910390fd5b610bc685858585611260565b610bd4858585855a866115c4565b5050505050565b600081565b81518151606091908114610c255760405162461bcd60e51b8152600401808060200182810382526039815260200180611cdf6039913960400191505060405180910390fd5b600080610c4585600081518110610c3857fe5b6020026020010151610f76565b91509150600080600088600081518110610c5b57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000848152602001908152602001600020549050600083905060608567ffffffffffffffff81118015610cb557600080fd5b50604051908082528060200260200182016040528015610cdf578160200160208202803683370190505b509050610cec8385611047565b81600081518110610cf957fe5b602090810291909101015260015b86811015610dea57610d1e898281518110610c3857fe5b90965094508286141580610d6d5750898181518110610d3957fe5b60200260200101516001600160a01b03168a6001830381518110610d5957fe5b60200260200101516001600160a01b031614155b15610dc1576000808b8381518110610d8157fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008781526020019081526020016000205493508592505b610dcb8486611047565b828281518110610dd757fe5b6020908102919091010152600101610d07565b5098975050505050505050565b6002546001600160a01b03163314610e405760405162461bcd60e51b8152600401808060200182810382526026815260200180611f686026913960400191505060405180910390fd5b6000838152600360205260409020610e59908383611bc1565b50505050565b6002546001600160a01b031690565b60408051808201909152600a815269524553495354414e434560b01b602082015290565b6002546001600160a01b03163314610edb5760405162461bcd60e51b8152600401808060200182810382526026815260200180611f686026913960400191505060405180910390fd5b8051610eee906004906020840190611c4d565b5050565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6005546001600160601b03166127109091040290565b6008810491600790911690565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561100f5780601f10610fe45761010080835404028352916020019161100f565b820191906000526020600020905b815481529060010190602001808311610ff257829003601f168201915b5050505050905090565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6020810282901c63ffffffff1692915050565b336001600160a01b038616148061107657506110768533611019565b6110b15760405162461bcd60e51b8152600401808060200182810382526037815260200180611db26037913960400191505060405180910390fd5b6001600160a01b0384166110f65760405162461bcd60e51b8152600401808060200182810382526038815260200180611f306038913960400191505060405180910390fd5b611102858585856117bc565b610bd4858585855a86611839565b6002546001600160a01b031633146111595760405162461bcd60e51b8152600401808060200182810382526026815260200180611f686026913960400191505060405180910390fd5b6001600160a01b03811661119e5760405162461bcd60e51b815260040180806020018281038252602a815260200180611d88602a913960400191505060405180910390fd5b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000813f801580159061122d57507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b60006001600160e01b03198216636cdb3d1360e11b141561125757506001610998565b610995826119ab565b8151815181146112a15760405162461bcd60e51b8152600401808060200182810382526042815260200180611de96042913960600191505060405180910390fd5b836001600160a01b0316856001600160a01b0316141580156112c35750600081115b15611461576000806112db85600081518110610c3857fe5b6001600160a01b038916600090815260208181526040808320858452909152812054875193955091935091611326919084908890859061131757fe5b602002602001015160016119c4565b6001600160a01b0388166000908152602081815260408083208784529091528120548751929350909161136f919085908990859061136057fe5b602002602001015160006119c4565b90508360015b8681101561141c5761138c898281518110610c3857fe5b90965094508186146113ee576001600160a01b038b811660009081526020818152604080832086845280835281842098909855928d16825281815282822094825284815282822095909555878152948452808520549290935291909220549084905b6113ff84868a848151811061131757fe5b935061141283868a848151811061136057fe5b9250600101611375565b50506001600160a01b03808a16600090815260208181526040808320888452825280832095909555918a168152808252838120958152949052922091909155506114e4565b60005b818110156114e25782818151811061147857fe5b602002602001015161149d8786848151811061149057fe5b6020026020010151610928565b10156114da5760405162461bcd60e51b8152600401808060200182810382526036815260200180611eb36036913960400191505060405180910390fd5b600101611464565b505b836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611569578181015183820152602001611551565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156115a8578181015183820152602001611590565b5050505090500194505050505060405180910390a45050505050565b6115d6856001600160a01b03166111fa565b156117b4576000856001600160a01b031663bc197c8184338a8989886040518763ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561166757818101518382015260200161164f565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156116a657818101518382015260200161168e565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156116e25781810151838201526020016116ca565b50505050905090810190601f16801561170f5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600088803b15801561173457600080fd5b5087f1158015611748573d6000803e3d6000fd5b50505050506040513d602081101561175f57600080fd5b505190506001600160e01b0319811663bc197c8160e01b146117b25760405162461bcd60e51b815260040180806020018281038252604c815260200180611e2b604c913960600191505060405180910390fd5b505b505050505050565b6117c98483836001611b54565b6117d68383836000611b54565b826001600160a01b0316846001600160a01b0316336001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051808381526020018281526020019250505060405180910390a450505050565b61184b856001600160a01b03166111fa565b156117b4576000856001600160a01b031663f23a6e6184338a8989886040518763ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156118dd5781810151838201526020016118c5565b50505050905090810190601f16801561190a5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600088803b15801561192d57600080fd5b5087f1158015611941573d6000803e3d6000fd5b50505050506040513d602081101561195857600080fd5b505190506001600160e01b0319811663f23a6e6160e01b146117b25760405162461bcd60e51b8152600401808060200182810382526047815260200180611ee96047913960600191505060405180910390fd5b6001600160e01b031981166301ffc9a760e01b14919050565b60006020840263ffffffff828460018111156119dc57fe5b1415611a755784821b8701925086831015611a285760405162461bcd60e51b8152600401808060200182810382526032815260200180611fd36032913960400191505060405180910390fd5b600160201b87831c8216860110611a705760405162461bcd60e51b8152600401808060200182810382526032815260200180611fd36032913960400191505060405180910390fd5b611b4a565b6001846001811115611a8357fe5b1415611b135784821b8703925086831115611acf5760405162461bcd60e51b8152600401808060200182810382526033815260200180611d556033913960400191505060405180910390fd5b84818389901c161015611a705760405162461bcd60e51b8152600401808060200182810382526033815260200180611d556033913960400191505060405180910390fd5b60405162461bcd60e51b8152600401808060200182810382526045815260200180611f8e6045913960600191505060405180910390fd5b5050949350505050565b600080611b6085610f76565b6001600160a01b0388166000908152602081815260408083208584529091529020549193509150611b93908286866119c4565b6001600160a01b03909616600090815260208181526040808320948352939052919091209490945550505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611bf75760008555611c3d565b82601f10611c105782800160ff19823516178555611c3d565b82800160010185558215611c3d579182015b82811115611c3d578235825591602001919060010190611c22565b50611c49929150611cc9565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611c835760008555611c3d565b82601f10611c9c57805160ff1916838001178555611c3d565b82800160010185558215611c3d579182015b82811115611c3d578251825591602001919060010190611cae565b5b80821115611c495760008155600101611cca56fe455243313135355061636b656442616c616e63652362616c616e63654f6642617463683a20494e56414c49445f41525241595f4c454e475448455243313135355061636b656442616c616e6365237361666542617463685472616e7366657246726f6d3a20494e56414c49445f524543495049454e54455243313135355061636b656442616c616e6365235f7669657755706461746542696e56616c75653a20554e444552464c4f574f776e61626c65237472616e736665724f776e6572736869703a20494e56414c49445f41444452455353455243313135355061636b656442616c616e636523736166655472616e7366657246726f6d3a20494e56414c49445f4f50455241544f52455243313135355061636b656442616c616e6365235f7361666542617463685472616e7366657246726f6d3a20494e56414c49445f4152524159535f4c454e475448455243313135355061636b656442616c616e6365235f63616c6c6f6e45524331313535426174636852656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745455243313135355061636b656442616c616e6365237361666542617463685472616e7366657246726f6d3a20494e56414c49445f4f50455241544f52455243313135355061636b656442616c616e6365235f7361666542617463685472616e7366657246726f6d3a20554e444552464c4f57455243313135355061636b656442616c616e6365235f63616c6c6f6e4552433131353552656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745455243313135355061636b656442616c616e636523736166655472616e7366657246726f6d3a20494e56414c49445f524543495049454e544f776e61626c65236f6e6c794f776e65723a2053454e4445525f49535f4e4f545f4f574e4552455243313135355061636b656442616c616e6365235f7669657755706461746542696e56616c75653a20494e56414c49445f42494e5f57524954455f4f5045524154494f4e455243313135355061636b656442616c616e6365235f7669657755706461746542696e56616c75653a204f564552464c4f57a26469706673582212200fb733503f7d9c44f254b45e6f4a519a9496b110ada0c417512038c0dd20da1f64736f6c63430007040033
Deployed Bytecode Sourcemap
35335:2410:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24495:270;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24495:270:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;36973:173;;;;;;;;;;;;;;;;-1:-1:-1;36973:173:0;-1:-1:-1;;;;;;36973:173:0;;:::i;:::-;;;;;;;;;;;;;;;;;;36405:181;;;;;;;;;;;;;;;;-1:-1:-1;36405:181:0;;-1:-1:-1;;;;;36405:181:0;;;;;-1:-1:-1;;;;;36405:181:0;;:::i;:::-;;36202:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35464:33;;;:::i;36075:119::-;;;;;;;;;;;;;;;;-1:-1:-1;36075:119:0;;:::i;36594:221::-;;;;;;;;;;;;;;;;-1:-1:-1;36594:221:0;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;36594:221:0;;;;;;;;;;;;;;;;;;;;;18078:556;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18078:556:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18078:556:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18078:556:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18078:556:0;;;;;;;;-1:-1:-1;18078:556:0;;-1:-1:-1;;;;;18078:556:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18078:556:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18078:556:0;;;;;;;;-1:-1:-1;18078:556:0;;-1:-1:-1;;;;;18078:556:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18078:556:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18078:556:0;;-1:-1:-1;18078:556:0;;-1:-1:-1;;;;;18078:556:0:i;35426:31::-;;;:::i;25131:1042::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25131:1042:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25131:1042:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25131:1042:0;;;;;;;;-1:-1:-1;25131:1042:0;;-1:-1:-1;;;;;25131:1042:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25131:1042:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25131:1042:0;;-1:-1:-1;25131:1042:0;;-1:-1:-1;;;;;25131:1042:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35663:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35663:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35663:134:0;;;;;;;;;;-1:-1:-1;35663:134:0;;-1:-1:-1;35663:134:0;-1:-1:-1;35663:134:0;:::i;1958:74::-;;;:::i;:::-;;;;-1:-1:-1;;;;;1958:74:0;;;;;;;;;;;;;;36305:92;;;:::i;35805:145::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35805:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35805:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35805:145:0;;-1:-1:-1;35805:145:0;;-1:-1:-1;;;;;35805:145:0:i;23472:236::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23472:236:0;;;;;;;;;;:::i;36823:142::-;;;;;;;;;;;;;;;;-1:-1:-1;36823:142:0;;:::i;28915:195::-;;;;;;;;;;;;;;;;-1:-1:-1;28915:195:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;35958:105;;;:::i;23978:164::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23978:164:0;;;;;;;;;;:::i;29375:443::-;;;;;;;;;;;;;;;;-1:-1:-1;29375:443:0;;;;;;;:::i;16973:608::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16973:608:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16973:608:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16973:608:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16973:608:0;;-1:-1:-1;16973:608:0;;-1:-1:-1;;;;;16973:608:0:i;1658:232::-;;;;;;;;;;;;;;;;-1:-1:-1;1658:232:0;-1:-1:-1;;;;;1658:232:0;;:::i;24495:270::-;24578:7;24597:11;24615:13;24684:18;24698:3;24684:13;:18::i;:::-;-1:-1:-1;;;;;24730:16:0;;:8;:16;;;;;;;;;;;:21;;;;;;;;;24669:33;;-1:-1:-1;24669:33:0;-1:-1:-1;24716:43:0;;24669:33;24716:13;:43::i;:::-;24709:50;24495:270;-1:-1:-1;;;;;24495:270:0:o;36973:173::-;37050:4;-1:-1:-1;;;;;;;;;37073:25:0;;;;:65;;;37102:36;37126:11;37102:23;:36::i;:::-;37066:72;;36973:173;;;;:::o;36405:181::-;1457:7;;-1:-1:-1;;;;;1457:7:0;1443:10;:21;1435:72;;;;-1:-1:-1;;;1435:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36503:14:::1;:26:::0;;-1:-1:-1;;;;;36540:38:0;;::::1;-1:-1:-1::0;;;;;36503:26:0;;::::1;-1:-1:-1::0;;;36503:26:0::1;::::0;::::1;::::0;;;::::1;-1:-1:-1::0;;36540:38:0::1;::::0;;;::::1;::::0;;36405:181::o;36202:95::-;36265:24;;;;;;;;;;;;-1:-1:-1;;;36265:24:0;;;;36202:95;:::o;35464:33::-;35496:1;35464:33;:::o;36075:119::-;36167:19;;;;:9;:19;;;;;;;;;36160:26;;;;;;-1:-1:-1;;36160:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36134:13;;36160:26;;;36167:19;36160:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36075:119;;;:::o;36594:221::-;36762:14;;36720:7;;;;-1:-1:-1;;;36762:14:0;;-1:-1:-1;;;;;36762:14:0;36778:28;36795:10;36778:16;:28::i;:::-;36754:53;;;;36594:221;;;;;:::o;18078:556::-;18268:10;-1:-1:-1;;;;;18268:19:0;;;;18267:60;;;18292:35;18309:5;18316:10;18292:16;:35::i;:::-;18259:133;;;;-1:-1:-1;;;18259:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18407:17:0;;18399:90;;;;-1:-1:-1;;;18399:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18498:50;18521:5;18528:3;18533:4;18539:8;18498:22;:50::i;:::-;18555:73;18583:5;18590:3;18595:4;18601:8;18611:9;18622:5;18555:27;:73::i;:::-;18078:556;;;;;:::o;35426:31::-;35456:1;35426:31;:::o;25131:1042::-;25286:14;;25327:11;;25239:16;;25286:14;25315:23;;25307:93;;;;-1:-1:-1;;;25307:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25431:11;25444:13;25461:22;25475:4;25480:1;25475:7;;;;;;;;;;;;;;25461:13;:22::i;:::-;25430:53;;;;25490:19;25512:8;:20;25521:7;25529:1;25521:10;;;;;;;;;;;;;;-1:-1:-1;;;;;25512:20:0;-1:-1:-1;;;;;25512:20:0;;;;;;;;;;;;:25;25533:3;25512:25;;;;;;;;;;;;25490:47;;25544:16;25563:3;25544:22;;25598:30;25645:8;25631:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25631:23:0;;25598:56;;25680:33;25694:11;25707:5;25680:13;:33::i;:::-;25661:13;25675:1;25661:16;;;;;;;;;;;;;;;;;:52;25784:1;25767:372;25791:8;25787:1;:12;25767:372;;;25830:22;25844:4;25849:1;25844:7;;;;;;;25830:22;25815:37;;-1:-1:-1;25815:37:0;-1:-1:-1;25937:15:0;;;;;:45;;;25972:7;25980:1;25972:10;;;;;;;;;;;;;;-1:-1:-1;;;;;25956:26:0;:7;25966:1;25964;:3;25956:12;;;;;;;;;;;;;;-1:-1:-1;;;;;25956:26:0;;;25937:45;25933:136;;;26009:8;:20;26018:7;26026:1;26018:10;;;;;;;;;;;;;;-1:-1:-1;;;;;26009:20:0;-1:-1:-1;;;;;26009:20:0;;;;;;;;;;;;:25;26030:3;26009:25;;;;;;;;;;;;25995:39;;26056:3;26045:14;;25933:136;26098:33;26112:11;26125:5;26098:13;:33::i;:::-;26079:13;26093:1;26079:16;;;;;;;;;;;;;;;;;:52;25801:3;;25767:372;;;-1:-1:-1;26154:13:0;25131:1042;-1:-1:-1;;;;;;;;25131:1042:0:o;35663:134::-;1457:7;;-1:-1:-1;;;;;1457:7:0;1443:10;:21;1435:72;;;;-1:-1:-1;;;1435:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35756:19:::1;::::0;;;:9:::1;:19;::::0;;;;:33:::1;::::0;35778:11;;35756:33:::1;:::i;:::-;;35663:134:::0;;;:::o;1958:74::-;2019:7;;-1:-1:-1;;;;;2019:7:0;1958:74;:::o;36305:92::-;36370:19;;;;;;;;;;;;-1:-1:-1;;;36370:19:0;;;;36305:92;:::o;35805:145::-;1457:7;;-1:-1:-1;;;;;1457:7:0;1443:10;:21;1435:72;;;;-1:-1:-1;;;1435:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35900:42;;::::1;::::0;:20:::1;::::0;:42:::1;::::0;::::1;::::0;::::1;:::i;:::-;;35805:145:::0;:::o;23472:236::-;23608:10;23598:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;23598:32:0;;;;;;;;;;;;:44;;-1:-1:-1;;23598:44:0;;;;;;;;;;23654:48;;;;;;;23598:32;;23608:10;23654:48;;;;;;;;;;;23472:236;;:::o;36823:142::-;36940:17;;-1:-1:-1;;;;;36940:17:0;36931:5;36918:18;;;36917:40;;36823:142::o;28915:195::-;16094:19;29021:21;;;29057;;;;;28915:195::o;35958:105::-;36035:20;36028:27;;;;;;;;-1:-1:-1;;36028:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36002:13;;36028:27;;36035:20;;36028:27;;36035:20;36028:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35958:105;:::o;23978:164::-;-1:-1:-1;;;;;24108:17:0;;;24074:15;24108:17;;;:9;:17;;;;;;;;:28;;;;;;;;;;;;;;;23978:164::o;29375:443::-;15983:2;29743:22;;29780:24;;;29659:33;29779;29375:443;;;;:::o;16973:608::-;17138:10;-1:-1:-1;;;;;17138:19:0;;;;17137:60;;;17162:35;17179:5;17186:10;17162:16;:35::i;:::-;17129:128;;;;-1:-1:-1;;;17129:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17272:17:0;;17264:85;;;;-1:-1:-1;;;17264:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17459:43;17477:5;17484:3;17489;17494:7;17459:17;:43::i;:::-;17509:66;17532:5;17539:3;17544;17549:7;17558:9;17569:5;17509:22;:66::i;1658:232::-;1457:7;;-1:-1:-1;;;;;1457:7:0;1443:10;:21;1435:72;;;;-1:-1:-1;;;1435:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1736:23:0;::::1;1728:78;;;;-1:-1:-1::0;;;1728:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1839:7;::::0;1818:40:::1;::::0;-1:-1:-1;;;;;1818:40:0;;::::1;::::0;1839:7:::1;::::0;1818:40:::1;::::0;1839:7:::1;::::0;1818:40:::1;1865:7;:19:::0;;-1:-1:-1;;;;;;1865:19:0::1;-1:-1:-1::0;;;;;1865:19:0;;;::::1;::::0;;;::::1;::::0;;1658:232::o;2635:405::-;2696:4;2953:21;;2990:15;;;;;:43;;-1:-1:-1;2292:66:0;3009:24;;;2990:43;2982:52;2635:405;-1:-1:-1;;;2635:405:0:o;30167:248::-;30270:4;-1:-1:-1;;;;;;30287:42:0;;-1:-1:-1;;;30287:42:0;30283:76;;;-1:-1:-1;30347:4:0;30340:11;;30283:76;30372:37;30396:12;30372:23;:37::i;20431:1990::-;20585:11;;20657:15;;20644:28;;20636:107;;;;-1:-1:-1;;;20636:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20765:3;-1:-1:-1;;;;;20756:12:0;:5;-1:-1:-1;;;;;20756:12:0;;;:29;;;;;20784:1;20772:9;:13;20756:29;20752:1578;;;20866:11;20879:13;20896:22;20910:4;20915:1;20910:7;;;;;;;20896:22;-1:-1:-1;;;;;21045:15:0;;21007;21045;;;;;;;;;;;:20;;;;;;;;;21074:11;;20865:53;;-1:-1:-1;20865:53:0;;-1:-1:-1;21007:15:0;21025:77;;21045:20;20865:53;;21074:8;;21007:15;;21074:11;;;;;;;;;;21087:14;21025:19;:77::i;:::-;-1:-1:-1;;;;;21147:13:0;;21111;21147;;;;;;;;;;;:18;;;;;;;;;21174:11;;21007:95;;-1:-1:-1;21111:13:0;;21127:75;;21147:18;21167:5;;21174:8;;21111:13;;21174:11;;;;;;;;;;21187:14;21127:19;:75::i;:::-;21111:91;-1:-1:-1;21258:3:0;21289:1;21272:668;21296:9;21292:1;:13;21272:668;;;21338:22;21352:4;21357:1;21352:7;;;;;;;21338:22;21323:37;;-1:-1:-1;21323:37:0;-1:-1:-1;21400:14:0;;;21396:333;;-1:-1:-1;;;;;21482:15:0;;;:8;:15;;;;;;;;;;;:24;;;;;;;;;:34;;;;21529:13;;;;;;;;;;;:22;;;;;;;;;:30;;;;21584:20;;;;;;;;;;21625:18;;;;;;;;;;21584:20;;21396:333;21785:64;21805:7;21814:5;21821:8;21830:1;21821:11;;;;;;;21785:64;21775:74;;21868:62;21888:5;21895;21902:8;21911:1;21902:11;;;;;;;21868:62;21860:70;-1:-1:-1;21307:3:0;;21272:668;;;-1:-1:-1;;;;;;;21999:15:0;;;:8;:15;;;;;;;;;;;:20;;;;;;;;:30;;;;22038:13;;;;;;;;;;;:18;;;;;;;;:26;;;;-1:-1:-1;20752:1578:0;;;22160:9;22155:168;22179:9;22175:1;:13;22155:168;;;22243:8;22252:1;22243:11;;;;;;;;;;;;;;22214:25;22224:5;22231:4;22236:1;22231:7;;;;;;;;;;;;;;22214:9;:25::i;:::-;:40;;22206:107;;;;-1:-1:-1;;;22206:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22190:3;;22155:168;;;;20752:1578;22395:3;-1:-1:-1;;;;;22362:53:0;22388:5;-1:-1:-1;;;;;22362:53:0;22376:10;-1:-1:-1;;;;;22362:53:0;;22400:4;22406:8;22362:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20431:1990;;;;;:::o;22539:524::-;22764:16;:3;-1:-1:-1;;;;;22764:14:0;;:16::i;:::-;22760:298;;;22791:13;22829:3;-1:-1:-1;;;;;22807:49:0;;22862:9;22873:10;22885:5;22892:4;22898:8;22908:5;22807:107;;;;;;;;;;;;;-1:-1:-1;;;;;22807:107:0;;;;;;-1:-1:-1;;;;;22807:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22807:107:0;;-1:-1:-1;;;;;;;22931:38:0;;-1:-1:-1;;;22931:38:0;22923:127;;;;-1:-1:-1;;;22923:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22760:298;;22539:524;;;;;;:::o;19038:394::-;19170:53;19187:5;19194:3;19199:7;19208:14;19170:16;:53::i;:::-;19261;19278:3;19285;19290:7;19299:14;19261:16;:53::i;:::-;19408:3;-1:-1:-1;;;;;19374:52:0;19401:5;-1:-1:-1;;;;;19374:52:0;19389:10;-1:-1:-1;;;;;19374:52:0;;19413:3;19418:7;19374:52;;;;;;;;;;;;;;;;;;;;;;;;19038:394;;;;:::o;19545:476::-;19741:16;:3;-1:-1:-1;;;;;19741:14:0;;:16::i;:::-;19737:279;;;19768:13;19806:3;-1:-1:-1;;;;;19784:44:0;;19833:9;19844:10;19856:5;19863:3;19868:7;19877:5;19784:99;;;;;;;;;;;;;-1:-1:-1;;;;;19784:99:0;;;;;;-1:-1:-1;;;;;19784:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19784:99:0;;-1:-1:-1;;;;;;;19900:32:0;;-1:-1:-1;;;19900:32:0;19892:116;;;;-1:-1:-1;;;19892:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3930:159;-1:-1:-1;;;;;;4036:47:0;;-1:-1:-1;;;4036:47:0;3930:159;;;:::o;27544:1189::-;27677:20;15983:2;27725:22;;27769:33;27677:20;27815:10;:28;;;;;;;;;27811:889;;;27883:16;;;27869:31;;;-1:-1:-1;27917:26:0;;;;27909:89;;;;-1:-1:-1;;;27909:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28027:19:0;;;28026:28;;28025:40;;:59;28007:184;;;;-1:-1:-1;;;28007:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27811:889;;;28225:14;28211:10;:28;;;;;;;;;28207:493;;;28279:16;;;28265:31;;;-1:-1:-1;28313:26:0;;;;28305:90;;;;-1:-1:-1;;;28305:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28456:7;28447:4;28438:5;28424:10;:19;;28423:28;28422:41;;28404:167;;;;-1:-1:-1;;;28404:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28207:493;28596:79;;-1:-1:-1;;;28596:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28207:493;28708:19;;27544:1189;;;;;;:::o;26703:363::-;26824:11;26842:13;26912:18;26926:3;26912:13;:18::i;:::-;-1:-1:-1;;;;;27008:18:0;;:8;:18;;;;;;;;;;;:23;;;;;;;;;26897:33;;-1:-1:-1;26897:33:0;-1:-1:-1;26988:72:0;;26897:33;27040:7;27049:10;26988:19;:72::i;:::-;-1:-1:-1;;;;;26962:18:0;;;:8;:18;;;;;;;;;;;:23;;;;;;;;;;:98;;;;-1:-1:-1;;;;26703:363:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://0fb733503f7d9c44f254b45e6f4a519a9496b110ada0c417512038c0dd20da1f
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.