Source Code
Overview
MOVR Balance
MOVR Value
$0.00Latest 25 from a total of 513 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 6742258 | 622 days ago | IN | 0 MOVR | 0.00013165 | ||||
| Withdraw | 5278369 | 839 days ago | IN | 0 MOVR | 0.00011978 | ||||
| Withdraw | 4940747 | 887 days ago | IN | 0 MOVR | 0.00011742 | ||||
| Withdraw | 4827867 | 903 days ago | IN | 0 MOVR | 0.00011742 | ||||
| Withdraw | 4793429 | 908 days ago | IN | 0 MOVR | 0.00011742 | ||||
| Bridge Gas | 4771094 | 911 days ago | IN | 0.0161097 MOVR | 0.00128488 | ||||
| Withdraw | 4769899 | 911 days ago | IN | 0 MOVR | 0.00011742 | ||||
| Bridge Gas | 4763414 | 912 days ago | IN | 0.04690199 MOVR | 0.0012848 | ||||
| Bridge Gas | 4762254 | 912 days ago | IN | 0.41520828 MOVR | 0.0012848 | ||||
| Bridge Gas | 4762243 | 912 days ago | IN | 0.02281576 MOVR | 0.00135085 | ||||
| Bridge Gas | 4762124 | 912 days ago | IN | 0.00569853 MOVR | 0.00124043 | ||||
| Bridge Gas | 4761985 | 912 days ago | IN | 0.00580808 MOVR | 0.00126191 | ||||
| Bridge Gas | 4761962 | 912 days ago | IN | 0.0073758 MOVR | 0.0012848 | ||||
| Bridge Gas | 4761864 | 912 days ago | IN | 0.00568741 MOVR | 0.00126223 | ||||
| Bridge Gas | 4761837 | 912 days ago | IN | 0.00567224 MOVR | 0.00126192 | ||||
| Bridge Gas | 4761764 | 912 days ago | IN | 0.24540077 MOVR | 0.00128451 | ||||
| Bridge Gas | 4761739 | 912 days ago | IN | 0.00754579 MOVR | 0.00119884 | ||||
| Bridge Gas | 4761733 | 912 days ago | IN | 0.02508234 MOVR | 0.00126137 | ||||
| Bridge Gas | 4761607 | 912 days ago | IN | 0.00745135 MOVR | 0.00128472 | ||||
| Bridge Gas | 4761549 | 912 days ago | IN | 0.00339644 MOVR | 0.00128448 | ||||
| Bridge Gas | 4761546 | 912 days ago | IN | 0.00339644 MOVR | 0.00126293 | ||||
| Bridge Gas | 4761543 | 912 days ago | IN | 0.00339644 MOVR | 0.0012848 | ||||
| Bridge Gas | 4761542 | 912 days ago | IN | 0.00745135 MOVR | 0.0012848 | ||||
| Bridge Gas | 4761540 | 912 days ago | IN | 0.00339644 MOVR | 0.0012848 | ||||
| Bridge Gas | 4761537 | 912 days ago | IN | 0.00339644 MOVR | 0.0012848 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 4793429 | 908 days ago | 0.00189035 MOVR | ||||
| 4771094 | 911 days ago | 0.01421934 MOVR | ||||
| 4769899 | 911 days ago | 0.73787012 MOVR | ||||
| 4763414 | 912 days ago | 0.03934056 MOVR | ||||
| 4762254 | 912 days ago | 0.40764684 MOVR | ||||
| 4762243 | 912 days ago | 0.01998022 MOVR | ||||
| 4762124 | 912 days ago | 0.00538347 MOVR | ||||
| 4761985 | 912 days ago | 0.00549302 MOVR | ||||
| 4761962 | 912 days ago | 0.00706074 MOVR | ||||
| 4761864 | 912 days ago | 0.00537235 MOVR | ||||
| 4761837 | 912 days ago | 0.00535718 MOVR | ||||
| 4761764 | 912 days ago | 0.23783934 MOVR | ||||
| 4761739 | 912 days ago | 0.00723073 MOVR | ||||
| 4761733 | 912 days ago | 0.0222468 MOVR | ||||
| 4761607 | 912 days ago | 0.00713629 MOVR | ||||
| 4761549 | 912 days ago | 0.00339644 MOVR | ||||
| 4761546 | 912 days ago | 0.00339644 MOVR | ||||
| 4761543 | 912 days ago | 0.00339644 MOVR | ||||
| 4761542 | 912 days ago | 0.00713629 MOVR | ||||
| 4761540 | 912 days ago | 0.00339644 MOVR | ||||
| 4761537 | 912 days ago | 0.00339644 MOVR | ||||
| 4761533 | 912 days ago | 0.00339644 MOVR | ||||
| 4761531 | 912 days ago | 0.00339644 MOVR | ||||
| 4761529 | 912 days ago | 0.00339644 MOVR | ||||
| 4761523 | 912 days ago | 0.00339644 MOVR |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MerklyRefuel
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./NonblockingLzApp.sol";
contract MerklyRefuel is NonblockingLzApp {
using BytesLib for bytes;
constructor(address _lzEndpoint) NonblockingLzApp(_lzEndpoint) {}
function estimateSendFee(uint16 _dstChainId, bytes memory payload, bytes memory _adapterParams) public view virtual returns (uint nativeFee, uint zroFee) {
return lzEndpoint.estimateFees(_dstChainId, address(this), payload, false, _adapterParams);
}
function _nonblockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual override {
// empty
}
function bridgeGas(uint16 _dstChainId, bytes memory _toAddress, bytes memory _adapterParams) public payable virtual {
(uint nativeFee,) = estimateSendFee(_dstChainId, _toAddress, _adapterParams);
require(msg.value >= nativeFee, "Not enough gas to send");
_lzSend(_dstChainId, _toAddress, payable(0x0), address(0x0), _adapterParams, nativeFee);
}
function withdraw() public payable onlyOwner {
(bool success, ) = payable(msg.sender).call{value: address(this).balance}("");
require(success);
}
}
// SPDX-License-Identifier: Unlicense /* * @title Solidity Bytes Arrays Utils * @author Gonçalo Sá <[email protected]> * * @dev Bytes tightly packed arrays utility library for ethereum contracts written in Solidity. * The library lets you concatenate, slice and type cast bytes arrays both in memory and storage. */ pragma solidity >=0.8.0 <0.9.0; library BytesLib { function concat( bytes memory _preBytes, bytes memory _postBytes ) internal pure returns (bytes memory) { bytes memory tempBytes; assembly { // Get a location of some free memory and store it in tempBytes as // Solidity does for memory variables. tempBytes := mload(0x40) // Store the length of the first bytes array at the beginning of // the memory for tempBytes. let length := mload(_preBytes) mstore(tempBytes, length) // Maintain a memory counter for the current write location in the // temp bytes array by adding the 32 bytes for the array length to // the starting location. let mc := add(tempBytes, 0x20) // Stop copying when the memory counter reaches the length of the // first bytes array. let end := add(mc, length) for { // Initialize a copy counter to the start of the _preBytes data, // 32 bytes into its memory. let cc := add(_preBytes, 0x20) } lt(mc, end) { // Increase both counters by 32 bytes each iteration. mc := add(mc, 0x20) cc := add(cc, 0x20) } { // Write the _preBytes data into the tempBytes memory 32 bytes // at a time. mstore(mc, mload(cc)) } // Add the length of _postBytes to the current length of tempBytes // and store it as the new length in the first 32 bytes of the // tempBytes memory. length := mload(_postBytes) mstore(tempBytes, add(length, mload(tempBytes))) // Move the memory counter back from a multiple of 0x20 to the // actual end of the _preBytes data. mc := end // Stop copying when the memory counter reaches the new combined // length of the arrays. end := add(mc, length) for { let cc := add(_postBytes, 0x20) } lt(mc, end) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { mstore(mc, mload(cc)) } // Update the free-memory pointer by padding our last write location // to 32 bytes: add 31 bytes to the end of tempBytes to move to the // next 32 byte block, then round down to the nearest multiple of // 32. If the sum of the length of the two arrays is zero then add // one before rounding down to leave a blank 32 bytes (the length block with 0). mstore(0x40, and( add(add(end, iszero(add(length, mload(_preBytes)))), 31), not(31) // Round down to the nearest 32 bytes. )) } return tempBytes; } function concatStorage(bytes storage _preBytes, bytes memory _postBytes) internal { assembly { // Read the first 32 bytes of _preBytes storage, which is the length // of the array. (We don't need to use the offset into the slot // because arrays use the entire slot.) let fslot := sload(_preBytes.slot) // Arrays of 31 bytes or less have an even value in their slot, // while longer arrays have an odd value. The actual length is // the slot divided by two for odd values, and the lowest order // byte divided by two for even values. // If the slot is even, bitwise and the slot with 255 and divide by // two to get the length. If the slot is odd, bitwise and the slot // with -1 and divide by two. let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2) let mlength := mload(_postBytes) let newlength := add(slength, mlength) // slength can contain both the length and contents of the array // if length < 32 bytes so let's prepare for that // v. http://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage switch add(lt(slength, 32), lt(newlength, 32)) case 2 { // Since the new array still fits in the slot, we just need to // update the contents of the slot. // uint256(bytes_storage) = uint256(bytes_storage) + uint256(bytes_memory) + new_length sstore( _preBytes.slot, // all the modifications to the slot are inside this // next block add( // we can just add to the slot contents because the // bytes we want to change are the LSBs fslot, add( mul( div( // load the bytes from memory mload(add(_postBytes, 0x20)), // zero all bytes to the right exp(0x100, sub(32, mlength)) ), // and now shift left the number of bytes to // leave space for the length in the slot exp(0x100, sub(32, newlength)) ), // increase length by the double of the memory // bytes length mul(mlength, 2) ) ) ) } case 1 { // The stored value fits in the slot, but the combined value // will exceed it. // get the keccak hash to get the contents of the array mstore(0x0, _preBytes.slot) let sc := add(keccak256(0x0, 0x20), div(slength, 32)) // save new length sstore(_preBytes.slot, add(mul(newlength, 2), 1)) // The contents of the _postBytes array start 32 bytes into // the structure. Our first read should obtain the `submod` // bytes that can fit into the unused space in the last word // of the stored array. To get this, we read 32 bytes starting // from `submod`, so the data we read overlaps with the array // contents by `submod` bytes. Masking the lowest-order // `submod` bytes allows us to add that value directly to the // stored value. let submod := sub(32, slength) let mc := add(_postBytes, submod) let end := add(_postBytes, mlength) let mask := sub(exp(0x100, submod), 1) sstore( sc, add( and( fslot, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 ), and(mload(mc), mask) ) ) for { mc := add(mc, 0x20) sc := add(sc, 1) } lt(mc, end) { sc := add(sc, 1) mc := add(mc, 0x20) } { sstore(sc, mload(mc)) } mask := exp(0x100, sub(mc, end)) sstore(sc, mul(div(mload(mc), mask), mask)) } default { // get the keccak hash to get the contents of the array mstore(0x0, _preBytes.slot) // Start copying to the last used word of the stored array. let sc := add(keccak256(0x0, 0x20), div(slength, 32)) // save new length sstore(_preBytes.slot, add(mul(newlength, 2), 1)) // Copy over the first `submod` bytes of the new data as in // case 1 above. let slengthmod := mod(slength, 32) let mlengthmod := mod(mlength, 32) let submod := sub(32, slengthmod) let mc := add(_postBytes, submod) let end := add(_postBytes, mlength) let mask := sub(exp(0x100, submod), 1) sstore(sc, add(sload(sc), and(mload(mc), mask))) for { sc := add(sc, 1) mc := add(mc, 0x20) } lt(mc, end) { sc := add(sc, 1) mc := add(mc, 0x20) } { sstore(sc, mload(mc)) } mask := exp(0x100, sub(mc, end)) sstore(sc, mul(div(mload(mc), mask), mask)) } } } function slice( bytes memory _bytes, uint256 _start, uint256 _length ) internal pure returns (bytes memory) { require(_length + 31 >= _length, "slice_overflow"); require(_bytes.length >= _start + _length, "slice_outOfBounds"); bytes memory tempBytes; assembly { switch iszero(_length) case 0 { // Get a location of some free memory and store it in tempBytes as // Solidity does for memory variables. tempBytes := mload(0x40) // The first word of the slice result is potentially a partial // word read from the original array. To read it, we calculate // the length of that partial word and start copying that many // bytes into the array. The first word we copy will start with // data we don't care about, but the last `lengthmod` bytes will // land at the beginning of the contents of the new array. When // we're done copying, we overwrite the full first word with // the actual length of the slice. let lengthmod := and(_length, 31) // The multiplication in the next line is necessary // because when slicing multiples of 32 bytes (lengthmod == 0) // the following copy loop was copying the origin's length // and then ending prematurely not copying everything it should. let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod))) let end := add(mc, _length) for { // The multiplication in the next line has the same exact purpose // as the one above. let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start) } lt(mc, end) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { mstore(mc, mload(cc)) } mstore(tempBytes, _length) //update free-memory pointer //allocating the array padded to 32 bytes like the compiler does now mstore(0x40, and(add(mc, 31), not(31))) } //if we want a zero-length slice let's just return a zero-length array default { tempBytes := mload(0x40) //zero out the 32 bytes slice we are about to return //we need to do it because Solidity does not garbage collect mstore(tempBytes, 0) mstore(0x40, add(tempBytes, 0x20)) } } return tempBytes; } function toAddress(bytes memory _bytes, uint256 _start) internal pure returns (address) { require(_bytes.length >= _start + 20, "toAddress_outOfBounds"); address tempAddress; assembly { tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000) } return tempAddress; } function toUint8(bytes memory _bytes, uint256 _start) internal pure returns (uint8) { require(_bytes.length >= _start + 1 , "toUint8_outOfBounds"); uint8 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x1), _start)) } return tempUint; } function toUint16(bytes memory _bytes, uint256 _start) internal pure returns (uint16) { require(_bytes.length >= _start + 2, "toUint16_outOfBounds"); uint16 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x2), _start)) } return tempUint; } function toUint32(bytes memory _bytes, uint256 _start) internal pure returns (uint32) { require(_bytes.length >= _start + 4, "toUint32_outOfBounds"); uint32 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x4), _start)) } return tempUint; } function toUint64(bytes memory _bytes, uint256 _start) internal pure returns (uint64) { require(_bytes.length >= _start + 8, "toUint64_outOfBounds"); uint64 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x8), _start)) } return tempUint; } function toUint96(bytes memory _bytes, uint256 _start) internal pure returns (uint96) { require(_bytes.length >= _start + 12, "toUint96_outOfBounds"); uint96 tempUint; assembly { tempUint := mload(add(add(_bytes, 0xc), _start)) } return tempUint; } function toUint128(bytes memory _bytes, uint256 _start) internal pure returns (uint128) { require(_bytes.length >= _start + 16, "toUint128_outOfBounds"); uint128 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x10), _start)) } return tempUint; } function toUint256(bytes memory _bytes, uint256 _start) internal pure returns (uint256) { require(_bytes.length >= _start + 32, "toUint256_outOfBounds"); uint256 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x20), _start)) } return tempUint; } function toBytes32(bytes memory _bytes, uint256 _start) internal pure returns (bytes32) { require(_bytes.length >= _start + 32, "toBytes32_outOfBounds"); bytes32 tempBytes32; assembly { tempBytes32 := mload(add(add(_bytes, 0x20), _start)) } return tempBytes32; } function equal(bytes memory _preBytes, bytes memory _postBytes) internal pure returns (bool) { bool success = true; assembly { let length := mload(_preBytes) // if lengths don't match the arrays are not equal switch eq(length, mload(_postBytes)) case 1 { // cb is a circuit breaker in the for loop since there's // no said feature for inline assembly loops // cb = 1 - don't breaker // cb = 0 - break let cb := 1 let mc := add(_preBytes, 0x20) let end := add(mc, length) for { let cc := add(_postBytes, 0x20) // the next line is the loop condition: // while(uint256(mc < end) + cb == 2) } eq(add(lt(mc, end), cb), 2) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { // if any of these checks fails then arrays are not equal if iszero(eq(mload(mc), mload(cc))) { // unsuccess: success := 0 cb := 0 } } } default { // unsuccess: success := 0 } } return success; } function equalStorage( bytes storage _preBytes, bytes memory _postBytes ) internal view returns (bool) { bool success = true; assembly { // we know _preBytes_offset is 0 let fslot := sload(_preBytes.slot) // Decode the length of the stored array like in concatStorage(). let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2) let mlength := mload(_postBytes) // if lengths don't match the arrays are not equal switch eq(slength, mlength) case 1 { // slength can contain both the length and contents of the array // if length < 32 bytes so let's prepare for that // v. http://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage if iszero(iszero(slength)) { switch lt(slength, 32) case 1 { // blank the last byte which is the length fslot := mul(div(fslot, 0x100), 0x100) if iszero(eq(fslot, mload(add(_postBytes, 0x20)))) { // unsuccess: success := 0 } } default { // cb is a circuit breaker in the for loop since there's // no said feature for inline assembly loops // cb = 1 - don't breaker // cb = 0 - break let cb := 1 // get the keccak hash to get the contents of the array mstore(0x0, _preBytes.slot) let sc := keccak256(0x0, 0x20) let mc := add(_postBytes, 0x20) let end := add(mc, mlength) // the next line is the loop condition: // while(uint256(mc < end) + cb == 2) for {} eq(add(lt(mc, end), cb), 2) { sc := add(sc, 1) mc := add(mc, 0x20) } { if iszero(eq(sload(sc), mload(mc))) { // unsuccess: success := 0 cb := 0 } } } } } default { // unsuccess: success := 0 } } return success; } }
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.19;
/**
* @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;
}
}// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity >=0.7.6;
library ExcessivelySafeCall {
uint256 constant LOW_28_MASK =
0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
/// @notice Use when you _really_ really _really_ don't trust the called
/// contract. This prevents the called contract from causing reversion of
/// the caller in as many ways as we can.
/// @dev The main difference between this and a solidity low-level call is
/// that we limit the number of bytes that the callee can cause to be
/// copied to caller memory. This prevents stupid things like malicious
/// contracts returning 10,000,000 bytes causing a local OOG when copying
/// to memory.
/// @param _target The address to call
/// @param _gas The amount of gas to forward to the remote contract
/// @param _maxCopy The maximum number of bytes of returndata to copy
/// to memory.
/// @param _calldata The data to send to the remote contract
/// @return success and returndata, as `.call()`. Returndata is capped to
/// `_maxCopy` bytes.
function excessivelySafeCall(
address _target,
uint256 _gas,
uint16 _maxCopy,
bytes memory _calldata
) internal returns (bool, bytes memory) {
// set up for assembly call
uint256 _toCopy;
bool _success;
bytes memory _returnData = new bytes(_maxCopy);
// dispatch message to recipient
// by assembly calling "handle" function
// we call via assembly to avoid memcopying a very large returndata
// returned by a malicious contract
assembly {
_success := call(
_gas, // gas
_target, // recipient
0, // ether value
add(_calldata, 0x20), // inloc
mload(_calldata), // inlen
0, // outloc
0 // outlen
)
// limit our copy to 256 bytes
_toCopy := returndatasize()
if gt(_toCopy, _maxCopy) {
_toCopy := _maxCopy
}
// Store the length of the copied bytes
mstore(_returnData, _toCopy)
// copy the bytes from returndata[0:_toCopy]
returndatacopy(add(_returnData, 0x20), 0, _toCopy)
}
return (_success, _returnData);
}
/// @notice Use when you _really_ really _really_ don't trust the called
/// contract. This prevents the called contract from causing reversion of
/// the caller in as many ways as we can.
/// @dev The main difference between this and a solidity low-level call is
/// that we limit the number of bytes that the callee can cause to be
/// copied to caller memory. This prevents stupid things like malicious
/// contracts returning 10,000,000 bytes causing a local OOG when copying
/// to memory.
/// @param _target The address to call
/// @param _gas The amount of gas to forward to the remote contract
/// @param _maxCopy The maximum number of bytes of returndata to copy
/// to memory.
/// @param _calldata The data to send to the remote contract
/// @return success and returndata, as `.call()`. Returndata is capped to
/// `_maxCopy` bytes.
function excessivelySafeStaticCall(
address _target,
uint256 _gas,
uint16 _maxCopy,
bytes memory _calldata
) internal view returns (bool, bytes memory) {
// set up for assembly call
uint256 _toCopy;
bool _success;
bytes memory _returnData = new bytes(_maxCopy);
// dispatch message to recipient
// by assembly calling "handle" function
// we call via assembly to avoid memcopying a very large returndata
// returned by a malicious contract
assembly {
_success := staticcall(
_gas, // gas
_target, // recipient
add(_calldata, 0x20), // inloc
mload(_calldata), // inlen
0, // outloc
0 // outlen
)
// limit our copy to 256 bytes
_toCopy := returndatasize()
if gt(_toCopy, _maxCopy) {
_toCopy := _maxCopy
}
// Store the length of the copied bytes
mstore(_returnData, _toCopy)
// copy the bytes from returndata[0:_toCopy]
returndatacopy(add(_returnData, 0x20), 0, _toCopy)
}
return (_success, _returnData);
}
/**
* @notice Swaps function selectors in encoded contract calls
* @dev Allows reuse of encoded calldata for functions with identical
* argument types but different names. It simply swaps out the first 4 bytes
* for the new selector. This function modifies memory in place, and should
* only be used with caution.
* @param _newSelector The new 4-byte selector
* @param _buf The encoded contract args
*/
function swapSelector(bytes4 _newSelector, bytes memory _buf)
internal
pure
{
require(_buf.length >= 4);
uint256 _mask = LOW_28_MASK;
assembly {
// load the first word of
let _word := mload(add(_buf, 0x20))
// mask out the top 4 bytes
// /x
_word := and(_word, _mask)
_word := or(_newSelector, _word)
mstore(add(_buf, 0x20), _word)
}
}
}
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;
import "./ILayerZeroUserApplicationConfig.sol";
interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig {
// @notice send a LayerZero message to the specified address at a LayerZero endpoint.
// @param _dstChainId - the destination chain identifier
// @param _destination - the address on destination chain (in bytes). address length/format may vary by chains
// @param _payload - a custom bytes payload to send to the destination contract
// @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address
// @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction
// @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination
function send(uint16 _dstChainId, bytes calldata _destination, bytes calldata _payload, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParams) external payable;
// @notice used by the messaging library to publish verified payload
// @param _srcChainId - the source chain identifier
// @param _srcAddress - the source contract (as bytes) at the source chain
// @param _dstAddress - the address on destination chain
// @param _nonce - the unbound message ordering nonce
// @param _gasLimit - the gas limit for external contract execution
// @param _payload - verified payload to send to the destination contract
function receivePayload(uint16 _srcChainId, bytes calldata _srcAddress, address _dstAddress, uint64 _nonce, uint _gasLimit, bytes calldata _payload) external;
// @notice get the inboundNonce of a lzApp from a source chain which could be EVM or non-EVM chain
// @param _srcChainId - the source chain identifier
// @param _srcAddress - the source chain contract address
function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64);
// @notice get the outboundNonce from this source chain which, consequently, is always an EVM
// @param _srcAddress - the source chain contract address
function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64);
// @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery
// @param _dstChainId - the destination chain identifier
// @param _userApplication - the user app address on this EVM chain
// @param _payload - the custom message to send over LayerZero
// @param _payInZRO - if false, user app pays the protocol fee in native token
// @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain
function estimateFees(uint16 _dstChainId, address _userApplication, bytes calldata _payload, bool _payInZRO, bytes calldata _adapterParam) external view returns (uint nativeFee, uint zroFee);
// @notice get this Endpoint's immutable source identifier
function getChainId() external view returns (uint16);
// @notice the interface to retry failed message on this Endpoint destination
// @param _srcChainId - the source chain identifier
// @param _srcAddress - the source chain contract address
// @param _payload - the payload to be retried
function retryPayload(uint16 _srcChainId, bytes calldata _srcAddress, bytes calldata _payload) external;
// @notice query if any STORED payload (message blocking) at the endpoint.
// @param _srcChainId - the source chain identifier
// @param _srcAddress - the source chain contract address
function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool);
// @notice query if the _libraryAddress is valid for sending msgs.
// @param _userApplication - the user app address on this EVM chain
function getSendLibraryAddress(address _userApplication) external view returns (address);
// @notice query if the _libraryAddress is valid for receiving msgs.
// @param _userApplication - the user app address on this EVM chain
function getReceiveLibraryAddress(address _userApplication) external view returns (address);
// @notice query if the non-reentrancy guard for send() is on
// @return true if the guard is on. false otherwise
function isSendingPayload() external view returns (bool);
// @notice query if the non-reentrancy guard for receive() is on
// @return true if the guard is on. false otherwise
function isReceivingPayload() external view returns (bool);
// @notice get the configuration of the LayerZero messaging library of the specified version
// @param _version - messaging library version
// @param _chainId - the chainId for the pending config change
// @param _userApplication - the contract address of the user application
// @param _configType - type of configuration. every messaging library has its own convention.
function getConfig(uint16 _version, uint16 _chainId, address _userApplication, uint _configType) external view returns (bytes memory);
// @notice get the send() LayerZero messaging library version
// @param _userApplication - the contract address of the user application
function getSendVersion(address _userApplication) external view returns (uint16);
// @notice get the lzReceive() LayerZero messaging library version
// @param _userApplication - the contract address of the user application
function getReceiveVersion(address _userApplication) external view returns (uint16);
}
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;
interface ILayerZeroReceiver {
// @notice LayerZero endpoint will invoke this function to deliver the message on the destination
// @param _srcChainId - the source endpoint identifier
// @param _srcAddress - the source sending contract address from the source chain
// @param _nonce - the ordered message nonce
// @param _payload - the signed payload is the UA bytes has encoded to be sent
function lzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) external;
}
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;
interface ILayerZeroUserApplicationConfig {
// @notice set the configuration of the LayerZero messaging library of the specified version
// @param _version - messaging library version
// @param _chainId - the chainId for the pending config change
// @param _configType - type of configuration. every messaging library has its own convention.
// @param _config - configuration in the bytes. can encode arbitrary content.
function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external;
// @notice set the send() LayerZero messaging library version to _version
// @param _version - new messaging library version
function setSendVersion(uint16 _version) external;
// @notice set the lzReceive() LayerZero messaging library version to _version
// @param _version - new messaging library version
function setReceiveVersion(uint16 _version) external;
// @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload
// @param _srcChainId - the chainId of the source chain
// @param _srcAddress - the contract address of the source contract at the source chain
function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external;
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./Ownable.sol";
import "./ILayerZeroReceiver.sol";
import "./ILayerZeroUserApplicationConfig.sol";
import "./ILayerZeroEndpoint.sol";
import "./BytesLib.sol";
/*
* a generic LzReceiver implementation
*/
abstract contract LzApp is Ownable, ILayerZeroReceiver, ILayerZeroUserApplicationConfig {
using BytesLib for bytes;
// ua can not send payload larger than this by default, but it can be changed by the ua owner
uint constant public DEFAULT_PAYLOAD_SIZE_LIMIT = 10000;
ILayerZeroEndpoint public immutable lzEndpoint;
mapping(uint16 => bytes) public trustedRemoteLookup;
mapping(uint16 => mapping(uint16 => uint)) public minDstGasLookup;
mapping(uint16 => uint) public payloadSizeLimitLookup;
address public precrime;
event SetPrecrime(address precrime);
event SetTrustedRemote(uint16 _remoteChainId, bytes _path);
event SetTrustedRemoteAddress(uint16 _remoteChainId, bytes _remoteAddress);
event SetMinDstGas(uint16 _dstChainId, uint16 _type, uint _minDstGas);
constructor(address _endpoint) Ownable(msg.sender) {
lzEndpoint = ILayerZeroEndpoint(_endpoint);
}
function lzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) public virtual override {
// lzReceive must be called by the endpoint for security
require(_msgSender() == address(lzEndpoint), "LzApp: invalid endpoint caller");
bytes memory trustedRemote = trustedRemoteLookup[_srcChainId];
// if will still block the message pathway from (srcChainId, srcAddress). should not receive message from untrusted remote.
require(_srcAddress.length == trustedRemote.length && trustedRemote.length > 0 && keccak256(_srcAddress) == keccak256(trustedRemote), "LzApp: invalid source sending contract");
_blockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload);
}
// abstract function - the default behaviour of LayerZero is blocking. See: NonblockingLzApp if you dont need to enforce ordered messaging
function _blockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual;
function _lzSend(uint16 _dstChainId, bytes memory _payload, address payable _refundAddress, address _zroPaymentAddress, bytes memory _adapterParams, uint _nativeFee) internal virtual {
bytes memory trustedRemote = trustedRemoteLookup[_dstChainId];
require(trustedRemote.length != 0, "LzApp: destination chain is not a trusted source");
_checkPayloadSize(_dstChainId, _payload.length);
lzEndpoint.send{value: _nativeFee}(_dstChainId, trustedRemote, _payload, _refundAddress, _zroPaymentAddress, _adapterParams);
}
function _checkGasLimit(uint16 _dstChainId, uint16 _type, bytes memory _adapterParams, uint _extraGas) internal view virtual {
uint providedGasLimit = _getGasLimit(_adapterParams);
uint minGasLimit = minDstGasLookup[_dstChainId][_type] + _extraGas;
require(minGasLimit > 0, "LzApp: minGasLimit not set");
require(providedGasLimit >= minGasLimit, "LzApp: gas limit is too low");
}
function _getGasLimit(bytes memory _adapterParams) internal pure virtual returns (uint gasLimit) {
require(_adapterParams.length >= 34, "LzApp: invalid adapterParams");
assembly {
gasLimit := mload(add(_adapterParams, 34))
}
}
function _checkPayloadSize(uint16 _dstChainId, uint _payloadSize) internal view virtual {
uint payloadSizeLimit = payloadSizeLimitLookup[_dstChainId];
if (payloadSizeLimit == 0) { // use default if not set
payloadSizeLimit = DEFAULT_PAYLOAD_SIZE_LIMIT;
}
require(_payloadSize <= payloadSizeLimit, "LzApp: payload size is too large");
}
//---------------------------UserApplication config----------------------------------------
function getConfig(uint16 _version, uint16 _chainId, address, uint _configType) external view returns (bytes memory) {
return lzEndpoint.getConfig(_version, _chainId, address(this), _configType);
}
// generic config for LayerZero user Application
function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external override onlyOwner {
lzEndpoint.setConfig(_version, _chainId, _configType, _config);
}
function setSendVersion(uint16 _version) external override onlyOwner {
lzEndpoint.setSendVersion(_version);
}
function setReceiveVersion(uint16 _version) external override onlyOwner {
lzEndpoint.setReceiveVersion(_version);
}
function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external override onlyOwner {
lzEndpoint.forceResumeReceive(_srcChainId, _srcAddress);
}
// _path = abi.encodePacked(remoteAddress, localAddress)
// this function set the trusted path for the cross-chain communication
function setTrustedRemote(uint16 _remoteChainId, bytes calldata _path) external onlyOwner {
trustedRemoteLookup[_remoteChainId] = _path;
emit SetTrustedRemote(_remoteChainId, _path);
}
function setTrustedRemoteAddress(uint16 _remoteChainId, bytes calldata _remoteAddress) external onlyOwner {
trustedRemoteLookup[_remoteChainId] = abi.encodePacked(_remoteAddress, address(this));
emit SetTrustedRemoteAddress(_remoteChainId, _remoteAddress);
}
function getTrustedRemoteAddress(uint16 _remoteChainId) external view returns (bytes memory) {
bytes memory path = trustedRemoteLookup[_remoteChainId];
require(path.length != 0, "LzApp: no trusted path record");
return path.slice(0, path.length - 20); // the last 20 bytes should be address(this)
}
function setPrecrime(address _precrime) external onlyOwner {
precrime = _precrime;
emit SetPrecrime(_precrime);
}
function setMinDstGas(uint16 _dstChainId, uint16 _packetType, uint _minGas) external onlyOwner {
require(_minGas > 0, "LzApp: invalid minGas");
minDstGasLookup[_dstChainId][_packetType] = _minGas;
emit SetMinDstGas(_dstChainId, _packetType, _minGas);
}
// if the size is 0, it means default size limit
function setPayloadSizeLimit(uint16 _dstChainId, uint _size) external onlyOwner {
payloadSizeLimitLookup[_dstChainId] = _size;
}
//--------------------------- VIEW FUNCTION ----------------------------------------
function isTrustedRemote(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool) {
bytes memory trustedSource = trustedRemoteLookup[_srcChainId];
return keccak256(trustedSource) == keccak256(_srcAddress);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./LzApp.sol";
import "./ExcessivelySafeCall.sol";
/*
* the default LayerZero messaging behaviour is blocking, i.e. any failed message will block the channel
* this abstract class try-catch all fail messages and store locally for future retry. hence, non-blocking
* NOTE: if the srcAddress is not configured properly, it will still block the message pathway from (srcChainId, srcAddress)
*/
abstract contract NonblockingLzApp is LzApp {
using ExcessivelySafeCall for address;
constructor(address _endpoint) LzApp(_endpoint) {}
mapping(uint16 => mapping(bytes => mapping(uint64 => bytes32))) public failedMessages;
event MessageFailed(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload, bytes _reason);
event RetryMessageSuccess(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes32 _payloadHash);
// overriding the virtual function in LzReceiver
function _blockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual override {
(bool success, bytes memory reason) = address(this).excessivelySafeCall(gasleft(), 150, abi.encodeWithSelector(this.nonblockingLzReceive.selector, _srcChainId, _srcAddress, _nonce, _payload));
// try-catch all errors/exceptions
if (!success) {
_storeFailedMessage(_srcChainId, _srcAddress, _nonce, _payload, reason);
}
}
function _storeFailedMessage(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload, bytes memory _reason) internal virtual {
failedMessages[_srcChainId][_srcAddress][_nonce] = keccak256(_payload);
emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload, _reason);
}
function nonblockingLzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) public virtual {
// only internal transaction
require(_msgSender() == address(this), "NonblockingLzApp: caller must be LzApp");
_nonblockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload);
}
//@notice override this function
function _nonblockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual;
function retryMessage(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) public payable virtual {
// assert there is message to retry
bytes32 payloadHash = failedMessages[_srcChainId][_srcAddress][_nonce];
require(payloadHash != bytes32(0), "NonblockingLzApp: no stored message");
require(keccak256(_payload) == payloadHash, "NonblockingLzApp: invalid payload");
// clear the stored message
failedMessages[_srcChainId][_srcAddress][_nonce] = bytes32(0);
// execute the message. revert if it fails again
_nonblockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload);
emit RetryMessageSuccess(_srcChainId, _srcAddress, _nonce, payloadHash);
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
pragma solidity ^0.8.19;
import {Context} from "./Context.sol";
/**
* @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.
*
* The initial owner is set to the address provided by the deployer. 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.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @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 {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_lzEndpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"_reason","type":"bytes"}],"name":"MessageFailed","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":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes32","name":"_payloadHash","type":"bytes32"}],"name":"RetryMessageSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"_type","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"_minDstGas","type":"uint256"}],"name":"SetMinDstGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"precrime","type":"address"}],"name":"SetPrecrime","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_path","type":"bytes"}],"name":"SetTrustedRemote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_remoteAddress","type":"bytes"}],"name":"SetTrustedRemoteAddress","type":"event"},{"inputs":[],"name":"DEFAULT_PAYLOAD_SIZE_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"bridgeGas","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"estimateSendFee","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"zroFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint64","name":"","type":"uint64"}],"name":"failedMessages","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"forceResumeReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_configType","type":"uint256"}],"name":"getConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_remoteChainId","type":"uint16"}],"name":"getTrustedRemoteAddress","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"isTrustedRemote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lzEndpoint","outputs":[{"internalType":"contract ILayerZeroEndpoint","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"uint16","name":"","type":"uint16"}],"name":"minDstGasLookup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"nonblockingLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"payloadSizeLimitLookup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"precrime","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"_configType","type":"uint256"},{"internalType":"bytes","name":"_config","type":"bytes"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"uint16","name":"_packetType","type":"uint16"},{"internalType":"uint256","name":"_minGas","type":"uint256"}],"name":"setMinDstGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"uint256","name":"_size","type":"uint256"}],"name":"setPayloadSizeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_precrime","type":"address"}],"name":"setPrecrime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setReceiveVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setSendVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"internalType":"bytes","name":"_path","type":"bytes"}],"name":"setTrustedRemote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"internalType":"bytes","name":"_remoteAddress","type":"bytes"}],"name":"setTrustedRemoteAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]Contract Creation Code
60a06040523480156200001157600080fd5b5060405162002494380380620024948339810160408190526200003491620000a8565b808033620000428162000058565b506001600160a01b031660805250620000da9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215620000bb57600080fd5b81516001600160a01b0381168114620000d357600080fd5b9392505050565b6080516123666200012e600039600081816104aa015281816105b801528181610807015281816108af01528181610a9f01528181610b0b01528181610f4e0152818161135201526115a101526123666000f3fe6080604052600436106101b65760003560e01c80638cfd8f5c116100ec578063c44618341161008a578063df2a5b3b11610064578063df2a5b3b14610535578063eb8d72b714610555578063f2fde38b14610575578063f5ecbdbc1461059557600080fd5b8063c4461834146104ec578063cbed8b9c14610502578063d1deba1f1461052257600080fd5b80639f38369a116100c65780639f38369a14610458578063a6c3d16514610478578063b353aaa714610498578063baf3292d146104cc57600080fd5b80638cfd8f5c146103ce5780638da5cb5b14610406578063950c8a741461043857600080fd5b80633f1f4fa4116101595780635b8c41e6116101335780635b8c41e61461031d57806366ad5c8a1461036c578063715018a61461038c5780637533d788146103a157600080fd5b80633f1f4fa41461028d57806342d65a8d146102c85780635a749876146102e857600080fd5b806310ddb1371161019557806310ddb1371461021d578063126928c41461023d5780633ccfd60b146102505780633d8b38f61461025857600080fd5b80621d3567146101bb57806307e0db17146101dd5780630df37483146101fd575b600080fd5b3480156101c757600080fd5b506101db6101d636600461198d565b6105b5565b005b3480156101e957600080fd5b506101db6101f8366004611a20565b6107e6565b34801561020957600080fd5b506101db610218366004611a3b565b61086f565b34801561022957600080fd5b506101db610238366004611a20565b61088e565b6101db61024b366004611b28565b6108e6565b6101db610954565b34801561026457600080fd5b50610278610273366004611b9b565b6109b4565b60405190151581526020015b60405180910390f35b34801561029957600080fd5b506102ba6102a8366004611a20565b60036020526000908152604090205481565b604051908152602001610284565b3480156102d457600080fd5b506101db6102e3366004611b9b565b610a80565b3480156102f457600080fd5b50610308610303366004611b28565b610b06565b60408051928352602083019190915201610284565b34801561032957600080fd5b506102ba610338366004611bed565b6005602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561037857600080fd5b506101db61038736600461198d565b610baa565b34801561039857600080fd5b506101db610c86565b3480156103ad57600080fd5b506103c16103bc366004611a20565b610c9a565b6040516102849190611c9a565b3480156103da57600080fd5b506102ba6103e9366004611cad565b600260209081526000928352604080842090915290825290205481565b34801561041257600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610284565b34801561044457600080fd5b50600454610420906001600160a01b031681565b34801561046457600080fd5b506103c1610473366004611a20565b610d34565b34801561048457600080fd5b506101db610493366004611b9b565b610e4a565b3480156104a457600080fd5b506104207f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d857600080fd5b506101db6104e7366004611cf7565b610ed3565b3480156104f857600080fd5b506102ba61271081565b34801561050e57600080fd5b506101db61051d366004611d12565b610f2f565b6101db61053036600461198d565b610fc4565b34801561054157600080fd5b506101db610550366004611d80565b6111da565b34801561056157600080fd5b506101db610570366004611b9b565b61128c565b34801561058157600080fd5b506101db610590366004611cf7565b6112e6565b3480156105a157600080fd5b506103c16105b0366004611dbc565b611321565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146106325760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff86166000908152600160205260408120805461065090611e07565b80601f016020809104026020016040519081016040528092919081815260200182805461067c90611e07565b80156106c95780601f1061069e576101008083540402835291602001916106c9565b820191906000526020600020905b8154815290600101906020018083116106ac57829003601f168201915b505050505090508051868690501480156106e4575060008151115b801561070c5750805160208201206040516107029088908890611e41565b6040518091039020145b6107675760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f6044820152651b9d1c9858dd60d21b6064820152608401610629565b6107dd8787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a9350915088908890819084018382808284376000920191909152506113d292505050565b50505050505050565b6107ee61144b565b6040516307e0db1760e01b815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307e0db17906024015b600060405180830381600087803b15801561085457600080fd5b505af1158015610868573d6000803e3d6000fd5b5050505050565b61087761144b565b61ffff909116600090815260036020526040902055565b61089661144b565b6040516310ddb13760e01b815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906310ddb1379060240161083a565b60006108f3848484610b06565b5090508034101561093f5760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da0819d85cc81d1bc81cd95b9960521b6044820152606401610629565b61094e84846000808686611478565b50505050565b61095c61144b565b604051600090339047908381818185875af1925050503d806000811461099e576040519150601f19603f3d011682016040523d82523d6000602084013e6109a3565b606091505b50509050806109b157600080fd5b50565b61ffff8316600090815260016020526040812080548291906109d590611e07565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0190611e07565b8015610a4e5780601f10610a2357610100808354040283529160200191610a4e565b820191906000526020600020905b815481529060010190602001808311610a3157829003601f168201915b505050505090508383604051610a65929190611e41565b60405180910390208180519060200120149150509392505050565b610a8861144b565b6040516342d65a8d60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d90610ad890869086908690600401611e7a565b600060405180830381600087803b158015610af257600080fd5b505af11580156107dd573d6000803e3d6000fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340a7bb108630876000886040518663ffffffff1660e01b8152600401610b5e959493929190611e98565b6040805180830381865afa158015610b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9e9190611eec565b91509150935093915050565b333014610c085760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d7573742062656044820152650204c7a4170760d41b6064820152608401610629565b610c7e8686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061094e92505050565b505050505050565b610c8e61144b565b610c98600061161d565b565b60016020526000908152604090208054610cb390611e07565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdf90611e07565b8015610d2c5780601f10610d0157610100808354040283529160200191610d2c565b820191906000526020600020905b815481529060010190602001808311610d0f57829003601f168201915b505050505081565b61ffff8116600090815260016020526040812080546060929190610d5790611e07565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8390611e07565b8015610dd05780601f10610da557610100808354040283529160200191610dd0565b820191906000526020600020905b815481529060010190602001808311610db357829003601f168201915b505050505090508051600003610e285760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f72640000006044820152606401610629565b610e43600060148351610e3b9190611f26565b83919061166d565b9392505050565b610e5261144b565b818130604051602001610e6793929190611f3f565b60408051601f1981840301815291815261ffff8516600090815260016020522090610e929082611fab565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce838383604051610ec693929190611e7a565b60405180910390a1505050565b610edb61144b565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b9060200160405180910390a150565b610f3761144b565b6040516332fb62e760e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c90610f8b908890889088908890889060040161206a565b600060405180830381600087803b158015610fa557600080fd5b505af1158015610fb9573d6000803e3d6000fd5b505050505050505050565b61ffff86166000908152600560205260408082209051610fe79088908890611e41565b90815260408051602092819003830190206001600160401b038716600090815292529020549050806110675760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201526261676560e81b6064820152608401610629565b808383604051611078929190611e41565b6040518091039020146110d75760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f616044820152601960fa1b6064820152608401610629565b61ffff871660009081526005602052604080822090516110fa9089908990611e41565b90815260408051602092819003830181206001600160401b038916600090815290845282902093909355601f88018290048202830182019052868252611192918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061094e92505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e587878787856040516111c99594939291906120a3565b60405180910390a150505050505050565b6111e261144b565b6000811161122a5760405162461bcd60e51b81526020600482015260156024820152744c7a4170703a20696e76616c6964206d696e47617360581b6044820152606401610629565b61ffff83811660008181526002602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac090606001610ec6565b61129461144b565b61ffff831660009081526001602052604090206112b28284836120de565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051610ec693929190611e7a565b6112ee61144b565b6001600160a01b03811661131857604051631e4fbdf760e01b815260006004820152602401610629565b6109b18161161d565b604051633d7b2f6f60e21b815261ffff808616600483015284166024820152306044820152606481018290526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f5ecbdbc90608401600060405180830381865afa1580156113a1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113c9919081019061219d565b95945050505050565b6000806114355a60966366ad5c8a60e01b898989896040516024016113fa949392919061220a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091523092919061177a565b9150915081610c7e57610c7e8686868685611804565b6000546001600160a01b03163314610c985760405163118cdaa760e01b8152336004820152602401610629565b61ffff86166000908152600160205260408120805461149690611e07565b80601f01602080910402602001604051908101604052809291908181526020018280546114c290611e07565b801561150f5780601f106114e45761010080835404028352916020019161150f565b820191906000526020600020905b8154815290600101906020018083116114f257829003601f168201915b5050505050905080516000036115805760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201526f61207472757374656420736f7572636560801b6064820152608401610629565b61158b8787516118a1565b60405162c5803160e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c58031009084906115e2908b9086908c908c908c908c90600401612248565b6000604051808303818588803b1580156115fb57600080fd5b505af115801561160f573d6000803e3d6000fd5b505050505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608161167b81601f6122af565b10156116ba5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610629565b6116c482846122af565b845110156117085760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610629565b6060821580156117275760405191506000825260208201604052611771565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611760578051835260209283019201611748565b5050858452601f01601f1916604052505b50949350505050565b6000606060008060008661ffff166001600160401b0381111561179f5761179f611a65565b6040519080825280601f01601f1916602001820160405280156117c9576020820181803683370190505b50905060008087516020890160008d8df191503d9250868311156117eb578692505b828152826000602083013e909890975095505050505050565b8180519060200120600560008761ffff1661ffff1681526020019081526020016000208560405161183591906122c2565b9081526040805191829003602090810183206001600160401b0388166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c9061189290879087908790879087906122de565b60405180910390a15050505050565b61ffff8216600090815260036020526040812054908190036118c257506127105b808211156119125760405162461bcd60e51b815260206004820181905260248201527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c617267656044820152606401610629565b505050565b803561ffff8116811461192957600080fd5b919050565b60008083601f84011261194057600080fd5b5081356001600160401b0381111561195757600080fd5b60208301915083602082850101111561196f57600080fd5b9250929050565b80356001600160401b038116811461192957600080fd5b600080600080600080608087890312156119a657600080fd5b6119af87611917565b955060208701356001600160401b03808211156119cb57600080fd5b6119d78a838b0161192e565b90975095508591506119eb60408a01611976565b94506060890135915080821115611a0157600080fd5b50611a0e89828a0161192e565b979a9699509497509295939492505050565b600060208284031215611a3257600080fd5b610e4382611917565b60008060408385031215611a4e57600080fd5b611a5783611917565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611aa357611aa3611a65565b604052919050565b60006001600160401b03821115611ac457611ac4611a65565b50601f01601f191660200190565b600082601f830112611ae357600080fd5b8135611af6611af182611aab565b611a7b565b818152846020838601011115611b0b57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215611b3d57600080fd5b611b4684611917565b925060208401356001600160401b0380821115611b6257600080fd5b611b6e87838801611ad2565b93506040860135915080821115611b8457600080fd5b50611b9186828701611ad2565b9150509250925092565b600080600060408486031215611bb057600080fd5b611bb984611917565b925060208401356001600160401b03811115611bd457600080fd5b611be08682870161192e565b9497909650939450505050565b600080600060608486031215611c0257600080fd5b611c0b84611917565b925060208401356001600160401b03811115611c2657600080fd5b611c3286828701611ad2565b925050611c4160408501611976565b90509250925092565b60005b83811015611c65578181015183820152602001611c4d565b50506000910152565b60008151808452611c86816020860160208601611c4a565b601f01601f19169290920160200192915050565b602081526000610e436020830184611c6e565b60008060408385031215611cc057600080fd5b611cc983611917565b9150611cd760208401611917565b90509250929050565b80356001600160a01b038116811461192957600080fd5b600060208284031215611d0957600080fd5b610e4382611ce0565b600080600080600060808688031215611d2a57600080fd5b611d3386611917565b9450611d4160208701611917565b93506040860135925060608601356001600160401b03811115611d6357600080fd5b611d6f8882890161192e565b969995985093965092949392505050565b600080600060608486031215611d9557600080fd5b611d9e84611917565b9250611dac60208501611917565b9150604084013590509250925092565b60008060008060808587031215611dd257600080fd5b611ddb85611917565b9350611de960208601611917565b9250611df760408601611ce0565b9396929550929360600135925050565b600181811c90821680611e1b57607f821691505b602082108103611e3b57634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61ffff841681526040602082015260006113c9604083018486611e51565b61ffff861681526001600160a01b038516602082015260a060408201819052600090611ec690830186611c6e565b84151560608401528281036080840152611ee08185611c6e565b98975050505050505050565b60008060408385031215611eff57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b81810381811115611f3957611f39611f10565b92915050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b601f82111561191257600081815260208120601f850160051c81016020861015611f8c5750805b601f850160051c820191505b81811015610c7e57828155600101611f98565b81516001600160401b03811115611fc457611fc4611a65565b611fd881611fd28454611e07565b84611f65565b602080601f83116001811461200d5760008415611ff55750858301515b600019600386901b1c1916600185901b178555610c7e565b600085815260208120601f198616915b8281101561203c5788860151825594840194600190910190840161201d565b508582101561205a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600061ffff808816835280871660208401525084604083015260806060830152612098608083018486611e51565b979650505050505050565b61ffff861681526080602082015260006120c1608083018688611e51565b6001600160401b0394909416604083015250606001529392505050565b6001600160401b038311156120f5576120f5611a65565b612109836121038354611e07565b83611f65565b6000601f84116001811461213d57600085156121255750838201355b600019600387901b1c1916600186901b178355610868565b600083815260209020601f19861690835b8281101561216e578685013582556020948501946001909201910161214e565b508682101561218b5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156121af57600080fd5b81516001600160401b038111156121c557600080fd5b8201601f810184136121d657600080fd5b80516121e4611af182611aab565b8181528560208385010111156121f957600080fd5b6113c9826020830160208601611c4a565b61ffff851681526080602082015260006122276080830186611c6e565b6001600160401b038516604084015282810360608401526120988185611c6e565b61ffff8716815260c06020820152600061226560c0830188611c6e565b82810360408401526122778188611c6e565b6001600160a01b0387811660608601528616608085015283810360a085015290506122a28185611c6e565b9998505050505050505050565b80820180821115611f3957611f39611f10565b600082516122d4818460208701611c4a565b9190910192915050565b61ffff8616815260a0602082015260006122fb60a0830187611c6e565b6001600160401b0386166040840152828103606084015261231c8186611c6e565b90508281036080840152611ee08185611c6e56fea2646970667358221220f4348b1012630acc108685b53e20637e8b5135910758287c3fe8368d11955a4864736f6c634300081300330000000000000000000000007004396c99d5690da76a7c59057c5f3a53e01704
Deployed Bytecode
0x6080604052600436106101b65760003560e01c80638cfd8f5c116100ec578063c44618341161008a578063df2a5b3b11610064578063df2a5b3b14610535578063eb8d72b714610555578063f2fde38b14610575578063f5ecbdbc1461059557600080fd5b8063c4461834146104ec578063cbed8b9c14610502578063d1deba1f1461052257600080fd5b80639f38369a116100c65780639f38369a14610458578063a6c3d16514610478578063b353aaa714610498578063baf3292d146104cc57600080fd5b80638cfd8f5c146103ce5780638da5cb5b14610406578063950c8a741461043857600080fd5b80633f1f4fa4116101595780635b8c41e6116101335780635b8c41e61461031d57806366ad5c8a1461036c578063715018a61461038c5780637533d788146103a157600080fd5b80633f1f4fa41461028d57806342d65a8d146102c85780635a749876146102e857600080fd5b806310ddb1371161019557806310ddb1371461021d578063126928c41461023d5780633ccfd60b146102505780633d8b38f61461025857600080fd5b80621d3567146101bb57806307e0db17146101dd5780630df37483146101fd575b600080fd5b3480156101c757600080fd5b506101db6101d636600461198d565b6105b5565b005b3480156101e957600080fd5b506101db6101f8366004611a20565b6107e6565b34801561020957600080fd5b506101db610218366004611a3b565b61086f565b34801561022957600080fd5b506101db610238366004611a20565b61088e565b6101db61024b366004611b28565b6108e6565b6101db610954565b34801561026457600080fd5b50610278610273366004611b9b565b6109b4565b60405190151581526020015b60405180910390f35b34801561029957600080fd5b506102ba6102a8366004611a20565b60036020526000908152604090205481565b604051908152602001610284565b3480156102d457600080fd5b506101db6102e3366004611b9b565b610a80565b3480156102f457600080fd5b50610308610303366004611b28565b610b06565b60408051928352602083019190915201610284565b34801561032957600080fd5b506102ba610338366004611bed565b6005602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561037857600080fd5b506101db61038736600461198d565b610baa565b34801561039857600080fd5b506101db610c86565b3480156103ad57600080fd5b506103c16103bc366004611a20565b610c9a565b6040516102849190611c9a565b3480156103da57600080fd5b506102ba6103e9366004611cad565b600260209081526000928352604080842090915290825290205481565b34801561041257600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610284565b34801561044457600080fd5b50600454610420906001600160a01b031681565b34801561046457600080fd5b506103c1610473366004611a20565b610d34565b34801561048457600080fd5b506101db610493366004611b9b565b610e4a565b3480156104a457600080fd5b506104207f0000000000000000000000007004396c99d5690da76a7c59057c5f3a53e0170481565b3480156104d857600080fd5b506101db6104e7366004611cf7565b610ed3565b3480156104f857600080fd5b506102ba61271081565b34801561050e57600080fd5b506101db61051d366004611d12565b610f2f565b6101db61053036600461198d565b610fc4565b34801561054157600080fd5b506101db610550366004611d80565b6111da565b34801561056157600080fd5b506101db610570366004611b9b565b61128c565b34801561058157600080fd5b506101db610590366004611cf7565b6112e6565b3480156105a157600080fd5b506103c16105b0366004611dbc565b611321565b337f0000000000000000000000007004396c99d5690da76a7c59057c5f3a53e017046001600160a01b0316146106325760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff86166000908152600160205260408120805461065090611e07565b80601f016020809104026020016040519081016040528092919081815260200182805461067c90611e07565b80156106c95780601f1061069e576101008083540402835291602001916106c9565b820191906000526020600020905b8154815290600101906020018083116106ac57829003601f168201915b505050505090508051868690501480156106e4575060008151115b801561070c5750805160208201206040516107029088908890611e41565b6040518091039020145b6107675760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f6044820152651b9d1c9858dd60d21b6064820152608401610629565b6107dd8787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a9350915088908890819084018382808284376000920191909152506113d292505050565b50505050505050565b6107ee61144b565b6040516307e0db1760e01b815261ffff821660048201527f0000000000000000000000007004396c99d5690da76a7c59057c5f3a53e017046001600160a01b0316906307e0db17906024015b600060405180830381600087803b15801561085457600080fd5b505af1158015610868573d6000803e3d6000fd5b5050505050565b61087761144b565b61ffff909116600090815260036020526040902055565b61089661144b565b6040516310ddb13760e01b815261ffff821660048201527f0000000000000000000000007004396c99d5690da76a7c59057c5f3a53e017046001600160a01b0316906310ddb1379060240161083a565b60006108f3848484610b06565b5090508034101561093f5760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da0819d85cc81d1bc81cd95b9960521b6044820152606401610629565b61094e84846000808686611478565b50505050565b61095c61144b565b604051600090339047908381818185875af1925050503d806000811461099e576040519150601f19603f3d011682016040523d82523d6000602084013e6109a3565b606091505b50509050806109b157600080fd5b50565b61ffff8316600090815260016020526040812080548291906109d590611e07565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0190611e07565b8015610a4e5780601f10610a2357610100808354040283529160200191610a4e565b820191906000526020600020905b815481529060010190602001808311610a3157829003601f168201915b505050505090508383604051610a65929190611e41565b60405180910390208180519060200120149150509392505050565b610a8861144b565b6040516342d65a8d60e01b81526001600160a01b037f0000000000000000000000007004396c99d5690da76a7c59057c5f3a53e0170416906342d65a8d90610ad890869086908690600401611e7a565b600060405180830381600087803b158015610af257600080fd5b505af11580156107dd573d6000803e3d6000fd5b6000807f0000000000000000000000007004396c99d5690da76a7c59057c5f3a53e017046001600160a01b03166340a7bb108630876000886040518663ffffffff1660e01b8152600401610b5e959493929190611e98565b6040805180830381865afa158015610b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9e9190611eec565b91509150935093915050565b333014610c085760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d7573742062656044820152650204c7a4170760d41b6064820152608401610629565b610c7e8686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061094e92505050565b505050505050565b610c8e61144b565b610c98600061161d565b565b60016020526000908152604090208054610cb390611e07565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdf90611e07565b8015610d2c5780601f10610d0157610100808354040283529160200191610d2c565b820191906000526020600020905b815481529060010190602001808311610d0f57829003601f168201915b505050505081565b61ffff8116600090815260016020526040812080546060929190610d5790611e07565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8390611e07565b8015610dd05780601f10610da557610100808354040283529160200191610dd0565b820191906000526020600020905b815481529060010190602001808311610db357829003601f168201915b505050505090508051600003610e285760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f72640000006044820152606401610629565b610e43600060148351610e3b9190611f26565b83919061166d565b9392505050565b610e5261144b565b818130604051602001610e6793929190611f3f565b60408051601f1981840301815291815261ffff8516600090815260016020522090610e929082611fab565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce838383604051610ec693929190611e7a565b60405180910390a1505050565b610edb61144b565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b9060200160405180910390a150565b610f3761144b565b6040516332fb62e760e21b81526001600160a01b037f0000000000000000000000007004396c99d5690da76a7c59057c5f3a53e01704169063cbed8b9c90610f8b908890889088908890889060040161206a565b600060405180830381600087803b158015610fa557600080fd5b505af1158015610fb9573d6000803e3d6000fd5b505050505050505050565b61ffff86166000908152600560205260408082209051610fe79088908890611e41565b90815260408051602092819003830190206001600160401b038716600090815292529020549050806110675760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201526261676560e81b6064820152608401610629565b808383604051611078929190611e41565b6040518091039020146110d75760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f616044820152601960fa1b6064820152608401610629565b61ffff871660009081526005602052604080822090516110fa9089908990611e41565b90815260408051602092819003830181206001600160401b038916600090815290845282902093909355601f88018290048202830182019052868252611192918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061094e92505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e587878787856040516111c99594939291906120a3565b60405180910390a150505050505050565b6111e261144b565b6000811161122a5760405162461bcd60e51b81526020600482015260156024820152744c7a4170703a20696e76616c6964206d696e47617360581b6044820152606401610629565b61ffff83811660008181526002602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac090606001610ec6565b61129461144b565b61ffff831660009081526001602052604090206112b28284836120de565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051610ec693929190611e7a565b6112ee61144b565b6001600160a01b03811661131857604051631e4fbdf760e01b815260006004820152602401610629565b6109b18161161d565b604051633d7b2f6f60e21b815261ffff808616600483015284166024820152306044820152606481018290526060907f0000000000000000000000007004396c99d5690da76a7c59057c5f3a53e017046001600160a01b03169063f5ecbdbc90608401600060405180830381865afa1580156113a1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113c9919081019061219d565b95945050505050565b6000806114355a60966366ad5c8a60e01b898989896040516024016113fa949392919061220a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091523092919061177a565b9150915081610c7e57610c7e8686868685611804565b6000546001600160a01b03163314610c985760405163118cdaa760e01b8152336004820152602401610629565b61ffff86166000908152600160205260408120805461149690611e07565b80601f01602080910402602001604051908101604052809291908181526020018280546114c290611e07565b801561150f5780601f106114e45761010080835404028352916020019161150f565b820191906000526020600020905b8154815290600101906020018083116114f257829003601f168201915b5050505050905080516000036115805760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201526f61207472757374656420736f7572636560801b6064820152608401610629565b61158b8787516118a1565b60405162c5803160e81b81526001600160a01b037f0000000000000000000000007004396c99d5690da76a7c59057c5f3a53e01704169063c58031009084906115e2908b9086908c908c908c908c90600401612248565b6000604051808303818588803b1580156115fb57600080fd5b505af115801561160f573d6000803e3d6000fd5b505050505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608161167b81601f6122af565b10156116ba5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610629565b6116c482846122af565b845110156117085760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610629565b6060821580156117275760405191506000825260208201604052611771565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611760578051835260209283019201611748565b5050858452601f01601f1916604052505b50949350505050565b6000606060008060008661ffff166001600160401b0381111561179f5761179f611a65565b6040519080825280601f01601f1916602001820160405280156117c9576020820181803683370190505b50905060008087516020890160008d8df191503d9250868311156117eb578692505b828152826000602083013e909890975095505050505050565b8180519060200120600560008761ffff1661ffff1681526020019081526020016000208560405161183591906122c2565b9081526040805191829003602090810183206001600160401b0388166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c9061189290879087908790879087906122de565b60405180910390a15050505050565b61ffff8216600090815260036020526040812054908190036118c257506127105b808211156119125760405162461bcd60e51b815260206004820181905260248201527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c617267656044820152606401610629565b505050565b803561ffff8116811461192957600080fd5b919050565b60008083601f84011261194057600080fd5b5081356001600160401b0381111561195757600080fd5b60208301915083602082850101111561196f57600080fd5b9250929050565b80356001600160401b038116811461192957600080fd5b600080600080600080608087890312156119a657600080fd5b6119af87611917565b955060208701356001600160401b03808211156119cb57600080fd5b6119d78a838b0161192e565b90975095508591506119eb60408a01611976565b94506060890135915080821115611a0157600080fd5b50611a0e89828a0161192e565b979a9699509497509295939492505050565b600060208284031215611a3257600080fd5b610e4382611917565b60008060408385031215611a4e57600080fd5b611a5783611917565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611aa357611aa3611a65565b604052919050565b60006001600160401b03821115611ac457611ac4611a65565b50601f01601f191660200190565b600082601f830112611ae357600080fd5b8135611af6611af182611aab565b611a7b565b818152846020838601011115611b0b57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215611b3d57600080fd5b611b4684611917565b925060208401356001600160401b0380821115611b6257600080fd5b611b6e87838801611ad2565b93506040860135915080821115611b8457600080fd5b50611b9186828701611ad2565b9150509250925092565b600080600060408486031215611bb057600080fd5b611bb984611917565b925060208401356001600160401b03811115611bd457600080fd5b611be08682870161192e565b9497909650939450505050565b600080600060608486031215611c0257600080fd5b611c0b84611917565b925060208401356001600160401b03811115611c2657600080fd5b611c3286828701611ad2565b925050611c4160408501611976565b90509250925092565b60005b83811015611c65578181015183820152602001611c4d565b50506000910152565b60008151808452611c86816020860160208601611c4a565b601f01601f19169290920160200192915050565b602081526000610e436020830184611c6e565b60008060408385031215611cc057600080fd5b611cc983611917565b9150611cd760208401611917565b90509250929050565b80356001600160a01b038116811461192957600080fd5b600060208284031215611d0957600080fd5b610e4382611ce0565b600080600080600060808688031215611d2a57600080fd5b611d3386611917565b9450611d4160208701611917565b93506040860135925060608601356001600160401b03811115611d6357600080fd5b611d6f8882890161192e565b969995985093965092949392505050565b600080600060608486031215611d9557600080fd5b611d9e84611917565b9250611dac60208501611917565b9150604084013590509250925092565b60008060008060808587031215611dd257600080fd5b611ddb85611917565b9350611de960208601611917565b9250611df760408601611ce0565b9396929550929360600135925050565b600181811c90821680611e1b57607f821691505b602082108103611e3b57634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61ffff841681526040602082015260006113c9604083018486611e51565b61ffff861681526001600160a01b038516602082015260a060408201819052600090611ec690830186611c6e565b84151560608401528281036080840152611ee08185611c6e565b98975050505050505050565b60008060408385031215611eff57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b81810381811115611f3957611f39611f10565b92915050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b601f82111561191257600081815260208120601f850160051c81016020861015611f8c5750805b601f850160051c820191505b81811015610c7e57828155600101611f98565b81516001600160401b03811115611fc457611fc4611a65565b611fd881611fd28454611e07565b84611f65565b602080601f83116001811461200d5760008415611ff55750858301515b600019600386901b1c1916600185901b178555610c7e565b600085815260208120601f198616915b8281101561203c5788860151825594840194600190910190840161201d565b508582101561205a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600061ffff808816835280871660208401525084604083015260806060830152612098608083018486611e51565b979650505050505050565b61ffff861681526080602082015260006120c1608083018688611e51565b6001600160401b0394909416604083015250606001529392505050565b6001600160401b038311156120f5576120f5611a65565b612109836121038354611e07565b83611f65565b6000601f84116001811461213d57600085156121255750838201355b600019600387901b1c1916600186901b178355610868565b600083815260209020601f19861690835b8281101561216e578685013582556020948501946001909201910161214e565b508682101561218b5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156121af57600080fd5b81516001600160401b038111156121c557600080fd5b8201601f810184136121d657600080fd5b80516121e4611af182611aab565b8181528560208385010111156121f957600080fd5b6113c9826020830160208601611c4a565b61ffff851681526080602082015260006122276080830186611c6e565b6001600160401b038516604084015282810360608401526120988185611c6e565b61ffff8716815260c06020820152600061226560c0830188611c6e565b82810360408401526122778188611c6e565b6001600160a01b0387811660608601528616608085015283810360a085015290506122a28185611c6e565b9998505050505050505050565b80820180821115611f3957611f39611f10565b600082516122d4818460208701611c4a565b9190910192915050565b61ffff8616815260a0602082015260006122fb60a0830187611c6e565b6001600160401b0386166040840152828103606084015261231c8186611c6e565b90508281036080840152611ee08185611c6e56fea2646970667358221220f4348b1012630acc108685b53e20637e8b5135910758287c3fe8368d11955a4864736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007004396c99d5690da76a7c59057c5f3a53e01704
-----Decoded View---------------
Arg [0] : _lzEndpoint (address): 0x7004396C99D5690da76A7C59057C5f3A53e01704
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007004396c99d5690da76a7c59057c5f3a53e01704
Deployed Bytecode Sourcemap
93:1144:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1203:753:6;;;;;;;;;;-1:-1:-1;1203:753:6;;;;;:::i;:::-;;:::i;:::-;;4448:121;;;;;;;;;;-1:-1:-1;4448:121:6;;;;;:::i;:::-;;:::i;6331:140::-;;;;;;;;;;-1:-1:-1;6331:140:6;;;;;:::i;:::-;;:::i;4575:127::-;;;;;;;;;;-1:-1:-1;4575:127:6;;;;;:::i;:::-;;:::i;682:382:7:-;;;;;;:::i;:::-;;:::i;1070:165::-;;;:::i;6566:247:6:-;;;;;;;;;;-1:-1:-1;6566:247:6;;;;;:::i;:::-;;:::i;:::-;;;4356:14:10;;4349:22;4331:41;;4319:2;4304:18;6566:247:6;;;;;;;;737:53;;;;;;;;;;-1:-1:-1;737:53:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;;4529:25:10;;;4517:2;4502:18;737:53:6;4383:177:10;4708:176:6;;;;;;;;;;-1:-1:-1;4708:176:6;;;;;:::i;:::-;;:::i;244:261:7:-;;;;;;;;;;-1:-1:-1;244:261:7;;;;;:::i;:::-;;:::i;:::-;;;;4739:25:10;;;4795:2;4780:18;;4773:34;;;;4712:18;244:261:7;4565:248:10;611:85:8;;;;;;;;;;-1:-1:-1;611:85:8;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1814:342;;;;;;;;;;-1:-1:-1;1814:342:8;;;;;:::i;:::-;;:::i;2182:101:9:-;;;;;;;;;;;;;:::i;609:51:6:-;;;;;;;;;;-1:-1:-1;609:51:6;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;666:65::-;;;;;;;;;;-1:-1:-1;666:65:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1527:85:9;;;;;;;;;;-1:-1:-1;1573:7:9;1599:6;-1:-1:-1;;;;;1599:6:9;1527:85;;;-1:-1:-1;;;;;6646:32:10;;;6628:51;;6616:2;6601:18;1527:85:9;6482:203:10;796:23:6;;;;;;;;;;-1:-1:-1;796:23:6;;;;-1:-1:-1;;;;;796:23:6;;;5521:326;;;;;;;;;;-1:-1:-1;5521:326:6;;;;;:::i;:::-;;:::i;5237:278::-;;;;;;;;;;-1:-1:-1;5237:278:6;;;;;:::i;:::-;;:::i;557:46::-;;;;;;;;;;;;;;;5853:133;;;;;;;;;;-1:-1:-1;5853:133:6;;;;;:::i;:::-;;:::i;495:55::-;;;;;;;;;;;;545:5;495:55;;4240:202;;;;;;;;;;-1:-1:-1;4240:202:6;;;;;:::i;:::-;;:::i;2337:757:8:-;;;;;;:::i;:::-;;:::i;5992:280:6:-;;;;;;;;;;-1:-1:-1;5992:280:6;;;;;:::i;:::-;;:::i;5027:204::-;;;;;;;;;;-1:-1:-1;5027:204:6;;;;;:::i;:::-;;:::i;2432:215:9:-;;;;;;;;;;-1:-1:-1;2432:215:9;;;;;:::i;:::-;;:::i;3972:209:6:-;;;;;;;;;;-1:-1:-1;3972:209:6;;;;;:::i;:::-;;:::i;1203:753::-;720:10:1;1441::6;-1:-1:-1;;;;;1417:35:6;;1409:78;;;;-1:-1:-1;;;1409:78:6;;8855:2:10;1409:78:6;;;8837:21:10;8894:2;8874:18;;;8867:30;8933:32;8913:18;;;8906:60;8983:18;;1409:78:6;;;;;;;;;1527:32;;;1498:26;1527:32;;;:19;:32;;;;;1498:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1731:13;:20;1709:11;;:18;;:42;:70;;;;;1778:1;1755:13;:20;:24;1709:70;:124;;;;-1:-1:-1;1809:24:6;;;;;;1783:22;;;;1793:11;;;;1783:22;:::i;:::-;;;;;;;;:50;1709:124;1701:175;;;;-1:-1:-1;;;1701:175:6;;9875:2:10;1701:175:6;;;9857:21:10;9914:2;9894:18;;;9887:30;9953:34;9933:18;;;9926:62;-1:-1:-1;;;10004:18:10;;;9997:36;10050:19;;1701:175:6;9673:402:10;1701:175:6;1887:62;1906:11;1919;;1887:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1887:62:6;;;;;;;;;;;;;;;;;;;;;;1932:6;;-1:-1:-1;1887:62:6;-1:-1:-1;1940:8:6;;;;;;1887:62;;1940:8;;;;1887:62;;;;;;;;;-1:-1:-1;1887:18:6;;-1:-1:-1;;;1887:62:6:i;:::-;1334:622;1203:753;;;;;;:::o;4448:121::-;1420:13:9;:11;:13::i;:::-;4527:35:6::1;::::0;-1:-1:-1;;;4527:35:6;;10254:6:10;10242:19;;4527:35:6::1;::::0;::::1;10224:38:10::0;4527:10:6::1;-1:-1:-1::0;;;;;4527:25:6::1;::::0;::::1;::::0;10197:18:10;;4527:35:6::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4448:121:::0;:::o;6331:140::-;1420:13:9;:11;:13::i;:::-;6421:35:6::1;::::0;;::::1;;::::0;;;:22:::1;:35;::::0;;;;:43;6331:140::o;4575:127::-;1420:13:9;:11;:13::i;:::-;4657:38:6::1;::::0;-1:-1:-1;;;4657:38:6;;10254:6:10;10242:19;;4657:38:6::1;::::0;::::1;10224::10::0;4657:10:6::1;-1:-1:-1::0;;;;;4657:28:6::1;::::0;::::1;::::0;10197:18:10;;4657:38:6::1;10080:188:10::0;682:382:7;809:14;828:56;844:11;857:10;869:14;828:15;:56::i;:::-;808:76;;;915:9;902;:22;;894:57;;;;-1:-1:-1;;;894:57:7;;10475:2:10;894:57:7;;;10457:21:10;10514:2;10494:18;;;10487:30;-1:-1:-1;;;10533:18:10;;;10526:52;10595:18;;894:57:7;10273:346:10;894:57:7;970:87;978:11;991:10;1011:3;1025;1031:14;1047:9;970:7;:87::i;:::-;798:266;682:382;;;:::o;1070:165::-;1420:13:9;:11;:13::i;:::-;1144:58:7::1;::::0;1126:12:::1;::::0;1152:10:::1;::::0;1176:21:::1;::::0;1126:12;1144:58;1126:12;1144:58;1176:21;1152:10;1144:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1125:77;;;1220:7;1212:16;;;::::0;::::1;;1115:120;1070:165::o:0;6566:247:6:-;6707:32;;;6662:4;6707:32;;;:19;:32;;;;;6678:61;;6662:4;;6707:32;6678:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6794:11;;6784:22;;;;;;;:::i;:::-;;;;;;;;6766:13;6756:24;;;;;;:50;6749:57;;;6566:247;;;;;:::o;4708:176::-;1420:13:9;:11;:13::i;:::-;4822:55:6::1;::::0;-1:-1:-1;;;4822:55:6;;-1:-1:-1;;;;;4822:10:6::1;:29;::::0;::::1;::::0;:55:::1;::::0;4852:11;;4865;;;;4822:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;244:261:7::0;369:14;385:11;415:10;-1:-1:-1;;;;;415:23:7;;439:11;460:4;467:7;476:5;483:14;415:83;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;408:90;;;;244:261;;;;;;:::o;1814:342:8:-;720:10:1;2026:4:8;2002:29;1994:80;;;;-1:-1:-1;;;1994:80:8;;12533:2:10;1994:80:8;;;12515:21:10;12572:2;12552:18;;;12545:30;12611:34;12591:18;;;12584:62;-1:-1:-1;;;12662:18:10;;;12655:36;12708:19;;1994:80:8;12331:402:10;1994:80:8;2084:65;2106:11;2119;;2084:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2084:65:8;;;;;;;;;;;;;;;;;;;;;;2132:6;;-1:-1:-1;2084:65:8;-1:-1:-1;2140:8:8;;;;;;2084:65;;2140:8;;;;2084:65;;;;;;;;;-1:-1:-1;2084:21:8;;-1:-1:-1;;;2084:65:8:i;:::-;1814:342;;;;;;:::o;2182:101:9:-;1420:13;:11;:13::i;:::-;2246:30:::1;2273:1;2246:18;:30::i;:::-;2182:101::o:0;609:51:6:-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5521:326::-;5644:35;;;5624:17;5644:35;;;:19;:35;;;;;5624:55;;5600:12;;5624:17;5644:35;5624:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5697:4;:11;5712:1;5697:16;5689:58;;;;-1:-1:-1;;;5689:58:6;;12940:2:10;5689:58:6;;;12922:21:10;12979:2;12959:18;;;12952:30;13018:31;12998:18;;;12991:59;13067:18;;5689:58:6;12738:353:10;5689:58:6;5764:31;5775:1;5792:2;5778:4;:11;:16;;;;:::i;:::-;5764:4;;:31;:10;:31::i;:::-;5757:38;5521:326;-1:-1:-1;;;5521:326:6:o;5237:278::-;1420:13:9;:11;:13::i;:::-;5408:14:6::1;;5432:4;5391:47;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;5391:47:6;;::::1;::::0;;;;;;5353:35:::1;::::0;::::1;;::::0;;;:19:::1;5391:47;5353:35:::0;;;:85:::1;::::0;:35;:85:::1;:::i;:::-;;5453:55;5477:14;5493;;5453:55;;;;;;;;:::i;:::-;;;;;;;;5237:278:::0;;;:::o;5853:133::-;1420:13:9;:11;:13::i;:::-;5922:8:6::1;:20:::0;;-1:-1:-1;;;;;;5922:20:6::1;-1:-1:-1::0;;;;;5922:20:6;::::1;::::0;;::::1;::::0;;;5957:22:::1;::::0;6628:51:10;;;5957:22:6::1;::::0;6616:2:10;6601:18;5957:22:6::1;;;;;;;5853:133:::0;:::o;4240:202::-;1420:13:9;:11;:13::i;:::-;4373:62:6::1;::::0;-1:-1:-1;;;4373:62:6;;-1:-1:-1;;;;;4373:10:6::1;:20;::::0;::::1;::::0;:62:::1;::::0;4394:8;;4404;;4414:11;;4427:7;;;;4373:62:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4240:202:::0;;;;;:::o;2337:757:8:-;2546:27;;;2524:19;2546:27;;;:14;:27;;;;;;:40;;;;2574:11;;;;2546:40;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2546:48:8;;;;;;;;;;;;-1:-1:-1;2546:48:8;2604:73;;;;-1:-1:-1;;;2604:73:8;;16629:2:10;2604:73:8;;;16611:21:10;16668:2;16648:18;;;16641:30;16707:34;16687:18;;;16680:62;-1:-1:-1;;;16758:18:10;;;16751:33;16801:19;;2604:73:8;16427:399:10;2604:73:8;2718:11;2705:8;;2695:19;;;;;;;:::i;:::-;;;;;;;;:34;2687:80;;;;-1:-1:-1;;;2687:80:8;;17033:2:10;2687:80:8;;;17015:21:10;17072:2;17052:18;;;17045:30;17111:34;17091:18;;;17084:62;-1:-1:-1;;;17162:18:10;;;17155:31;17203:19;;2687:80:8;16831:397:10;2687:80:8;2813:27;;;2872:1;2813:27;;;:14;:27;;;;;;:40;;;;2841:11;;;;2813:40;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2813:48:8;;;;;;;;;;;;:61;;;;2941:65;;;;;;;;;;;;;;;;;;;2963:11;;2976;;2941:65;;;;;;2976:11;2941:65;;2976:11;2941:65;;;;;;;;;-1:-1:-1;;2941:65:8;;;;;;;;;;;;;;;;;;;;;;2989:6;;-1:-1:-1;2941:65:8;-1:-1:-1;2997:8:8;;;;;;2941:65;;2997:8;;;;2941:65;;;;;;;;;-1:-1:-1;2941:21:8;;-1:-1:-1;;;2941:65:8:i;:::-;3021:66;3041:11;3054;;3067:6;3075:11;3021:66;;;;;;;;;;:::i;:::-;;;;;;;;2470:624;2337:757;;;;;;:::o;5992:280:6:-;1420:13:9;:11;:13::i;:::-;6115:1:6::1;6105:7;:11;6097:45;;;::::0;-1:-1:-1;;;6097:45:6;;17933:2:10;6097:45:6::1;::::0;::::1;17915:21:10::0;17972:2;17952:18;;;17945:30;-1:-1:-1;;;17991:18:10;;;17984:51;18052:18;;6097:45:6::1;17731:345:10::0;6097:45:6::1;6152:28;::::0;;::::1;;::::0;;;:15:::1;:28;::::0;;;;;;;:41;;::::1;::::0;;;;;;;;;;:51;;;6218:47;;18304:34:10;;;18354:18;;18347:43;;;;18406:18;;;18399:34;;;6218:47:6::1;::::0;18267:2:10;18252:18;6218:47:6::1;18081:358:10::0;5027:204:6;1420:13:9;:11;:13::i;:::-;5127:35:6::1;::::0;::::1;;::::0;;;:19:::1;:35;::::0;;;;:43:::1;5165:5:::0;;5127:35;:43:::1;:::i;:::-;;5185:39;5202:14;5218:5;;5185:39;;;;;;;;:::i;2432:215:9:-:0;1420:13;:11;:13::i;:::-;-1:-1:-1;;;;;2516:22:9;::::1;2512:91;;2561:31;::::0;-1:-1:-1;;;2561:31:9;;2589:1:::1;2561:31;::::0;::::1;6628:51:10::0;6601:18;;2561:31:9::1;6482:203:10::0;2512:91:9::1;2612:28;2631:8;2612:18;:28::i;3972:209:6:-:0;4106:68;;-1:-1:-1;;;4106:68:6;;19888:6:10;19921:15;;;4106:68:6;;;19903:34:10;19973:15;;19953:18;;;19946:43;4155:4:6;20005:18:10;;;19998:60;20074:18;;;20067:34;;;4075:12:6;;4106:10;-1:-1:-1;;;;;4106:20:6;;;;19850:19:10;;4106:68:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4106:68:6;;;;;;;;;;;;:::i;:::-;4099:75;3972:209;-1:-1:-1;;;;;3972:209:6:o;974:508:8:-;1123:12;1137:19;1160:153;1194:9;1205:3;1233:34;;;1269:11;1282;1295:6;1303:8;1210:102;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1210:102:8;;;;;;;;;;;;;;-1:-1:-1;;;;;1210:102:8;-1:-1:-1;;;;;;1210:102:8;;;;;;;;;;1168:4;;1160:153;;:33;:153::i;:::-;1122:191;;;;1371:7;1366:110;;1394:71;1414:11;1427;1440:6;1448:8;1458:6;1394:19;:71::i;1685:162:9:-;1573:7;1599:6;-1:-1:-1;;;;;1599:6:9;720:10:1;1744:23:9;1740:101;;1790:40;;-1:-1:-1;;;1790:40:9;;720:10:1;1790:40:9;;;6628:51:10;6601:18;;1790:40:9;6482:203:10;2240:548:6;2462:32;;;2433:26;2462:32;;;:19;:32;;;;;2433:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2512:13;:20;2536:1;2512:25;2504:86;;;;-1:-1:-1;;;2504:86:6;;21526:2:10;2504:86:6;;;21508:21:10;21565:2;21545:18;;;21538:30;21604:34;21584:18;;;21577:62;-1:-1:-1;;;21655:18:10;;;21648:46;21711:19;;2504:86:6;21324:412:10;2504:86:6;2600:47;2618:11;2631:8;:15;2600:17;:47::i;:::-;2657:124;;-1:-1:-1;;;2657:124:6;;-1:-1:-1;;;;;2657:10:6;:15;;;;2680:10;;2657:124;;2692:11;;2705:13;;2720:8;;2730:14;;2746:18;;2766:14;;2657:124;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2423:365;2240:548;;;;;;:::o;2801:187:9:-;2874:16;2893:6;;-1:-1:-1;;;;;2909:17:9;;;-1:-1:-1;;;;;;2909:17:9;;;;;;2941:40;;2893:6;;;;;;;2941:40;;2874:16;2941:40;2864:124;2801:187;:::o;8865:2712:0:-;8999:12;9051:7;9035:12;9051:7;9045:2;9035:12;:::i;:::-;:23;;9027:50;;;;-1:-1:-1;;;9027:50:0;;22915:2:10;9027:50:0;;;22897:21:10;22954:2;22934:18;;;22927:30;-1:-1:-1;;;22973:18:10;;;22966:44;23027:18;;9027:50:0;22713:338:10;9027:50:0;9112:16;9121:7;9112:6;:16;:::i;:::-;9095:6;:13;:33;;9087:63;;;;-1:-1:-1;;;9087:63:0;;23258:2:10;9087:63:0;;;23240:21:10;23297:2;23277:18;;;23270:30;-1:-1:-1;;;23316:18:10;;;23309:47;23373:18;;9087:63:0;23056:341:10;9087:63:0;9161:22;9224:15;;9252:1895;;;;11288:4;11282:11;11269:24;;11466:1;11455:9;11448:20;11514:4;11503:9;11499:20;11493:4;11486:34;9217:2317;;9252:1895;9426:4;9420:11;9407:24;;10053:2;10044:7;10040:16;10419:9;10412:17;10406:4;10402:28;10390:9;10379;10375:25;10371:60;10467:7;10463:2;10459:16;10711:6;10697:9;10690:17;10684:4;10680:28;10668:9;10660:6;10656:22;10652:57;10648:70;10493:417;10744:3;10740:2;10737:11;10493:417;;;10882:9;;10871:21;;10785:4;10777:13;;;;10817;10493:417;;;-1:-1:-1;;10928:26:0;;;11128:2;11111:11;-1:-1:-1;;11107:25:0;11101:4;11094:39;-1:-1:-1;9217:2317:0;-1:-1:-1;11561:9:0;8865:2712;-1:-1:-1;;;;8865:2712:0:o;1118:1240:2:-;1275:4;1281:12;1341:15;1366:13;1389:24;1426:8;1416:19;;-1:-1:-1;;;;;1416:19:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1416:19:2;;1389:46;;1904:1;1879;1846:9;1840:16;1812:4;1801:9;1797:20;1767:1;1733:7;1708:4;1690:239;1678:251;;1992:16;1981:27;;2036:8;2027:7;2024:21;2021:76;;;2075:8;2064:19;;2021:76;2178:7;2165:11;2158:28;2294:7;2291:1;2284:4;2271:11;2267:22;2252:50;2329:8;;;;-1:-1:-1;1118:1240:2;-1:-1:-1;;;;;;1118:1240:2:o;1488:320:8:-;1711:8;1701:19;;;;;;1650:14;:27;1665:11;1650:27;;;;;;;;;;;;;;;1678:11;1650:40;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1650:48:8;;;;;;;;;:70;;;;1735:66;;;;1749:11;;1762;;1691:6;;1783:8;;1793:7;;1735:66;:::i;:::-;;;;;;;;1488:320;;;;;:::o;3487:383:6:-;3609:35;;;3585:21;3609:35;;;:22;:35;;;;;;;3658:21;;;3654:123;;-1:-1:-1;545:5:6;3654:123;3810:16;3794:12;:32;;3786:77;;;;-1:-1:-1;;;3786:77:6;;24617:2:10;3786:77:6;;;24599:21:10;;;24636:18;;;24629:30;24695:34;24675:18;;;24668:62;24747:18;;3786:77:6;24415:356:10;3786:77:6;3575:295;3487:383;;:::o;14:159:10:-;81:20;;141:6;130:18;;120:29;;110:57;;163:1;160;153:12;110:57;14:159;;;:::o;178:347::-;229:8;239:6;293:3;286:4;278:6;274:17;270:27;260:55;;311:1;308;301:12;260:55;-1:-1:-1;334:20:10;;-1:-1:-1;;;;;366:30:10;;363:50;;;409:1;406;399:12;363:50;446:4;438:6;434:17;422:29;;498:3;491:4;482:6;474;470:19;466:30;463:39;460:59;;;515:1;512;505:12;460:59;178:347;;;;;:::o;530:171::-;597:20;;-1:-1:-1;;;;;646:30:10;;636:41;;626:69;;691:1;688;681:12;706:862;812:6;820;828;836;844;852;905:3;893:9;884:7;880:23;876:33;873:53;;;922:1;919;912:12;873:53;945:28;963:9;945:28;:::i;:::-;935:38;;1024:2;1013:9;1009:18;996:32;-1:-1:-1;;;;;1088:2:10;1080:6;1077:14;1074:34;;;1104:1;1101;1094:12;1074:34;1143:58;1193:7;1184:6;1173:9;1169:22;1143:58;:::i;:::-;1220:8;;-1:-1:-1;1117:84:10;-1:-1:-1;1117:84:10;;-1:-1:-1;1274:37:10;1307:2;1292:18;;1274:37;:::i;:::-;1264:47;;1364:2;1353:9;1349:18;1336:32;1320:48;;1393:2;1383:8;1380:16;1377:36;;;1409:1;1406;1399:12;1377:36;;1448:60;1500:7;1489:8;1478:9;1474:24;1448:60;:::i;:::-;706:862;;;;-1:-1:-1;706:862:10;;-1:-1:-1;706:862:10;;1527:8;;706:862;-1:-1:-1;;;706:862:10:o;1573:184::-;1631:6;1684:2;1672:9;1663:7;1659:23;1655:32;1652:52;;;1700:1;1697;1690:12;1652:52;1723:28;1741:9;1723:28;:::i;1762:252::-;1829:6;1837;1890:2;1878:9;1869:7;1865:23;1861:32;1858:52;;;1906:1;1903;1896:12;1858:52;1929:28;1947:9;1929:28;:::i;:::-;1919:38;2004:2;1989:18;;;;1976:32;;-1:-1:-1;;;1762:252:10:o;2019:127::-;2080:10;2075:3;2071:20;2068:1;2061:31;2111:4;2108:1;2101:15;2135:4;2132:1;2125:15;2151:275;2222:2;2216:9;2287:2;2268:13;;-1:-1:-1;;2264:27:10;2252:40;;-1:-1:-1;;;;;2307:34:10;;2343:22;;;2304:62;2301:88;;;2369:18;;:::i;:::-;2405:2;2398:22;2151:275;;-1:-1:-1;2151:275:10:o;2431:186::-;2479:4;-1:-1:-1;;;;;2504:6:10;2501:30;2498:56;;;2534:18;;:::i;:::-;-1:-1:-1;2600:2:10;2579:15;-1:-1:-1;;2575:29:10;2606:4;2571:40;;2431:186::o;2622:462::-;2664:5;2717:3;2710:4;2702:6;2698:17;2694:27;2684:55;;2735:1;2732;2725:12;2684:55;2771:6;2758:20;2802:48;2818:31;2846:2;2818:31;:::i;:::-;2802:48;:::i;:::-;2875:2;2866:7;2859:19;2921:3;2914:4;2909:2;2901:6;2897:15;2893:26;2890:35;2887:55;;;2938:1;2935;2928:12;2887:55;3003:2;2996:4;2988:6;2984:17;2977:4;2968:7;2964:18;2951:55;3051:1;3026:16;;;3044:4;3022:27;3015:38;;;;3030:7;2622:462;-1:-1:-1;;;2622:462:10:o;3089:611::-;3183:6;3191;3199;3252:2;3240:9;3231:7;3227:23;3223:32;3220:52;;;3268:1;3265;3258:12;3220:52;3291:28;3309:9;3291:28;:::i;:::-;3281:38;;3370:2;3359:9;3355:18;3342:32;-1:-1:-1;;;;;3434:2:10;3426:6;3423:14;3420:34;;;3450:1;3447;3440:12;3420:34;3473:49;3514:7;3505:6;3494:9;3490:22;3473:49;:::i;:::-;3463:59;;3575:2;3564:9;3560:18;3547:32;3531:48;;3604:2;3594:8;3591:16;3588:36;;;3620:1;3617;3610:12;3588:36;;3643:51;3686:7;3675:8;3664:9;3660:24;3643:51;:::i;:::-;3633:61;;;3089:611;;;;;:::o;3705:481::-;3783:6;3791;3799;3852:2;3840:9;3831:7;3827:23;3823:32;3820:52;;;3868:1;3865;3858:12;3820:52;3891:28;3909:9;3891:28;:::i;:::-;3881:38;;3970:2;3959:9;3955:18;3942:32;-1:-1:-1;;;;;3989:6:10;3986:30;3983:50;;;4029:1;4026;4019:12;3983:50;4068:58;4118:7;4109:6;4098:9;4094:22;4068:58;:::i;:::-;3705:481;;4145:8;;-1:-1:-1;4042:84:10;;-1:-1:-1;;;;3705:481:10:o;4818:464::-;4902:6;4910;4918;4971:2;4959:9;4950:7;4946:23;4942:32;4939:52;;;4987:1;4984;4977:12;4939:52;5010:28;5028:9;5010:28;:::i;:::-;5000:38;;5089:2;5078:9;5074:18;5061:32;-1:-1:-1;;;;;5108:6:10;5105:30;5102:50;;;5148:1;5145;5138:12;5102:50;5171:49;5212:7;5203:6;5192:9;5188:22;5171:49;:::i;:::-;5161:59;;;5239:37;5272:2;5261:9;5257:18;5239:37;:::i;:::-;5229:47;;4818:464;;;;;:::o;5469:250::-;5554:1;5564:113;5578:6;5575:1;5572:13;5564:113;;;5654:11;;;5648:18;5635:11;;;5628:39;5600:2;5593:10;5564:113;;;-1:-1:-1;;5711:1:10;5693:16;;5686:27;5469:250::o;5724:270::-;5765:3;5803:5;5797:12;5830:6;5825:3;5818:19;5846:76;5915:6;5908:4;5903:3;5899:14;5892:4;5885:5;5881:16;5846:76;:::i;:::-;5976:2;5955:15;-1:-1:-1;;5951:29:10;5942:39;;;;5983:4;5938:50;;5724:270;-1:-1:-1;;5724:270:10:o;5999:217::-;6146:2;6135:9;6128:21;6109:4;6166:44;6206:2;6195:9;6191:18;6183:6;6166:44;:::i;6221:256::-;6287:6;6295;6348:2;6336:9;6327:7;6323:23;6319:32;6316:52;;;6364:1;6361;6354:12;6316:52;6387:28;6405:9;6387:28;:::i;:::-;6377:38;;6434:37;6467:2;6456:9;6452:18;6434:37;:::i;:::-;6424:47;;6221:256;;;;;:::o;6924:173::-;6992:20;;-1:-1:-1;;;;;7041:31:10;;7031:42;;7021:70;;7087:1;7084;7077:12;7102:186;7161:6;7214:2;7202:9;7193:7;7189:23;7185:32;7182:52;;;7230:1;7227;7220:12;7182:52;7253:29;7272:9;7253:29;:::i;7293:622::-;7388:6;7396;7404;7412;7420;7473:3;7461:9;7452:7;7448:23;7444:33;7441:53;;;7490:1;7487;7480:12;7441:53;7513:28;7531:9;7513:28;:::i;:::-;7503:38;;7560:37;7593:2;7582:9;7578:18;7560:37;:::i;:::-;7550:47;;7644:2;7633:9;7629:18;7616:32;7606:42;;7699:2;7688:9;7684:18;7671:32;-1:-1:-1;;;;;7718:6:10;7715:30;7712:50;;;7758:1;7755;7748:12;7712:50;7797:58;7847:7;7838:6;7827:9;7823:22;7797:58;:::i;:::-;7293:622;;;;-1:-1:-1;7293:622:10;;-1:-1:-1;7874:8:10;;7771:84;7293:622;-1:-1:-1;;;7293:622:10:o;7920:324::-;7995:6;8003;8011;8064:2;8052:9;8043:7;8039:23;8035:32;8032:52;;;8080:1;8077;8070:12;8032:52;8103:28;8121:9;8103:28;:::i;:::-;8093:38;;8150:37;8183:2;8172:9;8168:18;8150:37;:::i;:::-;8140:47;;8234:2;8223:9;8219:18;8206:32;8196:42;;7920:324;;;;;:::o;8249:399::-;8333:6;8341;8349;8357;8410:3;8398:9;8389:7;8385:23;8381:33;8378:53;;;8427:1;8424;8417:12;8378:53;8450:28;8468:9;8450:28;:::i;:::-;8440:38;;8497:37;8530:2;8519:9;8515:18;8497:37;:::i;:::-;8487:47;;8553:38;8587:2;8576:9;8572:18;8553:38;:::i;:::-;8249:399;;;;-1:-1:-1;8543:48:10;;8638:2;8623:18;8610:32;;-1:-1:-1;;8249:399:10:o;9012:380::-;9091:1;9087:12;;;;9134;;;9155:61;;9209:4;9201:6;9197:17;9187:27;;9155:61;9262:2;9254:6;9251:14;9231:18;9228:38;9225:161;;9308:10;9303:3;9299:20;9296:1;9289:31;9343:4;9340:1;9333:15;9371:4;9368:1;9361:15;9225:161;;9012:380;;;:::o;9397:271::-;9580:6;9572;9567:3;9554:33;9536:3;9606:16;;9631:13;;;9606:16;9397:271;-1:-1:-1;9397:271:10:o;10834:266::-;10922:6;10917:3;10910:19;10974:6;10967:5;10960:4;10955:3;10951:14;10938:43;-1:-1:-1;11026:1:10;11001:16;;;11019:4;10997:27;;;10990:38;;;;11082:2;11061:15;;;-1:-1:-1;;11057:29:10;11048:39;;;11044:50;;10834:266::o;11105:326::-;11300:6;11292;11288:19;11277:9;11270:38;11344:2;11339;11328:9;11324:18;11317:30;11251:4;11364:61;11421:2;11410:9;11406:18;11398:6;11390;11364:61;:::i;11436:640::-;11717:6;11705:19;;11687:38;;-1:-1:-1;;;;;11761:32:10;;11756:2;11741:18;;11734:60;11781:3;11825:2;11810:18;;11803:31;;;-1:-1:-1;;11857:45:10;;11882:19;;11874:6;11857:45;:::i;:::-;11952:6;11945:14;11938:22;11933:2;11922:9;11918:18;11911:50;12010:9;12002:6;11998:22;11992:3;11981:9;11977:19;11970:51;12038:32;12063:6;12055;12038:32;:::i;:::-;12030:40;11436:640;-1:-1:-1;;;;;;;;11436:640:10:o;12081:245::-;12160:6;12168;12221:2;12209:9;12200:7;12196:23;12192:32;12189:52;;;12237:1;12234;12227:12;12189:52;-1:-1:-1;;12260:16:10;;12316:2;12301:18;;;12295:25;12260:16;;12295:25;;-1:-1:-1;12081:245:10:o;13096:127::-;13157:10;13152:3;13148:20;13145:1;13138:31;13188:4;13185:1;13178:15;13212:4;13209:1;13202:15;13228:128;13295:9;;;13316:11;;;13313:37;;;13330:18;;:::i;:::-;13228:128;;;;:::o;13361:360::-;13572:6;13564;13559:3;13546:33;13642:2;13638:15;;;;-1:-1:-1;;13634:53:10;13598:16;;13623:65;;;13712:2;13704:11;;13361:360;-1:-1:-1;13361:360:10:o;13851:544::-;13952:2;13947:3;13944:11;13941:448;;;13988:1;14013:5;14009:2;14002:17;14058:4;14054:2;14044:19;14128:2;14116:10;14112:19;14109:1;14105:27;14099:4;14095:38;14164:4;14152:10;14149:20;14146:47;;;-1:-1:-1;14187:4:10;14146:47;14242:2;14237:3;14233:12;14230:1;14226:20;14220:4;14216:31;14206:41;;14297:82;14315:2;14308:5;14305:13;14297:82;;;14360:17;;;14341:1;14330:13;14297:82;;14571:1348;14695:3;14689:10;-1:-1:-1;;;;;14714:6:10;14711:30;14708:56;;;14744:18;;:::i;:::-;14773:96;14862:6;14822:38;14854:4;14848:11;14822:38;:::i;:::-;14816:4;14773:96;:::i;:::-;14924:4;;14988:2;14977:14;;15005:1;15000:662;;;;15706:1;15723:6;15720:89;;;-1:-1:-1;15775:19:10;;;15769:26;15720:89;-1:-1:-1;;14528:1:10;14524:11;;;14520:24;14516:29;14506:40;14552:1;14548:11;;;14503:57;15822:81;;14970:943;;15000:662;13798:1;13791:14;;;13835:4;13822:18;;-1:-1:-1;;15036:20:10;;;15153:236;15167:7;15164:1;15161:14;15153:236;;;15256:19;;;15250:26;15235:42;;15348:27;;;;15316:1;15304:14;;;;15183:19;;15153:236;;;15157:3;15417:6;15408:7;15405:19;15402:201;;;15478:19;;;15472:26;-1:-1:-1;;15561:1:10;15557:14;;;15573:3;15553:24;15549:37;15545:42;15530:58;15515:74;;15402:201;-1:-1:-1;;;;;15649:1:10;15633:14;;;15629:22;15616:36;;-1:-1:-1;14571:1348:10:o;15924:498::-;16124:4;16153:6;16198:2;16190:6;16186:15;16175:9;16168:34;16250:2;16242:6;16238:15;16233:2;16222:9;16218:18;16211:43;;16290:6;16285:2;16274:9;16270:18;16263:34;16333:3;16328:2;16317:9;16313:18;16306:31;16354:62;16411:3;16400:9;16396:19;16388:6;16380;16354:62;:::i;:::-;16346:70;15924:498;-1:-1:-1;;;;;;;15924:498:10:o;17233:493::-;17482:6;17474;17470:19;17459:9;17452:38;17526:3;17521:2;17510:9;17506:18;17499:31;17433:4;17547:62;17604:3;17593:9;17589:19;17581:6;17573;17547:62;:::i;:::-;-1:-1:-1;;;;;17645:31:10;;;;17640:2;17625:18;;17618:59;-1:-1:-1;17708:2:10;17693:18;17686:34;17539:70;17233:493;-1:-1:-1;;;17233:493:10:o;18444:1202::-;-1:-1:-1;;;;;18561:3:10;18558:27;18555:53;;;18588:18;;:::i;:::-;18617:93;18706:3;18666:38;18698:4;18692:11;18666:38;:::i;:::-;18660:4;18617:93;:::i;:::-;18736:1;18761:2;18756:3;18753:11;18778:1;18773:615;;;;19432:1;19449:3;19446:93;;;-1:-1:-1;19505:19:10;;;19492:33;19446:93;-1:-1:-1;;14528:1:10;14524:11;;;14520:24;14516:29;14506:40;14552:1;14548:11;;;14503:57;19552:78;;18746:894;;18773:615;13798:1;13791:14;;;13835:4;13822:18;;-1:-1:-1;;18809:17:10;;;18909:9;18931:229;18945:7;18942:1;18939:14;18931:229;;;19034:19;;;19021:33;19006:49;;19141:4;19126:20;;;;19094:1;19082:14;;;;18961:12;18931:229;;;18935:3;19188;19179:7;19176:16;19173:159;;;19312:1;19308:6;19302:3;19296;19293:1;19289:11;19285:21;19281:34;19277:39;19264:9;19259:3;19255:19;19242:33;19238:79;19230:6;19223:95;19173:159;;;19375:1;19369:3;19366:1;19362:11;19358:19;19352:4;19345:33;18746:894;;18444:1202;;;:::o;20112:647::-;20191:6;20244:2;20232:9;20223:7;20219:23;20215:32;20212:52;;;20260:1;20257;20250:12;20212:52;20293:9;20287:16;-1:-1:-1;;;;;20318:6:10;20315:30;20312:50;;;20358:1;20355;20348:12;20312:50;20381:22;;20434:4;20426:13;;20422:27;-1:-1:-1;20412:55:10;;20463:1;20460;20453:12;20412:55;20492:2;20486:9;20517:48;20533:31;20561:2;20533:31;:::i;20517:48::-;20588:2;20581:5;20574:17;20628:7;20623:2;20618;20614;20610:11;20606:20;20603:33;20600:53;;;20649:1;20646;20639:12;20600:53;20662:67;20726:2;20721;20714:5;20710:14;20705:2;20701;20697:11;20662:67;:::i;20764:555::-;21021:6;21013;21009:19;20998:9;20991:38;21065:3;21060:2;21049:9;21045:18;21038:31;20972:4;21092:45;21132:3;21121:9;21117:19;21109:6;21092:45;:::i;:::-;-1:-1:-1;;;;;21177:6:10;21173:31;21168:2;21157:9;21153:18;21146:59;21253:9;21245:6;21241:22;21236:2;21225:9;21221:18;21214:50;21281:32;21306:6;21298;21281:32;:::i;21741:837::-;22090:6;22082;22078:19;22067:9;22060:38;22134:3;22129:2;22118:9;22114:18;22107:31;22041:4;22161:45;22201:3;22190:9;22186:19;22178:6;22161:45;:::i;:::-;22254:9;22246:6;22242:22;22237:2;22226:9;22222:18;22215:50;22288:32;22313:6;22305;22288:32;:::i;:::-;-1:-1:-1;;;;;22394:15:10;;;22389:2;22374:18;;22367:43;22447:15;;22441:3;22426:19;;22419:44;22500:22;;;22347:3;22479:19;;22472:51;22274:46;-1:-1:-1;22540:32:10;22274:46;22557:6;22540:32;:::i;:::-;22532:40;21741:837;-1:-1:-1;;;;;;;;;21741:837:10:o;22583:125::-;22648:9;;;22669:10;;;22666:36;;;22682:18;;:::i;23402:287::-;23531:3;23569:6;23563:13;23585:66;23644:6;23639:3;23632:4;23624:6;23620:17;23585:66;:::i;:::-;23667:16;;;;;23402:287;-1:-1:-1;;23402:287:10:o;23694:716::-;23997:6;23989;23985:19;23974:9;23967:38;24041:3;24036:2;24025:9;24021:18;24014:31;23948:4;24068:45;24108:3;24097:9;24093:19;24085:6;24068:45;:::i;:::-;-1:-1:-1;;;;;24153:6:10;24149:31;24144:2;24133:9;24129:18;24122:59;24229:9;24221:6;24217:22;24212:2;24201:9;24197:18;24190:50;24263:32;24288:6;24280;24263:32;:::i;:::-;24249:46;;24344:9;24336:6;24332:22;24326:3;24315:9;24311:19;24304:51;24372:32;24397:6;24389;24372:32;:::i
Swarm Source
ipfs://f4348b1012630acc108685b53e20637e8b5135910758287c3fe8368d11955a48
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MOVR
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.