Source Code
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 10544073 | 482 days ago | Contract Creation | 0 FRAX |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PointFarmingDecoderAndSanitizer
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 200 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
import {BaseDecoderAndSanitizer} from "src/base/DecodersAndSanitizers/BaseDecoderAndSanitizer.sol";
import {EigenLayerLSTStakingDecoderAndSanitizer} from
"src/base/DecodersAndSanitizers/Protocols/EigenLayerLSTStakingDecoderAndSanitizer.sol";
import {SwellSimpleStakingDecoderAndSanitizer} from
"src/base/DecodersAndSanitizers/Protocols/SwellSimpleStakingDecoderAndSanitizer.sol";
import {ZircuitSimpleStakingDecoderAndSanitizer} from
"src/base/DecodersAndSanitizers/Protocols/ZircuitSimpleStakingDecoderAndSanitizer.sol";
import {MantleStandardBridgeDecoderAndSanitizer} from
"src/base/DecodersAndSanitizers/Protocols/MantleStandardBridgeDecoderAndSanitizer.sol";
import {ScrollBridgeDecoderAndSanitizer} from
"src/base/DecodersAndSanitizers/Protocols/ScrollBridgeDecoderAndSanitizer.sol";
import {LineaBridgeDecoderAndSanitizer} from
"src/base/DecodersAndSanitizers/Protocols/LineaBridgeDecoderAndSanitizer.sol";
import {StandardBridgeDecoderAndSanitizer} from
"src/base/DecodersAndSanitizers/Protocols/StandardBridgeDecoderAndSanitizer.sol";
import {KarakDecoderAndSanitizer} from "src/base/DecodersAndSanitizers/Protocols/KarakDecoderAndSanitizer.sol";
import {OFTDecoderAndSanitizer} from "src/base/DecodersAndSanitizers/Protocols/OFTDecoderAndSanitizer.sol";
contract PointFarmingDecoderAndSanitizer is
EigenLayerLSTStakingDecoderAndSanitizer,
SwellSimpleStakingDecoderAndSanitizer,
KarakDecoderAndSanitizer,
ZircuitSimpleStakingDecoderAndSanitizer,
StandardBridgeDecoderAndSanitizer,
LineaBridgeDecoderAndSanitizer,
MantleStandardBridgeDecoderAndSanitizer,
ScrollBridgeDecoderAndSanitizer,
OFTDecoderAndSanitizer
{
constructor(address _boringVault) BaseDecoderAndSanitizer(_boringVault) {}
//============================== HANDLE FUNCTION COLLISIONS ===============================
}// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
import {DecoderCustomTypes} from "src/interfaces/DecoderCustomTypes.sol";
contract BaseDecoderAndSanitizer {
error BaseDecoderAndSanitizer__FunctionSelectorNotSupported();
//============================== IMMUTABLES ===============================
/**
* @notice The BoringVault contract address.
*/
address internal immutable boringVault;
constructor(address _boringVault) {
boringVault = _boringVault;
}
function approve(address spender, uint256) external pure returns (bytes memory addressesFound) {
addressesFound = abi.encodePacked(spender);
}
function transfer(address _to, uint256) external pure returns (bytes memory addressesFound) {
addressesFound = abi.encodePacked(_to);
}
function claimFees(address feeAsset) external pure returns (bytes memory addressesFound) {
addressesFound = abi.encodePacked(feeAsset);
}
function withdrawNonBoringToken(address token, uint256 /*amount*/ )
external
pure
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(token);
}
function withdrawNativeFromDrone() external pure returns (bytes memory addressesFound) {
return addressesFound;
}
//============================== FALLBACK ===============================
/**
* @notice The purpose of this function is to revert with a known error,
* so that during merkle tree creation we can verify that a
* leafs decoder and sanitizer implments the required function
* selector.
*/
fallback() external {
revert BaseDecoderAndSanitizer__FunctionSelectorNotSupported();
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
import {BaseDecoderAndSanitizer, DecoderCustomTypes} from "src/base/DecodersAndSanitizers/BaseDecoderAndSanitizer.sol";
abstract contract EigenLayerLSTStakingDecoderAndSanitizer is BaseDecoderAndSanitizer {
//============================== ERRORS ===============================
error EigenLayerLSTStakingDecoderAndSanitizer__CanOnlyReceiveAsTokens();
//============================== EIGEN LAYER ===============================
function depositIntoStrategy(address strategy, address token, uint256 /*amount*/ )
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(strategy, token);
}
function queueWithdrawals(DecoderCustomTypes.QueuedWithdrawalParams[] calldata queuedWithdrawalParams)
external
pure
virtual
returns (bytes memory addressesFound)
{
for (uint256 i = 0; i < queuedWithdrawalParams.length; i++) {
for (uint256 j = 0; j < queuedWithdrawalParams[i].strategies.length; j++) {
addressesFound = abi.encodePacked(addressesFound, queuedWithdrawalParams[i].strategies[j]);
}
addressesFound = abi.encodePacked(addressesFound, queuedWithdrawalParams[i].withdrawer);
}
}
function completeQueuedWithdrawals(
DecoderCustomTypes.Withdrawal[] calldata withdrawals,
address[][] calldata tokens,
uint256[] calldata, /*middlewareTimesIndexes*/
bool[] calldata receiveAsTokens
) external pure virtual returns (bytes memory addressesFound) {
for (uint256 i = 0; i < withdrawals.length; i++) {
if (!receiveAsTokens[i]) revert EigenLayerLSTStakingDecoderAndSanitizer__CanOnlyReceiveAsTokens();
addressesFound = abi.encodePacked(
addressesFound, withdrawals[i].staker, withdrawals[i].delegatedTo, withdrawals[i].withdrawer
);
for (uint256 j = 0; j < withdrawals[i].strategies.length; j++) {
addressesFound = abi.encodePacked(addressesFound, withdrawals[i].strategies[j]);
}
for (uint256 j = 0; j < tokens.length; j++) {
addressesFound = abi.encodePacked(addressesFound, tokens[i][j]);
}
}
}
function delegateTo(
address operator,
DecoderCustomTypes.SignatureWithExpiry calldata, /*approverSignatureAndExpiry*/
bytes32 /*approverSalt*/
) external pure returns (bytes memory addressesFound) {
addressesFound = abi.encodePacked(operator);
}
function undelegate(address staker) external pure returns (bytes memory addressesFound) {
addressesFound = abi.encodePacked(staker);
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
import {BaseDecoderAndSanitizer} from "src/base/DecodersAndSanitizers/BaseDecoderAndSanitizer.sol";
abstract contract SwellSimpleStakingDecoderAndSanitizer is BaseDecoderAndSanitizer {
//============================== SWELL SIMPLE STAKING ===============================
function deposit(address _token, uint256, /*_amount*/ address _receiver)
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(_token, _receiver);
}
function withdraw(address _token, uint256, /*_amount*/ address _receiver)
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(_token, _receiver);
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
import {BaseDecoderAndSanitizer} from "src/base/DecodersAndSanitizers/BaseDecoderAndSanitizer.sol";
abstract contract ZircuitSimpleStakingDecoderAndSanitizer is BaseDecoderAndSanitizer {
//============================== ZIRCUIT SIMPLE STAKING ===============================
function depositFor(address _token, address _for, uint256 /*_amount*/ )
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(_token, _for);
}
function withdraw(address _token, uint256 /*_amount*/ )
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(_token);
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
import {BaseDecoderAndSanitizer, DecoderCustomTypes} from "src/base/DecodersAndSanitizers/BaseDecoderAndSanitizer.sol";
abstract contract MantleStandardBridgeDecoderAndSanitizer is BaseDecoderAndSanitizer {
/// @notice The mantle bridge closely follows the standard bridge format, but has a couple of breaking changes
/// that are accounted for using the functions below.
//============================== MantleStandardBridge ===============================
function bridgeETHTo(uint256, /*amount*/ address _to, uint32, /*_minGasLimit*/ bytes calldata /*_extraData*/ )
external
pure
virtual
returns (bytes memory sensitiveArguments)
{
// Extract sensitive arguments.
sensitiveArguments = abi.encodePacked(_to);
}
// Example TX https://etherscan.io/tx/0xe1b6ba19b47dadf53f1c67ed0fe7109b0c78bb8c3abb8c9578a9fa789fe725d7
function proveWithdrawalTransaction(
DecoderCustomTypes.MantleWithdrawalTransaction calldata _tx,
uint256, /*_l2OutputIndex*/
DecoderCustomTypes.OutputRootProof calldata, /*_outputRootProof*/
bytes[] calldata /*_withdrawalProof*/
) external pure virtual returns (bytes memory sensitiveArguments) {
sensitiveArguments = abi.encodePacked(_tx.sender, _tx.target);
}
/// @notice Eample TX https://etherscan.io/tx/0x258c80e4c282fc94ddbec05bf64c602a437a2f26b1d2c14b6d16802ab1de9a11
function finalizeWithdrawalTransaction(DecoderCustomTypes.MantleWithdrawalTransaction calldata _tx)
external
pure
virtual
returns (bytes memory sensitiveArguments)
{
sensitiveArguments = abi.encodePacked(_tx.sender, _tx.target);
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
import {BaseDecoderAndSanitizer, DecoderCustomTypes} from "src/base/DecodersAndSanitizers/BaseDecoderAndSanitizer.sol";
abstract contract ScrollBridgeDecoderAndSanitizer is BaseDecoderAndSanitizer {
//============================== Scroll Native Bridge ===============================
/// @notice Example deposit TX https://etherscan.io/tx/0xadf2121b495a0f6222219095dd3e116cd7b550c1a1a98ec1a561c9bff323eef9
/// @notice Example withdraw TX https://scrollscan.com/tx/0xfc81ca5bcba7d43cace50765117ecf9cf9d4f177c2493475171c26a91343f801
function sendMessage(address _to, uint256, /*_value*/ bytes calldata, /*_message*/ uint256 /*_gasLimit*/ )
external
pure
virtual
returns (bytes memory sensitiveArguments)
{
// Extract sensitive arguments.
sensitiveArguments = abi.encodePacked(_to);
}
/// @notice Example TX ETH https://etherscan.io/tx/0xdb9f80b209b7e56b529c07d74d686eca7f0e5c3962d5bf5d8c554929f69b7016
/// @notice Example TX ERC20 https://etherscan.io/tx/0x17f8e5674384e70987d5f31b3f9609968117a131ab5d376fcd69f26e2a658b6e
function relayMessageWithProof(
address _from,
address _to,
uint256, /*_value*/
uint256, /*_nonce*/
bytes calldata, /*_message*/
DecoderCustomTypes.L2MessageProof calldata /*_proof*/
) external pure virtual returns (bytes memory sensitiveArguments) {
// Extract sensitive arguments.
sensitiveArguments = abi.encodePacked(_from, _to);
}
/// @notice Example TX https://etherscan.io/tx/0xa25e6c5dc294f469fbb754f74aa262b61353a5df68671e41bfe48faecd100059
function depositERC20(address _token, address _to, uint256, /*_amount*/ uint256 /*_gasLimit*/ )
external
pure
virtual
returns (bytes memory sensitiveArguments)
{
// Extract sensitive arguments.
sensitiveArguments = abi.encodePacked(_token, _to);
}
/// @notice Example TX https://scrollscan.com/tx/0xfcc5bdc518524b7f92f0d38dc696662c9a145123211c894b69607368578cc15d
function withdrawERC20(address _token, address _to, uint256, /*_amount*/ uint256 /*_gasLimit*/ )
external
pure
virtual
returns (bytes memory sensitiveArguments)
{
// Extract sensitive arguments.
sensitiveArguments = abi.encodePacked(_token, _to);
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
import {BaseDecoderAndSanitizer, DecoderCustomTypes} from "src/base/DecodersAndSanitizers/BaseDecoderAndSanitizer.sol";
abstract contract LineaBridgeDecoderAndSanitizer is BaseDecoderAndSanitizer {
//============================== Linea Native Bridge ===============================
/// @notice Example TX https://etherscan.io/tx/0x6fe5dcbafb6620980ec571cde88e6e651075214a0b698543eb5589e8889d52bd
/// @notice Set _fee to zero in order to claim funds manually.
/// @notice When bridging from Linea to mainnet a fee is required, so I think it is best to just allow the strategist
/// to pick a good fee value and do no sanitation of it.
function sendMessage(address _to, uint256, /*_fee*/ bytes calldata /*_calldata*/ )
external
pure
virtual
returns (bytes memory sensitiveArguments)
{
// Extract sensitive arguments.
sensitiveArguments = abi.encodePacked(_to);
}
// Bridge ERC20
// Example TX https://etherscan.io/tx/0x9935e537c51807f4097444399f08b04798dfe2a0f96cbf0b186caa9e8ab9d111
// Example TX https://lineascan.build/tx/0xa1ed773719a0d17373b5ce2db7c2e8c924eff99865dd0d3cdb4b58f3e9ea5310
function bridgeToken(address _token, uint256, /*_amount*/ address _recipient)
external
pure
virtual
returns (bytes memory sensitiveArguments)
{
// Extract sensitive arguments.
sensitiveArguments = abi.encodePacked(_token, _recipient);
}
// https://lineascan.build/tx/0xc97c7d28163dc81c5dd5c735d607952959a06a3016bada86484712d4c6cdea3f
// Used to claim ETH or ERC20s on destination chain, if no fee is provided.
function claimMessage(
address _from,
address _to,
uint256, /*_fee*/
uint256, /*_value*/
address _feeRecipient,
bytes calldata, /*_calldata*/
uint256 /*_nonce*/
) external pure virtual returns (bytes memory sensitiveArguments) {
sensitiveArguments = abi.encodePacked(_from, _to, _feeRecipient);
}
// Example TX https://etherscan.io/tx/0x9af51fdd89ac1658a480605fad1105f95290420acff3d978f8df847e9e3891b7
function claimMessageWithProof(DecoderCustomTypes.ClaimMessageWithProofParams calldata _claimMessageWithProof)
external
pure
virtual
returns (bytes memory sensitiveArguments)
{
sensitiveArguments = abi.encodePacked(
_claimMessageWithProof.from, _claimMessageWithProof.to, _claimMessageWithProof.feeRecipient
);
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
import {BaseDecoderAndSanitizer, DecoderCustomTypes} from "src/base/DecodersAndSanitizers/BaseDecoderAndSanitizer.sol";
abstract contract StandardBridgeDecoderAndSanitizer is BaseDecoderAndSanitizer {
//============================== StandardBridge ===============================
/// @notice Example TX https://etherscan.io/tx/0x0b1cc213286c328e3fb483cfef9342aee51409b67ee5af1dc409e37273710f9f
/// @notice Eample TX https://basescan.org/tx/0x7805ac08f38bec2d98edafc2e6f9571271a76b5ede3928f96d3edbc459d0ea4d
function bridgeETHTo(address _to, uint32, /*_minGasLimit*/ bytes calldata /*_extraData*/ )
external
pure
virtual
returns (bytes memory sensitiveArguments)
{
// Extract sensitive arguments.
sensitiveArguments = abi.encodePacked(_to);
}
function bridgeERC20To(
address _localToken,
address _remoteToken,
address _to,
uint256, /*_amount*/
uint32, /*_minGasLimit*/
bytes calldata /*_extraData*/
) external pure virtual returns (bytes memory sensitiveArguments) {
// Extract sensitive arguments.
sensitiveArguments = abi.encodePacked(_localToken, _remoteToken, _to);
}
/// @notice Example TX https://etherscan.io/tx/0x774db0b2aac5123f7a67fe00d57fb6c1f731457df435097481e7c8c913630fe1
/// @notice This appears to be callable by anyone, so I would think that the sender and target values are constrained by the proofs
// Playing with tendely sims, this does seem to be the case, so I am not sure it is worth it to sanitize these arguments
function proveWithdrawalTransaction(
DecoderCustomTypes.WithdrawalTransaction calldata _tx,
uint256, /*_l2OutputIndex*/
DecoderCustomTypes.OutputRootProof calldata, /*_outputRootProof*/
bytes[] calldata /*_withdrawalProof*/
) external pure virtual returns (bytes memory sensitiveArguments) {
sensitiveArguments = abi.encodePacked(_tx.sender, _tx.target);
}
/// @notice Eample TX https://etherscan.io/tx/0x5bb20258a0b151a6acb01f05ea42ee2f51123cba5d51e9be46a5033e675faefe
function finalizeWithdrawalTransaction(DecoderCustomTypes.WithdrawalTransaction calldata _tx)
external
pure
virtual
returns (bytes memory sensitiveArguments)
{
sensitiveArguments = abi.encodePacked(_tx.sender, _tx.target);
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
import {BaseDecoderAndSanitizer, DecoderCustomTypes} from "src/base/DecodersAndSanitizers/BaseDecoderAndSanitizer.sol";
abstract contract KarakDecoderAndSanitizer is BaseDecoderAndSanitizer {
error KarakDecoderAndSanitizer__InvalidRequestsLength();
//============================== KARAK ===============================
function deposit(address vault, uint256, /*amount*/ uint256 /*minOut*/ )
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(vault);
}
function gimmieShares(address vault, uint256 /*shares*/ )
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(vault);
}
function returnShares(address vault, uint256 /*shares*/ )
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(vault);
}
function startWithdraw(DecoderCustomTypes.WithdrawRequest[] calldata requests)
external
pure
virtual
returns (bytes memory addressesFound)
{
if (requests.length != 1 || requests[0].vaults.length != 1 || requests[0].shares.length != 1) {
revert KarakDecoderAndSanitizer__InvalidRequestsLength();
}
addressesFound = abi.encodePacked(requests[0].vaults[0], requests[0].withdrawer);
}
function finishWithdraw(DecoderCustomTypes.QueuedWithdrawal[] calldata startedWithdrawals)
external
pure
virtual
returns (bytes memory addressesFound)
{
if (
startedWithdrawals.length != 1 || startedWithdrawals[0].request.vaults.length != 1
|| startedWithdrawals[0].request.shares.length != 1
) {
revert KarakDecoderAndSanitizer__InvalidRequestsLength();
}
addressesFound = abi.encodePacked(
startedWithdrawals[0].staker,
startedWithdrawals[0].delegatedTo,
startedWithdrawals[0].request.vaults[0],
startedWithdrawals[0].request.withdrawer
);
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
import {BaseDecoderAndSanitizer, DecoderCustomTypes} from "src/base/DecodersAndSanitizers/BaseDecoderAndSanitizer.sol";
abstract contract OFTDecoderAndSanitizer is BaseDecoderAndSanitizer {
error OFTDecoderAndSanitizer__NonZeroMessage();
error OFTDecoderAndSanitizer__NonZeroOFTCommand();
//============================== OFT ===============================
function send(
DecoderCustomTypes.SendParam calldata _sendParam,
DecoderCustomTypes.MessagingFee calldata, /*_fee*/
address _refundAddress
) external pure virtual returns (bytes memory sensitiveArguments) {
// Sanitize Message.
if (_sendParam.composeMsg.length > 0) {
revert OFTDecoderAndSanitizer__NonZeroMessage();
}
if (_sendParam.oftCmd.length > 0) {
revert OFTDecoderAndSanitizer__NonZeroOFTCommand();
}
sensitiveArguments =
abi.encodePacked(address(uint160(_sendParam.dstEid)), address(bytes20(_sendParam.to << 96)), _refundAddress);
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
contract DecoderCustomTypes {
// ========================================= BALANCER =========================================
struct JoinPoolRequest {
address[] assets;
uint256[] maxAmountsIn;
bytes userData;
bool fromInternalBalance;
}
struct ExitPoolRequest {
address[] assets;
uint256[] minAmountsOut;
bytes userData;
bool toInternalBalance;
}
enum SwapKind {
GIVEN_IN,
GIVEN_OUT
}
struct SingleSwap {
bytes32 poolId;
SwapKind kind;
address assetIn;
address assetOut;
uint256 amount;
bytes userData;
}
struct FundManagement {
address sender;
bool fromInternalBalance;
address recipient;
bool toInternalBalance;
}
// ========================================= UNISWAP V3 =========================================
struct MintParams {
address token0;
address token1;
uint24 fee;
int24 tickLower;
int24 tickUpper;
uint256 amount0Desired;
uint256 amount1Desired;
uint256 amount0Min;
uint256 amount1Min;
address recipient;
uint256 deadline;
}
struct IncreaseLiquidityParams {
uint256 tokenId;
uint256 amount0Desired;
uint256 amount1Desired;
uint256 amount0Min;
uint256 amount1Min;
uint256 deadline;
}
struct DecreaseLiquidityParams {
uint256 tokenId;
uint128 liquidity;
uint256 amount0Min;
uint256 amount1Min;
uint256 deadline;
}
struct CollectParams {
uint256 tokenId;
address recipient;
uint128 amount0Max;
uint128 amount1Max;
}
struct ExactInputParams {
bytes path;
address recipient;
uint256 deadline;
uint256 amountIn;
uint256 amountOutMinimum;
}
struct PancakeSwapExactInputParams {
bytes path;
address recipient;
uint256 amountIn;
uint256 amountOutMinimum;
}
// ========================================= MORPHO BLUE =========================================
struct MarketParams {
address loanToken;
address collateralToken;
address oracle;
address irm;
uint256 lltv;
}
// ========================================= 1INCH =========================================
struct SwapDescription {
address srcToken;
address dstToken;
address payable srcReceiver;
address payable dstReceiver;
uint256 amount;
uint256 minReturnAmount;
uint256 flags;
}
// ========================================= PENDLE =========================================
struct TokenInput {
// TOKEN DATA
address tokenIn;
uint256 netTokenIn;
address tokenMintSy;
// AGGREGATOR DATA
address pendleSwap;
SwapData swapData;
}
struct TokenOutput {
// TOKEN DATA
address tokenOut;
uint256 minTokenOut;
address tokenRedeemSy;
// AGGREGATOR DATA
address pendleSwap;
SwapData swapData;
}
struct ApproxParams {
uint256 guessMin;
uint256 guessMax;
uint256 guessOffchain; // pass 0 in to skip this variable
uint256 maxIteration; // every iteration, the diff between guessMin and guessMax will be divided by 2
uint256 eps; // the max eps between the returned result & the correct result, base 1e18. Normally this number will be set
// to 1e15 (1e18/1000 = 0.1%)
}
struct SwapData {
SwapType swapType;
address extRouter;
bytes extCalldata;
bool needScale;
}
enum SwapType {
NONE,
KYBERSWAP,
ONE_INCH,
// ETH_WETH not used in Aggregator
ETH_WETH
}
struct LimitOrderData {
address limitRouter;
uint256 epsSkipMarket; // only used for swap operations, will be ignored otherwise
FillOrderParams[] normalFills;
FillOrderParams[] flashFills;
bytes optData;
}
struct FillOrderParams {
Order order;
bytes signature;
uint256 makingAmount;
}
struct Order {
uint256 salt;
uint256 expiry;
uint256 nonce;
OrderType orderType;
address token;
address YT;
address maker;
address receiver;
uint256 makingAmount;
uint256 lnImpliedRate;
uint256 failSafeRate;
bytes permit;
}
enum OrderType {
SY_FOR_PT,
PT_FOR_SY,
SY_FOR_YT,
YT_FOR_SY
}
// ========================================= EIGEN LAYER =========================================
struct QueuedWithdrawalParams {
// Array of strategies that the QueuedWithdrawal contains
address[] strategies;
// Array containing the amount of shares in each Strategy in the `strategies` array
uint256[] shares;
// The address of the withdrawer
address withdrawer;
}
struct Withdrawal {
// The address that originated the Withdrawal
address staker;
// The address that the staker was delegated to at the time that the Withdrawal was created
address delegatedTo;
// The address that can complete the Withdrawal + will receive funds when completing the withdrawal
address withdrawer;
// Nonce used to guarantee that otherwise identical withdrawals have unique hashes
uint256 nonce;
// Block number when the Withdrawal was created
uint32 startBlock;
// Array of strategies that the Withdrawal contains
address[] strategies;
// Array containing the amount of shares in each Strategy in the `strategies` array
uint256[] shares;
}
struct SignatureWithExpiry {
// the signature itself, formatted as a single bytes object
bytes signature;
// the expiration timestamp (UTC) of the signature
uint256 expiry;
}
// ========================================= CCIP =========================================
// If extraArgs is empty bytes, the default is 200k gas limit.
struct EVM2AnyMessage {
bytes receiver; // abi.encode(receiver address) for dest EVM chains
bytes data; // Data payload
EVMTokenAmount[] tokenAmounts; // Token transfers
address feeToken; // Address of feeToken. address(0) means you will send msg.value.
bytes extraArgs; // Populate this with _argsToBytes(EVMExtraArgsV2)
}
/// @dev RMN depends on this struct, if changing, please notify the RMN maintainers.
struct EVMTokenAmount {
address token; // token address on the local chain.
uint256 amount; // Amount of tokens.
}
struct EVMExtraArgsV1 {
uint256 gasLimit;
}
// ========================================= OFT =========================================
struct SendParam {
uint32 dstEid; // Destination endpoint ID.
bytes32 to; // Recipient address.
uint256 amountLD; // Amount to send in local decimals.
uint256 minAmountLD; // Minimum amount to send in local decimals.
bytes extraOptions; // Additional options supplied by the caller to be used in the LayerZero message.
bytes composeMsg; // The composed message for the send() operation.
bytes oftCmd; // The OFT command to be executed, unused in default OFT implementations.
}
struct MessagingFee {
uint256 nativeFee;
uint256 lzTokenFee;
}
// ========================================= L1StandardBridge =========================================
struct WithdrawalTransaction {
uint256 nonce;
address sender;
address target;
uint256 value;
uint256 gasLimit;
bytes data;
}
struct OutputRootProof {
bytes32 version;
bytes32 stateRoot;
bytes32 messagePasserStorageRoot;
bytes32 latestBlockhash;
}
// ========================================= Mantle L1StandardBridge =========================================
struct MantleWithdrawalTransaction {
uint256 nonce;
address sender;
address target;
uint256 mntValue;
uint256 value;
uint256 gasLimit;
bytes data;
}
// ========================================= Linea Bridge =========================================
struct ClaimMessageWithProofParams {
bytes32[] proof;
uint256 messageNumber;
uint32 leafIndex;
address from;
address to;
uint256 fee;
uint256 value;
address payable feeRecipient;
bytes32 merkleRoot;
bytes data;
}
// ========================================= Scroll Bridge =========================================
struct L2MessageProof {
uint256 batchIndex;
bytes merkleProof;
}
// ========================================= Camelot V3 =========================================
struct CamelotMintParams {
address token0;
address token1;
int24 tickLower;
int24 tickUpper;
uint256 amount0Desired;
uint256 amount1Desired;
uint256 amount0Min;
uint256 amount1Min;
address recipient;
uint256 deadline;
}
// ========================================= Velodrome V3 =========================================
struct VelodromeMintParams {
address token0;
address token1;
int24 tickSpacing;
int24 tickLower;
int24 tickUpper;
uint256 amount0Desired;
uint256 amount1Desired;
uint256 amount0Min;
uint256 amount1Min;
address recipient;
uint256 deadline;
uint160 sqrtPriceX96;
}
// ========================================= Karak =========================================
struct QueuedWithdrawal {
address staker;
address delegatedTo;
uint256 nonce;
uint256 start;
WithdrawRequest request;
}
struct WithdrawRequest {
address[] vaults;
uint256[] shares;
address withdrawer;
}
}{
"remappings": [
"@solmate/=lib/solmate/src/",
"@forge-std/=lib/forge-std/src/",
"@ds-test/=lib/forge-std/lib/ds-test/src/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"@openzeppelin/=lib/openzeppelin-contracts/",
"@ccip/=lib/ccip/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"LayerZero-v2/=lib/LayerZero-v2/",
"ccip/=lib/ccip/contracts/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"solmate/=lib/solmate/src/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "london",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_boringVault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BaseDecoderAndSanitizer__FunctionSelectorNotSupported","type":"error"},{"inputs":[],"name":"EigenLayerLSTStakingDecoderAndSanitizer__CanOnlyReceiveAsTokens","type":"error"},{"inputs":[],"name":"KarakDecoderAndSanitizer__InvalidRequestsLength","type":"error"},{"inputs":[],"name":"OFTDecoderAndSanitizer__NonZeroMessage","type":"error"},{"inputs":[],"name":"OFTDecoderAndSanitizer__NonZeroOFTCommand","type":"error"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"bridgeERC20To","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"bridgeETHTo","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"bridgeETHTo","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"bridgeToken","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"feeAsset","type":"address"}],"name":"claimFees","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"_feeRecipient","type":"address"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimMessage","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"messageNumber","type":"uint256"},{"internalType":"uint32","name":"leafIndex","type":"uint32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address payable","name":"feeRecipient","type":"address"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct DecoderCustomTypes.ClaimMessageWithProofParams","name":"_claimMessageWithProof","type":"tuple"}],"name":"claimMessageWithProof","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"address","name":"delegatedTo","type":"address"},{"internalType":"address","name":"withdrawer","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint32","name":"startBlock","type":"uint32"},{"internalType":"address[]","name":"strategies","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"}],"internalType":"struct DecoderCustomTypes.Withdrawal[]","name":"withdrawals","type":"tuple[]"},{"internalType":"address[][]","name":"tokens","type":"address[][]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bool[]","name":"receiveAsTokens","type":"bool[]"}],"name":"completeQueuedWithdrawals","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"expiry","type":"uint256"}],"internalType":"struct DecoderCustomTypes.SignatureWithExpiry","name":"","type":"tuple"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"delegateTo","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"depositERC20","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_for","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"depositFor","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"strategy","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"depositIntoStrategy","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"mntValue","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct DecoderCustomTypes.MantleWithdrawalTransaction","name":"_tx","type":"tuple"}],"name":"finalizeWithdrawalTransaction","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct DecoderCustomTypes.WithdrawalTransaction","name":"_tx","type":"tuple"}],"name":"finalizeWithdrawalTransaction","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"address","name":"delegatedTo","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"components":[{"internalType":"address[]","name":"vaults","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"},{"internalType":"address","name":"withdrawer","type":"address"}],"internalType":"struct DecoderCustomTypes.WithdrawRequest","name":"request","type":"tuple"}],"internalType":"struct DecoderCustomTypes.QueuedWithdrawal[]","name":"startedWithdrawals","type":"tuple[]"}],"name":"finishWithdraw","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"gimmieShares","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct DecoderCustomTypes.WithdrawalTransaction","name":"_tx","type":"tuple"},{"internalType":"uint256","name":"","type":"uint256"},{"components":[{"internalType":"bytes32","name":"version","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"},{"internalType":"bytes32","name":"messagePasserStorageRoot","type":"bytes32"},{"internalType":"bytes32","name":"latestBlockhash","type":"bytes32"}],"internalType":"struct DecoderCustomTypes.OutputRootProof","name":"","type":"tuple"},{"internalType":"bytes[]","name":"","type":"bytes[]"}],"name":"proveWithdrawalTransaction","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"mntValue","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct DecoderCustomTypes.MantleWithdrawalTransaction","name":"_tx","type":"tuple"},{"internalType":"uint256","name":"","type":"uint256"},{"components":[{"internalType":"bytes32","name":"version","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"},{"internalType":"bytes32","name":"messagePasserStorageRoot","type":"bytes32"},{"internalType":"bytes32","name":"latestBlockhash","type":"bytes32"}],"internalType":"struct DecoderCustomTypes.OutputRootProof","name":"","type":"tuple"},{"internalType":"bytes[]","name":"","type":"bytes[]"}],"name":"proveWithdrawalTransaction","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"address[]","name":"strategies","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"},{"internalType":"address","name":"withdrawer","type":"address"}],"internalType":"struct DecoderCustomTypes.QueuedWithdrawalParams[]","name":"queuedWithdrawalParams","type":"tuple[]"}],"name":"queueWithdrawals","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"},{"components":[{"internalType":"uint256","name":"batchIndex","type":"uint256"},{"internalType":"bytes","name":"merkleProof","type":"bytes"}],"internalType":"struct DecoderCustomTypes.L2MessageProof","name":"","type":"tuple"}],"name":"relayMessageWithProof","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"returnShares","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"uint256","name":"amountLD","type":"uint256"},{"internalType":"uint256","name":"minAmountLD","type":"uint256"},{"internalType":"bytes","name":"extraOptions","type":"bytes"},{"internalType":"bytes","name":"composeMsg","type":"bytes"},{"internalType":"bytes","name":"oftCmd","type":"bytes"}],"internalType":"struct DecoderCustomTypes.SendParam","name":"_sendParam","type":"tuple"},{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct DecoderCustomTypes.MessagingFee","name":"","type":"tuple"},{"internalType":"address","name":"_refundAddress","type":"address"}],"name":"send","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"sendMessage","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"sendMessage","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"address[]","name":"vaults","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"},{"internalType":"address","name":"withdrawer","type":"address"}],"internalType":"struct DecoderCustomTypes.WithdrawRequest[]","name":"requests","type":"tuple[]"}],"name":"startWithdraw","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"undelegate","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"withdraw","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawERC20","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"withdrawNativeFromDrone","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawNonBoringToken","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"}]Contract Creation Code
60a060405234801561001057600080fd5b506040516119de3803806119de83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051611956610088600039600050506119566000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80638c3152e911610125578063d69b2b1b116100ad578063e7a050aa1161007c578063e7a050aa14610391578063eea9064b146103ed578063f219fa661461036b578063f3fef3a31461022a578063f45346dc146102eb57610211565b8063d69b2b1b146103ca578063da3ef9d2146103d8578063da8be86414610279578063e11013dd146103df57610211565b8063a93a4af9116100f4578063a93a4af91461036b578063b2267a7b1461037e578063b3db428b14610391578063c311b6fc146103a4578063c7c7f5b3146103b757610211565b80638c3152e91461033757806392dca407146103455780639f3ce55a14610358578063a9059cbb1461022a57610211565b80634870496f116101a85780636463fb2a116101775780636463fb2a1461031157806369328dec146102eb5780637fb2a0a11461022a57806386e9a1f7146103245780638b1980251461022a57610211565b80634870496f146102c5578063491e0936146102d8578063522ea81a146102eb578063540abf73146102fe57610211565b806315a0ea6a116101e457806315a0ea6a1461027957806324ca60181461028c5780632e71d4a41461029f57806333404396146102b257610211565b8063095ea7b31461022a57806309f0e0c21461022a5780630dd8dd02146102535780630efe6a8b14610266575b604051633790be8760e21b815260040160405180910390fd5b61023d610238366004610e08565b6103fb565b60405161024a9190610e58565b60405180910390f35b61023d610261366004610ed6565b610425565b61023d610274366004610f17565b610568565b61023d610287366004610f4c565b610593565b61023d61029a366004610fca565b6105bc565b61023d6102ad366004611052565b6105e9565b61023d6102c036600461108e565b61061c565b61023d6102d3366004611175565b6108a4565b61023d6102e63660046111e9565b6108d7565b61023d6102f936600461127e565b61090b565b61023d61030c3660046112c0565b610920565b61023d61031f366004611355565b610953565b61023d610332366004610ed6565b610997565b61023d6102ad366004611390565b61023d610353366004610ed6565b610ba1565b61023d6103663660046113c4565b610cde565b61023d61037936600461141f565b610d0a565b61023d61038c366004611465565b610d1f565b61023d61039f3660046114c8565b610d32565b61023d6103b236600461151b565b610d47565b61023d6103c53660046115bc565b610d5c565b61023d6102d3366004611613565b606061023d565b61023d61036636600461164e565b61023d610274366004611698565b60608260405160200161040e91906116f0565b604051602081830303815290604052905092915050565b606060005b828110156105615760005b84848381811061044757610447611708565b9050602002810190610459919061171e565b610463908061173e565b90508110156104f5578285858481811061047f5761047f611708565b9050602002810190610491919061171e565b61049b908061173e565b838181106104ab576104ab611708565b90506020020160208101906104c09190610f4c565b6040516020016104d1929190611787565b604051602081830303815290604052925080806104ed906117b9565b915050610435565b508184848381811061050957610509611708565b905060200281019061051b919061171e565b61052c906060810190604001610f4c565b60405160200161053d929190611787565b60405160208183030381529060405291508080610559906117b9565b91505061042a565b5092915050565b60608360405160200161057b91906116f0565b60405160208183030381529060405290509392505050565b6060816040516020016105a691906116f0565b6040516020818303038152906040529050919050565b6060846040516020016105cf91906116f0565b604051602081830303815290604052905095945050505050565b60606105fb6040830160208401610f4c565b61060b6060840160408501610f4c565b6040516020016105a69291906117e0565b606060005b888110156108975783838281811061063b5761063b611708565b90506020020160208101906106509190611802565b61066d5760405163cfd3883960e01b815260040160405180910390fd5b818a8a8381811061068057610680611708565b90506020028101906106929190611824565b6106a0906020810190610f4c565b8b8b848181106106b2576106b2611708565b90506020028101906106c49190611824565b6106d5906040810190602001610f4c565b8c8c858181106106e7576106e7611708565b90506020028101906106f99190611824565b61070a906060810190604001610f4c565b60405160200161071d949392919061183a565b604051602081830303815290604052915060005b8a8a8381811061074357610743611708565b90506020028101906107559190611824565b6107639060a081019061173e565b90508110156107f957828b8b8481811061077f5761077f611708565b90506020028101906107919190611824565b61079f9060a081019061173e565b838181106107af576107af611708565b90506020020160208101906107c49190610f4c565b6040516020016107d5929190611787565b604051602081830303815290604052925080806107f1906117b9565b915050610731565b5060005b87811015610884578289898481811061081857610818611708565b905060200281019061082a919061173e565b8381811061083a5761083a611708565b905060200201602081019061084f9190610f4c565b604051602001610860929190611787565b6040516020818303038152906040529250808061087c906117b9565b9150506107fd565b508061088f816117b9565b915050610621565b5098975050505050505050565b60606108b66040870160208801610f4c565b6108c66060880160408901610f4c565b6040516020016105cf9291906117e0565b60608888866040516020016108ee9392919061187f565b604051602081830303815290604052905098975050505050505050565b6060838260405160200161057b9291906117e0565b60608787876040516020016109379392919061187f565b6040516020818303038152906040529050979650505050505050565b606061096460808301838301610f4c565b61097460a0840160808501610f4c565b610985610100850160e08601610f4c565b6040516020016105a69392919061187f565b60606001821415806109e85750828260008181106109b7576109b7611708565b90506020028101906109c991906118a9565b6109d790608081019061171e565b6109e1908061173e565b9050600114155b80610a36575082826000818110610a0157610a01611708565b9050602002810190610a1391906118a9565b610a2190608081019061171e565b610a2f90602081019061173e565b9050600114155b15610a54576040516311fe0e6960e01b815260040160405180910390fd5b82826000818110610a6757610a67611708565b9050602002810190610a7991906118a9565b610a87906020810190610f4c565b83836000818110610a9a57610a9a611708565b9050602002810190610aac91906118a9565b610abd906040810190602001610f4c565b84846000818110610ad057610ad0611708565b9050602002810190610ae291906118a9565b610af090608081019061171e565b610afa908061173e565b6000818110610b0b57610b0b611708565b9050602002016020810190610b209190610f4c565b85856000818110610b3357610b33611708565b9050602002810190610b4591906118a9565b610b5390608081019061171e565b610b64906060810190604001610f4c565b6040516001600160601b0319606095861b8116602083015293851b8416603482015291841b8316604883015290921b16605c82015260700161040e565b6060600182141580610be4575082826000818110610bc157610bc1611708565b9050602002810190610bd3919061171e565b610bdd908061173e565b9050600114155b80610c24575082826000818110610bfd57610bfd611708565b9050602002810190610c0f919061171e565b610c1d90602081019061173e565b9050600114155b15610c42576040516311fe0e6960e01b815260040160405180910390fd5b82826000818110610c5557610c55611708565b9050602002810190610c67919061171e565b610c71908061173e565b6000818110610c8257610c82611708565b9050602002016020810190610c979190610f4c565b83836000818110610caa57610caa611708565b9050602002810190610cbc919061171e565b610ccd906060810190604001610f4c565b60405160200161040e9291906117e0565b606084604051602001610cf191906116f0565b6040516020818303038152906040529050949350505050565b60608484604051602001610cf19291906117e0565b6060856040516020016105cf91906116f0565b6060838360405160200161057b9291906117e0565b606087876040516020016109379291906117e0565b60606000610d6d60a08601866118bf565b90501115610d8e57604051633483a65b60e11b815260040160405180910390fd5b6000610d9d60c08601866118bf565b90501115610dbe57604051630d90fb5b60e21b815260040160405180910390fd5b610dcb6020850185611905565b63ffffffff1660608560200135901b60601c8360405160200161057b9392919061187f565b6001600160a01b0381168114610e0557600080fd5b50565b60008060408385031215610e1b57600080fd5b8235610e2681610df0565b946020939093013593505050565b60005b83811015610e4f578181015183820152602001610e37565b50506000910152565b6020815260008251806020840152610e77816040850160208701610e34565b601f01601f19169190910160400192915050565b60008083601f840112610e9d57600080fd5b5081356001600160401b03811115610eb457600080fd5b6020830191508360208260051b8501011115610ecf57600080fd5b9250929050565b60008060208385031215610ee957600080fd5b82356001600160401b03811115610eff57600080fd5b610f0b85828601610e8b565b90969095509350505050565b600080600060608486031215610f2c57600080fd5b8335610f3781610df0565b95602085013595506040909401359392505050565b600060208284031215610f5e57600080fd5b8135610f6981610df0565b9392505050565b803563ffffffff81168114610f8457600080fd5b919050565b60008083601f840112610f9b57600080fd5b5081356001600160401b03811115610fb257600080fd5b602083019150836020828501011115610ecf57600080fd5b600080600080600060808688031215610fe257600080fd5b853594506020860135610ff481610df0565b935061100260408701610f70565b925060608601356001600160401b0381111561101d57600080fd5b61102988828901610f89565b969995985093965092949392505050565b600060e0828403121561104c57600080fd5b50919050565b60006020828403121561106457600080fd5b81356001600160401b0381111561107a57600080fd5b6110868482850161103a565b949350505050565b6000806000806000806000806080898b0312156110aa57600080fd5b88356001600160401b03808211156110c157600080fd5b6110cd8c838d01610e8b565b909a50985060208b01359150808211156110e657600080fd5b6110f28c838d01610e8b565b909850965060408b013591508082111561110b57600080fd5b6111178c838d01610e8b565b909650945060608b013591508082111561113057600080fd5b5061113d8b828c01610e8b565b999c989b5096995094979396929594505050565b600060c0828403121561104c57600080fd5b60006080828403121561104c57600080fd5b600080600080600060e0868803121561118d57600080fd5b85356001600160401b03808211156111a457600080fd5b6111b089838a01611151565b9650602088013595506111c68960408a01611163565b945060c08801359150808211156111dc57600080fd5b5061102988828901610e8b565b60008060008060008060008060e0898b03121561120557600080fd5b883561121081610df0565b9750602089013561122081610df0565b96506040890135955060608901359450608089013561123e81610df0565b935060a08901356001600160401b0381111561125957600080fd5b6112658b828c01610f89565b999c989b50969995989497949560c00135949350505050565b60008060006060848603121561129357600080fd5b833561129e81610df0565b92506020840135915060408401356112b581610df0565b809150509250925092565b600080600080600080600060c0888a0312156112db57600080fd5b87356112e681610df0565b965060208801356112f681610df0565b9550604088013561130681610df0565b94506060880135935061131b60808901610f70565b925060a08801356001600160401b0381111561133657600080fd5b6113428a828b01610f89565b989b979a50959850939692959293505050565b60006020828403121561136757600080fd5b81356001600160401b0381111561137d57600080fd5b82016101408185031215610f6957600080fd5b6000602082840312156113a257600080fd5b81356001600160401b038111156113b857600080fd5b61108684828501611151565b600080600080606085870312156113da57600080fd5b84356113e581610df0565b93506020850135925060408501356001600160401b0381111561140757600080fd5b61141387828801610f89565b95989497509550505050565b6000806000806080858703121561143557600080fd5b843561144081610df0565b9350602085013561145081610df0565b93969395505050506040820135916060013590565b60008060008060006080868803121561147d57600080fd5b853561148881610df0565b94506020860135935060408601356001600160401b038111156114aa57600080fd5b6114b688828901610f89565b96999598509660600135949350505050565b6000806000606084860312156114dd57600080fd5b83356114e881610df0565b925060208401356114f881610df0565b929592945050506040919091013590565b60006040828403121561104c57600080fd5b600080600080600080600060c0888a03121561153657600080fd5b873561154181610df0565b9650602088013561155181610df0565b9550604088013594506060880135935060808801356001600160401b038082111561157b57600080fd5b6115878b838c01610f89565b909550935060a08a01359150808211156115a057600080fd5b506115ad8a828b01611509565b91505092959891949750929550565b6000806000608084860312156115d157600080fd5b83356001600160401b038111156115e757600080fd5b6115f38682870161103a565b9350506116038560208601611509565b915060608401356112b581610df0565b600080600080600060e0868803121561162b57600080fd5b85356001600160401b038082111561164257600080fd5b6111b089838a0161103a565b6000806000806060858703121561166457600080fd5b843561166f81610df0565b935061167d60208601610f70565b925060408501356001600160401b0381111561140757600080fd5b6000806000606084860312156116ad57600080fd5b83356116b881610df0565b925060208401356001600160401b038111156116d357600080fd5b6116df86828701611509565b925050604084013590509250925092565b60609190911b6001600160601b031916815260140190565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261173457600080fd5b9190910192915050565b6000808335601e1984360301811261175557600080fd5b8301803591506001600160401b0382111561176f57600080fd5b6020019150600581901b3603821315610ecf57600080fd5b60008351611799818460208801610e34565b60609390931b6001600160601b0319169190920190815260140192915050565b6000600182016117d957634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160601b0319606093841b811682529190921b16601482015260280190565b60006020828403121561181457600080fd5b81358015158114610f6957600080fd5b6000823560de1983360301811261173457600080fd5b6000855161184c818460208a01610e34565b606095861b6001600160601b03199081169390910192835293851b8416601483015250921b166028820152603c01919050565b6001600160601b0319606094851b8116825292841b83166014820152921b166028820152603c0190565b60008235609e1983360301811261173457600080fd5b6000808335601e198436030181126118d657600080fd5b8301803591506001600160401b038211156118f057600080fd5b602001915036819003821315610ecf57600080fd5b60006020828403121561191757600080fd5b610f6982610f7056fea2646970667358221220a26bb3a108715eb70f552653f8bd925f4d3fbd3851d9f0f6fc6c3ec9937e74bb64736f6c63430008150033000000000000000000000000f8203a33027607d2c82dfd67b46986096257dfa5
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c80638c3152e911610125578063d69b2b1b116100ad578063e7a050aa1161007c578063e7a050aa14610391578063eea9064b146103ed578063f219fa661461036b578063f3fef3a31461022a578063f45346dc146102eb57610211565b8063d69b2b1b146103ca578063da3ef9d2146103d8578063da8be86414610279578063e11013dd146103df57610211565b8063a93a4af9116100f4578063a93a4af91461036b578063b2267a7b1461037e578063b3db428b14610391578063c311b6fc146103a4578063c7c7f5b3146103b757610211565b80638c3152e91461033757806392dca407146103455780639f3ce55a14610358578063a9059cbb1461022a57610211565b80634870496f116101a85780636463fb2a116101775780636463fb2a1461031157806369328dec146102eb5780637fb2a0a11461022a57806386e9a1f7146103245780638b1980251461022a57610211565b80634870496f146102c5578063491e0936146102d8578063522ea81a146102eb578063540abf73146102fe57610211565b806315a0ea6a116101e457806315a0ea6a1461027957806324ca60181461028c5780632e71d4a41461029f57806333404396146102b257610211565b8063095ea7b31461022a57806309f0e0c21461022a5780630dd8dd02146102535780630efe6a8b14610266575b604051633790be8760e21b815260040160405180910390fd5b61023d610238366004610e08565b6103fb565b60405161024a9190610e58565b60405180910390f35b61023d610261366004610ed6565b610425565b61023d610274366004610f17565b610568565b61023d610287366004610f4c565b610593565b61023d61029a366004610fca565b6105bc565b61023d6102ad366004611052565b6105e9565b61023d6102c036600461108e565b61061c565b61023d6102d3366004611175565b6108a4565b61023d6102e63660046111e9565b6108d7565b61023d6102f936600461127e565b61090b565b61023d61030c3660046112c0565b610920565b61023d61031f366004611355565b610953565b61023d610332366004610ed6565b610997565b61023d6102ad366004611390565b61023d610353366004610ed6565b610ba1565b61023d6103663660046113c4565b610cde565b61023d61037936600461141f565b610d0a565b61023d61038c366004611465565b610d1f565b61023d61039f3660046114c8565b610d32565b61023d6103b236600461151b565b610d47565b61023d6103c53660046115bc565b610d5c565b61023d6102d3366004611613565b606061023d565b61023d61036636600461164e565b61023d610274366004611698565b60608260405160200161040e91906116f0565b604051602081830303815290604052905092915050565b606060005b828110156105615760005b84848381811061044757610447611708565b9050602002810190610459919061171e565b610463908061173e565b90508110156104f5578285858481811061047f5761047f611708565b9050602002810190610491919061171e565b61049b908061173e565b838181106104ab576104ab611708565b90506020020160208101906104c09190610f4c565b6040516020016104d1929190611787565b604051602081830303815290604052925080806104ed906117b9565b915050610435565b508184848381811061050957610509611708565b905060200281019061051b919061171e565b61052c906060810190604001610f4c565b60405160200161053d929190611787565b60405160208183030381529060405291508080610559906117b9565b91505061042a565b5092915050565b60608360405160200161057b91906116f0565b60405160208183030381529060405290509392505050565b6060816040516020016105a691906116f0565b6040516020818303038152906040529050919050565b6060846040516020016105cf91906116f0565b604051602081830303815290604052905095945050505050565b60606105fb6040830160208401610f4c565b61060b6060840160408501610f4c565b6040516020016105a69291906117e0565b606060005b888110156108975783838281811061063b5761063b611708565b90506020020160208101906106509190611802565b61066d5760405163cfd3883960e01b815260040160405180910390fd5b818a8a8381811061068057610680611708565b90506020028101906106929190611824565b6106a0906020810190610f4c565b8b8b848181106106b2576106b2611708565b90506020028101906106c49190611824565b6106d5906040810190602001610f4c565b8c8c858181106106e7576106e7611708565b90506020028101906106f99190611824565b61070a906060810190604001610f4c565b60405160200161071d949392919061183a565b604051602081830303815290604052915060005b8a8a8381811061074357610743611708565b90506020028101906107559190611824565b6107639060a081019061173e565b90508110156107f957828b8b8481811061077f5761077f611708565b90506020028101906107919190611824565b61079f9060a081019061173e565b838181106107af576107af611708565b90506020020160208101906107c49190610f4c565b6040516020016107d5929190611787565b604051602081830303815290604052925080806107f1906117b9565b915050610731565b5060005b87811015610884578289898481811061081857610818611708565b905060200281019061082a919061173e565b8381811061083a5761083a611708565b905060200201602081019061084f9190610f4c565b604051602001610860929190611787565b6040516020818303038152906040529250808061087c906117b9565b9150506107fd565b508061088f816117b9565b915050610621565b5098975050505050505050565b60606108b66040870160208801610f4c565b6108c66060880160408901610f4c565b6040516020016105cf9291906117e0565b60608888866040516020016108ee9392919061187f565b604051602081830303815290604052905098975050505050505050565b6060838260405160200161057b9291906117e0565b60608787876040516020016109379392919061187f565b6040516020818303038152906040529050979650505050505050565b606061096460808301838301610f4c565b61097460a0840160808501610f4c565b610985610100850160e08601610f4c565b6040516020016105a69392919061187f565b60606001821415806109e85750828260008181106109b7576109b7611708565b90506020028101906109c991906118a9565b6109d790608081019061171e565b6109e1908061173e565b9050600114155b80610a36575082826000818110610a0157610a01611708565b9050602002810190610a1391906118a9565b610a2190608081019061171e565b610a2f90602081019061173e565b9050600114155b15610a54576040516311fe0e6960e01b815260040160405180910390fd5b82826000818110610a6757610a67611708565b9050602002810190610a7991906118a9565b610a87906020810190610f4c565b83836000818110610a9a57610a9a611708565b9050602002810190610aac91906118a9565b610abd906040810190602001610f4c565b84846000818110610ad057610ad0611708565b9050602002810190610ae291906118a9565b610af090608081019061171e565b610afa908061173e565b6000818110610b0b57610b0b611708565b9050602002016020810190610b209190610f4c565b85856000818110610b3357610b33611708565b9050602002810190610b4591906118a9565b610b5390608081019061171e565b610b64906060810190604001610f4c565b6040516001600160601b0319606095861b8116602083015293851b8416603482015291841b8316604883015290921b16605c82015260700161040e565b6060600182141580610be4575082826000818110610bc157610bc1611708565b9050602002810190610bd3919061171e565b610bdd908061173e565b9050600114155b80610c24575082826000818110610bfd57610bfd611708565b9050602002810190610c0f919061171e565b610c1d90602081019061173e565b9050600114155b15610c42576040516311fe0e6960e01b815260040160405180910390fd5b82826000818110610c5557610c55611708565b9050602002810190610c67919061171e565b610c71908061173e565b6000818110610c8257610c82611708565b9050602002016020810190610c979190610f4c565b83836000818110610caa57610caa611708565b9050602002810190610cbc919061171e565b610ccd906060810190604001610f4c565b60405160200161040e9291906117e0565b606084604051602001610cf191906116f0565b6040516020818303038152906040529050949350505050565b60608484604051602001610cf19291906117e0565b6060856040516020016105cf91906116f0565b6060838360405160200161057b9291906117e0565b606087876040516020016109379291906117e0565b60606000610d6d60a08601866118bf565b90501115610d8e57604051633483a65b60e11b815260040160405180910390fd5b6000610d9d60c08601866118bf565b90501115610dbe57604051630d90fb5b60e21b815260040160405180910390fd5b610dcb6020850185611905565b63ffffffff1660608560200135901b60601c8360405160200161057b9392919061187f565b6001600160a01b0381168114610e0557600080fd5b50565b60008060408385031215610e1b57600080fd5b8235610e2681610df0565b946020939093013593505050565b60005b83811015610e4f578181015183820152602001610e37565b50506000910152565b6020815260008251806020840152610e77816040850160208701610e34565b601f01601f19169190910160400192915050565b60008083601f840112610e9d57600080fd5b5081356001600160401b03811115610eb457600080fd5b6020830191508360208260051b8501011115610ecf57600080fd5b9250929050565b60008060208385031215610ee957600080fd5b82356001600160401b03811115610eff57600080fd5b610f0b85828601610e8b565b90969095509350505050565b600080600060608486031215610f2c57600080fd5b8335610f3781610df0565b95602085013595506040909401359392505050565b600060208284031215610f5e57600080fd5b8135610f6981610df0565b9392505050565b803563ffffffff81168114610f8457600080fd5b919050565b60008083601f840112610f9b57600080fd5b5081356001600160401b03811115610fb257600080fd5b602083019150836020828501011115610ecf57600080fd5b600080600080600060808688031215610fe257600080fd5b853594506020860135610ff481610df0565b935061100260408701610f70565b925060608601356001600160401b0381111561101d57600080fd5b61102988828901610f89565b969995985093965092949392505050565b600060e0828403121561104c57600080fd5b50919050565b60006020828403121561106457600080fd5b81356001600160401b0381111561107a57600080fd5b6110868482850161103a565b949350505050565b6000806000806000806000806080898b0312156110aa57600080fd5b88356001600160401b03808211156110c157600080fd5b6110cd8c838d01610e8b565b909a50985060208b01359150808211156110e657600080fd5b6110f28c838d01610e8b565b909850965060408b013591508082111561110b57600080fd5b6111178c838d01610e8b565b909650945060608b013591508082111561113057600080fd5b5061113d8b828c01610e8b565b999c989b5096995094979396929594505050565b600060c0828403121561104c57600080fd5b60006080828403121561104c57600080fd5b600080600080600060e0868803121561118d57600080fd5b85356001600160401b03808211156111a457600080fd5b6111b089838a01611151565b9650602088013595506111c68960408a01611163565b945060c08801359150808211156111dc57600080fd5b5061102988828901610e8b565b60008060008060008060008060e0898b03121561120557600080fd5b883561121081610df0565b9750602089013561122081610df0565b96506040890135955060608901359450608089013561123e81610df0565b935060a08901356001600160401b0381111561125957600080fd5b6112658b828c01610f89565b999c989b50969995989497949560c00135949350505050565b60008060006060848603121561129357600080fd5b833561129e81610df0565b92506020840135915060408401356112b581610df0565b809150509250925092565b600080600080600080600060c0888a0312156112db57600080fd5b87356112e681610df0565b965060208801356112f681610df0565b9550604088013561130681610df0565b94506060880135935061131b60808901610f70565b925060a08801356001600160401b0381111561133657600080fd5b6113428a828b01610f89565b989b979a50959850939692959293505050565b60006020828403121561136757600080fd5b81356001600160401b0381111561137d57600080fd5b82016101408185031215610f6957600080fd5b6000602082840312156113a257600080fd5b81356001600160401b038111156113b857600080fd5b61108684828501611151565b600080600080606085870312156113da57600080fd5b84356113e581610df0565b93506020850135925060408501356001600160401b0381111561140757600080fd5b61141387828801610f89565b95989497509550505050565b6000806000806080858703121561143557600080fd5b843561144081610df0565b9350602085013561145081610df0565b93969395505050506040820135916060013590565b60008060008060006080868803121561147d57600080fd5b853561148881610df0565b94506020860135935060408601356001600160401b038111156114aa57600080fd5b6114b688828901610f89565b96999598509660600135949350505050565b6000806000606084860312156114dd57600080fd5b83356114e881610df0565b925060208401356114f881610df0565b929592945050506040919091013590565b60006040828403121561104c57600080fd5b600080600080600080600060c0888a03121561153657600080fd5b873561154181610df0565b9650602088013561155181610df0565b9550604088013594506060880135935060808801356001600160401b038082111561157b57600080fd5b6115878b838c01610f89565b909550935060a08a01359150808211156115a057600080fd5b506115ad8a828b01611509565b91505092959891949750929550565b6000806000608084860312156115d157600080fd5b83356001600160401b038111156115e757600080fd5b6115f38682870161103a565b9350506116038560208601611509565b915060608401356112b581610df0565b600080600080600060e0868803121561162b57600080fd5b85356001600160401b038082111561164257600080fd5b6111b089838a0161103a565b6000806000806060858703121561166457600080fd5b843561166f81610df0565b935061167d60208601610f70565b925060408501356001600160401b0381111561140757600080fd5b6000806000606084860312156116ad57600080fd5b83356116b881610df0565b925060208401356001600160401b038111156116d357600080fd5b6116df86828701611509565b925050604084013590509250925092565b60609190911b6001600160601b031916815260140190565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261173457600080fd5b9190910192915050565b6000808335601e1984360301811261175557600080fd5b8301803591506001600160401b0382111561176f57600080fd5b6020019150600581901b3603821315610ecf57600080fd5b60008351611799818460208801610e34565b60609390931b6001600160601b0319169190920190815260140192915050565b6000600182016117d957634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160601b0319606093841b811682529190921b16601482015260280190565b60006020828403121561181457600080fd5b81358015158114610f6957600080fd5b6000823560de1983360301811261173457600080fd5b6000855161184c818460208a01610e34565b606095861b6001600160601b03199081169390910192835293851b8416601483015250921b166028820152603c01919050565b6001600160601b0319606094851b8116825292841b83166014820152921b166028820152603c0190565b60008235609e1983360301811261173457600080fd5b6000808335601e198436030181126118d657600080fd5b8301803591506001600160401b038211156118f057600080fd5b602001915036819003821315610ecf57600080fd5b60006020828403121561191757600080fd5b610f6982610f7056fea2646970667358221220a26bb3a108715eb70f552653f8bd925f4d3fbd3851d9f0f6fc6c3ec9937e74bb64736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f8203a33027607d2c82dfd67b46986096257dfa5
-----Decoded View---------------
Arg [0] : _boringVault (address): 0xf8203A33027607D2C82dFd67b46986096257dFA5
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f8203a33027607d2c82dfd67b46986096257dfa5
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.