Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 9 from a total of 9 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 15207421 | 29 days ago | IN | 0 S | 0.00141529 | ||||
Set Approval For... | 14091971 | 35 days ago | IN | 0 S | 0.00266776 | ||||
Send | 12631221 | 42 days ago | IN | 0.09221711 S | 0.01252522 | ||||
Set Approval For... | 12631197 | 42 days ago | IN | 0 S | 0.00230995 | ||||
Approve | 10912682 | 51 days ago | IN | 0 S | 0.00281215 | ||||
Approve | 10901579 | 51 days ago | IN | 0 S | 0.00281215 | ||||
Send | 10751948 | 51 days ago | IN | 0.07565079 S | 0.0147197 | ||||
Set Base URI | 9510265 | 57 days ago | IN | 0 S | 0.00518947 | ||||
Set Peer | 9508287 | 57 days ago | IN | 0 S | 0.007145 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Onft
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.22;import { ONFT721 } from "../lib/devtools/packages/onft-evm/contracts/onft721/ONFT721.sol";import { ERC721Enumerable } from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";import { ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol";contract Onft is ONFT721, ERC721Enumerable {constructor(string memory _name,string memory _symbol,address _lzEndpoint,address _delegate) ONFT721(_name, _symbol, _lzEndpoint, _delegate) {}function _baseURI() internal view virtual override(ERC721) returns (string memory) {return baseTokenURI;}function tokensOfOwner(address owner) public view returns (uint256[] memory) {uint256 tokenCount = balanceOf(owner);uint256[] memory tokens = new uint256[](tokenCount);for(uint256 i = 0; i < tokenCount; i++) {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.22;import { ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol";import { ONFT721Core } from "./ONFT721Core.sol";/*** @title ONFT721 Contract* @dev ONFT721 is an ERC-721 token that extends the functionality of the ONFT721Core contract.*/abstract contract ONFT721 is ONFT721Core, ERC721 {string internal baseTokenURI;event BaseURISet(string baseURI);/*** @dev Constructor for the ONFT721 contract.* @param _name The name of the ONFT.* @param _symbol The symbol of the ONFT.* @param _lzEndpoint The LayerZero endpoint address.* @param _delegate The delegate capable of making OApp configurations inside of the endpoint.*/constructor(string memory _name,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/extensions/ERC721Enumerable.sol)pragma solidity ^0.8.20;import {ERC721} from "../ERC721.sol";import {IERC721Enumerable} from "./IERC721Enumerable.sol";import {IERC165} from "../../../utils/introspection/ERC165.sol";/*** @dev This implements an optional extension of {ERC721} defined in the ERC that adds enumerability* of all the token ids in the contract as well as all token ids owned by each account.** CAUTION: {ERC721} extensions that implement custom `balanceOf` logic, such as {ERC721Consecutive},* interfere with enumerability and should not be used together with {ERC721Enumerable}.*/abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {mapping(address owner => mapping(uint256 index => uint256)) private _ownedTokens;mapping(uint256 tokenId => uint256) private _ownedTokensIndex;uint256[] private _allTokens;mapping(uint256 tokenId => uint256) private _allTokensIndex;/*** @dev An `owner`'s token query was out of bounds for `index`.*
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/ERC721.sol)pragma solidity ^0.8.20;import {IERC721} from "./IERC721.sol";import {IERC721Metadata} from "./extensions/IERC721Metadata.sol";import {ERC721Utils} from "./utils/ERC721Utils.sol";import {Context} from "../../utils/Context.sol";import {Strings} from "../../utils/Strings.sol";import {IERC165, ERC165} from "../../utils/introspection/ERC165.sol";import {IERC721Errors} from "../../interfaces/draft-IERC6093.sol";/*** @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC-721] Non-Fungible Token Standard, including* the Metadata extension, but not including the Enumerable extension, which is available separately as* {ERC721Enumerable}.*/abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Errors {using Strings for uint256;// Token namestring private _name;// Token symbolstring private _symbol;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.22;import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";import { OApp, Origin } from "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol";import { OAppOptionsType3 } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol";import { IOAppMsgInspector } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol";import { OAppPreCrimeSimulator } from "@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol";import { IONFT721, MessagingFee, MessagingReceipt, SendParam } from "./interfaces/IONFT721.sol";import { ONFT721MsgCodec } from "./libs/ONFT721MsgCodec.sol";import { ONFTComposeMsgCodec } from "../libs/ONFTComposeMsgCodec.sol";/*** @title ONFT721Core* @dev Abstract contract for an ONFT721 token.*/abstract contract ONFT721Core is IONFT721, OApp, OAppPreCrimeSimulator, OAppOptionsType3 {using ONFT721MsgCodec for bytes;using ONFT721MsgCodec for bytes32;// @notice Msg types that are used to identify the various OFT operations.// @dev This can be extended in child contracts for non-default oft operations// @dev These values are used in things like combineOptions() in OAppOptionsType3.sol.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Enumerable.sol)pragma solidity ^0.8.20;import {IERC721} from "../IERC721.sol";/*** @title ERC-721 Non-Fungible Token Standard, optional enumeration extension* @dev See https://eips.ethereum.org/EIPS/eip-721*/interface IERC721Enumerable is IERC721 {/*** @dev Returns the total amount of tokens stored by the contract.*/function totalSupply() external view returns (uint256);/*** @dev Returns a token ID owned by `owner` at a given `index` of its token list.* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.*/function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);/*** @dev Returns a token ID at a given `index` of all the tokens stored by the contract.* Use along with {totalSupply} to enumerate all tokens.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol)pragma solidity ^0.8.20;import {IERC165} from "./IERC165.sol";/*** @dev Implementation of the {IERC165} interface.** Contracts that want to implement ERC-165 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);* }* ```*/abstract contract ERC165 is IERC165 {/*** @dev See {IERC165-supportsInterface}.*/function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {return interfaceId == type(IERC165).interfaceId;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol)pragma solidity ^0.8.20;import {IERC165} from "../../utils/introspection/IERC165.sol";/*** @dev Required interface of an ERC-721 compliant contract.*/interface IERC721 is IERC165 {/*** @dev Emitted when `tokenId` token is transferred from `from` to `to`.*/event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);/*** @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.*/event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);/*** @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.*/event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)pragma solidity ^0.8.20;import {IERC721} from "../IERC721.sol";/*** @title ERC-721 Non-Fungible Token Standard, optional metadata extension* @dev See https://eips.ethereum.org/EIPS/eip-721*/interface IERC721Metadata is IERC721 {/*** @dev Returns the token collection name.*/function name() external view returns (string memory);/*** @dev Returns the token collection symbol.*/function symbol() external view returns (string memory);/*** @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.*/function tokenURI(uint256 tokenId) external view returns (string memory);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/utils/ERC721Utils.sol)pragma solidity ^0.8.20;import {IERC721Receiver} from "../IERC721Receiver.sol";import {IERC721Errors} from "../../../interfaces/draft-IERC6093.sol";/*** @dev Library that provide common ERC-721 utility functions.** See https://eips.ethereum.org/EIPS/eip-721[ERC-721].** _Available since v5.1._*/library ERC721Utils {/*** @dev Performs an acceptance check for the provided `operator` by calling {IERC721-onERC721Received}* on the `to` address. The `operator` is generally the address that initiated the token transfer (i.e. `msg.sender`).** The acceptance call is not executed and treated as a no-op if the target address doesn't contain code (i.e. an EOA).* Otherwise, the recipient must implement {IERC721Receiver-onERC721Received} and return the acceptance magic value to accept* the transfer.*/function checkOnERC721Received(address operator,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)pragma solidity ^0.8.20;/*** @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 (last updated v5.1.0) (utils/Strings.sol)pragma solidity ^0.8.20;import {Math} from "./math/Math.sol";import {SignedMath} from "./math/SignedMath.sol";/*** @dev String operations.*/library Strings {bytes16 private constant HEX_DIGITS = "0123456789abcdef";uint8 private constant ADDRESS_LENGTH = 20;/*** @dev The `value` string doesn't fit in the specified `length`.*/error StringsInsufficientHexLength(uint256 value, uint256 length);/*** @dev Converts a `uint256` to its ASCII `string` decimal representation.*/function toString(uint256 value) internal pure returns (string memory) {unchecked {uint256 length = Math.log10(value) + 1;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)pragma solidity ^0.8.20;/*** @dev Standard ERC-20 Errors* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.*/interface IERC20Errors {/*** @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.* @param sender Address whose tokens are being transferred.* @param balance Current balance for the interacting account.* @param needed Minimum amount required to perform a transfer.*/error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);/*** @dev Indicates a failure with the token `sender`. Used in transfers.* @param sender Address whose tokens are being transferred.*/error ERC20InvalidSender(address sender);/*** @dev Indicates a failure with the token `receiver`. Used in transfers.* @param receiver Address to which tokens are being transferred.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)pragma solidity ^0.8.20;import {Context} from "../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.** The initial owner is set to the address provided by the deployer. This can* later be changed with {transferOwnership}.** This module is used through inheritance. It will make available the modifier* `onlyOwner`, which can be applied to your functions to restrict their use to* the owner.*/abstract contract Ownable is Context {address private _owner;/*** @dev The caller account is not authorized to perform an operation.*/error OwnableUnauthorizedAccount(address account);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers// solhint-disable-next-line no-unused-importimport { OAppSender, MessagingFee, MessagingReceipt } from "./OAppSender.sol";// @dev Import the 'Origin' so it's exposed to OApp implementers// solhint-disable-next-line no-unused-importimport { OAppReceiver, Origin } from "./OAppReceiver.sol";import { OAppCore } from "./OAppCore.sol";/*** @title OApp* @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.*/abstract contract OApp is OAppSender, OAppReceiver {/*** @dev Constructor to initialize the OApp with the provided endpoint and owner.* @param _endpoint The address of the LOCAL LayerZero endpoint.* @param _delegate The delegate capable of making OApp configurations inside of the endpoint.*/constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}/*** @notice Retrieves the OApp version information.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";import { IOAppOptionsType3, EnforcedOptionParam } from "../interfaces/IOAppOptionsType3.sol";/*** @title OAppOptionsType3* @dev Abstract contract implementing the IOAppOptionsType3 interface with type 3 options.*/abstract contract OAppOptionsType3 is IOAppOptionsType3, Ownable {uint16 internal constant OPTION_TYPE_3 = 3;// @dev The "msgType" should be defined in the child contract.mapping(uint32 eid => mapping(uint16 msgType => bytes enforcedOption)) public enforcedOptions;/*** @dev Sets the enforced options for specific endpoint and message type combinations.* @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.** @dev Only the owner/admin of the OApp can call this function.* @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.* @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.* eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay* if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().
12345678910111213141516171819202122// SPDX-License-Identifier: MITpragma solidity ^0.8.20;/*** @title IOAppMsgInspector* @dev Interface for the OApp Message Inspector, allowing examination of message and options contents.*/interface IOAppMsgInspector {// Custom error message for inspection failureerror InspectionFailed(bytes message, bytes options);/*** @notice Allows the inspector to examine LayerZero message contents and optionally throw a revert if invalid.* @param _message The message payload to be inspected.* @param _options Additional options or parameters for inspection.* @return valid A boolean indicating whether the inspection passed (true) or failed (false).** @dev Optionally done as a revert, OR use the boolean provided to handle the failure.*/function inspect(bytes calldata _message, bytes calldata _options) external view returns (bool valid);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";import { IPreCrime } from "./interfaces/IPreCrime.sol";import { IOAppPreCrimeSimulator, InboundPacket, Origin } from "./interfaces/IOAppPreCrimeSimulator.sol";/*** @title OAppPreCrimeSimulator* @dev Abstract contract serving as the base for preCrime simulation functionality in an OApp.*/abstract contract OAppPreCrimeSimulator is IOAppPreCrimeSimulator, Ownable {// The address of the preCrime implementation.address public preCrime;/*** @dev Retrieves the address of the OApp contract.* @return The address of the OApp contract.** @dev The simulator contract is the base contract for the OApp by default.* @dev If the simulator is a separate contract, override this function.*/function oApp() external view virtual returns (address) {return address(this);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.22;import { MessagingFee, MessagingReceipt } from "@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol";/*** @dev Struct representing token parameters for the ONFT send() operation.*/struct SendParam {uint32 dstEid; // Destination LayerZero EndpointV2 ID.bytes32 to; // Recipient address.uint256 tokenId;bytes extraOptions; // Additional options supplied by the caller to be used in the LayerZero message.bytes composeMsg; // The composed message for the send() operation.bytes onftCmd; // The ONFT command to be executed, unused in default ONFT implementations.}/*** @title IONFT* @dev Interface for the ONFT721 token.* @dev Does not inherit ERC721 to accommodate usage by OFT721Adapter.*/interface IONFT721 {// Custom error messageserror InvalidReceiver();
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.22;/*** @title ONFT721MsgCodec* @notice Library for encoding and decoding ONFT721 LayerZero messages.*/library ONFT721MsgCodec {uint8 private constant SEND_TO_OFFSET = 32;uint8 private constant TOKEN_ID_OFFSET = 64;/*** @dev Encodes an ONFT721 LayerZero message payload.* @param _sendTo The recipient address.* @param _tokenId The ID of the token to transfer.* @param _composeMsg The composed payload.* @return payload The encoded message payload.* @return hasCompose A boolean indicating whether the message payload contains a composed payload.*/function encode(bytes32 _sendTo,uint256 _tokenId,bytes memory _composeMsg) internal view returns (bytes memory payload, bool hasCompose) {hasCompose = _composeMsg.length > 0;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.22;/*** @title ONFT Composed Message Codec* @notice Library for encoding and decoding ONFT composed messages.*/library ONFTComposeMsgCodec {// Offset constants for decoding composed messagesuint8 private constant NONCE_OFFSET = 8;uint8 private constant SRC_EID_OFFSET = 12;uint8 private constant COMPOSE_FROM_OFFSET = 44;/*** @dev Encodes a ONFT721 composed message.* @param _nonce The nonce value.* @param _srcEid The source LayerZero endpoint ID.* @param _composeMsg The composed message.* @return The encoded payload, including the composed message.*/function encode(uint64 _nonce,uint32 _srcEid,bytes memory _composeMsg // 0x[composeFrom][composeMsg]) internal pure returns (bytes memory) {
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC-165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[ERC].** 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[ERC 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 v5.1.0) (token/ERC721/IERC721Receiver.sol)pragma solidity ^0.8.20;/*** @title ERC-721 token receiver interface* @dev Interface for any contract that wants to support safeTransfers* from ERC-721 asset contracts.*/interface IERC721Receiver {/*** @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}* by `operator` from `from`, this function is called.** It must return its Solidity selector to confirm the token transfer.* If any other value is returned or the interface is not implemented by the recipient, the transfer will be* reverted.** The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.*/function onERC721Received(address operator,address from,uint256 tokenId,bytes calldata data
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/Math.sol)pragma solidity ^0.8.20;import {Panic} from "../Panic.sol";import {SafeCast} from "./SafeCast.sol";/*** @dev Standard math utilities missing in the Solidity language.*/library Math {enum Rounding {Floor, // Toward negative infinityCeil, // Toward positive infinityTrunc, // Toward zeroExpand // Away from zero}/*** @dev Returns the addition of two unsigned integers, with an success flag (no overflow).*/function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {unchecked {uint256 c = a + b;if (c < a) return (false, 0);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SignedMath.sol)pragma solidity ^0.8.20;import {SafeCast} from "./SafeCast.sol";/*** @dev Standard signed math utilities missing in the Solidity language.*/library SignedMath {/*** @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.** IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.* However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute* one branch when needed, making this function more expensive.*/function ternary(bool condition, int256 a, int256 b) internal pure returns (int256) {unchecked {// branchless ternary works because:// b ^ (a ^ b) == a// b ^ 0 == breturn b ^ ((a ^ b) * int256(SafeCast.toUint(condition)));}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { SafeERC20, IERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";import { MessagingParams, MessagingFee, MessagingReceipt } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";import { OAppCore } from "./OAppCore.sol";/*** @title OAppSender* @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.*/abstract contract OAppSender is OAppCore {using SafeERC20 for IERC20;// Custom error messageserror NotEnoughNative(uint256 msgValue);error LzTokenUnavailable();// @dev The version of the OAppSender implementation.// @dev Version is bumped when changes are made to this contract.uint64 internal constant SENDER_VERSION = 1;/*** @notice Retrieves the OApp version information.* @return senderVersion The version of the OAppSender.sol contract.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { IOAppReceiver, Origin } from "./interfaces/IOAppReceiver.sol";import { OAppCore } from "./OAppCore.sol";/*** @title OAppReceiver* @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.*/abstract contract OAppReceiver is IOAppReceiver, OAppCore {// Custom error message for when the caller is not the registered endpoint/error OnlyEndpoint(address addr);// @dev The version of the OAppReceiver implementation.// @dev Version is bumped when changes are made to this contract.uint64 internal constant RECEIVER_VERSION = 2;/*** @notice Retrieves the OApp version information.* @return senderVersion The version of the OAppSender.sol contract.* @return receiverVersion The version of the OAppReceiver.sol contract.** @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.* ie. this is a RECEIVE only OApp.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";import { IOAppCore, ILayerZeroEndpointV2 } from "./interfaces/IOAppCore.sol";/*** @title OAppCore* @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.*/abstract contract OAppCore is IOAppCore, Ownable {// The LayerZero endpoint associated with the given OAppILayerZeroEndpointV2 public immutable endpoint;// Mapping to store peers associated with corresponding endpointsmapping(uint32 eid => bytes32 peer) public peers;/*** @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.* @param _endpoint The address of the LOCAL Layer Zero endpoint.* @param _delegate The delegate capable of making OApp configurations inside of the endpoint.** @dev The delegate typically should be set as the owner of the contract.*/constructor(address _endpoint, address _delegate) {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;/*** @dev Struct representing enforced option parameters.*/struct EnforcedOptionParam {uint32 eid; // Endpoint IDuint16 msgType; // Message Typebytes options; // Additional options}/*** @title IOAppOptionsType3* @dev Interface for the OApp with Type 3 Options, allowing the setting and combining of enforced options.*/interface IOAppOptionsType3 {// Custom error message for invalid optionserror InvalidOptions(bytes options);// Event emitted when enforced options are setevent EnforcedOptionSet(EnforcedOptionParam[] _enforcedOptions);/*** @notice Sets enforced options for specific endpoint and message type combinations.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;struct PreCrimePeer {uint32 eid;bytes32 preCrime;bytes32 oApp;}// TODO not done yetinterface IPreCrime {error OnlyOffChain();// for simulate()error PacketOversize(uint256 max, uint256 actual);error PacketUnsorted();error SimulationFailed(bytes reason);// for preCrime()error SimulationResultNotFound(uint32 eid);error InvalidSimulationResult(uint32 eid, bytes reason);error CrimeFound(bytes crime);function getConfig(bytes[] calldata _packets, uint256[] calldata _packetMsgValues) external returns (bytes memory);function simulate(
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;// @dev Import the Origin so it's exposed to OAppPreCrimeSimulator implementers.// solhint-disable-next-line no-unused-importimport { InboundPacket, Origin } from "../libs/Packet.sol";/*** @title IOAppPreCrimeSimulator Interface* @dev Interface for the preCrime simulation functionality in an OApp.*/interface IOAppPreCrimeSimulator {// @dev simulation result used in PreCrime implementationerror SimulationResult(bytes result);error OnlySelf();/*** @dev Emitted when the preCrime contract address is set.* @param preCrimeAddress The address of the preCrime contract.*/event PreCrimeSet(address preCrimeAddress);/*** @dev Retrieves the address of the preCrime contract implementation.* @return The address of the preCrime contract.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)pragma solidity ^0.8.20;/*** @dev Helper library for emitting standardized panic codes.** ```solidity* contract Example {* using Panic for uint256;** // Use any of the declared internal constants* function foo() { Panic.GENERIC.panic(); }** // Alternatively* function foo() { Panic.panic(Panic.GENERIC); }* }* ```** Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].** _Available since v5.1._*/// slither-disable-next-line unused-statelibrary Panic {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)// This file was procedurally generated from scripts/generate/templates/SafeCast.js.pragma solidity ^0.8.20;/*** @dev Wrappers over Solidity's uintXX/intXX/bool 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.*/library SafeCast {/*** @dev Value doesn't fit in an uint of `bits` size.*/error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);/*** @dev An int value doesn't fit in an uint of `bits` size.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)pragma solidity ^0.8.20;import {IERC20} from "../IERC20.sol";import {IERC1363} from "../../../interfaces/IERC1363.sol";import {Address} from "../../../utils/Address.sol";/*** @title SafeERC20* @dev Wrappers around ERC-20 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 {/*** @dev An operation with an ERC-20 token failed.*/error SafeERC20FailedOperation(address token);/*** @dev Indicates a failed `decreaseAllowance` request.
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;
12345678910111213141516171819202122232425// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { ILayerZeroReceiver, Origin } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol";interface IOAppReceiver is ILayerZeroReceiver {/*** @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.* @param _origin The origin information containing the source endpoint and sender address.* - srcEid: The source chain endpoint ID.* - sender: The sender address on the src chain.* - nonce: The nonce of the message.* @param _message The lzReceive payload.* @param _sender The sender address.* @return isSender Is a valid sender.** @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.* @dev The default sender IS the OAppReceiver implementer.*/function isComposeMsgSender(Origin calldata _origin,bytes calldata _message,address _sender) external view returns (bool isSender);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { ILayerZeroEndpointV2 } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";/*** @title IOAppCore*/interface IOAppCore {// Custom error messageserror OnlyPeer(uint32 eid, bytes32 sender);error NoPeer(uint32 eid);error InvalidEndpointCall();error InvalidDelegate();// Event emitted when a peer (OApp) is set for a corresponding endpointevent PeerSet(uint32 eid, bytes32 peer);/*** @notice Retrieves the OApp version information.* @return senderVersion The version of the OAppSender.sol contract.* @return receiverVersion The version of the OAppReceiver.sol contract.*/function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { Origin } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";import { PacketV1Codec } from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol";/*** @title InboundPacket* @dev Structure representing an inbound packet received by the contract.*/struct InboundPacket {Origin origin; // Origin information of the packet.uint32 dstEid; // Destination endpointId of the packet.address receiver; // Receiver address for the packet.bytes32 guid; // Unique identifier of the packet.uint256 value; // msg.value of the packet.address executor; // Executor address for the packet.bytes message; // Message payload of the packet.bytes extraData; // Additional arbitrary data for the packet.}/*** @title PacketDecoder* @dev Library for decoding LayerZero packets.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC-20 standard as defined in the ERC.*/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 value of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)pragma solidity ^0.8.20;import {IERC20} from "./IERC20.sol";import {IERC165} from "./IERC165.sol";/*** @title IERC1363* @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].** Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract* after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.*/interface IERC1363 is IERC20, IERC165 {/** Note: the ERC-165 identifier for this interface is 0xb0202a11.* 0xb0202a11 ===* bytes4(keccak256('transferAndCall(address,uint256)')) ^* bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^* bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^* bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^* bytes4(keccak256('approveAndCall(address,uint256)')) ^* bytes4(keccak256('approveAndCall(address,uint256,bytes)'))*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)pragma solidity ^0.8.20;import {Errors} from "./Errors.sol";/*** @dev Collection of functions related to the address type*/library Address {/*** @dev There's no code at `target` (it is not a contract).*/error AddressEmptyCode(address target);/*** @dev Replacement for Solidity's `transfer`: sends `amount` wei to* `recipient`, forwarding all available gas and reverting on errors.** https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost* of certain opcodes, possibly making contracts go over the 2300 gas limit* imposed by `transfer`, making them unable to receive funds via* `transfer`. {sendValue} removes this limitation.** https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
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 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);
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(
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);}
12345678910111213141516171819// SPDX-License-Identifier: MITpragma solidity >=0.8.0;import { Origin } from "./ILayerZeroEndpointV2.sol";interface ILayerZeroReceiver {function allowInitializePath(Origin calldata _origin) external view returns (bool);function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);function lzReceive(Origin calldata _origin,bytes32 _guid,bytes calldata _message,address _executor,bytes calldata _extraData) external payable;}
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;
123456// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)pragma solidity ^0.8.20;import {IERC20} from "../token/ERC20/IERC20.sol";
123456// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)pragma solidity ^0.8.20;import {IERC165} from "../utils/introspection/IERC165.sol";
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)pragma solidity ^0.8.20;/*** @dev Collection of common custom errors used in multiple contracts** IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.* It is recommended to avoid relying on the error API for critical functionality.** _Available since v5.1._*/library Errors {/*** @dev The ETH balance of the account is not enough to perform the operation.*/error InsufficientBalance(uint256 balance, uint256 needed);/*** @dev A call to an address target failed. The target may have reverted.*/error FailedCall();/*** @dev The deployment failed.
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: 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{"remappings": ["@layerzerolabs/onft-evm/=lib/devtools/packages/onft-evm/","@layerzerolabs/oft-evm/=lib/devtools/packages/oft-evm/","@layerzerolabs/oapp-evm/=lib/devtools/packages/oapp-evm/","@layerzerolabs/lz-evm-protocol-v2/=lib/layerzero-v2/packages/layerzero-v2/evm/protocol/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","layerzero-v2/=lib/layerzero-v2/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer": {"enabled": true,"runs": 200},"metadata": {"useLiteralContent": true,"bytecodeHash": "ipfs","appendCBOR": true},"outputSelection": {"*": {"*": [
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_lzEndpoint","type":"address"},{"internalType":"address","name":"_delegate","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ERC721EnumerableForbiddenBatchMint","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"ERC721OutOfBoundsIndex","type":"error"},{"inputs":[],"name":"InvalidDelegate","type":"error"},{"inputs":[],"name":"InvalidEndpointCall","type":"error"},{"inputs":[{"internalType":"bytes","name":"options","type":"bytes"}],"name":"InvalidOptions","type":"error"},{"inputs":[],"name":"InvalidReceiver","type":"error"},{"inputs":[],"name":"LzTokenUnavailable","type":"error"},{"inputs":[{"internalType":"uint32","name":"eid","type":"uint32"}],"name":"NoPeer","type":"error"},{"inputs":[{"internalType":"uint256","name":"msgValue","type":"uint256"}],"name":"NotEnoughNative","type":"error"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"OnlyEndpoint","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"OnlyNFTOwner","type":"error"},{"inputs":[{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"}],"name":"OnlyPeer","type":"error"},{"inputs":[],"name":"OnlySelf","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"SimulationResult","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"baseURI","type":"string"}],"name":"BaseURISet","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"uint16","name":"msgType","type":"uint16"},{"internalType":"bytes","name":"options","type":"bytes"}],"indexed":false,"internalType":"struct EnforcedOptionParam[]","name":"_enforcedOptions","type":"tuple[]"}],"name":"EnforcedOptionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"inspector","type":"address"}],"name":"MsgInspectorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"guid","type":"bytes32"},{"indexed":false,"internalType":"uint32","name":"srcEid","type":"uint32"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ONFTReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"guid","type":"bytes32"},{"indexed":false,"internalType":"uint32","name":"dstEid","type":"uint32"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ONFTSent","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":"uint32","name":"eid","type":"uint32"},{"indexed":false,"internalType":"bytes32","name":"peer","type":"bytes32"}],"name":"PeerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"preCrimeAddress","type":"address"}],"name":"PreCrimeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"SEND","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SEND_AND_COMPOSE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"origin","type":"tuple"}],"name":"allowInitializePath","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"approvalRequired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"uint16","name":"_msgType","type":"uint16"},{"internalType":"bytes","name":"_extraOptions","type":"bytes"}],"name":"combineOptions","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endpoint","outputs":[{"internalType":"contract ILayerZeroEndpointV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"uint16","name":"msgType","type":"uint16"}],"name":"enforcedOptions","outputs":[{"internalType":"bytes","name":"enforcedOption","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"","type":"tuple"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"address","name":"_sender","type":"address"}],"name":"isComposeMsgSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"bytes32","name":"_peer","type":"bytes32"}],"name":"isPeer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"_origin","type":"tuple"},{"internalType":"bytes32","name":"_guid","type":"bytes32"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"address","name":"_executor","type":"address"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"origin","type":"tuple"},{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bytes32","name":"guid","type":"bytes32"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"executor","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct InboundPacket[]","name":"_packets","type":"tuple[]"}],"name":"lzReceiveAndRevert","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"_origin","type":"tuple"},{"internalType":"bytes32","name":"_guid","type":"bytes32"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"address","name":"_executor","type":"address"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"lzReceiveSimulate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"msgInspector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"nextNonce","outputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oApp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oAppVersion","outputs":[{"internalType":"uint64","name":"senderVersion","type":"uint64"},{"internalType":"uint64","name":"receiverVersion","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"onftVersion","outputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"},{"internalType":"uint64","name":"version","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"eid","type":"uint32"}],"name":"peers","outputs":[{"internalType":"bytes32","name":"peer","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preCrime","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"extraOptions","type":"bytes"},{"internalType":"bytes","name":"composeMsg","type":"bytes"},{"internalType":"bytes","name":"onftCmd","type":"bytes"}],"internalType":"struct SendParam","name":"_sendParam","type":"tuple"},{"internalType":"bool","name":"_payInLzToken","type":"bool"}],"name":"quoteSend","outputs":[{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct MessagingFee","name":"msgFee","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"extraOptions","type":"bytes"},{"internalType":"bytes","name":"composeMsg","type":"bytes"},{"internalType":"bytes","name":"onftCmd","type":"bytes"}],"internalType":"struct SendParam","name":"_sendParam","type":"tuple"},{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct MessagingFee","name":"_fee","type":"tuple"},{"internalType":"address","name":"_refundAddress","type":"address"}],"name":"send","outputs":[{"components":[{"internalType":"bytes32","name":"guid","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"},{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct MessagingFee","name":"fee","type":"tuple"}],"internalType":"struct MessagingReceipt","name":"msgReceipt","type":"tuple"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"uint16","name":"msgType","type":"uint16"},{"internalType":"bytes","name":"options","type":"bytes"}],"internalType":"struct EnforcedOptionParam[]","name":"_enforcedOptions","type":"tuple[]"}],"name":"setEnforcedOptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_msgInspector","type":"address"}],"name":"setMsgInspector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"bytes32","name":"_peer","type":"bytes32"}],"name":"setPeer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_preCrime","type":"address"}],"name":"setPreCrime","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405234801561001057600080fd5b50604051613ea3380380613ea383398101604081905261002f91610257565b838383838383838381818181806001600160a01b03811661006a57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61007381610132565b506001600160a01b0380831660805281166100a157604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b1580156100e857600080fd5b505af11580156100fc573d6000803e3d6000fd5b505050505050505050508160059081610115919061036a565b506006610122828261036a565b5050505050505050505050610428565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126101a957600080fd5b81516001600160401b038111156101c2576101c2610182565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101f0576101f0610182565b60405281815283820160200185101561020857600080fd5b60005b828110156102275760208186018101518383018201520161020b565b506000918101602001919091529392505050565b80516001600160a01b038116811461025257600080fd5b919050565b6000806000806080858703121561026d57600080fd5b84516001600160401b0381111561028357600080fd5b61028f87828801610198565b602087015190955090506001600160401b038111156102ad57600080fd5b6102b987828801610198565b9350506102c86040860161023b565b91506102d66060860161023b565b905092959194509250565b600181811c908216806102f557607f821691505b60208210810361031557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036557806000526020600020601f840160051c810160208510156103425750805b601f840160051c820191505b81811015610362576000815560010161034e565b50505b505050565b81516001600160401b0381111561038357610383610182565b6103978161039184546102e1565b8461031b565b6020601f8211600181146103cb57600083156103b35750848201515b600019600385901b1c1916600184901b178455610362565b600084815260208120601f198516915b828110156103fb57878501518255602094850194600190920191016103db565b50848210156104195786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b608051613a2f61047460003960008181610541015281816109a10152818161134d01528181611607015281816118ab01528181611d6d0152818161219e01526122570152613a2f6000f3fe6080604052600436106102935760003560e01c80637d25a05e1161015a578063bb0b6a53116100c1578063d045a0dc1161007a578063d045a0dc14610831578063d424388514610844578063e985e9c514610864578063f2fde38b14610884578063fc0c546a146104a5578063ff7bd03d146108a457600080fd5b8063bb0b6a5314610764578063bc70b35414610791578063bd815db0146107b1578063c6414e7b146107c4578063c87b56dd146107f1578063ca5eb5e11461081157600080fd5b8063a22cb46511610113578063a22cb465146106a7578063a72f5dd8146106c7578063b21a33e4146106ef578063b731ea0a14610704578063b88d4fde14610724578063b98bd0701461074457600080fd5b80637d25a05e146105d857806382413eac146106135780638462151c146106335780638da5cb5b1461066057806395d89b411461067e5780639f68b9641461069357600080fd5b80633400288b116101fe5780635a0dfe4d116101b75780635a0dfe4d146104f85780635e280f111461052f5780636352211e146105635780636fc1b31e1461058357806370a08231146105a3578063715018a6146105c357600080fd5b80633400288b1461044557806342842e0e146104655780634f6ccce71461048557806352ae2879146104a55780635535d461146104b857806355f804b3146104d857600080fd5b806317442b701161025057806317442b701461037c57806318160ddd1461039e5780631f5e1334146103bd57806321eb730b146103e557806323b872dd146104055780632f745c591461042557600080fd5b806301ffc9a71461029857806306fdde03146102cd578063081812fc146102ef578063095ea7b314610327578063111ecdad1461034957806313137d6514610369575b600080fd5b3480156102a457600080fd5b506102b86102b33660046128ee565b6108c4565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e26108d5565b6040516102c4919061295b565b3480156102fb57600080fd5b5061030f61030a36600461296e565b610967565b6040516001600160a01b0390911681526020016102c4565b34801561033357600080fd5b5061034761034236600461299c565b610990565b005b34801561035557600080fd5b5060045461030f906001600160a01b031681565b610347610377366004612a28565b61099f565b34801561038857600080fd5b50604080516001815260026020820152016102c4565b3480156103aa57600080fd5b50600e545b6040519081526020016102c4565b3480156103c957600080fd5b506103d2600181565b60405161ffff90911681526020016102c4565b6103f86103f3366004612adb565b610a5f565b6040516102c49190612b48565b34801561041157600080fd5b50610347610420366004612b8a565b610b18565b34801561043157600080fd5b506103af61044036600461299c565b610ba3565b34801561045157600080fd5b50610347610460366004612be4565b610c08565b34801561047157600080fd5b50610347610480366004612b8a565b610c1a565b34801561049157600080fd5b506103af6104a036600461296e565b610c3a565b3480156104b157600080fd5b503061030f565b3480156104c457600080fd5b506102e26104d3366004612c12565b610c93565b3480156104e457600080fd5b506103476104f3366004612c45565b610d38565b34801561050457600080fd5b506102b8610513366004612be4565b63ffffffff919091166000908152600160205260409020541490565b34801561053b57600080fd5b5061030f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561056f57600080fd5b5061030f61057e36600461296e565b610d8a565b34801561058f57600080fd5b5061034761059e366004612c86565b610d95565b3480156105af57600080fd5b506103af6105be366004612c86565b610df2565b3480156105cf57600080fd5b50610347610e3a565b3480156105e457600080fd5b506105fb6105f3366004612be4565b600092915050565b6040516001600160401b0390911681526020016102c4565b34801561061f57600080fd5b506102b861062e366004612ca3565b610e4e565b34801561063f57600080fd5b5061065361064e366004612c86565b610e63565b6040516102c49190612d09565b34801561066c57600080fd5b506000546001600160a01b031661030f565b34801561068a57600080fd5b506102e2610efa565b34801561069f57600080fd5b5060006102b8565b3480156106b357600080fd5b506103476106c2366004612d5a565b610f09565b3480156106d357600080fd5b50604080516311f0c6d360e11b815260016020820152016102c4565b3480156106fb57600080fd5b506103d2600281565b34801561071057600080fd5b5060025461030f906001600160a01b031681565b34801561073057600080fd5b5061034761073f366004612ea0565b610f14565b34801561075057600080fd5b5061034761075f366004612f4f565b610f2c565b34801561077057600080fd5b506103af61077f366004612f84565b60016020526000908152604090205481565b34801561079d57600080fd5b506102e26107ac366004612f9f565b610f46565b6103476107bf366004612f4f565b6110ee565b3480156107d057600080fd5b506107e46107df366004612fff565b611278565b6040516102c49190613045565b3480156107fd57600080fd5b506102e261080c36600461296e565b6112be565b34801561081d57600080fd5b5061034761082c366004612c86565b611326565b61034761083f366004612a28565b6113ac565b34801561085057600080fd5b5061034761085f366004612c86565b6113db565b34801561087057600080fd5b506102b861087f36600461305c565b611431565b34801561089057600080fd5b5061034761089f366004612c86565b61145f565b3480156108b057600080fd5b506102b86108bf36600461308a565b61149d565b60006108cf826114d3565b92915050565b6060600580546108e4906130a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610910906130a6565b801561095d5780601f106109325761010080835404028352916020019161095d565b820191906000526020600020905b81548152906001019060200180831161094057829003601f168201915b5050505050905090565b6000610972826114f8565b506000828152600960205260409020546001600160a01b03166108cf565b61099b828233611531565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146109ef576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610a0990610a04908a612f84565b61153e565b14610a4757610a1b6020880188612f84565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109e6565b610a568787878787878761157a565b50505050505050565b610a67612891565b610a82336040860135610a7d6020880188612f84565b6116d9565b600080610a8e86611739565b9092509050610aba610aa36020880188612f84565b8383610ab4368a90038a018a6130da565b88611878565b805190935033907f986156872b2ee0022b9585231dbbfde457f87f8a16b6c45e1a81c54c4ad8351f610aef60208a018a612f84565b6040805163ffffffff9092168252808b013560208301520160405180910390a350509392505050565b6001600160a01b038216610b4257604051633250574960e11b8152600060048201526024016109e6565b6000610b4f838333611983565b9050836001600160a01b0316816001600160a01b031614610b9d576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016109e6565b50505050565b6000610bae83610df2565b8210610bdf5760405163295f44f760e21b81526001600160a01b0384166004820152602481018390526044016109e6565b506001600160a01b03919091166000908152600c60209081526040808320938352929052205490565b610c10611990565b61099b82826119bd565b610c3583838360405180602001604052806000815250610f14565b505050565b6000610c45600e5490565b8210610c6e5760405163295f44f760e21b815260006004820152602481018390526044016109e6565b600e8281548110610c8157610c8161310d565b90600052602060002001549050919050565b600360209081526000928352604080842090915290825290208054610cb7906130a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce3906130a6565b8015610d305780601f10610d0557610100808354040283529160200191610d30565b820191906000526020600020905b815481529060010190602001808311610d1357829003601f168201915b505050505081565b610d40611990565b600b610d4d82848361316a565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f6600b604051610d7e9190613229565b60405180910390a15050565b60006108cf826114f8565b610d9d611990565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b60006001600160a01b038216610e1e576040516322718ad960e21b8152600060048201526024016109e6565b506001600160a01b031660009081526008602052604090205490565b610e42611990565b610e4c6000611a0b565b565b6001600160a01b03811630145b949350505050565b60606000610e7083610df2565b90506000816001600160401b03811115610e8c57610e8c612d93565b604051908082528060200260200182016040528015610eb5578160200160208202803683370190505b50905060005b82811015610ef257610ecd8582610ba3565b828281518110610edf57610edf61310d565b6020908102919091010152600101610ebb565b509392505050565b6060600680546108e4906130a6565b61099b338383611a5b565b610f1f848484610b18565b610b9d3385858585611afa565b610f34611990565b61099b610f4182846132b5565b611c24565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610f7a906130a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa6906130a6565b8015610ff35780601f10610fc857610100808354040283529160200191610ff3565b820191906000526020600020905b815481529060010190602001808311610fd657829003601f168201915b5050505050905080516000036110435783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610e5b9350505050565b6000839003611053579050610e5b565b600283106110d15761109a84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d2b92505050565b806110a88460028188613392565b6040516020016110ba939291906133bc565b604051602081830303815290604052915050610e5b565b8383604051639a6d49cd60e01b81526004016109e692919061340d565b60005b818110156111f7573683838381811061110c5761110c61310d565b905060200281019061111e9190613421565b90506111516111306020830183612f84565b602083013563ffffffff919091166000908152600160205260409020541490565b61115b57506111ef565b3063d045a0dc60c08301358360a081013561117a610100830183613442565b61118b610100890160e08a01612c86565b6111996101208a018a613442565b6040518963ffffffff1660e01b81526004016111bb979695949392919061349d565b6000604051808303818588803b1580156111d457600080fd5b505af11580156111e8573d6000803e3d6000fd5b5050505050505b6001016110f1565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015611236573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261125e9190810190613523565b604051638351eea760e01b81526004016109e6919061295b565b604080518082019091526000808252602082015260008061129885611739565b90925090506112b56112ad6020870187612f84565b838387611d57565b95945050505050565b60606112c9826114f8565b5060006112d4611e2f565b905060008151116112f4576040518060200160405280600081525061131f565b806112fe84611e3e565b60405160200161130f929190613590565b6040516020818303038152906040525b9392505050565b61132e611990565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561139157600080fd5b505af11580156113a5573d6000803e3d6000fd5b5050505050565b3330146113cc5760405163029a949d60e31b815260040160405180910390fd5b610a5687878787878787610a47565b6113e3611990565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610de7565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205460ff1690565b611467611990565b6001600160a01b03811661149157604051631e4fbdf760e01b8152600060048201526024016109e6565b61149a81611a0b565b50565b60006020820180359060019083906114b59086612f84565b63ffffffff1681526020810191909152604001600020541492915050565b60006001600160e01b0319821663780e9d6360e01b14806108cf57506108cf82611ed0565b6000818152600760205260408120546001600160a01b0316806108cf57604051637e27328960e01b8152600481018490526024016109e6565b610c358383836001611f20565b63ffffffff8116600090815260016020526040812054806108cf5760405163f6ff4fb760e01b815263ffffffff841660048201526024016109e6565b600061158c6115898787612026565b90565b9050600061159a878761203e565b90506115b382826115ae60208d018d612f84565b61204e565b60408611156116775760006115ed6115d160608c0160408d016135bf565b6115de60208d018d612f84565b6115e88b8b612058565b6120a3565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906116439086908d9060009087906004016135dc565b600060405180830381600087803b15801561165d57600080fd5b505af1158015611671573d6000803e3d6000fd5b50505050505b6001600160a01b038216887f7883fa30ea56937810e36990b0bbb8d629d0cf59f68baf8431ff657cebe7eef56116b060208d018d612f84565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6116e282610d8a565b6001600160a01b0316836001600160a01b031614611730578261170483610d8a565b604051634342715b60e11b81526001600160a01b039283166004820152911660248201526044016109e6565b610c35826120d2565b606080602083013561175e57604051631e4ec46b60e01b815260040160405180910390fd5b60006117b46020850135604086013561177a6080880188613442565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061210d92505050565b90935090506000816117c75760016117ca565b60025b90506117ea6117dc6020870187612f84565b826107ac6060890189613442565b6004549093506001600160a01b031680156118705760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061182d9088908890600401613617565b602060405180830381865afa15801561184a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186e919061363c565b505b505050915091565b611880612891565b600061188f8460000151612172565b6020850151909150156118a9576118a9846020015161219a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016118f98c61153e565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611935929190613659565b60806040518083038185885af1158015611953573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119789190613703565b979650505050505050565b6000610e5b84848461227c565b6000546001600160a01b03163314610e4c5760405163118cdaa760e01b81523360048201526024016109e6565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b9101610d7e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216611a8d57604051630b61174360e31b81526001600160a01b03831660048201526024016109e6565b6001600160a01b038381166000818152600a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156113a557604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611b3c90889088908790879060040161374f565b6020604051808303816000875af1925050508015611b77575060408051601f3d908101601f19168201909252611b7491810190613782565b60015b611be0573d808015611ba5576040519150601f19603f3d011682016040523d82523d6000602084013e611baa565b606091505b508051600003611bd857604051633250574960e11b81526001600160a01b03851660048201526024016109e6565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14611c1c57604051633250574960e11b81526001600160a01b03851660048201526024016109e6565b505050505050565b60005b8151811015611cfb57611c56828281518110611c4557611c4561310d565b602002602001015160400151611d2b565b818181518110611c6857611c6861310d565b60200260200101516040015160036000848481518110611c8a57611c8a61310d565b60200260200101516000015163ffffffff1663ffffffff1681526020019081526020016000206000848481518110611cc457611cc461310d565b60200260200101516020015161ffff1661ffff1681526020019081526020016000209081611cf2919061379f565b50600101611c27565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610de7919061385d565b600281015161ffff811660031461099b5781604051639a6d49cd60e01b81526004016109e6919061295b565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001611dba8961153e565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611def929190613659565b6040805180830381865afa158015611e0b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b591906138ed565b6060600b80546108e4906130a6565b60606000611e4b83612349565b60010190506000816001600160401b03811115611e6a57611e6a612d93565b6040519080825280601f01601f191660200182016040528015611e94576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611e9e57509392505050565b60006001600160e01b031982166380ac58cd60e01b1480611f0157506001600160e01b03198216635b5e139f60e01b145b806108cf57506301ffc9a760e01b6001600160e01b03198316146108cf565b8080611f3457506001600160a01b03821615155b15611ff6576000611f44846114f8565b90506001600160a01b03831615801590611f705750826001600160a01b0316816001600160a01b031614155b8015611f835750611f818184611431565b155b15611fac5760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016109e6565b8115611ff45783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260096020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b60006120356020828486613392565b61131f91613909565b6000612035604060208486613392565b610c358383612421565b60606120678260408186613392565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b60608383836040516020016120ba93929190613927565b60405160208183030381529060405290509392505050565b60006120e16000836000611983565b90506001600160a01b03811661099b57604051637e27328960e01b8152600481018390526024016109e6565b8051606090151580612141576040805160208101879052908101859052606001604051602081830303815290604052612168565b848433856040516020016121589493929190613971565b6040516020818303038152906040525b9150935093915050565b6000813414612196576040516304fb820960e51b81523460048201526024016109e6565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221e91906139a5565b90506001600160a01b038116612247576040516329b99a9560e11b815260040160405180910390fd5b61099b6001600160a01b038216337f000000000000000000000000000000000000000000000000000000000000000085612486565b60008061228a8585856124e0565b90506001600160a01b0381166122e7576122e284600e80546000838152600f60205260408120829055600182018355919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0155565b61230a565b846001600160a01b0316816001600160a01b03161461230a5761230a81856125d9565b6001600160a01b038516612326576123218461265a565b610e5b565b846001600160a01b0316816001600160a01b031614610e5b57610e5b8585612709565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106123885772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106123b4576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106123d257662386f26fc10000830492506010015b6305f5e10083106123ea576305f5e100830492506008015b61271083106123fe57612710830492506004015b60648310612410576064830492506002015b600a83106108cf5760010192915050565b6001600160a01b03821661244b57604051633250574960e11b8152600060048201526024016109e6565b600061245983836000611983565b90506001600160a01b03811615610c35576040516339e3563760e11b8152600060048201526024016109e6565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610b9d908590612759565b6000828152600760205260408120546001600160a01b039081169083161561250d5761250d8184866127ca565b6001600160a01b0381161561254b5761252a600085600080611f20565b6001600160a01b038116600090815260086020526040902080546000190190555b6001600160a01b0385161561257a576001600160a01b0385166000908152600860205260409020805460010190555b60008481526007602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b60006125e483610df2565b6000838152600d60209081526040808320546001600160a01b0388168452600c9092529091209192509081831461263b57600083815260208281526040808320548584528184208190558352600d90915290208290555b6000938452600d60209081526040808620869055938552525081205550565b600e5460009061266c906001906139c2565b6000838152600f6020526040812054600e80549394509092849081106126945761269461310d565b9060005260206000200154905080600e83815481106126b5576126b561310d565b6000918252602080832090910192909255828152600f9091526040808220849055858252812055600e8054806126ed576126ed6139e3565b6001900381819060005260206000200160009055905550505050565b6000600161271684610df2565b61272091906139c2565b6001600160a01b039093166000908152600c602090815260408083208684528252808320859055938252600d9052919091209190915550565b600080602060008451602086016000885af18061277c576040513d6000823e3d81fd5b50506000513d915081156127945780600114156127a1565b6001600160a01b0384163b155b15610b9d57604051635274afe760e01b81526001600160a01b03851660048201526024016109e6565b6127d583838361282e565b610c35576001600160a01b03831661280357604051637e27328960e01b8152600481018290526024016109e6565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016109e6565b60006001600160a01b03831615801590610e5b5750826001600160a01b0316846001600160a01b0316148061286857506128688484611431565b80610e5b5750506000908152600960205260409020546001600160a01b03908116911614919050565b60405180606001604052806000801916815260200160006001600160401b031681526020016128d3604051806040016040528060008152602001600081525090565b905290565b6001600160e01b03198116811461149a57600080fd5b60006020828403121561290057600080fd5b813561131f816128d8565b60005b8381101561292657818101518382015260200161290e565b50506000910152565b6000815180845261294781602086016020860161290b565b601f01601f19169290920160200192915050565b60208152600061131f602083018461292f565b60006020828403121561298057600080fd5b5035919050565b6001600160a01b038116811461149a57600080fd5b600080604083850312156129af57600080fd5b82356129ba81612987565b946020939093013593505050565b6000606082840312156129da57600080fd5b50919050565b60008083601f8401126129f257600080fd5b5081356001600160401b03811115612a0957600080fd5b602083019150836020828501011115612a2157600080fd5b9250929050565b600080600080600080600060e0888a031215612a4357600080fd5b612a4d89896129c8565b96506060880135955060808801356001600160401b03811115612a6f57600080fd5b612a7b8a828b016129e0565b90965094505060a0880135612a8f81612987565b925060c08801356001600160401b03811115612aaa57600080fd5b612ab68a828b016129e0565b989b979a50959850939692959293505050565b600060c082840312156129da57600080fd5b60008060008385036080811215612af157600080fd5b84356001600160401b03811115612b0757600080fd5b612b1387828801612ac9565b9450506040601f1982011215612b2857600080fd5b506020840191506060840135612b3d81612987565b809150509250925092565b6000608082019050825182526001600160401b0360208401511660208301526040830151612b83604084018280518252602090810151910152565b5092915050565b600080600060608486031215612b9f57600080fd5b8335612baa81612987565b92506020840135612bba81612987565b929592945050506040919091013590565b803563ffffffff81168114612bdf57600080fd5b919050565b60008060408385031215612bf757600080fd5b6129ba83612bcb565b803561ffff81168114612bdf57600080fd5b60008060408385031215612c2557600080fd5b612c2e83612bcb565b9150612c3c60208401612c00565b90509250929050565b60008060208385031215612c5857600080fd5b82356001600160401b03811115612c6e57600080fd5b612c7a858286016129e0565b90969095509350505050565b600060208284031215612c9857600080fd5b813561131f81612987565b60008060008060a08587031215612cb957600080fd5b612cc386866129c8565b935060608501356001600160401b03811115612cde57600080fd5b612cea878288016129e0565b9094509250506080850135612cfe81612987565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015612d41578351835260209384019390920191600101612d23565b509095945050505050565b801515811461149a57600080fd5b60008060408385031215612d6d57600080fd5b8235612d7881612987565b91506020830135612d8881612d4c565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612dcb57612dcb612d93565b60405290565b604051606081016001600160401b0381118282101715612dcb57612dcb612d93565b604051601f8201601f191681016001600160401b0381118282101715612e1b57612e1b612d93565b604052919050565b60006001600160401b03821115612e3c57612e3c612d93565b50601f01601f191660200190565b600082601f830112612e5b57600080fd5b8135612e6e612e6982612e23565b612df3565b818152846020838601011115612e8357600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215612eb657600080fd5b8435612ec181612987565b93506020850135612ed181612987565b92506040850135915060608501356001600160401b03811115612ef357600080fd5b612eff87828801612e4a565b91505092959194509250565b60008083601f840112612f1d57600080fd5b5081356001600160401b03811115612f3457600080fd5b6020830191508360208260051b8501011115612a2157600080fd5b60008060208385031215612f6257600080fd5b82356001600160401b03811115612f7857600080fd5b612c7a85828601612f0b565b600060208284031215612f9657600080fd5b61131f82612bcb565b60008060008060608587031215612fb557600080fd5b612fbe85612bcb565b9350612fcc60208601612c00565b925060408501356001600160401b03811115612fe757600080fd5b612ff3878288016129e0565b95989497509550505050565b6000806040838503121561301257600080fd5b82356001600160401b0381111561302857600080fd5b61303485828601612ac9565b9250506020830135612d8881612d4c565b8151815260208083015190820152604081016108cf565b6000806040838503121561306f57600080fd5b823561307a81612987565b91506020830135612d8881612987565b60006060828403121561309c57600080fd5b61131f83836129c8565b600181811c908216806130ba57607f821691505b6020821081036129da57634e487b7160e01b600052602260045260246000fd5b600060408284031280156130ed57600080fd5b506130f6612da9565b823581526020928301359281019290925250919050565b634e487b7160e01b600052603260045260246000fd5b601f821115610c3557806000526020600020601f840160051c8101602085101561314a5750805b601f840160051c820191505b818110156113a55760008155600101613156565b6001600160401b0383111561318157613181612d93565b6131958361318f83546130a6565b83613123565b6000601f8411600181146131c957600085156131b15750838201355b600019600387901b1c1916600186901b1783556113a5565b600083815260209020601f19861690835b828110156131fa57868501358255602094850194600190920191016131da565b50868210156132175760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152600080835461323b816130a6565b806020860152600182166000811461325a5760018114613276576132aa565b60ff1983166040870152604082151560051b87010193506132aa565b86600052602060002060005b838110156132a157815488820160400152600190910190602001613282565b87016040019450505b509195945050505050565b60006001600160401b038311156132ce576132ce612d93565b8260051b6132de60208201612df3565b848152908301906020810190368311156132f757600080fd5b845b838110156133885780356001600160401b0381111561331757600080fd5b8601606036829003121561332a57600080fd5b613332612dd1565b61333b82612bcb565b815261334960208301612c00565b602082015260408201356001600160401b0381111561336757600080fd5b61337336828501612e4a565b604083015250845250602092830192016132f9565b5095945050505050565b600080858511156133a257600080fd5b838611156133af57600080fd5b5050820193919092039150565b600084516133ce81846020890161290b565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610e5b6020830184866133e4565b6000823561013e1983360301811261343857600080fd5b9190910192915050565b6000808335601e1984360301811261345957600080fd5b8301803591506001600160401b0382111561347357600080fd5b602001915036819003821315612a2157600080fd5b6001600160401b038116811461149a57600080fd5b63ffffffff6134ab89612bcb565b16815260208881013590820152600060408901356134c881613488565b6001600160401b03811660408401525087606083015260e060808301526134f360e0830187896133e4565b6001600160a01b03861660a084015282810360c08401526135158185876133e4565b9a9950505050505050505050565b60006020828403121561353557600080fd5b81516001600160401b0381111561354b57600080fd5b8201601f8101841361355c57600080fd5b805161356a612e6982612e23565b81815285602083850101111561357f57600080fd5b6112b582602083016020860161290b565b600083516135a281846020880161290b565b8351908301906135b681836020880161290b565b01949350505050565b6000602082840312156135d157600080fd5b813561131f81613488565b60018060a01b038516815283602082015261ffff8316604082015260806060820152600061360d608083018461292f565b9695505050505050565b60408152600061362a604083018561292f565b82810360208401526112b5818561292f565b60006020828403121561364e57600080fd5b815161131f81612d4c565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a0608084015261368f60e084018261292f565b90506060850151603f198483030160a08501526136ac828261292f565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b6000604082840312156136e457600080fd5b6136ec612da9565b825181526020928301519281019290925250919050565b6000608082840312801561371657600080fd5b5061371f612dd1565b82518152602083015161373181613488565b602082015261374384604085016136d2565b60408201529392505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061360d9083018461292f565b60006020828403121561379457600080fd5b815161131f816128d8565b81516001600160401b038111156137b8576137b8612d93565b6137cc816137c684546130a6565b84613123565b6020601f82116001811461380057600083156137e85750848201515b600019600385901b1c1916600184901b1784556113a5565b600084815260208120601f198516915b828110156138305787850151825560209485019460019092019101613810565b508482101561384e5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156138e157603f19878603018452815163ffffffff815116865261ffff602082015116602087015260408101519050606060408701526138cb606087018261292f565b9550506020938401939190910190600101613885565b50929695505050505050565b6000604082840312156138ff57600080fd5b61131f83836136d2565b803560208310156108cf57600019602084900360031b1b1692915050565b60c084901b6001600160c01b031916815260e083901b6001600160e01b0319166008820152815160009061396281600c85016020870161290b565b91909101600c01949350505050565b8481528360208201528260408201526000825161399581606085016020870161290b565b9190910160600195945050505050565b6000602082840312156139b757600080fd5b815161131f81612987565b818103818111156108cf57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fdfea264697066735822122019e7a84d89c0531d16f18ab00f09616d334053d7a50ce71105af00d424c90fbf64736f6c634300081c0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b000000000000000000000000b1ade4d54a1dbff321ea5db9e161e44f9fd08d2c000000000000000000000000000000000000000000000000000000000000000b426974566f7961676572730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007564f594147455200000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102935760003560e01c80637d25a05e1161015a578063bb0b6a53116100c1578063d045a0dc1161007a578063d045a0dc14610831578063d424388514610844578063e985e9c514610864578063f2fde38b14610884578063fc0c546a146104a5578063ff7bd03d146108a457600080fd5b8063bb0b6a5314610764578063bc70b35414610791578063bd815db0146107b1578063c6414e7b146107c4578063c87b56dd146107f1578063ca5eb5e11461081157600080fd5b8063a22cb46511610113578063a22cb465146106a7578063a72f5dd8146106c7578063b21a33e4146106ef578063b731ea0a14610704578063b88d4fde14610724578063b98bd0701461074457600080fd5b80637d25a05e146105d857806382413eac146106135780638462151c146106335780638da5cb5b1461066057806395d89b411461067e5780639f68b9641461069357600080fd5b80633400288b116101fe5780635a0dfe4d116101b75780635a0dfe4d146104f85780635e280f111461052f5780636352211e146105635780636fc1b31e1461058357806370a08231146105a3578063715018a6146105c357600080fd5b80633400288b1461044557806342842e0e146104655780634f6ccce71461048557806352ae2879146104a55780635535d461146104b857806355f804b3146104d857600080fd5b806317442b701161025057806317442b701461037c57806318160ddd1461039e5780631f5e1334146103bd57806321eb730b146103e557806323b872dd146104055780632f745c591461042557600080fd5b806301ffc9a71461029857806306fdde03146102cd578063081812fc146102ef578063095ea7b314610327578063111ecdad1461034957806313137d6514610369575b600080fd5b3480156102a457600080fd5b506102b86102b33660046128ee565b6108c4565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e26108d5565b6040516102c4919061295b565b3480156102fb57600080fd5b5061030f61030a36600461296e565b610967565b6040516001600160a01b0390911681526020016102c4565b34801561033357600080fd5b5061034761034236600461299c565b610990565b005b34801561035557600080fd5b5060045461030f906001600160a01b031681565b610347610377366004612a28565b61099f565b34801561038857600080fd5b50604080516001815260026020820152016102c4565b3480156103aa57600080fd5b50600e545b6040519081526020016102c4565b3480156103c957600080fd5b506103d2600181565b60405161ffff90911681526020016102c4565b6103f86103f3366004612adb565b610a5f565b6040516102c49190612b48565b34801561041157600080fd5b50610347610420366004612b8a565b610b18565b34801561043157600080fd5b506103af61044036600461299c565b610ba3565b34801561045157600080fd5b50610347610460366004612be4565b610c08565b34801561047157600080fd5b50610347610480366004612b8a565b610c1a565b34801561049157600080fd5b506103af6104a036600461296e565b610c3a565b3480156104b157600080fd5b503061030f565b3480156104c457600080fd5b506102e26104d3366004612c12565b610c93565b3480156104e457600080fd5b506103476104f3366004612c45565b610d38565b34801561050457600080fd5b506102b8610513366004612be4565b63ffffffff919091166000908152600160205260409020541490565b34801561053b57600080fd5b5061030f7f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b81565b34801561056f57600080fd5b5061030f61057e36600461296e565b610d8a565b34801561058f57600080fd5b5061034761059e366004612c86565b610d95565b3480156105af57600080fd5b506103af6105be366004612c86565b610df2565b3480156105cf57600080fd5b50610347610e3a565b3480156105e457600080fd5b506105fb6105f3366004612be4565b600092915050565b6040516001600160401b0390911681526020016102c4565b34801561061f57600080fd5b506102b861062e366004612ca3565b610e4e565b34801561063f57600080fd5b5061065361064e366004612c86565b610e63565b6040516102c49190612d09565b34801561066c57600080fd5b506000546001600160a01b031661030f565b34801561068a57600080fd5b506102e2610efa565b34801561069f57600080fd5b5060006102b8565b3480156106b357600080fd5b506103476106c2366004612d5a565b610f09565b3480156106d357600080fd5b50604080516311f0c6d360e11b815260016020820152016102c4565b3480156106fb57600080fd5b506103d2600281565b34801561071057600080fd5b5060025461030f906001600160a01b031681565b34801561073057600080fd5b5061034761073f366004612ea0565b610f14565b34801561075057600080fd5b5061034761075f366004612f4f565b610f2c565b34801561077057600080fd5b506103af61077f366004612f84565b60016020526000908152604090205481565b34801561079d57600080fd5b506102e26107ac366004612f9f565b610f46565b6103476107bf366004612f4f565b6110ee565b3480156107d057600080fd5b506107e46107df366004612fff565b611278565b6040516102c49190613045565b3480156107fd57600080fd5b506102e261080c36600461296e565b6112be565b34801561081d57600080fd5b5061034761082c366004612c86565b611326565b61034761083f366004612a28565b6113ac565b34801561085057600080fd5b5061034761085f366004612c86565b6113db565b34801561087057600080fd5b506102b861087f36600461305c565b611431565b34801561089057600080fd5b5061034761089f366004612c86565b61145f565b3480156108b057600080fd5b506102b86108bf36600461308a565b61149d565b60006108cf826114d3565b92915050565b6060600580546108e4906130a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610910906130a6565b801561095d5780601f106109325761010080835404028352916020019161095d565b820191906000526020600020905b81548152906001019060200180831161094057829003601f168201915b5050505050905090565b6000610972826114f8565b506000828152600960205260409020546001600160a01b03166108cf565b61099b828233611531565b5050565b7f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b6001600160a01b031633146109ef576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610a0990610a04908a612f84565b61153e565b14610a4757610a1b6020880188612f84565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109e6565b610a568787878787878761157a565b50505050505050565b610a67612891565b610a82336040860135610a7d6020880188612f84565b6116d9565b600080610a8e86611739565b9092509050610aba610aa36020880188612f84565b8383610ab4368a90038a018a6130da565b88611878565b805190935033907f986156872b2ee0022b9585231dbbfde457f87f8a16b6c45e1a81c54c4ad8351f610aef60208a018a612f84565b6040805163ffffffff9092168252808b013560208301520160405180910390a350509392505050565b6001600160a01b038216610b4257604051633250574960e11b8152600060048201526024016109e6565b6000610b4f838333611983565b9050836001600160a01b0316816001600160a01b031614610b9d576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016109e6565b50505050565b6000610bae83610df2565b8210610bdf5760405163295f44f760e21b81526001600160a01b0384166004820152602481018390526044016109e6565b506001600160a01b03919091166000908152600c60209081526040808320938352929052205490565b610c10611990565b61099b82826119bd565b610c3583838360405180602001604052806000815250610f14565b505050565b6000610c45600e5490565b8210610c6e5760405163295f44f760e21b815260006004820152602481018390526044016109e6565b600e8281548110610c8157610c8161310d565b90600052602060002001549050919050565b600360209081526000928352604080842090915290825290208054610cb7906130a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce3906130a6565b8015610d305780601f10610d0557610100808354040283529160200191610d30565b820191906000526020600020905b815481529060010190602001808311610d1357829003601f168201915b505050505081565b610d40611990565b600b610d4d82848361316a565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f6600b604051610d7e9190613229565b60405180910390a15050565b60006108cf826114f8565b610d9d611990565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b60006001600160a01b038216610e1e576040516322718ad960e21b8152600060048201526024016109e6565b506001600160a01b031660009081526008602052604090205490565b610e42611990565b610e4c6000611a0b565b565b6001600160a01b03811630145b949350505050565b60606000610e7083610df2565b90506000816001600160401b03811115610e8c57610e8c612d93565b604051908082528060200260200182016040528015610eb5578160200160208202803683370190505b50905060005b82811015610ef257610ecd8582610ba3565b828281518110610edf57610edf61310d565b6020908102919091010152600101610ebb565b509392505050565b6060600680546108e4906130a6565b61099b338383611a5b565b610f1f848484610b18565b610b9d3385858585611afa565b610f34611990565b61099b610f4182846132b5565b611c24565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610f7a906130a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa6906130a6565b8015610ff35780601f10610fc857610100808354040283529160200191610ff3565b820191906000526020600020905b815481529060010190602001808311610fd657829003601f168201915b5050505050905080516000036110435783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610e5b9350505050565b6000839003611053579050610e5b565b600283106110d15761109a84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d2b92505050565b806110a88460028188613392565b6040516020016110ba939291906133bc565b604051602081830303815290604052915050610e5b565b8383604051639a6d49cd60e01b81526004016109e692919061340d565b60005b818110156111f7573683838381811061110c5761110c61310d565b905060200281019061111e9190613421565b90506111516111306020830183612f84565b602083013563ffffffff919091166000908152600160205260409020541490565b61115b57506111ef565b3063d045a0dc60c08301358360a081013561117a610100830183613442565b61118b610100890160e08a01612c86565b6111996101208a018a613442565b6040518963ffffffff1660e01b81526004016111bb979695949392919061349d565b6000604051808303818588803b1580156111d457600080fd5b505af11580156111e8573d6000803e3d6000fd5b5050505050505b6001016110f1565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015611236573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261125e9190810190613523565b604051638351eea760e01b81526004016109e6919061295b565b604080518082019091526000808252602082015260008061129885611739565b90925090506112b56112ad6020870187612f84565b838387611d57565b95945050505050565b60606112c9826114f8565b5060006112d4611e2f565b905060008151116112f4576040518060200160405280600081525061131f565b806112fe84611e3e565b60405160200161130f929190613590565b6040516020818303038152906040525b9392505050565b61132e611990565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b169063ca5eb5e190602401600060405180830381600087803b15801561139157600080fd5b505af11580156113a5573d6000803e3d6000fd5b5050505050565b3330146113cc5760405163029a949d60e31b815260040160405180910390fd5b610a5687878787878787610a47565b6113e3611990565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610de7565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205460ff1690565b611467611990565b6001600160a01b03811661149157604051631e4fbdf760e01b8152600060048201526024016109e6565b61149a81611a0b565b50565b60006020820180359060019083906114b59086612f84565b63ffffffff1681526020810191909152604001600020541492915050565b60006001600160e01b0319821663780e9d6360e01b14806108cf57506108cf82611ed0565b6000818152600760205260408120546001600160a01b0316806108cf57604051637e27328960e01b8152600481018490526024016109e6565b610c358383836001611f20565b63ffffffff8116600090815260016020526040812054806108cf5760405163f6ff4fb760e01b815263ffffffff841660048201526024016109e6565b600061158c6115898787612026565b90565b9050600061159a878761203e565b90506115b382826115ae60208d018d612f84565b61204e565b60408611156116775760006115ed6115d160608c0160408d016135bf565b6115de60208d018d612f84565b6115e88b8b612058565b6120a3565b604051633e5ac80960e11b81529091506001600160a01b037f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b1690637cb59012906116439086908d9060009087906004016135dc565b600060405180830381600087803b15801561165d57600080fd5b505af1158015611671573d6000803e3d6000fd5b50505050505b6001600160a01b038216887f7883fa30ea56937810e36990b0bbb8d629d0cf59f68baf8431ff657cebe7eef56116b060208d018d612f84565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6116e282610d8a565b6001600160a01b0316836001600160a01b031614611730578261170483610d8a565b604051634342715b60e11b81526001600160a01b039283166004820152911660248201526044016109e6565b610c35826120d2565b606080602083013561175e57604051631e4ec46b60e01b815260040160405180910390fd5b60006117b46020850135604086013561177a6080880188613442565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061210d92505050565b90935090506000816117c75760016117ca565b60025b90506117ea6117dc6020870187612f84565b826107ac6060890189613442565b6004549093506001600160a01b031680156118705760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061182d9088908890600401613617565b602060405180830381865afa15801561184a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186e919061363c565b505b505050915091565b611880612891565b600061188f8460000151612172565b6020850151909150156118a9576118a9846020015161219a565b7f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b6001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016118f98c61153e565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611935929190613659565b60806040518083038185885af1158015611953573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119789190613703565b979650505050505050565b6000610e5b84848461227c565b6000546001600160a01b03163314610e4c5760405163118cdaa760e01b81523360048201526024016109e6565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b9101610d7e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216611a8d57604051630b61174360e31b81526001600160a01b03831660048201526024016109e6565b6001600160a01b038381166000818152600a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156113a557604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611b3c90889088908790879060040161374f565b6020604051808303816000875af1925050508015611b77575060408051601f3d908101601f19168201909252611b7491810190613782565b60015b611be0573d808015611ba5576040519150601f19603f3d011682016040523d82523d6000602084013e611baa565b606091505b508051600003611bd857604051633250574960e11b81526001600160a01b03851660048201526024016109e6565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14611c1c57604051633250574960e11b81526001600160a01b03851660048201526024016109e6565b505050505050565b60005b8151811015611cfb57611c56828281518110611c4557611c4561310d565b602002602001015160400151611d2b565b818181518110611c6857611c6861310d565b60200260200101516040015160036000848481518110611c8a57611c8a61310d565b60200260200101516000015163ffffffff1663ffffffff1681526020019081526020016000206000848481518110611cc457611cc461310d565b60200260200101516020015161ffff1661ffff1681526020019081526020016000209081611cf2919061379f565b50600101611c27565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610de7919061385d565b600281015161ffff811660031461099b5781604051639a6d49cd60e01b81526004016109e6919061295b565b60408051808201909152600080825260208201527f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b6001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001611dba8961153e565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611def929190613659565b6040805180830381865afa158015611e0b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b591906138ed565b6060600b80546108e4906130a6565b60606000611e4b83612349565b60010190506000816001600160401b03811115611e6a57611e6a612d93565b6040519080825280601f01601f191660200182016040528015611e94576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611e9e57509392505050565b60006001600160e01b031982166380ac58cd60e01b1480611f0157506001600160e01b03198216635b5e139f60e01b145b806108cf57506301ffc9a760e01b6001600160e01b03198316146108cf565b8080611f3457506001600160a01b03821615155b15611ff6576000611f44846114f8565b90506001600160a01b03831615801590611f705750826001600160a01b0316816001600160a01b031614155b8015611f835750611f818184611431565b155b15611fac5760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016109e6565b8115611ff45783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260096020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b60006120356020828486613392565b61131f91613909565b6000612035604060208486613392565b610c358383612421565b60606120678260408186613392565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b60608383836040516020016120ba93929190613927565b60405160208183030381529060405290509392505050565b60006120e16000836000611983565b90506001600160a01b03811661099b57604051637e27328960e01b8152600481018390526024016109e6565b8051606090151580612141576040805160208101879052908101859052606001604051602081830303815290604052612168565b848433856040516020016121589493929190613971565b6040516020818303038152906040525b9150935093915050565b6000813414612196576040516304fb820960e51b81523460048201526024016109e6565b5090565b60007f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b6001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221e91906139a5565b90506001600160a01b038116612247576040516329b99a9560e11b815260040160405180910390fd5b61099b6001600160a01b038216337f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b85612486565b60008061228a8585856124e0565b90506001600160a01b0381166122e7576122e284600e80546000838152600f60205260408120829055600182018355919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0155565b61230a565b846001600160a01b0316816001600160a01b03161461230a5761230a81856125d9565b6001600160a01b038516612326576123218461265a565b610e5b565b846001600160a01b0316816001600160a01b031614610e5b57610e5b8585612709565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106123885772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106123b4576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106123d257662386f26fc10000830492506010015b6305f5e10083106123ea576305f5e100830492506008015b61271083106123fe57612710830492506004015b60648310612410576064830492506002015b600a83106108cf5760010192915050565b6001600160a01b03821661244b57604051633250574960e11b8152600060048201526024016109e6565b600061245983836000611983565b90506001600160a01b03811615610c35576040516339e3563760e11b8152600060048201526024016109e6565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610b9d908590612759565b6000828152600760205260408120546001600160a01b039081169083161561250d5761250d8184866127ca565b6001600160a01b0381161561254b5761252a600085600080611f20565b6001600160a01b038116600090815260086020526040902080546000190190555b6001600160a01b0385161561257a576001600160a01b0385166000908152600860205260409020805460010190555b60008481526007602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b60006125e483610df2565b6000838152600d60209081526040808320546001600160a01b0388168452600c9092529091209192509081831461263b57600083815260208281526040808320548584528184208190558352600d90915290208290555b6000938452600d60209081526040808620869055938552525081205550565b600e5460009061266c906001906139c2565b6000838152600f6020526040812054600e80549394509092849081106126945761269461310d565b9060005260206000200154905080600e83815481106126b5576126b561310d565b6000918252602080832090910192909255828152600f9091526040808220849055858252812055600e8054806126ed576126ed6139e3565b6001900381819060005260206000200160009055905550505050565b6000600161271684610df2565b61272091906139c2565b6001600160a01b039093166000908152600c602090815260408083208684528252808320859055938252600d9052919091209190915550565b600080602060008451602086016000885af18061277c576040513d6000823e3d81fd5b50506000513d915081156127945780600114156127a1565b6001600160a01b0384163b155b15610b9d57604051635274afe760e01b81526001600160a01b03851660048201526024016109e6565b6127d583838361282e565b610c35576001600160a01b03831661280357604051637e27328960e01b8152600481018290526024016109e6565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016109e6565b60006001600160a01b03831615801590610e5b5750826001600160a01b0316846001600160a01b0316148061286857506128688484611431565b80610e5b5750506000908152600960205260409020546001600160a01b03908116911614919050565b60405180606001604052806000801916815260200160006001600160401b031681526020016128d3604051806040016040528060008152602001600081525090565b905290565b6001600160e01b03198116811461149a57600080fd5b60006020828403121561290057600080fd5b813561131f816128d8565b60005b8381101561292657818101518382015260200161290e565b50506000910152565b6000815180845261294781602086016020860161290b565b601f01601f19169290920160200192915050565b60208152600061131f602083018461292f565b60006020828403121561298057600080fd5b5035919050565b6001600160a01b038116811461149a57600080fd5b600080604083850312156129af57600080fd5b82356129ba81612987565b946020939093013593505050565b6000606082840312156129da57600080fd5b50919050565b60008083601f8401126129f257600080fd5b5081356001600160401b03811115612a0957600080fd5b602083019150836020828501011115612a2157600080fd5b9250929050565b600080600080600080600060e0888a031215612a4357600080fd5b612a4d89896129c8565b96506060880135955060808801356001600160401b03811115612a6f57600080fd5b612a7b8a828b016129e0565b90965094505060a0880135612a8f81612987565b925060c08801356001600160401b03811115612aaa57600080fd5b612ab68a828b016129e0565b989b979a50959850939692959293505050565b600060c082840312156129da57600080fd5b60008060008385036080811215612af157600080fd5b84356001600160401b03811115612b0757600080fd5b612b1387828801612ac9565b9450506040601f1982011215612b2857600080fd5b506020840191506060840135612b3d81612987565b809150509250925092565b6000608082019050825182526001600160401b0360208401511660208301526040830151612b83604084018280518252602090810151910152565b5092915050565b600080600060608486031215612b9f57600080fd5b8335612baa81612987565b92506020840135612bba81612987565b929592945050506040919091013590565b803563ffffffff81168114612bdf57600080fd5b919050565b60008060408385031215612bf757600080fd5b6129ba83612bcb565b803561ffff81168114612bdf57600080fd5b60008060408385031215612c2557600080fd5b612c2e83612bcb565b9150612c3c60208401612c00565b90509250929050565b60008060208385031215612c5857600080fd5b82356001600160401b03811115612c6e57600080fd5b612c7a858286016129e0565b90969095509350505050565b600060208284031215612c9857600080fd5b813561131f81612987565b60008060008060a08587031215612cb957600080fd5b612cc386866129c8565b935060608501356001600160401b03811115612cde57600080fd5b612cea878288016129e0565b9094509250506080850135612cfe81612987565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015612d41578351835260209384019390920191600101612d23565b509095945050505050565b801515811461149a57600080fd5b60008060408385031215612d6d57600080fd5b8235612d7881612987565b91506020830135612d8881612d4c565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612dcb57612dcb612d93565b60405290565b604051606081016001600160401b0381118282101715612dcb57612dcb612d93565b604051601f8201601f191681016001600160401b0381118282101715612e1b57612e1b612d93565b604052919050565b60006001600160401b03821115612e3c57612e3c612d93565b50601f01601f191660200190565b600082601f830112612e5b57600080fd5b8135612e6e612e6982612e23565b612df3565b818152846020838601011115612e8357600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215612eb657600080fd5b8435612ec181612987565b93506020850135612ed181612987565b92506040850135915060608501356001600160401b03811115612ef357600080fd5b612eff87828801612e4a565b91505092959194509250565b60008083601f840112612f1d57600080fd5b5081356001600160401b03811115612f3457600080fd5b6020830191508360208260051b8501011115612a2157600080fd5b60008060208385031215612f6257600080fd5b82356001600160401b03811115612f7857600080fd5b612c7a85828601612f0b565b600060208284031215612f9657600080fd5b61131f82612bcb565b60008060008060608587031215612fb557600080fd5b612fbe85612bcb565b9350612fcc60208601612c00565b925060408501356001600160401b03811115612fe757600080fd5b612ff3878288016129e0565b95989497509550505050565b6000806040838503121561301257600080fd5b82356001600160401b0381111561302857600080fd5b61303485828601612ac9565b9250506020830135612d8881612d4c565b8151815260208083015190820152604081016108cf565b6000806040838503121561306f57600080fd5b823561307a81612987565b91506020830135612d8881612987565b60006060828403121561309c57600080fd5b61131f83836129c8565b600181811c908216806130ba57607f821691505b6020821081036129da57634e487b7160e01b600052602260045260246000fd5b600060408284031280156130ed57600080fd5b506130f6612da9565b823581526020928301359281019290925250919050565b634e487b7160e01b600052603260045260246000fd5b601f821115610c3557806000526020600020601f840160051c8101602085101561314a5750805b601f840160051c820191505b818110156113a55760008155600101613156565b6001600160401b0383111561318157613181612d93565b6131958361318f83546130a6565b83613123565b6000601f8411600181146131c957600085156131b15750838201355b600019600387901b1c1916600186901b1783556113a5565b600083815260209020601f19861690835b828110156131fa57868501358255602094850194600190920191016131da565b50868210156132175760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152600080835461323b816130a6565b806020860152600182166000811461325a5760018114613276576132aa565b60ff1983166040870152604082151560051b87010193506132aa565b86600052602060002060005b838110156132a157815488820160400152600190910190602001613282565b87016040019450505b509195945050505050565b60006001600160401b038311156132ce576132ce612d93565b8260051b6132de60208201612df3565b848152908301906020810190368311156132f757600080fd5b845b838110156133885780356001600160401b0381111561331757600080fd5b8601606036829003121561332a57600080fd5b613332612dd1565b61333b82612bcb565b815261334960208301612c00565b602082015260408201356001600160401b0381111561336757600080fd5b61337336828501612e4a565b604083015250845250602092830192016132f9565b5095945050505050565b600080858511156133a257600080fd5b838611156133af57600080fd5b5050820193919092039150565b600084516133ce81846020890161290b565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610e5b6020830184866133e4565b6000823561013e1983360301811261343857600080fd5b9190910192915050565b6000808335601e1984360301811261345957600080fd5b8301803591506001600160401b0382111561347357600080fd5b602001915036819003821315612a2157600080fd5b6001600160401b038116811461149a57600080fd5b63ffffffff6134ab89612bcb565b16815260208881013590820152600060408901356134c881613488565b6001600160401b03811660408401525087606083015260e060808301526134f360e0830187896133e4565b6001600160a01b03861660a084015282810360c08401526135158185876133e4565b9a9950505050505050505050565b60006020828403121561353557600080fd5b81516001600160401b0381111561354b57600080fd5b8201601f8101841361355c57600080fd5b805161356a612e6982612e23565b81815285602083850101111561357f57600080fd5b6112b582602083016020860161290b565b600083516135a281846020880161290b565b8351908301906135b681836020880161290b565b01949350505050565b6000602082840312156135d157600080fd5b813561131f81613488565b60018060a01b038516815283602082015261ffff8316604082015260806060820152600061360d608083018461292f565b9695505050505050565b60408152600061362a604083018561292f565b82810360208401526112b5818561292f565b60006020828403121561364e57600080fd5b815161131f81612d4c565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a0608084015261368f60e084018261292f565b90506060850151603f198483030160a08501526136ac828261292f565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b6000604082840312156136e457600080fd5b6136ec612da9565b825181526020928301519281019290925250919050565b6000608082840312801561371657600080fd5b5061371f612dd1565b82518152602083015161373181613488565b602082015261374384604085016136d2565b60408201529392505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061360d9083018461292f565b60006020828403121561379457600080fd5b815161131f816128d8565b81516001600160401b038111156137b8576137b8612d93565b6137cc816137c684546130a6565b84613123565b6020601f82116001811461380057600083156137e85750848201515b600019600385901b1c1916600184901b1784556113a5565b600084815260208120601f198516915b828110156138305787850151825560209485019460019092019101613810565b508482101561384e5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156138e157603f19878603018452815163ffffffff815116865261ffff602082015116602087015260408101519050606060408701526138cb606087018261292f565b9550506020938401939190910190600101613885565b50929695505050505050565b6000604082840312156138ff57600080fd5b61131f83836136d2565b803560208310156108cf57600019602084900360031b1b1692915050565b60c084901b6001600160c01b031916815260e083901b6001600160e01b0319166008820152815160009061396281600c85016020870161290b565b91909101600c01949350505050565b8481528360208201528260408201526000825161399581606085016020870161290b565b9190910160600195945050505050565b6000602082840312156139b757600080fd5b815161131f81612987565b818103818111156108cf57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fdfea264697066735822122019e7a84d89c0531d16f18ab00f09616d334053d7a50ce71105af00d424c90fbf64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b000000000000000000000000b1ade4d54a1dbff321ea5db9e161e44f9fd08d2c000000000000000000000000000000000000000000000000000000000000000b426974566f7961676572730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007564f594147455200000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): BitVoyagers
Arg [1] : _symbol (string): VOYAGER
Arg [2] : _lzEndpoint (address): 0x6F475642a6e85809B1c36Fa62763669b1b48DD5B
Arg [3] : _delegate (address): 0xb1ade4D54a1DBff321eA5dB9e161e44f9fd08d2C
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b
Arg [3] : 000000000000000000000000b1ade4d54a1dbff321ea5db9e161e44f9fd08d2c
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [5] : 426974566f796167657273000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [7] : 564f594147455200000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.