Source Code
Latest 25 from a total of 137 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 19388793 | 720 days ago | IN | 0 ETH | 0.00307022 | ||||
| Transfer | 19388453 | 720 days ago | IN | 0 ETH | 0.00325765 | ||||
| Transfer | 19139448 | 755 days ago | IN | 0 ETH | 0.00170965 | ||||
| Transfer | 19133667 | 756 days ago | IN | 0 ETH | 0.00217073 | ||||
| Transfer | 19133616 | 756 days ago | IN | 0 ETH | 0.00268566 | ||||
| Transfer | 19133482 | 756 days ago | IN | 0 ETH | 0.00185887 | ||||
| Transfer | 19124805 | 757 days ago | IN | 0 ETH | 0.00136464 | ||||
| Transfer | 19082459 | 763 days ago | IN | 0 ETH | 0.00114462 | ||||
| Transfer | 19074878 | 764 days ago | IN | 0 ETH | 0.00075675 | ||||
| Transfer | 18860332 | 794 days ago | IN | 0 ETH | 0.00124523 | ||||
| Transfer | 18825856 | 799 days ago | IN | 0 ETH | 0.0058152 | ||||
| Transfer | 18783923 | 805 days ago | IN | 0 ETH | 0.00229773 | ||||
| Transfer | 18783893 | 805 days ago | IN | 0 ETH | 0.00312201 | ||||
| Transfer | 18782535 | 805 days ago | IN | 0 ETH | 0.00270453 | ||||
| Transfer | 18782508 | 805 days ago | IN | 0 ETH | 0.00275589 | ||||
| Transfer | 18782483 | 805 days ago | IN | 0 ETH | 0.00297784 | ||||
| Transfer | 18782457 | 805 days ago | IN | 0 ETH | 0.00271164 | ||||
| Transfer | 18782426 | 805 days ago | IN | 0 ETH | 0.00212595 | ||||
| Transfer | 18782401 | 805 days ago | IN | 0 ETH | 0.0024622 | ||||
| Transfer | 18782376 | 805 days ago | IN | 0 ETH | 0.00245651 | ||||
| Transfer | 18782351 | 805 days ago | IN | 0 ETH | 0.00292979 | ||||
| Transfer | 18782312 | 805 days ago | IN | 0 ETH | 0.00262754 | ||||
| Transfer | 18782280 | 805 days ago | IN | 0 ETH | 0.00330096 | ||||
| Transfer | 18782239 | 805 days ago | IN | 0 ETH | 0.00346768 | ||||
| Transfer | 18781348 | 806 days ago | IN | 0 ETH | 0.00415186 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DistributorERC20V2
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-07-06
*/
// SPDX-License-Identifier: MIT
// Sources flattened with hardhat v2.9.9 https://hardhat.org
// File @openzeppelin/contracts/token/ERC20/IERC20.sol@v4.7.0
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
// File @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol@v4.7.0
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
// File @openzeppelin/contracts/utils/Address.sol@v4.7.0
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol@v4.7.0
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File contracts/interfaces/IMint.sol
pragma solidity ^0.8.0;
interface IMint {
// support ERC20
function mint(address, uint256) external;
}
// File contracts/interfaces/IDistributor.sol
pragma solidity ^0.8.0;
interface IDistributor {
function transferToken(
address token,
address recipient,
uint256 amount
) external;
}
// File contracts/abstracts/Committee.sol
pragma solidity ^0.8.0;
abstract contract Committee {
address public committee;
struct CallData {
address target;
bytes data;
}
modifier onlyCommittee() {
require(msg.sender == committee, "FORBIDDEN");
_;
}
function setCommittee(address _committee) external onlyCommittee {
committee = _committee;
}
function multiCall(CallData[] calldata callData) external onlyCommittee {
for (uint256 i; i < callData.length; i++) {
(bool success, ) = callData[i].target.call(callData[i].data);
require(success, "Transaction call failed");
}
}
}
// File contracts/interfaces/INativeWrap.sol
pragma solidity ^0.8.0;
interface INativeWrap {
function deposit() external payable;
function withdraw(uint256 _value) external;
}
// File @openzeppelin/contracts/utils/structs/EnumerableSet.sol@v4.7.0
// OpenZeppelin Contracts (last updated v4.7.0) (utils/structs/EnumerableSet.sol)
pragma solidity ^0.8.0;
/**
* @dev Library for managing
* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
* types.
*
* Sets have the following properties:
*
* - Elements are added, removed, and checked for existence in constant time
* (O(1)).
* - Elements are enumerated in O(n). No guarantees are made on the ordering.
*
* ```
* contract Example {
* // Add the library methods
* using EnumerableSet for EnumerableSet.AddressSet;
*
* // Declare a set state variable
* EnumerableSet.AddressSet private mySet;
* }
* ```
*
* As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
* and `uint256` (`UintSet`) are supported.
*
* [WARNING]
* ====
* Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable.
* See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.
*
* In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet.
* ====
*/
library EnumerableSet {
// To implement this library for multiple types with as little code
// repetition as possible, we write it in terms of a generic Set type with
// bytes32 values.
// The Set implementation uses private functions, and user-facing
// implementations (such as AddressSet) are just wrappers around the
// underlying Set.
// This means that we can only create new EnumerableSets for types that fit
// in bytes32.
struct Set {
// Storage of set values
bytes32[] _values;
// Position of the value in the `values` array, plus 1 because index 0
// means a value is not in the set.
mapping(bytes32 => uint256) _indexes;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function _add(Set storage set, bytes32 value) private returns (bool) {
if (!_contains(set, value)) {
set._values.push(value);
// The value is stored at length-1, but we add 1 to all indexes
// and use 0 as a sentinel value
set._indexes[value] = set._values.length;
return true;
} else {
return false;
}
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function _remove(Set storage set, bytes32 value) private returns (bool) {
// We read and store the value's index to prevent multiple reads from the same storage slot
uint256 valueIndex = set._indexes[value];
if (valueIndex != 0) {
// Equivalent to contains(set, value)
// To delete an element from the _values array in O(1), we swap the element to delete with the last one in
// the array, and then remove the last element (sometimes called as 'swap and pop').
// This modifies the order of the array, as noted in {at}.
uint256 toDeleteIndex = valueIndex - 1;
uint256 lastIndex = set._values.length - 1;
if (lastIndex != toDeleteIndex) {
bytes32 lastValue = set._values[lastIndex];
// Move the last value to the index where the value to delete is
set._values[toDeleteIndex] = lastValue;
// Update the index for the moved value
set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex
}
// Delete the slot where the moved value was stored
set._values.pop();
// Delete the index for the deleted slot
delete set._indexes[value];
return true;
} else {
return false;
}
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function _contains(Set storage set, bytes32 value) private view returns (bool) {
return set._indexes[value] != 0;
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function _length(Set storage set) private view returns (uint256) {
return set._values.length;
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function _at(Set storage set, uint256 index) private view returns (bytes32) {
return set._values[index];
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function _values(Set storage set) private view returns (bytes32[] memory) {
return set._values;
}
// Bytes32Set
struct Bytes32Set {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _add(set._inner, value);
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _remove(set._inner, value);
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
return _contains(set._inner, value);
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(Bytes32Set storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
return _at(set._inner, index);
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
return _values(set._inner);
}
// AddressSet
struct AddressSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(AddressSet storage set, address value) internal returns (bool) {
return _add(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(AddressSet storage set, address value) internal returns (bool) {
return _remove(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(AddressSet storage set, address value) internal view returns (bool) {
return _contains(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(AddressSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(AddressSet storage set, uint256 index) internal view returns (address) {
return address(uint160(uint256(_at(set._inner, index))));
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(AddressSet storage set) internal view returns (address[] memory) {
bytes32[] memory store = _values(set._inner);
address[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
// UintSet
struct UintSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(UintSet storage set, uint256 value) internal returns (bool) {
return _add(set._inner, bytes32(value));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(UintSet storage set, uint256 value) internal returns (bool) {
return _remove(set._inner, bytes32(value));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(UintSet storage set, uint256 value) internal view returns (bool) {
return _contains(set._inner, bytes32(value));
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function length(UintSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(UintSet storage set, uint256 index) internal view returns (uint256) {
return uint256(_at(set._inner, index));
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(UintSet storage set) internal view returns (uint256[] memory) {
bytes32[] memory store = _values(set._inner);
uint256[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
}
// File @openzeppelin/contracts/security/ReentrancyGuard.sol@v4.7.0
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File contracts/DistributorERC20V2.sol
pragma solidity ^0.8.0;
contract DistributorERC20V2 is Committee, ReentrancyGuard {
using SafeERC20 for IERC20;
using EnumerableSet for EnumerableSet.AddressSet;
enum DISTRIBUTE_TYPE {
TRANSFER,
MINT,
TRANSFER_NATIVE_COIN
}
struct TokenConfig {
address token;
DISTRIBUTE_TYPE distributeType;
address withdrawTo;
}
// list of person that can transfer tokens
EnumerableSet.AddressSet private _whitelist;
address public wrapNative;
mapping(address => DISTRIBUTE_TYPE) public distributeType;
// token address => withdraw to Address
mapping(address => address) public withdrawToByToken;
event Distribute(
address indexed token,
DISTRIBUTE_TYPE indexed distributeType,
address indexed recipient,
uint256 amount
);
event AddAllowAddress(address indexed addr);
event RemoveAllowAddress(address indexed addr);
event WrapNativeSet(address indexed sender, address indexed from, address indexed to);
event WithdrawToAddressByTokenSet(address indexed sender, address indexed token, address indexed withdrawToAddress);
event Withdraw(address indexed sender, address indexed token, address indexed withdrawToAddress, uint256 amount);
receive() external payable {
assert(msg.sender == wrapNative);
}
constructor(
address _committee,
address _wrapNative,
TokenConfig[] memory _tokenConfig,
address[] memory _whitelist_
) {
committee = _committee;
wrapNative = _wrapNative;
for (uint256 i; i < _whitelist_.length; i++) {
_whitelist.add(_whitelist_[i]);
}
for (uint256 i; i < _tokenConfig.length; i++) {
distributeType[_tokenConfig[i].token] = _tokenConfig[i].distributeType;
withdrawToByToken[_tokenConfig[i].token] = _tokenConfig[i].withdrawTo;
}
}
modifier onlyWhitelistAddresses() {
require(_whitelist.contains(msg.sender), "ONLY_ALLOW_WHITELIST_ADDRESS");
_;
}
function isAllowAddress(address _addr) external view returns (bool) {
return _whitelist.contains(_addr);
}
function addAllowAddress(address _addr) public onlyCommittee {
require(_whitelist.add(_addr), "ALREADY_EXIST");
emit AddAllowAddress(_addr);
}
function removeAllowAddress(address _addr) public onlyCommittee {
require(_whitelist.remove(_addr), "NOT_FOUND");
emit RemoveAllowAddress(_addr);
}
function setWithdrawToAddressByToken(address _token, address _withdrawTo) external onlyCommittee {
withdrawToByToken[_token] = _withdrawTo;
emit WithdrawToAddressByTokenSet(msg.sender, _token, _withdrawTo);
}
function setDistributeType(address _token, DISTRIBUTE_TYPE _distributeType) external onlyCommittee {
distributeType[_token] = _distributeType;
}
function setWrapNative(address _wrapNative) external onlyCommittee {
require(_wrapNative != address(0));
emit WrapNativeSet(msg.sender, wrapNative, _wrapNative);
wrapNative = _wrapNative;
}
function transfer(
address token,
address recipient,
uint256 amount
) external onlyWhitelistAddresses nonReentrant {
DISTRIBUTE_TYPE _distributeType = distributeType[token];
if (_distributeType == DISTRIBUTE_TYPE.TRANSFER) {
IERC20(token).safeTransfer(recipient, amount);
} else if (_distributeType == DISTRIBUTE_TYPE.TRANSFER_NATIVE_COIN) {
INativeWrap(token).withdraw(amount);
payable(recipient).transfer(amount);
} else {
IMint(token).mint(recipient, amount);
}
emit Distribute(token, _distributeType, recipient, amount);
}
function withdraw(address token, uint256 amount) external onlyCommittee {
_withdraw(token, amount);
}
function withdraw(address token) external onlyCommittee {
_withdraw(token, IERC20(token).balanceOf(address(this)));
}
function _withdraw(address token, uint256 amount) private {
address withdrawTo = withdrawToByToken[token];
require(withdrawTo != address(0), "WITHDRAW_TO_ADDRESS_MUST_NOT_BE_ZERO");
IERC20(token).safeTransfer(withdrawTo, amount);
emit Withdraw(msg.sender, token, withdrawTo, amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_committee","type":"address"},{"internalType":"address","name":"_wrapNative","type":"address"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"enum DistributorERC20V2.DISTRIBUTE_TYPE","name":"distributeType","type":"uint8"},{"internalType":"address","name":"withdrawTo","type":"address"}],"internalType":"struct DistributorERC20V2.TokenConfig[]","name":"_tokenConfig","type":"tuple[]"},{"internalType":"address[]","name":"_whitelist_","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"AddAllowAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"enum DistributorERC20V2.DISTRIBUTE_TYPE","name":"distributeType","type":"uint8"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Distribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"RemoveAllowAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"withdrawToAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"withdrawToAddress","type":"address"}],"name":"WithdrawToAddressByTokenSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"WrapNativeSet","type":"event"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"addAllowAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"committee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"distributeType","outputs":[{"internalType":"enum DistributorERC20V2.DISTRIBUTE_TYPE","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isAllowAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct Committee.CallData[]","name":"callData","type":"tuple[]"}],"name":"multiCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"removeAllowAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_committee","type":"address"}],"name":"setCommittee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"enum DistributorERC20V2.DISTRIBUTE_TYPE","name":"_distributeType","type":"uint8"}],"name":"setDistributeType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_withdrawTo","type":"address"}],"name":"setWithdrawToAddressByToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wrapNative","type":"address"}],"name":"setWrapNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"withdrawToByToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wrapNative","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040523480156200001157600080fd5b50604051620021673803806200216783398101604081905262000034916200039a565b60018055600080546001600160a01b038087166001600160a01b031992831617835560048054918716919092161790555b8151811015620000bc57620000a6828281518110620000885762000088620004d6565b60200260200101516002620001f560201b620010ba1790919060201c565b5080620000b381620004ec565b91505062000065565b5060005b8251811015620001ea57828181518110620000df57620000df620004d6565b60200260200101516020015160056000858481518110620001045762000104620004d6565b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff1916600183600281111562000145576200014562000514565b02179055508281815181106200015f576200015f620004d6565b60200260200101516040015160066000858481518110620001845762000184620004d6565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508080620001e190620004ec565b915050620000c0565b50505050506200052a565b60006200020c836001600160a01b03841662000215565b90505b92915050565b60008181526001830160205260408120546200025e575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200020f565b5060006200020f565b80516001600160a01b03811681146200027f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715620002bf57620002bf62000284565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620002f057620002f062000284565b604052919050565b60006001600160401b0382111562000314576200031462000284565b5060051b60200190565b600082601f8301126200033057600080fd5b81516020620003496200034383620002f8565b620002c5565b82815260059290921b840181019181810190868411156200036957600080fd5b8286015b848110156200038f57620003818162000267565b83529183019183016200036d565b509695505050505050565b60008060008060808587031215620003b157600080fd5b620003bc8562000267565b93506020620003cd81870162000267565b604087810151919550906001600160401b0380821115620003ed57600080fd5b818901915089601f8301126200040257600080fd5b8151620004136200034382620002f8565b8181526060918202840186019186820191908d8411156200043357600080fd5b948701945b83861015620004a15780868f031215620004525760008081fd5b6200045c6200029a565b620004678762000267565b815288870151600381106200047c5760008081fd5b818a01526200048d87890162000267565b818901528352948501949187019162000438565b8c01519098509550505080841115620004b957600080fd5b505050620004ca878288016200031e565b91505092959194509250565b634e487b7160e01b600052603260045260246000fd5b6000600182016200050d57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052602160045260246000fd5b611c2d806200053a6000396000f3fe6080604052600436106100ec5760003560e01c806369ff1a811161008a578063beabacc811610059578063beabacc81461030a578063cec7d3881461032a578063d864e7401461034a578063f3fef3a31461037757600080fd5b806369ff1a811461027d5780636ad481f31461029d578063bddae40e146102ca578063bdedd705146102ea57600080fd5b80632e0adfa8116100c65780632e0adfa8146101a55780633b9948531461020d57806351cff8d91461022d578063698d85261461024d57600080fd5b8063126fe62d1461011f5780631a0c29561461013f5780631ff6f5991461015f57600080fd5b3661011a5760045473ffffffffffffffffffffffffffffffffffffffff16331461011857610118611767565b005b600080fd5b34801561012b57600080fd5b5061011861013a3660046117bf565b610397565b34801561014b57600080fd5b5061011861015a3660046117da565b6104d2565b34801561016b57600080fd5b5061018f61017a3660046117bf565b60056020526000908152604090205460ff1681565b60405161019c919061183c565b60405180910390f35b3480156101b157600080fd5b506101e86101c03660046117bf565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019c565b34801561021957600080fd5b5061011861022836600461187d565b6105d0565b34801561023957600080fd5b506101186102483660046117bf565b6106ba565b34801561025957600080fd5b5061026d6102683660046117bf565b6107d7565b604051901515815260200161019c565b34801561028957600080fd5b506101186102983660046117bf565b6107ea565b3480156102a957600080fd5b506004546101e89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d657600080fd5b506101186102e53660046117bf565b610920565b3480156102f657600080fd5b506101186103053660046118b8565b6109e8565b34801561031657600080fd5b5061011861032536600461192d565b610bc3565b34801561033657600080fd5b506101186103453660046117bf565b610efa565b34801561035657600080fd5b506000546101e89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038357600080fd5b50610118610392366004611969565b61102b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461041d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6104286002826110e3565b61048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f464f554e4400000000000000000000000000000000000000000000006044820152606401610414565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f37a9ca818360a930b32d2f39c186d518ff677135384eed1df841e8aaf20dd30d90600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b73ffffffffffffffffffffffffffffffffffffffff82811660008181526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001694861694851790555133917f17a3c4a7041671fe051631fbee132279ac9100fd48c6e7fd0b2add77c027367791a45050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040902080548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660018360028111156106b1576106b161180d565b02179055505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526107d490829073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa1580156107ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cf9190611993565b611105565b50565b60006107e460028361125d565b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461086b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b6108766002826110ba565b6108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f414c52454144595f4558495354000000000000000000000000000000000000006044820152606401610414565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f552439567d7e027bcd11f482a9104ac49faa83eaf651ed17ea6d80e98805dc2290600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b60005b81811015610bbe576000838383818110610a8857610a886119ac565b9050602002810190610a9a91906119db565b610aa89060208101906117bf565b73ffffffffffffffffffffffffffffffffffffffff16848484818110610ad057610ad06119ac565b9050602002810190610ae291906119db565b610af0906020810190611a19565b604051610afe929190611a85565b6000604051808303816000865af19150503d8060008114610b3b576040519150601f19603f3d011682016040523d82523d6000602084013e610b40565b606091505b5050905080610bab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5472616e73616374696f6e2063616c6c206661696c65640000000000000000006044820152606401610414565b5080610bb681611ac4565b915050610a6c565b505050565b610bce60023361125d565b610c34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f4e4c595f414c4c4f575f57484954454c4953545f41444452455353000000006044820152606401610414565b600260015403610ca0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610414565b600260015573ffffffffffffffffffffffffffffffffffffffff831660009081526005602052604081205460ff1690816002811115610ce157610ce161180d565b03610d0c57610d0773ffffffffffffffffffffffffffffffffffffffff8516848461128c565b610e77565b6002816002811115610d2057610d2061180d565b03610dee576040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff851690632e1a7d4d90602401600060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8616925084156108fc02915084906000818181858888f19350505050158015610de8573d6000803e3d6000fd5b50610e77565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906340c10f1990604401600060405180830381600087803b158015610e5e57600080fd5b505af1158015610e72573d6000803e3d6000fd5b505050505b8273ffffffffffffffffffffffffffffffffffffffff16816002811115610ea057610ea061180d565b8573ffffffffffffffffffffffffffffffffffffffff167f7fbc9865d2ca734d9fe4a15ef2bc9c0a1fb95d2a698a83d951c939bdb4b0f8e785604051610ee891815260200190565b60405180910390a45050600180555050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b73ffffffffffffffffffffffffffffffffffffffff8116610f9b57600080fd5b60045460405173ffffffffffffffffffffffffffffffffffffffff80841692169033907f25e43db9d8485f24c35603b5b4f22c782461d814594440349ce7f0deb6d44ca890600090a4600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146110ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b6110b68282611105565b5050565b60006110dc8373ffffffffffffffffffffffffffffffffffffffff8416611319565b9392505050565b60006110dc8373ffffffffffffffffffffffffffffffffffffffff8416611368565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526006602052604090205416806111b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f57495448445241575f544f5f414444524553535f4d5553545f4e4f545f42455f60448201527f5a45524f000000000000000000000000000000000000000000000000000000006064820152608401610414565b6111da73ffffffffffffffffffffffffffffffffffffffff8416828461128c565b8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78560405161125091815260200190565b60405180910390a4505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205415156110dc565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610bbe90849061145b565b6000818152600183016020526040812054611360575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107e4565b5060006107e4565b6000818152600183016020526040812054801561145157600061138c600183611afc565b85549091506000906113a090600190611afc565b90508181146114055760008660000182815481106113c0576113c06119ac565b90600052602060002001549050808760000184815481106113e3576113e36119ac565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061141657611416611b13565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107e4565b60009150506107e4565b60006114bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166115679092919063ffffffff16565b805190915015610bbe57808060200190518101906114db9190611b42565b610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610414565b6060611576848460008561157e565b949350505050565b606082471015611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610414565b73ffffffffffffffffffffffffffffffffffffffff85163b61168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610414565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516116b79190611b94565b60006040518083038185875af1925050503d80600081146116f4576040519150601f19603f3d011682016040523d82523d6000602084013e6116f9565b606091505b5091509150611709828286611714565b979650505050505050565b606083156117235750816110dc565b8251156117335782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104149190611ba6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146117ba57600080fd5b919050565b6000602082840312156117d157600080fd5b6110dc82611796565b600080604083850312156117ed57600080fd5b6117f683611796565b915061180460208401611796565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611877577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561189057600080fd5b61189983611796565b91506020830135600381106118ad57600080fd5b809150509250929050565b600080602083850312156118cb57600080fd5b823567ffffffffffffffff808211156118e357600080fd5b818501915085601f8301126118f757600080fd5b81358181111561190657600080fd5b8660208260051b850101111561191b57600080fd5b60209290920196919550909350505050565b60008060006060848603121561194257600080fd5b61194b84611796565b925061195960208501611796565b9150604084013590509250925092565b6000806040838503121561197c57600080fd5b61198583611796565b946020939093013593505050565b6000602082840312156119a557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112611a0f57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611a4e57600080fd5b83018035915067ffffffffffffffff821115611a6957600080fd5b602001915036819003821315611a7e57600080fd5b9250929050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611af557611af5611a95565b5060010190565b600082821015611b0e57611b0e611a95565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060208284031215611b5457600080fd5b815180151581146110dc57600080fd5b60005b83811015611b7f578181015183820152602001611b67565b83811115611b8e576000848401525b50505050565b60008251611a0f818460208701611b64565b6020815260008251806020840152611bc5816040850160208701611b64565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220e539a752a597fc886f9e304e88449d0ab8feba57e1f5095771885314e4ee9d3c64736f6c634300080e0033000000000000000000000000b94968dc900588ff723ec633f8f460561f85bcde000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000649cef6d11ed6f88535462e147304d3fe5ae14d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ce15c583ed48b8b75628ffc4d1dbf51502c4171000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ce15c583ed48b8b75628ffc4d1dbf51502c41710000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b6df1e2a1e5f643a0af55015a1801d47a7f5323f
Deployed Bytecode
0x6080604052600436106100ec5760003560e01c806369ff1a811161008a578063beabacc811610059578063beabacc81461030a578063cec7d3881461032a578063d864e7401461034a578063f3fef3a31461037757600080fd5b806369ff1a811461027d5780636ad481f31461029d578063bddae40e146102ca578063bdedd705146102ea57600080fd5b80632e0adfa8116100c65780632e0adfa8146101a55780633b9948531461020d57806351cff8d91461022d578063698d85261461024d57600080fd5b8063126fe62d1461011f5780631a0c29561461013f5780631ff6f5991461015f57600080fd5b3661011a5760045473ffffffffffffffffffffffffffffffffffffffff16331461011857610118611767565b005b600080fd5b34801561012b57600080fd5b5061011861013a3660046117bf565b610397565b34801561014b57600080fd5b5061011861015a3660046117da565b6104d2565b34801561016b57600080fd5b5061018f61017a3660046117bf565b60056020526000908152604090205460ff1681565b60405161019c919061183c565b60405180910390f35b3480156101b157600080fd5b506101e86101c03660046117bf565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019c565b34801561021957600080fd5b5061011861022836600461187d565b6105d0565b34801561023957600080fd5b506101186102483660046117bf565b6106ba565b34801561025957600080fd5b5061026d6102683660046117bf565b6107d7565b604051901515815260200161019c565b34801561028957600080fd5b506101186102983660046117bf565b6107ea565b3480156102a957600080fd5b506004546101e89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d657600080fd5b506101186102e53660046117bf565b610920565b3480156102f657600080fd5b506101186103053660046118b8565b6109e8565b34801561031657600080fd5b5061011861032536600461192d565b610bc3565b34801561033657600080fd5b506101186103453660046117bf565b610efa565b34801561035657600080fd5b506000546101e89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038357600080fd5b50610118610392366004611969565b61102b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461041d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6104286002826110e3565b61048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f464f554e4400000000000000000000000000000000000000000000006044820152606401610414565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f37a9ca818360a930b32d2f39c186d518ff677135384eed1df841e8aaf20dd30d90600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b73ffffffffffffffffffffffffffffffffffffffff82811660008181526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001694861694851790555133917f17a3c4a7041671fe051631fbee132279ac9100fd48c6e7fd0b2add77c027367791a45050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040902080548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660018360028111156106b1576106b161180d565b02179055505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526107d490829073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa1580156107ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cf9190611993565b611105565b50565b60006107e460028361125d565b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461086b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b6108766002826110ba565b6108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f414c52454144595f4558495354000000000000000000000000000000000000006044820152606401610414565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f552439567d7e027bcd11f482a9104ac49faa83eaf651ed17ea6d80e98805dc2290600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b60005b81811015610bbe576000838383818110610a8857610a886119ac565b9050602002810190610a9a91906119db565b610aa89060208101906117bf565b73ffffffffffffffffffffffffffffffffffffffff16848484818110610ad057610ad06119ac565b9050602002810190610ae291906119db565b610af0906020810190611a19565b604051610afe929190611a85565b6000604051808303816000865af19150503d8060008114610b3b576040519150601f19603f3d011682016040523d82523d6000602084013e610b40565b606091505b5050905080610bab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5472616e73616374696f6e2063616c6c206661696c65640000000000000000006044820152606401610414565b5080610bb681611ac4565b915050610a6c565b505050565b610bce60023361125d565b610c34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f4e4c595f414c4c4f575f57484954454c4953545f41444452455353000000006044820152606401610414565b600260015403610ca0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610414565b600260015573ffffffffffffffffffffffffffffffffffffffff831660009081526005602052604081205460ff1690816002811115610ce157610ce161180d565b03610d0c57610d0773ffffffffffffffffffffffffffffffffffffffff8516848461128c565b610e77565b6002816002811115610d2057610d2061180d565b03610dee576040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff851690632e1a7d4d90602401600060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8616925084156108fc02915084906000818181858888f19350505050158015610de8573d6000803e3d6000fd5b50610e77565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906340c10f1990604401600060405180830381600087803b158015610e5e57600080fd5b505af1158015610e72573d6000803e3d6000fd5b505050505b8273ffffffffffffffffffffffffffffffffffffffff16816002811115610ea057610ea061180d565b8573ffffffffffffffffffffffffffffffffffffffff167f7fbc9865d2ca734d9fe4a15ef2bc9c0a1fb95d2a698a83d951c939bdb4b0f8e785604051610ee891815260200190565b60405180910390a45050600180555050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b73ffffffffffffffffffffffffffffffffffffffff8116610f9b57600080fd5b60045460405173ffffffffffffffffffffffffffffffffffffffff80841692169033907f25e43db9d8485f24c35603b5b4f22c782461d814594440349ce7f0deb6d44ca890600090a4600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146110ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e00000000000000000000000000000000000000000000006044820152606401610414565b6110b68282611105565b5050565b60006110dc8373ffffffffffffffffffffffffffffffffffffffff8416611319565b9392505050565b60006110dc8373ffffffffffffffffffffffffffffffffffffffff8416611368565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526006602052604090205416806111b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f57495448445241575f544f5f414444524553535f4d5553545f4e4f545f42455f60448201527f5a45524f000000000000000000000000000000000000000000000000000000006064820152608401610414565b6111da73ffffffffffffffffffffffffffffffffffffffff8416828461128c565b8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78560405161125091815260200190565b60405180910390a4505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205415156110dc565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610bbe90849061145b565b6000818152600183016020526040812054611360575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107e4565b5060006107e4565b6000818152600183016020526040812054801561145157600061138c600183611afc565b85549091506000906113a090600190611afc565b90508181146114055760008660000182815481106113c0576113c06119ac565b90600052602060002001549050808760000184815481106113e3576113e36119ac565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061141657611416611b13565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107e4565b60009150506107e4565b60006114bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166115679092919063ffffffff16565b805190915015610bbe57808060200190518101906114db9190611b42565b610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610414565b6060611576848460008561157e565b949350505050565b606082471015611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610414565b73ffffffffffffffffffffffffffffffffffffffff85163b61168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610414565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516116b79190611b94565b60006040518083038185875af1925050503d80600081146116f4576040519150601f19603f3d011682016040523d82523d6000602084013e6116f9565b606091505b5091509150611709828286611714565b979650505050505050565b606083156117235750816110dc565b8251156117335782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104149190611ba6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146117ba57600080fd5b919050565b6000602082840312156117d157600080fd5b6110dc82611796565b600080604083850312156117ed57600080fd5b6117f683611796565b915061180460208401611796565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611877577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561189057600080fd5b61189983611796565b91506020830135600381106118ad57600080fd5b809150509250929050565b600080602083850312156118cb57600080fd5b823567ffffffffffffffff808211156118e357600080fd5b818501915085601f8301126118f757600080fd5b81358181111561190657600080fd5b8660208260051b850101111561191b57600080fd5b60209290920196919550909350505050565b60008060006060848603121561194257600080fd5b61194b84611796565b925061195960208501611796565b9150604084013590509250925092565b6000806040838503121561197c57600080fd5b61198583611796565b946020939093013593505050565b6000602082840312156119a557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112611a0f57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611a4e57600080fd5b83018035915067ffffffffffffffff821115611a6957600080fd5b602001915036819003821315611a7e57600080fd5b9250929050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611af557611af5611a95565b5060010190565b600082821015611b0e57611b0e611a95565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060208284031215611b5457600080fd5b815180151581146110dc57600080fd5b60005b83811015611b7f578181015183820152602001611b67565b83811115611b8e576000848401525b50505050565b60008251611a0f818460208701611b64565b6020815260008251806020840152611bc5816040850160208701611b64565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220e539a752a597fc886f9e304e88449d0ab8feba57e1f5095771885314e4ee9d3c64736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b94968dc900588ff723ec633f8f460561f85bcde000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000649cef6d11ed6f88535462e147304d3fe5ae14d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ce15c583ed48b8b75628ffc4d1dbf51502c4171000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ce15c583ed48b8b75628ffc4d1dbf51502c41710000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b6df1e2a1e5f643a0af55015a1801d47a7f5323f
-----Decoded View---------------
Arg [0] : _committee (address): 0xB94968dc900588fF723eC633f8f460561f85BcdE
Arg [1] : _wrapNative (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [2] : _tokenConfig (tuple[]):
Arg [1] : token (address): 0x0649Cef6D11ed6F88535462E147304d3FE5ae14D
Arg [2] : distributeType (uint8): 0
Arg [3] : withdrawTo (address): 0x0000000000000000000000000000000000000000
Arg [1] : token (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [2] : distributeType (uint8): 0
Arg [3] : withdrawTo (address): 0x6cE15C583ed48b8b75628Ffc4d1dbF51502C4171
Arg [1] : token (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [2] : distributeType (uint8): 0
Arg [3] : withdrawTo (address): 0x6cE15C583ed48b8b75628Ffc4d1dbF51502C4171
Arg [3] : _whitelist_ (address[]): 0xB6DF1e2A1E5f643A0Af55015a1801D47A7F5323F
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 000000000000000000000000b94968dc900588ff723ec633f8f460561f85bcde
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 0000000000000000000000000649cef6d11ed6f88535462e147304d3fe5ae14d
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000006ce15c583ed48b8b75628ffc4d1dbf51502c4171
Arg [11] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000006ce15c583ed48b8b75628ffc4d1dbf51502c4171
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [15] : 000000000000000000000000b6df1e2a1e5f643a0af55015a1801d47a7f5323f
Deployed Bytecode Sourcemap
35695:4511:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37055:10;;;;37041;:24;37034:32;;;;:::i;:::-;35695:4511;;;;;38126:170;;;;;;;;;;-1:-1:-1;38126:170:0;;;;;:::i;:::-;;:::i;38304:231::-;;;;;;;;;;-1:-1:-1;38304:231:0;;;;;:::i;:::-;;:::i;36214:57::-;;;;;;;;;;-1:-1:-1;36214:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;36323:52;;;;;;;;;;-1:-1:-1;36323:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1635:42:1;1623:55;;;1605:74;;1593:2;1578:18;36323:52:0;1459:226:1;38543:158:0;;;;;;;;;;-1:-1:-1;38543:158:0;;;;;:::i;:::-;;:::i;39738:131::-;;;;;;;;;;-1:-1:-1;39738:131:0;;;;;:::i;:::-;;:::i;37825:120::-;;;;;;;;;;-1:-1:-1;37825:120:0;;;;;:::i;:::-;;:::i;:::-;;;2210:14:1;;2203:22;2185:41;;2173:2;2158:18;37825:120:0;2045:187:1;37953:165:0;;;;;;;;;;-1:-1:-1;37953:165:0;;;;;:::i;:::-;;:::i;36180:25::-;;;;;;;;;;-1:-1:-1;36180:25:0;;;;;;;;19148:106;;;;;;;;;;-1:-1:-1;19148:106:0;;;;;:::i;:::-;;:::i;19262:277::-;;;;;;;;;;-1:-1:-1;19262:277:0;;;;;:::i;:::-;;:::i;38938:669::-;;;;;;;;;;-1:-1:-1;38938:669:0;;;;;:::i;:::-;;:::i;38709:221::-;;;;;;;;;;-1:-1:-1;38709:221:0;;;;;:::i;:::-;;:::i;18928:24::-;;;;;;;;;;-1:-1:-1;18928:24:0;;;;;;;;39615:115;;;;;;;;;;-1:-1:-1;39615:115:0;;;;;:::i;:::-;;:::i;38126:170::-;19097:9;;;;19083:10;:23;19075:45;;;;;;;3678:2:1;19075:45:0;;;3660:21:1;3717:1;3697:18;;;3690:29;3755:11;3735:18;;;3728:39;3784:18;;19075:45:0;;;;;;;;;38209:24:::1;:10;38227:5:::0;38209:17:::1;:24::i;:::-;38201:46;;;::::0;::::1;::::0;;4015:2:1;38201:46:0::1;::::0;::::1;3997:21:1::0;4054:1;4034:18;;;4027:29;4092:11;4072:18;;;4065:39;4121:18;;38201:46:0::1;3813:332:1::0;38201:46:0::1;38263:25;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;38126:170:::0;:::o;38304:231::-;19097:9;;;;19083:10;:23;19075:45;;;;;;;3678:2:1;19075:45:0;;;3660:21:1;3717:1;3697:18;;;3690:29;3755:11;3735:18;;;3728:39;3784:18;;19075:45:0;3476:332:1;19075:45:0;38412:25:::1;::::0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;:39;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;38467:60;38495:10:::1;::::0;38467:60:::1;::::0;::::1;38304:231:::0;;:::o;38543:158::-;19097:9;;;;19083:10;:23;19075:45;;;;;;;3678:2:1;19075:45:0;;;3660:21:1;3717:1;3697:18;;;3690:29;3755:11;3735:18;;;3728:39;3784:18;;19075:45:0;3476:332:1;19075:45:0;38653:22:::1;::::0;::::1;;::::0;;;:14:::1;:22;::::0;;;;:40;;38678:15;;38653:22;:40;::::1;::::0;38678:15;38653:40:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;38543:158:::0;;:::o;39738:131::-;19097:9;;;;19083:10;:23;19075:45;;;;;;;3678:2:1;19075:45:0;;;3660:21:1;3717:1;3697:18;;;3690:29;3755:11;3735:18;;;3728:39;3784:18;;19075:45:0;3476:332:1;19075:45:0;39822:38:::1;::::0;;;;39854:4:::1;39822:38;::::0;::::1;1605:74:1::0;39805:56:0::1;::::0;39815:5;;39822:23:::1;::::0;::::1;::::0;::::1;::::0;1578:18:1;;39822:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39805:9;:56::i;:::-;39738:131:::0;:::o;37825:120::-;37887:4;37911:26;:10;37931:5;37911:19;:26::i;:::-;37904:33;37825:120;-1:-1:-1;;37825:120:0:o;37953:165::-;19097:9;;;;19083:10;:23;19075:45;;;;;;;3678:2:1;19075:45:0;;;3660:21:1;3717:1;3697:18;;;3690:29;3755:11;3735:18;;;3728:39;3784:18;;19075:45:0;3476:332:1;19075:45:0;38033:21:::1;:10;38048:5:::0;38033:14:::1;:21::i;:::-;38025:47;;;::::0;::::1;::::0;;4541:2:1;38025:47:0::1;::::0;::::1;4523:21:1::0;4580:2;4560:18;;;4553:30;4619:15;4599:18;;;4592:43;4652:18;;38025:47:0::1;4339:337:1::0;38025:47:0::1;38088:22;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;37953:165:::0;:::o;19148:106::-;19097:9;;;;19083:10;:23;19075:45;;;;;;;3678:2:1;19075:45:0;;;3660:21:1;3717:1;3697:18;;;3690:29;3755:11;3735:18;;;3728:39;3784:18;;19075:45:0;3476:332:1;19075:45:0;19224:9:::1;:22:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;19148:106::o;19262:277::-;19097:9;;;;19083:10;:23;19075:45;;;;;;;3678:2:1;19075:45:0;;;3660:21:1;3717:1;3697:18;;;3690:29;3755:11;3735:18;;;3728:39;3784:18;;19075:45:0;3476:332:1;19075:45:0;19350:9:::1;19345:187;19361:19:::0;;::::1;19345:187;;;19403:12;19421:8;;19430:1;19421:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;:23;;19445:8;;19454:1;19445:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:16;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;19421:41;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19402:60;;;19485:7;19477:43;;;::::0;::::1;::::0;;6321:2:1;19477:43:0::1;::::0;::::1;6303:21:1::0;6360:2;6340:18;;;6333:30;6399:25;6379:18;;;6372:53;6442:18;;19477:43:0::1;6119:347:1::0;19477:43:0::1;-1:-1:-1::0;19382:3:0;::::1;::::0;::::1;:::i;:::-;;;;19345:187;;;;19262:277:::0;;:::o;38938:669::-;37733:31;:10;37753;37733:19;:31::i;:::-;37725:72;;;;;;;7062:2:1;37725:72:0;;;7044:21:1;7101:2;7081:18;;;7074:30;7140;7120:18;;;7113:58;7188:18;;37725:72:0;6860:352:1;37725:72:0;34661:1:::1;35259:7;;:19:::0;35251:63:::1;;;::::0;::::1;::::0;;7419:2:1;35251:63:0::1;::::0;::::1;7401:21:1::0;7458:2;7438:18;;;7431:30;7497:33;7477:18;;;7470:61;7548:18;;35251:63:0::1;7217:355:1::0;35251:63:0::1;34661:1;35392:7;:18:::0;39130:21:::2;::::0;::::2;39096:31;39130:21:::0;;;:14:::2;:21;::::0;;;;;::::2;;::::0;39166:15:::2;:43;;;;;;;;:::i;:::-;::::0;39162:369:::2;;39226:45;:26;::::0;::::2;39253:9:::0;39264:6;39226:26:::2;:45::i;:::-;39162:369;;;39312:36;39293:15;:55;;;;;;;;:::i;:::-;::::0;39289:242:::2;;39365:35;::::0;;;;::::2;::::0;::::2;7723:25:1::0;;;39365:27:0::2;::::0;::::2;::::0;::::2;::::0;7696:18:1;;39365:35:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;39415:35:0::2;::::0;:27:::2;::::0;::::2;::::0;-1:-1:-1;39415:35:0;::::2;;;::::0;-1:-1:-1;39443:6:0;;39415:35:::2;::::0;;;39443:6;39415:27;:35;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;39289:242;;;39483:36;::::0;;;;:17:::2;7951:55:1::0;;;39483:36:0::2;::::0;::::2;7933:74:1::0;8023:18;;;8016:34;;;39483:17:0;::::2;::::0;::::2;::::0;7906:18:1;;39483:36:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;39289:242;39581:9;39546:53;;39564:15;39546:53;;;;;;;;:::i;:::-;39557:5;39546:53;;;39592:6;39546:53;;;;7723:25:1::0;;7711:2;7696:18;;7577:177;39546:53:0::2;;;;;;;;-1:-1:-1::0;;34617:1:0::1;35571:22:::0;;-1:-1:-1;;38938:669:0:o;38709:221::-;19097:9;;;;19083:10;:23;19075:45;;;;;;;3678:2:1;19075:45:0;;;3660:21:1;3717:1;3697:18;;;3690:29;3755:11;3735:18;;;3728:39;3784:18;;19075:45:0;3476:332:1;19075:45:0;38795:25:::1;::::0;::::1;38787:34;;;::::0;::::1;;38863:10;::::0;38837:50:::1;::::0;::::1;::::0;;::::1;::::0;38863:10:::1;::::0;38851::::1;::::0;38837:50:::1;::::0;38863:10:::1;::::0;38837:50:::1;38898:10;:24:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;38709:221::o;39615:115::-;19097:9;;;;19083:10;:23;19075:45;;;;;;;3678:2:1;19075:45:0;;;3660:21:1;3717:1;3697:18;;;3690:29;3755:11;3735:18;;;3728:39;3784:18;;19075:45:0;3476:332:1;19075:45:0;39698:24:::1;39708:5;39715:6;39698:9;:24::i;:::-;39615:115:::0;;:::o;28050:152::-;28120:4;28144:50;28149:3;28169:23;;;28144:4;:50::i;:::-;28137:57;28050:152;-1:-1:-1;;;28050:152:0:o;28378:158::-;28451:4;28475:53;28483:3;28503:23;;;28475:7;:53::i;39877:326::-;39967:24;;;;39946:18;39967:24;;;:17;:24;;;;;;;;40002:73;;;;;;;8263:2:1;40002:73:0;;;8245:21:1;8302:2;8282:18;;;8275:30;8341:34;8321:18;;;8314:62;8412:6;8392:18;;;8385:34;8436:19;;40002:73:0;8061:400:1;40002:73:0;40086:46;:26;;;40113:10;40125:6;40086:26;:46::i;:::-;40176:10;40148:47;;40169:5;40148:47;;40157:10;40148:47;;;40188:6;40148:47;;;;7723:25:1;;7711:2;7696:18;;7577:177;40148:47:0;;;;;;;;39935:268;39877:326;;:::o;28622:167::-;28756:23;;;28702:4;24158:19;;;:12;;;:19;;;;;;:24;;28726:55;24061:129;14628:211;14772:58;;;7963:42:1;7951:55;;14772:58:0;;;7933:74:1;8023:18;;;;8016:34;;;14772:58:0;;;;;;;;;;7906:18:1;;;;14772:58:0;;;;;;;;;;14795:23;14772:58;;;14745:86;;14765:5;;14745:19;:86::i;21965:414::-;22028:4;24158:19;;;:12;;;:19;;;;;;22045:327;;-1:-1:-1;22088:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;22271:18;;22249:19;;;:12;;;:19;;;;;;:40;;;;22304:11;;22045:327;-1:-1:-1;22355:5:0;22348:12;;22555:1420;22621:4;22760:19;;;:12;;;:19;;;;;;22796:15;;22792:1176;;23171:21;23195:14;23208:1;23195:10;:14;:::i;:::-;23244:18;;23171:38;;-1:-1:-1;23224:17:0;;23244:22;;23265:1;;23244:22;:::i;:::-;23224:42;;23300:13;23287:9;:26;23283:405;;23334:17;23354:3;:11;;23366:9;23354:22;;;;;;;;:::i;:::-;;;;;;;;;23334:42;;23508:9;23479:3;:11;;23491:13;23479:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;23593:23;;;:12;;;:23;;;;;:36;;;23283:405;23769:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;23864:3;:12;;:19;23877:5;23864:19;;;;;;;;;;;23857:26;;;23907:4;23900:11;;;;;;;22792:1176;23951:5;23944:12;;;;;17695:716;18119:23;18145:69;18173:4;18145:69;;;;;;;;;;;;;;;;;18153:5;18145:27;;;;:69;;;;;:::i;:::-;18229:17;;18119:95;;-1:-1:-1;18229:21:0;18225:179;;18326:10;18315:30;;;;;;;;;;;;:::i;:::-;18307:85;;;;;;;9269:2:1;18307:85:0;;;9251:21:1;9308:2;9288:18;;;9281:30;9347:34;9327:18;;;9320:62;9418:12;9398:18;;;9391:40;9448:19;;18307:85:0;9067:406:1;9335:229:0;9472:12;9504:52;9526:6;9534:4;9540:1;9543:12;9504:21;:52::i;:::-;9497:59;9335:229;-1:-1:-1;;;;9335:229:0:o;10455:510::-;10625:12;10683:5;10658:21;:30;;10650:81;;;;;;;9680:2:1;10650:81:0;;;9662:21:1;9719:2;9699:18;;;9692:30;9758:34;9738:18;;;9731:62;9829:8;9809:18;;;9802:36;9855:19;;10650:81:0;9478:402:1;10650:81:0;6885:19;;;;10742:60;;;;;;;10087:2:1;10742:60:0;;;10069:21:1;10126:2;10106:18;;;10099:30;10165:31;10145:18;;;10138:59;10214:18;;10742:60:0;9885:353:1;10742:60:0;10816:12;10830:23;10857:6;:11;;10876:5;10883:4;10857:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10815:73;;;;10906:51;10923:7;10932:10;10944:12;10906:16;:51::i;:::-;10899:58;10455:510;-1:-1:-1;;;;;;;10455:510:0:o;13141:762::-;13291:12;13320:7;13316:580;;;-1:-1:-1;13351:10:0;13344:17;;13316:580;13465:17;;:21;13461:424;;13713:10;13707:17;13774:15;13761:10;13757:2;13753:19;13746:44;13461:424;13856:12;13849:20;;;;;;;;;;;:::i;14:184:1:-;66:77;63:1;56:88;163:4;160:1;153:15;187:4;184:1;177:15;203:196;271:20;;331:42;320:54;;310:65;;300:93;;389:1;386;379:12;300:93;203:196;;;:::o;404:186::-;463:6;516:2;504:9;495:7;491:23;487:32;484:52;;;532:1;529;522:12;484:52;555:29;574:9;555:29;:::i;595:260::-;663:6;671;724:2;712:9;703:7;699:23;695:32;692:52;;;740:1;737;730:12;692:52;763:29;782:9;763:29;:::i;:::-;753:39;;811:38;845:2;834:9;830:18;811:38;:::i;:::-;801:48;;595:260;;;;;:::o;860:184::-;912:77;909:1;902:88;1009:4;1006:1;999:15;1033:4;1030:1;1023:15;1049:405;1201:2;1186:18;;1234:1;1223:13;;1213:201;;1270:77;1267:1;1260:88;1371:4;1368:1;1361:15;1399:4;1396:1;1389:15;1213:201;1423:25;;;1049:405;:::o;1690:350::-;1778:6;1786;1839:2;1827:9;1818:7;1814:23;1810:32;1807:52;;;1855:1;1852;1845:12;1807:52;1878:29;1897:9;1878:29;:::i;:::-;1868:39;;1957:2;1946:9;1942:18;1929:32;1990:1;1983:5;1980:12;1970:40;;2006:1;2003;1996:12;1970:40;2029:5;2019:15;;;1690:350;;;;;:::o;2237:642::-;2350:6;2358;2411:2;2399:9;2390:7;2386:23;2382:32;2379:52;;;2427:1;2424;2417:12;2379:52;2467:9;2454:23;2496:18;2537:2;2529:6;2526:14;2523:34;;;2553:1;2550;2543:12;2523:34;2591:6;2580:9;2576:22;2566:32;;2636:7;2629:4;2625:2;2621:13;2617:27;2607:55;;2658:1;2655;2648:12;2607:55;2698:2;2685:16;2724:2;2716:6;2713:14;2710:34;;;2740:1;2737;2730:12;2710:34;2793:7;2788:2;2778:6;2775:1;2771:14;2767:2;2763:23;2759:32;2756:45;2753:65;;;2814:1;2811;2804:12;2753:65;2845:2;2837:11;;;;;2867:6;;-1:-1:-1;2237:642:1;;-1:-1:-1;;;;2237:642:1:o;2884:328::-;2961:6;2969;2977;3030:2;3018:9;3009:7;3005:23;3001:32;2998:52;;;3046:1;3043;3036:12;2998:52;3069:29;3088:9;3069:29;:::i;:::-;3059:39;;3117:38;3151:2;3140:9;3136:18;3117:38;:::i;:::-;3107:48;;3202:2;3191:9;3187:18;3174:32;3164:42;;2884:328;;;;;:::o;3217:254::-;3285:6;3293;3346:2;3334:9;3325:7;3321:23;3317:32;3314:52;;;3362:1;3359;3352:12;3314:52;3385:29;3404:9;3385:29;:::i;:::-;3375:39;3461:2;3446:18;;;;3433:32;;-1:-1:-1;;;3217:254:1:o;4150:184::-;4220:6;4273:2;4261:9;4252:7;4248:23;4244:32;4241:52;;;4289:1;4286;4279:12;4241:52;-1:-1:-1;4312:16:1;;4150:184;-1:-1:-1;4150:184:1:o;4681:::-;4733:77;4730:1;4723:88;4830:4;4827:1;4820:15;4854:4;4851:1;4844:15;4870:383;4963:4;5021:11;5008:25;5111:66;5100:8;5084:14;5080:29;5076:102;5056:18;5052:127;5042:155;;5193:1;5190;5183:12;5042:155;5214:33;;;;;4870:383;-1:-1:-1;;4870:383:1:o;5258:580::-;5335:4;5341:6;5401:11;5388:25;5491:66;5480:8;5464:14;5460:29;5456:102;5436:18;5432:127;5422:155;;5573:1;5570;5563:12;5422:155;5600:33;;5652:20;;;-1:-1:-1;5695:18:1;5684:30;;5681:50;;;5727:1;5724;5717:12;5681:50;5760:4;5748:17;;-1:-1:-1;5791:14:1;5787:27;;;5777:38;;5774:58;;;5828:1;5825;5818:12;5774:58;5258:580;;;;;:::o;5843:271::-;6026:6;6018;6013:3;6000:33;5982:3;6052:16;;6077:13;;;6052:16;5843:271;-1:-1:-1;5843:271:1:o;6471:184::-;6523:77;6520:1;6513:88;6620:4;6617:1;6610:15;6644:4;6641:1;6634:15;6660:195;6699:3;6730:66;6723:5;6720:77;6717:103;;6800:18;;:::i;:::-;-1:-1:-1;6847:1:1;6836:13;;6660:195::o;8466:125::-;8506:4;8534:1;8531;8528:8;8525:34;;;8539:18;;:::i;:::-;-1:-1:-1;8576:9:1;;8466:125::o;8596:184::-;8648:77;8645:1;8638:88;8745:4;8742:1;8735:15;8769:4;8766:1;8759:15;8785:277;8852:6;8905:2;8893:9;8884:7;8880:23;8876:32;8873:52;;;8921:1;8918;8911:12;8873:52;8953:9;8947:16;9006:5;8999:13;8992:21;8985:5;8982:32;8972:60;;9028:1;9025;9018:12;10243:258;10315:1;10325:113;10339:6;10336:1;10333:13;10325:113;;;10415:11;;;10409:18;10396:11;;;10389:39;10361:2;10354:10;10325:113;;;10456:6;10453:1;10450:13;10447:48;;;10491:1;10482:6;10477:3;10473:16;10466:27;10447:48;;10243:258;;;:::o;10506:274::-;10635:3;10673:6;10667:13;10689:53;10735:6;10730:3;10723:4;10715:6;10711:17;10689:53;:::i;10785:442::-;10934:2;10923:9;10916:21;10897:4;10966:6;10960:13;11009:6;11004:2;10993:9;10989:18;10982:34;11025:66;11084:6;11079:2;11068:9;11064:18;11059:2;11051:6;11047:15;11025:66;:::i;:::-;11143:2;11131:15;11148:66;11127:88;11112:104;;;;11218:2;11108:113;;10785:442;-1:-1:-1;;10785:442:1:o
Swarm Source
ipfs://e539a752a597fc886f9e304e88449d0ab8feba57e1f5095771885314e4ee9d3c
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.