Source Code
Latest 25 from a total of 2,811 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Execute Order | 18909165 | 713 days ago | IN | 0.00001 ETH | 0.00165625 | ||||
| Execute Order | 18886468 | 716 days ago | IN | 0.001 ETH | 0.00335263 | ||||
| Execute Order | 18689471 | 744 days ago | IN | 0.02 ETH | 0.00754104 | ||||
| Execute Order | 18618979 | 754 days ago | IN | 0.01 ETH | 0.00480294 | ||||
| Execute Order | 18606520 | 756 days ago | IN | 0.001 ETH | 0.00407435 | ||||
| Execute Order | 18604903 | 756 days ago | IN | 0.011 ETH | 0.00258875 | ||||
| Execute Order | 18602775 | 756 days ago | IN | 0.052 ETH | 0.00285903 | ||||
| Execute Order | 18601911 | 756 days ago | IN | 0.0001 ETH | 0.00254608 | ||||
| Execute Order | 18599983 | 757 days ago | IN | 0.001 ETH | 0.00516091 | ||||
| Execute Order | 18599478 | 757 days ago | IN | 0.001 ETH | 0.00350823 | ||||
| Execute Order | 18597295 | 757 days ago | IN | 0.0001 ETH | 0.00297107 | ||||
| Execute Order | 18596495 | 757 days ago | IN | 0.001 ETH | 0.00304113 | ||||
| Execute Order | 18592187 | 758 days ago | IN | 0.009 ETH | 0.00592644 | ||||
| Execute Order | 18591901 | 758 days ago | IN | 0.0162843 ETH | 0.00372913 | ||||
| Execute Order | 18589156 | 758 days ago | IN | 0.001 ETH | 0.00528721 | ||||
| Execute Order | 18584585 | 759 days ago | IN | 0.003 ETH | 0.00507326 | ||||
| Execute Order | 18584573 | 759 days ago | IN | 0.001 ETH | 0.00523413 | ||||
| Execute Order | 18584567 | 759 days ago | IN | 0.001 ETH | 0.00555037 | ||||
| Execute Order | 18582762 | 759 days ago | IN | 0.003 ETH | 0.00568437 | ||||
| Execute Order | 18576674 | 760 days ago | IN | 0.027 ETH | 0.00431022 | ||||
| Execute Order | 18575906 | 760 days ago | IN | 0.001 ETH | 0.00432277 | ||||
| Execute Order | 18575419 | 760 days ago | IN | 0.01 ETH | 0.00421958 | ||||
| Execute Order | 18575018 | 760 days ago | IN | 0.005 ETH | 0.00416402 | ||||
| Execute Order | 18574351 | 760 days ago | IN | 0.005 ETH | 0.00572217 | ||||
| Execute Order | 18574120 | 760 days ago | IN | 0.055 ETH | 0.00631779 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Deposit | 18909165 | 713 days ago | 0.00000995 ETH | ||||
| Transfer | 18909165 | 713 days ago | 0.00000005 ETH | ||||
| Deposit | 18886468 | 716 days ago | 0.000995 ETH | ||||
| Transfer | 18886468 | 716 days ago | 0.000005 ETH | ||||
| Send Message To ... | 18689471 | 744 days ago | 1 wei | ||||
| Deposit | 18689471 | 744 days ago | 0.02 ETH | ||||
| Deposit | 18618979 | 754 days ago | 0.00995 ETH | ||||
| Transfer | 18618979 | 754 days ago | 0.00005 ETH | ||||
| Send Message To ... | 18606520 | 756 days ago | 1 wei | ||||
| Deposit | 18606520 | 756 days ago | 0.0009985 ETH | ||||
| Transfer | 18606520 | 756 days ago | 0.0000015 ETH | ||||
| Deposit | 18604903 | 756 days ago | 0.010945 ETH | ||||
| Transfer | 18604903 | 756 days ago | 0.000055 ETH | ||||
| Deposit | 18602775 | 756 days ago | 0.05174 ETH | ||||
| Transfer | 18602775 | 756 days ago | 0.00026 ETH | ||||
| Deposit | 18601911 | 756 days ago | 0.0000995 ETH | ||||
| Transfer | 18601911 | 756 days ago | 0.0000005 ETH | ||||
| Deposit | 18599983 | 757 days ago | 0.000995 ETH | ||||
| Transfer | 18599983 | 757 days ago | 0.000005 ETH | ||||
| Deposit | 18599478 | 757 days ago | 0.000995 ETH | ||||
| Transfer | 18599478 | 757 days ago | 0.000005 ETH | ||||
| Deposit | 18597295 | 757 days ago | 0.0000995 ETH | ||||
| Transfer | 18597295 | 757 days ago | 0.0000005 ETH | ||||
| Deposit | 18596495 | 757 days ago | 0.000995 ETH | ||||
| Transfer | 18596495 | 757 days ago | 0.000005 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
WidoStarknetRouter
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT.
pragma solidity 0.8.7;
import "./interfaces/IStarknetMessaging.sol";
import "./interfaces/IStarknetEthBridge.sol";
import "./interfaces/IStarknetERC20Bridge.sol";
import "./interfaces/IWidoRouter.sol";
import "./interfaces/IWidoConfig.sol";
import "solmate/src/utils/SafeTransferLib.sol";
import "./lib/WidoL2Payload.sol";
import "hardhat/console.sol";
contract WidoStarknetRouter {
using SafeTransferLib for ERC20;
using SafeTransferLib for address;
IWidoConfig public immutable widoConfig;
IStarknetMessaging public immutable starknetCore;
uint256 constant DESTINATION_PAYLOAD_INPUTS_LEN_INDEX = 0;
uint256 constant DESTINATION_PAYLOAD_INPUT0_TOKEN_ADDRESS_INDEX = 1;
uint256 constant UINT256_PART_SIZE_BITS = 128;
uint256 constant UINT256_PART_SIZE = 2**UINT256_PART_SIZE_BITS;
// The selector of the "execute" l1_handler in WidoL1Router.cairo
uint256 constant EXECUTE_SELECTOR = 1017745666394979726211766185068760164586829337678283062942418931026954492996;
IWidoRouter public immutable widoRouter;
uint256 public l2WidoRecipient;
/// @notice Event emitted when the order is fulfilled
/// @param order The order that was fulfilled
/// @param sender The msg.sender
/// @param recipient Recipient of the final tokens of the order
/// @param feeBps Fee in basis points (bps)
/// @param partner Partner address
event OrderInitiated(
IWidoRouter.Order order,
address indexed sender,
uint256 recipient,
uint256 feeBps,
address indexed partner
);
constructor(IWidoConfig _widoConfig, IStarknetMessaging _starknetCore, IWidoRouter _widoRouter, uint256 _l2WidoRecipient) {
widoConfig = _widoConfig;
starknetCore = _starknetCore;
require(address(_widoRouter) != address(0), "WidoStarknetRouter: widoRouter cannot be address(0)");
widoRouter = _widoRouter;
l2WidoRecipient = _l2WidoRecipient;
}
function _bridgeTokens(address tokenAddress, uint256 amount, uint256 starknetRecipient, uint256 bridgeFee) internal {
address bridge = widoConfig.getBridgeAddress(tokenAddress);
if (tokenAddress == address(0)) {
IStarknetEthBridge(bridge).deposit{value: amount + bridgeFee}(amount, starknetRecipient);
} else {
if (ERC20(tokenAddress).allowance(address(this), bridge) < amount) {
ERC20(tokenAddress).safeApprove(bridge, type(uint256).max);
}
IStarknetERC20Bridge(bridge).deposit{value: bridgeFee}(amount, starknetRecipient);
}
}
function _sendMessageToL2(uint256[] memory payload, uint256 destinationTxFee) internal {
starknetCore.sendMessageToL2{value: destinationTxFee}(
l2WidoRecipient,
EXECUTE_SELECTOR,
payload
);
}
function _pullAndApproveTokens(IWidoRouter.OrderInput[] calldata inputs) internal {
address widoTokenManager = address(widoRouter.widoTokenManager());
for (uint256 i = 0; i < inputs.length;) {
IWidoRouter.OrderInput calldata input = inputs[i];
unchecked {
i++;
}
if (input.tokenAddress == address(0)) {
continue;
}
ERC20(input.tokenAddress).safeTransferFrom(msg.sender, address(this), input.amount);
if (ERC20(input.tokenAddress).allowance(address(this), widoTokenManager) < input.amount) {
ERC20(input.tokenAddress).safeApprove(widoTokenManager, type(uint256).max);
}
}
}
function executeOrder(
IWidoRouter.Order calldata order,
IWidoRouter.Step[] calldata steps,
uint256 feeBps,
address partner,
uint256 l2RecipientUser,
uint256[] calldata destinationPayload,
uint256 bridgeFee,
uint256 destinationTxFee
) external payable {
// Do validations
require(order.user == address(this), "Order user should equal WidoStarknetRouer");
require(order.outputs.length == 1, "Only single token output expected");
require(msg.value >= bridgeFee + destinationTxFee, "Insufficient fee");
require(feeBps <= 100, "Fee out of range");
address bridgeTokenAddress = order.outputs[0].tokenAddress;
if (destinationPayload.length > 0) {
require(WidoL2Payload.isCoherent(destinationPayload), "Incoherent destination payload");
// Since the user can only bridge one token, allow only single token to be specified.
require(destinationPayload[DESTINATION_PAYLOAD_INPUTS_LEN_INDEX] == 1, "Only single token input allowed in destination");
// Bridge token on L1 should correspond to Bridged Token address on starknet
uint256 bridgedTokenAddress = widoConfig.getBridgedTokenAddress(bridgeTokenAddress);
require(destinationPayload[DESTINATION_PAYLOAD_INPUT0_TOKEN_ADDRESS_INDEX] == bridgedTokenAddress, "Bridge Token Mismatch");
// Ensure that the recipient is same as mentioned in the order.
require(WidoL2Payload.getRecipient(destinationPayload) == l2RecipientUser, "L2 Recipient Mismatch");
}
// Fetch tokens from msg.sender.
_pullAndApproveTokens(order.inputs);
// Run Execute Order in L1
if (steps.length > 0) {
widoRouter.executeOrder{value: msg.value - bridgeFee - destinationTxFee}(order, steps, 0, partner);
}
// This amount will be the amount that is to be bridged to starknet.
// It is the token expected as final output of the Order.
// The minimum tokens to be bridged can be verified as part of the order, if there are steps. Otherwise,
// It would be same as the input token.
uint256 amount;
{
uint256 fee;
address bank = IWidoConfig(widoConfig).getBank();
if (bridgeTokenAddress == address(0)) {
amount = address(this).balance - bridgeFee - destinationTxFee;
fee = (amount * feeBps) / 10000;
bank.safeTransferETH(fee);
} else {
amount = ERC20(bridgeTokenAddress).balanceOf(address(this));
fee = (amount * feeBps) / 10000;
ERC20(bridgeTokenAddress).safeTransfer(bank, fee);
}
amount = amount - fee;
}
if (destinationPayload.length > 0) {
uint256 amountLow = amount & (UINT256_PART_SIZE - 1);
uint256 amountHigh = amount >> UINT256_PART_SIZE_BITS;
// Update the destination payload input token amount to equal
// the amount being brided.
uint256[] memory updatedDestionationPayload = destinationPayload;
updatedDestionationPayload[2] = amountLow;
updatedDestionationPayload[3] = amountHigh;
_bridgeTokens(bridgeTokenAddress, amount, l2WidoRecipient, bridgeFee);
// Messaging to Wido Starknet contract
_sendMessageToL2(updatedDestionationPayload, destinationTxFee);
} else {
// Send tokens directly to the user
_bridgeTokens(bridgeTokenAddress, amount, l2RecipientUser, bridgeFee);
}
emit OrderInitiated(order, msg.sender, l2RecipientUser, feeBps, partner);
}
/// @notice Allow receiving of native tokens
receive() external payable {}
}pragma solidity 0.8.7;
interface IStarknetMessaging {
/**
Sends a message to an L2 contract.
Returns the hash of the message.
*/
function sendMessageToL2(
uint256 to_address,
uint256 selector,
uint256[] calldata payload
) external payable returns (bytes32, uint256);
/**
Consumes a message that was sent from an L2 contract.
Returns the hash of the message.
*/
function consumeMessageFromL2(uint256 fromAddress, uint256[] calldata payload)
external
returns (bytes32);
}// SPDX-License-Identifier: MIT.
pragma solidity 0.8.7;
interface IStarknetEthBridge {
function deposit(uint256 amount, uint256 l2Recipient) external payable;
function withdraw(uint256 amount, address recipient) external;
}pragma solidity 0.8.7;
interface IStarknetERC20Bridge {
function deposit(uint256 amount, uint256 l2Recipient) external payable;
function withdraw(uint256 amount, address recipient) external;
}// SPDX-License-Identifier: GPL-3.0-only
pragma solidity 0.8.7;
import "../WidoTokenManager.sol";
interface IWidoRouter {
/// @notice OrderInput object describing the desired token inputs
/// @param tokenAddress Address of the input token
/// @param fromTokenAmount Amount of the input token to spend on the user's behalf
/// @dev amount must == msg.value when token == address(0)
struct OrderInput {
address tokenAddress;
uint256 amount;
}
/// @notice OrderOutput object describing the desired token outputs
/// @param tokenAddress Address of the output token
/// @param minOutputAmount Minimum amount of the output token the user is willing to accept for this order
struct OrderOutput {
address tokenAddress;
uint256 minOutputAmount;
}
/// @notice Order object describing the requirements of the zap
/// @param inputs Array of input objects, see OrderInput
/// @param outputs Array of output objects, see OrderOutput
/// @param user Address of user placing the order
/// @param nonce Number used once to ensure an order requested by a signature only executes once
/// @param expiration Timestamp until which the order is valid to execute
struct Order {
OrderInput[] inputs;
OrderOutput[] outputs;
address user;
uint32 nonce;
uint32 expiration;
}
/// @notice Step object describing a single token transformation
/// @param fromToken Address of the from token
/// @param targetAddress Address of the contract performing the transformation
/// @param data Data which the swap contract will be called with
/// @param amountIndex Index for the from token amount that can be found in data and needs to be updated with the most recent value.
struct Step {
address fromToken;
address targetAddress;
bytes data;
int32 amountIndex;
}
function widoTokenManager() external view returns (WidoTokenManager);
function verifyOrder(Order calldata order, uint8 v, bytes32 r, bytes32 s) external view returns (bool);
function executeOrder(
Order calldata order,
Step[] calldata route,
uint256 feeBps,
address partner
) external payable;
function executeOrder(
Order calldata order,
Step[] calldata route,
address recipient,
uint256 feeBps,
address partner
) external payable;
function executeOrderWithSignature(
Order calldata order,
Step[] calldata route,
uint8 v,
bytes32 r,
bytes32 s,
uint256 feeBps,
address partner
) external;
}pragma solidity 0.8.7;
interface IWidoConfig {
function getBridgeAddress(address tokenAddress) external returns (address bridgeAddress);
function getBridgedTokenAddress(address tokenAddress) external returns (uint256 bridgedTokenAddress);
function getBank() external returns (address bank);
function setBridgeAddress(address tokenAddress, address bridgeAddress, uint256 bridgedTokenAddress) external;
function setBridgeAddresses(address[] calldata tokenAddresses, address[] calldata bridgeAddresses, uint256[] calldata bridgedTokenAddresses) external;
function setBank(address bank) external;
}// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;
import {ERC20} from "../tokens/ERC20.sol";
/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol)
/// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.
/// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller.
library SafeTransferLib {
/*//////////////////////////////////////////////////////////////
ETH OPERATIONS
//////////////////////////////////////////////////////////////*/
function safeTransferETH(address to, uint256 amount) internal {
bool success;
/// @solidity memory-safe-assembly
assembly {
// Transfer the ETH and store if it succeeded or not.
success := call(gas(), to, amount, 0, 0, 0, 0)
}
require(success, "ETH_TRANSFER_FAILED");
}
/*//////////////////////////////////////////////////////////////
ERC20 OPERATIONS
//////////////////////////////////////////////////////////////*/
function safeTransferFrom(
ERC20 token,
address from,
address to,
uint256 amount
) internal {
bool success;
/// @solidity memory-safe-assembly
assembly {
// Get a pointer to some free memory.
let freeMemoryPointer := mload(0x40)
// Write the abi-encoded calldata into memory, beginning with the function selector.
mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000)
mstore(add(freeMemoryPointer, 4), from) // Append the "from" argument.
mstore(add(freeMemoryPointer, 36), to) // Append the "to" argument.
mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument.
success := and(
// Set success to whether the call reverted, if not we check it either
// returned exactly 1 (can't just be non-zero data), or had no return data.
or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),
// We use 100 because the length of our calldata totals up like so: 4 + 32 * 3.
// We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.
// Counterintuitively, this call must be positioned second to the or() call in the
// surrounding and() call or else returndatasize() will be zero during the computation.
call(gas(), token, 0, freeMemoryPointer, 100, 0, 32)
)
}
require(success, "TRANSFER_FROM_FAILED");
}
function safeTransfer(
ERC20 token,
address to,
uint256 amount
) internal {
bool success;
/// @solidity memory-safe-assembly
assembly {
// Get a pointer to some free memory.
let freeMemoryPointer := mload(0x40)
// Write the abi-encoded calldata into memory, beginning with the function selector.
mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000)
mstore(add(freeMemoryPointer, 4), to) // Append the "to" argument.
mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument.
success := and(
// Set success to whether the call reverted, if not we check it either
// returned exactly 1 (can't just be non-zero data), or had no return data.
or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),
// We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.
// We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.
// Counterintuitively, this call must be positioned second to the or() call in the
// surrounding and() call or else returndatasize() will be zero during the computation.
call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)
)
}
require(success, "TRANSFER_FAILED");
}
function safeApprove(
ERC20 token,
address to,
uint256 amount
) internal {
bool success;
/// @solidity memory-safe-assembly
assembly {
// Get a pointer to some free memory.
let freeMemoryPointer := mload(0x40)
// Write the abi-encoded calldata into memory, beginning with the function selector.
mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000)
mstore(add(freeMemoryPointer, 4), to) // Append the "to" argument.
mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument.
success := and(
// Set success to whether the call reverted, if not we check it either
// returned exactly 1 (can't just be non-zero data), or had no return data.
or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),
// We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.
// We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.
// Counterintuitively, this call must be positioned second to the or() call in the
// surrounding and() call or else returndatasize() will be zero during the computation.
call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)
)
}
require(success, "APPROVE_FAILED");
}
}pragma solidity 0.8.7;
library WidoL2Payload {
function isCoherent(uint256[] calldata payload) public pure returns (bool) {
uint256 len = payload.length;
uint256 cur;
require(cur < len);
// Inputs
require(payload[cur] > 0);
cur += 1 + payload[cur] * 3;
require(cur < len);
// Outputs
require(payload[cur] > 0);
cur += 1 + payload[cur] * 3;
require(cur < len);
// Steps Call Array
uint256 expectedCalldataLen;
uint256 stepCallArrayLen = payload[cur];
cur += 1;
for (uint256 i = 0; i < stepCallArrayLen; ) {
expectedCalldataLen += payload[cur + 3];
unchecked {
cur += 5;
i++;
}
}
require(cur < len);
// Calldata
uint256 actualCalldataLen = payload[cur];
require(expectedCalldataLen == actualCalldataLen, "Expected calldata len in steps to match calldata len in order");
cur += 1 + payload[cur];
require(cur < len);
// Recipient
require(cur + 1 == len);
return true;
}
function getRecipient(uint256[] calldata payload) public pure returns (uint256) {
// Assumes that the payload is coherent.
uint256 cur;
cur = 1 + payload[cur] * 3;
cur += 1 + payload[cur] * 3;
cur += 1 + payload[cur] * 5;
cur += 1 + payload[cur];
return payload[cur];
}
}// SPDX-License-Identifier: MIT
pragma solidity >= 0.4.22 <0.9.0;
library console {
address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);
function _sendLogPayload(bytes memory payload) private view {
uint256 payloadLength = payload.length;
address consoleAddress = CONSOLE_ADDRESS;
assembly {
let payloadStart := add(payload, 32)
let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
}
}
function log() internal view {
_sendLogPayload(abi.encodeWithSignature("log()"));
}
function logInt(int p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
}
function logUint(uint p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
}
function logString(string memory p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
}
function logBool(bool p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
}
function logAddress(address p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
}
function logBytes(bytes memory p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
}
function logBytes1(bytes1 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
}
function logBytes2(bytes2 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
}
function logBytes3(bytes3 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
}
function logBytes4(bytes4 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
}
function logBytes5(bytes5 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
}
function logBytes6(bytes6 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
}
function logBytes7(bytes7 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
}
function logBytes8(bytes8 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
}
function logBytes9(bytes9 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
}
function logBytes10(bytes10 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
}
function logBytes11(bytes11 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
}
function logBytes12(bytes12 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
}
function logBytes13(bytes13 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
}
function logBytes14(bytes14 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
}
function logBytes15(bytes15 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
}
function logBytes16(bytes16 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
}
function logBytes17(bytes17 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
}
function logBytes18(bytes18 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
}
function logBytes19(bytes19 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
}
function logBytes20(bytes20 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
}
function logBytes21(bytes21 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
}
function logBytes22(bytes22 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
}
function logBytes23(bytes23 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
}
function logBytes24(bytes24 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
}
function logBytes25(bytes25 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
}
function logBytes26(bytes26 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
}
function logBytes27(bytes27 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
}
function logBytes28(bytes28 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
}
function logBytes29(bytes29 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
}
function logBytes30(bytes30 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
}
function logBytes31(bytes31 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
}
function logBytes32(bytes32 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
}
function log(uint p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
}
function log(string memory p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
}
function log(bool p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
}
function log(address p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
}
function log(uint p0, uint p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
}
function log(uint p0, string memory p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
}
function log(uint p0, bool p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
}
function log(uint p0, address p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
}
function log(string memory p0, uint p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
}
function log(string memory p0, string memory p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
}
function log(string memory p0, bool p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
}
function log(string memory p0, address p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
}
function log(bool p0, uint p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
}
function log(bool p0, string memory p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
}
function log(bool p0, bool p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
}
function log(bool p0, address p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
}
function log(address p0, uint p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
}
function log(address p0, string memory p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
}
function log(address p0, bool p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
}
function log(address p0, address p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
}
function log(uint p0, uint p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2));
}
function log(uint p0, uint p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2));
}
function log(uint p0, uint p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2));
}
function log(uint p0, uint p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2));
}
function log(uint p0, string memory p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2));
}
function log(uint p0, string memory p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2));
}
function log(uint p0, string memory p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2));
}
function log(uint p0, string memory p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2));
}
function log(uint p0, bool p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2));
}
function log(uint p0, bool p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2));
}
function log(uint p0, bool p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2));
}
function log(uint p0, bool p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2));
}
function log(uint p0, address p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2));
}
function log(uint p0, address p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2));
}
function log(uint p0, address p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2));
}
function log(uint p0, address p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2));
}
function log(string memory p0, uint p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2));
}
function log(string memory p0, uint p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2));
}
function log(string memory p0, uint p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2));
}
function log(string memory p0, uint p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2));
}
function log(string memory p0, string memory p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2));
}
function log(string memory p0, string memory p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
}
function log(string memory p0, string memory p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
}
function log(string memory p0, string memory p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
}
function log(string memory p0, bool p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2));
}
function log(string memory p0, bool p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
}
function log(string memory p0, bool p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
}
function log(string memory p0, bool p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
}
function log(string memory p0, address p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2));
}
function log(string memory p0, address p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
}
function log(string memory p0, address p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
}
function log(string memory p0, address p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
}
function log(bool p0, uint p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2));
}
function log(bool p0, uint p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2));
}
function log(bool p0, uint p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2));
}
function log(bool p0, uint p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2));
}
function log(bool p0, string memory p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2));
}
function log(bool p0, string memory p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
}
function log(bool p0, string memory p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
}
function log(bool p0, string memory p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
}
function log(bool p0, bool p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2));
}
function log(bool p0, bool p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
}
function log(bool p0, bool p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
}
function log(bool p0, bool p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
}
function log(bool p0, address p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2));
}
function log(bool p0, address p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
}
function log(bool p0, address p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
}
function log(bool p0, address p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
}
function log(address p0, uint p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2));
}
function log(address p0, uint p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2));
}
function log(address p0, uint p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2));
}
function log(address p0, uint p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2));
}
function log(address p0, string memory p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2));
}
function log(address p0, string memory p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
}
function log(address p0, string memory p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
}
function log(address p0, string memory p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
}
function log(address p0, bool p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2));
}
function log(address p0, bool p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
}
function log(address p0, bool p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
}
function log(address p0, bool p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
}
function log(address p0, address p1, uint p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2));
}
function log(address p0, address p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
}
function log(address p0, address p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
}
function log(address p0, address p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
}
function log(uint p0, uint p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3));
}
function log(uint p0, uint p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3));
}
function log(uint p0, string memory p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3));
}
function log(uint p0, bool p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3));
}
function log(uint p0, address p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3));
}
function log(uint p0, address p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3));
}
function log(uint p0, address p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3));
}
function log(uint p0, address p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3));
}
function log(uint p0, address p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3));
}
function log(uint p0, address p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3));
}
function log(uint p0, address p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3));
}
function log(uint p0, address p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3));
}
function log(uint p0, address p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3));
}
function log(uint p0, address p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3));
}
function log(uint p0, address p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3));
}
function log(uint p0, address p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3));
}
function log(uint p0, address p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3));
}
function log(uint p0, address p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3));
}
function log(uint p0, address p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3));
}
function log(uint p0, address p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
}
function log(address p0, uint p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3));
}
function log(address p0, uint p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3));
}
function log(address p0, uint p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3));
}
function log(address p0, uint p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3));
}
function log(address p0, uint p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3));
}
function log(address p0, uint p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3));
}
function log(address p0, uint p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3));
}
function log(address p0, uint p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3));
}
function log(address p0, uint p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3));
}
function log(address p0, uint p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3));
}
function log(address p0, uint p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, uint p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3));
}
function log(address p0, uint p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3));
}
function log(address p0, uint p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3));
}
function log(address p0, uint p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3));
}
function log(address p0, uint p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, uint p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
}
}// SPDX-License-Identifier: GPL-3.0-only
pragma solidity 0.8.7;
import "solmate/src/utils/SafeTransferLib.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./interfaces/IWidoTokenManager.sol";
contract WidoTokenManager is IWidoTokenManager, Ownable {
using SafeTransferLib for ERC20;
/// @notice Transfers tokens or native tokens from the user
/// @param user The address of the order user
/// @param inputs Array of input objects, see OrderInput and Order
function pullTokens(address user, IWidoRouter.OrderInput[] calldata inputs) external override onlyOwner {
for (uint256 i = 0; i < inputs.length; i++) {
IWidoRouter.OrderInput calldata input = inputs[i];
if (input.tokenAddress == address(0)) {
continue;
}
ERC20(input.tokenAddress).safeTransferFrom(user, owner(), input.amount);
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/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.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @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 {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing 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 {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_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);
}
}// SPDX-License-Identifier: GPL-3.0-only
pragma solidity 0.8.7;
import "./IWidoRouter.sol";
interface IWidoTokenManager {
function pullTokens(address user, IWidoRouter.OrderInput[] calldata inputs) external;
}// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;
/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
/*//////////////////////////////////////////////////////////////
EVENTS
//////////////////////////////////////////////////////////////*/
event Transfer(address indexed from, address indexed to, uint256 amount);
event Approval(address indexed owner, address indexed spender, uint256 amount);
/*//////////////////////////////////////////////////////////////
METADATA STORAGE
//////////////////////////////////////////////////////////////*/
string public name;
string public symbol;
uint8 public immutable decimals;
/*//////////////////////////////////////////////////////////////
ERC20 STORAGE
//////////////////////////////////////////////////////////////*/
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
/*//////////////////////////////////////////////////////////////
EIP-2612 STORAGE
//////////////////////////////////////////////////////////////*/
uint256 internal immutable INITIAL_CHAIN_ID;
bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;
mapping(address => uint256) public nonces;
/*//////////////////////////////////////////////////////////////
CONSTRUCTOR
//////////////////////////////////////////////////////////////*/
constructor(
string memory _name,
string memory _symbol,
uint8 _decimals
) {
name = _name;
symbol = _symbol;
decimals = _decimals;
INITIAL_CHAIN_ID = block.chainid;
INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
}
/*//////////////////////////////////////////////////////////////
ERC20 LOGIC
//////////////////////////////////////////////////////////////*/
function approve(address spender, uint256 amount) public virtual returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transfer(address to, uint256 amount) public virtual returns (bool) {
balanceOf[msg.sender] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(msg.sender, to, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
) public virtual returns (bool) {
uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.
if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;
balanceOf[from] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(from, to, amount);
return true;
}
/*//////////////////////////////////////////////////////////////
EIP-2612 LOGIC
//////////////////////////////////////////////////////////////*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) public virtual {
require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");
// Unchecked because the only math done is incrementing
// the owner's nonce which cannot realistically overflow.
unchecked {
address recoveredAddress = ecrecover(
keccak256(
abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR(),
keccak256(
abi.encode(
keccak256(
"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
),
owner,
spender,
value,
nonces[owner]++,
deadline
)
)
)
),
v,
r,
s
);
require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");
allowance[recoveredAddress][spender] = value;
}
emit Approval(owner, spender, value);
}
function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
}
function computeDomainSeparator() internal view virtual returns (bytes32) {
return
keccak256(
abi.encode(
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
keccak256(bytes(name)),
keccak256("1"),
block.chainid,
address(this)
)
);
}
/*//////////////////////////////////////////////////////////////
INTERNAL MINT/BURN LOGIC
//////////////////////////////////////////////////////////////*/
function _mint(address to, uint256 amount) internal virtual {
totalSupply += amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(address(0), to, amount);
}
function _burn(address from, uint256 amount) internal virtual {
balanceOf[from] -= amount;
// Cannot underflow because a user's balance
// will never be larger than the total supply.
unchecked {
totalSupply -= amount;
}
emit Transfer(from, address(0), amount);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {
"contracts/lib/WidoL2Payload.sol": {
"WidoL2Payload": "0x32c2757fe876013d2d6cb3460071676f8d70a49e"
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IWidoConfig","name":"_widoConfig","type":"address"},{"internalType":"contract IStarknetMessaging","name":"_starknetCore","type":"address"},{"internalType":"contract IWidoRouter","name":"_widoRouter","type":"address"},{"internalType":"uint256","name":"_l2WidoRecipient","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"components":[{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct IWidoRouter.OrderInput[]","name":"inputs","type":"tuple[]"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"minOutputAmount","type":"uint256"}],"internalType":"struct IWidoRouter.OrderOutput[]","name":"outputs","type":"tuple[]"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint32","name":"nonce","type":"uint32"},{"internalType":"uint32","name":"expiration","type":"uint32"}],"indexed":false,"internalType":"struct IWidoRouter.Order","name":"order","type":"tuple"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"recipient","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeBps","type":"uint256"},{"indexed":true,"internalType":"address","name":"partner","type":"address"}],"name":"OrderInitiated","type":"event"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct IWidoRouter.OrderInput[]","name":"inputs","type":"tuple[]"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"minOutputAmount","type":"uint256"}],"internalType":"struct IWidoRouter.OrderOutput[]","name":"outputs","type":"tuple[]"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint32","name":"nonce","type":"uint32"},{"internalType":"uint32","name":"expiration","type":"uint32"}],"internalType":"struct IWidoRouter.Order","name":"order","type":"tuple"},{"components":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"targetAddress","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"int32","name":"amountIndex","type":"int32"}],"internalType":"struct IWidoRouter.Step[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"feeBps","type":"uint256"},{"internalType":"address","name":"partner","type":"address"},{"internalType":"uint256","name":"l2RecipientUser","type":"uint256"},{"internalType":"uint256[]","name":"destinationPayload","type":"uint256[]"},{"internalType":"uint256","name":"bridgeFee","type":"uint256"},{"internalType":"uint256","name":"destinationTxFee","type":"uint256"}],"name":"executeOrder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"l2WidoRecipient","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"starknetCore","outputs":[{"internalType":"contract IStarknetMessaging","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"widoConfig","outputs":[{"internalType":"contract IWidoConfig","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"widoRouter","outputs":[{"internalType":"contract IWidoRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60e06040523480156200001157600080fd5b5060405162002f4938038062002f498339818101604052810190620000379190620001bc565b8373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000118576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010f9062000255565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508060008190555050505050620003be565b600081519050620001718162000356565b92915050565b600081519050620001888162000370565b92915050565b6000815190506200019f816200038a565b92915050565b600081519050620001b681620003a4565b92915050565b60008060008060808587031215620001d957620001d862000302565b5b6000620001e98782880162000177565b9450506020620001fc8782880162000160565b93505060406200020f878288016200018e565b92505060606200022287828801620001a5565b91505092959194509250565b60006200023d60338362000277565b91506200024a8262000307565b604082019050919050565b6000602082019050818103600083015262000270816200022e565b9050919050565b600082825260208201905092915050565b60006200029582620002d8565b9050919050565b6000620002a98262000288565b9050919050565b6000620002bd8262000288565b9050919050565b6000620002d18262000288565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b7f5769646f537461726b6e6574526f757465723a207769646f526f75746572206360008201527f616e6e6f74206265206164647265737328302900000000000000000000000000602082015250565b62000361816200029c565b81146200036d57600080fd5b50565b6200037b81620002b0565b81146200038757600080fd5b50565b6200039581620002c4565b8114620003a157600080fd5b50565b620003af81620002f8565b8114620003bb57600080fd5b50565b60805160601c60a05160601c60c05160601c612b2862000421600039600081816105f401528181610a4b0152610a95015260008181610a2701526110ab0152600081816103fb015281816106a501528181610a6f0152610df70152612b286000f3fe60806040526004361061004e5760003560e01c80631e2fef041461005a57806330fe9dab1461007657806339e730ab146100a15780638355c01b146100cc578063bb980811146100f757610055565b3661005557005b600080fd5b610074600480360381019061006f9190611533565b610122565b005b34801561008257600080fd5b5061008b610a1f565b6040516100989190611f96565b60405180910390f35b3480156100ad57600080fd5b506100b6610a25565b6040516100c39190611d32565b60405180910390f35b3480156100d857600080fd5b506100e1610a49565b6040516100ee9190611d68565b60405180910390f35b34801561010357600080fd5b5061010c610a6d565b6040516101199190611d4d565b60405180910390f35b3073ffffffffffffffffffffffffffffffffffffffff168a604001602081019061014c919061143f565b73ffffffffffffffffffffffffffffffffffffffff16146101a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019990611d83565b60405180910390fd5b60018a80602001906101b4919061207b565b9050146101f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ed90611e43565b60405180910390fd5b80826102029190612385565b341015610244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023b90611dc3565b60405180910390fd5b6064871115610288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027f90611e83565b60405180910390fd5b60008a806020019061029a919061207b565b60008181106102ac576102ab612765565b5b90506040020160000160208101906102c4919061143f565b905060008585905011156105ce577332c2757fe876013d2d6cb3460071676f8d70a49e630cc9be1486866040518363ffffffff1660e01b815260040161030b929190611d0e565b60206040518083038186803b15801561032357600080fd5b505af4158015610337573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035b9190611499565b61039a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039190611e23565b60405180910390fd5b6001858560008181106103b0576103af612765565b5b90506020020135146103f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ee90611e03565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663944a663f836040518263ffffffff1660e01b81526004016104529190611cca565b602060405180830381600087803b15801561046c57600080fd5b505af1158015610480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a49190611646565b905080868660018181106104bb576104ba612765565b5b9050602002013514610502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f990611ee3565b60405180910390fd5b867332c2757fe876013d2d6cb3460071676f8d70a49e63fe8b3a1f88886040518363ffffffff1660e01b815260040161053c929190611d0e565b60206040518083038186803b15801561055457600080fd5b505af4158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c9190611646565b146105cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c390611e63565b60405180910390fd5b505b6105e68b80600001906105e19190612018565b610a91565b60008a8a9050111561069e577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663916a3bd983853461063b91906125d7565b61064591906125d7565b8d8d8d60008d6040518763ffffffff1660e01b815260040161066b959493929190611f03565b6000604051808303818588803b15801561068457600080fd5b505af1158015610698573d6000803e3d6000fd5b50505050505b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166360d704db6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561070b57600080fd5b505af115801561071f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610743919061146c565b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156107dc5784864761078791906125d7565b61079191906125d7565b92506127108b846107a2919061257d565b6107ac91906123db565b91506107d7828273ffffffffffffffffffffffffffffffffffffffff16610d0890919063ffffffff16565b6108ae565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108159190611cca565b60206040518083038186803b15801561082d57600080fd5b505afa158015610841573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108659190611646565b92506127108b84610876919061257d565b61088091906123db565b91506108ad81838673ffffffffffffffffffffffffffffffffffffffff16610d5b9092919063ffffffff16565b5b81836108ba91906125d7565b92505050600086869050111561099b5760006001608060026108dc919061245f565b6108e691906125d7565b821690506000608083901c90506000888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509050828160028151811061094e5761094d612765565b5b602002602001018181525050818160038151811061096f5761096e612765565b5b60200260200101818152505061098985856000548a610df3565b61099381876110a9565b5050506109a8565b6109a782828987610df3565b5b8773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fdcbe317d6f3924abbc85e084cb4b96823dfa69fb3e6270933740dc977853dc098e8a8d604051610a0993929190611f58565b60405180910390a3505050505050505050505050565b60005481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631802553e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610af957600080fd5b505afa158015610b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b319190611506565b905060005b83839050811015610d025736848483818110610b5557610b54612765565b5b90506040020190508180600101925050600073ffffffffffffffffffffffffffffffffffffffff16816000016020810190610b90919061143f565b73ffffffffffffffffffffffffffffffffffffffff161415610bb25750610cfd565b610bf533308360200135846000016020810190610bcf919061143f565b73ffffffffffffffffffffffffffffffffffffffff16611180909392919063ffffffff16565b8060200135816000016020810190610c0d919061143f565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30866040518363ffffffff1660e01b8152600401610c47929190611ce5565b60206040518083038186803b158015610c5f57600080fd5b505afa158015610c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c979190611646565b1015610cfb57610cfa837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836000016020810190610cd5919061143f565b73ffffffffffffffffffffffffffffffffffffffff1661121f9092919063ffffffff16565b5b505b610b36565b50505050565b600080600080600085875af1905080610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90611ec3565b60405180910390fd5b505050565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490611de3565b60405180910390fd5b50505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c61b1f5b866040518263ffffffff1660e01b8152600401610e4e9190611cca565b602060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea0919061146c565b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610f55578073ffffffffffffffffffffffffffffffffffffffff1663e2bbb1588386610eff9190612385565b86866040518463ffffffff1660e01b8152600401610f1e929190611fb1565b6000604051808303818588803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b50505050506110a2565b838573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30846040518363ffffffff1660e01b8152600401610f91929190611ce5565b60206040518083038186803b158015610fa957600080fd5b505afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190611646565b101561103357611032817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8773ffffffffffffffffffffffffffffffffffffffff1661121f9092919063ffffffff16565b5b8073ffffffffffffffffffffffffffffffffffffffff1663e2bbb1588386866040518463ffffffff1660e01b815260040161106f929190611fb1565b6000604051808303818588803b15801561108857600080fd5b505af115801561109c573d6000803e3d6000fd5b50505050505b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633e3aa6c5826000547f0240060cdb34fcc260f41eac7474ee1d7c80b7e3607daff9ac67c7ea2ebb1c44866040518563ffffffff1660e01b815260040161112993929190611fda565b60408051808303818588803b15801561114157600080fd5b505af1158015611155573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061117a91906114c6565b50505050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f90611da3565b60405180910390fd5b5050505050565b60006040517f095ea7b3000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806112b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a890611ea3565b60405180910390fd5b50505050565b6000813590506112c681612a51565b92915050565b6000815190506112db81612a51565b92915050565b60008083601f8401126112f7576112f661279e565b5b8235905067ffffffffffffffff81111561131457611313612799565b5b6020830191508360208202830111156113305761132f6127b7565b5b9250929050565b60008083601f84011261134d5761134c61279e565b5b8235905067ffffffffffffffff81111561136a57611369612799565b5b602083019150836020820283011115611386576113856127b7565b5b9250929050565b60008151905061139c81612a68565b92915050565b6000815190506113b181612a7f565b92915050565b6000815190506113c681612a96565b92915050565b6000813590506113db81612aad565b92915050565b600060a082840312156113f7576113f66127a8565b5b81905092915050565b60008135905061140f81612ac4565b92915050565b60008151905061142481612ac4565b92915050565b60008135905061143981612adb565b92915050565b600060208284031215611455576114546127d0565b5b6000611463848285016112b7565b91505092915050565b600060208284031215611482576114816127d0565b5b6000611490848285016112cc565b91505092915050565b6000602082840312156114af576114ae6127d0565b5b60006114bd8482850161138d565b91505092915050565b600080604083850312156114dd576114dc6127d0565b5b60006114eb858286016113a2565b92505060206114fc85828601611415565b9150509250929050565b60006020828403121561151c5761151b6127d0565b5b600061152a848285016113b7565b91505092915050565b6000806000806000806000806000806101008b8d031215611557576115566127d0565b5b60008b013567ffffffffffffffff811115611575576115746127c1565b5b6115818d828e016113e1565b9a505060208b013567ffffffffffffffff8111156115a2576115a16127c1565b5b6115ae8d828e016112e1565b995099505060406115c18d828e01611400565b97505060606115d28d828e016112b7565b96505060806115e38d828e01611400565b95505060a08b013567ffffffffffffffff811115611604576116036127c1565b5b6116108d828e01611337565b945094505060c06116238d828e01611400565b92505060e06116348d828e01611400565b9150509295989b9194979a5092959850565b60006020828403121561165c5761165b6127d0565b5b600061166a84828501611415565b91505092915050565b600061167f8383611af1565b60408301905092915050565b60006116978383611b30565b60408301905092915050565b60006116af8383611c18565b905092915050565b60006116c38383611c9d565b60208301905092915050565b6116d88161260b565b82525050565b6116e78161260b565b82525050565b60006116f9838561214b565b9350611704826120de565b8060005b8581101561173d5761171a8284612319565b6117248882611673565b975061172f83612117565b925050600181019050611708565b5085925050509392505050565b6000611756838561215c565b9350611761826120e8565b8060005b8581101561179a576117778284612324565b611781888261168b565b975061178c83612124565b925050600181019050611765565b5085925050509392505050565b60006117b3838561216d565b9350836020840285016117c5846120f2565b8060005b878110156118095784840389526117e0828461232f565b6117ea85826116a3565b94506117f583612131565b925060208a019950506001810190506117c9565b50829750879450505050509392505050565b6000611827838561218f565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561185a576118596127c6565b5b60208302925061186b8385846126f8565b82840190509392505050565b60006118828261210c565b61188c818561217e565b9350611897836120fc565b8060005b838110156118c85781516118af88826116b7565b97506118ba8361213e565b92505060018101905061189b565b5085935050505092915050565b60006118e183856121a0565b93506118ee8385846126f8565b6118f7836127d5565b840190509392505050565b61190b8161268c565b82525050565b61191a8161269e565b82525050565b611929816126b0565b82525050565b61193881612645565b82525050565b611947816126c2565b82525050565b600061195a6029836121b1565b9150611965826127f3565b604082019050919050565b600061197d6014836121b1565b915061198882612842565b602082019050919050565b60006119a06010836121b1565b91506119ab8261286b565b602082019050919050565b60006119c3600f836121b1565b91506119ce82612894565b602082019050919050565b60006119e6602e836121b1565b91506119f1826128bd565b604082019050919050565b6000611a09601e836121b1565b9150611a148261290c565b602082019050919050565b6000611a2c6021836121b1565b9150611a3782612935565b604082019050919050565b6000611a4f6015836121b1565b9150611a5a82612984565b602082019050919050565b6000611a726010836121b1565b9150611a7d826129ad565b602082019050919050565b6000611a95600e836121b1565b9150611aa0826129d6565b602082019050919050565b6000611ab86013836121b1565b9150611ac3826129ff565b602082019050919050565b6000611adb6015836121b1565b9150611ae682612a28565b602082019050919050565b60408201611b0260008301836121c2565b611b0f60008501826116cf565b50611b1d6020830183612357565b611b2a6020850182611c9d565b50505050565b60408201611b4160008301836121c2565b611b4e60008501826116cf565b50611b5c6020830183612357565b611b696020850182611c9d565b50505050565b600060a08301611b8260008401846121d9565b8583036000870152611b958382846116ed565b92505050611ba6602084018461223c565b8583036020870152611bb983828461174a565b92505050611bca60408401846121c2565b611bd760408601826116cf565b50611be5606084018461236e565b611bf26060860182611cbb565b50611c00608084018461236e565b611c0d6080860182611cbb565b508091505092915050565b600060808301611c2b60008401846121c2565b611c3860008601826116cf565b50611c4660208401846121c2565b611c5360208601826116cf565b50611c61604084018461229f565b8583036040870152611c748382846118d5565b92505050611c856060840184612302565b611c92606086018261192f565b508091505092915050565b611ca681612672565b82525050565b611cb581612672565b82525050565b611cc48161267c565b82525050565b6000602082019050611cdf60008301846116de565b92915050565b6000604082019050611cfa60008301856116de565b611d0760208301846116de565b9392505050565b60006020820190508181036000830152611d2981848661181b565b90509392505050565b6000602082019050611d476000830184611902565b92915050565b6000602082019050611d626000830184611911565b92915050565b6000602082019050611d7d6000830184611920565b92915050565b60006020820190508181036000830152611d9c8161194d565b9050919050565b60006020820190508181036000830152611dbc81611970565b9050919050565b60006020820190508181036000830152611ddc81611993565b9050919050565b60006020820190508181036000830152611dfc816119b6565b9050919050565b60006020820190508181036000830152611e1c816119d9565b9050919050565b60006020820190508181036000830152611e3c816119fc565b9050919050565b60006020820190508181036000830152611e5c81611a1f565b9050919050565b60006020820190508181036000830152611e7c81611a42565b9050919050565b60006020820190508181036000830152611e9c81611a65565b9050919050565b60006020820190508181036000830152611ebc81611a88565b9050919050565b60006020820190508181036000830152611edc81611aab565b9050919050565b60006020820190508181036000830152611efc81611ace565b9050919050565b60006080820190508181036000830152611f1d8188611b6f565b90508181036020830152611f328186886117a7565b9050611f41604083018561193e565b611f4e60608301846116de565b9695505050505050565b60006060820190508181036000830152611f728186611b6f565b9050611f816020830185611cac565b611f8e6040830184611cac565b949350505050565b6000602082019050611fab6000830184611cac565b92915050565b6000604082019050611fc66000830185611cac565b611fd36020830184611cac565b9392505050565b6000606082019050611fef6000830186611cac565b611ffc6020830185611cac565b818103604083015261200e8184611877565b9050949350505050565b60008083356001602003843603038112612035576120346127ad565b5b80840192508235915067ffffffffffffffff821115612057576120566127a3565b5b602083019250604082023603831315612073576120726127bc565b5b509250929050565b60008083356001602003843603038112612098576120976127ad565b5b80840192508235915067ffffffffffffffff8211156120ba576120b96127a3565b5b6020830192506040820236038313156120d6576120d56127bc565b5b509250929050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b6000604082019050919050565b6000604082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006121d160208401846112b7565b905092915050565b600080833560016020038436030381126121f6576121f56127cb565b5b83810192508235915060208301925067ffffffffffffffff82111561221e5761221d612794565b5b604082023603841315612234576122336127b2565b5b509250929050565b60008083356001602003843603038112612259576122586127cb565b5b83810192508235915060208301925067ffffffffffffffff82111561228157612280612794565b5b604082023603841315612297576122966127b2565b5b509250929050565b600080833560016020038436030381126122bc576122bb6127cb565b5b83810192508235915060208301925067ffffffffffffffff8211156122e4576122e3612794565b5b6001820236038413156122fa576122f96127b2565b5b509250929050565b600061231160208401846113cc565b905092915050565b600082905092915050565b600082905092915050565b60008235600160800383360303811261234b5761234a6127cb565b5b82810191505092915050565b60006123666020840184611400565b905092915050565b600061237d602084018461142a565b905092915050565b600061239082612672565b915061239b83612672565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156123d0576123cf612707565b5b828201905092915050565b60006123e682612672565b91506123f183612672565b92508261240157612400612736565b5b828204905092915050565b6000808291508390505b60018511156124565780860481111561243257612431612707565b5b60018516156124415780820291505b808102905061244f856127e6565b9450612416565b94509492505050565b600061246a82612672565b915061247583612672565b92506124a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846124aa565b905092915050565b6000826124ba5760019050612576565b816124c85760009050612576565b81600181146124de57600281146124e857612517565b6001915050612576565b60ff8411156124fa576124f9612707565b5b8360020a91508482111561251157612510612707565b5b50612576565b5060208310610133831016604e8410600b841016171561254c5782820a90508381111561254757612546612707565b5b612576565b612559848484600161240c565b925090508184048111156125705761256f612707565b5b81810290505b9392505050565b600061258882612672565b915061259383612672565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125cc576125cb612707565b5b828202905092915050565b60006125e282612672565b91506125ed83612672565b925082821015612600576125ff612707565b5b828203905092915050565b600061261682612652565b9050919050565b60008115159050919050565b6000819050919050565b600061263e8261260b565b9050919050565b60008160030b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b6000612697826126d4565b9050919050565b60006126a9826126d4565b9050919050565b60006126bb826126d4565b9050919050565b60006126cd82612672565b9050919050565b60006126df826126e6565b9050919050565b60006126f182612652565b9050919050565b82818337600083830152505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f4f7264657220757365722073686f756c6420657175616c205769646f5374617260008201527f6b6e6574526f7565720000000000000000000000000000000000000000000000602082015250565b7f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000600082015250565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b7f5452414e534645525f4641494c45440000000000000000000000000000000000600082015250565b7f4f6e6c792073696e676c6520746f6b656e20696e70757420616c6c6f7765642060008201527f696e2064657374696e6174696f6e000000000000000000000000000000000000602082015250565b7f496e636f686572656e742064657374696e6174696f6e207061796c6f61640000600082015250565b7f4f6e6c792073696e676c6520746f6b656e206f7574707574206578706563746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c3220526563697069656e74204d69736d617463680000000000000000000000600082015250565b7f466565206f7574206f662072616e676500000000000000000000000000000000600082015250565b7f415050524f56455f4641494c4544000000000000000000000000000000000000600082015250565b7f4554485f5452414e534645525f4641494c454400000000000000000000000000600082015250565b7f42726964676520546f6b656e204d69736d617463680000000000000000000000600082015250565b612a5a8161260b565b8114612a6557600080fd5b50565b612a718161261d565b8114612a7c57600080fd5b50565b612a8881612629565b8114612a9357600080fd5b50565b612a9f81612633565b8114612aaa57600080fd5b50565b612ab681612645565b8114612ac157600080fd5b50565b612acd81612672565b8114612ad857600080fd5b50565b612ae48161267c565b8114612aef57600080fd5b5056fea2646970667358221220a0b8a8027883189ff0580debb07aa6a57c6c16b3a9f67cc2ee614ed4db77a89d64736f6c634300080700330000000000000000000000002fbab6fdc1b9236e74375ac4331f867967e6b309000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c40000000000000000000000007fb69e8fb1525ceec03783ffd8a317bafbdfd39401b64371585074b2c333e8b9fea28198ed8b75efcec2f3e3f7650a63de2999c1
Deployed Bytecode
0x60806040526004361061004e5760003560e01c80631e2fef041461005a57806330fe9dab1461007657806339e730ab146100a15780638355c01b146100cc578063bb980811146100f757610055565b3661005557005b600080fd5b610074600480360381019061006f9190611533565b610122565b005b34801561008257600080fd5b5061008b610a1f565b6040516100989190611f96565b60405180910390f35b3480156100ad57600080fd5b506100b6610a25565b6040516100c39190611d32565b60405180910390f35b3480156100d857600080fd5b506100e1610a49565b6040516100ee9190611d68565b60405180910390f35b34801561010357600080fd5b5061010c610a6d565b6040516101199190611d4d565b60405180910390f35b3073ffffffffffffffffffffffffffffffffffffffff168a604001602081019061014c919061143f565b73ffffffffffffffffffffffffffffffffffffffff16146101a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019990611d83565b60405180910390fd5b60018a80602001906101b4919061207b565b9050146101f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ed90611e43565b60405180910390fd5b80826102029190612385565b341015610244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023b90611dc3565b60405180910390fd5b6064871115610288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027f90611e83565b60405180910390fd5b60008a806020019061029a919061207b565b60008181106102ac576102ab612765565b5b90506040020160000160208101906102c4919061143f565b905060008585905011156105ce577332c2757fe876013d2d6cb3460071676f8d70a49e630cc9be1486866040518363ffffffff1660e01b815260040161030b929190611d0e565b60206040518083038186803b15801561032357600080fd5b505af4158015610337573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035b9190611499565b61039a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039190611e23565b60405180910390fd5b6001858560008181106103b0576103af612765565b5b90506020020135146103f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ee90611e03565b60405180910390fd5b60007f0000000000000000000000002fbab6fdc1b9236e74375ac4331f867967e6b30973ffffffffffffffffffffffffffffffffffffffff1663944a663f836040518263ffffffff1660e01b81526004016104529190611cca565b602060405180830381600087803b15801561046c57600080fd5b505af1158015610480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a49190611646565b905080868660018181106104bb576104ba612765565b5b9050602002013514610502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f990611ee3565b60405180910390fd5b867332c2757fe876013d2d6cb3460071676f8d70a49e63fe8b3a1f88886040518363ffffffff1660e01b815260040161053c929190611d0e565b60206040518083038186803b15801561055457600080fd5b505af4158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c9190611646565b146105cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c390611e63565b60405180910390fd5b505b6105e68b80600001906105e19190612018565b610a91565b60008a8a9050111561069e577f0000000000000000000000007fb69e8fb1525ceec03783ffd8a317bafbdfd39473ffffffffffffffffffffffffffffffffffffffff1663916a3bd983853461063b91906125d7565b61064591906125d7565b8d8d8d60008d6040518763ffffffff1660e01b815260040161066b959493929190611f03565b6000604051808303818588803b15801561068457600080fd5b505af1158015610698573d6000803e3d6000fd5b50505050505b60008060007f0000000000000000000000002fbab6fdc1b9236e74375ac4331f867967e6b30973ffffffffffffffffffffffffffffffffffffffff166360d704db6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561070b57600080fd5b505af115801561071f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610743919061146c565b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156107dc5784864761078791906125d7565b61079191906125d7565b92506127108b846107a2919061257d565b6107ac91906123db565b91506107d7828273ffffffffffffffffffffffffffffffffffffffff16610d0890919063ffffffff16565b6108ae565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108159190611cca565b60206040518083038186803b15801561082d57600080fd5b505afa158015610841573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108659190611646565b92506127108b84610876919061257d565b61088091906123db565b91506108ad81838673ffffffffffffffffffffffffffffffffffffffff16610d5b9092919063ffffffff16565b5b81836108ba91906125d7565b92505050600086869050111561099b5760006001608060026108dc919061245f565b6108e691906125d7565b821690506000608083901c90506000888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509050828160028151811061094e5761094d612765565b5b602002602001018181525050818160038151811061096f5761096e612765565b5b60200260200101818152505061098985856000548a610df3565b61099381876110a9565b5050506109a8565b6109a782828987610df3565b5b8773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fdcbe317d6f3924abbc85e084cb4b96823dfa69fb3e6270933740dc977853dc098e8a8d604051610a0993929190611f58565b60405180910390a3505050505050505050505050565b60005481565b7f000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c481565b7f0000000000000000000000007fb69e8fb1525ceec03783ffd8a317bafbdfd39481565b7f0000000000000000000000002fbab6fdc1b9236e74375ac4331f867967e6b30981565b60007f0000000000000000000000007fb69e8fb1525ceec03783ffd8a317bafbdfd39473ffffffffffffffffffffffffffffffffffffffff16631802553e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610af957600080fd5b505afa158015610b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b319190611506565b905060005b83839050811015610d025736848483818110610b5557610b54612765565b5b90506040020190508180600101925050600073ffffffffffffffffffffffffffffffffffffffff16816000016020810190610b90919061143f565b73ffffffffffffffffffffffffffffffffffffffff161415610bb25750610cfd565b610bf533308360200135846000016020810190610bcf919061143f565b73ffffffffffffffffffffffffffffffffffffffff16611180909392919063ffffffff16565b8060200135816000016020810190610c0d919061143f565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30866040518363ffffffff1660e01b8152600401610c47929190611ce5565b60206040518083038186803b158015610c5f57600080fd5b505afa158015610c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c979190611646565b1015610cfb57610cfa837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836000016020810190610cd5919061143f565b73ffffffffffffffffffffffffffffffffffffffff1661121f9092919063ffffffff16565b5b505b610b36565b50505050565b600080600080600085875af1905080610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90611ec3565b60405180910390fd5b505050565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490611de3565b60405180910390fd5b50505050565b60007f0000000000000000000000002fbab6fdc1b9236e74375ac4331f867967e6b30973ffffffffffffffffffffffffffffffffffffffff1663c61b1f5b866040518263ffffffff1660e01b8152600401610e4e9190611cca565b602060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea0919061146c565b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610f55578073ffffffffffffffffffffffffffffffffffffffff1663e2bbb1588386610eff9190612385565b86866040518463ffffffff1660e01b8152600401610f1e929190611fb1565b6000604051808303818588803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b50505050506110a2565b838573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30846040518363ffffffff1660e01b8152600401610f91929190611ce5565b60206040518083038186803b158015610fa957600080fd5b505afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190611646565b101561103357611032817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8773ffffffffffffffffffffffffffffffffffffffff1661121f9092919063ffffffff16565b5b8073ffffffffffffffffffffffffffffffffffffffff1663e2bbb1588386866040518463ffffffff1660e01b815260040161106f929190611fb1565b6000604051808303818588803b15801561108857600080fd5b505af115801561109c573d6000803e3d6000fd5b50505050505b5050505050565b7f000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c473ffffffffffffffffffffffffffffffffffffffff16633e3aa6c5826000547f0240060cdb34fcc260f41eac7474ee1d7c80b7e3607daff9ac67c7ea2ebb1c44866040518563ffffffff1660e01b815260040161112993929190611fda565b60408051808303818588803b15801561114157600080fd5b505af1158015611155573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061117a91906114c6565b50505050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f90611da3565b60405180910390fd5b5050505050565b60006040517f095ea7b3000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806112b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a890611ea3565b60405180910390fd5b50505050565b6000813590506112c681612a51565b92915050565b6000815190506112db81612a51565b92915050565b60008083601f8401126112f7576112f661279e565b5b8235905067ffffffffffffffff81111561131457611313612799565b5b6020830191508360208202830111156113305761132f6127b7565b5b9250929050565b60008083601f84011261134d5761134c61279e565b5b8235905067ffffffffffffffff81111561136a57611369612799565b5b602083019150836020820283011115611386576113856127b7565b5b9250929050565b60008151905061139c81612a68565b92915050565b6000815190506113b181612a7f565b92915050565b6000815190506113c681612a96565b92915050565b6000813590506113db81612aad565b92915050565b600060a082840312156113f7576113f66127a8565b5b81905092915050565b60008135905061140f81612ac4565b92915050565b60008151905061142481612ac4565b92915050565b60008135905061143981612adb565b92915050565b600060208284031215611455576114546127d0565b5b6000611463848285016112b7565b91505092915050565b600060208284031215611482576114816127d0565b5b6000611490848285016112cc565b91505092915050565b6000602082840312156114af576114ae6127d0565b5b60006114bd8482850161138d565b91505092915050565b600080604083850312156114dd576114dc6127d0565b5b60006114eb858286016113a2565b92505060206114fc85828601611415565b9150509250929050565b60006020828403121561151c5761151b6127d0565b5b600061152a848285016113b7565b91505092915050565b6000806000806000806000806000806101008b8d031215611557576115566127d0565b5b60008b013567ffffffffffffffff811115611575576115746127c1565b5b6115818d828e016113e1565b9a505060208b013567ffffffffffffffff8111156115a2576115a16127c1565b5b6115ae8d828e016112e1565b995099505060406115c18d828e01611400565b97505060606115d28d828e016112b7565b96505060806115e38d828e01611400565b95505060a08b013567ffffffffffffffff811115611604576116036127c1565b5b6116108d828e01611337565b945094505060c06116238d828e01611400565b92505060e06116348d828e01611400565b9150509295989b9194979a5092959850565b60006020828403121561165c5761165b6127d0565b5b600061166a84828501611415565b91505092915050565b600061167f8383611af1565b60408301905092915050565b60006116978383611b30565b60408301905092915050565b60006116af8383611c18565b905092915050565b60006116c38383611c9d565b60208301905092915050565b6116d88161260b565b82525050565b6116e78161260b565b82525050565b60006116f9838561214b565b9350611704826120de565b8060005b8581101561173d5761171a8284612319565b6117248882611673565b975061172f83612117565b925050600181019050611708565b5085925050509392505050565b6000611756838561215c565b9350611761826120e8565b8060005b8581101561179a576117778284612324565b611781888261168b565b975061178c83612124565b925050600181019050611765565b5085925050509392505050565b60006117b3838561216d565b9350836020840285016117c5846120f2565b8060005b878110156118095784840389526117e0828461232f565b6117ea85826116a3565b94506117f583612131565b925060208a019950506001810190506117c9565b50829750879450505050509392505050565b6000611827838561218f565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561185a576118596127c6565b5b60208302925061186b8385846126f8565b82840190509392505050565b60006118828261210c565b61188c818561217e565b9350611897836120fc565b8060005b838110156118c85781516118af88826116b7565b97506118ba8361213e565b92505060018101905061189b565b5085935050505092915050565b60006118e183856121a0565b93506118ee8385846126f8565b6118f7836127d5565b840190509392505050565b61190b8161268c565b82525050565b61191a8161269e565b82525050565b611929816126b0565b82525050565b61193881612645565b82525050565b611947816126c2565b82525050565b600061195a6029836121b1565b9150611965826127f3565b604082019050919050565b600061197d6014836121b1565b915061198882612842565b602082019050919050565b60006119a06010836121b1565b91506119ab8261286b565b602082019050919050565b60006119c3600f836121b1565b91506119ce82612894565b602082019050919050565b60006119e6602e836121b1565b91506119f1826128bd565b604082019050919050565b6000611a09601e836121b1565b9150611a148261290c565b602082019050919050565b6000611a2c6021836121b1565b9150611a3782612935565b604082019050919050565b6000611a4f6015836121b1565b9150611a5a82612984565b602082019050919050565b6000611a726010836121b1565b9150611a7d826129ad565b602082019050919050565b6000611a95600e836121b1565b9150611aa0826129d6565b602082019050919050565b6000611ab86013836121b1565b9150611ac3826129ff565b602082019050919050565b6000611adb6015836121b1565b9150611ae682612a28565b602082019050919050565b60408201611b0260008301836121c2565b611b0f60008501826116cf565b50611b1d6020830183612357565b611b2a6020850182611c9d565b50505050565b60408201611b4160008301836121c2565b611b4e60008501826116cf565b50611b5c6020830183612357565b611b696020850182611c9d565b50505050565b600060a08301611b8260008401846121d9565b8583036000870152611b958382846116ed565b92505050611ba6602084018461223c565b8583036020870152611bb983828461174a565b92505050611bca60408401846121c2565b611bd760408601826116cf565b50611be5606084018461236e565b611bf26060860182611cbb565b50611c00608084018461236e565b611c0d6080860182611cbb565b508091505092915050565b600060808301611c2b60008401846121c2565b611c3860008601826116cf565b50611c4660208401846121c2565b611c5360208601826116cf565b50611c61604084018461229f565b8583036040870152611c748382846118d5565b92505050611c856060840184612302565b611c92606086018261192f565b508091505092915050565b611ca681612672565b82525050565b611cb581612672565b82525050565b611cc48161267c565b82525050565b6000602082019050611cdf60008301846116de565b92915050565b6000604082019050611cfa60008301856116de565b611d0760208301846116de565b9392505050565b60006020820190508181036000830152611d2981848661181b565b90509392505050565b6000602082019050611d476000830184611902565b92915050565b6000602082019050611d626000830184611911565b92915050565b6000602082019050611d7d6000830184611920565b92915050565b60006020820190508181036000830152611d9c8161194d565b9050919050565b60006020820190508181036000830152611dbc81611970565b9050919050565b60006020820190508181036000830152611ddc81611993565b9050919050565b60006020820190508181036000830152611dfc816119b6565b9050919050565b60006020820190508181036000830152611e1c816119d9565b9050919050565b60006020820190508181036000830152611e3c816119fc565b9050919050565b60006020820190508181036000830152611e5c81611a1f565b9050919050565b60006020820190508181036000830152611e7c81611a42565b9050919050565b60006020820190508181036000830152611e9c81611a65565b9050919050565b60006020820190508181036000830152611ebc81611a88565b9050919050565b60006020820190508181036000830152611edc81611aab565b9050919050565b60006020820190508181036000830152611efc81611ace565b9050919050565b60006080820190508181036000830152611f1d8188611b6f565b90508181036020830152611f328186886117a7565b9050611f41604083018561193e565b611f4e60608301846116de565b9695505050505050565b60006060820190508181036000830152611f728186611b6f565b9050611f816020830185611cac565b611f8e6040830184611cac565b949350505050565b6000602082019050611fab6000830184611cac565b92915050565b6000604082019050611fc66000830185611cac565b611fd36020830184611cac565b9392505050565b6000606082019050611fef6000830186611cac565b611ffc6020830185611cac565b818103604083015261200e8184611877565b9050949350505050565b60008083356001602003843603038112612035576120346127ad565b5b80840192508235915067ffffffffffffffff821115612057576120566127a3565b5b602083019250604082023603831315612073576120726127bc565b5b509250929050565b60008083356001602003843603038112612098576120976127ad565b5b80840192508235915067ffffffffffffffff8211156120ba576120b96127a3565b5b6020830192506040820236038313156120d6576120d56127bc565b5b509250929050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b6000604082019050919050565b6000604082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006121d160208401846112b7565b905092915050565b600080833560016020038436030381126121f6576121f56127cb565b5b83810192508235915060208301925067ffffffffffffffff82111561221e5761221d612794565b5b604082023603841315612234576122336127b2565b5b509250929050565b60008083356001602003843603038112612259576122586127cb565b5b83810192508235915060208301925067ffffffffffffffff82111561228157612280612794565b5b604082023603841315612297576122966127b2565b5b509250929050565b600080833560016020038436030381126122bc576122bb6127cb565b5b83810192508235915060208301925067ffffffffffffffff8211156122e4576122e3612794565b5b6001820236038413156122fa576122f96127b2565b5b509250929050565b600061231160208401846113cc565b905092915050565b600082905092915050565b600082905092915050565b60008235600160800383360303811261234b5761234a6127cb565b5b82810191505092915050565b60006123666020840184611400565b905092915050565b600061237d602084018461142a565b905092915050565b600061239082612672565b915061239b83612672565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156123d0576123cf612707565b5b828201905092915050565b60006123e682612672565b91506123f183612672565b92508261240157612400612736565b5b828204905092915050565b6000808291508390505b60018511156124565780860481111561243257612431612707565b5b60018516156124415780820291505b808102905061244f856127e6565b9450612416565b94509492505050565b600061246a82612672565b915061247583612672565b92506124a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846124aa565b905092915050565b6000826124ba5760019050612576565b816124c85760009050612576565b81600181146124de57600281146124e857612517565b6001915050612576565b60ff8411156124fa576124f9612707565b5b8360020a91508482111561251157612510612707565b5b50612576565b5060208310610133831016604e8410600b841016171561254c5782820a90508381111561254757612546612707565b5b612576565b612559848484600161240c565b925090508184048111156125705761256f612707565b5b81810290505b9392505050565b600061258882612672565b915061259383612672565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125cc576125cb612707565b5b828202905092915050565b60006125e282612672565b91506125ed83612672565b925082821015612600576125ff612707565b5b828203905092915050565b600061261682612652565b9050919050565b60008115159050919050565b6000819050919050565b600061263e8261260b565b9050919050565b60008160030b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b6000612697826126d4565b9050919050565b60006126a9826126d4565b9050919050565b60006126bb826126d4565b9050919050565b60006126cd82612672565b9050919050565b60006126df826126e6565b9050919050565b60006126f182612652565b9050919050565b82818337600083830152505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f4f7264657220757365722073686f756c6420657175616c205769646f5374617260008201527f6b6e6574526f7565720000000000000000000000000000000000000000000000602082015250565b7f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000600082015250565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b7f5452414e534645525f4641494c45440000000000000000000000000000000000600082015250565b7f4f6e6c792073696e676c6520746f6b656e20696e70757420616c6c6f7765642060008201527f696e2064657374696e6174696f6e000000000000000000000000000000000000602082015250565b7f496e636f686572656e742064657374696e6174696f6e207061796c6f61640000600082015250565b7f4f6e6c792073696e676c6520746f6b656e206f7574707574206578706563746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c3220526563697069656e74204d69736d617463680000000000000000000000600082015250565b7f466565206f7574206f662072616e676500000000000000000000000000000000600082015250565b7f415050524f56455f4641494c4544000000000000000000000000000000000000600082015250565b7f4554485f5452414e534645525f4641494c454400000000000000000000000000600082015250565b7f42726964676520546f6b656e204d69736d617463680000000000000000000000600082015250565b612a5a8161260b565b8114612a6557600080fd5b50565b612a718161261d565b8114612a7c57600080fd5b50565b612a8881612629565b8114612a9357600080fd5b50565b612a9f81612633565b8114612aaa57600080fd5b50565b612ab681612645565b8114612ac157600080fd5b50565b612acd81612672565b8114612ad857600080fd5b50565b612ae48161267c565b8114612aef57600080fd5b5056fea2646970667358221220a0b8a8027883189ff0580debb07aa6a57c6c16b3a9f67cc2ee614ed4db77a89d64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002fbab6fdc1b9236e74375ac4331f867967e6b309000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c40000000000000000000000007fb69e8fb1525ceec03783ffd8a317bafbdfd39401b64371585074b2c333e8b9fea28198ed8b75efcec2f3e3f7650a63de2999c1
-----Decoded View---------------
Arg [0] : _widoConfig (address): 0x2fBaB6FDC1b9236e74375Ac4331F867967E6b309
Arg [1] : _starknetCore (address): 0xc662c410C0ECf747543f5bA90660f6ABeBD9C8c4
Arg [2] : _widoRouter (address): 0x7Fb69e8fb1525ceEc03783FFd8a317bafbDfD394
Arg [3] : _l2WidoRecipient (uint256): 774344487152719977056596713676738542095583354372615681057915688698153376193
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000002fbab6fdc1b9236e74375ac4331f867967e6b309
Arg [1] : 000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c4
Arg [2] : 0000000000000000000000007fb69e8fb1525ceec03783ffd8a317bafbdfd394
Arg [3] : 01b64371585074b2c333e8b9fea28198ed8b75efcec2f3e3f7650a63de2999c1
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 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.