Overview
S Balance
0 S
S Value
-More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
AccessHub
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 100 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.26;import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol";import {IMinter} from "./interfaces/IMinter.sol";import {IVoter} from "./interfaces/IVoter.sol";import {IPairFactory} from "./interfaces/IPairFactory.sol";import {IFeeRecipientFactory} from "./interfaces/IFeeRecipientFactory.sol";import {IRamsesV3Factory} from "./CL/core/interfaces/IRamsesV3Factory.sol";import {IRamsesV3Pool} from "./CL/core/interfaces/IRamsesV3Pool.sol";import {IFeeCollector} from "./CL/gauge/interfaces/IFeeCollector.sol";import {IVoteModule} from "./interfaces/IVoteModule.sol";import {IXShadow} from "./interfaces/IXShadow.sol";import {ILauncherPlugin} from "./interfaces/ILauncherPlugin.sol";import {IAccessHub} from "./interfaces/IAccessHub.sol";contract AccessHub is IAccessHub, AccessControlEnumerable {/// @notice role that can call changing fee splits and swap feesbytes32 public constant SWAP_FEE_SETTER = keccak256("SWAP_FEE_SETTER");/// @notice operator rolebytes32 public constant PROTOCOL_OPERATOR = keccak256("PROTOCOL_OPERATOR");/// @dev temp setter address for initializingaddress public setter;/// @notice protocol timelock addressaddress public timelock;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (access/extensions/AccessControlEnumerable.sol)pragma solidity ^0.8.20;import {IAccessControlEnumerable} from "./IAccessControlEnumerable.sol";import {AccessControl} from "../AccessControl.sol";import {EnumerableSet} from "../../utils/structs/EnumerableSet.sol";/*** @dev Extension of {AccessControl} that allows enumerating the members of each role.*/abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {using EnumerableSet for EnumerableSet.AddressSet;mapping(bytes32 role => EnumerableSet.AddressSet) private _roleMembers;/*** @dev See {IERC165-supportsInterface}.*/function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);}/*** @dev Returns one of the accounts that have `role`. `index` must be a
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.0;interface IMinter {/// @dev error for if epoch 0 has already startederror STARTED();/// @dev error for if update_period is attempted to be called before startEmissionserror EMISSIONS_NOT_STARTED();/// @dev deviation too higherror TOO_HIGH();/// @dev no change in valueserror NO_CHANGE();/// @dev when attempting to update emissions more than once per perioderror SAME_PERIOD();/// @dev error for if a contract is not set correctlyerror INVALID_CONTRACT();event SetVeDist(address _value);event SetVoter(address _value);event Mint(address indexed sender, uint256 weekly);event RebaseUnsuccessful(uint256 _current, uint256 _currentPeriod);event EmissionsMultiplierUpdated(uint256 _emissionsMultiplier);/// @notice decay or inflation scaled to 10_000 = 100%/// @return _multiplier the emissions multiplierfunction emissionsMultiplier() external view returns (uint256 _multiplier);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: BUSL-1.1pragma solidity ^0.8.26;pragma abicoder v2;interface IVoter {error ACTIVE_GAUGE(address gauge);error GAUGE_INACTIVE(address gauge);error ALREADY_WHITELISTED();error NOT_AUTHORIZED(address caller);error NOT_WHITELISTED();error NOT_POOL();error FORBIDDEN();error NOT_INIT();error LENGTH_MISMATCH();error NO_GAUGE();error ALREADY_DISTRIBUTED(address gauge, uint256 period);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.26;interface IPairFactory {error FEE_TOO_HIGH();error ZERO_FEE();/// @dev invalid assortmenterror IA();/// @dev zero addresserror ZA();/// @dev pair existserror PE();error NOT_AUTHORIZED();error INVALID_FEE_SPLIT();event PairCreated(address indexed token0,address indexed token1,address pair,uint256);event SetFee(uint256 indexed fee);event SetPairFee(address indexed pair, uint256 indexed fee);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.26;interface IFeeRecipientFactory {error INVALID_TREASURY_FEE();error NOT_AUTHORIZED();/// @notice the pair fees for a specific pair/// @param pair the pair to check/// @return feeRecipient the feeRecipient contract address for the pairfunction feeRecipientForPair(address pair) external view returns (address feeRecipient);/// @notice the last feeRecipient address created/// @return _feeRecipient the address of the last pair fees contractfunction lastFeeRecipient() external view returns (address _feeRecipient);/// @notice create the pair fees for a pair/// @param pair the address of the pair/// @return _feeRecipient the address of the newly created feeRecipientfunction createFeeRecipient(address pair) external returns (address _feeRecipient);/// @notice the fee % going to the treasury/// @return _feeToTreasury the fee %
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title The interface for the Ramses V3 Factory/// @notice The Ramses V3 Factory facilitates creation of Ramses V3 pools and control over the protocol feesinterface IRamsesV3Factory {error IT();/// @dev Fee Too Largeerror FTL();error A0();error F0();error PE();/// @notice Emitted when a pool is created/// @param token0 The first token of the pool by address sort order/// @param token1 The second token of the pool by address sort order/// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip/// @param tickSpacing The minimum number of ticks between initialized ticks/// @param pool The address of the created poolevent PoolCreated(address indexed token0,address indexed token1,uint24 indexed fee,int24 tickSpacing,address pool);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;import {IRamsesV3PoolImmutables} from './pool/IRamsesV3PoolImmutables.sol';import {IRamsesV3PoolState} from './pool/IRamsesV3PoolState.sol';import {IRamsesV3PoolDerivedState} from './pool/IRamsesV3PoolDerivedState.sol';import {IRamsesV3PoolActions} from './pool/IRamsesV3PoolActions.sol';import {IRamsesV3PoolOwnerActions} from './pool/IRamsesV3PoolOwnerActions.sol';import {IRamsesV3PoolErrors} from './pool/IRamsesV3PoolErrors.sol';import {IRamsesV3PoolEvents} from './pool/IRamsesV3PoolEvents.sol';/// @title The interface for a Ramses V3 Pool/// @notice A Ramses pool facilitates swapping and automated market making between any two assets that strictly conform/// to the ERC20 specification/// @dev The pool interface is broken up into many smaller piecesinterface IRamsesV3Pool isIRamsesV3PoolImmutables,IRamsesV3PoolState,IRamsesV3PoolDerivedState,IRamsesV3PoolActions,IRamsesV3PoolOwnerActions,IRamsesV3PoolErrors,IRamsesV3PoolEvents{/// @notice if a new period, advance on interactionfunction _advancePeriod() external;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.26;import {IRamsesV3Pool} from "../../core/interfaces/IRamsesV3Pool.sol";interface IFeeCollector {error NOT_AUTHORIZED();error FTL();/// @notice Emitted when the treasury address is changed./// @param oldTreasury The previous treasury address./// @param newTreasury The new treasury address.event TreasuryChanged(address oldTreasury, address newTreasury);/// @notice Emitted when the treasury fees value is changed./// @param oldTreasuryFees The previous value of the treasury fees./// @param newTreasuryFees The new value of the treasury fees.event TreasuryFeesChanged(uint256 oldTreasuryFees, uint256 newTreasuryFees);/// @notice Emitted when protocol fees are collected from a pool and distributed to the fee distributor and treasury./// @param pool The address of the pool from which the fees were collected./// @param feeDistAmount0 The amount of fee tokens (token 0) distributed to the fee distributor./// @param feeDistAmount1 The amount of fee tokens (token 1) distributed to the fee distributor./// @param treasuryAmount0 The amount of fee tokens (token 0) allocated to the treasury./// @param treasuryAmount1 The amount of fee tokens (token 1) allocated to the treasury.event FeesCollected(
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.26;interface IVoteModule {/** Custom Errors *//// @dev == 0error ZERO_AMOUNT();/// @dev if address is not xShadowerror NOT_XSHADOW();/// @dev error for when the cooldown period has not been passed yeterror COOLDOWN_ACTIVE();/// @dev error for when you try to deposit or withdraw for someone who isn't the msg.sendererror NOT_VOTEMODULE();/// @dev error for when the caller is not authorizederror UNAUTHORIZED();/// @dev error for accessHub gated functionserror NOT_ACCESSHUB();/// @dev error for when there is no change of stateerror NO_CHANGE();
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.24;import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import {IVoter} from "./IVoter.sol";interface IXShadow is IERC20 {struct VestPosition {/// @dev amount of xShadowuint256 amount;/// @dev start unix timestampuint256 start;/// @dev start + MAX_VEST (end timestamp)uint256 maxEnd;/// @dev vest identifier (starting from 0)uint256 vestID;}error NOT_WHITELISTED(address);error NOT_MINTER();error ZERO();error NO_VEST();error ALREADY_EXEMPT();error NOT_EXEMPT();error CANT_RESCUE();error NO_CHANGE();
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.24;interface ILauncherPlugin {error NOT_AUTHORITY();error ALREADY_AUTHORITY();error NOT_OPERATOR();error ALREADY_OPERATOR();error NOT_ENABLED();error ENABLED();error INVALID_TAKE();/// @dev struct that holds the configurations of each specific poolstruct LauncherConfigs {uint256 launcherTake;address takeRecipient;}event NewOperator(address indexed _old, address indexed _new);event NewAuthority(address indexed _newAuthority);event RemovedAuthority(address indexed _previousAuthority);event EnabledPool(address indexed pool, string indexed _name);event DisabledPool(address indexed pool);event MigratedPool(address indexed oldPool, address indexed newPool);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.26;interface IAccessHub {function timelock() external view returns (address timelock);function set(address _voter,address _minter,address _launcherPlugin,address _xShadow,address _ramsesV3PoolFactory,address _poolFactory,address _clGaugeFactory,address _gaugeFactory,address _feeRecipientFactory,address _feeDistributorFactory,address _feeCollector,address _voteModule) external;/// @notice sets the swap fees for multiple pairsfunction setSwapFees(address[] calldata _pools,uint24[] calldata _swapFees,bool[] calldata _concentrated) external;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (access/extensions/IAccessControlEnumerable.sol)pragma solidity ^0.8.20;import {IAccessControl} from "../IAccessControl.sol";/*** @dev External interface of AccessControlEnumerable declared to support ERC-165 detection.*/interface IAccessControlEnumerable is IAccessControl {/*** @dev Returns one of the accounts that have `role`. `index` must be a* value between 0 and {getRoleMemberCount}, non-inclusive.** Role bearers are not sorted in any particular way, and their ordering may* change at any point.** WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure* you perform all queries on the same block. See the following* https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]* for more information.*/function getRoleMember(bytes32 role, uint256 index) external view returns (address);/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol)pragma solidity ^0.8.20;import {IAccessControl} from "./IAccessControl.sol";import {Context} from "../utils/Context.sol";import {ERC165} from "../utils/introspection/ERC165.sol";/*** @dev Contract module that allows children to implement role-based access* control mechanisms. This is a lightweight version that doesn't allow enumerating role* members except through off-chain means by accessing the contract event logs. Some* applications may benefit from on-chain enumerability, for those cases see* {AccessControlEnumerable}.** Roles are referred to by their `bytes32` identifier. These should be exposed* in the external API and be unique. The best way to achieve this is by* using `public constant` hash digests:** ```solidity* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");* ```** Roles can be used to represent a set of permissions. To restrict access to a* function call, use {hasRole}:
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/structs/EnumerableSet.sol)// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.pragma solidity ^0.8.20;/*** @dev Library for managing* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive* types.** Sets have the following properties:** - Elements are added, removed, and checked for existence in constant time* (O(1)).* - Elements are enumerated in O(n). No guarantees are made on the ordering.** ```solidity* contract Example {* // Add the library methods* using EnumerableSet for EnumerableSet.AddressSet;** // Declare a set state variable* EnumerableSet.AddressSet private mySet;* }* ```
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Pool state that never changes/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same valuesinterface IRamsesV3PoolImmutables {/// @notice The contract that deployed the pool, which must adhere to the IRamsesV3Factory interface/// @return The contract addressfunction factory() external view returns (address);/// @notice The first of the two tokens of the pool, sorted by address/// @return The token contract addressfunction token0() external view returns (address);/// @notice The second of the two tokens of the pool, sorted by address/// @return The token contract addressfunction token1() external view returns (address);/// @notice The pool's fee in hundredths of a bip, i.e. 1e-6/// @return The feefunction fee() external view returns (uint24);/// @notice The pool tick spacing/// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive/// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, .../// This value is an int24 to avoid casting even though it is always positive.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Pool state that can change/// @notice These methods compose the pool's state, and can change with any frequency including multiple times/// per transactioninterface IRamsesV3PoolState {/// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas/// when accessed externally./// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value/// @return tick The current tick of the pool, i.e. according to the last tick transition that was run./// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick/// boundary./// @return observationIndex The index of the last oracle observation that was written,/// @return observationCardinality The current maximum number of observations stored in the pool,/// @return observationCardinalityNext The next maximum number of observations, to be updated when the observation./// @return feeProtocol The protocol fee for both tokens of the pool./// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0/// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee./// unlocked Whether the pool is currently locked to reentrancyfunction slot0()externalviewreturns (uint160 sqrtPriceX96,int24 tick,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Pool state that is not stored/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the/// blockchain. The functions here may have variable gas costs.interface IRamsesV3PoolDerivedState {/// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp/// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing/// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,/// you must call it with secondsAgos = [3600, 0]./// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in/// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio./// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned/// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp/// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block/// timestampfunction observe(uint32[] calldata secondsAgos) external view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);/// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range/// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed./// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first/// snapshot is taken and the second snapshot is taken./// @param tickLower The lower tick of the range
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Permissionless pool actions/// @notice Contains pool methods that can be called by anyoneinterface IRamsesV3PoolActions {/// @notice Sets the initial price for the pool/// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value/// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96function initialize(uint160 sqrtPriceX96) external;/// @notice Adds liquidity for the given recipient/tickLower/tickUpper position/// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback/// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends/// on tickLower, tickUpper, the amount of liquidity, and the current price./// @param recipient The address for which the liquidity will be created/// @param index The index for which the liquidity will be created/// @param tickLower The lower tick of the position in which to add liquidity/// @param tickUpper The upper tick of the position in which to add liquidity/// @param amount The amount of liquidity to mint/// @param data Any data that should be passed through to the callback/// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback/// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callbackfunction mint(address recipient,uint256 index,
1234567891011121314151617181920212223// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Permissioned pool actions/// @notice Contains pool methods that may only be called by the factory ownerinterface IRamsesV3PoolOwnerActions {/// @notice Set the denominator of the protocol's % share of the feesfunction setFeeProtocol() external;/// @notice Collect the protocol fee accrued to the pool/// @param recipient The address to which collected protocol fees should be sent/// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1/// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0/// @return amount0 The protocol fee collected in token0/// @return amount1 The protocol fee collected in token1function collectProtocol(address recipient,uint128 amount0Requested,uint128 amount1Requested) external returns (uint128 amount0, uint128 amount1);function setFee(uint24 _fee) external;}
1234567891011121314151617181920// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Errors emitted by a pool/// @notice Contains all events emitted by the poolinterface IRamsesV3PoolErrors {error LOK();error TLU();error TLM();error TUM();error AI();error M0();error M1();error AS();error IIA();error L();error F0();error F1();error SPL();}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Events emitted by a pool/// @notice Contains all events emitted by the poolinterface IRamsesV3PoolEvents {/// @notice Emitted exactly once by a pool when #initialize is first called on the pool/// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize/// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96/// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the poolevent Initialize(uint160 sqrtPriceX96, int24 tick);/// @notice Emitted when liquidity is minted for a given position/// @param sender The address that minted the liquidity/// @param owner The owner of the position and recipient of any minted liquidity/// @param tickLower The lower tick of the position/// @param tickUpper The upper tick of the position/// @param amount The amount of liquidity minted to the position range/// @param amount0 How much token0 was required for the minted liquidity/// @param amount1 How much token1 was required for the minted liquidityevent Mint(address sender,address indexed owner,int24 indexed tickLower,int24 indexed tickUpper,uint128 amount,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC-20 standard as defined in the ERC.*/interface IERC20 {/*** @dev Emitted when `value` tokens are moved from one account (`from`) to* another (`to`).** Note that `value` may be zero.*/event Transfer(address indexed from, address indexed to, uint256 value);/*** @dev Emitted when the allowance of a `spender` for an `owner` is set by* a call to {approve}. `value` is the new allowance.*/event Approval(address indexed owner, address indexed spender, uint256 value);/*** @dev Returns the value of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (access/IAccessControl.sol)pragma solidity ^0.8.20;/*** @dev External interface of AccessControl declared to support ERC-165 detection.*/interface IAccessControl {/*** @dev The `account` is missing a role.*/error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);/*** @dev The caller of a function is not the expected one.** NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.*/error AccessControlBadConfirmation();/*** @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`** `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite* {RoleAdminChanged} not being emitted signaling this.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)pragma solidity ^0.8.20;/*** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract Context {function _msgSender() internal view virtual returns (address) {return msg.sender;}function _msgData() internal view virtual returns (bytes calldata) {return msg.data;}function _contextSuffixLength() internal view virtual returns (uint256) {return 0;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/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;}
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC-165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[ERC].** Implementers can declare support of contract interfaces, which can then be* queried by others ({ERC165Checker}).** For an implementation, see {ERC165}.*/interface IERC165 {/*** @dev Returns true if this contract implements the interface defined by* `interfaceId`. See the corresponding* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223242526{"remappings": ["@openzeppelin-contracts-upgradeable-5.1.0/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/","@openzeppelin/contracts/=dependencies/@openzeppelin-contracts-5.1.0/","forge-std/=dependencies/forge-std-1.9.4/src/","permit2/=lib/permit2/","@openzeppelin-3.4.2/=node_modules/@openzeppelin-3.4.2/","@openzeppelin-contracts-5.1.0/=dependencies/@openzeppelin-contracts-5.1.0/","@uniswap/=node_modules/@uniswap/","base64-sol/=node_modules/base64-sol/","eth-gas-reporter/=node_modules/eth-gas-reporter/","forge-std-1.9.4/=dependencies/forge-std-1.9.4/src/","hardhat/=node_modules/hardhat/","solmate/=node_modules/solmate/"],"optimizer": {"enabled": true,"runs": 100},"metadata": {"useLiteralContent": false,"bytecodeHash": "ipfs","appendCBOR": true},"outputSelection": {"*": {
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_timelock","type":"address"},{"internalType":"address","name":"_treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"LENGTH_MISMATCH","type":"error"},{"inputs":[],"name":"MANUAL_EXECUTION_FAILURE","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"NOT_AUTHORIZED","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"NOT_TIMELOCK","type":"error"},{"inputs":[],"name":"SAME_ADDRESS","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROTOCOL_OPERATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWAP_FEE_SETTER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pools","type":"address[]"},{"internalType":"address[]","name":"_rewards","type":"address[]"},{"internalType":"bool[]","name":"_addReward","type":"bool[]"}],"name":"augmentGaugeRewardsForPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clGaugeFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"disablePoolInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"enablePoolInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"uint24","name":"initialFee","type":"uint24"}],"name":"enableTickSpacing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"contract IFeeCollector","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDistributorFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRecipientFactory","outputs":[{"internalType":"contract IFeeRecipientFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gaugeFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMembers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_token","type":"address[]"},{"internalType":"bool[]","name":"_whitelisted","type":"bool[]"}],"name":"governanceWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAuthority","type":"address"},{"internalType":"string","name":"_label","type":"string"}],"name":"grantAuthorityInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_emissionsToken","type":"address"},{"internalType":"address","name":"_legacyFactory","type":"address"},{"internalType":"address","name":"_gauges","type":"address"},{"internalType":"address","name":"_feeDistributorFactory","type":"address"},{"internalType":"address","name":"_minter","type":"address"},{"internalType":"address","name":"_msig","type":"address"},{"internalType":"address","name":"_xShadow","type":"address"},{"internalType":"address","name":"_clFactory","type":"address"},{"internalType":"address","name":"_clGaugeFactory","type":"address"},{"internalType":"address","name":"_nfpManager","type":"address"},{"internalType":"address","name":"_feeRecipientFactory","type":"address"},{"internalType":"address","name":"_voteModule","type":"address"},{"internalType":"address","name":"_launcherPlugin","type":"address"}],"name":"initializeVoter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pairs","type":"address[]"}],"name":"killGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launcherPlugin","outputs":[{"internalType":"contract ILauncherPlugin","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oldPool","type":"address"},{"internalType":"address","name":"_newPool","type":"address"}],"name":"migratePoolInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"contract IMinter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolFactory","outputs":[{"internalType":"contract IPairFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ramsesV3PoolFactory","outputs":[{"internalType":"contract IRamsesV3Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pools","type":"address[]"},{"internalType":"address[]","name":"_rewards","type":"address[]"}],"name":"removeFeeDistributorRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pairs","type":"address[]"}],"name":"reviveGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oldAuthority","type":"address"}],"name":"revokeAuthorityInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"},{"internalType":"address","name":"_minter","type":"address"},{"internalType":"address","name":"_launcherPlugin","type":"address"},{"internalType":"address","name":"_xShadow","type":"address"},{"internalType":"address","name":"_ramsesV3PoolFactory","type":"address"},{"internalType":"address","name":"_poolFactory","type":"address"},{"internalType":"address","name":"_clGaugeFactory","type":"address"},{"internalType":"address","name":"_gaugeFactory","type":"address"},{"internalType":"address","name":"_feeRecipientFactory","type":"address"},{"internalType":"address","name":"_feeDistributorFactory","type":"address"},{"internalType":"address","name":"_feeCollector","type":"address"},{"internalType":"address","name":"_voteModule","type":"address"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_take","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"setConfigsInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_candidates","type":"address[]"},{"internalType":"bool[]","name":"_exempt","type":"bool[]"}],"name":"setCooldownExemption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_multiplier","type":"uint256"}],"name":"setEmissionsMultiplierInMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pct","type":"uint256"}],"name":"setEmissionsRatioInVoter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pools","type":"address[]"},{"internalType":"uint8[]","name":"_feeSplits","type":"uint8[]"},{"internalType":"bool[]","name":"_concentrated","type":"bool[]"}],"name":"setFeeSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeToTreasury","type":"uint256"}],"name":"setFeeToTreasuryInFeeRecipientFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"setNewGovernorInVoter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDuration","type":"uint256"}],"name":"setNewRebaseStreamingDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"name":"setNewTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCooldown","type":"uint256"}],"name":"setNewVoteModuleCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOperator","type":"address"}],"name":"setOperatorInLauncherPlugin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pools","type":"address[]"},{"internalType":"uint24[]","name":"_swapFees","type":"uint24[]"},{"internalType":"bool[]","name":"_concentrated","type":"bool[]"}],"name":"setSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFees","type":"uint256"}],"name":"setTreasuryFeesInFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasury","type":"address"}],"name":"setTreasuryInFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasuryInFeeRecipientFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"}],"name":"setVoterAddressInFactoryV3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_who","type":"address[]"},{"internalType":"bool[]","name":"_whitelisted","type":"bool[]"}],"name":"transferWhitelistInXShadow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voteModule","outputs":[{"internalType":"contract IVoteModule","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"contract IVoter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xShadow","outputs":[{"internalType":"contract IXShadow","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608034609457601f612d1d38819003918201601f19168301916001600160401b038311848410176098578084926040948552833981010312609457604b602060458360ac565b920160ac565b600280546001600160a01b031990811633179091556004805482166001600160a01b039384161790556003805490911692909116919091179055604051612c5d90816100c08239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820360945756fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146122a25750806302be9a901461220957806307546172146121e057806307a8d4ef1461208457806309651f7d14611f035780630d52333c14611eda5780631635880614611e6b5780631cff79cd14611dc7578063248a9ca314611d945780632a59c80614611d385780632eb6479514611ccb5780632f2ff15d14611c8d57806336568abe14611c485780633abdbf2a14611be45780633eadd56e14611b885780633f3108f714611b5f5780634219dc4014611b365780634256f5e714611b0d578063429fa2141461198f5780634339efbd146116cf57806346c96aac146116a657806349fe8228146116375780634b9880c1146115ca57806352e0970f1461155b57806361d027b31461153257806369e0bc05146113d757806378b1a8c7146113af5780637bebe3811461138657806380a1ebbb146112c357806382169aec1461117b57806385caf28b146111525780638cb422f01461112a5780639010d07c146110e457806390bcc5a214610ea157806391742be014610d9757806391d1485414610d4e57806393208a2b14610d255780639647d14114610cfc5780639987e75714610c8d578063a217fddf14610c71578063a3246ad314610bc1578063a71504ad14610b65578063ab0e019214610af6578063ac33ef8514610acd578063ba01351014610a71578063be02ec3814610880578063c1463c15146107f9578063c415b95c146107d0578063ca15c873146107a6578063ca1699e8146105b5578063d32af6c11461058c578063d33219b414610563578063d547741f1461051c578063dbb466df146104a8578063e6dca2b214610439578063e95245fd146103ca578063eee0fdb4146103455763f7553c521461029c575f80fd5b3461033357806102ab366124bd565b916102b46126ad565b6007546001600160a01b0316803b156103415784928360648694604051978896879586936216690f60e91b855260018060a01b0316600485015260406024850152816044850152848401378181018301849052601f01601f191681010301925af18015610336576103225750f35b8161032c91612593565b6103335780f35b80fd5b6040513d84823e3d90fd5b8480fd5b503461033357604036600319011261033357806004358060020b8091036103c7576024359062ffffff82168092036103c55761037f6126ad565b6009546001600160a01b031691823b156103c35760448492836040519586948593633bb83f6d60e21b8552600485015260248401525af18015610336576103225750f35b505b505b50fd5b503461033357602036600319011261033357806103e561230f565b6103ed6126ad565b6007546001600160a01b031690813b156103c55760405163b3ab15fb60e01b81526001600160a01b0390911660048201529082908290602490829084905af18015610336576103225750f35b5034610333576020366003190112610333578061045461230f565b61045c6126ad565b6007546001600160a01b031690813b156103c55760405163dcaaa61b60e01b81526001600160a01b0390911660048201529082908290602490829084905af18015610336576103225750f35b503461033357604036600319011261033357806104c361230f565b6104cb612325565b906104d46126ad565b6007546001600160a01b031691823b156103c35761050b9284928360405180968195829463772b7e9760e01b84526004840161264a565b03925af18015610336576103225750f35b50346103335760403660031901126103335761055f60043561053c612325565b9061055a610555825f525f602052600160405f20015490565b6126f6565b612768565b5080f35b50346103335780600319360112610333576003546040516001600160a01b039091168152602090f35b5034610333578060031936011261033357600b546040516001600160a01b039091168152602090f35b5034610333576105c43661244b565b919093946105d06126ad565b8186148061079d575b1561078e579086939291845b8781106105f0578580f35b6005546001600160a01b031661060f61060a838b866125c8565b6125f9565b6040516302045be960e41b81526001600160a01b03909116600482015290602082602481845afa918215610783578892610753575b5061065861065384888c6125c8565b6125ec565b156106e957506005546001600160a01b03169061067961060a84878a6125c8565b823b156106e5576106a392899283604051809681958294631a6de0e560e31b84526004840161264a565b03925af19081156106da5787916106c1575b50506001905b016105e5565b816106cb91612593565b6106d657855f6106b5565b8580fd5b6040513d89823e3d90fd5b8880fd5b906106f861060a84878a6125c8565b823b156106e55761072292899283604051809681958294637fe0500f60e11b84526004840161264a565b03925af19081156106da57879161073e575b50506001906106bb565b8161074891612593565b6106d657855f610734565b61077591925060203d811161077c575b61076d8183612593565b81019061262b565b905f610644565b503d610763565b6040513d8a823e3d90fd5b63899ef10d60e01b8752600487fd5b508282146105d9565b50346103335760203660031901126103335760406020916004358152600183522054604051908152f35b5034610333578060031936011261033357600c546040516001600160a01b039091168152602090f35b5034610333576060366003190112610333578061081461230f565b61081c61233b565b906108256126ad565b6007546001600160a01b031691823b156103c357604051636984ede360e11b81526001600160a01b0392831660048201526024803590820152911660448201529082908290606490829084905af18015610336576103225750f35b503461033357602036600319011261033357806004356001600160401b0381116103c7576108b290369060040161241b565b91906108bc6126ad565b815b8381106108c9578280f35b6108d761060a8286856125c8565b600c546001600160a01b039182169116803b1561034157848091602460405180948193632a54db0160e01b83528760048401525af1908115610a28578591610a5c575b50506005546040516302045be960e41b8152600481018390526001600160a01b0390911690602081602481855afa908115610a51578691610a33575b50813b156106d65760405163992a793360e01b81526001600160a01b0390911660048201529085908290602490829084905af1908115610a28578591610a0f575b50506009546001600160a01b031690813b15610341578491604483926040519485938492633b39a71f60e11b84526004840152600560248401525af1908115610a045784916109eb575b50506001016108be565b816109f591612593565b610a0057825f6109e1565b8280fd5b6040513d86823e3d90fd5b81610a1991612593565b610a2457835f610997565b8380fd5b6040513d87823e3d90fd5b610a4b915060203d811161077c5761076d8183612593565b5f610956565b6040513d88823e3d90fd5b81610a6691612593565b610a2457835f61091a565b503461033357602036600319011261033357610a8b6126ad565b60055481906001600160a01b0316803b156103c75781809160246040518094819363078a3b1960e11b835260043560048401525af18015610336576103225750f35b50346103335780600319360112610333576009546040516001600160a01b039091168152602090f35b50346103335760203660031901126103335780610b1161230f565b610b196126ad565b600b546001600160a01b031690813b156103c557604051630787a21360e51b81526001600160a01b0390911660048201529082908290602490829084905af18015610336576103225750f35b503461033357602036600319011261033357610b7f6126ad565b600b5481906001600160a01b0316803b156103c75781809160246040518094819363019494b360e01b835260043560048401525af18015610336576103225750f35b5034610333576020366003190112610333576004358152600160205260408120604051908160208254918281520190819285526020852090855b818110610c5b5750505082610c11910383612593565b604051928392602084019060208552518091526040840192915b818110610c39575050500390f35b82516001600160a01b0316845285945060209384019390920191600101610c2b565b8254845260209093019260019283019201610bfb565b5034610333578060031936011261033357602090604051908152f35b50346103335760203660031901126103335780610ca861230f565b610cb06126ad565b6007546001600160a01b031690813b156103c557604051630595aeb560e41b81526001600160a01b0390911660048201529082908290602490829084905af18015610336576103225750f35b50346103335780600319360112610333576010546040516001600160a01b039091168152602090f35b50346103335780600319360112610333576007546040516001600160a01b039091168152602090f35b5034610333576040366003190112610333576040610d6a612325565b91600435815280602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b503461033357610da63661251f565b610db19493946126ad565b808303610e92576008546001600160a01b031694853b156103415792604051936394126bb160e01b85528160448601604060048801525260648501909186905b808210610e5b57505084810360031901602486015282815260200192918591505b808210610e3557505050818394818581819503925af18015610336576103225750f35b9091928335801515809103610e57578152602090810193019160010190610e12565b8680fd5b90918335906001600160a01b0382168203610e8e576001600160a01b039091168152602093840193019160010190610df1565b5f80fd5b63899ef10d60e01b8452600484fd5b5034610333576020366003190112610333576004356001600160401b0381116110a257610ed290369060040161241b565b90610edb6126ad565b825b828110610ee8578380f35b83610ef761060a8386866125c8565b600c546001600160a01b038281169116803b15610a2457838091602460405180948193632a54db0160e01b83528760048401525af1908115610a045784916110cf575b50506005546040516302045be960e41b815260048101929092526001600160a01b031690602081602481855afa908115610a045784916110b1575b50813b15610a2457604051639f06247b60e01b81526001600160a01b0390911660048201529083908290602490829084905af19081156110a657839161108d575b505060095460405163149fad2f60e21b81526001600160a01b039091169190602081600481865afa908115610a04578491611052575b50823b15610a2457604051633b39a71f60e11b81526001600160a01b0392909216600483015260ff1660248201529082908290604490829084905af180156103365761103d575b5050600101610edd565b8161104791612593565b610a2457835f611033565b90506020813d8211611085575b8161106c60209383612593565b81010312610a24575160ff81168103610a24575f610fec565b3d915061105f565b8161109791612593565b6110a257815f610fb6565b5080fd5b6040513d85823e3d90fd5b6110c9915060203d811161077c5761076d8183612593565b5f610f75565b816110d991612593565b610a0057825f610f3a565b50346103335760403660031901126103335761111160209160043581526001835260406024359120612a2f565b905460405160039290921b1c6001600160a01b03168152f35b503461033357806003193601126103335760206040515f516020612be85f395f51905f528152f35b5034610333578060031936011261033357600d546040516001600160a01b039091168152602090f35b50346103335761118a3661251f565b9092916111956126ad565b8181036112b45790849291835b8181106111ad578480f35b6111bb6106538285896125c8565b1561123b576005546001600160a01b03166111da61060a8385886125c8565b813b15610e5757604051634d8c928d60e11b81526001600160a01b0390911660048201529086908290602490829084905af1908115610a51578691611226575b50506001905b016111a2565b8161123091612593565b61034157845f61121a565b6005546001600160a01b031661125561060a8385886125c8565b813b15610e5757604051639c7f331560e01b81526001600160a01b0390911660048201529086908290602490829084905af1908115610a5157869161129f575b5050600190611220565b816112a991612593565b61034157845f611295565b63899ef10d60e01b8552600485fd5b503461033357806112d33661251f565b93916112eb3360018060a01b0360035416331461256b565b825b8181106112f8578380f35b600d546001600160a01b031661131261060a8385896125c8565b611320610653848a886125c8565b823b15610e575760405163638b9ba560e11b81526001600160a01b039092166004830152151560248201529085908290604490829084905af1908115610a28578591611371575b50506001016112ed565b8161137b91612593565b610a2457835f611367565b5034610333578060031936011261033357600e546040516001600160a01b039091168152602090f35b503461033357806003193601126103335760206040515f516020612c085f395f51905f528152f35b5034610333576113e63661251f565b6113f2939192936126ad565b8084036112b457908491825b858110611409578380f35b6005546001600160a01b031661142361060a8389876125c8565b6040516302045be960e41b81526001600160a01b039091166004820152602081602481855afa908115610a51578691611514575b50604051630f55858b60e41b81526001600160a01b039091166004820152602081602481855afa908115610a515786916114f6575b5061149b61060a84868a6125c8565b823b15610e57576114c59287928360405180968195829463234823d760e01b84526004840161264a565b03925af1908115610a285785916114e1575b50506001016113fe565b816114eb91612593565b610a2457835f6114d7565b61150e915060203d811161077c5761076d8183612593565b5f61148c565b61152c915060203d811161077c5761076d8183612593565b5f611457565b50346103335780600319360112610333576004546040516001600160a01b039091168152602090f35b5034610333576020366003190112610333578061157661230f565b61157e6126ad565b600c546001600160a01b031690813b156103c557604051630787a21360e51b81526001600160a01b0390911660048201529082908290602490829084905af18015610336576103225750f35b5034610333576020366003190112610333576003546115f59033906001600160a01b0316811461256b565b600d5481906001600160a01b0316803b156103c757818091602460405180948193637c78e0f560e11b835260043560048401525af18015610336576103225750f35b5034610333576020366003190112610333578061165261230f565b61165a6126ad565b6005546001600160a01b031690813b156103c55760405163c42cf53560e01b81526001600160a01b0390911660048201529082908290602490829084905af18015610336576103225750f35b50346103335780600319360112610333576005546040516001600160a01b039091168152602090f35b503461033357610180366003190112610333576116ea61230f565b6116f2612325565b6116fa61233b565b91611703612351565b9061170c612367565b9261171561237d565b9261171e612393565b936117276123a9565b956117306123bf565b926117396123d6565b986117426123ed565b9561174b612404565b6002549098906001600160a01b038116801580159061197b575b156119775733148015611963575b801561194f575b1561193c576001600160a01b03199081166002556005805482166001600160a01b0393841617905560068054821693831693909317909255600780548316938216939093179092556008805482169383169390931790925560098054831693821693909317909255600a8054821693831693909317909255600b8054831693821693909317909255600c8054821693831693909317909255600d8054831693821693909317909255600e8054821693831693909317909255600f80548316938216939093179092556010805490911692821692909217909155600454166118608161279e565b611913575b506004546001600160a01b031661187b81612823565b6118ea575b506004546001600160a01b0316611896816128a3565b6118ce575b506003546001600160a01b03166118b1816128a3565b6118b9575080f35b61055f90828052600160205260408320612a44565b6118e390828052600160205260408320612a44565b505f61189b565b61190c905f516020612c085f395f51905f528352600160205260408320612a44565b505f611880565b611935905f516020612be85f395f51905f528352600160205260408320612a44565b505f611865565b632bc10c3360e01b8e523360045260248efd5b506003546001600160a01b0316331461177a565b506004546001600160a01b03163314611773565b8e80fd5b506003546001600160a01b03163314611765565b50346103335761199e3661244b565b91909492936119ab612664565b81811480611b04575b1561078e579086939291845b8181106119cb578580f35b6119d961065382868b6125c8565b15611a75576009546001600160a01b03166119f861060a8385896125c8565b611a0b611a0684878c6125c8565b61261d565b823b156106e557604051633b39a71f60e11b81526001600160a01b0392909216600483015260ff1660248201529087908290604490829084905af19081156106da578791611a60575b50506001905b016119c0565b81611a6a91612593565b6106d657855f611a54565b600a546001600160a01b0316611a8f61060a8385896125c8565b611a9d611a0684878c6125c8565b823b156106e55760405163203e180f60e11b81526001600160a01b03909216600483015260ff1660248201529087908290604490829084905af19081156106da578791611aef575b5050600190611a5a565b81611af991612593565b6106d657855f611ae5565b508282146119b4565b50346103335780600319360112610333576008546040516001600160a01b039091168152602090f35b5034610333578060031936011261033357600a546040516001600160a01b039091168152602090f35b50346103335780600319360112610333576002546040516001600160a01b039091168152602090f35b503461033357602036600319011261033357611ba26126ad565b60065481906001600160a01b0316803b156103c75781809160246040518094819363d47ffef160e01b835260043560048401525af18015610336576103225750f35b503461033357602036600319011261033357611bfe61230f565b6003546001600160a01b03811691611c183380851461256b565b6001600160a01b0316918214611c39576001600160a01b0319161760035580f35b63cb10513560e01b8352600483fd5b503461033357604036600319011261033357611c62612325565b336001600160a01b03821603611c7e5761055f90600435612768565b63334bd91960e11b8252600482fd5b50346103335760403660031901126103335761055f600435611cad612325565b90611cc6610555825f525f602052600160405f20015490565b61272e565b503461033357602036600319011261033357600354611cf69033906001600160a01b0316811461256b565b600d5481906001600160a01b0316803b156103c75781809160246040518094819363d8e2d8f360e01b835260043560048401525af18015610336576103225750f35b503461033357602036600319011261033357611d526126ad565b600c5481906001600160a01b0316803b156103c757818091602460405180948193633638348360e21b835260043560048401525af18015610336576103225750f35b5034610333576020366003190112610333576020611dbf6004355f525f602052600160405f20015490565b604051908152f35b503461033357808080611dd9366124bd565b919290611df23360018060a01b0360035416331461256b565b826040519384928337810182815203925af13d15611e66573d6001600160401b038111611e525760405190611e31601f8201601f191660200183612593565b81528260203d92013e5b15611e435780f35b630f8b39d560e41b8152600490fd5b634e487b7160e01b83526041600452602483fd5b611e3b565b50346103335760203660031901126103335780611e8661230f565b611e8e6126ad565b6007546001600160a01b031690813b156103c557604051631575c79160e11b81526001600160a01b0390911660048201529082908290602490829084905af18015610336576103225750f35b5034610333578060031936011261033357600f546040516001600160a01b039091168152602090f35b503461033357611f123661244b565b9190949293611f1f612664565b8181148061207b575b1561078e579086939291845b818110611f3f578580f35b611f4d61065382868b6125c8565b15611fea576009546001600160a01b0316611f6c61060a8385896125c8565b611f7f611f7a84878c6125c8565b61260d565b823b156106e55760405163ba364c3d60e01b81526001600160a01b03909216600483015262ffffff1660248201529087908290604490829084905af19081156106da578791611fd5575b50506001905b01611f34565b81611fdf91612593565b6106d657855f611fc9565b600a546001600160a01b031661200461060a8385896125c8565b612012611f7a84878c6125c8565b823b156106e55760405163a93a897d60e01b81526001600160a01b03909216600483015262ffffff1660248201529087908290604490829084905af19081156106da578791612066575b5050600190611fcf565b8161207091612593565b6106d657855f61205c565b50828214611f28565b5034610333576101a036600319011261033357806120a061230f565b6120a8612325565b6120b061233b565b906120b9612351565b6120c1612367565b6120c961237d565b6120d1612393565b6120d96123a9565b6120e16123bf565b6120e96123d6565b916120f26123ed565b936120fb612404565b95610184359760018060a01b0389168099036121dc5760035461212a9033906001600160a01b0316811461256b565b6005546001600160a01b0316998a3b1561197757604051632fdd983d60e01b81526001600160a01b039e8f1660048201529b8e1660248d01529b8d1660448c01529a8c1660648b0152998b1660848a0152988a1660a489015297891660c488015296881660e487015295871661010486015294861661012485015293851661014484015292909316610164820152610184810191909152908290829081835a926101a493f18015610336576103225750f35b8d80fd5b50346103335780600319360112610333576006546040516001600160a01b039091168152602090f35b5034610e8e576020366003190112610e8e5761222361230f565b60035461223c9033906001600160a01b0316811461256b565b6009546001600160a01b031690813b15610e8e57604051634bc2a65760e01b81526001600160a01b039091166004820152905f908290602490829084905af1801561229757612289575080f35b61229591505f90612593565b005b6040513d5f823e3d90fd5b34610e8e576020366003190112610e8e576004359063ffffffff60e01b8216809203610e8e57602091635a05180f60e01b81149081156122e4575b5015158152f35b637965db0b60e01b8114915081156122fe575b50836122dd565b6301ffc9a760e01b149050836122f7565b600435906001600160a01b0382168203610e8e57565b602435906001600160a01b0382168203610e8e57565b604435906001600160a01b0382168203610e8e57565b606435906001600160a01b0382168203610e8e57565b608435906001600160a01b0382168203610e8e57565b60a435906001600160a01b0382168203610e8e57565b60c435906001600160a01b0382168203610e8e57565b60e435906001600160a01b0382168203610e8e57565b61010435906001600160a01b0382168203610e8e57565b61012435906001600160a01b0382168203610e8e57565b61014435906001600160a01b0382168203610e8e57565b61016435906001600160a01b0382168203610e8e57565b9181601f84011215610e8e578235916001600160401b038311610e8e576020808501948460051b010111610e8e57565b6060600319820112610e8e576004356001600160401b038111610e8e57816124759160040161241b565b929092916024356001600160401b038111610e8e57816124979160040161241b565b92909291604435906001600160401b038211610e8e576124b99160040161241b565b9091565b6040600319820112610e8e576004356001600160a01b0381168103610e8e57916024356001600160401b038111610e8e5760040182601f82011215610e8e578035926001600160401b038411610e8e5760208481840193010111610e8e579190565b6040600319820112610e8e576004356001600160401b038111610e8e57816125499160040161241b565b92909291602435906001600160401b038211610e8e576124b99160040161241b565b156125735750565b636241d8a560e11b5f9081526001600160a01b0391909116600452602490fd5b90601f801991011681019081106001600160401b038211176125b457604052565b634e487b7160e01b5f52604160045260245ffd5b91908110156125d85760051b0190565b634e487b7160e01b5f52603260045260245ffd5b358015158103610e8e5790565b356001600160a01b0381168103610e8e5790565b3562ffffff81168103610e8e5790565b3560ff81168103610e8e5790565b90816020910312610e8e57516001600160a01b0381168103610e8e5790565b6001600160a01b0391821681529116602082015260400190565b335f9081525f516020612bc85f395f51905f52602052604090205460ff161561268957565b63e2517d3f60e01b5f52336004525f516020612be85f395f51905f5260245260445ffd5b335f9081525f516020612ba85f395f51905f52602052604090205460ff16156126d257565b63e2517d3f60e01b5f52336004525f516020612c085f395f51905f5260245260445ffd5b5f8181526020818152604080832033845290915290205460ff16156127185750565b63e2517d3f60e01b5f523360045260245260445ffd5b612738828261293a565b918261274357505090565b5f91825260016020526040909120612764916001600160a01b031690612a44565b5090565b61277282826129af565b918261277d57505090565b5f91825260016020526040909120612764916001600160a01b031690612aae565b6001600160a01b0381165f9081525f516020612bc85f395f51905f52602052604090205460ff1661281e576001600160a01b03165f8181525f516020612bc85f395f51905f5260205260408120805460ff191660011790553391905f516020612be85f395f51905f52905f516020612b885f395f51905f529080a4600190565b505f90565b6001600160a01b0381165f9081525f516020612ba85f395f51905f52602052604090205460ff1661281e576001600160a01b03165f8181525f516020612ba85f395f51905f5260205260408120805460ff191660011790553391905f516020612c085f395f51905f52905f516020612b885f395f51905f529080a4600190565b6001600160a01b0381165f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1661281e576001600160a01b03165f8181527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb560205260408120805460ff191660011790553391905f516020612b885f395f51905f528180a4600190565b5f818152602081815260408083206001600160a01b038616845290915290205460ff166129a9575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291905f516020612b885f395f51905f529080a4600190565b50505f90565b5f818152602081815260408083206001600160a01b038616845290915290205460ff16156129a9575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b80548210156125d8575f5260205f2001905f90565b6001810190825f528160205260405f2054155f14612aa7578054600160401b8110156125b457612a94612a7e826001879401855584612a2f565b819391549060031b91821b915f19901b19161790565b905554915f5260205260405f2055600190565b5050505f90565b906001820191815f528260205260405f20548015155f14612b7f575f198101818111612b6b5782545f19810191908211612b6b57818103612b36575b50505080548015612b22575f190190612b038282612a2f565b8154905f199060031b1b19169055555f526020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b612b56612b46612a7e9386612a2f565b90549060031b1c92839286612a2f565b90555f528360205260405f20555f8080612aea565b634e487b7160e01b5f52601160045260245ffd5b505050505f9056fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d6af94e2096bd5b8c4290a89b6490024a124f136817bf56898a556ae1ce6c413f15dbb209f83f1c435625f527e9d46d7392c6ba0fa0679f623124e47ec762f1d90cee480c05aeabaa18fb824cd297ccabddb1b1a9a83b28d3f07e85c0cd25c459b3072e349cf62590698516830b9ea81d68c974027ccbf3c77e3d2a88743208e5a2646970667358221220f66d8cc1386b872c1ff8726846331b9b6b7de1bf7a2ad27c745463c603011dd464736f6c634300081c00330000000000000000000000004577d5d9687ee4413fc0c391b85861f0a383df500000000000000000000000005be2e859d0c2453c9aa062860ca27711ff553432
Deployed Bytecode
0x6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146122a25750806302be9a901461220957806307546172146121e057806307a8d4ef1461208457806309651f7d14611f035780630d52333c14611eda5780631635880614611e6b5780631cff79cd14611dc7578063248a9ca314611d945780632a59c80614611d385780632eb6479514611ccb5780632f2ff15d14611c8d57806336568abe14611c485780633abdbf2a14611be45780633eadd56e14611b885780633f3108f714611b5f5780634219dc4014611b365780634256f5e714611b0d578063429fa2141461198f5780634339efbd146116cf57806346c96aac146116a657806349fe8228146116375780634b9880c1146115ca57806352e0970f1461155b57806361d027b31461153257806369e0bc05146113d757806378b1a8c7146113af5780637bebe3811461138657806380a1ebbb146112c357806382169aec1461117b57806385caf28b146111525780638cb422f01461112a5780639010d07c146110e457806390bcc5a214610ea157806391742be014610d9757806391d1485414610d4e57806393208a2b14610d255780639647d14114610cfc5780639987e75714610c8d578063a217fddf14610c71578063a3246ad314610bc1578063a71504ad14610b65578063ab0e019214610af6578063ac33ef8514610acd578063ba01351014610a71578063be02ec3814610880578063c1463c15146107f9578063c415b95c146107d0578063ca15c873146107a6578063ca1699e8146105b5578063d32af6c11461058c578063d33219b414610563578063d547741f1461051c578063dbb466df146104a8578063e6dca2b214610439578063e95245fd146103ca578063eee0fdb4146103455763f7553c521461029c575f80fd5b3461033357806102ab366124bd565b916102b46126ad565b6007546001600160a01b0316803b156103415784928360648694604051978896879586936216690f60e91b855260018060a01b0316600485015260406024850152816044850152848401378181018301849052601f01601f191681010301925af18015610336576103225750f35b8161032c91612593565b6103335780f35b80fd5b6040513d84823e3d90fd5b8480fd5b503461033357604036600319011261033357806004358060020b8091036103c7576024359062ffffff82168092036103c55761037f6126ad565b6009546001600160a01b031691823b156103c35760448492836040519586948593633bb83f6d60e21b8552600485015260248401525af18015610336576103225750f35b505b505b50fd5b503461033357602036600319011261033357806103e561230f565b6103ed6126ad565b6007546001600160a01b031690813b156103c55760405163b3ab15fb60e01b81526001600160a01b0390911660048201529082908290602490829084905af18015610336576103225750f35b5034610333576020366003190112610333578061045461230f565b61045c6126ad565b6007546001600160a01b031690813b156103c55760405163dcaaa61b60e01b81526001600160a01b0390911660048201529082908290602490829084905af18015610336576103225750f35b503461033357604036600319011261033357806104c361230f565b6104cb612325565b906104d46126ad565b6007546001600160a01b031691823b156103c35761050b9284928360405180968195829463772b7e9760e01b84526004840161264a565b03925af18015610336576103225750f35b50346103335760403660031901126103335761055f60043561053c612325565b9061055a610555825f525f602052600160405f20015490565b6126f6565b612768565b5080f35b50346103335780600319360112610333576003546040516001600160a01b039091168152602090f35b5034610333578060031936011261033357600b546040516001600160a01b039091168152602090f35b5034610333576105c43661244b565b919093946105d06126ad565b8186148061079d575b1561078e579086939291845b8781106105f0578580f35b6005546001600160a01b031661060f61060a838b866125c8565b6125f9565b6040516302045be960e41b81526001600160a01b03909116600482015290602082602481845afa918215610783578892610753575b5061065861065384888c6125c8565b6125ec565b156106e957506005546001600160a01b03169061067961060a84878a6125c8565b823b156106e5576106a392899283604051809681958294631a6de0e560e31b84526004840161264a565b03925af19081156106da5787916106c1575b50506001905b016105e5565b816106cb91612593565b6106d657855f6106b5565b8580fd5b6040513d89823e3d90fd5b8880fd5b906106f861060a84878a6125c8565b823b156106e55761072292899283604051809681958294637fe0500f60e11b84526004840161264a565b03925af19081156106da57879161073e575b50506001906106bb565b8161074891612593565b6106d657855f610734565b61077591925060203d811161077c575b61076d8183612593565b81019061262b565b905f610644565b503d610763565b6040513d8a823e3d90fd5b63899ef10d60e01b8752600487fd5b508282146105d9565b50346103335760203660031901126103335760406020916004358152600183522054604051908152f35b5034610333578060031936011261033357600c546040516001600160a01b039091168152602090f35b5034610333576060366003190112610333578061081461230f565b61081c61233b565b906108256126ad565b6007546001600160a01b031691823b156103c357604051636984ede360e11b81526001600160a01b0392831660048201526024803590820152911660448201529082908290606490829084905af18015610336576103225750f35b503461033357602036600319011261033357806004356001600160401b0381116103c7576108b290369060040161241b565b91906108bc6126ad565b815b8381106108c9578280f35b6108d761060a8286856125c8565b600c546001600160a01b039182169116803b1561034157848091602460405180948193632a54db0160e01b83528760048401525af1908115610a28578591610a5c575b50506005546040516302045be960e41b8152600481018390526001600160a01b0390911690602081602481855afa908115610a51578691610a33575b50813b156106d65760405163992a793360e01b81526001600160a01b0390911660048201529085908290602490829084905af1908115610a28578591610a0f575b50506009546001600160a01b031690813b15610341578491604483926040519485938492633b39a71f60e11b84526004840152600560248401525af1908115610a045784916109eb575b50506001016108be565b816109f591612593565b610a0057825f6109e1565b8280fd5b6040513d86823e3d90fd5b81610a1991612593565b610a2457835f610997565b8380fd5b6040513d87823e3d90fd5b610a4b915060203d811161077c5761076d8183612593565b5f610956565b6040513d88823e3d90fd5b81610a6691612593565b610a2457835f61091a565b503461033357602036600319011261033357610a8b6126ad565b60055481906001600160a01b0316803b156103c75781809160246040518094819363078a3b1960e11b835260043560048401525af18015610336576103225750f35b50346103335780600319360112610333576009546040516001600160a01b039091168152602090f35b50346103335760203660031901126103335780610b1161230f565b610b196126ad565b600b546001600160a01b031690813b156103c557604051630787a21360e51b81526001600160a01b0390911660048201529082908290602490829084905af18015610336576103225750f35b503461033357602036600319011261033357610b7f6126ad565b600b5481906001600160a01b0316803b156103c75781809160246040518094819363019494b360e01b835260043560048401525af18015610336576103225750f35b5034610333576020366003190112610333576004358152600160205260408120604051908160208254918281520190819285526020852090855b818110610c5b5750505082610c11910383612593565b604051928392602084019060208552518091526040840192915b818110610c39575050500390f35b82516001600160a01b0316845285945060209384019390920191600101610c2b565b8254845260209093019260019283019201610bfb565b5034610333578060031936011261033357602090604051908152f35b50346103335760203660031901126103335780610ca861230f565b610cb06126ad565b6007546001600160a01b031690813b156103c557604051630595aeb560e41b81526001600160a01b0390911660048201529082908290602490829084905af18015610336576103225750f35b50346103335780600319360112610333576010546040516001600160a01b039091168152602090f35b50346103335780600319360112610333576007546040516001600160a01b039091168152602090f35b5034610333576040366003190112610333576040610d6a612325565b91600435815280602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b503461033357610da63661251f565b610db19493946126ad565b808303610e92576008546001600160a01b031694853b156103415792604051936394126bb160e01b85528160448601604060048801525260648501909186905b808210610e5b57505084810360031901602486015282815260200192918591505b808210610e3557505050818394818581819503925af18015610336576103225750f35b9091928335801515809103610e57578152602090810193019160010190610e12565b8680fd5b90918335906001600160a01b0382168203610e8e576001600160a01b039091168152602093840193019160010190610df1565b5f80fd5b63899ef10d60e01b8452600484fd5b5034610333576020366003190112610333576004356001600160401b0381116110a257610ed290369060040161241b565b90610edb6126ad565b825b828110610ee8578380f35b83610ef761060a8386866125c8565b600c546001600160a01b038281169116803b15610a2457838091602460405180948193632a54db0160e01b83528760048401525af1908115610a045784916110cf575b50506005546040516302045be960e41b815260048101929092526001600160a01b031690602081602481855afa908115610a045784916110b1575b50813b15610a2457604051639f06247b60e01b81526001600160a01b0390911660048201529083908290602490829084905af19081156110a657839161108d575b505060095460405163149fad2f60e21b81526001600160a01b039091169190602081600481865afa908115610a04578491611052575b50823b15610a2457604051633b39a71f60e11b81526001600160a01b0392909216600483015260ff1660248201529082908290604490829084905af180156103365761103d575b5050600101610edd565b8161104791612593565b610a2457835f611033565b90506020813d8211611085575b8161106c60209383612593565b81010312610a24575160ff81168103610a24575f610fec565b3d915061105f565b8161109791612593565b6110a257815f610fb6565b5080fd5b6040513d85823e3d90fd5b6110c9915060203d811161077c5761076d8183612593565b5f610f75565b816110d991612593565b610a0057825f610f3a565b50346103335760403660031901126103335761111160209160043581526001835260406024359120612a2f565b905460405160039290921b1c6001600160a01b03168152f35b503461033357806003193601126103335760206040515f516020612be85f395f51905f528152f35b5034610333578060031936011261033357600d546040516001600160a01b039091168152602090f35b50346103335761118a3661251f565b9092916111956126ad565b8181036112b45790849291835b8181106111ad578480f35b6111bb6106538285896125c8565b1561123b576005546001600160a01b03166111da61060a8385886125c8565b813b15610e5757604051634d8c928d60e11b81526001600160a01b0390911660048201529086908290602490829084905af1908115610a51578691611226575b50506001905b016111a2565b8161123091612593565b61034157845f61121a565b6005546001600160a01b031661125561060a8385886125c8565b813b15610e5757604051639c7f331560e01b81526001600160a01b0390911660048201529086908290602490829084905af1908115610a5157869161129f575b5050600190611220565b816112a991612593565b61034157845f611295565b63899ef10d60e01b8552600485fd5b503461033357806112d33661251f565b93916112eb3360018060a01b0360035416331461256b565b825b8181106112f8578380f35b600d546001600160a01b031661131261060a8385896125c8565b611320610653848a886125c8565b823b15610e575760405163638b9ba560e11b81526001600160a01b039092166004830152151560248201529085908290604490829084905af1908115610a28578591611371575b50506001016112ed565b8161137b91612593565b610a2457835f611367565b5034610333578060031936011261033357600e546040516001600160a01b039091168152602090f35b503461033357806003193601126103335760206040515f516020612c085f395f51905f528152f35b5034610333576113e63661251f565b6113f2939192936126ad565b8084036112b457908491825b858110611409578380f35b6005546001600160a01b031661142361060a8389876125c8565b6040516302045be960e41b81526001600160a01b039091166004820152602081602481855afa908115610a51578691611514575b50604051630f55858b60e41b81526001600160a01b039091166004820152602081602481855afa908115610a515786916114f6575b5061149b61060a84868a6125c8565b823b15610e57576114c59287928360405180968195829463234823d760e01b84526004840161264a565b03925af1908115610a285785916114e1575b50506001016113fe565b816114eb91612593565b610a2457835f6114d7565b61150e915060203d811161077c5761076d8183612593565b5f61148c565b61152c915060203d811161077c5761076d8183612593565b5f611457565b50346103335780600319360112610333576004546040516001600160a01b039091168152602090f35b5034610333576020366003190112610333578061157661230f565b61157e6126ad565b600c546001600160a01b031690813b156103c557604051630787a21360e51b81526001600160a01b0390911660048201529082908290602490829084905af18015610336576103225750f35b5034610333576020366003190112610333576003546115f59033906001600160a01b0316811461256b565b600d5481906001600160a01b0316803b156103c757818091602460405180948193637c78e0f560e11b835260043560048401525af18015610336576103225750f35b5034610333576020366003190112610333578061165261230f565b61165a6126ad565b6005546001600160a01b031690813b156103c55760405163c42cf53560e01b81526001600160a01b0390911660048201529082908290602490829084905af18015610336576103225750f35b50346103335780600319360112610333576005546040516001600160a01b039091168152602090f35b503461033357610180366003190112610333576116ea61230f565b6116f2612325565b6116fa61233b565b91611703612351565b9061170c612367565b9261171561237d565b9261171e612393565b936117276123a9565b956117306123bf565b926117396123d6565b986117426123ed565b9561174b612404565b6002549098906001600160a01b038116801580159061197b575b156119775733148015611963575b801561194f575b1561193c576001600160a01b03199081166002556005805482166001600160a01b0393841617905560068054821693831693909317909255600780548316938216939093179092556008805482169383169390931790925560098054831693821693909317909255600a8054821693831693909317909255600b8054831693821693909317909255600c8054821693831693909317909255600d8054831693821693909317909255600e8054821693831693909317909255600f80548316938216939093179092556010805490911692821692909217909155600454166118608161279e565b611913575b506004546001600160a01b031661187b81612823565b6118ea575b506004546001600160a01b0316611896816128a3565b6118ce575b506003546001600160a01b03166118b1816128a3565b6118b9575080f35b61055f90828052600160205260408320612a44565b6118e390828052600160205260408320612a44565b505f61189b565b61190c905f516020612c085f395f51905f528352600160205260408320612a44565b505f611880565b611935905f516020612be85f395f51905f528352600160205260408320612a44565b505f611865565b632bc10c3360e01b8e523360045260248efd5b506003546001600160a01b0316331461177a565b506004546001600160a01b03163314611773565b8e80fd5b506003546001600160a01b03163314611765565b50346103335761199e3661244b565b91909492936119ab612664565b81811480611b04575b1561078e579086939291845b8181106119cb578580f35b6119d961065382868b6125c8565b15611a75576009546001600160a01b03166119f861060a8385896125c8565b611a0b611a0684878c6125c8565b61261d565b823b156106e557604051633b39a71f60e11b81526001600160a01b0392909216600483015260ff1660248201529087908290604490829084905af19081156106da578791611a60575b50506001905b016119c0565b81611a6a91612593565b6106d657855f611a54565b600a546001600160a01b0316611a8f61060a8385896125c8565b611a9d611a0684878c6125c8565b823b156106e55760405163203e180f60e11b81526001600160a01b03909216600483015260ff1660248201529087908290604490829084905af19081156106da578791611aef575b5050600190611a5a565b81611af991612593565b6106d657855f611ae5565b508282146119b4565b50346103335780600319360112610333576008546040516001600160a01b039091168152602090f35b5034610333578060031936011261033357600a546040516001600160a01b039091168152602090f35b50346103335780600319360112610333576002546040516001600160a01b039091168152602090f35b503461033357602036600319011261033357611ba26126ad565b60065481906001600160a01b0316803b156103c75781809160246040518094819363d47ffef160e01b835260043560048401525af18015610336576103225750f35b503461033357602036600319011261033357611bfe61230f565b6003546001600160a01b03811691611c183380851461256b565b6001600160a01b0316918214611c39576001600160a01b0319161760035580f35b63cb10513560e01b8352600483fd5b503461033357604036600319011261033357611c62612325565b336001600160a01b03821603611c7e5761055f90600435612768565b63334bd91960e11b8252600482fd5b50346103335760403660031901126103335761055f600435611cad612325565b90611cc6610555825f525f602052600160405f20015490565b61272e565b503461033357602036600319011261033357600354611cf69033906001600160a01b0316811461256b565b600d5481906001600160a01b0316803b156103c75781809160246040518094819363d8e2d8f360e01b835260043560048401525af18015610336576103225750f35b503461033357602036600319011261033357611d526126ad565b600c5481906001600160a01b0316803b156103c757818091602460405180948193633638348360e21b835260043560048401525af18015610336576103225750f35b5034610333576020366003190112610333576020611dbf6004355f525f602052600160405f20015490565b604051908152f35b503461033357808080611dd9366124bd565b919290611df23360018060a01b0360035416331461256b565b826040519384928337810182815203925af13d15611e66573d6001600160401b038111611e525760405190611e31601f8201601f191660200183612593565b81528260203d92013e5b15611e435780f35b630f8b39d560e41b8152600490fd5b634e487b7160e01b83526041600452602483fd5b611e3b565b50346103335760203660031901126103335780611e8661230f565b611e8e6126ad565b6007546001600160a01b031690813b156103c557604051631575c79160e11b81526001600160a01b0390911660048201529082908290602490829084905af18015610336576103225750f35b5034610333578060031936011261033357600f546040516001600160a01b039091168152602090f35b503461033357611f123661244b565b9190949293611f1f612664565b8181148061207b575b1561078e579086939291845b818110611f3f578580f35b611f4d61065382868b6125c8565b15611fea576009546001600160a01b0316611f6c61060a8385896125c8565b611f7f611f7a84878c6125c8565b61260d565b823b156106e55760405163ba364c3d60e01b81526001600160a01b03909216600483015262ffffff1660248201529087908290604490829084905af19081156106da578791611fd5575b50506001905b01611f34565b81611fdf91612593565b6106d657855f611fc9565b600a546001600160a01b031661200461060a8385896125c8565b612012611f7a84878c6125c8565b823b156106e55760405163a93a897d60e01b81526001600160a01b03909216600483015262ffffff1660248201529087908290604490829084905af19081156106da578791612066575b5050600190611fcf565b8161207091612593565b6106d657855f61205c565b50828214611f28565b5034610333576101a036600319011261033357806120a061230f565b6120a8612325565b6120b061233b565b906120b9612351565b6120c1612367565b6120c961237d565b6120d1612393565b6120d96123a9565b6120e16123bf565b6120e96123d6565b916120f26123ed565b936120fb612404565b95610184359760018060a01b0389168099036121dc5760035461212a9033906001600160a01b0316811461256b565b6005546001600160a01b0316998a3b1561197757604051632fdd983d60e01b81526001600160a01b039e8f1660048201529b8e1660248d01529b8d1660448c01529a8c1660648b0152998b1660848a0152988a1660a489015297891660c488015296881660e487015295871661010486015294861661012485015293851661014484015292909316610164820152610184810191909152908290829081835a926101a493f18015610336576103225750f35b8d80fd5b50346103335780600319360112610333576006546040516001600160a01b039091168152602090f35b5034610e8e576020366003190112610e8e5761222361230f565b60035461223c9033906001600160a01b0316811461256b565b6009546001600160a01b031690813b15610e8e57604051634bc2a65760e01b81526001600160a01b039091166004820152905f908290602490829084905af1801561229757612289575080f35b61229591505f90612593565b005b6040513d5f823e3d90fd5b34610e8e576020366003190112610e8e576004359063ffffffff60e01b8216809203610e8e57602091635a05180f60e01b81149081156122e4575b5015158152f35b637965db0b60e01b8114915081156122fe575b50836122dd565b6301ffc9a760e01b149050836122f7565b600435906001600160a01b0382168203610e8e57565b602435906001600160a01b0382168203610e8e57565b604435906001600160a01b0382168203610e8e57565b606435906001600160a01b0382168203610e8e57565b608435906001600160a01b0382168203610e8e57565b60a435906001600160a01b0382168203610e8e57565b60c435906001600160a01b0382168203610e8e57565b60e435906001600160a01b0382168203610e8e57565b61010435906001600160a01b0382168203610e8e57565b61012435906001600160a01b0382168203610e8e57565b61014435906001600160a01b0382168203610e8e57565b61016435906001600160a01b0382168203610e8e57565b9181601f84011215610e8e578235916001600160401b038311610e8e576020808501948460051b010111610e8e57565b6060600319820112610e8e576004356001600160401b038111610e8e57816124759160040161241b565b929092916024356001600160401b038111610e8e57816124979160040161241b565b92909291604435906001600160401b038211610e8e576124b99160040161241b565b9091565b6040600319820112610e8e576004356001600160a01b0381168103610e8e57916024356001600160401b038111610e8e5760040182601f82011215610e8e578035926001600160401b038411610e8e5760208481840193010111610e8e579190565b6040600319820112610e8e576004356001600160401b038111610e8e57816125499160040161241b565b92909291602435906001600160401b038211610e8e576124b99160040161241b565b156125735750565b636241d8a560e11b5f9081526001600160a01b0391909116600452602490fd5b90601f801991011681019081106001600160401b038211176125b457604052565b634e487b7160e01b5f52604160045260245ffd5b91908110156125d85760051b0190565b634e487b7160e01b5f52603260045260245ffd5b358015158103610e8e5790565b356001600160a01b0381168103610e8e5790565b3562ffffff81168103610e8e5790565b3560ff81168103610e8e5790565b90816020910312610e8e57516001600160a01b0381168103610e8e5790565b6001600160a01b0391821681529116602082015260400190565b335f9081525f516020612bc85f395f51905f52602052604090205460ff161561268957565b63e2517d3f60e01b5f52336004525f516020612be85f395f51905f5260245260445ffd5b335f9081525f516020612ba85f395f51905f52602052604090205460ff16156126d257565b63e2517d3f60e01b5f52336004525f516020612c085f395f51905f5260245260445ffd5b5f8181526020818152604080832033845290915290205460ff16156127185750565b63e2517d3f60e01b5f523360045260245260445ffd5b612738828261293a565b918261274357505090565b5f91825260016020526040909120612764916001600160a01b031690612a44565b5090565b61277282826129af565b918261277d57505090565b5f91825260016020526040909120612764916001600160a01b031690612aae565b6001600160a01b0381165f9081525f516020612bc85f395f51905f52602052604090205460ff1661281e576001600160a01b03165f8181525f516020612bc85f395f51905f5260205260408120805460ff191660011790553391905f516020612be85f395f51905f52905f516020612b885f395f51905f529080a4600190565b505f90565b6001600160a01b0381165f9081525f516020612ba85f395f51905f52602052604090205460ff1661281e576001600160a01b03165f8181525f516020612ba85f395f51905f5260205260408120805460ff191660011790553391905f516020612c085f395f51905f52905f516020612b885f395f51905f529080a4600190565b6001600160a01b0381165f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1661281e576001600160a01b03165f8181527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb560205260408120805460ff191660011790553391905f516020612b885f395f51905f528180a4600190565b5f818152602081815260408083206001600160a01b038616845290915290205460ff166129a9575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291905f516020612b885f395f51905f529080a4600190565b50505f90565b5f818152602081815260408083206001600160a01b038616845290915290205460ff16156129a9575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b80548210156125d8575f5260205f2001905f90565b6001810190825f528160205260405f2054155f14612aa7578054600160401b8110156125b457612a94612a7e826001879401855584612a2f565b819391549060031b91821b915f19901b19161790565b905554915f5260205260405f2055600190565b5050505f90565b906001820191815f528260205260405f20548015155f14612b7f575f198101818111612b6b5782545f19810191908211612b6b57818103612b36575b50505080548015612b22575f190190612b038282612a2f565b8154905f199060031b1b19169055555f526020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b612b56612b46612a7e9386612a2f565b90549060031b1c92839286612a2f565b90555f528360205260405f20555f8080612aea565b634e487b7160e01b5f52601160045260245ffd5b505050505f9056fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d6af94e2096bd5b8c4290a89b6490024a124f136817bf56898a556ae1ce6c413f15dbb209f83f1c435625f527e9d46d7392c6ba0fa0679f623124e47ec762f1d90cee480c05aeabaa18fb824cd297ccabddb1b1a9a83b28d3f07e85c0cd25c459b3072e349cf62590698516830b9ea81d68c974027ccbf3c77e3d2a88743208e5a2646970667358221220f66d8cc1386b872c1ff8726846331b9b6b7de1bf7a2ad27c745463c603011dd464736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004577d5d9687ee4413fc0c391b85861f0a383df500000000000000000000000005be2e859d0c2453c9aa062860ca27711ff553432
-----Decoded View---------------
Arg [0] : _timelock (address): 0x4577D5d9687Ee4413Fc0c391b85861F0a383Df50
Arg [1] : _treasury (address): 0x5Be2e859D0c2453C9aA062860cA27711ff553432
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000004577d5d9687ee4413fc0c391b85861f0a383df50
Arg [1] : 0000000000000000000000005be2e859d0c2453c9aa062860ca27711ff553432
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.