More Info
Private Name Tags
ContractCreator
Multichain Info
4 addresses found via
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | Age | From | To | Amount | |
---|---|---|---|---|---|---|
17292467 | 2 mins ago | 0.09495392 S | ||||
17292419 | 2 mins ago | 0.10154925 S | ||||
17291942 | 5 mins ago | 0.47286202 S | ||||
17291707 | 7 mins ago | 0.51913226 S | ||||
17291559 | 8 mins ago | 0.03802226 S | ||||
17291332 | 9 mins ago | 0.11873287 S | ||||
17291111 | 11 mins ago | 0.98898273 S | ||||
17290441 | 15 mins ago | 1.57219757 S | ||||
17289867 | 19 mins ago | 0.12973876 S | ||||
17288900 | 25 mins ago | 0.09495392 S | ||||
17288093 | 31 mins ago | 0.03656579 S | ||||
17285976 | 45 mins ago | 0.0959107 S | ||||
17285880 | 45 mins ago | 0.88652503 S | ||||
17284792 | 53 mins ago | 0.16067554 S | ||||
17283288 | 1 hr ago | 0.10791202 S | ||||
17281917 | 1 hr ago | 0.14278898 S | ||||
17281497 | 1 hr ago | 0.03682598 S | ||||
17281471 | 1 hr ago | 3.65723012 S | ||||
17281365 | 1 hr ago | 0.10600804 S | ||||
17281050 | 1 hr ago | 0.1845459 S | ||||
17280960 | 1 hr ago | 0.13498036 S | ||||
17280858 | 1 hr ago | 1.74531796 S | ||||
17280730 | 1 hr ago | 0.0954172 S | ||||
17279520 | 1 hr ago | 0.09558958 S | ||||
17279470 | 1 hr ago | 0.1243644 S |
Loading...
Loading
Contract Name:
SendUln302
Compiler Version
v0.8.22+commit.4fc1097e
Optimization Enabled:
Yes with 20000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;import { Packet } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol";import { SetConfigParam } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol";import { ExecutorConfig } from "../../SendLibBase.sol";import { SendLibBaseE2, WorkerOptions } from "../../SendLibBaseE2.sol";import { UlnConfig } from "../UlnBase.sol";import { SendUlnBase } from "../SendUlnBase.sol";/// @dev This is a gluing contract. It simply parses the requests and forward to the super.impl() accordingly./// @dev In this case, it combines the logic of SendUlnBase and SendLibBaseE2contract SendUln302 is SendUlnBase, SendLibBaseE2 {uint32 internal constant CONFIG_TYPE_EXECUTOR = 1;uint32 internal constant CONFIG_TYPE_ULN = 2;error LZ_ULN_InvalidConfigType(uint32 configType);constructor(address _endpoint,uint256 _treasuryGasLimit,uint256 _treasuryGasForFeeCap) SendLibBaseE2(_endpoint, _treasuryGasLimit, _treasuryGasForFeeCap) {}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;import { IMessageLibManager } from "./IMessageLibManager.sol";import { IMessagingComposer } from "./IMessagingComposer.sol";import { IMessagingChannel } from "./IMessagingChannel.sol";import { IMessagingContext } from "./IMessagingContext.sol";struct MessagingParams {uint32 dstEid;bytes32 receiver;bytes message;bytes options;bool payInLzToken;}struct MessagingReceipt {bytes32 guid;uint64 nonce;MessagingFee fee;}struct MessagingFee {uint256 nativeFee;uint256 lzTokenFee;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol";import { SetConfigParam } from "./IMessageLibManager.sol";enum MessageLibType {Send,Receive,SendAndReceive}interface IMessageLib is IERC165 {function setConfig(address _oapp, SetConfigParam[] calldata _config) external;function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view returns (bytes memory config);function isSupportedEid(uint32 _eid) external view returns (bool);// message libs of same major version are compatiblefunction version() external view returns (uint64 major, uint8 minor, uint8 endpointVersion);function messageLibType() external view returns (MessageLibType);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;struct SetConfigParam {uint32 eid;uint32 configType;bytes config;}interface IMessageLibManager {struct Timeout {address lib;uint256 expiry;}event LibraryRegistered(address newLib);event DefaultSendLibrarySet(uint32 eid, address newLib);event DefaultReceiveLibrarySet(uint32 eid, address newLib);event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);event SendLibrarySet(address sender, uint32 eid, address newLib);event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);function registerLibrary(address _lib) external;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;interface IMessagingChannel {event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);function eid() external view returns (uint32);// this is an emergency function if a message cannot be verified for some reasons// required to provide _nextNonce to avoid race conditionfunction skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);function inboundPayloadHash(
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;interface IMessagingComposer {event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);event LzComposeAlert(address indexed from,address indexed to,address indexed executor,bytes32 guid,uint16 index,uint256 gas,uint256 value,bytes message,bytes extraData,bytes reason);function composeQueue(address _from,address _to,bytes32 _guid,uint16 _index) external view returns (bytes32 messageHash);
123456789// SPDX-License-Identifier: MITpragma solidity >=0.8.0;interface IMessagingContext {function isSendingMessage() external view returns (bool);function getSendContext() external view returns (uint32 dstEid, address sender);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;import { MessagingFee } from "./ILayerZeroEndpointV2.sol";import { IMessageLib } from "./IMessageLib.sol";struct Packet {uint64 nonce;uint32 srcEid;address sender;uint32 dstEid;bytes32 receiver;bytes32 guid;bytes message;}interface ISendLib is IMessageLib {function send(Packet calldata _packet,bytes calldata _options,bool _payInLzToken) external returns (MessagingFee memory, bytes memory encodedPacket);function quote(Packet calldata _packet,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;library AddressCast {error AddressCast_InvalidSizeForAddress();error AddressCast_InvalidAddress();function toBytes32(bytes calldata _addressBytes) internal pure returns (bytes32 result) {if (_addressBytes.length > 32) revert AddressCast_InvalidAddress();result = bytes32(_addressBytes);unchecked {uint256 offset = 32 - _addressBytes.length;result = result >> (offset * 8);}}function toBytes32(address _address) internal pure returns (bytes32 result) {result = bytes32(uint256(uint160(_address)));}function toBytes(bytes32 _addressBytes32, uint256 _size) internal pure returns (bytes memory result) {if (_size == 0 || _size > 32) revert AddressCast_InvalidSizeForAddress();result = new bytes(_size);unchecked {uint256 offset = 256 - _size * 8;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;library CalldataBytesLib {function toU8(bytes calldata _bytes, uint256 _start) internal pure returns (uint8) {return uint8(_bytes[_start]);}function toU16(bytes calldata _bytes, uint256 _start) internal pure returns (uint16) {unchecked {uint256 end = _start + 2;return uint16(bytes2(_bytes[_start:end]));}}function toU32(bytes calldata _bytes, uint256 _start) internal pure returns (uint32) {unchecked {uint256 end = _start + 4;return uint32(bytes4(_bytes[_start:end]));}}function toU64(bytes calldata _bytes, uint256 _start) internal pure returns (uint64) {unchecked {uint256 end = _start + 8;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";library Transfer {using SafeERC20 for IERC20;address internal constant ADDRESS_ZERO = address(0);error Transfer_NativeFailed(address _to, uint256 _value);error Transfer_ToAddressIsZero();function native(address _to, uint256 _value) internal {if (_to == ADDRESS_ZERO) revert Transfer_ToAddressIsZero();(bool success, ) = _to.call{ value: _value }("");if (!success) revert Transfer_NativeFailed(_to, _value);}function token(address _token, address _to, uint256 _value) internal {if (_to == ADDRESS_ZERO) revert Transfer_ToAddressIsZero();IERC20(_token).safeTransfer(_to, _value);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// modified from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/structs/BitMaps.solpragma solidity ^0.8.20;type BitMap256 is uint256;using BitMaps for BitMap256 global;library BitMaps {/*** @dev Returns whether the bit at `index` is set.*/function get(BitMap256 bitmap, uint8 index) internal pure returns (bool) {uint256 mask = 1 << index;return BitMap256.unwrap(bitmap) & mask != 0;}/*** @dev Sets the bit at `index`.*/function set(BitMap256 bitmap, uint8 index) internal pure returns (BitMap256) {uint256 mask = 1 << index;return BitMap256.wrap(BitMap256.unwrap(bitmap) | mask);}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;import { CalldataBytesLib } from "../../libs/CalldataBytesLib.sol";library ExecutorOptions {using CalldataBytesLib for bytes;uint8 internal constant WORKER_ID = 1;uint8 internal constant OPTION_TYPE_LZRECEIVE = 1;uint8 internal constant OPTION_TYPE_NATIVE_DROP = 2;uint8 internal constant OPTION_TYPE_LZCOMPOSE = 3;uint8 internal constant OPTION_TYPE_ORDERED_EXECUTION = 4;error Executor_InvalidLzReceiveOption();error Executor_InvalidNativeDropOption();error Executor_InvalidLzComposeOption();/// @dev decode the next executor option from the options starting from the specified cursor/// @param _options [executor_id][executor_option][executor_id][executor_option].../// executor_option = [option_size][option_type][option]/// option_size = len(option_type) + len(option)/// executor_id: uint8, option_size: uint16, option_type: uint8, option: bytes/// @param _cursor the cursor to start decoding from
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;import { Packet } from "../../interfaces/ISendLib.sol";import { AddressCast } from "../../libs/AddressCast.sol";library PacketV1Codec {using AddressCast for address;using AddressCast for bytes32;uint8 internal constant PACKET_VERSION = 1;// header (version + nonce + path)// versionuint256 private constant PACKET_VERSION_OFFSET = 0;// nonceuint256 private constant NONCE_OFFSET = 1;// pathuint256 private constant SRC_EID_OFFSET = 9;uint256 private constant SENDER_OFFSET = 13;uint256 private constant DST_EID_OFFSET = 45;uint256 private constant RECEIVER_OFFSET = 49;// payload (guid + message)uint256 private constant GUID_OFFSET = 81; // keccak256(nonce + path)uint256 private constant MESSAGE_OFFSET = 113;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.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.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC20 standard as defined in the EIP.*/interface IERC20 {/*** @dev Emitted when `value` tokens are moved from one account (`from`) to* another (`to`).** Note that `value` may be zero.*/event Transfer(address indexed from, address indexed to, uint256 value);/*** @dev Emitted when the allowance of a `spender` for an `owner` is set by* a call to {approve}. `value` is the new allowance.*/event Approval(address indexed owner, address indexed spender, uint256 value);/*** @dev Returns the amount of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].** Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't* need to send a transaction, and thus is not required to hold Ether at all.** ==== Security Considerations** There are two important considerations concerning the use of `permit`. The first is that a valid permit signature* expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be* considered as an intention to spend the allowance in any specific way. The second is that because permits have* built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should* take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be* generally recommended is:** ```solidity* function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {* try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}* doThing(..., value);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)pragma solidity ^0.8.0;import "../IERC20.sol";import "../extensions/IERC20Permit.sol";import "../../../utils/Address.sol";/*** @title SafeERC20* @dev Wrappers around ERC20 operations that throw on failure (when the token* contract returns false). Tokens that return no value (and instead revert or* throw on failure) are also supported, non-reverting calls are assumed to be* successful.* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.*/library SafeERC20 {using Address for address;/*** @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,* non-reverting calls are assumed to be successful.*/function safeTransfer(IERC20 token, address to, uint256 value) internal {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)pragma solidity ^0.8.1;/*** @dev Collection of functions related to the address type*/library Address {/*** @dev Returns true if `account` is a contract.** [IMPORTANT]* ====* It is unsafe to assume that an address for which this function returns* false is an externally-owned account (EOA) and not a contract.** Among others, `isContract` will return false for the following* types of addresses:** - an externally-owned account* - a contract in construction* - an address where a contract will be created* - an address where a contract lived, but was destroyed** Furthermore, `isContract` will also return true if the target contract within
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.4) (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;}function _contextSuffixLength() internal view virtual returns (uint256) {return 0;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)pragma solidity ^0.8.0;import "./IERC165.sol";/*** @dev Implementation of the {IERC165} interface.** Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check* for the additional interface id that will be supported. For example:** ```solidity* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);* }* ```** Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.*/abstract contract ERC165 is IERC165 {/*** @dev See {IERC165-supportsInterface}.*/function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[EIP].** Implementers can declare support of contract interfaces, which can then be* queried by others ({ERC165Checker}).** For an implementation, see {ERC165}.*/interface IERC165 {/*** @dev Returns true if this contract implements the interface defined by* `interfaceId`. See the corresponding* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SafeCast.sol)// This file was procedurally generated from scripts/generate/templates/SafeCast.js.pragma solidity ^0.8.0;/*** @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow* checks.** Downcasting from uint256/int256 in Solidity does not revert on overflow. This can* easily result in undesired exploitation or bugs, since developers usually* assume that overflows raise errors. `SafeCast` restores this intuition by* reverting the transaction when such an operation overflows.** Using this library instead of the unchecked operations eliminates an entire* class of bugs, so it's recommended to use it always.** Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing* all math on `uint256` and `int256` and then downcasting.*/library SafeCast {/*** @dev Returns the downcasted uint248 from uint256, reverting on* overflow (when the input is greater than largest uint248).*
123456789101112131415161718192021// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;/// @dev simply a container of endpoint address and local eidabstract contract MessageLibBase {address internal immutable endpoint;uint32 internal immutable localEid;error LZ_MessageLib_OnlyEndpoint();modifier onlyEndpoint() {if (endpoint != msg.sender) revert LZ_MessageLib_OnlyEndpoint();_;}constructor(address _endpoint, uint32 _localEid) {endpoint = _endpoint;localEid = _localEid;}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";import { Transfer } from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol";import { ILayerZeroExecutor } from "./interfaces/ILayerZeroExecutor.sol";import { ILayerZeroTreasury } from "./interfaces/ILayerZeroTreasury.sol";import { SafeCall } from "./libs/SafeCall.sol";import { MessageLibBase } from "./MessageLibBase.sol";struct WorkerOptions {uint8 workerId;bytes options;}struct SetDefaultExecutorConfigParam {uint32 eid;ExecutorConfig config;}struct ExecutorConfig {uint32 maxMessageSize;address executor;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol";import { ERC165 } from "@openzeppelin/contracts/utils/introspection/ERC165.sol";import { ILayerZeroEndpointV2, MessagingFee } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";import { IMessageLib, MessageLibType } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol";import { ISendLib, Packet } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol";import { Transfer } from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol";import { SendLibBase, WorkerOptions, ExecutorConfig } from "./SendLibBase.sol";/// @dev send-side message library base contract on endpoint v2./// design: the high level logic is the same as SendLibBaseE1/// 1/ with added interfaces/// 2/ adapt the functions to the new types, like uint32 for eid, address for sender.abstract contract SendLibBaseE2 is SendLibBase, ERC165, ISendLib {event NativeFeeWithdrawn(address worker, address receiver, uint256 amount);event LzTokenFeeWithdrawn(address lzToken, address receiver, uint256 amount);error LZ_MessageLib_NotTreasury();error LZ_MessageLib_CannotWithdrawAltToken();constructor(
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;interface ILayerZeroExecutor {// @notice query price and assign jobs at the same time// @param _dstEid - the destination endpoint identifier// @param _sender - the source sending contract address. executors may apply price discrimination to senders// @param _calldataSize - dynamic data size of message + caller params// @param _options - optional parameters for extra service plugins, e.g. sending dust tokens at the destination chainfunction assignJob(uint32 _dstEid,address _sender,uint256 _calldataSize,bytes calldata _options) external returns (uint256 price);// @notice query the executor price for relaying the payload and its proof to the destination chain// @param _dstEid - the destination endpoint identifier// @param _sender - the source sending contract address. executors may apply price discrimination to senders// @param _calldataSize - dynamic data size of message + caller params// @param _options - optional parameters for extra service plugins, e.g. sending dust tokens at the destination chainfunction getFee(uint32 _dstEid,address _sender,uint256 _calldataSize,
12345678910111213141516171819// SPDX-License-Identifier: MITpragma solidity >=0.8.0;interface ILayerZeroTreasury {function getFee(address _sender,uint32 _dstEid,uint256 _totalNativeFee,bool _payInLzToken) external view returns (uint256 fee);function payFee(address _sender,uint32 _dstEid,uint256 _totalNativeFee,bool _payInLzToken) external payable returns (uint256 fee);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT OR Apache-2.0pragma solidity ^0.8.20;/// @dev copied from https://github.com/nomad-xyz/ExcessivelySafeCall/blob/main/src/ExcessivelySafeCall.sol.library SafeCall {/// @notice calls a contract with a specified gas limit and value and captures the return data/// @param _target The address to call/// @param _gas The amount of gas to forward to the remote contract/// @param _value The value in wei to send to the remote contract/// to memory./// @param _maxCopy The maximum number of bytes of returndata to copy/// to memory./// @param _calldata The data to send to the remote contract/// @return success and returndata, as `.call()`. Returndata is capped to/// `_maxCopy` bytes.function safeCall(address _target,uint256 _gas,uint256 _value,uint16 _maxCopy,bytes memory _calldata) internal returns (bool, bytes memory) {// check that target has codeuint size;assembly {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;import { Packet } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol";import { PacketV1Codec } from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol";import { ILayerZeroDVN } from "./interfaces/ILayerZeroDVN.sol";import { DVNOptions } from "./libs/DVNOptions.sol";import { UlnOptions } from "./libs/UlnOptions.sol";import { WorkerOptions } from "../SendLibBase.sol";import { UlnConfig, UlnBase } from "./UlnBase.sol";/// @dev includes the utility functions for checking ULN states and logicsabstract contract SendUlnBase is UlnBase {event DVNFeePaid(address[] requiredDVNs, address[] optionalDVNs, uint256[] fees);function _splitUlnOptions(bytes calldata _options) internal pure returns (bytes memory, WorkerOptions[] memory) {(bytes memory executorOpts, bytes memory dvnOpts) = UlnOptions.decode(_options);if (dvnOpts.length == 0) {return (executorOpts, new WorkerOptions[](0));}WorkerOptions[] memory workerOpts = new WorkerOptions[](1);workerOpts[0] = WorkerOptions(DVNOptions.WORKER_ID, dvnOpts);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";// the formal properties are documented in the setter functionsstruct UlnConfig {uint64 confirmations;// we store the length of required DVNs and optional DVNs instead of using DVN.length directly to save gasuint8 requiredDVNCount; // 0 indicate DEFAULT, NIL_DVN_COUNT indicate NONE (to override the value of default)uint8 optionalDVNCount; // 0 indicate DEFAULT, NIL_DVN_COUNT indicate NONE (to override the value of default)uint8 optionalDVNThreshold; // (0, optionalDVNCount]address[] requiredDVNs; // no duplicates. sorted an an ascending order. allowed overlap with optionalDVNsaddress[] optionalDVNs; // no duplicates. sorted an an ascending order. allowed overlap with requiredDVNs}struct SetDefaultUlnConfigParam {uint32 eid;UlnConfig config;}/// @dev includes the utility functions for checking ULN states and logicsabstract contract UlnBase is Ownable {address private constant DEFAULT_CONFIG = address(0);// reserved values for
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;interface ILayerZeroDVN {struct AssignJobParam {uint32 dstEid;bytes packetHeader;bytes32 payloadHash;uint64 confirmations;address sender;}// @notice query price and assign jobs at the same time// @param _dstEid - the destination endpoint identifier// @param _packetHeader - version + nonce + path// @param _payloadHash - hash of guid + message// @param _confirmations - block confirmation delay before relaying blocks// @param _sender - the source sending contract address// @param _options - optionsfunction assignJob(AssignJobParam calldata _param, bytes calldata _options) external payable returns (uint256 fee);// @notice query the dvn fee for relaying block information to the destination chain// @param _dstEid the destination endpoint identifier// @param _confirmations - block confirmation delay before relaying blocks// @param _sender - the source sending contract address
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;import { BytesLib } from "solidity-bytes-utils/contracts/BytesLib.sol";import { BitMap256 } from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol";import { CalldataBytesLib } from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol";library DVNOptions {using CalldataBytesLib for bytes;using BytesLib for bytes;uint8 internal constant WORKER_ID = 2;uint8 internal constant OPTION_TYPE_PRECRIME = 1;error DVN_InvalidDVNIdx();error DVN_InvalidDVNOptions(uint256 cursor);/// @dev group dvn options by its idx/// @param _options [dvn_id][dvn_option][dvn_id][dvn_option].../// dvn_option = [option_size][dvn_idx][option_type][option]/// option_size = len(dvn_idx) + len(option_type) + len(option)/// dvn_id: uint8, dvn_idx: uint8, option_size: uint16, option_type: uint8, option: bytes/// @return dvnOptions the grouped options, still share the same format of _options/// @return dvnIndices the dvn indices
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;import { SafeCast } from "@openzeppelin/contracts/utils/math/SafeCast.sol";import { ExecutorOptions } from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol";import { DVNOptions } from "./DVNOptions.sol";library UlnOptions {using SafeCast for uint256;uint16 internal constant TYPE_1 = 1; // legacy options type 1uint16 internal constant TYPE_2 = 2; // legacy options type 2uint16 internal constant TYPE_3 = 3;error LZ_ULN_InvalidWorkerOptions(uint256 cursor);error LZ_ULN_InvalidWorkerId(uint8 workerId);error LZ_ULN_InvalidLegacyType1Option();error LZ_ULN_InvalidLegacyType2Option();error LZ_ULN_UnsupportedOptionType(uint16 optionType);/// @dev decode the options into executorOptions and dvnOptions/// @param _options the options can be either legacy options (type 1 or 2) or type 3 options/// @return executorOptions the executor options, share the same format of type 3 options
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Unlicense/** @title Solidity Bytes Arrays Utils* @author Gonçalo Sá <goncalo.sa@consensys.net>** @dev Bytes tightly packed arrays utility library for ethereum contracts written in Solidity.* The library lets you concatenate, slice and type cast bytes arrays both in memory and storage.*/pragma solidity >=0.8.0 <0.9.0;library BytesLib {function concat(bytes memory _preBytes,bytes memory _postBytes)internalpurereturns (bytes memory){bytes memory tempBytes;assembly {// Get a location of some free memory and store it in tempBytes as// Solidity does for memory variables.tempBytes := mload(0x40)
12345678910111213141516171819{"evmVersion": "paris","optimizer": {"enabled": true,"runs": 20000},"outputSelection": {"*": {"*": ["evm.bytecode","evm.deployedBytecode","devdoc","userdoc","metadata","abi"]}}}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_endpoint","type":"address"},{"internalType":"uint256","name":"_treasuryGasLimit","type":"uint256"},{"internalType":"uint256","name":"_treasuryGasForFeeCap","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"DVN_InvalidDVNIdx","type":"error"},{"inputs":[{"internalType":"uint256","name":"cursor","type":"uint256"}],"name":"DVN_InvalidDVNOptions","type":"error"},{"inputs":[],"name":"LZ_MessageLib_CannotWithdrawAltToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"requested","type":"uint256"},{"internalType":"uint256","name":"available","type":"uint256"}],"name":"LZ_MessageLib_InvalidAmount","type":"error"},{"inputs":[],"name":"LZ_MessageLib_InvalidExecutor","type":"error"},{"inputs":[{"internalType":"uint256","name":"actual","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"LZ_MessageLib_InvalidMessageSize","type":"error"},{"inputs":[],"name":"LZ_MessageLib_NotTreasury","type":"error"},{"inputs":[],"name":"LZ_MessageLib_OnlyEndpoint","type":"error"},{"inputs":[],"name":"LZ_MessageLib_TransferFailed","type":"error"},{"inputs":[],"name":"LZ_MessageLib_ZeroMessageSize","type":"error"},{"inputs":[],"name":"LZ_ULN_AtLeastOneDVN","type":"error"},{"inputs":[{"internalType":"uint32","name":"configType","type":"uint32"}],"name":"LZ_ULN_InvalidConfigType","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidConfirmations","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidLegacyType1Option","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidLegacyType2Option","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidOptionalDVNCount","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidOptionalDVNThreshold","type":"error"},{"inputs":[],"name":"LZ_ULN_InvalidRequiredDVNCount","type":"error"},{"inputs":[{"internalType":"uint8","name":"workerId","type":"uint8"}],"name":"LZ_ULN_InvalidWorkerId","type":"error"},{"inputs":[{"internalType":"uint256","name":"cursor","type":"uint256"}],"name":"LZ_ULN_InvalidWorkerOptions","type":"error"},{"inputs":[],"name":"LZ_ULN_Unsorted","type":"error"},{"inputs":[{"internalType":"uint32","name":"eid","type":"uint32"}],"name":"LZ_ULN_UnsupportedEid","type":"error"},{"inputs":[{"internalType":"uint16","name":"optionType","type":"uint16"}],"name":"LZ_ULN_UnsupportedOptionType","type":"error"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer_NativeFailed","type":"error"},{"inputs":[],"name":"Transfer_ToAddressIsZero","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"optionalDVNs","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"fees","type":"uint256[]"}],"name":"DVNFeePaid","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint32","name":"maxMessageSize","type":"uint32"},{"internalType":"address","name":"executor","type":"address"}],"internalType":"struct ExecutorConfig","name":"config","type":"tuple"}],"indexed":false,"internalType":"struct SetDefaultExecutorConfigParam[]","name":"params","type":"tuple[]"}],"name":"DefaultExecutorConfigsSet","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"internalType":"struct UlnConfig","name":"config","type":"tuple"}],"indexed":false,"internalType":"struct SetDefaultUlnConfigParam[]","name":"params","type":"tuple[]"}],"name":"DefaultUlnConfigsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oapp","type":"address"},{"indexed":false,"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint32","name":"maxMessageSize","type":"uint32"},{"internalType":"address","name":"executor","type":"address"}],"indexed":false,"internalType":"struct ExecutorConfig","name":"config","type":"tuple"}],"name":"ExecutorConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"executor","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"ExecutorFeePaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lzToken","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LzTokenFeeWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"worker","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeFeeWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTreasuryNativeFeeCap","type":"uint256"}],"name":"TreasuryNativeFeeCapSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"treasury","type":"address"}],"name":"TreasurySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oapp","type":"address"},{"indexed":false,"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"indexed":false,"internalType":"struct UlnConfig","name":"config","type":"tuple"}],"name":"UlnConfigSet","type":"event"},{"inputs":[{"internalType":"address","name":"oapp","type":"address"},{"internalType":"uint32","name":"eid","type":"uint32"}],"name":"executorConfigs","outputs":[{"internalType":"uint32","name":"maxMessageSize","type":"uint32"},{"internalType":"address","name":"executor","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"worker","type":"address"}],"name":"fees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_remoteEid","type":"uint32"}],"name":"getAppUlnConfig","outputs":[{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"internalType":"struct UlnConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_configType","type":"uint32"}],"name":"getConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_remoteEid","type":"uint32"}],"name":"getExecutorConfig","outputs":[{"components":[{"internalType":"uint32","name":"maxMessageSize","type":"uint32"},{"internalType":"address","name":"executor","type":"address"}],"internalType":"struct ExecutorConfig","name":"rtnConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint32","name":"_remoteEid","type":"uint32"}],"name":"getUlnConfig","outputs":[{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"internalType":"struct UlnConfig","name":"rtnConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"}],"name":"isSupportedEid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"messageLibType","outputs":[{"internalType":"enum MessageLibType","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"bytes32","name":"receiver","type":"bytes32"},{"internalType":"bytes32","name":"guid","type":"bytes32"},{"internalType":"bytes","name":"message","type":"bytes"}],"internalType":"struct Packet","name":"_packet","type":"tuple"},{"internalType":"bytes","name":"_options","type":"bytes"},{"internalType":"bool","name":"_payInLzToken","type":"bool"}],"name":"quote","outputs":[{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct MessagingFee","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"bytes32","name":"receiver","type":"bytes32"},{"internalType":"bytes32","name":"guid","type":"bytes32"},{"internalType":"bytes","name":"message","type":"bytes"}],"internalType":"struct Packet","name":"_packet","type":"tuple"},{"internalType":"bytes","name":"_options","type":"bytes"},{"internalType":"bool","name":"_payInLzToken","type":"bool"}],"name":"send","outputs":[{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct MessagingFee","name":"","type":"tuple"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"uint32","name":"configType","type":"uint32"},{"internalType":"bytes","name":"config","type":"bytes"}],"internalType":"struct SetConfigParam[]","name":"_params","type":"tuple[]"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint32","name":"maxMessageSize","type":"uint32"},{"internalType":"address","name":"executor","type":"address"}],"internalType":"struct ExecutorConfig","name":"config","type":"tuple"}],"internalType":"struct SetDefaultExecutorConfigParam[]","name":"_params","type":"tuple[]"}],"name":"setDefaultExecutorConfigs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"components":[{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint8","name":"requiredDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNCount","type":"uint8"},{"internalType":"uint8","name":"optionalDVNThreshold","type":"uint8"},{"internalType":"address[]","name":"requiredDVNs","type":"address[]"},{"internalType":"address[]","name":"optionalDVNs","type":"address[]"}],"internalType":"struct UlnConfig","name":"config","type":"tuple"}],"internalType":"struct SetDefaultUlnConfigParam[]","name":"_params","type":"tuple[]"}],"name":"setDefaultUlnConfigs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTreasuryNativeFeeCap","type":"uint256"}],"name":"setTreasuryNativeFeeCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint64","name":"major","type":"uint64"},{"internalType":"uint8","name":"minor","type":"uint8"},{"internalType":"uint8","name":"endpointVersion","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lzToken","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawLzTokenFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040523480156200001157600080fd5b5060405162005bb938038062005bb9833981016040819052620000349162000129565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000077573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009d91906200016e565b6001600160a01b03821660805263ffffffff811660a0528383620000c133620000d9565b60c091909152600255506200019d9650505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000606084860312156200013f57600080fd5b83516001600160a01b03811681146200015757600080fd5b602085015160409095015190969495509392505050565b6000602082840312156200018157600080fd5b815163ffffffff811681146200019657600080fd5b9392505050565b60805160a05160c0516159d3620001e66000396000818161203e01526128d8015260005050600081816107ea0152818161092f01528181610e7f015261176c01526159d36000f3fe6080604052600436106101845760003560e01c806361d027b3116100d6578063d15b0d491161007f578063f2fde38b11610059578063f2fde38b14610513578063faaebd2114610533578063fd9be5221461056e57600080fd5b8063d15b0d49146104a6578063d80e9bd9146104c6578063f0f44260146104f357600080fd5b80638da5cb5b116100b05780638da5cb5b1461042e5780639c33abf714610459578063c14c43491461048657600080fd5b806361d027b3146103a75780636750cd4c146103f9578063715018a61461041957600080fd5b806329460b0b1161013857806343ea4fa91161011257806343ea4fa9146102cb5780634d963200146102eb57806354fd4d501461037a57600080fd5b806329460b0b1461025057806339e3f938146102705780634389e58f1461029d57600080fd5b80631881d94d116101695780631881d94d146101f2578063200175f71461020e57806320efd7221461023057600080fd5b806301ffc9a714610190578063188183f4146101c557600080fd5b3661018b57005b600080fd5b34801561019c57600080fd5b506101b06101ab36600461453b565b61058e565b60405190151581526020015b60405180910390f35b3480156101d157600080fd5b506101e56101e03660046145cc565b610673565b6040516101bc9190614605565b3480156101fe57600080fd5b5060006040516101bc9190614638565b34801561021a57600080fd5b5061022e610229366004614679565b610780565b005b34801561023c57600080fd5b5061022e61024b3660046146ff565b61092d565b34801561025c57600080fd5b5061022e61026b366004614754565b610ae1565b34801561027c57600080fd5b5061029061028b3660046145cc565b610cc6565b6040516101bc919061485a565b3480156102a957600080fd5b506102bd6102b8366004614886565b610e67565b6040516101bc9291906149a4565b3480156102d757600080fd5b506102906102e63660046145cc565b610f61565b3480156102f757600080fd5b506103496103063660046145cc565b600460209081526000928352604080842090915290825290205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101bc565b34801561038657600080fd5b506040805160038152600060208201526002918101919091526060016101bc565b3480156103b357600080fd5b506003546103d49073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b34801561040557600080fd5b506101b06104143660046149c8565b61131b565b34801561042557600080fd5b5061022e611326565b34801561043a57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166103d4565b34801561046557600080fd5b506104796104743660046149e5565b61133a565b6040516101bc9190614a30565b34801561049257600080fd5b5061022e6104a1366004614a43565b611421565b3480156104b257600080fd5b5061022e6104c1366004614ab8565b611599565b3480156104d257600080fd5b506104e66104e1366004614886565b611627565b6040516101bc9190614ad1565b3480156104ff57600080fd5b5061022e61050e366004614ae8565b611697565b34801561051f57600080fd5b5061022e61052e366004614ae8565b6116ab565b34801561053f57600080fd5b5061056061054e366004614ae8565b60056020526000908152604090205481565b6040519081526020016101bc565b34801561057a57600080fd5b5061022e610589366004614b05565b61175f565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061062157507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b8061066d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080518082019091526000808252602082015263ffffffff80831660008181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845260048352818420948452939091528120805492939092169081900361070457825463ffffffff16610706565b805b63ffffffff1684528154640100000000900473ffffffffffffffffffffffffffffffffffffffff1680610758578354640100000000900473ffffffffffffffffffffffffffffffffffffffff1661075a565b805b73ffffffffffffffffffffffffffffffffffffffff166020860152509295945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146107d1576040517f885762a700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610853573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108779190614b31565b73ffffffffffffffffffffffffffffffffffffffff16036108c4576040517fe695d04400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108cf838383611859565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461099c576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610adb57368383838181106109ba576109ba614b4e565b90506020028101906109cc9190614b7d565b90506109e36109de60208301836149c8565b6118cc565b60016109f560408301602084016149c8565b63ffffffff1603610a3557610a30610a1060208301836149c8565b86610a1e6040850185614bbb565b810190610a2b9190614cea565b611913565b610ad2565b6002610a4760408301602084016149c8565b63ffffffff1603610a8257610a30610a6260208301836149c8565b86610a706040850185614bbb565b810190610a7d9190614ea3565b6119c0565b610a9260408201602083016149c8565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b5060010161099f565b50505050565b610ae9611a09565b60005b81811015610c885736838383818110610b0757610b07614b4e565b9050602002810190610b199190614ed8565b905060ff610b2a6020830183614f0c565b610b3b906040810190602001614f40565b60ff1603610b75576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff610b846020830183614f0c565b610b95906060810190604001614f40565b60ff1603610bcf576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff610be56020830183614f0c565b610bf3906020810190614f5b565b67ffffffffffffffff1603610c34576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c52610c446020830183614f0c565b610c4d90614f76565b611a8a565b610c7f6000610c6460208401846149c8565b610c716020850185614f0c565b610c7a90614f76565b611adb565b50600101610aec565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610cba929190615034565b60405180910390a15050565b6040805160c0810182526000808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a01000000000000000000009091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610de757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dbc575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610e5657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e2b575b505050505081525050905092915050565b604080518082019091526000808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610eec576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610efa888888611e6f565b9092509050600080610f2c610f1560608c0160408d01614ae8565b610f2560808d0160608e016149c8565b858a611f3c565b9092509050610f3b8284615203565b604080518082019091529081526020810191909152945091925050505b94509492505050565b6040805160c0810182526000808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff168061101157825467ffffffffffffffff168452611030565b67ffffffffffffffff818116146110305767ffffffffffffffff811684525b815468010000000000000000900460ff166110e657825468010000000000000000900460ff16156110e157826001018054806020026020016040519081016040528092919081815260200182805480156110c057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611095575b50505050506080850152825468010000000000000000900460ff1660208501525b611184565b815468010000000000000000900460ff90811614611184578160010180548060200260200160405190810160405280929190818152602001828054801561116357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611138575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff166112535782546901000000000000000000900460ff161561124e578260020180548060200260200160405190810160405280929190818152602001828054801561121657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111eb575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b611309565b81546901000000000000000000900460ff9081161461130957816002018054806020026020016040519081016040528092919081815260200182805480156112d157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116112a6575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b61131284611a8a565b50505092915050565b600061066d826120ca565b61132e611a09565b6113386000612131565b565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff831601611399576113738385610673565b6040516020016113839190614605565b604051602081830303815290604052905061141a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff8316016113e0576113d08385610f61565b604051602001611383919061485a565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610ac9565b9392505050565b611429611a09565b60005b81811015611567573683838381811061144757611447614b4e565b60609081029290920192506000916114659150830160408401614ae8565b73ffffffffffffffffffffffffffffffffffffffff16036114b2576040517f20e9d05a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c260408201602083016149c8565b63ffffffff16600003611501576040517f49cfac4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec9061153c83856149c8565b63ffffffff168152602081019190915260400160002061155c8282615216565b50505060010161142c565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610cba9291906152ae565b6115a1611a09565b6002548111156115eb576002546040517f34084fb8000000000000000000000000000000000000000000000000000000008152610ac9918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b60408051808201909152600080825260208201526000806116786116516060890160408a01614ae8565b61166160808a0160608b016149c8565b61166e60c08b018b614bbb565b9050878a8a6121a6565b604080518082019091529182526020820152925050505b949350505050565b61169f611a09565b6116a8816122ac565b50565b6116b3611a09565b73ffffffffffffffffffffffffffffffffffffffff8116611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ac9565b6116a881612131565b6117688161231f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f99190614b31565b9050611806818484612389565b6040805133815273ffffffffffffffffffffffffffffffffffffffff851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a666988390606001610920565b73ffffffffffffffffffffffffffffffffffffffff82166118a6576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118c773ffffffffffffffffffffffffffffffffffffffff841683836123b9565b505050565b6118d5816120ca565b6116a8576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610ac9565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc805906109209084908690859061533b565b6119cb828483611adb565b6119d58284610f61565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161092093929190615397565b60005473ffffffffffffffffffffffffffffffffffffffff163314611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac9565b602081015160ff16158015611aa45750606081015160ff16155b156116a8576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff9081161480611af65750602081015160ff16155b15611b3d5760808101515115611b38576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bbc565b806020015160ff16816080015151141580611b7857506002611b61600160ff6153d2565b611b6b91906153eb565b60ff16816020015160ff16115b15611baf576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bbc8160800151612446565b604081015160ff9081161480611bd75750604081015160ff16155b15611c5d5760a08101515115611c19576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611c58576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d34565b806040015160ff168160a0015151141580611c9857506002611c81600160ff6153d2565b611c8b91906153eb565b60ff16816040015160ff16115b15611ccf576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff161580611cf05750806040015160ff16816060015160ff16115b15611d27576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d348160a00151612446565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a0100000000000000000000959091169490940293909317835560808401518051859493611e4b939085019201906144a5565b5060a08201518051611e679160028401916020909101906144a5565b505050505050565b60606000806000611e8086866124e0565b90925090506000611eaa611e9a60608a0160408b01614ae8565b6101e060808b0160608c016149c8565b90506000611ebb60c08a018a614bbb565b90509050611ed381836000015163ffffffff166124f9565b6020820151611f0390611eec60808c0160608d016149c8565b611efc60608d0160408e01614ae8565b8488612541565b611f0d9086615203565b9450600080611f1c8b8661267a565b9092509050611f2b8288615203565b909b909a5098505050505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff1615610f585760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff8616604482015260648101859052831515608482015260009060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c54860000000000000000000000000000000000000000000000000000000017905260035491925060009182916120669173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009084908761269d565b915091506120768787848461274e565b909550935084156120be5760035473ffffffffffffffffffffffffffffffffffffffff16600090815260056020526040812080548792906120b8908490615203565b90915550505b50505094509492505050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff1615158061141a5750546a0100000000000000000000900460ff16151592915050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000806121b686866124e0565b9150915060006121c78b8b846127c9565b905060006121d58c8c610673565b90506121eb8a826000015163ffffffff166124f9565b806020015173ffffffffffffffffffffffffffffffffffffffff1663709eb6648c8e8d886040518563ffffffff1660e01b815260040161222e9493929190615434565b602060405180830381865afa15801561224b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226f919061547f565b6122799083615203565b915060008061228a8e8e868e6127d6565b90925090506122998285615203565b9e909d509b505050505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f9060200161161c565b3360009081526005602052604090205480821115612373576040517f34084fb80000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ac9565b3360009081526005602052604090209190039055565b73ffffffffffffffffffffffffffffffffffffffff83166123ae576118c7828261291a565b6118c7838383611859565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526118c7908490612a20565b6000805b82518110156118c757600083828151811061246757612467614b4e565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116124d6576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b915060010161244a565b6060806124ed8484612b2f565b915091505b9250929050565b8082111561253d576040517fc667af3e0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ac9565b5050565b6040517f717e8a4200000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff87169063717e8a429061259c908890889088908890600401615434565b6020604051808303816000875af11580156125bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125df919061547f565b905080156126225773ffffffffffffffffffffffffffffffffffffffff86166000908152600560205260408120805483929061261c908490615203565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff88168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b60006060612692600561268c86615526565b85612c1c565b909590945092505050565b60006060863b8083036126c457604080516000808252602082019092529250925050612744565b60008060008761ffff1667ffffffffffffffff8111156126e6576126e6614c20565b6040519080825280601f01601f191660200182016040528015612710576020820181803683370190505b509050600080885160208a018c8f8ff191503d925087831115612731578792505b828152826000602083013e909450925050505b9550959350505050565b60008083158061275f575082516020115b1561276f57506000905080610f58565b600083806020019051810190612785919061547f565b90508515612795578091506127bf565b600060025488116127a8576002546127aa565b875b90508082116127b957816127bb565b805b9350505b5094509492505050565b600061168f848484612d78565b600354600090819073ffffffffffffffffffffffffffffffffffffffff1615610f585760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff8616604482015260648101859052831515608482015260009060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd42442210000000000000000000000000000000000000000000000000000000017905260035491925060009182916128fe9173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086612df2565b9150915061290e8787848461274e565b94509450505050610f58565b73ffffffffffffffffffffffffffffffffffffffff8216612967576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146129c1576040519150601f19603f3d011682016040523d82523d6000602084013e6129c6565b606091505b50509050806118c7576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ac9565b6000612a82826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612e9f9092919063ffffffff16565b9050805160001480612aa3575080806020019051810190612aa391906155c4565b6118c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ac9565b606080600080612b3f8686612eae565b915091508051600003612b9757604080516000808252602082019092528391612b8b565b604080518082019091526000815260606020820152815260200190600190039081612b635790505b509350935050506124f2565b604080516001808252818301909252600091816020015b604080518082019091526000815260606020820152815260200190600190039081612bae5790505090506040518060400160405280600260ff1681526020018381525081600081518110612c0457612c04614b4e565b60209081029190910101529196919550909350505050565b600060606000612c2b856130ef565b90506000612c38866131d5565b805160208201206060880151604089015192935090916000612c5a8284610f61565b905060008951600014612c8b5789600081518110612c7a57612c7a614b4e565b602002602001015160200151612c9c565b604051806020016040528060008152505b90506060612cfc8d846040518060a001604052808963ffffffff1681526020018c81526020018a8152602001876000015167ffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815250856131f2565b604051919b509150612d1490899089906020016155e1565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a0015183604051612d6093929190615610565b60405180910390a15050505050505050935093915050565b600080612d858585610f61565b905060008351600014612db65783600081518110612da557612da5614b4e565b602002602001015160200151612dc7565b604051806020016040528060008152505b9050600080612dd5836134de565b91509150612de684888a8585613782565b98975050505050505050565b60006060853b808303612e1957604080516000808252602082019092529250925050610f58565b60008060008761ffff1667ffffffffffffffff811115612e3b57612e3b614c20565b6040519080825280601f01601f191660200182016040528015612e65576020820181803683370190505b509050600080885160208a018d8dfa91503d925087831115612e85578792505b828152826000602083013e90999098509650505050505050565b606061168f8484600085613940565b6060806002831015612eef576040517f6592671c00000000000000000000000000000000000000000000000000000000815260006004820152602401610ac9565b6000612efe600282868861566e565b612f0791615698565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd82016130d8578060005b86831015613064576000612f5260018501858a8c61566e565b612f5b916156e0565b60f81c90506000819003612f9e576040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260006004820152602401610ac9565b8160ff16600003612fb157809150612fee565b8160ff168160ff1614612fee57366000612fcd86868c8e61566e565b91509150612fde8989868585613a59565b9099509750859450919250829150505b600184019360009061300590600301868b8d61566e565b61300e91615698565b60f01c90506000819003613051576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101869052602401610ac9565b8060020161ffff16850194505050612f39565b8287146130a0576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ac9565b60028711156130d1573660006130b885858b8d61566e565b915091506130c98888858585613a59565b909850965050505b50506130e6565b6130e3828787613bce565b93505b50509250929050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c001516040516020016131bf929190615726565b60006060600080613202856134de565b9150915060008760400151886020015161321c919061574c565b90508060ff1667ffffffffffffffff81111561323a5761323a614c20565b604051908082528060200260200182016040528015613263578160200160208202803683370190505b50935060005b8160ff168160ff1610156134d1576000896020015160ff168260ff16106132be5760a08a015160208b015161329e90846153d2565b60ff16815181106132b1576132b1614b4e565b60200260200101516132e0565b89608001518260ff16815181106132d7576132d7614b4e565b60200260200101515b60408051602081019091526000808252919250905b855181101561334d578360ff1686828151811061331457613314614b4e565b602002602001015160ff16036133455786818151811061333657613336614b4e565b6020026020010151915061334d565b6001016132f5565b506040517f95d376d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906395d376d7906133a2908d908590600401615765565b6020604051808303816000875af11580156133c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e5919061547f565b878460ff16815181106133fa576133fa614b4e565b6020026020010181815250506000878460ff168151811061341d5761341d614b4e565b602002602001015111156134c757868360ff168151811061344057613440614b4e565b60200260200101518c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134959190615203565b92505081905550868360ff16815181106134b1576134b1614b4e565b6020026020010151886134c49190615203565b97505b5050600101613269565b5050505094509492505050565b60608082516000036134ef57915091565b60006134fa84613e4d565b90508060ff166001036135ac5760408051600180825281830190925290816020015b606081526020019060019003908161351c579050509250838360008151811061354757613547614b4e565b60209081029190910101526040805160018082528183019092529081602001602082028036833701905050915061357f846003613f72565b8260008151811061359257613592614b4e565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff8111156135c8576135c8614c20565b6040519080825280602002602001820160405280156135f1578160200160208202803683370190505b5091508060ff1667ffffffffffffffff81111561361057613610614c20565b60405190808252806020026020018201604052801561364357816020015b606081526020019060019003908161362e5790505b50925060008060ff5b86518310156136f75760019092019160006136678885613ff2565b600294909401939050600061367c8986613f72565b90508260ff1660ff03613691578092506136e8565b8260ff168160ff16146136e8577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8486030160006136d08b8784614072565b90506136de8a8a87846141ec565b5093909301929150815b5061ffff16929092019161364c565b8183036000613707898584614072565b9050613715888885846141ec565b60005b8660ff168160ff16101561377657878160ff168151811061373b5761373b614b4e565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613718565b50505050505050915091565b60008086604001518760200151613799919061574c565b905060005b8160ff168160ff161015613935576000886020015160ff168260ff16106137f35760a089015160208a01516137d390846153d2565b60ff16815181106137e6576137e6614b4e565b6020026020010151613815565b88608001518260ff168151811061380c5761380c614b4e565b60200260200101515b60408051602081019091526000808252919250905b8651811015613882578360ff1687828151811061384957613849614b4e565b602002602001015160ff160361387a5787818151811061386b5761386b614b4e565b60200260200101519150613882565b60010161382a565b5089516040517f30bb3aac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416916330bb3aac916138db918d918d9087906004016157e3565b602060405180830381865afa1580156138f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061391c919061547f565b6139269086615203565b9450505080600101905061379e565b505095945050505050565b6060824710156139d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ac9565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516139fb919061582e565b60006040518083038185875af1925050503d8060008114613a38576040519150601f19603f3d011682016040523d82523d6000602084013e613a3d565b606091505b5091509150613a4e8783838761431b565b979650505050505050565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff861601613af457865115613ab657868484604051602001613aa293929190615840565b604051602081830303815290604052613aed565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9650613bc3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff861601613b8c57855115613b4e57858484604051602001613b3a93929190615840565b604051602081830303815290604052613b85565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9550613bc3565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff86166004820152602401610ac9565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff851601613cf45760228214613c35576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613c56613c4860226002868861566e565b613c5191615868565b6143bb565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b16602482015290915060340160405160208183030381529060405291505061141a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff851601613e1557604282111580613d2f5750606282115b15613d66576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613d79613c4860226002868861566e565b90506000613d8e613c4860426022878961566e565b905060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613dc2866042818a61566e565b613dcb91615868565b60405160086020938403029190911c9250613dfc916001916011918391889183916031916002918b918b91016158a4565b604051602081830303815290604052935050505061141a565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff85166004820152602401610ac9565b600080805b8351821015613f2e576001909101906000613e6d8584613ff2565b905060028301925060028161ffff161015613eb7576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ac9565b6000613ec38685613f72565b90508060ff1660ff03613f02576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b8316613f1f5760019485019460ff82161b831792505b5061ffff169190910190613e52565b83518214613f6b576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101839052602401610ac9565b5050919050565b6000613f7f826001615203565b83511015613fe9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401610ac9565b50016001015190565b6000613fff826002615203565b83511015614069576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606401610ac9565b50016002015190565b60608161408081601f615203565b10156140e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ac9565b6140f28284615203565b8451101561415c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ac9565b60608215801561417b57604051915060008252602082016040526141e3565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141b457805183526020928301920161419c565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff03614229576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061423683600161574c565b905060005b8451811015611e6757600085828151811061425857614258614b4e565b602002602001015190508060ff168360ff16036142cd5786828151811061428157614281614b4e565b60200260200101518460405160200161429b9291906155e1565b6040516020818303038152906040528783815181106142bc576142bc614b4e565b602002602001018190525050611e67565b8060ff1660000361431257828683815181106142eb576142eb614b4e565b602002602001019060ff16908160ff1681525050838783815181106142bc576142bc614b4e565b5060010161423b565b606083156143b15782516000036143aa5773ffffffffffffffffffffffffffffffffffffffff85163b6143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ac9565b508161168f565b61168f8383614461565b60006fffffffffffffffffffffffffffffffff82111561445d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610ac9565b5090565b8151156144715781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac99190614a30565b82805482825590600052602060002090810192821561451f579160200282015b8281111561451f57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906144c5565b5061445d9291505b8082111561445d5760008155600101614527565b60006020828403121561454d57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461141a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff811681146116a857600080fd5b80356145aa8161457d565b919050565b63ffffffff811681146116a857600080fd5b80356145aa816145af565b600080604083850312156145df57600080fd5b82356145ea8161457d565b915060208301356145fa816145af565b809150509250929050565b815163ffffffff16815260208083015173ffffffffffffffffffffffffffffffffffffffff16908201526040810161066d565b6020810160038310614673577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561468e57600080fd5b83356146998161457d565b925060208401356146a98161457d565b929592945050506040919091013590565b60008083601f8401126146cc57600080fd5b50813567ffffffffffffffff8111156146e457600080fd5b6020830191508360208260051b85010111156124f257600080fd5b60008060006040848603121561471457600080fd5b833561471f8161457d565b9250602084013567ffffffffffffffff81111561473b57600080fd5b614747868287016146ba565b9497909650939450505050565b6000806020838503121561476757600080fd5b823567ffffffffffffffff81111561477e57600080fd5b61478a858286016146ba565b90969095509350505050565b60008151808452602080850194506020840160005b838110156147dd57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016147ab565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c0608085015261483860c0850182614796565b905060a083015184820360a08601526148518282614796565b95945050505050565b60208152600061141a60208301846147e8565b80151581146116a857600080fd5b80356145aa8161486d565b6000806000806060858703121561489c57600080fd5b843567ffffffffffffffff808211156148b457600080fd5b9086019060e082890312156148c857600080fd5b909450602086013590808211156148de57600080fd5b818701915087601f8301126148f257600080fd5b81358181111561490157600080fd5b88602082850101111561491357600080fd5b60208301955080945050505061492b6040860161487b565b905092959194509250565b60005b83811015614951578181015183820152602001614939565b50506000910152565b60008151808452614972816020860160208601614936565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b825181526020808401519082015260606040820152600061168f606083018461495a565b6000602082840312156149da57600080fd5b813561141a816145af565b6000806000606084860312156149fa57600080fd5b8335614a05816145af565b92506020840135614a158161457d565b91506040840135614a25816145af565b809150509250925092565b60208152600061141a602083018461495a565b60008060208385031215614a5657600080fd5b823567ffffffffffffffff80821115614a6e57600080fd5b818501915085601f830112614a8257600080fd5b813581811115614a9157600080fd5b866020606083028501011115614aa657600080fd5b60209290920196919550909350505050565b600060208284031215614aca57600080fd5b5035919050565b81518152602080830151908201526040810161066d565b600060208284031215614afa57600080fd5b813561141a8161457d565b60008060408385031215614b1857600080fd5b8235614b238161457d565b946020939093013593505050565b600060208284031215614b4357600080fd5b815161141a8161457d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614bb157600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614bf057600080fd5b83018035915067ffffffffffffffff821115614c0b57600080fd5b6020019150368190038213156124f257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715614c7257614c72614c20565b60405290565b60405160e0810167ffffffffffffffff81118282101715614c7257614c72614c20565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614ce257614ce2614c20565b604052919050565b600060408284031215614cfc57600080fd5b6040516040810181811067ffffffffffffffff82111715614d1f57614d1f614c20565b6040528235614d2d816145af565b81526020830135614d3d8161457d565b60208201529392505050565b803567ffffffffffffffff811681146145aa57600080fd5b803560ff811681146145aa57600080fd5b600082601f830112614d8357600080fd5b8135602067ffffffffffffffff821115614d9f57614d9f614c20565b8160051b614dae828201614c9b565b9283528481018201928281019087851115614dc857600080fd5b83870192505b84831015613a4e578235614de18161457d565b82529183019190830190614dce565b600060c08284031215614e0257600080fd5b614e0a614c4f565b9050614e1582614d49565b8152614e2360208301614d61565b6020820152614e3460408301614d61565b6040820152614e4560608301614d61565b6060820152608082013567ffffffffffffffff80821115614e6557600080fd5b614e7185838601614d72565b608084015260a0840135915080821115614e8a57600080fd5b50614e9784828501614d72565b60a08301525092915050565b600060208284031215614eb557600080fd5b813567ffffffffffffffff811115614ecc57600080fd5b61168f84828501614df0565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614bb157600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614bb157600080fd5b600060208284031215614f5257600080fd5b61141a82614d61565b600060208284031215614f6d57600080fd5b61141a82614d49565b600061066d3683614df0565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614fb757600080fd5b830160208101925035905067ffffffffffffffff811115614fd757600080fd5b8060051b36038213156124f257600080fd5b8183526000602080850194508260005b858110156147dd57813561500c8161457d565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614ff9565b60208082528181018390526000906040808401600586901b8501820187855b888110156151c6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c36030181126150b557600080fd5b8b0180356150c2816145af565b63ffffffff16855280880135368290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff410181126150ff57600080fd5b8589018890520167ffffffffffffffff61511882614d49565b1687860152615128888201614d61565b606060ff8083168289015261513e8a8501614d61565b92506080818416818a0152615154838601614d61565b935060a09250818416838a015261516d81860186614f82565b60c08b81015294509150615188905061010089018483614fe9565b92505061519781840184614f82565b93509050838783030160e08801526151b0828483614fe9565b978a019796505050928701925050600101615053565b509098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561066d5761066d6151d4565b8135615221816145af565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000821617835560208401356152618161457d565b77ffffffffffffffffffffffffffffffffffffffff000000008160201b16837fffffffffffffffff0000000000000000000000000000000000000000000000008416171784555050505050565b6020808252818101839052600090604080840186845b8781101561532e5781356152d7816145af565b63ffffffff908116845282860135906152ef826145af565b1683860152818401356153018161457d565b73ffffffffffffffffffffffffffffffffffffffff168385015260609283019291909101906001016152c4565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526080810161168f6040830184805163ffffffff16825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600061485160608301846147e8565b60ff828116828216039081111561066d5761066d6151d4565b600060ff831680615425577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8060ff84160491505092915050565b63ffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201526000615475608083018461495a565b9695505050505050565b60006020828403121561549157600080fd5b5051919050565b600082601f8301126154a957600080fd5b813567ffffffffffffffff8111156154c3576154c3614c20565b6154f460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614c9b565b81815284602083860101111561550957600080fd5b816020850160208301376000918101602001919091529392505050565b600060e0823603121561553857600080fd5b615540614c78565b61554983614d49565b8152615557602084016145c1565b60208201526155686040840161459f565b6040820152615579606084016145c1565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156155ac57600080fd5b6155b836828601615498565b60c08301525092915050565b6000602082840312156155d657600080fd5b815161141a8161486d565b600083516155f3818460208801614936565b835190830190615607818360208801614936565b01949350505050565b6060815260006156236060830186614796565b602083820360208501526156378287614796565b84810360408601528551808252602080880194509091019060005b818110156151c657845183529383019391830191600101615652565b6000808585111561567e57600080fd5b8386111561568b57600080fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156156d85780818660020360031b1b83161692505b505092915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156156d85760019490940360031b84901b1690921692915050565b8281526000825161573e816020850160208701614936565b919091016020019392505050565b60ff818116838216019081111561066d5761066d6151d4565b6040815263ffffffff83511660408201526000602084015160a0606084015261579160e084018261495a565b90506040850151608084015267ffffffffffffffff60608601511660a084015273ffffffffffffffffffffffffffffffffffffffff60808601511660c08401528281036020840152614851818561495a565b63ffffffff8516815267ffffffffffffffff8416602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201526000615475608083018461495a565b60008251614bb1818460208701614936565b60008451615852818460208901614936565b8201838582376000930192835250909392505050565b8035602083101561066d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b60007fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b16601784015250615985601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea2646970667358221220364ab0e9d990eb52427657c0d4fcddf16a239e345810578b222d8a6ea656add664736f6c634300081600330000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b0000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000de0b6b3a7640000
Deployed Bytecode
0x6080604052600436106101845760003560e01c806361d027b3116100d6578063d15b0d491161007f578063f2fde38b11610059578063f2fde38b14610513578063faaebd2114610533578063fd9be5221461056e57600080fd5b8063d15b0d49146104a6578063d80e9bd9146104c6578063f0f44260146104f357600080fd5b80638da5cb5b116100b05780638da5cb5b1461042e5780639c33abf714610459578063c14c43491461048657600080fd5b806361d027b3146103a75780636750cd4c146103f9578063715018a61461041957600080fd5b806329460b0b1161013857806343ea4fa91161011257806343ea4fa9146102cb5780634d963200146102eb57806354fd4d501461037a57600080fd5b806329460b0b1461025057806339e3f938146102705780634389e58f1461029d57600080fd5b80631881d94d116101695780631881d94d146101f2578063200175f71461020e57806320efd7221461023057600080fd5b806301ffc9a714610190578063188183f4146101c557600080fd5b3661018b57005b600080fd5b34801561019c57600080fd5b506101b06101ab36600461453b565b61058e565b60405190151581526020015b60405180910390f35b3480156101d157600080fd5b506101e56101e03660046145cc565b610673565b6040516101bc9190614605565b3480156101fe57600080fd5b5060006040516101bc9190614638565b34801561021a57600080fd5b5061022e610229366004614679565b610780565b005b34801561023c57600080fd5b5061022e61024b3660046146ff565b61092d565b34801561025c57600080fd5b5061022e61026b366004614754565b610ae1565b34801561027c57600080fd5b5061029061028b3660046145cc565b610cc6565b6040516101bc919061485a565b3480156102a957600080fd5b506102bd6102b8366004614886565b610e67565b6040516101bc9291906149a4565b3480156102d757600080fd5b506102906102e63660046145cc565b610f61565b3480156102f757600080fd5b506103496103063660046145cc565b600460209081526000928352604080842090915290825290205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101bc565b34801561038657600080fd5b506040805160038152600060208201526002918101919091526060016101bc565b3480156103b357600080fd5b506003546103d49073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b34801561040557600080fd5b506101b06104143660046149c8565b61131b565b34801561042557600080fd5b5061022e611326565b34801561043a57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166103d4565b34801561046557600080fd5b506104796104743660046149e5565b61133a565b6040516101bc9190614a30565b34801561049257600080fd5b5061022e6104a1366004614a43565b611421565b3480156104b257600080fd5b5061022e6104c1366004614ab8565b611599565b3480156104d257600080fd5b506104e66104e1366004614886565b611627565b6040516101bc9190614ad1565b3480156104ff57600080fd5b5061022e61050e366004614ae8565b611697565b34801561051f57600080fd5b5061022e61052e366004614ae8565b6116ab565b34801561053f57600080fd5b5061056061054e366004614ae8565b60056020526000908152604090205481565b6040519081526020016101bc565b34801561057a57600080fd5b5061022e610589366004614b05565b61175f565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061062157507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b8061066d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080518082019091526000808252602082015263ffffffff80831660008181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845260048352818420948452939091528120805492939092169081900361070457825463ffffffff16610706565b805b63ffffffff1684528154640100000000900473ffffffffffffffffffffffffffffffffffffffff1680610758578354640100000000900473ffffffffffffffffffffffffffffffffffffffff1661075a565b805b73ffffffffffffffffffffffffffffffffffffffff166020860152509295945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146107d1576040517f885762a700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b73ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610853573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108779190614b31565b73ffffffffffffffffffffffffffffffffffffffff16036108c4576040517fe695d04400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108cf838383611859565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b73ffffffffffffffffffffffffffffffffffffffff16331461099c576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610adb57368383838181106109ba576109ba614b4e565b90506020028101906109cc9190614b7d565b90506109e36109de60208301836149c8565b6118cc565b60016109f560408301602084016149c8565b63ffffffff1603610a3557610a30610a1060208301836149c8565b86610a1e6040850185614bbb565b810190610a2b9190614cea565b611913565b610ad2565b6002610a4760408301602084016149c8565b63ffffffff1603610a8257610a30610a6260208301836149c8565b86610a706040850185614bbb565b810190610a7d9190614ea3565b6119c0565b610a9260408201602083016149c8565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b5060010161099f565b50505050565b610ae9611a09565b60005b81811015610c885736838383818110610b0757610b07614b4e565b9050602002810190610b199190614ed8565b905060ff610b2a6020830183614f0c565b610b3b906040810190602001614f40565b60ff1603610b75576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff610b846020830183614f0c565b610b95906060810190604001614f40565b60ff1603610bcf576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff610be56020830183614f0c565b610bf3906020810190614f5b565b67ffffffffffffffff1603610c34576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c52610c446020830183614f0c565b610c4d90614f76565b611a8a565b610c7f6000610c6460208401846149c8565b610c716020850185614f0c565b610c7a90614f76565b611adb565b50600101610aec565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610cba929190615034565b60405180910390a15050565b6040805160c0810182526000808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a01000000000000000000009091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610de757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dbc575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610e5657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e2b575b505050505081525050905092915050565b604080518082019091526000808252602082015260607f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b73ffffffffffffffffffffffffffffffffffffffff163314610eec576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610efa888888611e6f565b9092509050600080610f2c610f1560608c0160408d01614ae8565b610f2560808d0160608e016149c8565b858a611f3c565b9092509050610f3b8284615203565b604080518082019091529081526020810191909152945091925050505b94509492505050565b6040805160c0810182526000808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff168061101157825467ffffffffffffffff168452611030565b67ffffffffffffffff818116146110305767ffffffffffffffff811684525b815468010000000000000000900460ff166110e657825468010000000000000000900460ff16156110e157826001018054806020026020016040519081016040528092919081815260200182805480156110c057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611095575b50505050506080850152825468010000000000000000900460ff1660208501525b611184565b815468010000000000000000900460ff90811614611184578160010180548060200260200160405190810160405280929190818152602001828054801561116357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611138575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff166112535782546901000000000000000000900460ff161561124e578260020180548060200260200160405190810160405280929190818152602001828054801561121657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111eb575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b611309565b81546901000000000000000000900460ff9081161461130957816002018054806020026020016040519081016040528092919081815260200182805480156112d157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116112a6575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b61131284611a8a565b50505092915050565b600061066d826120ca565b61132e611a09565b6113386000612131565b565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff831601611399576113738385610673565b6040516020016113839190614605565b604051602081830303815290604052905061141a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff8316016113e0576113d08385610f61565b604051602001611383919061485a565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610ac9565b9392505050565b611429611a09565b60005b81811015611567573683838381811061144757611447614b4e565b60609081029290920192506000916114659150830160408401614ae8565b73ffffffffffffffffffffffffffffffffffffffff16036114b2576040517f20e9d05a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c260408201602083016149c8565b63ffffffff16600003611501576040517f49cfac4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec9061153c83856149c8565b63ffffffff168152602081019190915260400160002061155c8282615216565b50505060010161142c565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610cba9291906152ae565b6115a1611a09565b6002548111156115eb576002546040517f34084fb8000000000000000000000000000000000000000000000000000000008152610ac9918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b60408051808201909152600080825260208201526000806116786116516060890160408a01614ae8565b61166160808a0160608b016149c8565b61166e60c08b018b614bbb565b9050878a8a6121a6565b604080518082019091529182526020820152925050505b949350505050565b61169f611a09565b6116a8816122ac565b50565b6116b3611a09565b73ffffffffffffffffffffffffffffffffffffffff8116611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ac9565b6116a881612131565b6117688161231f565b60007f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b73ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f99190614b31565b9050611806818484612389565b6040805133815273ffffffffffffffffffffffffffffffffffffffff851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a666988390606001610920565b73ffffffffffffffffffffffffffffffffffffffff82166118a6576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118c773ffffffffffffffffffffffffffffffffffffffff841683836123b9565b505050565b6118d5816120ca565b6116a8576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610ac9565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc805906109209084908690859061533b565b6119cb828483611adb565b6119d58284610f61565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161092093929190615397565b60005473ffffffffffffffffffffffffffffffffffffffff163314611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac9565b602081015160ff16158015611aa45750606081015160ff16155b156116a8576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff9081161480611af65750602081015160ff16155b15611b3d5760808101515115611b38576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bbc565b806020015160ff16816080015151141580611b7857506002611b61600160ff6153d2565b611b6b91906153eb565b60ff16816020015160ff16115b15611baf576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bbc8160800151612446565b604081015160ff9081161480611bd75750604081015160ff16155b15611c5d5760a08101515115611c19576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611c58576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d34565b806040015160ff168160a0015151141580611c9857506002611c81600160ff6153d2565b611c8b91906153eb565b60ff16816040015160ff16115b15611ccf576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff161580611cf05750806040015160ff16816060015160ff16115b15611d27576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d348160a00151612446565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a0100000000000000000000959091169490940293909317835560808401518051859493611e4b939085019201906144a5565b5060a08201518051611e679160028401916020909101906144a5565b505050505050565b60606000806000611e8086866124e0565b90925090506000611eaa611e9a60608a0160408b01614ae8565b6101e060808b0160608c016149c8565b90506000611ebb60c08a018a614bbb565b90509050611ed381836000015163ffffffff166124f9565b6020820151611f0390611eec60808c0160608d016149c8565b611efc60608d0160408e01614ae8565b8488612541565b611f0d9086615203565b9450600080611f1c8b8661267a565b9092509050611f2b8288615203565b909b909a5098505050505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff1615610f585760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff8616604482015260648101859052831515608482015260009060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c54860000000000000000000000000000000000000000000000000000000017905260035491925060009182916120669173ffffffffffffffffffffffffffffffffffffffff16907f0000000000000000000000000000000000000000000000000000000000030d409084908761269d565b915091506120768787848461274e565b909550935084156120be5760035473ffffffffffffffffffffffffffffffffffffffff16600090815260056020526040812080548792906120b8908490615203565b90915550505b50505094509492505050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff1615158061141a5750546a0100000000000000000000900460ff16151592915050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000806121b686866124e0565b9150915060006121c78b8b846127c9565b905060006121d58c8c610673565b90506121eb8a826000015163ffffffff166124f9565b806020015173ffffffffffffffffffffffffffffffffffffffff1663709eb6648c8e8d886040518563ffffffff1660e01b815260040161222e9493929190615434565b602060405180830381865afa15801561224b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226f919061547f565b6122799083615203565b915060008061228a8e8e868e6127d6565b90925090506122998285615203565b9e909d509b505050505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f9060200161161c565b3360009081526005602052604090205480821115612373576040517f34084fb80000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ac9565b3360009081526005602052604090209190039055565b73ffffffffffffffffffffffffffffffffffffffff83166123ae576118c7828261291a565b6118c7838383611859565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526118c7908490612a20565b6000805b82518110156118c757600083828151811061246757612467614b4e565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116124d6576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b915060010161244a565b6060806124ed8484612b2f565b915091505b9250929050565b8082111561253d576040517fc667af3e0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ac9565b5050565b6040517f717e8a4200000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff87169063717e8a429061259c908890889088908890600401615434565b6020604051808303816000875af11580156125bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125df919061547f565b905080156126225773ffffffffffffffffffffffffffffffffffffffff86166000908152600560205260408120805483929061261c908490615203565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff88168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b60006060612692600561268c86615526565b85612c1c565b909590945092505050565b60006060863b8083036126c457604080516000808252602082019092529250925050612744565b60008060008761ffff1667ffffffffffffffff8111156126e6576126e6614c20565b6040519080825280601f01601f191660200182016040528015612710576020820181803683370190505b509050600080885160208a018c8f8ff191503d925087831115612731578792505b828152826000602083013e909450925050505b9550959350505050565b60008083158061275f575082516020115b1561276f57506000905080610f58565b600083806020019051810190612785919061547f565b90508515612795578091506127bf565b600060025488116127a8576002546127aa565b875b90508082116127b957816127bb565b805b9350505b5094509492505050565b600061168f848484612d78565b600354600090819073ffffffffffffffffffffffffffffffffffffffff1615610f585760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff8616604482015260648101859052831515608482015260009060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd42442210000000000000000000000000000000000000000000000000000000017905260035491925060009182916128fe9173ffffffffffffffffffffffffffffffffffffffff16907f0000000000000000000000000000000000000000000000000000000000030d409086612df2565b9150915061290e8787848461274e565b94509450505050610f58565b73ffffffffffffffffffffffffffffffffffffffff8216612967576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146129c1576040519150601f19603f3d011682016040523d82523d6000602084013e6129c6565b606091505b50509050806118c7576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ac9565b6000612a82826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612e9f9092919063ffffffff16565b9050805160001480612aa3575080806020019051810190612aa391906155c4565b6118c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ac9565b606080600080612b3f8686612eae565b915091508051600003612b9757604080516000808252602082019092528391612b8b565b604080518082019091526000815260606020820152815260200190600190039081612b635790505b509350935050506124f2565b604080516001808252818301909252600091816020015b604080518082019091526000815260606020820152815260200190600190039081612bae5790505090506040518060400160405280600260ff1681526020018381525081600081518110612c0457612c04614b4e565b60209081029190910101529196919550909350505050565b600060606000612c2b856130ef565b90506000612c38866131d5565b805160208201206060880151604089015192935090916000612c5a8284610f61565b905060008951600014612c8b5789600081518110612c7a57612c7a614b4e565b602002602001015160200151612c9c565b604051806020016040528060008152505b90506060612cfc8d846040518060a001604052808963ffffffff1681526020018c81526020018a8152602001876000015167ffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815250856131f2565b604051919b509150612d1490899089906020016155e1565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a0015183604051612d6093929190615610565b60405180910390a15050505050505050935093915050565b600080612d858585610f61565b905060008351600014612db65783600081518110612da557612da5614b4e565b602002602001015160200151612dc7565b604051806020016040528060008152505b9050600080612dd5836134de565b91509150612de684888a8585613782565b98975050505050505050565b60006060853b808303612e1957604080516000808252602082019092529250925050610f58565b60008060008761ffff1667ffffffffffffffff811115612e3b57612e3b614c20565b6040519080825280601f01601f191660200182016040528015612e65576020820181803683370190505b509050600080885160208a018d8dfa91503d925087831115612e85578792505b828152826000602083013e90999098509650505050505050565b606061168f8484600085613940565b6060806002831015612eef576040517f6592671c00000000000000000000000000000000000000000000000000000000815260006004820152602401610ac9565b6000612efe600282868861566e565b612f0791615698565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd82016130d8578060005b86831015613064576000612f5260018501858a8c61566e565b612f5b916156e0565b60f81c90506000819003612f9e576040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260006004820152602401610ac9565b8160ff16600003612fb157809150612fee565b8160ff168160ff1614612fee57366000612fcd86868c8e61566e565b91509150612fde8989868585613a59565b9099509750859450919250829150505b600184019360009061300590600301868b8d61566e565b61300e91615698565b60f01c90506000819003613051576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101869052602401610ac9565b8060020161ffff16850194505050612f39565b8287146130a0576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ac9565b60028711156130d1573660006130b885858b8d61566e565b915091506130c98888858585613a59565b909850965050505b50506130e6565b6130e3828787613bce565b93505b50509250929050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c001516040516020016131bf929190615726565b60006060600080613202856134de565b9150915060008760400151886020015161321c919061574c565b90508060ff1667ffffffffffffffff81111561323a5761323a614c20565b604051908082528060200260200182016040528015613263578160200160208202803683370190505b50935060005b8160ff168160ff1610156134d1576000896020015160ff168260ff16106132be5760a08a015160208b015161329e90846153d2565b60ff16815181106132b1576132b1614b4e565b60200260200101516132e0565b89608001518260ff16815181106132d7576132d7614b4e565b60200260200101515b60408051602081019091526000808252919250905b855181101561334d578360ff1686828151811061331457613314614b4e565b602002602001015160ff16036133455786818151811061333657613336614b4e565b6020026020010151915061334d565b6001016132f5565b506040517f95d376d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906395d376d7906133a2908d908590600401615765565b6020604051808303816000875af11580156133c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e5919061547f565b878460ff16815181106133fa576133fa614b4e565b6020026020010181815250506000878460ff168151811061341d5761341d614b4e565b602002602001015111156134c757868360ff168151811061344057613440614b4e565b60200260200101518c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134959190615203565b92505081905550868360ff16815181106134b1576134b1614b4e565b6020026020010151886134c49190615203565b97505b5050600101613269565b5050505094509492505050565b60608082516000036134ef57915091565b60006134fa84613e4d565b90508060ff166001036135ac5760408051600180825281830190925290816020015b606081526020019060019003908161351c579050509250838360008151811061354757613547614b4e565b60209081029190910101526040805160018082528183019092529081602001602082028036833701905050915061357f846003613f72565b8260008151811061359257613592614b4e565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff8111156135c8576135c8614c20565b6040519080825280602002602001820160405280156135f1578160200160208202803683370190505b5091508060ff1667ffffffffffffffff81111561361057613610614c20565b60405190808252806020026020018201604052801561364357816020015b606081526020019060019003908161362e5790505b50925060008060ff5b86518310156136f75760019092019160006136678885613ff2565b600294909401939050600061367c8986613f72565b90508260ff1660ff03613691578092506136e8565b8260ff168160ff16146136e8577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8486030160006136d08b8784614072565b90506136de8a8a87846141ec565b5093909301929150815b5061ffff16929092019161364c565b8183036000613707898584614072565b9050613715888885846141ec565b60005b8660ff168160ff16101561377657878160ff168151811061373b5761373b614b4e565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613718565b50505050505050915091565b60008086604001518760200151613799919061574c565b905060005b8160ff168160ff161015613935576000886020015160ff168260ff16106137f35760a089015160208a01516137d390846153d2565b60ff16815181106137e6576137e6614b4e565b6020026020010151613815565b88608001518260ff168151811061380c5761380c614b4e565b60200260200101515b60408051602081019091526000808252919250905b8651811015613882578360ff1687828151811061384957613849614b4e565b602002602001015160ff160361387a5787818151811061386b5761386b614b4e565b60200260200101519150613882565b60010161382a565b5089516040517f30bb3aac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416916330bb3aac916138db918d918d9087906004016157e3565b602060405180830381865afa1580156138f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061391c919061547f565b6139269086615203565b9450505080600101905061379e565b505095945050505050565b6060824710156139d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ac9565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516139fb919061582e565b60006040518083038185875af1925050503d8060008114613a38576040519150601f19603f3d011682016040523d82523d6000602084013e613a3d565b606091505b5091509150613a4e8783838761431b565b979650505050505050565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff861601613af457865115613ab657868484604051602001613aa293929190615840565b604051602081830303815290604052613aed565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9650613bc3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff861601613b8c57855115613b4e57858484604051602001613b3a93929190615840565b604051602081830303815290604052613b85565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9550613bc3565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff86166004820152602401610ac9565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff851601613cf45760228214613c35576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613c56613c4860226002868861566e565b613c5191615868565b6143bb565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b16602482015290915060340160405160208183030381529060405291505061141a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff851601613e1557604282111580613d2f5750606282115b15613d66576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613d79613c4860226002868861566e565b90506000613d8e613c4860426022878961566e565b905060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613dc2866042818a61566e565b613dcb91615868565b60405160086020938403029190911c9250613dfc916001916011918391889183916031916002918b918b91016158a4565b604051602081830303815290604052935050505061141a565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff85166004820152602401610ac9565b600080805b8351821015613f2e576001909101906000613e6d8584613ff2565b905060028301925060028161ffff161015613eb7576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ac9565b6000613ec38685613f72565b90508060ff1660ff03613f02576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b8316613f1f5760019485019460ff82161b831792505b5061ffff169190910190613e52565b83518214613f6b576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101839052602401610ac9565b5050919050565b6000613f7f826001615203565b83511015613fe9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401610ac9565b50016001015190565b6000613fff826002615203565b83511015614069576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606401610ac9565b50016002015190565b60608161408081601f615203565b10156140e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ac9565b6140f28284615203565b8451101561415c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ac9565b60608215801561417b57604051915060008252602082016040526141e3565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141b457805183526020928301920161419c565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff03614229576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061423683600161574c565b905060005b8451811015611e6757600085828151811061425857614258614b4e565b602002602001015190508060ff168360ff16036142cd5786828151811061428157614281614b4e565b60200260200101518460405160200161429b9291906155e1565b6040516020818303038152906040528783815181106142bc576142bc614b4e565b602002602001018190525050611e67565b8060ff1660000361431257828683815181106142eb576142eb614b4e565b602002602001019060ff16908160ff1681525050838783815181106142bc576142bc614b4e565b5060010161423b565b606083156143b15782516000036143aa5773ffffffffffffffffffffffffffffffffffffffff85163b6143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ac9565b508161168f565b61168f8383614461565b60006fffffffffffffffffffffffffffffffff82111561445d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610ac9565b5090565b8151156144715781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac99190614a30565b82805482825590600052602060002090810192821561451f579160200282015b8281111561451f57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906144c5565b5061445d9291505b8082111561445d5760008155600101614527565b60006020828403121561454d57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461141a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff811681146116a857600080fd5b80356145aa8161457d565b919050565b63ffffffff811681146116a857600080fd5b80356145aa816145af565b600080604083850312156145df57600080fd5b82356145ea8161457d565b915060208301356145fa816145af565b809150509250929050565b815163ffffffff16815260208083015173ffffffffffffffffffffffffffffffffffffffff16908201526040810161066d565b6020810160038310614673577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561468e57600080fd5b83356146998161457d565b925060208401356146a98161457d565b929592945050506040919091013590565b60008083601f8401126146cc57600080fd5b50813567ffffffffffffffff8111156146e457600080fd5b6020830191508360208260051b85010111156124f257600080fd5b60008060006040848603121561471457600080fd5b833561471f8161457d565b9250602084013567ffffffffffffffff81111561473b57600080fd5b614747868287016146ba565b9497909650939450505050565b6000806020838503121561476757600080fd5b823567ffffffffffffffff81111561477e57600080fd5b61478a858286016146ba565b90969095509350505050565b60008151808452602080850194506020840160005b838110156147dd57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016147ab565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c0608085015261483860c0850182614796565b905060a083015184820360a08601526148518282614796565b95945050505050565b60208152600061141a60208301846147e8565b80151581146116a857600080fd5b80356145aa8161486d565b6000806000806060858703121561489c57600080fd5b843567ffffffffffffffff808211156148b457600080fd5b9086019060e082890312156148c857600080fd5b909450602086013590808211156148de57600080fd5b818701915087601f8301126148f257600080fd5b81358181111561490157600080fd5b88602082850101111561491357600080fd5b60208301955080945050505061492b6040860161487b565b905092959194509250565b60005b83811015614951578181015183820152602001614939565b50506000910152565b60008151808452614972816020860160208601614936565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b825181526020808401519082015260606040820152600061168f606083018461495a565b6000602082840312156149da57600080fd5b813561141a816145af565b6000806000606084860312156149fa57600080fd5b8335614a05816145af565b92506020840135614a158161457d565b91506040840135614a25816145af565b809150509250925092565b60208152600061141a602083018461495a565b60008060208385031215614a5657600080fd5b823567ffffffffffffffff80821115614a6e57600080fd5b818501915085601f830112614a8257600080fd5b813581811115614a9157600080fd5b866020606083028501011115614aa657600080fd5b60209290920196919550909350505050565b600060208284031215614aca57600080fd5b5035919050565b81518152602080830151908201526040810161066d565b600060208284031215614afa57600080fd5b813561141a8161457d565b60008060408385031215614b1857600080fd5b8235614b238161457d565b946020939093013593505050565b600060208284031215614b4357600080fd5b815161141a8161457d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614bb157600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614bf057600080fd5b83018035915067ffffffffffffffff821115614c0b57600080fd5b6020019150368190038213156124f257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715614c7257614c72614c20565b60405290565b60405160e0810167ffffffffffffffff81118282101715614c7257614c72614c20565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614ce257614ce2614c20565b604052919050565b600060408284031215614cfc57600080fd5b6040516040810181811067ffffffffffffffff82111715614d1f57614d1f614c20565b6040528235614d2d816145af565b81526020830135614d3d8161457d565b60208201529392505050565b803567ffffffffffffffff811681146145aa57600080fd5b803560ff811681146145aa57600080fd5b600082601f830112614d8357600080fd5b8135602067ffffffffffffffff821115614d9f57614d9f614c20565b8160051b614dae828201614c9b565b9283528481018201928281019087851115614dc857600080fd5b83870192505b84831015613a4e578235614de18161457d565b82529183019190830190614dce565b600060c08284031215614e0257600080fd5b614e0a614c4f565b9050614e1582614d49565b8152614e2360208301614d61565b6020820152614e3460408301614d61565b6040820152614e4560608301614d61565b6060820152608082013567ffffffffffffffff80821115614e6557600080fd5b614e7185838601614d72565b608084015260a0840135915080821115614e8a57600080fd5b50614e9784828501614d72565b60a08301525092915050565b600060208284031215614eb557600080fd5b813567ffffffffffffffff811115614ecc57600080fd5b61168f84828501614df0565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614bb157600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614bb157600080fd5b600060208284031215614f5257600080fd5b61141a82614d61565b600060208284031215614f6d57600080fd5b61141a82614d49565b600061066d3683614df0565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614fb757600080fd5b830160208101925035905067ffffffffffffffff811115614fd757600080fd5b8060051b36038213156124f257600080fd5b8183526000602080850194508260005b858110156147dd57813561500c8161457d565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614ff9565b60208082528181018390526000906040808401600586901b8501820187855b888110156151c6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c36030181126150b557600080fd5b8b0180356150c2816145af565b63ffffffff16855280880135368290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff410181126150ff57600080fd5b8589018890520167ffffffffffffffff61511882614d49565b1687860152615128888201614d61565b606060ff8083168289015261513e8a8501614d61565b92506080818416818a0152615154838601614d61565b935060a09250818416838a015261516d81860186614f82565b60c08b81015294509150615188905061010089018483614fe9565b92505061519781840184614f82565b93509050838783030160e08801526151b0828483614fe9565b978a019796505050928701925050600101615053565b509098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561066d5761066d6151d4565b8135615221816145af565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000821617835560208401356152618161457d565b77ffffffffffffffffffffffffffffffffffffffff000000008160201b16837fffffffffffffffff0000000000000000000000000000000000000000000000008416171784555050505050565b6020808252818101839052600090604080840186845b8781101561532e5781356152d7816145af565b63ffffffff908116845282860135906152ef826145af565b1683860152818401356153018161457d565b73ffffffffffffffffffffffffffffffffffffffff168385015260609283019291909101906001016152c4565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526080810161168f6040830184805163ffffffff16825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600061485160608301846147e8565b60ff828116828216039081111561066d5761066d6151d4565b600060ff831680615425577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8060ff84160491505092915050565b63ffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201526000615475608083018461495a565b9695505050505050565b60006020828403121561549157600080fd5b5051919050565b600082601f8301126154a957600080fd5b813567ffffffffffffffff8111156154c3576154c3614c20565b6154f460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614c9b565b81815284602083860101111561550957600080fd5b816020850160208301376000918101602001919091529392505050565b600060e0823603121561553857600080fd5b615540614c78565b61554983614d49565b8152615557602084016145c1565b60208201526155686040840161459f565b6040820152615579606084016145c1565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156155ac57600080fd5b6155b836828601615498565b60c08301525092915050565b6000602082840312156155d657600080fd5b815161141a8161486d565b600083516155f3818460208801614936565b835190830190615607818360208801614936565b01949350505050565b6060815260006156236060830186614796565b602083820360208501526156378287614796565b84810360408601528551808252602080880194509091019060005b818110156151c657845183529383019391830191600101615652565b6000808585111561567e57600080fd5b8386111561568b57600080fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156156d85780818660020360031b1b83161692505b505092915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156156d85760019490940360031b84901b1690921692915050565b8281526000825161573e816020850160208701614936565b919091016020019392505050565b60ff818116838216019081111561066d5761066d6151d4565b6040815263ffffffff83511660408201526000602084015160a0606084015261579160e084018261495a565b90506040850151608084015267ffffffffffffffff60608601511660a084015273ffffffffffffffffffffffffffffffffffffffff60808601511660c08401528281036020840152614851818561495a565b63ffffffff8516815267ffffffffffffffff8416602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201526000615475608083018461495a565b60008251614bb1818460208701614936565b60008451615852818460208901614936565b8201838582376000930192835250909392505050565b8035602083101561066d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b60007fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b16601784015250615985601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea2646970667358221220364ab0e9d990eb52427657c0d4fcddf16a239e345810578b222d8a6ea656add664736f6c63430008160033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b0000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000de0b6b3a7640000
-----Decoded View---------------
Arg [0] : _endpoint (address): 0x6F475642a6e85809B1c36Fa62763669b1b48DD5B
Arg [1] : _treasuryGasLimit (uint256): 200000
Arg [2] : _treasuryGasForFeeCap (uint256): 1000000000000000000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b
Arg [1] : 0000000000000000000000000000000000000000000000000000000000030d40
Arg [2] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Loading...
Loading
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.