Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Treasury
Compiler Version
v0.7.5+commit.eb77ed08
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function add32(uint32 a, uint32 b) internal pure returns (uint32) {
uint32 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function mul32(uint32 a, uint32 b) internal pure returns (uint32) {
if (a == 0) {
return 0;
}
uint32 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
}
library Address {
function isContract(address account) internal view returns (bool) {
// This method relies in extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
function _functionCallWithValue(
address target,
bytes memory data,
uint256 weiValue,
string memory errorMessage
) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
function _verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
interface IOwnable {
function manager() external view returns (address);
function renounceManagement() external;
function pushManagement( address newOwner_ ) external;
function pullManagement() external;
}
contract Ownable is IOwnable {
address internal _owner;
address internal _newOwner;
event OwnershipPushed(address indexed previousOwner, address indexed newOwner);
event OwnershipPulled(address indexed previousOwner, address indexed newOwner);
constructor () {
_owner = msg.sender;
emit OwnershipPushed( address(0), _owner );
}
function manager() public view override returns (address) {
return _owner;
}
modifier onlyManager() {
require( _owner == msg.sender, "Ownable: caller is not the owner" );
_;
}
function renounceManagement() public virtual override onlyManager() {
emit OwnershipPushed( _owner, address(0) );
_owner = address(0);
}
function pushManagement( address newOwner_ ) public virtual override onlyManager() {
require( newOwner_ != address(0), "Ownable: new owner is the zero address");
emit OwnershipPushed( _owner, newOwner_ );
_newOwner = newOwner_;
}
function pullManagement() public virtual override {
require( msg.sender == _newOwner, "Ownable: must be new owner to pull");
emit OwnershipPulled( _owner, _newOwner );
_owner = _newOwner;
}
}
interface IERC20 {
function decimals() external view returns (uint8);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function approve(address spender, uint256 amount) external returns (bool);
function totalSupply() external view returns (uint256);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
interface IERC20Mintable {
function mint( uint256 amount_ ) external;
function mint( address account_, uint256 ammount_ ) external;
}
interface IETHERC20 {
function burnFrom(address account_, uint256 amount_) external;
}
interface IBondCalculator {
function valuation( address pair_, uint amount_ ) external view returns ( uint _value );
}
contract Treasury is Ownable {
using SafeMath for uint;
using SafeMath for uint32;
using SafeERC20 for IERC20;
event Deposit( address indexed token, uint amount, uint value );
event Withdrawal( address indexed token, uint amount, uint value );
event CreateDebt( address indexed debtor, address indexed token, uint amount, uint value );
event RepayDebt( address indexed debtor, address indexed token, uint amount, uint value );
event ReservesManaged( address indexed token, uint amount );
event ReservesUpdated( uint indexed totalReserves );
event ReservesAudited( uint indexed totalReserves );
event RewardsMinted( address indexed caller, address indexed recipient, uint amount );
event ChangeQueued( MANAGING indexed managing, address queued );
event ChangeActivated( MANAGING indexed managing, address activated, bool result );
enum MANAGING {
RESERVEDEPOSITOR,
RESERVESPENDER,
RESERVETOKEN,
RESERVEMANAGER,
LIQUIDITYDEPOSITOR,
LIQUIDITYTOKEN,
LIQUIDITYMANAGER,
DEBTOR,
REWARDMANAGER,
SETH
}
address public immutable Frynx;
uint32 public immutable secondsNeededForQueue;
address[] public reserveTokens; // Push only, beware false-positives.
mapping( address => bool ) public isReserveToken;
mapping( address => uint32 ) public reserveTokenQueue; // Delays changes to mapping.
address[] public reserveDepositors; // Push only, beware false-positives. Only for viewing.
mapping( address => bool ) public isReserveDepositor;
mapping( address => uint32 ) public reserveDepositorQueue; // Delays changes to mapping.
address[] public reserveSpenders; // Push only, beware false-positives. Only for viewing.
mapping( address => bool ) public isReserveSpender;
mapping( address => uint32 ) public reserveSpenderQueue; // Delays changes to mapping.
address[] public liquidityTokens; // Push only, beware false-positives.
mapping( address => bool ) public isLiquidityToken;
mapping( address => uint32 ) public LiquidityTokenQueue; // Delays changes to mapping.
address[] public liquidityDepositors; // Push only, beware false-positives. Only for viewing.
mapping( address => bool ) public isLiquidityDepositor;
mapping( address => uint32 ) public LiquidityDepositorQueue; // Delays changes to mapping.
mapping( address => address ) public bondCalculator; // bond calculator for liquidity token
address[] public reserveManagers; // Push only, beware false-positives. Only for viewing.
mapping( address => bool ) public isReserveManager;
mapping( address => uint32 ) public ReserveManagerQueue; // Delays changes to mapping.
address[] public liquidityManagers; // Push only, beware false-positives. Only for viewing.
mapping( address => bool ) public isLiquidityManager;
mapping( address => uint32 ) public LiquidityManagerQueue; // Delays changes to mapping.
address[] public debtors; // Push only, beware false-positives. Only for viewing.
mapping( address => bool ) public isDebtor;
mapping( address => uint32 ) public debtorQueue; // Delays changes to mapping.
mapping( address => uint ) public debtorBalance;
address[] public rewardManagers; // Push only, beware false-positives. Only for viewing.
mapping( address => bool ) public isRewardManager;
mapping( address => uint32 ) public rewardManagerQueue; // Delays changes to mapping.
address public sFrynx;
uint public sETHQueue; // Delays change to sETH address
uint public totalReserves; // Risk-free value of all assets
uint public totalDebt;
constructor (
address _Frynx,
address _ETH,
uint32 _secondsNeededForQueue
) {
require( _Frynx != address(0) );
Frynx = _Frynx;
isReserveToken[ _ETH ] = true;
reserveTokens.push( _ETH );
secondsNeededForQueue = _secondsNeededForQueue;
}
/**
@notice allow approved address to deposit an asset for ETH
@param _amount uint
@param _token address
@param _profit uint
@return send_ uint
*/
function deposit( uint _amount, address _token, uint _profit ) external returns ( uint send_ ) {
require( isReserveToken[ _token ] || isLiquidityToken[ _token ], "Not accepted" );
IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount );
if ( isReserveToken[ _token ] ) {
require( isReserveDepositor[ msg.sender ], "Not approved" );
} else {
require( isLiquidityDepositor[ msg.sender ], "Not approved" );
}
uint value = valueOf(_token, _amount);
// mint ETH needed and store amount of rewards for distribution
send_ = value.sub( _profit );
IERC20Mintable( Frynx ).mint( msg.sender, send_ );
totalReserves = totalReserves.add( value );
emit ReservesUpdated( totalReserves );
emit Deposit( _token, _amount, value );
}
/**
@notice allow approved address to burn ETH for reserves
@param _amount uint
@param _token address
*/
function withdraw( uint _amount, address _token ) external {
require( isReserveToken[ _token ], "Not accepted" ); // Only reserves can be used for redemptions
require( isReserveSpender[ msg.sender ] == true, "Not approved" );
uint value = valueOf( _token, _amount );
IETHERC20( Frynx ).burnFrom( msg.sender, value );
totalReserves = totalReserves.sub( value );
emit ReservesUpdated( totalReserves );
IERC20( _token ).safeTransfer( msg.sender, _amount );
emit Withdrawal( _token, _amount, value );
}
/**
@notice allow approved address to borrow reserves
@param _amount uint
@param _token address
*/
function incurDebt( uint _amount, address _token ) external {
require( isDebtor[ msg.sender ], "Not approved" );
require( isReserveToken[ _token ], "Not accepted" );
uint value = valueOf( _token, _amount );
uint maximumDebt = IERC20( sFrynx ).balanceOf( msg.sender ); // Can only borrow against sETH held
uint availableDebt = maximumDebt.sub( debtorBalance[ msg.sender ] );
require( value <= availableDebt, "Exceeds debt limit" );
debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].add( value );
totalDebt = totalDebt.add( value );
totalReserves = totalReserves.sub( value );
emit ReservesUpdated( totalReserves );
IERC20( _token ).transfer( msg.sender, _amount );
emit CreateDebt( msg.sender, _token, _amount, value );
}
/**
@notice allow approved address to repay borrowed reserves with reserves
@param _amount uint
@param _token address
*/
function repayDebtWithReserve( uint _amount, address _token ) external {
require( isDebtor[ msg.sender ], "Not approved" );
require( isReserveToken[ _token ], "Not accepted" );
IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount );
uint value = valueOf( _token, _amount );
debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].sub( value );
totalDebt = totalDebt.sub( value );
totalReserves = totalReserves.add( value );
emit ReservesUpdated( totalReserves );
emit RepayDebt( msg.sender, _token, _amount, value );
}
/**
@notice allow approved address to repay borrowed reserves with ETH
@param _amount uint
*/
function repayDebtWithETH( uint _amount ) external {
require( isDebtor[ msg.sender ], "Not approved" );
IETHERC20( Frynx ).burnFrom( msg.sender, _amount );
debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].sub( _amount );
totalDebt = totalDebt.sub( _amount );
emit RepayDebt( msg.sender, Frynx, _amount, _amount );
}
/**
@notice allow approved address to withdraw assets
@param _token address
@param _amount uint
*/
function manage( address _token, uint _amount ) external {
if( isLiquidityToken[ _token ] ) {
require( isLiquidityManager[ msg.sender ], "Not approved" );
} else {
require( isReserveManager[ msg.sender ], "Not approved" );
}
uint value = valueOf(_token, _amount);
require( value <= excessReserves(), "Insufficient reserves" );
totalReserves = totalReserves.sub( value );
emit ReservesUpdated( totalReserves );
IERC20( _token ).safeTransfer( msg.sender, _amount );
emit ReservesManaged( _token, _amount );
}
/**
@notice send epoch reward to staking contract
*/
function mintRewards( address _recipient, uint _amount ) external {
require( isRewardManager[ msg.sender ], "Not approved" );
require( _amount <= excessReserves(), "Insufficient reserves" );
IERC20Mintable( Frynx ).mint( _recipient, _amount );
emit RewardsMinted( msg.sender, _recipient, _amount );
}
/**
@notice returns excess reserves not backing tokens
@return uint
*/
function excessReserves() public view returns ( uint ) {
return totalReserves.sub( IERC20( Frynx ).totalSupply().sub( totalDebt ) );
}
/**
@notice takes inventory of all tracked assets
@notice always consolidate to recognized reserves before audit
*/
function auditReserves() external onlyManager() {
uint reserves;
for( uint i = 0; i < reserveTokens.length; i++ ) {
reserves = reserves.add (
valueOf( reserveTokens[ i ], IERC20( reserveTokens[ i ] ).balanceOf( address(this) ) )
);
}
for( uint i = 0; i < liquidityTokens.length; i++ ) {
reserves = reserves.add (
valueOf( liquidityTokens[ i ], IERC20( liquidityTokens[ i ] ).balanceOf( address(this) ) )
);
}
totalReserves = reserves;
emit ReservesUpdated( reserves );
emit ReservesAudited( reserves );
}
/**
@notice returns ETH valuation of asset
@param _token address
@param _amount uint
@return value_ uint
*/
function valueOf( address _token, uint _amount ) public view returns ( uint value_ ) {
if ( isReserveToken[ _token ] ) {
// convert amount to match ETH decimals
value_ = _amount.mul( 10 ** IERC20( Frynx ).decimals() ).div( 10 ** IERC20( _token ).decimals() );
} else if ( isLiquidityToken[ _token ] ) {
value_ = IBondCalculator( bondCalculator[ _token ] ).valuation( _token, _amount );
}
}
/**
@notice queue address to change boolean in mapping
@param _managing MANAGING
@param _address address
@return bool
*/
function queue( MANAGING _managing, address _address ) external onlyManager() returns ( bool ) {
require( _address != address(0) );
if ( _managing == MANAGING.RESERVEDEPOSITOR ) { // 0
reserveDepositorQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
} else if ( _managing == MANAGING.RESERVESPENDER ) { // 1
reserveSpenderQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
} else if ( _managing == MANAGING.RESERVETOKEN ) { // 2
reserveTokenQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
} else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3
ReserveManagerQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue.mul32( 2 ) );
} else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4
LiquidityDepositorQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
} else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5
LiquidityTokenQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
} else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6
LiquidityManagerQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue.mul32( 2 ) );
} else if ( _managing == MANAGING.DEBTOR ) { // 7
debtorQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
} else if ( _managing == MANAGING.REWARDMANAGER ) { // 8
rewardManagerQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
} else if ( _managing == MANAGING.SETH ) { // 9
sETHQueue = uint32(block.timestamp).add32( secondsNeededForQueue );
} else return false;
emit ChangeQueued( _managing, _address );
return true;
}
/**
@notice verify queue then set boolean in mapping
@param _managing MANAGING
@param _address address
@param _calculator address
@return bool
*/
function toggle(
MANAGING _managing,
address _address,
address _calculator
) external onlyManager() returns ( bool ) {
require( _address != address(0) );
bool result;
if ( _managing == MANAGING.RESERVEDEPOSITOR ) { // 0
if ( requirements( reserveDepositorQueue, isReserveDepositor, _address ) ) {
reserveDepositorQueue[ _address ] = 0;
if( !listContains( reserveDepositors, _address ) ) {
reserveDepositors.push( _address );
}
}
result = !isReserveDepositor[ _address ];
isReserveDepositor[ _address ] = result;
} else if ( _managing == MANAGING.RESERVESPENDER ) { // 1
if ( requirements( reserveSpenderQueue, isReserveSpender, _address ) ) {
reserveSpenderQueue[ _address ] = 0;
if( !listContains( reserveSpenders, _address ) ) {
reserveSpenders.push( _address );
}
}
result = !isReserveSpender[ _address ];
isReserveSpender[ _address ] = result;
} else if ( _managing == MANAGING.RESERVETOKEN ) { // 2
if ( requirements( reserveTokenQueue, isReserveToken, _address ) ) {
reserveTokenQueue[ _address ] = 0;
if( !listContains( reserveTokens, _address ) ) {
reserveTokens.push( _address );
}
}
result = !isReserveToken[ _address ];
isReserveToken[ _address ] = result;
} else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3
if ( requirements( ReserveManagerQueue, isReserveManager, _address ) ) {
reserveManagers.push( _address );
ReserveManagerQueue[ _address ] = 0;
if( !listContains( reserveManagers, _address ) ) {
reserveManagers.push( _address );
}
}
result = !isReserveManager[ _address ];
isReserveManager[ _address ] = result;
} else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4
if ( requirements( LiquidityDepositorQueue, isLiquidityDepositor, _address ) ) {
liquidityDepositors.push( _address );
LiquidityDepositorQueue[ _address ] = 0;
if( !listContains( liquidityDepositors, _address ) ) {
liquidityDepositors.push( _address );
}
}
result = !isLiquidityDepositor[ _address ];
isLiquidityDepositor[ _address ] = result;
} else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5
if ( requirements( LiquidityTokenQueue, isLiquidityToken, _address ) ) {
LiquidityTokenQueue[ _address ] = 0;
if( !listContains( liquidityTokens, _address ) ) {
liquidityTokens.push( _address );
}
}
result = !isLiquidityToken[ _address ];
isLiquidityToken[ _address ] = result;
bondCalculator[ _address ] = _calculator;
} else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6
if ( requirements( LiquidityManagerQueue, isLiquidityManager, _address ) ) {
LiquidityManagerQueue[ _address ] = 0;
if( !listContains( liquidityManagers, _address ) ) {
liquidityManagers.push( _address );
}
}
result = !isLiquidityManager[ _address ];
isLiquidityManager[ _address ] = result;
} else if ( _managing == MANAGING.DEBTOR ) { // 7
if ( requirements( debtorQueue, isDebtor, _address ) ) {
debtorQueue[ _address ] = 0;
if( !listContains( debtors, _address ) ) {
debtors.push( _address );
}
}
result = !isDebtor[ _address ];
isDebtor[ _address ] = result;
} else if ( _managing == MANAGING.REWARDMANAGER ) { // 8
if ( requirements( rewardManagerQueue, isRewardManager, _address ) ) {
rewardManagerQueue[ _address ] = 0;
if( !listContains( rewardManagers, _address ) ) {
rewardManagers.push( _address );
}
}
result = !isRewardManager[ _address ];
isRewardManager[ _address ] = result;
} else if ( _managing == MANAGING.SETH ) { // 9
sETHQueue = 0;
sFrynx = _address;
result = true;
} else return false;
emit ChangeActivated( _managing, _address, result );
return true;
}
/**
@notice checks requirements and returns altered structs
@param queue_ mapping( address => uint )
@param status_ mapping( address => bool )
@param _address address
@return bool
*/
function requirements(
mapping( address => uint32 ) storage queue_,
mapping( address => bool ) storage status_,
address _address
) internal view returns ( bool ) {
if ( !status_[ _address ] ) {
require( queue_[ _address ] != 0, "Must queue" );
require( queue_[ _address ] <= uint32(block.timestamp), "Queue not expired" );
return true;
} return false;
}
/**
@notice checks array to ensure against duplicate
@param _list address[]
@param _token address
@return bool
*/
function listContains( address[] storage _list, address _token ) internal view returns ( bool ) {
for( uint i = 0; i < _list.length; i++ ) {
if( _list[ i ] == _token ) {
return true;
}
}
return false;
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_Frynx","type":"address"},{"internalType":"address","name":"_ETH","type":"address"},{"internalType":"uint32","name":"_secondsNeededForQueue","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum Treasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"activated","type":"address"},{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"ChangeActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum Treasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"queued","type":"address"}],"name":"ChangeQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"CreateDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RepayDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesAudited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReservesManaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"Frynx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityDepositorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityTokenQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ReserveManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auditReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bondCalculator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"debtors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_profit","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"send_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"excessReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"incurDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDebtor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveSpender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRewardManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Treasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"}],"name":"queue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"repayDebtWithETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"repayDebtWithReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveDepositorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveSpenderQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveSpenders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveTokenQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sETHQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sFrynx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondsNeededForQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum Treasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_calculator","type":"address"}],"name":"toggle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"valueOf","outputs":[{"internalType":"uint256","name":"value_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c060405234801561001057600080fd5b50604051620038de380380620038de8339818101604052606081101561003557600080fd5b5080516020820151604092830151600080546001600160a01b031916331780825594519394929391926001600160a01b0316917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b0383166100a057600080fd5b6001600160601b0319606084901b166080526001600160a01b039182166000818152600360205260408120805460ff1916600190811790915560028054918201815582527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319169092179091556001600160e01b031960e083901b1660a052919092169163ffffffff169061373590620001a9903980611a8a528061205a52806120d7528061215452806121d0528061226252806122df528061235b52806123dd528061245a52806124d7525080610a4e5280610df0528061124652806115cd5280611681528061195b5280611a4e5280611cfd52506137356000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c80637a8960d81161019d578063c24ad43e116100e9578063ebd83cd8116100a2578063fbfd393b1161007c578063fbfd393b14610908578063fc7b9c181461093f578063fd1ec01014610947578063fff9ee8714610964576102f0565b8063ebd83cd814610896578063ee4e19a1146108bc578063fb939588146108e2576102f0565b8063c24ad43e146107ac578063cd85641a146107d2578063d031370b146107f8578063d796ffb814610815578063df89b34414610841578063e83afee314610867576102f0565b8063932cc8c311610156578063ab319c9a11610130578063ab319c9a14610711578063b1bd38b014610737578063b5b1d5601461075d578063bc157ac11461077a576102f0565b8063932cc8c31461069f578063a1210a2d146106c5578063a569e571146106eb576102f0565b80637a8960d814610609578063869871bf1461061157806387d67dff1461062e5780638f59c727146106545780638f6a7b571461067a5780638f840ddd14610697576102f0565b80632b7ce5001161025c5780635a96ac0a116102155780636b5e40a7116101ef5780636b5e40a71461058857806370a0502a146105a557806373bd5dd1146105c2578063788c6c01146105ca576102f0565b80635a96ac0a1461052e57806368c31dd5146105365780636a20de921461055c576102f0565b80632b7ce5001461049857806342adfda3146104a0578063437f7912146104bd57806346f68ee9146104da578063481c6a75146105005780634e83423c14610508576102f0565b8063124154ca116102ae578063124154ca146103d057806312422d231461040a5780631a91113a146104365780631af4da701461043e5780631eec5a9a1461046457806325a843ed14610490576102f0565b8062f714ce146102f55780630619aff114610323578063089208d81461035c578063094a8651146103645780630b0eee301461039c5780630c3513a8146103c8575b600080fd5b6103216004803603604081101561030b57600080fd5b50803590602001356001600160a01b031661098a565b005b6103406004803603602081101561033957600080fd5b5035610b61565b604080516001600160a01b039092168252519081900360200190f35b610321610b8b565b61038a6004803603602081101561037a57600080fd5b50356001600160a01b0316610c22565b60408051918252519081900360200190f35b610321600480360360408110156103b257600080fd5b506001600160a01b038135169060200135610c34565b61038a610de3565b6103f6600480360360208110156103e657600080fd5b50356001600160a01b0316610e87565b604080519115158252519081900360200190f35b6103216004803603604081101561042057600080fd5b50803590602001356001600160a01b0316610e9c565b61034061116c565b6103406004803603602081101561045457600080fd5b50356001600160a01b031661117b565b61038a6004803603604081101561047a57600080fd5b506001600160a01b038135169060200135611196565b61038a61138a565b610321611390565b610321600480360360208110156104b657600080fd5b5035611553565b610340600480360360208110156104d357600080fd5b50356116d2565b610321600480360360208110156104f057600080fd5b50356001600160a01b03166116e2565b6103406117cf565b6103f66004803603602081101561051e57600080fd5b50356001600160a01b03166117de565b6103216117f3565b6103f66004803603602081101561054c57600080fd5b50356001600160a01b031661189d565b6103216004803603604081101561057257600080fd5b506001600160a01b0381351690602001356118b2565b6103406004803603602081101561059e57600080fd5b5035611a2c565b610340600480360360208110156105bb57600080fd5b5035611a3c565b610340611a4c565b6105f0600480360360208110156105e057600080fd5b50356001600160a01b0316611a70565b6040805163ffffffff9092168252519081900360200190f35b6105f0611a88565b6103406004803603602081101561062757600080fd5b5035611aac565b6103f66004803603602081101561064457600080fd5b50356001600160a01b0316611abc565b6105f06004803603602081101561066a57600080fd5b50356001600160a01b0316611ad1565b6103406004803603602081101561069057600080fd5b5035611ae9565b61038a611af9565b6105f0600480360360208110156106b557600080fd5b50356001600160a01b0316611aff565b6103f6600480360360208110156106db57600080fd5b50356001600160a01b0316611b17565b6103f66004803603602081101561070157600080fd5b50356001600160a01b0316611b2c565b6105f06004803603602081101561072757600080fd5b50356001600160a01b0316611b41565b6105f06004803603602081101561074d57600080fd5b50356001600160a01b0316611b59565b6103406004803603602081101561077357600080fd5b5035611b71565b61038a6004803603606081101561079057600080fd5b508035906001600160a01b036020820135169060400135611b81565b6105f0600480360360208110156107c257600080fd5b50356001600160a01b0316611dff565b6105f0600480360360208110156107e857600080fd5b50356001600160a01b0316611e17565b6103406004803603602081101561080e57600080fd5b5035611e2f565b6103216004803603604081101561082b57600080fd5b50803590602001356001600160a01b0316611e3f565b6103f66004803603602081101561085757600080fd5b50356001600160a01b0316611fc2565b6103f66004803603604081101561087d57600080fd5b50803560ff1690602001356001600160a01b0316611fd7565b6103f6600480360360208110156108ac57600080fd5b50356001600160a01b0316612564565b6103f6600480360360208110156108d257600080fd5b50356001600160a01b0316612579565b6105f0600480360360208110156108f857600080fd5b50356001600160a01b031661258e565b6103f66004803603606081101561091e57600080fd5b5060ff813516906001600160a01b03602082013581169160400135166125a6565b61038a612ebc565b6103406004803603602081101561095d57600080fd5b5035612ec2565b6105f06004803603602081101561097a57600080fd5b50356001600160a01b0316612ed2565b6001600160a01b03811660009081526003602052604090205460ff166109e6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b3360009081526009602052604090205460ff161515600114610a3e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610a4a8284611196565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610ac357600080fd5b505af1158015610ad7573d6000803e3d6000fd5b5050602154610ae99250905082612eea565b60218190556040516000805160206136b683398151915290600090a2610b196001600160a01b0383163385612f2c565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60128181548110610b7157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610bd8576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601b6020526000908152604090205481565b6001600160a01b0382166000908152600c602052604090205460ff1615610cad573360009081526016602052604090205460ff16610ca8576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b610d00565b3360009081526013602052604090205460ff16610d00576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610d0c8383611196565b9050610d16610de3565b811115610d62576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b602154610d6f9082612eea565b60218190556040516000805160206136b683398151915290600090a2610d9f6001600160a01b0384163384612f2c565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000610e82610e796022547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e4757600080fd5b505afa158015610e5b573d6000803e3d6000fd5b505050506040513d6020811015610e7157600080fd5b505190612eea565b60215490612eea565b905090565b60066020526000908152604090205460ff1681565b3360009081526019602052604090205460ff16610eef576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16610f4b576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b6000610f578284611196565b601f54604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610fa857600080fd5b505afa158015610fbc573d6000803e3d6000fd5b505050506040513d6020811015610fd257600080fd5b5051336000908152601b602052604081205491925090610ff3908390612eea565b90508083111561103f576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601b60205260409020546110599084612f83565b336000908152601b60205260409020556022546110769084612f83565b6022556021546110869084612eea565b60218190556040516000805160206136b683398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b1580156110f157600080fd5b505af1158015611105573d6000803e3d6000fd5b505050506040513d602081101561111b57600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b601f546001600160a01b031681565b6011602052600090815260409020546001600160a01b031681565b6001600160a01b03821660009081526003602052604081205460ff16156112d3576112cc836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156111f357600080fd5b505afa158015611207573d6000803e3d6000fd5b505050506040513d602081101561121d57600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a916112c6916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163313ce56791600480820192602092909190829003018186803b15801561128d57600080fd5b505afa1580156112a1573d6000803e3d6000fd5b505050506040513d60208110156112b757600080fd5b5051859060ff16600a0a612fdd565b90613036565b9050611384565b6001600160a01b0383166000908152600c602052604090205460ff1615611384576001600160a01b03808416600081815260116020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b15801561135557600080fd5b505afa158015611369573d6000803e3d6000fd5b505050506040513d602081101561137f57600080fd5b505190505b92915050565b60205481565b6000546001600160a01b031633146113dd576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b6000805b6002548110156114b5576114ab6114a4600283815481106113fe57fe5b600091825260209091200154600280546001600160a01b03909216918590811061142457fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561147357600080fd5b505afa158015611487573d6000803e3d6000fd5b505050506040513d602081101561149d57600080fd5b5051611196565b8390612f83565b91506001016113e1565b5060005b600b54811015611506576114fc6114a4600b83815481106114d657fe5b600091825260209091200154600b80546001600160a01b03909216918590811061142457fe5b91506001016114b9565b50602181905560405181906000805160206136b683398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b3360009081526019602052604090205460ff166115a6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916379cc679091604480830192600092919082900301818387803b15801561161457600080fd5b505af1158015611628573d6000803e3d6000fd5b5050336000908152601b60205260409020546116479250905082612eea565b336000908152601b60205260409020556022546116649082612eea565b602255604080518281526020810183905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60088181548110610b7157600080fd5b6000546001600160a01b0316331461172f576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b6001600160a01b0381166117745760405162461bcd60e51b815260040180806020018281038252602681526020018061362d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601d6020526000908152604090205460ff1681565b6001546001600160a01b0316331461183c5760405162461bcd60e51b81526004018080602001828103825260228152602001806136536022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60036020526000908152604090205460ff1681565b336000908152601d602052604090205460ff16611905576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b61190d610de3565b811115611959576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156119d057600080fd5b505af11580156119e4573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60058181548110610b7157600080fd5b60158181548110610b7157600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b60046020526000908152604090205463ffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60188181548110610b7157600080fd5b60096020526000908152604090205460ff1681565b600d6020526000908152604090205463ffffffff1681565b600e8181548110610b7157600080fd5b60215481565b60076020526000908152604090205463ffffffff1681565b600f6020526000908152604090205460ff1681565b600c6020526000908152604090205460ff1681565b60176020526000908152604090205463ffffffff1681565b60146020526000908152604090205463ffffffff1681565b601c8181548110610b7157600080fd5b6001600160a01b03821660009081526003602052604081205460ff1680611bc057506001600160a01b0383166000908152600c602052604090205460ff165b611c00576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611c156001600160a01b038416333087613078565b6001600160a01b03831660009081526003602052604090205460ff1615611c8e573360009081526006602052604090205460ff16611c89576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611ce1565b336000908152600f602052604090205460ff16611ce1576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000611ced8486611196565b9050611cf98184612eea565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b5050602154611d989250905082612f83565b60218190556040516000805160206136b683398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b600a6020526000908152604090205463ffffffff1681565b601a6020526000908152604090205463ffffffff1681565b60028181548110610b7157600080fd5b3360009081526019602052604090205460ff16611e92576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16611eee576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611f036001600160a01b038216333085613078565b6000611f0f8284611196565b336000908152601b6020526040902054909150611f2c9082612eea565b336000908152601b6020526040902055602254611f499082612eea565b602255602154611f599082612f83565b60218190556040516000805160206136b683398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b60166020526000908152604090205460ff1681565b600080546001600160a01b03163314612025576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b6001600160a01b03821661203857600080fd5b600083600981111561204657fe5b14156120b55761208063ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055612513565b60018360098111156120c357fe5b1415612132576120fd63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055612513565b600283600981111561214057fe5b14156121af5761217a63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152600460205260409020805463ffffffff191663ffffffff92909216919091179055612513565b60038360098111156121bd57fe5b14156122405761220b6121fb63ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169060029061313b16565b63ffffffff42811691906130d816565b6001600160a01b0383166000908152601460205260409020805463ffffffff191663ffffffff92909216919091179055612513565b600483600981111561224e57fe5b14156122bd5761228863ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152601060205260409020805463ffffffff191663ffffffff92909216919091179055612513565b60058360098111156122cb57fe5b141561233a5761230563ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152600d60205260409020805463ffffffff191663ffffffff92909216919091179055612513565b600683600981111561234857fe5b14156123bb576123866121fb63ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169060029061313b16565b6001600160a01b0383166000908152601760205260409020805463ffffffff191663ffffffff92909216919091179055612513565b60078360098111156123c957fe5b14156124385761240363ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152601a60205260409020805463ffffffff191663ffffffff92909216919091179055612513565b600883600981111561244657fe5b14156124b55761248063ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152601e60205260409020805463ffffffff191663ffffffff92909216919091179055612513565b60098360098111156124c357fe5b141561250b576124fd63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b63ffffffff16602055612513565b506000611384565b82600981111561251f57fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b60136020526000908152604090205460ff1681565b60196020526000908152604090205460ff1681565b601e6020526000908152604090205463ffffffff1681565b600080546001600160a01b031633146125f4576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b6001600160a01b03831661260757600080fd5b60008085600981111561261657fe5b14156126dc5761262960076006866131ac565b156126ac576001600160a01b0384166000908152600760205260409020805463ffffffff1916905561265c6005856132a5565b6126ac57600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600660205260409020805460ff81161560ff199091168117909155612e5e565b60018560098111156126ea57fe5b14156127b0576126fd600a6009866131ac565b15612780576001600160a01b0384166000908152600a60205260409020805463ffffffff191690556127306008856132a5565b61278057600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600960205260409020805460ff81161560ff199091168117909155612e5e565b60028560098111156127be57fe5b1415612884576127d160046003866131ac565b15612854576001600160a01b0384166000908152600460205260409020805463ffffffff191690556128046002856132a5565b61285457600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600360205260409020805460ff81161560ff199091168117909155612e5e565b600385600981111561289257fe5b1415612995576128a560146013866131ac565b1561296557601280546001810182557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0387169081179091556000908152601460205260409020805463ffffffff1916905561291590856132a5565b61296557601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601360205260409020805460ff81161560ff199091168117909155612e5e565b60048560098111156129a357fe5b1415612aa6576129b66010600f866131ac565b15612a7657600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0387169081179091556000908152601060205260409020805463ffffffff19169055612a2690856132a5565b612a7657600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600f60205260409020805460ff81161560ff199091168117909155612e5e565b6005856009811115612ab457fe5b1415612b9c57612ac7600d600c866131ac565b15612b4a576001600160a01b0384166000908152600d60205260409020805463ffffffff19169055612afa600b856132a5565b612b4a57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600c60209081526040808320805460ff81161560ff199091168117909155601190925290912080546001600160a01b03191692851692909217909155612e5e565b6006856009811115612baa57fe5b1415612c7057612bbd60176016866131ac565b15612c40576001600160a01b0384166000908152601760205260409020805463ffffffff19169055612bf06015856132a5565b612c4057601580546001810182556000919091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601660205260409020805460ff81161560ff199091168117909155612e5e565b6007856009811115612c7e57fe5b1415612d4457612c91601a6019866131ac565b15612d14576001600160a01b0384166000908152601a60205260409020805463ffffffff19169055612cc46018856132a5565b612d1457601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601960205260409020805460ff81161560ff199091168117909155612e5e565b6008856009811115612d5257fe5b1415612e1857612d65601e601d866131ac565b15612de8576001600160a01b0384166000908152601e60205260409020805463ffffffff19169055612d98601c856132a5565b612de857601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601d60205260409020805460ff81161560ff199091168117909155612e5e565b6009856009811115612e2657fe5b1415612e5457506000602055601f80546001600160a01b0319166001600160a01b0385161790556001612e5e565b6000915050612eb5565b846009811115612e6a57fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60225481565b600b8181548110610b7157600080fd5b60106020526000908152604090205463ffffffff1681565b6000612eb583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132f5565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612f7e90849061338c565b505050565b600082820183811015612eb5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612fec57506000611384565b82820282848281612ff957fe5b0414612eb55760405162461bcd60e51b81526004018080602001828103825260218152602001806136756021913960400191505060405180910390fd5b6000612eb583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061343d565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526130d290859061338c565b50505050565b600082820163ffffffff8085169082161015612eb5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600063ffffffff831661315057506000611384565b82820263ffffffff808416908086169083168161316957fe5b0463ffffffff1614612eb55760405162461bcd60e51b81526004018080602001828103825260218152602001806136756021913960400191505060405180910390fd5b6001600160a01b03811660009081526020839052604081205460ff1661329b576001600160a01b03821660009081526020859052604090205463ffffffff16613229576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b03821660009081526020859052604090205463ffffffff42811691161115613293576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b506001612eb5565b5060009392505050565b6000805b835481101561329b57826001600160a01b03168482815481106132c857fe5b6000918252602090912001546001600160a01b031614156132ed576001915050611384565b6001016132a9565b600081848411156133845760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613349578181015183820152602001613331565b50505050905090810190601f1680156133765780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60606133e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166134a29092919063ffffffff16565b805190915015612f7e5780806020019051602081101561340057600080fd5b5051612f7e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806136d6602a913960400191505060405180910390fd5b6000818361348c5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613349578181015183820152602001613331565b50600083858161349857fe5b0495945050505050565b60606134b184846000856134b9565b949350505050565b60606134c485613626565b613515576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106135545780518252601f199092019160209182019101613535565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146135b6576040519150601f19603f3d011682016040523d82523d6000602084013e6135bb565b606091505b509150915081156135cf5791506134b19050565b8051156135df5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315613349578181015183820152602001613331565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212203c6aab18ab94dd2e35a1bb256ca0d6dfe4cde2e440aaa06a4ee36e33b577ea7d64736f6c63430007050033000000000000000000000000c1bcc4add44bf89ce522fcef48e9878ae1f32dd8000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102f05760003560e01c80637a8960d81161019d578063c24ad43e116100e9578063ebd83cd8116100a2578063fbfd393b1161007c578063fbfd393b14610908578063fc7b9c181461093f578063fd1ec01014610947578063fff9ee8714610964576102f0565b8063ebd83cd814610896578063ee4e19a1146108bc578063fb939588146108e2576102f0565b8063c24ad43e146107ac578063cd85641a146107d2578063d031370b146107f8578063d796ffb814610815578063df89b34414610841578063e83afee314610867576102f0565b8063932cc8c311610156578063ab319c9a11610130578063ab319c9a14610711578063b1bd38b014610737578063b5b1d5601461075d578063bc157ac11461077a576102f0565b8063932cc8c31461069f578063a1210a2d146106c5578063a569e571146106eb576102f0565b80637a8960d814610609578063869871bf1461061157806387d67dff1461062e5780638f59c727146106545780638f6a7b571461067a5780638f840ddd14610697576102f0565b80632b7ce5001161025c5780635a96ac0a116102155780636b5e40a7116101ef5780636b5e40a71461058857806370a0502a146105a557806373bd5dd1146105c2578063788c6c01146105ca576102f0565b80635a96ac0a1461052e57806368c31dd5146105365780636a20de921461055c576102f0565b80632b7ce5001461049857806342adfda3146104a0578063437f7912146104bd57806346f68ee9146104da578063481c6a75146105005780634e83423c14610508576102f0565b8063124154ca116102ae578063124154ca146103d057806312422d231461040a5780631a91113a146104365780631af4da701461043e5780631eec5a9a1461046457806325a843ed14610490576102f0565b8062f714ce146102f55780630619aff114610323578063089208d81461035c578063094a8651146103645780630b0eee301461039c5780630c3513a8146103c8575b600080fd5b6103216004803603604081101561030b57600080fd5b50803590602001356001600160a01b031661098a565b005b6103406004803603602081101561033957600080fd5b5035610b61565b604080516001600160a01b039092168252519081900360200190f35b610321610b8b565b61038a6004803603602081101561037a57600080fd5b50356001600160a01b0316610c22565b60408051918252519081900360200190f35b610321600480360360408110156103b257600080fd5b506001600160a01b038135169060200135610c34565b61038a610de3565b6103f6600480360360208110156103e657600080fd5b50356001600160a01b0316610e87565b604080519115158252519081900360200190f35b6103216004803603604081101561042057600080fd5b50803590602001356001600160a01b0316610e9c565b61034061116c565b6103406004803603602081101561045457600080fd5b50356001600160a01b031661117b565b61038a6004803603604081101561047a57600080fd5b506001600160a01b038135169060200135611196565b61038a61138a565b610321611390565b610321600480360360208110156104b657600080fd5b5035611553565b610340600480360360208110156104d357600080fd5b50356116d2565b610321600480360360208110156104f057600080fd5b50356001600160a01b03166116e2565b6103406117cf565b6103f66004803603602081101561051e57600080fd5b50356001600160a01b03166117de565b6103216117f3565b6103f66004803603602081101561054c57600080fd5b50356001600160a01b031661189d565b6103216004803603604081101561057257600080fd5b506001600160a01b0381351690602001356118b2565b6103406004803603602081101561059e57600080fd5b5035611a2c565b610340600480360360208110156105bb57600080fd5b5035611a3c565b610340611a4c565b6105f0600480360360208110156105e057600080fd5b50356001600160a01b0316611a70565b6040805163ffffffff9092168252519081900360200190f35b6105f0611a88565b6103406004803603602081101561062757600080fd5b5035611aac565b6103f66004803603602081101561064457600080fd5b50356001600160a01b0316611abc565b6105f06004803603602081101561066a57600080fd5b50356001600160a01b0316611ad1565b6103406004803603602081101561069057600080fd5b5035611ae9565b61038a611af9565b6105f0600480360360208110156106b557600080fd5b50356001600160a01b0316611aff565b6103f6600480360360208110156106db57600080fd5b50356001600160a01b0316611b17565b6103f66004803603602081101561070157600080fd5b50356001600160a01b0316611b2c565b6105f06004803603602081101561072757600080fd5b50356001600160a01b0316611b41565b6105f06004803603602081101561074d57600080fd5b50356001600160a01b0316611b59565b6103406004803603602081101561077357600080fd5b5035611b71565b61038a6004803603606081101561079057600080fd5b508035906001600160a01b036020820135169060400135611b81565b6105f0600480360360208110156107c257600080fd5b50356001600160a01b0316611dff565b6105f0600480360360208110156107e857600080fd5b50356001600160a01b0316611e17565b6103406004803603602081101561080e57600080fd5b5035611e2f565b6103216004803603604081101561082b57600080fd5b50803590602001356001600160a01b0316611e3f565b6103f66004803603602081101561085757600080fd5b50356001600160a01b0316611fc2565b6103f66004803603604081101561087d57600080fd5b50803560ff1690602001356001600160a01b0316611fd7565b6103f6600480360360208110156108ac57600080fd5b50356001600160a01b0316612564565b6103f6600480360360208110156108d257600080fd5b50356001600160a01b0316612579565b6105f0600480360360208110156108f857600080fd5b50356001600160a01b031661258e565b6103f66004803603606081101561091e57600080fd5b5060ff813516906001600160a01b03602082013581169160400135166125a6565b61038a612ebc565b6103406004803603602081101561095d57600080fd5b5035612ec2565b6105f06004803603602081101561097a57600080fd5b50356001600160a01b0316612ed2565b6001600160a01b03811660009081526003602052604090205460ff166109e6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b3360009081526009602052604090205460ff161515600114610a3e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610a4a8284611196565b90507f000000000000000000000000c1bcc4add44bf89ce522fcef48e9878ae1f32dd86001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610ac357600080fd5b505af1158015610ad7573d6000803e3d6000fd5b5050602154610ae99250905082612eea565b60218190556040516000805160206136b683398151915290600090a2610b196001600160a01b0383163385612f2c565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60128181548110610b7157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610bd8576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601b6020526000908152604090205481565b6001600160a01b0382166000908152600c602052604090205460ff1615610cad573360009081526016602052604090205460ff16610ca8576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b610d00565b3360009081526013602052604090205460ff16610d00576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610d0c8383611196565b9050610d16610de3565b811115610d62576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b602154610d6f9082612eea565b60218190556040516000805160206136b683398151915290600090a2610d9f6001600160a01b0384163384612f2c565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000610e82610e796022547f000000000000000000000000c1bcc4add44bf89ce522fcef48e9878ae1f32dd86001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e4757600080fd5b505afa158015610e5b573d6000803e3d6000fd5b505050506040513d6020811015610e7157600080fd5b505190612eea565b60215490612eea565b905090565b60066020526000908152604090205460ff1681565b3360009081526019602052604090205460ff16610eef576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16610f4b576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b6000610f578284611196565b601f54604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610fa857600080fd5b505afa158015610fbc573d6000803e3d6000fd5b505050506040513d6020811015610fd257600080fd5b5051336000908152601b602052604081205491925090610ff3908390612eea565b90508083111561103f576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601b60205260409020546110599084612f83565b336000908152601b60205260409020556022546110769084612f83565b6022556021546110869084612eea565b60218190556040516000805160206136b683398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b1580156110f157600080fd5b505af1158015611105573d6000803e3d6000fd5b505050506040513d602081101561111b57600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b601f546001600160a01b031681565b6011602052600090815260409020546001600160a01b031681565b6001600160a01b03821660009081526003602052604081205460ff16156112d3576112cc836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156111f357600080fd5b505afa158015611207573d6000803e3d6000fd5b505050506040513d602081101561121d57600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a916112c6916001600160a01b037f000000000000000000000000c1bcc4add44bf89ce522fcef48e9878ae1f32dd8169163313ce56791600480820192602092909190829003018186803b15801561128d57600080fd5b505afa1580156112a1573d6000803e3d6000fd5b505050506040513d60208110156112b757600080fd5b5051859060ff16600a0a612fdd565b90613036565b9050611384565b6001600160a01b0383166000908152600c602052604090205460ff1615611384576001600160a01b03808416600081815260116020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b15801561135557600080fd5b505afa158015611369573d6000803e3d6000fd5b505050506040513d602081101561137f57600080fd5b505190505b92915050565b60205481565b6000546001600160a01b031633146113dd576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b6000805b6002548110156114b5576114ab6114a4600283815481106113fe57fe5b600091825260209091200154600280546001600160a01b03909216918590811061142457fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561147357600080fd5b505afa158015611487573d6000803e3d6000fd5b505050506040513d602081101561149d57600080fd5b5051611196565b8390612f83565b91506001016113e1565b5060005b600b54811015611506576114fc6114a4600b83815481106114d657fe5b600091825260209091200154600b80546001600160a01b03909216918590811061142457fe5b91506001016114b9565b50602181905560405181906000805160206136b683398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b3360009081526019602052604090205460ff166115a6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000c1bcc4add44bf89ce522fcef48e9878ae1f32dd816916379cc679091604480830192600092919082900301818387803b15801561161457600080fd5b505af1158015611628573d6000803e3d6000fd5b5050336000908152601b60205260409020546116479250905082612eea565b336000908152601b60205260409020556022546116649082612eea565b602255604080518281526020810183905281516001600160a01b037f000000000000000000000000c1bcc4add44bf89ce522fcef48e9878ae1f32dd8169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60088181548110610b7157600080fd5b6000546001600160a01b0316331461172f576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b6001600160a01b0381166117745760405162461bcd60e51b815260040180806020018281038252602681526020018061362d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601d6020526000908152604090205460ff1681565b6001546001600160a01b0316331461183c5760405162461bcd60e51b81526004018080602001828103825260228152602001806136536022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60036020526000908152604090205460ff1681565b336000908152601d602052604090205460ff16611905576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b61190d610de3565b811115611959576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f000000000000000000000000c1bcc4add44bf89ce522fcef48e9878ae1f32dd86001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156119d057600080fd5b505af11580156119e4573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60058181548110610b7157600080fd5b60158181548110610b7157600080fd5b7f000000000000000000000000c1bcc4add44bf89ce522fcef48e9878ae1f32dd881565b60046020526000908152604090205463ffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60188181548110610b7157600080fd5b60096020526000908152604090205460ff1681565b600d6020526000908152604090205463ffffffff1681565b600e8181548110610b7157600080fd5b60215481565b60076020526000908152604090205463ffffffff1681565b600f6020526000908152604090205460ff1681565b600c6020526000908152604090205460ff1681565b60176020526000908152604090205463ffffffff1681565b60146020526000908152604090205463ffffffff1681565b601c8181548110610b7157600080fd5b6001600160a01b03821660009081526003602052604081205460ff1680611bc057506001600160a01b0383166000908152600c602052604090205460ff165b611c00576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611c156001600160a01b038416333087613078565b6001600160a01b03831660009081526003602052604090205460ff1615611c8e573360009081526006602052604090205460ff16611c89576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611ce1565b336000908152600f602052604090205460ff16611ce1576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000611ced8486611196565b9050611cf98184612eea565b91507f000000000000000000000000c1bcc4add44bf89ce522fcef48e9878ae1f32dd86001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b5050602154611d989250905082612f83565b60218190556040516000805160206136b683398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b600a6020526000908152604090205463ffffffff1681565b601a6020526000908152604090205463ffffffff1681565b60028181548110610b7157600080fd5b3360009081526019602052604090205460ff16611e92576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16611eee576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611f036001600160a01b038216333085613078565b6000611f0f8284611196565b336000908152601b6020526040902054909150611f2c9082612eea565b336000908152601b6020526040902055602254611f499082612eea565b602255602154611f599082612f83565b60218190556040516000805160206136b683398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b60166020526000908152604090205460ff1681565b600080546001600160a01b03163314612025576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b6001600160a01b03821661203857600080fd5b600083600981111561204657fe5b14156120b55761208063ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055612513565b60018360098111156120c357fe5b1415612132576120fd63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055612513565b600283600981111561214057fe5b14156121af5761217a63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152600460205260409020805463ffffffff191663ffffffff92909216919091179055612513565b60038360098111156121bd57fe5b14156122405761220b6121fb63ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169060029061313b16565b63ffffffff42811691906130d816565b6001600160a01b0383166000908152601460205260409020805463ffffffff191663ffffffff92909216919091179055612513565b600483600981111561224e57fe5b14156122bd5761228863ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152601060205260409020805463ffffffff191663ffffffff92909216919091179055612513565b60058360098111156122cb57fe5b141561233a5761230563ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152600d60205260409020805463ffffffff191663ffffffff92909216919091179055612513565b600683600981111561234857fe5b14156123bb576123866121fb63ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169060029061313b16565b6001600160a01b0383166000908152601760205260409020805463ffffffff191663ffffffff92909216919091179055612513565b60078360098111156123c957fe5b14156124385761240363ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152601a60205260409020805463ffffffff191663ffffffff92909216919091179055612513565b600883600981111561244657fe5b14156124b55761248063ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152601e60205260409020805463ffffffff191663ffffffff92909216919091179055612513565b60098360098111156124c357fe5b141561250b576124fd63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b63ffffffff16602055612513565b506000611384565b82600981111561251f57fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b60136020526000908152604090205460ff1681565b60196020526000908152604090205460ff1681565b601e6020526000908152604090205463ffffffff1681565b600080546001600160a01b031633146125f4576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b6001600160a01b03831661260757600080fd5b60008085600981111561261657fe5b14156126dc5761262960076006866131ac565b156126ac576001600160a01b0384166000908152600760205260409020805463ffffffff1916905561265c6005856132a5565b6126ac57600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600660205260409020805460ff81161560ff199091168117909155612e5e565b60018560098111156126ea57fe5b14156127b0576126fd600a6009866131ac565b15612780576001600160a01b0384166000908152600a60205260409020805463ffffffff191690556127306008856132a5565b61278057600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600960205260409020805460ff81161560ff199091168117909155612e5e565b60028560098111156127be57fe5b1415612884576127d160046003866131ac565b15612854576001600160a01b0384166000908152600460205260409020805463ffffffff191690556128046002856132a5565b61285457600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600360205260409020805460ff81161560ff199091168117909155612e5e565b600385600981111561289257fe5b1415612995576128a560146013866131ac565b1561296557601280546001810182557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0387169081179091556000908152601460205260409020805463ffffffff1916905561291590856132a5565b61296557601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601360205260409020805460ff81161560ff199091168117909155612e5e565b60048560098111156129a357fe5b1415612aa6576129b66010600f866131ac565b15612a7657600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0387169081179091556000908152601060205260409020805463ffffffff19169055612a2690856132a5565b612a7657600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600f60205260409020805460ff81161560ff199091168117909155612e5e565b6005856009811115612ab457fe5b1415612b9c57612ac7600d600c866131ac565b15612b4a576001600160a01b0384166000908152600d60205260409020805463ffffffff19169055612afa600b856132a5565b612b4a57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600c60209081526040808320805460ff81161560ff199091168117909155601190925290912080546001600160a01b03191692851692909217909155612e5e565b6006856009811115612baa57fe5b1415612c7057612bbd60176016866131ac565b15612c40576001600160a01b0384166000908152601760205260409020805463ffffffff19169055612bf06015856132a5565b612c4057601580546001810182556000919091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601660205260409020805460ff81161560ff199091168117909155612e5e565b6007856009811115612c7e57fe5b1415612d4457612c91601a6019866131ac565b15612d14576001600160a01b0384166000908152601a60205260409020805463ffffffff19169055612cc46018856132a5565b612d1457601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601960205260409020805460ff81161560ff199091168117909155612e5e565b6008856009811115612d5257fe5b1415612e1857612d65601e601d866131ac565b15612de8576001600160a01b0384166000908152601e60205260409020805463ffffffff19169055612d98601c856132a5565b612de857601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601d60205260409020805460ff81161560ff199091168117909155612e5e565b6009856009811115612e2657fe5b1415612e5457506000602055601f80546001600160a01b0319166001600160a01b0385161790556001612e5e565b6000915050612eb5565b846009811115612e6a57fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60225481565b600b8181548110610b7157600080fd5b60106020526000908152604090205463ffffffff1681565b6000612eb583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132f5565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612f7e90849061338c565b505050565b600082820183811015612eb5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612fec57506000611384565b82820282848281612ff957fe5b0414612eb55760405162461bcd60e51b81526004018080602001828103825260218152602001806136756021913960400191505060405180910390fd5b6000612eb583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061343d565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526130d290859061338c565b50505050565b600082820163ffffffff8085169082161015612eb5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600063ffffffff831661315057506000611384565b82820263ffffffff808416908086169083168161316957fe5b0463ffffffff1614612eb55760405162461bcd60e51b81526004018080602001828103825260218152602001806136756021913960400191505060405180910390fd5b6001600160a01b03811660009081526020839052604081205460ff1661329b576001600160a01b03821660009081526020859052604090205463ffffffff16613229576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b03821660009081526020859052604090205463ffffffff42811691161115613293576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b506001612eb5565b5060009392505050565b6000805b835481101561329b57826001600160a01b03168482815481106132c857fe5b6000918252602090912001546001600160a01b031614156132ed576001915050611384565b6001016132a9565b600081848411156133845760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613349578181015183820152602001613331565b50505050905090810190601f1680156133765780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60606133e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166134a29092919063ffffffff16565b805190915015612f7e5780806020019051602081101561340057600080fd5b5051612f7e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806136d6602a913960400191505060405180910390fd5b6000818361348c5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613349578181015183820152602001613331565b50600083858161349857fe5b0495945050505050565b60606134b184846000856134b9565b949350505050565b60606134c485613626565b613515576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106135545780518252601f199092019160209182019101613535565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146135b6576040519150601f19603f3d011682016040523d82523d6000602084013e6135bb565b606091505b509150915081156135cf5791506134b19050565b8051156135df5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315613349578181015183820152602001613331565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212203c6aab18ab94dd2e35a1bb256ca0d6dfe4cde2e440aaa06a4ee36e33b577ea7d64736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c1bcc4add44bf89ce522fcef48e9878ae1f32dd8000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _Frynx (address): 0xc1BCC4aDd44bf89Ce522fCeF48e9878Ae1F32DD8
Arg [1] : _ETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [2] : _secondsNeededForQueue (uint32): 0
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c1bcc4add44bf89ce522fcef48e9878ae1f32dd8
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.