S Price: $0.394775 (-0.14%)
    /

    Token

    The Frendation (Fren)

    Overview

    Max Total Supply

    59 Fren

    Holders

    54

    Total Transfers

    -

    Market

    Onchain Market Cap

    $0.00

    Circulating Supply Market Cap

    -
    Loading...
    Loading
    Loading...
    Loading
    Loading...
    Loading

    Click here to update the token information / general information

    Contract Source Code Verified (Exact Match)

    Contract Name:
    TheFrendation

    Compiler Version
    v0.8.26+commit.8a97fa7a

    Optimization Enabled:
    Yes with 9999 runs

    Other Settings:
    paris EvmVersion
    File 1 of 22 : TheFrendation.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity 0.8.26;
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
    import "@openzeppelin/contracts/access/Ownable.sol";
    import "@openzeppelin/contracts/utils/Pausable.sol";
    import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
    import "@openzeppelin/contracts/token/common/ERC2981.sol";
    import "@openzeppelin/contracts/utils/Strings.sol";
    contract TheFrendation is ERC721Enumerable, Ownable, Pausable, ReentrancyGuard, ERC2981 {
    address immutable public BRIDGE_OPERATOR;
    string private _baseURIextended;
    string private _baseExtension;
    uint96 constant public MAX_ROYALTY_FEE = 1000;
    event BaseURIChanged(string newBaseURI);
    event TokenURISet(uint256 indexed tokenId, string uri);
    event RoyaltyInfoUpdated(address receiver, uint96 feeNumerator);
    event BulkMintCompleted(address indexed to, uint256[] tokenIds);
    event BatchMintCompleted(address[] recipients, uint256[] tokenIds);
    event BaseExtensionChanged(string newBaseExtension);
    constructor(
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 22 : Ownable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 22 : draft-IERC6093.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 22 : IERC2981.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC2981.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "../utils/introspection/IERC165.sol";
    /**
    * @dev Interface for the NFT Royalty Standard.
    *
    * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
    * support for royalty payments across all NFT marketplaces and ecosystem participants.
    */
    interface IERC2981 is IERC165 {
    /**
    * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
    * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
    *
    * NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the
    * royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers.
    */
    function royaltyInfo(
    uint256 tokenId,
    uint256 salePrice
    ) external view returns (address receiver, uint256 royaltyAmount);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 22 : ERC2981.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/common/ERC2981.sol)
    pragma solidity ^0.8.20;
    import {IERC2981} from "../../interfaces/IERC2981.sol";
    import {IERC165, ERC165} from "../../utils/introspection/ERC165.sol";
    /**
    * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.
    *
    * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for
    * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.
    *
    * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the
    * fee is specified in basis points by default.
    *
    * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See
    * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the ERC. Marketplaces are expected to
    * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.
    */
    abstract contract ERC2981 is IERC2981, ERC165 {
    struct RoyaltyInfo {
    address receiver;
    uint96 royaltyFraction;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 22 : ERC721.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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 name
    string private _name;
    // Token symbol
    string private _symbol;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 22 : ERC721Enumerable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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`.
    *
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 22 : IERC721Enumerable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 22 : IERC721Metadata.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 22 : IERC721.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 22 : IERC721Receiver.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 22 : ERC721Utils.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 22 : Context.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 22 : ERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 22 : IERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // 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);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 22 : Math.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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 infinity
    Ceil, // Toward positive infinity
    Trunc, // Toward zero
    Expand // 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);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 22 : SafeCast.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 22 : SignedMath.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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 == b
    return b ^ ((a ^ b) * int256(SafeCast.toUint(condition)));
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 22 : Panic.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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-state
    library Panic {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 22 : Pausable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol)
    pragma solidity ^0.8.20;
    import {Context} from "../utils/Context.sol";
    /**
    * @dev Contract module which allows children to implement an emergency stop
    * mechanism that can be triggered by an authorized account.
    *
    * This module is used through inheritance. It will make available the
    * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
    * the functions of your contract. Note that they will not be pausable by
    * simply including this module, only once the modifiers are put in place.
    */
    abstract contract Pausable is Context {
    bool private _paused;
    /**
    * @dev Emitted when the pause is triggered by `account`.
    */
    event Paused(address account);
    /**
    * @dev Emitted when the pause is lifted by `account`.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 22 : ReentrancyGuard.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Contract module that helps prevent reentrant calls to a function.
    *
    * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
    * available, which can be applied to functions to make sure there are no nested
    * (reentrant) calls to them.
    *
    * Note that because there is a single `nonReentrant` guard, functions marked as
    * `nonReentrant` may not call one another. This can be worked around by making
    * those functions `private`, and then adding `external` `nonReentrant` entry
    * points to them.
    *
    * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
    * consider using {ReentrancyGuardTransient} instead.
    *
    * TIP: If you would like to learn more about reentrancy and alternative ways
    * to protect against it, check out our blog post
    * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
    */
    abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 22 of 22 : Strings.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    {
    "optimizer": {
    "enabled": true,
    "runs": 9999
    },
    "evmVersion": "paris",
    "outputSelection": {
    "*": {
    "*": [
    "evm.bytecode",
    "evm.deployedBytecode",
    "devdoc",
    "userdoc",
    "metadata",
    "abi"
    ]
    }
    },
    "libraries": {}
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    API
    [{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"address","name":"bridgeOperator","type":"address"},{"internalType":"address","name":"royaltyReceiver","type":"address"},{"internalType":"uint96","name":"royaltyFeeNumerator","type":"uint96"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"ERC2981InvalidDefaultRoyalty","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC2981InvalidDefaultRoyaltyReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"ERC2981InvalidTokenRoyalty","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC2981InvalidTokenRoyaltyReceiver","type":"error"},{"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":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","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":[],"name":"ReentrancyGuardReentrantCall","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":"newBaseExtension","type":"string"}],"name":"BaseExtensionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"newBaseURI","type":"string"}],"name":"BaseURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"recipients","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"BatchMintCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"BulkMintCompleted","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"RoyaltyInfoUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"uri","type":"string"}],"name":"TokenURISet","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"BRIDGE_OPERATOR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ROYALTY_FEE","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","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":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"batchBridgeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"bridgeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"bulkBridgeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deleteDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"resetTokenRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","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":"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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setTokenRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"setTokenURI","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":[{"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":[],"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"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

    60a060405234801561001057600080fd5b506040516137d93803806137d983398101604081905261002f916103c3565b338686600061003e8382610523565b50600161004b8282610523565b5050506001600160a01b03811661007d57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610086816101f9565b50600a805460ff60a01b191690556001600b556001600160a01b0383166100ef5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420627269646765206f70657261746f720000000000000000006044820152606401610074565b6001600160a01b0382166101455760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420726f79616c747920726563656976657200000000000000006044820152606401610074565b6103e86001600160601b03821611156101a05760405162461bcd60e51b815260206004820152601b60248201527f526f79616c7479206665652065786365656473206d6178696d756d00000000006044820152606401610074565b600e6101ac8582610523565b50604080518082019091526005815264173539b7b760d91b6020820152600f906101d69082610523565b506001600160a01b0383166080526101ee828261024b565b5050505050506105e1565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6127106001600160601b03821681101561028a57604051636f483d0960e01b81526001600160601b038316600482015260248101829052604401610074565b6001600160a01b0383166102b457604051635b6cc80560e11b815260006004820152602401610074565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600c55565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261031557600080fd5b81516001600160401b0381111561032e5761032e6102ee565b604051601f8201601f19908116603f011681016001600160401b038111828210171561035c5761035c6102ee565b60405281815283820160200185101561037457600080fd5b60005b8281101561039357602081860181015183830182015201610377565b506000918101602001919091529392505050565b80516001600160a01b03811681146103be57600080fd5b919050565b60008060008060008060c087890312156103dc57600080fd5b86516001600160401b038111156103f257600080fd5b6103fe89828a01610304565b602089015190975090506001600160401b0381111561041c57600080fd5b61042889828a01610304565b604089015190965090506001600160401b0381111561044657600080fd5b61045289828a01610304565b945050610461606088016103a7565b925061046f608088016103a7565b60a08801519092506001600160601b038116811461048c57600080fd5b809150509295509295509295565b600181811c908216806104ae57607f821691505b6020821081036104ce57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561051e57806000526020600020601f840160051c810160208510156104fb5750805b601f840160051c820191505b8181101561051b5760008155600101610507565b50505b505050565b81516001600160401b0381111561053c5761053c6102ee565b6105508161054a845461049a565b846104d4565b6020601f821160018114610584576000831561056c5750848201515b600019600385901b1c1916600184901b17845561051b565b600084815260208120601f198516915b828110156105b45787850151825560209485019460019092019101610594565b50848210156105d25786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6080516131c86106116000396000818161039101528181610a1d01528181610f8901526112a501526131c86000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80635944c7531161014557806395d89b41116100bd578063c87b56dd1161008c578063da3ef23f11610071578063da3ef23f146104f3578063e985e9c514610506578063f2fde38b1461054257600080fd5b8063c87b56dd146104cd578063d12bc60a146104e057600080fd5b806395d89b4114610497578063a22cb4651461049f578063aa1b103f146104b2578063b88d4fde146104ba57600080fd5b8063715018a6116101145780638a616bc0116100f95780638a616bc0146104605780638c2a993e146104735780638da5cb5b1461048657600080fd5b8063715018a6146104505780638456cb591461045857600080fd5b80635944c753146103f45780635c975abb146104075780636352211e1461042a57806370a082311461043d57600080fd5b806323b872dd116101d85780633bbf32ab116101a757806342842e0e1161018c57806342842e0e146103bb5780634f6ccce7146103ce57806355f804b3146103e157600080fd5b80633bbf32ab1461038c5780633f4ba83a146103b357600080fd5b806323b872dd146103215780632a55205a146103345780632f745c59146103665780632fc222841461037957600080fd5b8063095ea7b311610214578063095ea7b3146102c3578063162094c4146102d657806317e1f82e146102e957806318160ddd1461030f57600080fd5b806301ffc9a71461024657806304634d8d1461026e57806306fdde0314610283578063081812fc14610298575b600080fd5b610259610254366004612735565b610555565b60405190151581526020015b60405180910390f35b61028161027c366004612791565b610566565b005b61028b610688565b6040516102659190612814565b6102ab6102a6366004612827565b61071a565b6040516001600160a01b039091168152602001610265565b6102816102d1366004612840565b610743565b6102816102e436600461286a565b610752565b6102f26103e881565b6040516bffffffffffffffffffffffff9091168152602001610265565b6008545b604051908152602001610265565b61028161032f3660046128e8565b61081f565b610347610342366004612925565b6108dc565b604080516001600160a01b039093168352602083019190915201610265565b610313610374366004612840565b610994565b61028161038736600461298c565b610a12565b6102ab7f000000000000000000000000000000000000000000000000000000000000000081565b610281610c54565b6102816103c93660046128e8565b610c66565b6103136103dc366004612827565b610c81565b6102816103ef366004612a88565b610cf3565b610281610402366004612ad1565b610d42565b600a5474010000000000000000000000000000000000000000900460ff16610259565b6102ab610438366004612827565b610e70565b61031361044b366004612b0d565b610e7b565b610281610edc565b610281610eee565b61028161046e366004612827565b610efe565b610281610481366004612840565b610f7e565b600a546001600160a01b03166102ab565b61028b6110d5565b6102816104ad366004612b28565b6110e4565b6102816110ef565b6102816104c8366004612b64565b61113d565b61028b6104db366004612827565b611155565b6102816104ee366004612be0565b61129a565b610281610501366004612a88565b611541565b610259610514366004612c51565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610281610550366004612b0d565b611585565b6000610560826115d9565b92915050565b61056e61162f565b806103e86bffffffffffffffffffffffff821611156105d45760405162461bcd60e51b815260206004820152601b60248201527f526f79616c7479206665652065786365656473206d6178696d756d000000000060448201526064015b60405180910390fd5b6001600160a01b03831661062a5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420726f79616c7479207265636569766572000000000000000060448201526064016105cb565b6106348383611675565b604080516001600160a01b03851681526bffffffffffffffffffffffff841660208201527fae1d656a1268648b04ffa79c1416f05879338ae295aae3234d8db217356a1c62910160405180910390a1505050565b60606000805461069790612c7b565b80601f01602080910402602001604051908101604052809291908181526020018280546106c390612c7b565b80156107105780601f106106e557610100808354040283529160200191610710565b820191906000526020600020905b8154815290600101906020018083116106f357829003601f168201915b5050505050905090565b60006107258261176a565b506000828152600460205260409020546001600160a01b0316610560565b61074e8282336117bc565b5050565b61075a61162f565b6107626117c9565b6000838152600260205260409020546001600160a01b03166107c65760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016105cb565b60008381526010602052604090206107df828483612d15565b50827fda84ca2183491f179a603e877b2cb058e42195041c2b9c53d746427e519a34df8383604051610812929190612dd5565b60405180910390a2505050565b6001600160a01b038216610862576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024016105cb565b600061086f83833361181e565b9050836001600160a01b0316816001600160a01b0316146108d6576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b03808616600483015260248201849052821660448201526064016105cb565b50505050565b6000828152600d6020526040812080548291906001600160a01b038116907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff168161095c575050600c546001600160a01b038116907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff165b60006127106109796bffffffffffffffffffffffff841689612e33565b6109839190612e4a565b9295509193505050505b9250929050565b600061099f83610e7b565b82106109e9576040517fa57d13dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016105cb565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a8a5760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920627269646765206f70657261746f722063616e2063616c6c00000060448201526064016105cb565b610a926117c9565b610a9a61183b565b6001600160a01b038316610af05760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726563697069656e7400000000000000000000000000000060448201526064016105cb565b80610b3d5760405162461bcd60e51b815260206004820152601160248201527f456d70747920746f6b656e20617272617900000000000000000000000000000060448201526064016105cb565b60005b81811015610c01576000610b81848484818110610b5f57610b5f612e85565b905060200201356000908152600260205260409020546001600160a01b031690565b6001600160a01b031614610bd75760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20616c72656164792065786973747300000000000000000000000060448201526064016105cb565b610bf984848484818110610bed57610bed612e85565b9050602002013561187e565b600101610b40565b50826001600160a01b03167fcfc6c8e6b77fc3d2573b607c2dcb0e28e3a79d2a35022973b8e5990570ee8f998383604051610c3d929190612eff565b60405180910390a2610c4f6001600b55565b505050565b610c5c61162f565b610c64611898565b565b610c4f8383836040518060200160405280600081525061113d565b6000610c8c60085490565b8210610cce576040517fa57d13dc00000000000000000000000000000000000000000000000000000000815260006004820152602481018390526044016105cb565b60088281548110610ce157610ce1612e85565b90600052602060002001549050919050565b610cfb61162f565b600e610d078282612f13565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf681604051610d379190612814565b60405180910390a150565b610d4a61162f565b806103e86bffffffffffffffffffffffff82161115610dab5760405162461bcd60e51b815260206004820152601b60248201527f526f79616c7479206665652065786365656473206d6178696d756d000000000060448201526064016105cb565b6000848152600260205260409020546001600160a01b0316610e0f5760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016105cb565b6001600160a01b038316610e655760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420726f79616c7479207265636569766572000000000000000060448201526064016105cb565b6108d6848484611903565b60006105608261176a565b60006001600160a01b038216610ec0576040517f89c62b64000000000000000000000000000000000000000000000000000000008152600060048201526024016105cb565b506001600160a01b031660009081526003602052604090205490565b610ee461162f565b610c646000611a17565b610ef661162f565b610c64611a81565b610f0661162f565b6000818152600260205260409020546001600160a01b0316610f6a5760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016105cb565b6000908152600d6020526040812055565b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ff65760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920627269646765206f70657261746f722063616e2063616c6c00000060448201526064016105cb565b610ffe6117c9565b61100661183b565b6001600160a01b03821661105c5760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726563697069656e7400000000000000000000000000000060448201526064016105cb565b6000818152600260205260409020546001600160a01b0316156110c15760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20616c72656164792065786973747300000000000000000000000060448201526064016105cb565b6110cb828261187e565b61074e6001600b55565b60606001805461069790612c7b565b61074e338383611af0565b6110f761162f565b6111016000600c55565b60408051600080825260208201527fae1d656a1268648b04ffa79c1416f05879338ae295aae3234d8db217356a1c6291015b60405180910390a1565b61114884848461081f565b6108d63385858585611bc6565b6000818152600260205260409020546060906001600160a01b03166111bc5760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016105cb565b600082815260106020526040812080546111d590612c7b565b80601f016020809104026020016040519081016040528092919081815260200182805461120190612c7b565b801561124e5780601f106112235761010080835404028352916020019161124e565b820191906000526020600020905b81548152906001019060200180831161123157829003601f168201915b50505050509050805160000361056057611266611d6d565b61126f84611d7c565b600f60405160200161128393929190612fd2565b604051602081830303815290604052915050919050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113125760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920627269646765206f70657261746f722063616e2063616c6c00000060448201526064016105cb565b61131a6117c9565b61132261183b565b8261136f5760405162461bcd60e51b815260206004820152601660248201527f456d70747920726563697069656e74732061727261790000000000000000000060448201526064016105cb565b8281146113be5760405162461bcd60e51b815260206004820152601560248201527f4172726179206c656e677468206d69736d61746368000000000000000000000060448201526064016105cb565b60005b838110156114f95760008585838181106113dd576113dd612e85565b90506020020160208101906113f29190612b0d565b6001600160a01b0316036114485760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726563697069656e7400000000000000000000000000000060448201526064016105cb565b600061145f848484818110610b5f57610b5f612e85565b6001600160a01b0316146114b55760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20616c72656164792065786973747300000000000000000000000060448201526064016105cb565b6114f18585838181106114ca576114ca612e85565b90506020020160208101906114df9190612b0d565b848484818110610bed57610bed612e85565b6001016113c1565b507fa4ad1311226a184c203cd541580c22cf88071a11b1f27f9f5c15ba9298e264158484848460405161152f9493929190613091565b60405180910390a16108d66001600b55565b61154961162f565b600f6115558282612f13565b507f8731128c6185faae57b7561c5f15b0fd4ef267565ef90a6980c4e4b81a25e42081604051610d379190612814565b61158d61162f565b6001600160a01b0381166115d0576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016105cb565b610f7b81611a17565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a000000000000000000000000000000000000000000000000000000001480610560575061056082611e1c565b600a546001600160a01b03163314610c64576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016105cb565b6127106bffffffffffffffffffffffff82168110156116d7576040517f6f483d090000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152602481018290526044016105cb565b6001600160a01b03831661171a576040517fb6d9900a000000000000000000000000000000000000000000000000000000008152600060048201526024016105cb565b50604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff90911660209092018290527401000000000000000000000000000000000000000090910217600c55565b6000818152600260205260408120546001600160a01b031680610560576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018490526024016105cb565b610c4f8383836001611e72565b600a5474010000000000000000000000000000000000000000900460ff1615610c64576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006118286117c9565b611833848484611fc8565b949350505050565b6002600b5403611877576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600b55565b61074e828260405180602001604052806000815250612095565b6118a06120ad565b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001611133565b6127106bffffffffffffffffffffffff821681101561196c576040517fdfd1fc1b000000000000000000000000000000000000000000000000000000008152600481018590526bffffffffffffffffffffffff83166024820152604481018290526064016105cb565b6001600160a01b0383166119b6576040517f969f085200000000000000000000000000000000000000000000000000000000815260048101859052600060248201526044016105cb565b506040805180820182526001600160a01b0393841681526bffffffffffffffffffffffff92831660208083019182526000968752600d9052919094209351905190911674010000000000000000000000000000000000000000029116179055565b600a80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611a896117c9565b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118eb3390565b6001600160a01b038216611b3b576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016105cb565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15611d66576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063150b7a0290611c219088908890879087906004016130f2565b6020604051808303816000875af1925050508015611c5c575060408051601f3d908101601f19168201909252611c5991810190613133565b60015b611cde573d808015611c8a576040519150601f19603f3d011682016040523d82523d6000602084013e611c8f565b606091505b508051600003611cd6576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016105cb565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014611d64576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016105cb565b505b5050505050565b6060600e805461069790612c7b565b60606000611d8983612101565b600101905060008167ffffffffffffffff811115611da957611da96129df565b6040519080825280601f01601f191660200182016040528015611dd3576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611ddd57509392505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806105605750610560826121e3565b8080611e8657506001600160a01b03821615155b15611f80576000611e968461176a565b90506001600160a01b03831615801590611ec25750826001600160a01b0316816001600160a01b031614155b8015611ef457506001600160a01b0380821660009081526005602090815260408083209387168352929052205460ff16155b15611f36576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016105cb565b8115611f7e5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600080611fd68585856122c6565b90506001600160a01b0381166120335761202e84600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612056565b846001600160a01b0316816001600160a01b0316146120565761205681856123d7565b6001600160a01b0385166120725761206d84612458565b611833565b846001600160a01b0316816001600160a01b031614611833576118338585612507565b61209f8383612557565b610c4f336000858585611bc6565b600a5474010000000000000000000000000000000000000000900460ff16610c64576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061214a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612176576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061219457662386f26fc10000830492506010015b6305f5e10083106121ac576305f5e100830492506008015b61271083106121c057612710830492506004015b606483106121d2576064830492506002015b600a83106105605760010192915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061227657507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061056057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610560565b6000828152600260205260408120546001600160a01b03908116908316156122f3576122f38184866125ee565b6001600160a01b0381161561233157612310600085600080611e72565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615612360576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b60006123e283610e7b565b6000838152600760209081526040808320546001600160a01b038816845260069092529091209192509081831461243957600083815260208281526040808320548584528184208190558352600790915290208290555b6000938452600760209081526040808620869055938552525081205550565b60085460009061246a90600190613150565b6000838152600960205260408120546008805493945090928490811061249257612492612e85565b9060005260206000200154905080600883815481106124b3576124b3612e85565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806124eb576124eb613163565b6001900381819060005260206000200160009055905550505050565b6000600161251484610e7b565b61251e9190613150565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661259a576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024016105cb565b60006125a88383600061181e565b90506001600160a01b03811615610c4f576040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600060048201526024016105cb565b6125f9838383612684565b610c4f576001600160a01b038316612640576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018290526024016105cb565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602481018290526044016105cb565b60006001600160a01b038316158015906118335750826001600160a01b0316846001600160a01b031614806126de57506001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b806118335750506000908152600460205260409020546001600160a01b03908116911614919050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610f7b57600080fd5b60006020828403121561274757600080fd5b813561275281612707565b9392505050565b80356001600160a01b038116811461277057600080fd5b919050565b80356bffffffffffffffffffffffff8116811461277057600080fd5b600080604083850312156127a457600080fd5b6127ad83612759565b91506127bb60208401612775565b90509250929050565b60005b838110156127df5781810151838201526020016127c7565b50506000910152565b600081518084526128008160208601602086016127c4565b601f01601f19169290920160200192915050565b60208152600061275260208301846127e8565b60006020828403121561283957600080fd5b5035919050565b6000806040838503121561285357600080fd5b61285c83612759565b946020939093013593505050565b60008060006040848603121561287f57600080fd5b83359250602084013567ffffffffffffffff81111561289d57600080fd5b8401601f810186136128ae57600080fd5b803567ffffffffffffffff8111156128c557600080fd5b8660208284010111156128d757600080fd5b939660209190910195509293505050565b6000806000606084860312156128fd57600080fd5b61290684612759565b925061291460208501612759565b929592945050506040919091013590565b6000806040838503121561293857600080fd5b50508035926020909101359150565b60008083601f84011261295957600080fd5b50813567ffffffffffffffff81111561297157600080fd5b6020830191508360208260051b850101111561098d57600080fd5b6000806000604084860312156129a157600080fd5b6129aa84612759565b9250602084013567ffffffffffffffff8111156129c657600080fd5b6129d286828701612947565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff841115612a2957612a296129df565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715612a5857612a586129df565b604052838152905080828401851015612a7057600080fd5b83836020830137600060208583010152509392505050565b600060208284031215612a9a57600080fd5b813567ffffffffffffffff811115612ab157600080fd5b8201601f81018413612ac257600080fd5b61183384823560208401612a0e565b600080600060608486031215612ae657600080fd5b83359250612af660208501612759565b9150612b0460408501612775565b90509250925092565b600060208284031215612b1f57600080fd5b61275282612759565b60008060408385031215612b3b57600080fd5b612b4483612759565b915060208301358015158114612b5957600080fd5b809150509250929050565b60008060008060808587031215612b7a57600080fd5b612b8385612759565b9350612b9160208601612759565b925060408501359150606085013567ffffffffffffffff811115612bb457600080fd5b8501601f81018713612bc557600080fd5b612bd487823560208401612a0e565b91505092959194509250565b60008060008060408587031215612bf657600080fd5b843567ffffffffffffffff811115612c0d57600080fd5b612c1987828801612947565b909550935050602085013567ffffffffffffffff811115612c3957600080fd5b612c4587828801612947565b95989497509550505050565b60008060408385031215612c6457600080fd5b612c6d83612759565b91506127bb60208401612759565b600181811c90821680612c8f57607f821691505b602082108103612cc8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115610c4f57806000526020600020601f840160051c81016020851015612cf55750805b601f840160051c820191505b81811015611d665760008155600101612d01565b67ffffffffffffffff831115612d2d57612d2d6129df565b612d4183612d3b8354612c7b565b83612cce565b6000601f841160018114612d755760008515612d5d5750838201355b600019600387901b1c1916600186901b178355611d66565b600083815260209020601f19861690835b82811015612da65786850135825560209485019460019092019101612d86565b5086821015612dc35760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761056057610560612e04565b600082612e80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612ee657600080fd5b8260051b80836020870137939093016020019392505050565b602081526000611833602083018486612eb4565b815167ffffffffffffffff811115612f2d57612f2d6129df565b612f4181612f3b8454612c7b565b84612cce565b6020601f821160018114612f755760008315612f5d5750848201515b600019600385901b1c1916600184901b178455611d66565b600084815260208120601f198516915b82811015612fa55787850151825560209485019460019092019101612f85565b5084821015612fc35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60008451612fe48184602089016127c4565b845190830190612ff88183602089016127c4565b845491019060009061300981612c7b565b600182168015613020576001811461305357613083565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083168552811515820285019350613083565b87600052602060002060005b8381101561307b5781548782015260019091019060200161305f565b505081850193505b509198975050505050505050565b6040808252810184905260008560608301825b878110156130d2576001600160a01b036130bd84612759565b168252602092830192909101906001016130a4565b5083810360208501526130e6818688612eb4565b98975050505050505050565b6001600160a01b03851681526001600160a01b038416602082015282604082015260806060820152600061312960808301846127e8565b9695505050505050565b60006020828403121561314557600080fd5b815161275281612707565b8181038181111561056057610560612e04565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220a63b6ba978bad8a04682e054d29351fee1349293e36855c6a23bb3fe00558b4f64736f6c634300081a003300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000c957215773a8b86c8d8bab235451e467caaf944c0000000000000000000000007389d73869941222cfd31503a996859e3df52fa900000000000000000000000000000000000000000000000000000000000002bc000000000000000000000000000000000000000000000000000000000000000e546865204672656e646174696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044672656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569673461667233616d75656165787835687a6b737576636a7073726861743675686f7172367a7166776c706476736f7768746e7a752f0000000000000000000000000000000000000000000000000000000000

    Deployed Bytecode

    0x608060405234801561001057600080fd5b50600436106102415760003560e01c80635944c7531161014557806395d89b41116100bd578063c87b56dd1161008c578063da3ef23f11610071578063da3ef23f146104f3578063e985e9c514610506578063f2fde38b1461054257600080fd5b8063c87b56dd146104cd578063d12bc60a146104e057600080fd5b806395d89b4114610497578063a22cb4651461049f578063aa1b103f146104b2578063b88d4fde146104ba57600080fd5b8063715018a6116101145780638a616bc0116100f95780638a616bc0146104605780638c2a993e146104735780638da5cb5b1461048657600080fd5b8063715018a6146104505780638456cb591461045857600080fd5b80635944c753146103f45780635c975abb146104075780636352211e1461042a57806370a082311461043d57600080fd5b806323b872dd116101d85780633bbf32ab116101a757806342842e0e1161018c57806342842e0e146103bb5780634f6ccce7146103ce57806355f804b3146103e157600080fd5b80633bbf32ab1461038c5780633f4ba83a146103b357600080fd5b806323b872dd146103215780632a55205a146103345780632f745c59146103665780632fc222841461037957600080fd5b8063095ea7b311610214578063095ea7b3146102c3578063162094c4146102d657806317e1f82e146102e957806318160ddd1461030f57600080fd5b806301ffc9a71461024657806304634d8d1461026e57806306fdde0314610283578063081812fc14610298575b600080fd5b610259610254366004612735565b610555565b60405190151581526020015b60405180910390f35b61028161027c366004612791565b610566565b005b61028b610688565b6040516102659190612814565b6102ab6102a6366004612827565b61071a565b6040516001600160a01b039091168152602001610265565b6102816102d1366004612840565b610743565b6102816102e436600461286a565b610752565b6102f26103e881565b6040516bffffffffffffffffffffffff9091168152602001610265565b6008545b604051908152602001610265565b61028161032f3660046128e8565b61081f565b610347610342366004612925565b6108dc565b604080516001600160a01b039093168352602083019190915201610265565b610313610374366004612840565b610994565b61028161038736600461298c565b610a12565b6102ab7f000000000000000000000000c957215773a8b86c8d8bab235451e467caaf944c81565b610281610c54565b6102816103c93660046128e8565b610c66565b6103136103dc366004612827565b610c81565b6102816103ef366004612a88565b610cf3565b610281610402366004612ad1565b610d42565b600a5474010000000000000000000000000000000000000000900460ff16610259565b6102ab610438366004612827565b610e70565b61031361044b366004612b0d565b610e7b565b610281610edc565b610281610eee565b61028161046e366004612827565b610efe565b610281610481366004612840565b610f7e565b600a546001600160a01b03166102ab565b61028b6110d5565b6102816104ad366004612b28565b6110e4565b6102816110ef565b6102816104c8366004612b64565b61113d565b61028b6104db366004612827565b611155565b6102816104ee366004612be0565b61129a565b610281610501366004612a88565b611541565b610259610514366004612c51565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610281610550366004612b0d565b611585565b6000610560826115d9565b92915050565b61056e61162f565b806103e86bffffffffffffffffffffffff821611156105d45760405162461bcd60e51b815260206004820152601b60248201527f526f79616c7479206665652065786365656473206d6178696d756d000000000060448201526064015b60405180910390fd5b6001600160a01b03831661062a5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420726f79616c7479207265636569766572000000000000000060448201526064016105cb565b6106348383611675565b604080516001600160a01b03851681526bffffffffffffffffffffffff841660208201527fae1d656a1268648b04ffa79c1416f05879338ae295aae3234d8db217356a1c62910160405180910390a1505050565b60606000805461069790612c7b565b80601f01602080910402602001604051908101604052809291908181526020018280546106c390612c7b565b80156107105780601f106106e557610100808354040283529160200191610710565b820191906000526020600020905b8154815290600101906020018083116106f357829003601f168201915b5050505050905090565b60006107258261176a565b506000828152600460205260409020546001600160a01b0316610560565b61074e8282336117bc565b5050565b61075a61162f565b6107626117c9565b6000838152600260205260409020546001600160a01b03166107c65760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016105cb565b60008381526010602052604090206107df828483612d15565b50827fda84ca2183491f179a603e877b2cb058e42195041c2b9c53d746427e519a34df8383604051610812929190612dd5565b60405180910390a2505050565b6001600160a01b038216610862576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024016105cb565b600061086f83833361181e565b9050836001600160a01b0316816001600160a01b0316146108d6576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b03808616600483015260248201849052821660448201526064016105cb565b50505050565b6000828152600d6020526040812080548291906001600160a01b038116907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff168161095c575050600c546001600160a01b038116907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff165b60006127106109796bffffffffffffffffffffffff841689612e33565b6109839190612e4a565b9295509193505050505b9250929050565b600061099f83610e7b565b82106109e9576040517fa57d13dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016105cb565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b336001600160a01b037f000000000000000000000000c957215773a8b86c8d8bab235451e467caaf944c1614610a8a5760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920627269646765206f70657261746f722063616e2063616c6c00000060448201526064016105cb565b610a926117c9565b610a9a61183b565b6001600160a01b038316610af05760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726563697069656e7400000000000000000000000000000060448201526064016105cb565b80610b3d5760405162461bcd60e51b815260206004820152601160248201527f456d70747920746f6b656e20617272617900000000000000000000000000000060448201526064016105cb565b60005b81811015610c01576000610b81848484818110610b5f57610b5f612e85565b905060200201356000908152600260205260409020546001600160a01b031690565b6001600160a01b031614610bd75760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20616c72656164792065786973747300000000000000000000000060448201526064016105cb565b610bf984848484818110610bed57610bed612e85565b9050602002013561187e565b600101610b40565b50826001600160a01b03167fcfc6c8e6b77fc3d2573b607c2dcb0e28e3a79d2a35022973b8e5990570ee8f998383604051610c3d929190612eff565b60405180910390a2610c4f6001600b55565b505050565b610c5c61162f565b610c64611898565b565b610c4f8383836040518060200160405280600081525061113d565b6000610c8c60085490565b8210610cce576040517fa57d13dc00000000000000000000000000000000000000000000000000000000815260006004820152602481018390526044016105cb565b60088281548110610ce157610ce1612e85565b90600052602060002001549050919050565b610cfb61162f565b600e610d078282612f13565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf681604051610d379190612814565b60405180910390a150565b610d4a61162f565b806103e86bffffffffffffffffffffffff82161115610dab5760405162461bcd60e51b815260206004820152601b60248201527f526f79616c7479206665652065786365656473206d6178696d756d000000000060448201526064016105cb565b6000848152600260205260409020546001600160a01b0316610e0f5760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016105cb565b6001600160a01b038316610e655760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420726f79616c7479207265636569766572000000000000000060448201526064016105cb565b6108d6848484611903565b60006105608261176a565b60006001600160a01b038216610ec0576040517f89c62b64000000000000000000000000000000000000000000000000000000008152600060048201526024016105cb565b506001600160a01b031660009081526003602052604090205490565b610ee461162f565b610c646000611a17565b610ef661162f565b610c64611a81565b610f0661162f565b6000818152600260205260409020546001600160a01b0316610f6a5760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016105cb565b6000908152600d6020526040812055565b50565b336001600160a01b037f000000000000000000000000c957215773a8b86c8d8bab235451e467caaf944c1614610ff65760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920627269646765206f70657261746f722063616e2063616c6c00000060448201526064016105cb565b610ffe6117c9565b61100661183b565b6001600160a01b03821661105c5760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726563697069656e7400000000000000000000000000000060448201526064016105cb565b6000818152600260205260409020546001600160a01b0316156110c15760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20616c72656164792065786973747300000000000000000000000060448201526064016105cb565b6110cb828261187e565b61074e6001600b55565b60606001805461069790612c7b565b61074e338383611af0565b6110f761162f565b6111016000600c55565b60408051600080825260208201527fae1d656a1268648b04ffa79c1416f05879338ae295aae3234d8db217356a1c6291015b60405180910390a1565b61114884848461081f565b6108d63385858585611bc6565b6000818152600260205260409020546060906001600160a01b03166111bc5760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016105cb565b600082815260106020526040812080546111d590612c7b565b80601f016020809104026020016040519081016040528092919081815260200182805461120190612c7b565b801561124e5780601f106112235761010080835404028352916020019161124e565b820191906000526020600020905b81548152906001019060200180831161123157829003601f168201915b50505050509050805160000361056057611266611d6d565b61126f84611d7c565b600f60405160200161128393929190612fd2565b604051602081830303815290604052915050919050565b336001600160a01b037f000000000000000000000000c957215773a8b86c8d8bab235451e467caaf944c16146113125760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920627269646765206f70657261746f722063616e2063616c6c00000060448201526064016105cb565b61131a6117c9565b61132261183b565b8261136f5760405162461bcd60e51b815260206004820152601660248201527f456d70747920726563697069656e74732061727261790000000000000000000060448201526064016105cb565b8281146113be5760405162461bcd60e51b815260206004820152601560248201527f4172726179206c656e677468206d69736d61746368000000000000000000000060448201526064016105cb565b60005b838110156114f95760008585838181106113dd576113dd612e85565b90506020020160208101906113f29190612b0d565b6001600160a01b0316036114485760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726563697069656e7400000000000000000000000000000060448201526064016105cb565b600061145f848484818110610b5f57610b5f612e85565b6001600160a01b0316146114b55760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20616c72656164792065786973747300000000000000000000000060448201526064016105cb565b6114f18585838181106114ca576114ca612e85565b90506020020160208101906114df9190612b0d565b848484818110610bed57610bed612e85565b6001016113c1565b507fa4ad1311226a184c203cd541580c22cf88071a11b1f27f9f5c15ba9298e264158484848460405161152f9493929190613091565b60405180910390a16108d66001600b55565b61154961162f565b600f6115558282612f13565b507f8731128c6185faae57b7561c5f15b0fd4ef267565ef90a6980c4e4b81a25e42081604051610d379190612814565b61158d61162f565b6001600160a01b0381166115d0576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016105cb565b610f7b81611a17565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a000000000000000000000000000000000000000000000000000000001480610560575061056082611e1c565b600a546001600160a01b03163314610c64576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016105cb565b6127106bffffffffffffffffffffffff82168110156116d7576040517f6f483d090000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152602481018290526044016105cb565b6001600160a01b03831661171a576040517fb6d9900a000000000000000000000000000000000000000000000000000000008152600060048201526024016105cb565b50604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff90911660209092018290527401000000000000000000000000000000000000000090910217600c55565b6000818152600260205260408120546001600160a01b031680610560576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018490526024016105cb565b610c4f8383836001611e72565b600a5474010000000000000000000000000000000000000000900460ff1615610c64576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006118286117c9565b611833848484611fc8565b949350505050565b6002600b5403611877576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600b55565b61074e828260405180602001604052806000815250612095565b6118a06120ad565b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001611133565b6127106bffffffffffffffffffffffff821681101561196c576040517fdfd1fc1b000000000000000000000000000000000000000000000000000000008152600481018590526bffffffffffffffffffffffff83166024820152604481018290526064016105cb565b6001600160a01b0383166119b6576040517f969f085200000000000000000000000000000000000000000000000000000000815260048101859052600060248201526044016105cb565b506040805180820182526001600160a01b0393841681526bffffffffffffffffffffffff92831660208083019182526000968752600d9052919094209351905190911674010000000000000000000000000000000000000000029116179055565b600a80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611a896117c9565b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118eb3390565b6001600160a01b038216611b3b576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016105cb565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15611d66576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063150b7a0290611c219088908890879087906004016130f2565b6020604051808303816000875af1925050508015611c5c575060408051601f3d908101601f19168201909252611c5991810190613133565b60015b611cde573d808015611c8a576040519150601f19603f3d011682016040523d82523d6000602084013e611c8f565b606091505b508051600003611cd6576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016105cb565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014611d64576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016105cb565b505b5050505050565b6060600e805461069790612c7b565b60606000611d8983612101565b600101905060008167ffffffffffffffff811115611da957611da96129df565b6040519080825280601f01601f191660200182016040528015611dd3576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611ddd57509392505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806105605750610560826121e3565b8080611e8657506001600160a01b03821615155b15611f80576000611e968461176a565b90506001600160a01b03831615801590611ec25750826001600160a01b0316816001600160a01b031614155b8015611ef457506001600160a01b0380821660009081526005602090815260408083209387168352929052205460ff16155b15611f36576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016105cb565b8115611f7e5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600080611fd68585856122c6565b90506001600160a01b0381166120335761202e84600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612056565b846001600160a01b0316816001600160a01b0316146120565761205681856123d7565b6001600160a01b0385166120725761206d84612458565b611833565b846001600160a01b0316816001600160a01b031614611833576118338585612507565b61209f8383612557565b610c4f336000858585611bc6565b600a5474010000000000000000000000000000000000000000900460ff16610c64576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061214a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612176576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061219457662386f26fc10000830492506010015b6305f5e10083106121ac576305f5e100830492506008015b61271083106121c057612710830492506004015b606483106121d2576064830492506002015b600a83106105605760010192915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061227657507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061056057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610560565b6000828152600260205260408120546001600160a01b03908116908316156122f3576122f38184866125ee565b6001600160a01b0381161561233157612310600085600080611e72565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615612360576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b60006123e283610e7b565b6000838152600760209081526040808320546001600160a01b038816845260069092529091209192509081831461243957600083815260208281526040808320548584528184208190558352600790915290208290555b6000938452600760209081526040808620869055938552525081205550565b60085460009061246a90600190613150565b6000838152600960205260408120546008805493945090928490811061249257612492612e85565b9060005260206000200154905080600883815481106124b3576124b3612e85565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806124eb576124eb613163565b6001900381819060005260206000200160009055905550505050565b6000600161251484610e7b565b61251e9190613150565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661259a576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024016105cb565b60006125a88383600061181e565b90506001600160a01b03811615610c4f576040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600060048201526024016105cb565b6125f9838383612684565b610c4f576001600160a01b038316612640576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018290526024016105cb565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602481018290526044016105cb565b60006001600160a01b038316158015906118335750826001600160a01b0316846001600160a01b031614806126de57506001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b806118335750506000908152600460205260409020546001600160a01b03908116911614919050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610f7b57600080fd5b60006020828403121561274757600080fd5b813561275281612707565b9392505050565b80356001600160a01b038116811461277057600080fd5b919050565b80356bffffffffffffffffffffffff8116811461277057600080fd5b600080604083850312156127a457600080fd5b6127ad83612759565b91506127bb60208401612775565b90509250929050565b60005b838110156127df5781810151838201526020016127c7565b50506000910152565b600081518084526128008160208601602086016127c4565b601f01601f19169290920160200192915050565b60208152600061275260208301846127e8565b60006020828403121561283957600080fd5b5035919050565b6000806040838503121561285357600080fd5b61285c83612759565b946020939093013593505050565b60008060006040848603121561287f57600080fd5b83359250602084013567ffffffffffffffff81111561289d57600080fd5b8401601f810186136128ae57600080fd5b803567ffffffffffffffff8111156128c557600080fd5b8660208284010111156128d757600080fd5b939660209190910195509293505050565b6000806000606084860312156128fd57600080fd5b61290684612759565b925061291460208501612759565b929592945050506040919091013590565b6000806040838503121561293857600080fd5b50508035926020909101359150565b60008083601f84011261295957600080fd5b50813567ffffffffffffffff81111561297157600080fd5b6020830191508360208260051b850101111561098d57600080fd5b6000806000604084860312156129a157600080fd5b6129aa84612759565b9250602084013567ffffffffffffffff8111156129c657600080fd5b6129d286828701612947565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff841115612a2957612a296129df565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715612a5857612a586129df565b604052838152905080828401851015612a7057600080fd5b83836020830137600060208583010152509392505050565b600060208284031215612a9a57600080fd5b813567ffffffffffffffff811115612ab157600080fd5b8201601f81018413612ac257600080fd5b61183384823560208401612a0e565b600080600060608486031215612ae657600080fd5b83359250612af660208501612759565b9150612b0460408501612775565b90509250925092565b600060208284031215612b1f57600080fd5b61275282612759565b60008060408385031215612b3b57600080fd5b612b4483612759565b915060208301358015158114612b5957600080fd5b809150509250929050565b60008060008060808587031215612b7a57600080fd5b612b8385612759565b9350612b9160208601612759565b925060408501359150606085013567ffffffffffffffff811115612bb457600080fd5b8501601f81018713612bc557600080fd5b612bd487823560208401612a0e565b91505092959194509250565b60008060008060408587031215612bf657600080fd5b843567ffffffffffffffff811115612c0d57600080fd5b612c1987828801612947565b909550935050602085013567ffffffffffffffff811115612c3957600080fd5b612c4587828801612947565b95989497509550505050565b60008060408385031215612c6457600080fd5b612c6d83612759565b91506127bb60208401612759565b600181811c90821680612c8f57607f821691505b602082108103612cc8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115610c4f57806000526020600020601f840160051c81016020851015612cf55750805b601f840160051c820191505b81811015611d665760008155600101612d01565b67ffffffffffffffff831115612d2d57612d2d6129df565b612d4183612d3b8354612c7b565b83612cce565b6000601f841160018114612d755760008515612d5d5750838201355b600019600387901b1c1916600186901b178355611d66565b600083815260209020601f19861690835b82811015612da65786850135825560209485019460019092019101612d86565b5086821015612dc35760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761056057610560612e04565b600082612e80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612ee657600080fd5b8260051b80836020870137939093016020019392505050565b602081526000611833602083018486612eb4565b815167ffffffffffffffff811115612f2d57612f2d6129df565b612f4181612f3b8454612c7b565b84612cce565b6020601f821160018114612f755760008315612f5d5750848201515b600019600385901b1c1916600184901b178455611d66565b600084815260208120601f198516915b82811015612fa55787850151825560209485019460019092019101612f85565b5084821015612fc35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60008451612fe48184602089016127c4565b845190830190612ff88183602089016127c4565b845491019060009061300981612c7b565b600182168015613020576001811461305357613083565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083168552811515820285019350613083565b87600052602060002060005b8381101561307b5781548782015260019091019060200161305f565b505081850193505b509198975050505050505050565b6040808252810184905260008560608301825b878110156130d2576001600160a01b036130bd84612759565b168252602092830192909101906001016130a4565b5083810360208501526130e6818688612eb4565b98975050505050505050565b6001600160a01b03851681526001600160a01b038416602082015282604082015260806060820152600061312960808301846127e8565b9695505050505050565b60006020828403121561314557600080fd5b815161275281612707565b8181038181111561056057610560612e04565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220a63b6ba978bad8a04682e054d29351fee1349293e36855c6a23bb3fe00558b4f64736f6c634300081a0033

    Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

    00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000c957215773a8b86c8d8bab235451e467caaf944c0000000000000000000000007389d73869941222cfd31503a996859e3df52fa900000000000000000000000000000000000000000000000000000000000002bc000000000000000000000000000000000000000000000000000000000000000e546865204672656e646174696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044672656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569673461667233616d75656165787835687a6b737576636a7073726861743675686f7172367a7166776c706476736f7768746e7a752f0000000000000000000000000000000000000000000000000000000000

    -----Decoded View---------------
    Arg [0] : name (string): The Frendation
    Arg [1] : symbol (string): Fren
    Arg [2] : baseURI_ (string): ipfs://bafybeig4afr3amueaexx5hzksuvcjpsrhat6uhoqr6zqfwlpdvsowhtnzu/
    Arg [3] : bridgeOperator (address): 0xC957215773A8B86c8d8Bab235451E467caaf944C
    Arg [4] : royaltyReceiver (address): 0x7389D73869941222CFd31503A996859E3df52Fa9
    Arg [5] : royaltyFeeNumerator (uint96): 700

    -----Encoded View---------------
    14 Constructor Arguments found :
    Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
    Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
    Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
    Arg [3] : 000000000000000000000000c957215773a8b86c8d8bab235451e467caaf944c
    Arg [4] : 0000000000000000000000007389d73869941222cfd31503a996859e3df52fa9
    Arg [5] : 00000000000000000000000000000000000000000000000000000000000002bc
    Arg [6] : 000000000000000000000000000000000000000000000000000000000000000e
    Arg [7] : 546865204672656e646174696f6e000000000000000000000000000000000000
    Arg [8] : 0000000000000000000000000000000000000000000000000000000000000004
    Arg [9] : 4672656e00000000000000000000000000000000000000000000000000000000
    Arg [10] : 0000000000000000000000000000000000000000000000000000000000000043
    Arg [11] : 697066733a2f2f62616679626569673461667233616d75656165787835687a6b
    Arg [12] : 737576636a7073726861743675686f7172367a7166776c706476736f7768746e
    Arg [13] : 7a752f0000000000000000000000000000000000000000000000000000000000


    [ Download: CSV Export  ]
    [ Download: CSV Export  ]

    A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.