Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,057 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit For Burn | 21496959 | 19 hrs ago | IN | 0 ETH | 0.00061992 | ||||
Deposit For Burn | 21494655 | 27 hrs ago | IN | 0 ETH | 0.00258681 | ||||
Deposit For Burn | 21493577 | 30 hrs ago | IN | 0 ETH | 0.00093343 | ||||
Deposit For Burn | 21491635 | 37 hrs ago | IN | 0 ETH | 0.00068239 | ||||
Deposit For Burn | 21477272 | 3 days ago | IN | 0 ETH | 0.00079261 | ||||
Deposit For Burn | 21475437 | 3 days ago | IN | 0 ETH | 0.00080998 | ||||
Deposit For Burn | 21473733 | 4 days ago | IN | 0 ETH | 0.00133399 | ||||
Deposit For Burn | 21471701 | 4 days ago | IN | 0 ETH | 0.00128309 | ||||
Deposit For Burn | 21468203 | 4 days ago | IN | 0 ETH | 0.0019062 | ||||
Deposit For Burn | 21467476 | 4 days ago | IN | 0 ETH | 0.00181956 | ||||
Deposit For Burn | 21466680 | 5 days ago | IN | 0 ETH | 0.00222275 | ||||
Deposit For Burn | 21466494 | 5 days ago | IN | 0 ETH | 0.00367801 | ||||
Deposit For Burn | 21466456 | 5 days ago | IN | 0 ETH | 0.00265403 | ||||
Deposit For Burn | 21465473 | 5 days ago | IN | 0 ETH | 0.00108719 | ||||
Deposit For Burn | 21464947 | 5 days ago | IN | 0 ETH | 0.00107294 | ||||
Deposit For Burn | 21461597 | 5 days ago | IN | 0 ETH | 0.00086553 | ||||
Deposit For Burn | 21461313 | 5 days ago | IN | 0 ETH | 0.0007111 | ||||
Deposit For Burn | 21455697 | 6 days ago | IN | 0 ETH | 0.00098558 | ||||
Deposit For Burn | 21455032 | 6 days ago | IN | 0 ETH | 0.00107791 | ||||
Deposit For Burn | 21453206 | 6 days ago | IN | 0 ETH | 0.001289 | ||||
Deposit For Burn | 21452902 | 6 days ago | IN | 0 ETH | 0.00143504 | ||||
Deposit For Burn | 21451083 | 7 days ago | IN | 0 ETH | 0.00154768 | ||||
Deposit For Burn | 21450929 | 7 days ago | IN | 0 ETH | 0.00168666 | ||||
Deposit For Burn | 21450903 | 7 days ago | IN | 0 ETH | 0.00152641 | ||||
Deposit For Burn | 21449383 | 7 days ago | IN | 0 ETH | 0.00133041 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CircleBridgeProxy
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.17; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "./FeeOperator.sol"; import "../interfaces/ICircleBridge.sol"; import "../safeguard/Governor.sol"; import "../safeguard/Pauser.sol"; contract CircleBridgeProxy is FeeOperator, Governor, Pauser, ReentrancyGuard { using SafeERC20 for IERC20; address public immutable circleBridge; uint32 public feePercGlobal; //in 1e6 // chainId => feePercOverride, support override fee perc by dst chain mapping(uint64 => uint32) public feePercOverride; /// per dest chain id executor fee in this chain's USDC token mapping(uint64 => uint256) public dstTxFee; // 0 is regarded as not registered. Set to a negative value if target domain is actually 0. mapping(uint64 => int32) public chidToDomain; event FeePercUpdated(uint64[] chainIds, uint32[] feePercs); event TxFeeUpdated(uint64[] chainIds, uint256[] fees); event ChidToDomainUpdated(uint64[] chainIds, int32[] domains); event Deposited(address sender, bytes32 recipient, uint64 dstChid, uint256 amount, uint256 txFee, uint256 percFee, uint64 nonce); constructor( address _circleBridge, address _feeCollector ) FeeOperator(_feeCollector) { circleBridge = _circleBridge; } function depositForBurn( uint256 _amount, uint64 _dstChid, bytes32 _mintRecipient, address _burnToken ) external nonReentrant whenNotPaused returns (uint64 _nonce) { int32 dstDomain = chidToDomain[_dstChid]; require (dstDomain != 0, "dst domain not registered"); if (dstDomain < 0) { dstDomain = 0; // a negative value indicates the target domain is 0 actually. } (uint256 fee, uint256 txFee, uint256 percFee) = totalFee(_amount, _dstChid); require (_amount > fee, "fee not covered"); IERC20(_burnToken).safeTransferFrom(msg.sender, address(this), _amount); uint256 bridgeAmt = _amount - fee; IERC20(_burnToken).safeIncreaseAllowance(circleBridge, bridgeAmt); _nonce = ICircleBridge(circleBridge).depositForBurn(bridgeAmt, uint32(dstDomain), _mintRecipient, _burnToken); IERC20(_burnToken).safeApprove(circleBridge, 0); emit Deposited(msg.sender, _mintRecipient, _dstChid, _amount, txFee, percFee, _nonce); } function totalFee( uint256 _amount, uint64 _dstChid ) public view returns (uint256 _fee, uint256 _txFee, uint256 _percFee) { uint32 feePerc = feePercOverride[_dstChid]; if (feePerc == 0) { feePerc = feePercGlobal; } _txFee = dstTxFee[_dstChid]; _percFee = (_amount * feePerc) / 1e6; _fee = _txFee + _percFee; } function setFeePerc(uint64[] calldata _chainIds, uint32[] calldata _feePercs) external onlyGovernor { require(_chainIds.length == _feePercs.length, "length mismatch"); for (uint256 i = 0; i < _chainIds.length; i++) { require(_feePercs[i] < 1e6, "fee percentage too large"); if (_chainIds[i] == 0) { feePercGlobal = _feePercs[i]; } else { feePercOverride[_chainIds[i]] = _feePercs[i]; } } emit FeePercUpdated(_chainIds, _feePercs); } function setTxFee(uint64[] calldata _chainIds, uint256[] calldata _fees) external onlyGovernor { require(_chainIds.length == _fees.length, "length mismatch"); for (uint256 i = 0; i < _chainIds.length; i++) { dstTxFee[_chainIds[i]] = _fees[i]; } emit TxFeeUpdated(_chainIds, _fees); } function setChidToDomain(uint64[] calldata _chainIds, int32[] calldata _domains) external onlyGovernor { require(_chainIds.length == _domains.length, "length mismatch"); for (uint256 i = 0; i < _chainIds.length; i++) { chidToDomain[_chainIds[i]] = _domains[i]; } emit ChidToDomainUpdated(_chainIds, _domains); } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.17; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "../safeguard/Ownable.sol"; abstract contract FeeOperator is Ownable { using SafeERC20 for IERC20; address public feeCollector; event FeeCollectorUpdated(address from, address to); modifier onlyFeeCollector() { require(msg.sender == feeCollector, "not fee collector"); _; } constructor(address _feeCollector) { feeCollector = _feeCollector; } function collectFee(address[] calldata _tokens, address _to) external onlyFeeCollector { for (uint256 i = 0; i < _tokens.length; i++) { // use zero address to denote native token if (_tokens[i] == address(0)) { uint256 bal = address(this).balance; (bool sent, ) = _to.call{value: bal, gas: 50000}(""); require(sent, "send native failed"); } else { uint256 balance = IERC20(_tokens[i]).balanceOf(address(this)); IERC20(_tokens[i]).safeTransfer(_to, balance); } } } function setFeeCollector(address _feeCollector) external onlyOwner { address oldFeeCollector = feeCollector; feeCollector = _feeCollector; emit FeeCollectorUpdated(oldFeeCollector, _feeCollector); } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. * * This adds a normal func that setOwner if _owner is address(0). So we can't allow * renounceOwnership. So we can support Proxy based upgradable contract */ abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(msg.sender); } /** * @dev Only to be called by inherit contracts, in their init func called by Proxy * we require _owner == address(0), which is only possible when it's a delegateCall * because constructor sets _owner in contract state. */ function initOwner() internal { require(_owner == address(0), "owner already set"); _setOwner(msg.sender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == msg.sender, "Ownable: caller is not the owner"); _; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.8.0; interface ICircleBridge { /** * @notice Deposits and burns tokens from sender to be minted on destination domain. * Emits a `DepositForBurn` event. * @dev reverts if: * - given burnToken is not supported * - given destinationDomain has no CircleBridge registered * - transferFrom() reverts. For example, if sender's burnToken balance or approved allowance * to this contract is less than `amount`. * - burn() reverts. For example, if `amount` is 0. * - MessageTransmitter returns false or reverts. * @param _amount amount of tokens to burn * @param _destinationDomain destination domain (ETH = 0, AVAX = 1) * @param _mintRecipient address of mint recipient on destination domain * @param _burnToken address of contract to burn deposited tokens, on local domain * @return _nonce unique nonce reserved by message */ function depositForBurn( uint256 _amount, uint32 _destinationDomain, bytes32 _mintRecipient, address _burnToken ) external returns (uint64 _nonce); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity 0.8.17; import "./Ownable.sol"; abstract contract Governor is Ownable { mapping(address => bool) public governors; event GovernorAdded(address account); event GovernorRemoved(address account); modifier onlyGovernor() { require(isGovernor(msg.sender), "Caller is not governor"); _; } constructor() { _addGovernor(msg.sender); } function isGovernor(address _account) public view returns (bool) { return governors[_account]; } function addGovernor(address _account) public onlyOwner { _addGovernor(_account); } function removeGovernor(address _account) public onlyOwner { _removeGovernor(_account); } function renounceGovernor() public { _removeGovernor(msg.sender); } function _addGovernor(address _account) private { require(!isGovernor(_account), "Account is already governor"); governors[_account] = true; emit GovernorAdded(_account); } function _removeGovernor(address _account) private { require(isGovernor(_account), "Account is not governor"); governors[_account] = false; emit GovernorRemoved(_account); } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity 0.8.17; import "@openzeppelin/contracts/security/Pausable.sol"; import "./Ownable.sol"; abstract contract Pauser is Ownable, Pausable { mapping(address => bool) public pausers; event PauserAdded(address account); event PauserRemoved(address account); constructor() { _addPauser(msg.sender); } modifier onlyPauser() { require(isPauser(msg.sender), "Caller is not pauser"); _; } function pause() public onlyPauser { _pause(); } function unpause() public onlyPauser { _unpause(); } function isPauser(address account) public view returns (bool) { return pausers[account]; } function addPauser(address account) public onlyOwner { _addPauser(account); } function removePauser(address account) public onlyOwner { _removePauser(account); } function renouncePauser() public { _removePauser(msg.sender); } function _addPauser(address account) private { require(!isPauser(account), "Account is already pauser"); pausers[account] = true; emit PauserAdded(account); } function _removePauser(address account) private { require(isPauser(account), "Account is not pauser"); pausers[account] = false; emit PauserRemoved(account); } }
// SPDX-License-Identifier: MIT // 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; import "../../../utils/Address.sol"; /** * @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)); } } /** * @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"); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "metadata": { "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 800 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_circleBridge","type":"address"},{"internalType":"address","name":"_feeCollector","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64[]","name":"chainIds","type":"uint64[]"},{"indexed":false,"internalType":"int32[]","name":"domains","type":"int32[]"}],"name":"ChidToDomainUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"bytes32","name":"recipient","type":"bytes32"},{"indexed":false,"internalType":"uint64","name":"dstChid","type":"uint64"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"txFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"percFee","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"nonce","type":"uint64"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"FeeCollectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64[]","name":"chainIds","type":"uint64[]"},{"indexed":false,"internalType":"uint32[]","name":"feePercs","type":"uint32[]"}],"name":"FeePercUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"GovernorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"GovernorRemoved","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64[]","name":"chainIds","type":"uint64[]"},{"indexed":false,"internalType":"uint256[]","name":"fees","type":"uint256[]"}],"name":"TxFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"addGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addPauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"name":"chidToDomain","outputs":[{"internalType":"int32","name":"","type":"int32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circleBridge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"address","name":"_to","type":"address"}],"name":"collectFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint64","name":"_dstChid","type":"uint64"},{"internalType":"bytes32","name":"_mintRecipient","type":"bytes32"},{"internalType":"address","name":"_burnToken","type":"address"}],"name":"depositForBurn","outputs":[{"internalType":"uint64","name":"_nonce","type":"uint64"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"name":"dstTxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercGlobal","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"name":"feePercOverride","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"governors","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pausers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removePauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renouncePauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64[]","name":"_chainIds","type":"uint64[]"},{"internalType":"int32[]","name":"_domains","type":"int32[]"}],"name":"setChidToDomain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeCollector","type":"address"}],"name":"setFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64[]","name":"_chainIds","type":"uint64[]"},{"internalType":"uint32[]","name":"_feePercs","type":"uint32[]"}],"name":"setFeePerc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64[]","name":"_chainIds","type":"uint64[]"},{"internalType":"uint256[]","name":"_fees","type":"uint256[]"}],"name":"setTxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint64","name":"_dstChid","type":"uint64"}],"name":"totalFee","outputs":[{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"uint256","name":"_txFee","type":"uint256"},{"internalType":"uint256","name":"_percFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b506040516200264b3803806200264b83398101604081905262000034916200028f565b80620000403362000098565b600180546001600160a01b0319166001600160a01b03929092169190911790556200006b33620000e8565b6003805460ff191690556200008033620001b2565b5060016005556001600160a01b0316608052620002c7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811660009081526002602052604090205460ff1615620001575760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920676f7665726e6f72000000000060448201526064015b60405180910390fd5b6001600160a01b038116600081815260026020908152604091829020805460ff1916600117905590519182527fdc5a48d79e2e147530ff63ecdbed5a5a66adb9d5cf339384d5d076da197c40b591015b60405180910390a150565b6001600160a01b03811660009081526004602052604090205460ff16156200021d5760405162461bcd60e51b815260206004820152601960248201527f4163636f756e7420697320616c7265616479207061757365720000000000000060448201526064016200014e565b6001600160a01b038116600081815260046020908152604091829020805460ff1916600117905590519182527f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f89101620001a7565b80516001600160a01b03811681146200028a57600080fd5b919050565b60008060408385031215620002a357600080fd5b620002ae8362000272565b9150620002be6020840162000272565b90509250929050565b608051612353620002f8600039600081816101ce0152818161068a015281816106e8015261076601526123536000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806380f51c12116100f9578063e026049c11610097578063ee90fc4011610071578063ee90fc401461046c578063eecdac881461049a578063efcfd8f5146104ad578063f2fde38b146104c057600080fd5b8063e026049c14610415578063e3eece261461041d578063e43581b81461044057600080fd5b80638da5cb5b116100d35780638da5cb5b146103cb578063a42dce80146103dc578063ab9341fd146103ef578063c415b95c1461040257600080fd5b806380f51c121461038d57806382dc1ec4146103b05780638456cb59146103c357600080fd5b80633f4ba83a116101665780634c982597116101405780634c982597146103545780635c975abb146103675780636b2c0f55146103725780636ef8d66d1461038557600080fd5b80633f4ba83a146102fd57806343530a811461030557806346fbf68e1461031857600080fd5b80631b286896116101a25780631b286896146102685780632fbb00ac146102965780633c4a25d0146102c25780633e07d172146102d757600080fd5b806301a67b6b146101c9578063027bcb871461020d5780630bd930b414610243575b600080fd5b6101f07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61023061021b366004611e15565b60096020526000908152604090205460030b81565b60405160039190910b8152602001610204565b6006546102539063ffffffff1681565b60405163ffffffff9091168152602001610204565b610288610276366004611e15565b60086020526000908152604090205481565b604051908152602001610204565b6102a96102a4366004611e4e565b6104d3565b60405167ffffffffffffffff9091168152602001610204565b6102d56102d0366004611e96565b610805565b005b6102536102e5366004611e15565b60076020526000908152604090205463ffffffff1681565b6102d561087a565b6102d5610313366004611efd565b6108e3565b610344610326366004611e96565b6001600160a01b031660009081526004602052604090205460ff1690565b6040519015158152602001610204565b6102d5610362366004611efd565b610a43565b60035460ff16610344565b6102d5610380366004611e96565b610bba565b6102d5610c2c565b61034461039b366004611e96565b60046020526000908152604090205460ff1681565b6102d56103be366004611e96565b610c35565b6102d5610ca7565b6000546001600160a01b03166101f0565b6102d56103ea366004611e96565b610d0e565b6102d56103fd366004611efd565b610de5565b6001546101f0906001600160a01b031681565b6102d5611059565b61034461042b366004611e96565b60026020526000908152604090205460ff1681565b61034461044e366004611e96565b6001600160a01b031660009081526002602052604090205460ff1690565b61047f61047a366004611f69565b611062565b60408051938452602084019290925290820152606001610204565b6102d56104a8366004611e96565b6110e8565b6102d56104bb366004611f99565b61115a565b6102d56104ce366004611e96565b611390565b600060026005540361052c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260055560035460ff16156105775760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610523565b67ffffffffffffffff841660009081526009602052604081205460030b908190036105e45760405162461bcd60e51b815260206004820152601960248201527f64737420646f6d61696e206e6f742072656769737465726564000000000000006044820152606401610523565b60008160030b12156105f4575060005b60008060006106038989611062565b9250925092508289116106585760405162461bcd60e51b815260206004820152600f60248201527f666565206e6f7420636f766572656400000000000000000000000000000000006044820152606401610523565b61066d6001600160a01b03871633308c61147e565b6000610679848b612003565b90506106af6001600160a01b0388167f000000000000000000000000000000000000000000000000000000000000000083611516565b6040516337e9a82760e11b81526004810182905263ffffffff86166024820152604481018990526001600160a01b0388811660648301527f00000000000000000000000000000000000000000000000000000000000000001690636fd3504e906084016020604051808303816000875af1158015610731573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610755919061201c565b955061078c6001600160a01b0388167f000000000000000000000000000000000000000000000000000000000000000060006115c8565b60408051338152602081018a905267ffffffffffffffff8b811682840152606082018d90526080820186905260a08201859052881660c082015290517fa2ca2ced575b143e45f6b68b9e9c92fc0ddfc107807c711f5f28ff625fea8e519181900360e00190a15050600160055550919695505050505050565b336108186000546001600160a01b031690565b6001600160a01b03161461086e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610523565b610877816116e9565b50565b3360009081526004602052604090205460ff166108d95760405162461bcd60e51b815260206004820152601460248201527f43616c6c6572206973206e6f74207061757365720000000000000000000000006044820152606401610523565b6108e16117ad565b565b3360009081526002602052604090205460ff166109425760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f7420676f7665726e6f72000000000000000000006044820152606401610523565b8281146109835760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610523565b60005b838110156109ff578282828181106109a0576109a0612039565b90506020020135600860008787858181106109bd576109bd612039565b90506020020160208101906109d29190611e15565b67ffffffffffffffff168152602081019190915260400160002055806109f78161204f565b915050610986565b507f3a331334e3690640b58b9d6889de0e68c9fec44c8e586b0f69eaa013f530e40c84848484604051610a3594939291906120b2565b60405180910390a150505050565b3360009081526002602052604090205460ff16610aa25760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f7420676f7665726e6f72000000000000000000006044820152606401610523565b828114610ae35760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610523565b60005b83811015610b8457828282818110610b0057610b00612039565b9050602002016020810190610b159190612129565b60096000878785818110610b2b57610b2b612039565b9050602002016020810190610b409190611e15565b67ffffffffffffffff1681526020810191909152604001600020805463ffffffff191663ffffffff9290921691909117905580610b7c8161204f565b915050610ae6565b507f99a427604fce28915eae6edfacfd125c0ed4393b0d54e90002f2ef13f120e4f884848484604051610a359493929190612144565b33610bcd6000546001600160a01b031690565b6001600160a01b031614610c235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610523565b61087781611849565b6108e133611849565b33610c486000546001600160a01b031690565b6001600160a01b031614610c9e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610523565b61087781611902565b3360009081526004602052604090205460ff16610d065760405162461bcd60e51b815260206004820152601460248201527f43616c6c6572206973206e6f74207061757365720000000000000000000000006044820152606401610523565b6108e16119bf565b33610d216000546001600160a01b031690565b6001600160a01b031614610d775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610523565b600180546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527f5d16ad41baeb009cd23eb8f6c7cde5c2e0cd5acf4a33926ab488875c37c37f38910160405180910390a15050565b3360009081526002602052604090205460ff16610e445760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f7420676f7665726e6f72000000000000000000006044820152606401610523565b828114610e855760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610523565b60005b8381101561102357620f4240838383818110610ea657610ea6612039565b9050602002016020810190610ebb91906121b5565b63ffffffff1610610f0e5760405162461bcd60e51b815260206004820152601860248201527f6665652070657263656e7461676520746f6f206c6172676500000000000000006044820152606401610523565b848482818110610f2057610f20612039565b9050602002016020810190610f359190611e15565b67ffffffffffffffff16600003610f8c57828282818110610f5857610f58612039565b9050602002016020810190610f6d91906121b5565b6006805463ffffffff191663ffffffff92909216919091179055611011565b828282818110610f9e57610f9e612039565b9050602002016020810190610fb391906121b5565b60076000878785818110610fc957610fc9612039565b9050602002016020810190610fde9190611e15565b67ffffffffffffffff1681526020810191909152604001600020805463ffffffff191663ffffffff929092169190911790555b8061101b8161204f565b915050610e88565b507f541df5e570cf10ffe04899eebd9eebebd1c54e2bd4af9f24b23fb4a40c6ea00b84848484604051610a3594939291906121d0565b6108e133611a3a565b67ffffffffffffffff81166000908152600760205260408120548190819063ffffffff16808203611098575060065463ffffffff165b67ffffffffffffffff85166000908152600860205260409020549250620f42406110c863ffffffff831688612223565b6110d2919061223a565b91506110de828461225c565b9350509250925092565b336110fb6000546001600160a01b031690565b6001600160a01b0316146111515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610523565b61087781611a3a565b6001546001600160a01b031633146111b45760405162461bcd60e51b815260206004820152601160248201527f6e6f742066656520636f6c6c6563746f720000000000000000000000000000006044820152606401610523565b60005b8281101561138a5760008484838181106111d3576111d3612039565b90506020020160208101906111e89190611e96565b6001600160a01b0316036112a55760405147906000906001600160a01b0385169061c35090849084818181858888f193505050503d8060008114611248576040519150601f19603f3d011682016040523d82523d6000602084013e61124d565b606091505b505090508061129e5760405162461bcd60e51b815260206004820152601260248201527f73656e64206e6174697665206661696c656400000000000000000000000000006044820152606401610523565b5050611378565b60008484838181106112b9576112b9612039565b90506020020160208101906112ce9190611e96565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611314573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611338919061226f565b9050611376838287878681811061135157611351612039565b90506020020160208101906113669190611e96565b6001600160a01b03169190611af3565b505b806113828161204f565b9150506111b7565b50505050565b336113a36000546001600160a01b031690565b6001600160a01b0316146113f95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610523565b6001600160a01b0381166114755760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610523565b61087781611b23565b6040516001600160a01b038085166024830152831660448201526064810182905261138a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611b80565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158b919061226f565b611595919061225c565b6040516001600160a01b03851660248201526044810182905290915061138a90859063095ea7b360e01b906064016114b2565b8015806116425750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561161c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611640919061226f565b155b6116b45760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610523565b6040516001600160a01b0383166024820152604481018290526116e490849063095ea7b360e01b906064016114b2565b505050565b6001600160a01b03811660009081526002602052604090205460ff16156117525760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920676f7665726e6f7200000000006044820152606401610523565b6001600160a01b038116600081815260026020908152604091829020805460ff1916600117905590519182527fdc5a48d79e2e147530ff63ecdbed5a5a66adb9d5cf339384d5d076da197c40b591015b60405180910390a150565b60035460ff166117ff5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610523565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b03811660009081526004602052604090205460ff166118b15760405162461bcd60e51b815260206004820152601560248201527f4163636f756e74206973206e6f742070617573657200000000000000000000006044820152606401610523565b6001600160a01b038116600081815260046020908152604091829020805460ff1916905590519182527fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e91016117a2565b6001600160a01b03811660009081526004602052604090205460ff161561196b5760405162461bcd60e51b815260206004820152601960248201527f4163636f756e7420697320616c726561647920706175736572000000000000006044820152606401610523565b6001600160a01b038116600081815260046020908152604091829020805460ff1916600117905590519182527f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f891016117a2565b60035460ff1615611a055760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610523565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861182c3390565b6001600160a01b03811660009081526002602052604090205460ff16611aa25760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f7420676f7665726e6f720000000000000000006044820152606401610523565b6001600160a01b038116600081815260026020908152604091829020805460ff1916905590519182527f1ebe834e73d60a5fec822c1e1727d34bc79f2ad977ed504581cc1822fe20fb5b91016117a2565b6040516001600160a01b0383166024820152604481018290526116e490849063a9059cbb60e01b906064016114b2565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000611bd5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611c659092919063ffffffff16565b8051909150156116e45780806020019051810190611bf39190612288565b6116e45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610523565b6060611c748484600085611c7e565b90505b9392505050565b606082471015611cf65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610523565b6001600160a01b0385163b611d4d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610523565b600080866001600160a01b03168587604051611d6991906122ce565b60006040518083038185875af1925050503d8060008114611da6576040519150601f19603f3d011682016040523d82523d6000602084013e611dab565b606091505b5091509150611dbb828286611dc6565b979650505050505050565b60608315611dd5575081611c77565b825115611de55782518084602001fd5b8160405162461bcd60e51b815260040161052391906122ea565b67ffffffffffffffff8116811461087757600080fd5b600060208284031215611e2757600080fd5b8135611c7781611dff565b80356001600160a01b0381168114611e4957600080fd5b919050565b60008060008060808587031215611e6457600080fd5b843593506020850135611e7681611dff565b925060408501359150611e8b60608601611e32565b905092959194509250565b600060208284031215611ea857600080fd5b611c7782611e32565b60008083601f840112611ec357600080fd5b50813567ffffffffffffffff811115611edb57600080fd5b6020830191508360208260051b8501011115611ef657600080fd5b9250929050565b60008060008060408587031215611f1357600080fd5b843567ffffffffffffffff80821115611f2b57600080fd5b611f3788838901611eb1565b90965094506020870135915080821115611f5057600080fd5b50611f5d87828801611eb1565b95989497509550505050565b60008060408385031215611f7c57600080fd5b823591506020830135611f8e81611dff565b809150509250929050565b600080600060408486031215611fae57600080fd5b833567ffffffffffffffff811115611fc557600080fd5b611fd186828701611eb1565b9094509250611fe4905060208501611e32565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b8181038181111561201657612016611fed565b92915050565b60006020828403121561202e57600080fd5b8151611c7781611dff565b634e487b7160e01b600052603260045260246000fd5b60006001820161206157612061611fed565b5060010190565b8183526000602080850194508260005b858110156120a757813561208b81611dff565b67ffffffffffffffff1687529582019590820190600101612078565b509495945050505050565b6040815260006120c6604083018688612068565b82810360208401528381527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8411156120fe57600080fd5b8360051b80866020840137016020019695505050505050565b8035600381900b8114611e4957600080fd5b60006020828403121561213b57600080fd5b611c7782612117565b604081526000612158604083018688612068565b8281036020848101919091528482528591810160005b868110156121945761217f84612117565b60030b8252928201929082019060010161216e565b5098975050505050505050565b803563ffffffff81168114611e4957600080fd5b6000602082840312156121c757600080fd5b611c77826121a1565b6040815260006121e4604083018688612068565b8281036020848101919091528482528591810160005b868110156121945763ffffffff612210856121a1565b16825292820192908201906001016121fa565b808202811582820484141761201657612016611fed565b60008261225757634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561201657612016611fed565b60006020828403121561228157600080fd5b5051919050565b60006020828403121561229a57600080fd5b81518015158114611c7757600080fd5b60005b838110156122c55781810151838201526020016122ad565b50506000910152565b600082516122e08184602087016122aa565b9190910192915050565b60208152600082518060208401526123098160408501602087016122aa565b601f01601f1916919091016040019291505056fea2646970667358221220441d00d8fb72a6f8beedfbb0ad4bb6cdb18de5058d16ff84693a9e9f52fbc45764736f6c63430008110033000000000000000000000000bd3fa81b58ba92a82136038b25adec7066af315500000000000000000000000058b529f9084d7eaa598eb3477fe36064c5b7bbc1
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806380f51c12116100f9578063e026049c11610097578063ee90fc4011610071578063ee90fc401461046c578063eecdac881461049a578063efcfd8f5146104ad578063f2fde38b146104c057600080fd5b8063e026049c14610415578063e3eece261461041d578063e43581b81461044057600080fd5b80638da5cb5b116100d35780638da5cb5b146103cb578063a42dce80146103dc578063ab9341fd146103ef578063c415b95c1461040257600080fd5b806380f51c121461038d57806382dc1ec4146103b05780638456cb59146103c357600080fd5b80633f4ba83a116101665780634c982597116101405780634c982597146103545780635c975abb146103675780636b2c0f55146103725780636ef8d66d1461038557600080fd5b80633f4ba83a146102fd57806343530a811461030557806346fbf68e1461031857600080fd5b80631b286896116101a25780631b286896146102685780632fbb00ac146102965780633c4a25d0146102c25780633e07d172146102d757600080fd5b806301a67b6b146101c9578063027bcb871461020d5780630bd930b414610243575b600080fd5b6101f07f000000000000000000000000bd3fa81b58ba92a82136038b25adec7066af315581565b6040516001600160a01b0390911681526020015b60405180910390f35b61023061021b366004611e15565b60096020526000908152604090205460030b81565b60405160039190910b8152602001610204565b6006546102539063ffffffff1681565b60405163ffffffff9091168152602001610204565b610288610276366004611e15565b60086020526000908152604090205481565b604051908152602001610204565b6102a96102a4366004611e4e565b6104d3565b60405167ffffffffffffffff9091168152602001610204565b6102d56102d0366004611e96565b610805565b005b6102536102e5366004611e15565b60076020526000908152604090205463ffffffff1681565b6102d561087a565b6102d5610313366004611efd565b6108e3565b610344610326366004611e96565b6001600160a01b031660009081526004602052604090205460ff1690565b6040519015158152602001610204565b6102d5610362366004611efd565b610a43565b60035460ff16610344565b6102d5610380366004611e96565b610bba565b6102d5610c2c565b61034461039b366004611e96565b60046020526000908152604090205460ff1681565b6102d56103be366004611e96565b610c35565b6102d5610ca7565b6000546001600160a01b03166101f0565b6102d56103ea366004611e96565b610d0e565b6102d56103fd366004611efd565b610de5565b6001546101f0906001600160a01b031681565b6102d5611059565b61034461042b366004611e96565b60026020526000908152604090205460ff1681565b61034461044e366004611e96565b6001600160a01b031660009081526002602052604090205460ff1690565b61047f61047a366004611f69565b611062565b60408051938452602084019290925290820152606001610204565b6102d56104a8366004611e96565b6110e8565b6102d56104bb366004611f99565b61115a565b6102d56104ce366004611e96565b611390565b600060026005540361052c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260055560035460ff16156105775760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610523565b67ffffffffffffffff841660009081526009602052604081205460030b908190036105e45760405162461bcd60e51b815260206004820152601960248201527f64737420646f6d61696e206e6f742072656769737465726564000000000000006044820152606401610523565b60008160030b12156105f4575060005b60008060006106038989611062565b9250925092508289116106585760405162461bcd60e51b815260206004820152600f60248201527f666565206e6f7420636f766572656400000000000000000000000000000000006044820152606401610523565b61066d6001600160a01b03871633308c61147e565b6000610679848b612003565b90506106af6001600160a01b0388167f000000000000000000000000bd3fa81b58ba92a82136038b25adec7066af315583611516565b6040516337e9a82760e11b81526004810182905263ffffffff86166024820152604481018990526001600160a01b0388811660648301527f000000000000000000000000bd3fa81b58ba92a82136038b25adec7066af31551690636fd3504e906084016020604051808303816000875af1158015610731573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610755919061201c565b955061078c6001600160a01b0388167f000000000000000000000000bd3fa81b58ba92a82136038b25adec7066af315560006115c8565b60408051338152602081018a905267ffffffffffffffff8b811682840152606082018d90526080820186905260a08201859052881660c082015290517fa2ca2ced575b143e45f6b68b9e9c92fc0ddfc107807c711f5f28ff625fea8e519181900360e00190a15050600160055550919695505050505050565b336108186000546001600160a01b031690565b6001600160a01b03161461086e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610523565b610877816116e9565b50565b3360009081526004602052604090205460ff166108d95760405162461bcd60e51b815260206004820152601460248201527f43616c6c6572206973206e6f74207061757365720000000000000000000000006044820152606401610523565b6108e16117ad565b565b3360009081526002602052604090205460ff166109425760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f7420676f7665726e6f72000000000000000000006044820152606401610523565b8281146109835760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610523565b60005b838110156109ff578282828181106109a0576109a0612039565b90506020020135600860008787858181106109bd576109bd612039565b90506020020160208101906109d29190611e15565b67ffffffffffffffff168152602081019190915260400160002055806109f78161204f565b915050610986565b507f3a331334e3690640b58b9d6889de0e68c9fec44c8e586b0f69eaa013f530e40c84848484604051610a3594939291906120b2565b60405180910390a150505050565b3360009081526002602052604090205460ff16610aa25760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f7420676f7665726e6f72000000000000000000006044820152606401610523565b828114610ae35760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610523565b60005b83811015610b8457828282818110610b0057610b00612039565b9050602002016020810190610b159190612129565b60096000878785818110610b2b57610b2b612039565b9050602002016020810190610b409190611e15565b67ffffffffffffffff1681526020810191909152604001600020805463ffffffff191663ffffffff9290921691909117905580610b7c8161204f565b915050610ae6565b507f99a427604fce28915eae6edfacfd125c0ed4393b0d54e90002f2ef13f120e4f884848484604051610a359493929190612144565b33610bcd6000546001600160a01b031690565b6001600160a01b031614610c235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610523565b61087781611849565b6108e133611849565b33610c486000546001600160a01b031690565b6001600160a01b031614610c9e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610523565b61087781611902565b3360009081526004602052604090205460ff16610d065760405162461bcd60e51b815260206004820152601460248201527f43616c6c6572206973206e6f74207061757365720000000000000000000000006044820152606401610523565b6108e16119bf565b33610d216000546001600160a01b031690565b6001600160a01b031614610d775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610523565b600180546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527f5d16ad41baeb009cd23eb8f6c7cde5c2e0cd5acf4a33926ab488875c37c37f38910160405180910390a15050565b3360009081526002602052604090205460ff16610e445760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f7420676f7665726e6f72000000000000000000006044820152606401610523565b828114610e855760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610523565b60005b8381101561102357620f4240838383818110610ea657610ea6612039565b9050602002016020810190610ebb91906121b5565b63ffffffff1610610f0e5760405162461bcd60e51b815260206004820152601860248201527f6665652070657263656e7461676520746f6f206c6172676500000000000000006044820152606401610523565b848482818110610f2057610f20612039565b9050602002016020810190610f359190611e15565b67ffffffffffffffff16600003610f8c57828282818110610f5857610f58612039565b9050602002016020810190610f6d91906121b5565b6006805463ffffffff191663ffffffff92909216919091179055611011565b828282818110610f9e57610f9e612039565b9050602002016020810190610fb391906121b5565b60076000878785818110610fc957610fc9612039565b9050602002016020810190610fde9190611e15565b67ffffffffffffffff1681526020810191909152604001600020805463ffffffff191663ffffffff929092169190911790555b8061101b8161204f565b915050610e88565b507f541df5e570cf10ffe04899eebd9eebebd1c54e2bd4af9f24b23fb4a40c6ea00b84848484604051610a3594939291906121d0565b6108e133611a3a565b67ffffffffffffffff81166000908152600760205260408120548190819063ffffffff16808203611098575060065463ffffffff165b67ffffffffffffffff85166000908152600860205260409020549250620f42406110c863ffffffff831688612223565b6110d2919061223a565b91506110de828461225c565b9350509250925092565b336110fb6000546001600160a01b031690565b6001600160a01b0316146111515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610523565b61087781611a3a565b6001546001600160a01b031633146111b45760405162461bcd60e51b815260206004820152601160248201527f6e6f742066656520636f6c6c6563746f720000000000000000000000000000006044820152606401610523565b60005b8281101561138a5760008484838181106111d3576111d3612039565b90506020020160208101906111e89190611e96565b6001600160a01b0316036112a55760405147906000906001600160a01b0385169061c35090849084818181858888f193505050503d8060008114611248576040519150601f19603f3d011682016040523d82523d6000602084013e61124d565b606091505b505090508061129e5760405162461bcd60e51b815260206004820152601260248201527f73656e64206e6174697665206661696c656400000000000000000000000000006044820152606401610523565b5050611378565b60008484838181106112b9576112b9612039565b90506020020160208101906112ce9190611e96565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611314573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611338919061226f565b9050611376838287878681811061135157611351612039565b90506020020160208101906113669190611e96565b6001600160a01b03169190611af3565b505b806113828161204f565b9150506111b7565b50505050565b336113a36000546001600160a01b031690565b6001600160a01b0316146113f95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610523565b6001600160a01b0381166114755760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610523565b61087781611b23565b6040516001600160a01b038085166024830152831660448201526064810182905261138a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611b80565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158b919061226f565b611595919061225c565b6040516001600160a01b03851660248201526044810182905290915061138a90859063095ea7b360e01b906064016114b2565b8015806116425750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561161c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611640919061226f565b155b6116b45760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610523565b6040516001600160a01b0383166024820152604481018290526116e490849063095ea7b360e01b906064016114b2565b505050565b6001600160a01b03811660009081526002602052604090205460ff16156117525760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920676f7665726e6f7200000000006044820152606401610523565b6001600160a01b038116600081815260026020908152604091829020805460ff1916600117905590519182527fdc5a48d79e2e147530ff63ecdbed5a5a66adb9d5cf339384d5d076da197c40b591015b60405180910390a150565b60035460ff166117ff5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610523565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b03811660009081526004602052604090205460ff166118b15760405162461bcd60e51b815260206004820152601560248201527f4163636f756e74206973206e6f742070617573657200000000000000000000006044820152606401610523565b6001600160a01b038116600081815260046020908152604091829020805460ff1916905590519182527fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e91016117a2565b6001600160a01b03811660009081526004602052604090205460ff161561196b5760405162461bcd60e51b815260206004820152601960248201527f4163636f756e7420697320616c726561647920706175736572000000000000006044820152606401610523565b6001600160a01b038116600081815260046020908152604091829020805460ff1916600117905590519182527f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f891016117a2565b60035460ff1615611a055760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610523565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861182c3390565b6001600160a01b03811660009081526002602052604090205460ff16611aa25760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f7420676f7665726e6f720000000000000000006044820152606401610523565b6001600160a01b038116600081815260026020908152604091829020805460ff1916905590519182527f1ebe834e73d60a5fec822c1e1727d34bc79f2ad977ed504581cc1822fe20fb5b91016117a2565b6040516001600160a01b0383166024820152604481018290526116e490849063a9059cbb60e01b906064016114b2565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000611bd5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611c659092919063ffffffff16565b8051909150156116e45780806020019051810190611bf39190612288565b6116e45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610523565b6060611c748484600085611c7e565b90505b9392505050565b606082471015611cf65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610523565b6001600160a01b0385163b611d4d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610523565b600080866001600160a01b03168587604051611d6991906122ce565b60006040518083038185875af1925050503d8060008114611da6576040519150601f19603f3d011682016040523d82523d6000602084013e611dab565b606091505b5091509150611dbb828286611dc6565b979650505050505050565b60608315611dd5575081611c77565b825115611de55782518084602001fd5b8160405162461bcd60e51b815260040161052391906122ea565b67ffffffffffffffff8116811461087757600080fd5b600060208284031215611e2757600080fd5b8135611c7781611dff565b80356001600160a01b0381168114611e4957600080fd5b919050565b60008060008060808587031215611e6457600080fd5b843593506020850135611e7681611dff565b925060408501359150611e8b60608601611e32565b905092959194509250565b600060208284031215611ea857600080fd5b611c7782611e32565b60008083601f840112611ec357600080fd5b50813567ffffffffffffffff811115611edb57600080fd5b6020830191508360208260051b8501011115611ef657600080fd5b9250929050565b60008060008060408587031215611f1357600080fd5b843567ffffffffffffffff80821115611f2b57600080fd5b611f3788838901611eb1565b90965094506020870135915080821115611f5057600080fd5b50611f5d87828801611eb1565b95989497509550505050565b60008060408385031215611f7c57600080fd5b823591506020830135611f8e81611dff565b809150509250929050565b600080600060408486031215611fae57600080fd5b833567ffffffffffffffff811115611fc557600080fd5b611fd186828701611eb1565b9094509250611fe4905060208501611e32565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b8181038181111561201657612016611fed565b92915050565b60006020828403121561202e57600080fd5b8151611c7781611dff565b634e487b7160e01b600052603260045260246000fd5b60006001820161206157612061611fed565b5060010190565b8183526000602080850194508260005b858110156120a757813561208b81611dff565b67ffffffffffffffff1687529582019590820190600101612078565b509495945050505050565b6040815260006120c6604083018688612068565b82810360208401528381527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8411156120fe57600080fd5b8360051b80866020840137016020019695505050505050565b8035600381900b8114611e4957600080fd5b60006020828403121561213b57600080fd5b611c7782612117565b604081526000612158604083018688612068565b8281036020848101919091528482528591810160005b868110156121945761217f84612117565b60030b8252928201929082019060010161216e565b5098975050505050505050565b803563ffffffff81168114611e4957600080fd5b6000602082840312156121c757600080fd5b611c77826121a1565b6040815260006121e4604083018688612068565b8281036020848101919091528482528591810160005b868110156121945763ffffffff612210856121a1565b16825292820192908201906001016121fa565b808202811582820484141761201657612016611fed565b60008261225757634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561201657612016611fed565b60006020828403121561228157600080fd5b5051919050565b60006020828403121561229a57600080fd5b81518015158114611c7757600080fd5b60005b838110156122c55781810151838201526020016122ad565b50506000910152565b600082516122e08184602087016122aa565b9190910192915050565b60208152600082518060208401526123098160408501602087016122aa565b601f01601f1916919091016040019291505056fea2646970667358221220441d00d8fb72a6f8beedfbb0ad4bb6cdb18de5058d16ff84693a9e9f52fbc45764736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000bd3fa81b58ba92a82136038b25adec7066af315500000000000000000000000058b529f9084d7eaa598eb3477fe36064c5b7bbc1
-----Decoded View---------------
Arg [0] : _circleBridge (address): 0xBd3fa81B58Ba92a82136038B25aDec7066af3155
Arg [1] : _feeCollector (address): 0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000bd3fa81b58ba92a82136038b25adec7066af3155
Arg [1] : 00000000000000000000000058b529f9084d7eaa598eb3477fe36064c5b7bbc1
Deployed Bytecode Sourcemap
395:3794:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;511:37;;;;;;;;-1:-1:-1;;;;;178:55:12;;;160:74;;148:2;133:18;511:37:0;;;;;;;;940:44;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;800:1:12;789:21;;;;771:40;;759:2;744:18;940:44:0;629:188:12;555:27:0;;;;;;;;;;;;996:10:12;984:23;;;966:42;;954:2;939:18;555:27:0;822:192:12;791:42:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1165:25:12;;;1153:2;1138:18;791:42:0;1019:177:12;1474:1057:0;;;;;;:::i;:::-;;:::i;:::-;;;2037:18:12;2025:31;;;2007:50;;1995:2;1980:18;1474:1057:0;1863:200:12;561:95:3;;;;;;:::i;:::-;;:::i;:::-;;671:48:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;563:64:5;;;:::i;3491:331:0:-;;;;;;:::i;:::-;;:::i;633:102:5:-;;;;;;:::i;:::-;-1:-1:-1;;;;;712:16:5;689:4;712:16;;;:7;:16;;;;;;;;;633:102;;;;3570:14:12;;3563:22;3545:41;;3533:2;3518:18;633:102:5;3405:187:12;3828:359:0;;;;;;:::i;:::-;;:::i;1098:84:6:-;1168:7;;;;1098:84;;836:95:5;;;;;;:::i;:::-;;:::i;937:75::-;;;:::i;200:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;741:89;;;;;;:::i;:::-;;:::i;497:60::-;;;:::i;1479:85:4:-;1525:7;1551:6;-1:-1:-1;;;;;1551:6:4;1479:85;;1220:226:1;;;;;;:::i;:::-;;:::i;2937:548:0:-;;;;;;:::i;:::-;;:::i;307:27:1:-;;;;;-1:-1:-1;;;;;307:27:1;;;769:79:3;;;:::i;136:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;447:108;;;;;;:::i;:::-;-1:-1:-1;;;;;529:19:3;506:4;529:19;;;:9;:19;;;;;;;;;447:108;2537:394:0;;;;;;:::i;:::-;;:::i;:::-;;;;5664:25:12;;;5720:2;5705:18;;5698:34;;;;5748:18;;;5741:34;5652:2;5637:18;2537:394:0;5462:319:12;662:101:3;;;;;;:::i;:::-;;:::i;603:611:1:-;;;;;;:::i;:::-;;:::i;1916:189:4:-;;;;;;:::i;:::-;;:::i;1474:1057:0:-;1659:13;1744:1:7;2325:7;;:19;2317:63;;;;-1:-1:-1;;;2317:63:7;;6503:2:12;2317:63:7;;;6485:21:12;6542:2;6522:18;;;6515:30;6581:33;6561:18;;;6554:61;6632:18;;2317:63:7;;;;;;;;;1744:1;2455:7;:18;1168:7:6;;;;1411:9:::1;1403:38;;;::::0;-1:-1:-1;;;1403:38:6;;6863:2:12;1403:38:6::1;::::0;::::1;6845:21:12::0;6902:2;6882:18;;;6875:30;-1:-1:-1;;;6921:18:12;;;6914:46;6977:18;;1403:38:6::1;6661:340:12::0;1403:38:6::1;1702:22:0::2;::::0;::::2;1684:15;1702:22:::0;;;:12:::2;:22;::::0;;;;;::::2;;::::0;1743:14;;;1734:53:::2;;;::::0;-1:-1:-1;;;1734:53:0;;7208:2:12;1734:53:0::2;::::0;::::2;7190:21:12::0;7247:2;7227:18;;;7220:30;7286:27;7266:18;;;7259:55;7331:18;;1734:53:0::2;7006:349:12::0;1734:53:0::2;1813:1;1801:9;:13;;;1797:120;;;-1:-1:-1::0;1842:1:0::2;1797:120;1927:11;1940:13:::0;1955:15:::2;1974:27;1983:7;1992:8;1974;:27::i;:::-;1926:75;;;;;;2030:3;2020:7;:13;2011:42;;;::::0;-1:-1:-1;;;2011:42:0;;7562:2:12;2011:42:0::2;::::0;::::2;7544:21:12::0;7601:2;7581:18;;;7574:30;7640:17;7620:18;;;7613:45;7675:18;;2011:42:0::2;7360:339:12::0;2011:42:0::2;2064:71;-1:-1:-1::0;;;;;2064:35:0;::::2;2100:10;2120:4;2127:7:::0;2064:35:::2;:71::i;:::-;2145:17;2165:13;2175:3:::0;2165:7;:13:::2;:::i;:::-;2145:33:::0;-1:-1:-1;2188:65:0::2;-1:-1:-1::0;;;;;2188:40:0;::::2;2229:12;2145:33:::0;2188:40:::2;:65::i;:::-;2272:100;::::0;-1:-1:-1;;;2272:100:0;;::::2;::::0;::::2;8198:25:12::0;;;8271:10;8259:23;;8239:18;;;8232:51;8299:18;;;8292:34;;;-1:-1:-1;;;;;8362:55:12;;;8342:18;;;8335:83;2286:12:0::2;2272:42;::::0;::::2;::::0;8170:19:12;;2272:100:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2263:109:::0;-1:-1:-1;2382:47:0::2;-1:-1:-1::0;;;;;2382:30:0;::::2;2413:12;2427:1;2382:30;:47::i;:::-;2444:80;::::0;;2454:10:::2;8994:74:12::0;;9099:2;9084:18;;9077:34;;;9130:18;9184:15;;;9164:18;;;9157:43;9231:2;9216:18;;9209:34;;;9274:3;9259:19;;9252:35;;;9318:3;9303:19;;9296:35;;;9368:15;;9362:3;9347:19;;9340:44;2444:80:0;;::::2;::::0;;;;8981:3:12;2444:80:0;;::::2;-1:-1:-1::0;;1701:1:7;2628:7;:22;-1:-1:-1;1474:1057:0;;;-1:-1:-1;;;;;;1474:1057:0:o;561:95:3:-;1702:10:4;1691:7;1525;1551:6;-1:-1:-1;;;;;1551:6:4;;1479:85;1691:7;-1:-1:-1;;;;;1691:21:4;;1683:66;;;;-1:-1:-1;;;1683:66:4;;9597:2:12;1683:66:4;;;9579:21:12;;;9616:18;;;9609:30;9675:34;9655:18;;;9648:62;9727:18;;1683:66:4;9395:356:12;1683:66:4;627:22:3::1;640:8;627:12;:22::i;:::-;561:95:::0;:::o;563:64:5:-;437:10;689:4;712:16;;;:7;:16;;;;;;;;420:53;;;;-1:-1:-1;;;420:53:5;;9958:2:12;420:53:5;;;9940:21:12;9997:2;9977:18;;;9970:30;10036:22;10016:18;;;10009:50;10076:18;;420:53:5;9756:344:12;420:53:5;610:10:::1;:8;:10::i;:::-;563:64::o:0;3491:331:0:-;324:10:3;506:4;529:19;;;:9;:19;;;;;;;;305:57;;;;-1:-1:-1;;;305:57:3;;10307:2:12;305:57:3;;;10289:21:12;10346:2;10326:18;;;10319:30;10385:24;10365:18;;;10358:52;10427:18;;305:57:3;10105:346:12;305:57:3;3604:32:0;;::::1;3596:60;;;::::0;-1:-1:-1;;;3596:60:0;;10658:2:12;3596:60:0::1;::::0;::::1;10640:21:12::0;10697:2;10677:18;;;10670:30;-1:-1:-1;;;10716:18:12;;;10709:45;10771:18;;3596:60:0::1;10456:339:12::0;3596:60:0::1;3671:9;3666:105;3686:20:::0;;::::1;3666:105;;;3752:5;;3758:1;3752:8;;;;;;;:::i;:::-;;;;;;;3727;:22;3736:9;;3746:1;3736:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3727:22;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;3727:22:0;:33;3708:3;::::1;::::0;::::1;:::i;:::-;;;;3666:105;;;;3785:30;3798:9;;3809:5;;3785:30;;;;;;;;;:::i;:::-;;;;;;;;3491:331:::0;;;;:::o;3828:359::-;324:10:3;506:4;529:19;;;:9;:19;;;;;;;;305:57;;;;-1:-1:-1;;;305:57:3;;10307:2:12;305:57:3;;;10289:21:12;10346:2;10326:18;;;10319:30;10385:24;10365:18;;;10358:52;10427:18;;305:57:3;10105:346:12;305:57:3;3949:35:0;;::::1;3941:63;;;::::0;-1:-1:-1;;;3941:63:0;;10658:2:12;3941:63:0::1;::::0;::::1;10640:21:12::0;10697:2;10677:18;;;10670:30;-1:-1:-1;;;10716:18:12;;;10709:45;10771:18;;3941:63:0::1;10456:339:12::0;3941:63:0::1;4019:9;4014:112;4034:20:::0;;::::1;4014:112;;;4104:8;;4113:1;4104:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;4075:12;:26;4088:9;;4098:1;4088:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;4075:26;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;4075:26:0;:40;;-1:-1:-1;;4075:40:0::1;;::::0;;;;;;;::::1;::::0;;4056:3;::::1;::::0;::::1;:::i;:::-;;;;4014:112;;;;4140:40;4160:9;;4171:8;;4140:40;;;;;;;;;:::i;836:95:5:-:0;1702:10:4;1691:7;1525;1551:6;-1:-1:-1;;;;;1551:6:4;;1479:85;1691:7;-1:-1:-1;;;;;1691:21:4;;1683:66;;;;-1:-1:-1;;;1683:66:4;;9597:2:12;1683:66:4;;;9579:21:12;;;9616:18;;;9609:30;9675:34;9655:18;;;9648:62;9727:18;;1683:66:4;9395:356:12;1683:66:4;902:22:5::1;916:7;902:13;:22::i;937:75::-:0;980:25;994:10;980:13;:25::i;741:89::-;1702:10:4;1691:7;1525;1551:6;-1:-1:-1;;;;;1551:6:4;;1479:85;1691:7;-1:-1:-1;;;;;1691:21:4;;1683:66;;;;-1:-1:-1;;;1683:66:4;;9597:2:12;1683:66:4;;;9579:21:12;;;9616:18;;;9609:30;9675:34;9655:18;;;9648:62;9727:18;;1683:66:4;9395:356:12;1683:66:4;804:19:5::1;815:7;804:10;:19::i;497:60::-:0;437:10;689:4;712:16;;;:7;:16;;;;;;;;420:53;;;;-1:-1:-1;;;420:53:5;;9958:2:12;420:53:5;;;9940:21:12;9997:2;9977:18;;;9970:30;10036:22;10016:18;;;10009:50;10076:18;;420:53:5;9756:344:12;420:53:5;542:8:::1;:6;:8::i;1220:226:1:-:0;1702:10:4;1691:7;1525;1551:6;-1:-1:-1;;;;;1551:6:4;;1479:85;1691:7;-1:-1:-1;;;;;1691:21:4;;1683:66;;;;-1:-1:-1;;;1683:66:4;;9597:2:12;1683:66:4;;;9579:21:12;;;9616:18;;;9609:30;9675:34;9655:18;;;9648:62;9727:18;;1683:66:4;9395:356:12;1683:66:4;1323:12:1::1;::::0;;-1:-1:-1;;;;;1345:28:1;;::::1;-1:-1:-1::0;;1345:28:1;::::1;::::0;::::1;::::0;;;1388:51:::1;::::0;;1323:12;;;::::1;13720:34:12::0;;;13785:2;13770:18;;13763:43;;;;1388:51:1::1;::::0;13632:18:12;1388:51:1::1;;;;;;;1287:159;1220:226:::0;:::o;2937:548:0:-;324:10:3;506:4;529:19;;;:9;:19;;;;;;;;305:57;;;;-1:-1:-1;;;305:57:3;;10307:2:12;305:57:3;;;10289:21:12;10346:2;10326:18;;;10319:30;10385:24;10365:18;;;10358:52;10427:18;;305:57:3;10105:346:12;305:57:3;3055:36:0;;::::1;3047:64;;;::::0;-1:-1:-1;;;3047:64:0;;10658:2:12;3047:64:0::1;::::0;::::1;10640:21:12::0;10697:2;10677:18;;;10670:30;-1:-1:-1;;;10716:18:12;;;10709:45;10771:18;;3047:64:0::1;10456:339:12::0;3047:64:0::1;3126:9;3121:307;3141:20:::0;;::::1;3121:307;;;3205:3;3190:9;;3200:1;3190:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;:18;;;3182:55;;;::::0;-1:-1:-1;;;3182:55:0;;14376:2:12;3182:55:0::1;::::0;::::1;14358:21:12::0;14415:2;14395:18;;;14388:30;14454:26;14434:18;;;14427:54;14498:18;;3182:55:0::1;14174:348:12::0;3182:55:0::1;3255:9;;3265:1;3255:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;:17;;3271:1;3255:17:::0;3251:167:::1;;3308:9;;3318:1;3308:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3292:13;:28:::0;;-1:-1:-1;;3292:28:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;3251:167:::1;;;3391:9;;3401:1;3391:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3359:15;:29;3375:9;;3385:1;3375:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3359:29;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;3359:29:0;:44;;-1:-1:-1;;3359:44:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;3251:167:::1;3163:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3121:307;;;;3442:36;3457:9;;3468;;3442:36;;;;;;;;;:::i;769:79:3:-:0;814:27;830:10;814:15;:27::i;2537:394:0:-;2707:25;;;2632:12;2707:25;;;:15;:25;;;;;;2632:12;;;;2707:25;;2746:12;;;2742:66;;-1:-1:-1;2784:13:0;;;;2742:66;2826:18;;;;;;;:8;:18;;;;;;;-1:-1:-1;2887:3:0;2866:17;;;;:7;:17;:::i;:::-;2865:25;;;;:::i;:::-;2854:36;-1:-1:-1;2907:17:0;2854:36;2907:6;:17;:::i;:::-;2900:24;;2680:251;2537:394;;;;;:::o;662:101:3:-;1702:10:4;1691:7;1525;1551:6;-1:-1:-1;;;;;1551:6:4;;1479:85;1691:7;-1:-1:-1;;;;;1691:21:4;;1683:66;;;;-1:-1:-1;;;1683:66:4;;9597:2:12;1683:66:4;;;9579:21:12;;;9616:18;;;9609:30;9675:34;9655:18;;;9648:62;9727:18;;1683:66:4;9395:356:12;1683:66:4;731:25:3::1;747:8;731:15;:25::i;603:611:1:-:0;459:12;;-1:-1:-1;;;;;459:12:1;445:10;:26;437:56;;;;-1:-1:-1;;;437:56:1;;16079:2:12;437:56:1;;;16061:21:12;16118:2;16098:18;;;16091:30;16157:19;16137:18;;;16130:47;16194:18;;437:56:1;15877:341:12;437:56:1;705:9:::1;700:508;720:18:::0;;::::1;700:508;;;840:1;818:7:::0;;826:1;818:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;818:24:1::1;::::0;814:384:::1;;931:36;::::0;876:21:::1;::::0;862:11:::1;::::0;-1:-1:-1;;;;;931:8:1;::::1;::::0;957:5:::1;::::0;876:21;;862:11;931:36;862:11;931:36;876:21;931:8;957:5;931:36:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;915:52;;;993:4;985:35;;;::::0;-1:-1:-1;;;985:35:1;;16635:2:12;985:35:1::1;::::0;::::1;16617:21:12::0;16674:2;16654:18;;;16647:30;16713:20;16693:18;;;16686:48;16751:18;;985:35:1::1;16433:342:12::0;985:35:1::1;844:191;;814:384;;;1059:15;1084:7;;1092:1;1084:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;1077:43;::::0;-1:-1:-1;;;1077:43:1;;1114:4:::1;1077:43;::::0;::::1;160:74:12::0;-1:-1:-1;;;;;1077:28:1;;;::::1;::::0;::::1;::::0;133:18:12;;1077:43:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1059:61;;1138:45;1170:3;1175:7;1145;;1153:1;1145:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1138:31:1::1;::::0;:45;:31:::1;:45::i;:::-;1041:157;814:384;740:3:::0;::::1;::::0;::::1;:::i;:::-;;;;700:508;;;;603:611:::0;;;:::o;1916:189:4:-;1702:10;1691:7;1525;1551:6;-1:-1:-1;;;;;1551:6:4;;1479:85;1691:7;-1:-1:-1;;;;;1691:21:4;;1683:66;;;;-1:-1:-1;;;1683:66:4;;9597:2:12;1683:66:4;;;9579:21:12;;;9616:18;;;9609:30;9675:34;9655:18;;;9648:62;9727:18;;1683:66:4;9395:356:12;1683:66:4;-1:-1:-1;;;;;2004:22:4;::::1;1996:73;;;::::0;-1:-1:-1;;;1996:73:4;;17171:2:12;1996:73:4::1;::::0;::::1;17153:21:12::0;17210:2;17190:18;;;17183:30;17249:34;17229:18;;;17222:62;17320:8;17300:18;;;17293:36;17346:19;;1996:73:4::1;16969:402:12::0;1996:73:4::1;2079:19;2089:8;2079:9;:19::i;912:241:9:-:0;1077:68;;-1:-1:-1;;;;;17657:15:12;;;1077:68:9;;;17639:34:12;17709:15;;17689:18;;;17682:43;17741:18;;;17734:34;;;1050:96:9;;1070:5;;-1:-1:-1;;;1100:27:9;17551:18:12;;1077:68:9;;;;-1:-1:-1;;1077:68:9;;;;;;;;;;;;;;;;;;;;;;;;;;;1050:19;:96::i;2022:310::-;2171:39;;-1:-1:-1;;;2171:39:9;;2195:4;2171:39;;;13720:34:12;-1:-1:-1;;;;;13790:15:12;;;13770:18;;;13763:43;2148:20:9;;2213:5;;2171:15;;;;;13632:18:12;;2171:39:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;2255:69;;-1:-1:-1;;;;;17971:55:12;;2255:69:9;;;17953:74:12;18043:18;;;18036:34;;;2148:70:9;;-1:-1:-1;2228:97:9;;2248:5;;-1:-1:-1;;;2278:22:9;17926:18:12;;2255:69:9;17779:297:12;1413:603:9;1768:10;;;1767:62;;-1:-1:-1;1784:39:9;;-1:-1:-1;;;1784:39:9;;1808:4;1784:39;;;13720:34:12;-1:-1:-1;;;;;13790:15:12;;;13770:18;;;13763:43;1784:15:9;;;;;13632:18:12;;1784:39:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;1767:62;1746:163;;;;-1:-1:-1;;;1746:163:9;;18283:2:12;1746:163:9;;;18265:21:12;18322:2;18302:18;;;18295:30;18361:34;18341:18;;;18334:62;18432:24;18412:18;;;18405:52;18474:19;;1746:163:9;18081:418:12;1746:163:9;1946:62;;-1:-1:-1;;;;;17971:55:12;;1946:62:9;;;17953:74:12;18043:18;;;18036:34;;;1919:90:9;;1939:5;;-1:-1:-1;;;1969:22:9;17926:18:12;;1946:62:9;17779:297:12;1919:90:9;1413:603;;;:::o;854:200:3:-;-1:-1:-1;;;;;529:19:3;;506:4;529:19;;;:9;:19;;;;;;;;920:21;912:61;;;;-1:-1:-1;;;912:61:3;;18706:2:12;912:61:3;;;18688:21:12;18745:2;18725:18;;;18718:30;18784:29;18764:18;;;18757:57;18831:18;;912:61:3;18504:351:12;912:61:3;-1:-1:-1;;;;;983:19:3;;;;;;:9;:19;;;;;;;;;:26;;-1:-1:-1;;983:26:3;1005:4;983:26;;;1024:23;;160:74:12;;;1024:23:3;;133:18:12;1024:23:3;;;;;;;;854:200;:::o;2110:117:6:-;1168:7;;;;1669:41;;;;-1:-1:-1;;;1669:41:6;;19062:2:12;1669:41:6;;;19044:21:12;19101:2;19081:18;;;19074:30;19140:22;19120:18;;;19113:50;19180:18;;1669:41:6;18860:344:12;1669:41:6;2168:7:::1;:15:::0;;-1:-1:-1;;2168:15:6::1;::::0;;2198:22:::1;719:10:11::0;2207:12:6::1;2198:22;::::0;-1:-1:-1;;;;;178:55:12;;;160:74;;148:2;133:18;2198:22:6::1;;;;;;;2110:117::o:0;1210:187:5:-;-1:-1:-1;;;;;712:16:5;;689:4;712:16;;;:7;:16;;;;;;;;1268:51;;;;-1:-1:-1;;;1268:51:5;;19411:2:12;1268:51:5;;;19393:21:12;19450:2;19430:18;;;19423:30;19489:23;19469:18;;;19462:51;19530:18;;1268:51:5;19209:345:12;1268:51:5;-1:-1:-1;;;;;1329:16:5;;1348:5;1329:16;;;:7;:16;;;;;;;;;:24;;-1:-1:-1;;1329:24:5;;;1368:22;;160:74:12;;;1368:22:5;;133:18:12;1368:22:5;14:226:12;1018:186:5;-1:-1:-1;;;;;712:16:5;;689:4;712:16;;;:7;:16;;;;;;;;1081:18;1073:56;;;;-1:-1:-1;;;1073:56:5;;19761:2:12;1073:56:5;;;19743:21:12;19800:2;19780:18;;;19773:30;19839:27;19819:18;;;19812:55;19884:18;;1073:56:5;19559:349:12;1073:56:5;-1:-1:-1;;;;;1139:16:5;;;;;;:7;:16;;;;;;;;;:23;;-1:-1:-1;;1139:23:5;1158:4;1139:23;;;1177:20;;160:74:12;;;1177:20:5;;133:18:12;1177:20:5;14:226:12;1863:115:6;1168:7;;;;1411:9;1403:38;;;;-1:-1:-1;;;1403:38:6;;6863:2:12;1403:38:6;;;6845:21:12;6902:2;6882:18;;;6875:30;-1:-1:-1;;;6921:18:12;;;6914:46;6977:18;;1403:38:6;6661:340:12;1403:38:6;1922:7:::1;:14:::0;;-1:-1:-1;;1922:14:6::1;1932:4;1922:14;::::0;;1951:20:::1;1958:12;719:10:11::0;;640:96;1060:201:3;-1:-1:-1;;;;;529:19:3;;506:4;529:19;;;:9;:19;;;;;;;;1121:56;;;;-1:-1:-1;;;1121:56:3;;20115:2:12;1121:56:3;;;20097:21:12;20154:2;20134:18;;;20127:30;20193:25;20173:18;;;20166:53;20236:18;;1121:56:3;19913:347:12;1121:56:3;-1:-1:-1;;;;;1187:19:3;;1209:5;1187:19;;;:9;:19;;;;;;;;;:27;;-1:-1:-1;;1187:27:3;;;1229:25;;160:74:12;;;1229:25:3;;133:18:12;1229:25:3;14:226:12;701:205:9;840:58;;-1:-1:-1;;;;;17971:55:12;;840:58:9;;;17953:74:12;18043:18;;;18036:34;;;813:86:9;;833:5;;-1:-1:-1;;;863:23:9;17926:18:12;;840:58:9;17779:297:12;2111:169:4;2166:16;2185:6;;-1:-1:-1;;;;;2201:17:4;;;-1:-1:-1;;2201:17:4;;;;;;2233:40;;2185:6;;;;;;;2233:40;;2166:16;2233:40;2156:124;2111:169;:::o;3207:706:9:-;3626:23;3652:69;3680:4;3652:69;;;;;;;;;;;;;;;;;3660:5;-1:-1:-1;;;;;3652:27:9;;;:69;;;;;:::i;:::-;3735:17;;3626:95;;-1:-1:-1;3735:21:9;3731:176;;3830:10;3819:30;;;;;;;;;;;;:::i;:::-;3811:85;;;;-1:-1:-1;;;3811:85:9;;20749:2:12;3811:85:9;;;20731:21:12;20788:2;20768:18;;;20761:30;20827:34;20807:18;;;20800:62;20898:12;20878:18;;;20871:40;20928:19;;3811:85:9;20547:406:12;3861:223:10;3994:12;4025:52;4047:6;4055:4;4061:1;4064:12;4025:21;:52::i;:::-;4018:59;;3861:223;;;;;;:::o;4948:499::-;5113:12;5170:5;5145:21;:30;;5137:81;;;;-1:-1:-1;;;5137:81:10;;21160:2:12;5137:81:10;;;21142:21:12;21199:2;21179:18;;;21172:30;21238:34;21218:18;;;21211:62;21309:8;21289:18;;;21282:36;21335:19;;5137:81:10;20958:402:12;5137:81:10;-1:-1:-1;;;;;1465:19:10;;;5228:60;;;;-1:-1:-1;;;5228:60:10;;21567:2:12;5228:60:10;;;21549:21:12;21606:2;21586:18;;;21579:30;21645:31;21625:18;;;21618:59;21694:18;;5228:60:10;21365:353:12;5228:60:10;5300:12;5314:23;5341:6;-1:-1:-1;;;;;5341:11:10;5360:5;5367:4;5341:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:73;;;;5389:51;5406:7;5415:10;5427:12;5389:16;:51::i;:::-;5382:58;4948:499;-1:-1:-1;;;;;;;4948:499:10:o;7561:692::-;7707:12;7735:7;7731:516;;;-1:-1:-1;7765:10:10;7758:17;;7731:516;7876:17;;:21;7872:365;;8070:10;8064:17;8130:15;8117:10;8113:2;8109:19;8102:44;7872:365;8209:12;8202:20;;-1:-1:-1;;;8202:20:10;;;;;;;;:::i;245:129:12:-;330:18;323:5;319:30;312:5;309:41;299:69;;364:1;361;354:12;379:245;437:6;490:2;478:9;469:7;465:23;461:32;458:52;;;506:1;503;496:12;458:52;545:9;532:23;564:30;588:5;564:30;:::i;1201:196::-;1269:20;;-1:-1:-1;;;;;1318:54:12;;1308:65;;1298:93;;1387:1;1384;1377:12;1298:93;1201:196;;;:::o;1402:456::-;1487:6;1495;1503;1511;1564:3;1552:9;1543:7;1539:23;1535:33;1532:53;;;1581:1;1578;1571:12;1532:53;1617:9;1604:23;1594:33;;1677:2;1666:9;1662:18;1649:32;1690:30;1714:5;1690:30;:::i;:::-;1739:5;-1:-1:-1;1791:2:12;1776:18;;1763:32;;-1:-1:-1;1814:38:12;1848:2;1833:18;;1814:38;:::i;:::-;1804:48;;1402:456;;;;;;;:::o;2068:186::-;2127:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:52;;;2196:1;2193;2186:12;2148:52;2219:29;2238:9;2219:29;:::i;2259:366::-;2321:8;2331:6;2385:3;2378:4;2370:6;2366:17;2362:27;2352:55;;2403:1;2400;2393:12;2352:55;-1:-1:-1;2426:20:12;;2469:18;2458:30;;2455:50;;;2501:1;2498;2491:12;2455:50;2538:4;2530:6;2526:17;2514:29;;2598:3;2591:4;2581:6;2578:1;2574:14;2566:6;2562:27;2558:38;2555:47;2552:67;;;2615:1;2612;2605:12;2552:67;2259:366;;;;;:::o;2630:770::-;2751:6;2759;2767;2775;2828:2;2816:9;2807:7;2803:23;2799:32;2796:52;;;2844:1;2841;2834:12;2796:52;2884:9;2871:23;2913:18;2954:2;2946:6;2943:14;2940:34;;;2970:1;2967;2960:12;2940:34;3009:69;3070:7;3061:6;3050:9;3046:22;3009:69;:::i;:::-;3097:8;;-1:-1:-1;2983:95:12;-1:-1:-1;3185:2:12;3170:18;;3157:32;;-1:-1:-1;3201:16:12;;;3198:36;;;3230:1;3227;3220:12;3198:36;;3269:71;3332:7;3321:8;3310:9;3306:24;3269:71;:::i;:::-;2630:770;;;;-1:-1:-1;3359:8:12;-1:-1:-1;;;;2630:770:12:o;5144:313::-;5211:6;5219;5272:2;5260:9;5251:7;5247:23;5243:32;5240:52;;;5288:1;5285;5278:12;5240:52;5324:9;5311:23;5301:33;;5384:2;5373:9;5369:18;5356:32;5397:30;5421:5;5397:30;:::i;:::-;5446:5;5436:15;;;5144:313;;;;;:::o;5786:510::-;5881:6;5889;5897;5950:2;5938:9;5929:7;5925:23;5921:32;5918:52;;;5966:1;5963;5956:12;5918:52;6006:9;5993:23;6039:18;6031:6;6028:30;6025:50;;;6071:1;6068;6061:12;6025:50;6110:69;6171:7;6162:6;6151:9;6147:22;6110:69;:::i;:::-;6198:8;;-1:-1:-1;6084:95:12;-1:-1:-1;6252:38:12;;-1:-1:-1;6286:2:12;6271:18;;6252:38;:::i;:::-;6242:48;;5786:510;;;;;:::o;7704:127::-;7765:10;7760:3;7756:20;7753:1;7746:31;7796:4;7793:1;7786:15;7820:4;7817:1;7810:15;7836:128;7903:9;;;7924:11;;;7921:37;;;7938:18;;:::i;:::-;7836:128;;;;:::o;8429:249::-;8498:6;8551:2;8539:9;8530:7;8526:23;8522:32;8519:52;;;8567:1;8564;8557:12;8519:52;8599:9;8593:16;8618:30;8642:5;8618:30;:::i;10800:127::-;10861:10;10856:3;10852:20;10849:1;10842:31;10892:4;10889:1;10882:15;10916:4;10913:1;10906:15;10932:135;10971:3;10992:17;;;10989:43;;11012:18;;:::i;:::-;-1:-1:-1;11059:1:12;11048:13;;10932:135::o;11072:519::-;11171:6;11166:3;11159:19;11141:3;11197:4;11226:2;11221:3;11217:12;11210:19;;11252:5;11275:1;11285:281;11299:6;11296:1;11293:13;11285:281;;;11376:6;11363:20;11396:32;11420:7;11396:32;:::i;:::-;11466:18;11453:32;11441:45;;11506:12;;;;11541:15;;;;11321:1;11314:9;11285:281;;;-1:-1:-1;11582:3:12;;11072:519;-1:-1:-1;;;;;11072:519:12:o;11596:712::-;11871:2;11860:9;11853:21;11834:4;11897:72;11965:2;11954:9;11950:18;11942:6;11934;11897:72;:::i;:::-;12017:9;12009:6;12005:22;12000:2;11989:9;11985:18;11978:50;12052:6;12044;12037:22;12082:66;12074:6;12071:78;12068:98;;;12162:1;12159;12152:12;12068:98;12196:6;12193:1;12189:14;12250:6;12242;12237:2;12229:6;12225:15;12212:45;12278:19;12299:2;12274:28;;11596:712;-1:-1:-1;;;;;;11596:712:12:o;12313:160::-;12379:20;;12439:1;12428:20;;;12418:31;;12408:59;;12463:1;12460;12453:12;12478:182;12535:6;12588:2;12576:9;12567:7;12563:23;12559:32;12556:52;;;12604:1;12601;12594:12;12556:52;12627:27;12644:9;12627:27;:::i;12665:815::-;12936:2;12925:9;12918:21;12899:4;12962:72;13030:2;13019:9;13015:18;13007:6;12999;12962:72;:::i;:::-;13091:22;;;13053:2;13071:18;;;13064:50;;;;13149:22;;;13225:6;;13187:15;;13249:1;13259:195;13273:6;13270:1;13267:13;13259:195;;;13348:24;13365:6;13348:24;:::i;:::-;13345:1;13334:39;13322:52;;13429:15;;;;13394:12;;;;13295:1;13288:9;13259:195;;;-1:-1:-1;13471:3:12;12665:815;-1:-1:-1;;;;;;;;12665:815:12:o;13817:163::-;13884:20;;13944:10;13933:22;;13923:33;;13913:61;;13970:1;13967;13960:12;13985:184;14043:6;14096:2;14084:9;14075:7;14071:23;14067:32;14064:52;;;14112:1;14109;14102:12;14064:52;14135:28;14153:9;14135:28;:::i;14527:820::-;14800:2;14789:9;14782:21;14763:4;14826:72;14894:2;14883:9;14879:18;14871:6;14863;14826:72;:::i;:::-;14955:22;;;14917:2;14935:18;;;14928:50;;;;15013:22;;;15089:6;;15051:15;;15113:1;15123:198;15137:6;15134:1;15131:13;15123:198;;;15229:10;15202:25;15220:6;15202:25;:::i;:::-;15198:42;15186:55;;15296:15;;;;15261:12;;;;15159:1;15152:9;15123:198;;15352:168;15425:9;;;15456;;15473:15;;;15467:22;;15453:37;15443:71;;15494:18;;:::i;15525:217::-;15565:1;15591;15581:132;;15635:10;15630:3;15626:20;15623:1;15616:31;15670:4;15667:1;15660:15;15698:4;15695:1;15688:15;15581:132;-1:-1:-1;15727:9:12;;15525:217::o;15747:125::-;15812:9;;;15833:10;;;15830:36;;;15846:18;;:::i;16780:184::-;16850:6;16903:2;16891:9;16882:7;16878:23;16874:32;16871:52;;;16919:1;16916;16909:12;16871:52;-1:-1:-1;16942:16:12;;16780:184;-1:-1:-1;16780:184:12:o;20265:277::-;20332:6;20385:2;20373:9;20364:7;20360:23;20356:32;20353:52;;;20401:1;20398;20391:12;20353:52;20433:9;20427:16;20486:5;20479:13;20472:21;20465:5;20462:32;20452:60;;20508:1;20505;20498:12;21723:250;21808:1;21818:113;21832:6;21829:1;21826:13;21818:113;;;21908:11;;;21902:18;21889:11;;;21882:39;21854:2;21847:10;21818:113;;;-1:-1:-1;;21965:1:12;21947:16;;21940:27;21723:250::o;21978:287::-;22107:3;22145:6;22139:13;22161:66;22220:6;22215:3;22208:4;22200:6;22196:17;22161:66;:::i;:::-;22243:16;;;;;21978:287;-1:-1:-1;;21978:287:12:o;22270:396::-;22419:2;22408:9;22401:21;22382:4;22451:6;22445:13;22494:6;22489:2;22478:9;22474:18;22467:34;22510:79;22582:6;22577:2;22566:9;22562:18;22557:2;22549:6;22545:15;22510:79;:::i;:::-;22650:2;22629:15;-1:-1:-1;;22625:29:12;22610:45;;;;22657:2;22606:54;;22270:396;-1:-1:-1;;22270:396:12:o
Swarm Source
ipfs://441d00d8fb72a6f8beedfbb0ad4bb6cdb18de5058d16ff84693a9e9f52fbc457
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.999658 | 287.4 | $287.3 |
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.