Latest 25 from a total of 33 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Audit Reserves | 14552128 | 1414 days ago | IN | 0 ETH | 0.00937306 | ||||
| Audit Reserves | 14335546 | 1448 days ago | IN | 0 ETH | 0.01199756 | ||||
| Audit Reserves | 14322940 | 1450 days ago | IN | 0 ETH | 0.01659778 | ||||
| Manage | 13866387 | 1520 days ago | IN | 0 ETH | 0.00442822 | ||||
| Push Management | 13857949 | 1522 days ago | IN | 0 ETH | 0.00417264 | ||||
| Toggle | 13851269 | 1523 days ago | IN | 0 ETH | 0.00891258 | ||||
| Queue | 13851263 | 1523 days ago | IN | 0 ETH | 0.00599252 | ||||
| Toggle | 13851152 | 1523 days ago | IN | 0 ETH | 0.00352725 | ||||
| Queue | 13851146 | 1523 days ago | IN | 0 ETH | 0.00456984 | ||||
| Toggle | 13851105 | 1523 days ago | IN | 0 ETH | 0.01055324 | ||||
| Queue | 13851101 | 1523 days ago | IN | 0 ETH | 0.00549295 | ||||
| Set Floor | 13849568 | 1523 days ago | IN | 0 ETH | 0.00253877 | ||||
| Toggle | 13849524 | 1523 days ago | IN | 0 ETH | 0.00883337 | ||||
| Queue | 13849518 | 1523 days ago | IN | 0 ETH | 0.00534311 | ||||
| Audit Reserves | 13843134 | 1524 days ago | IN | 0 ETH | 0.00763246 | ||||
| Manage | 13842879 | 1524 days ago | IN | 0 ETH | 0.00773359 | ||||
| Audit Reserves | 13842846 | 1524 days ago | IN | 0 ETH | 0.00793311 | ||||
| Manage | 13842696 | 1524 days ago | IN | 0 ETH | 0.00514689 | ||||
| Toggle | 13831082 | 1526 days ago | IN | 0 ETH | 0.00404709 | ||||
| Queue | 13831047 | 1526 days ago | IN | 0 ETH | 0.00240855 | ||||
| Audit Reserves | 13827781 | 1526 days ago | IN | 0 ETH | 0.00584051 | ||||
| Set Floor | 13827775 | 1526 days ago | IN | 0 ETH | 0.00216273 | ||||
| Toggle | 13827757 | 1526 days ago | IN | 0 ETH | 0.00427994 | ||||
| Queue | 13827750 | 1526 days ago | IN | 0 ETH | 0.00267082 | ||||
| Audit Reserves | 13827725 | 1526 days ago | IN | 0 ETH | 0.00469238 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
REDACTEDTreasury
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-12-17
*/
// 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 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 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 IBTRFLYERC20 {
function burnFrom(address account_, uint256 amount_) external;
}
interface IBondCalculator {
function valuation( address pair_, uint amount_ ) external view returns ( uint _value );
}
contract REDACTEDTreasury is Ownable {
using SafeMath for uint;
using SafeERC20 for IERC20;
event Deposit( address indexed token, uint amount, uint value );
event Simp( address indexed token, uint amount, address niceGuy);
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 );
event tokenValueSet(address token, uint value);
enum MANAGING { RESERVEDEPOSITOR, RESERVESPENDER, RESERVETOKEN, RESERVEMANAGER, LIQUIDITYDEPOSITOR, LIQUIDITYTOKEN, LIQUIDITYMANAGER, DEBTOR, REWARDMANAGER, SBTRFLY }
address public immutable BTRFLY;
uint public blocksNeededForQueue;
uint public immutable newBlocksNeededForQueue;
address[] public reserveTokens; // Push only, beware false-positives.
mapping( address => bool ) public isReserveToken;
mapping( address => uint ) public reserveTokenQueue; // Delays changes to mapping.
mapping( address => uint) public nativeFloorPrice; // With 9 decimals of precision
address[] public reserveDepositors; // Push only, beware false-positives. Only for viewing.
mapping( address => bool ) public isReserveDepositor;
mapping( address => uint ) public reserveDepositorQueue; // Delays changes to mapping.
address[] public reserveSpenders; // Push only, beware false-positives. Only for viewing.
mapping( address => bool ) public isReserveSpender;
mapping( address => uint ) public reserveSpenderQueue; // Delays changes to mapping.
address[] public liquidityTokens; // Push only, beware false-positives.
mapping( address => bool ) public isLiquidityToken;
mapping( address => uint ) public LiquidityTokenQueue; // Delays changes to mapping.
address[] public liquidityDepositors; // Push only, beware false-positives. Only for viewing.
mapping( address => bool ) public isLiquidityDepositor;
mapping( address => uint ) 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 => uint ) public ReserveManagerQueue; // Delays changes to mapping.
address[] public liquidityManagers; // Push only, beware false-positives. Only for viewing.
mapping( address => bool ) public isLiquidityManager;
mapping( address => uint ) public LiquidityManagerQueue; // Delays changes to mapping.
address[] public debtors; // Push only, beware false-positives. Only for viewing.
mapping( address => bool ) public isDebtor;
mapping( address => uint ) 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 => uint ) public rewardManagerQueue; // Delays changes to mapping.
address public sBTRFLY;
uint public sBTRFLYQueue; // Delays change to sBTRFLY address
uint public totalReserves; // Risk-free value of all assets
uint public totalDebt;
constructor (
address _BTRFLY,
address _OHM,
address _sOHM,
address _CVX,
address _CRV,
uint _OHMFloor,
uint _CVXFloor,
uint _CRVFloor,
uint _newBlocksNeededForQueue
) {
require( _BTRFLY != address(0) );
BTRFLY = _BTRFLY;
isReserveToken[ _OHM ] = true;
reserveTokens.push( _OHM );
nativeFloorPrice[ _OHM ] = _OHMFloor;
isReserveToken[ _sOHM ] = true;
reserveTokens.push( _sOHM );
nativeFloorPrice[ _OHM ] = _OHMFloor;
isReserveToken[ _CVX] = true;
reserveTokens.push( _CVX );
nativeFloorPrice[ _CVX ] = _CVXFloor;
isReserveToken[ _CRV] = true;
reserveTokens.push( _CRV );
nativeFloorPrice[ _CRV ] = _CRVFloor;
blocksNeededForQueue = 0;
newBlocksNeededForQueue = _newBlocksNeededForQueue;
}
function deactivateAndreMode() external onlyManager(){
blocksNeededForQueue = newBlocksNeededForQueue;
}
/**
@notice allow approved address to deposit an asset for BTRFLY
@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 BTRFLY needed and store amount of rewards for distribution
send_ = value.sub( _profit );
IERC20Mintable( BTRFLY ).mint( msg.sender, send_ );
totalReserves = totalReserves.add( value );
emit ReservesUpdated( totalReserves );
emit Deposit( _token, _amount, value );
}
function simp(uint _amount, address _token) external{
require( isReserveToken[ _token ] || isLiquidityToken[ _token ], "Not accepted" );
IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount );
uint value = valueOf(_token, _amount);
totalReserves = totalReserves.add( value );
emit ReservesUpdated( totalReserves );
emit Simp(_token,_amount,msg.sender);
}
/**
@notice allow approved address to burn BTRFLY 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 );
IBTRFLYERC20( BTRFLY ).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( sBTRFLY ).balanceOf( msg.sender ); // Can only borrow against sBTRFLY 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 BTRFLY
@param _amount uint
*/
function repayDebtWithBTRFLY( uint _amount ) external {
require( isDebtor[ msg.sender ], "Not approved" );
IBTRFLYERC20( BTRFLY ).burnFrom( msg.sender, _amount );
debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].sub( _amount );
totalDebt = totalDebt.sub( _amount );
emit RepayDebt( msg.sender, BTRFLY, _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( BTRFLY ).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( BTRFLY ).totalSupply().sub( totalDebt ) );
}
/**
@notice takes inventory of all tracked assets
@notice always consolidate to recognized reserves before audit
*/
function auditReserves() external {
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 BTRFLY 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 BTRFLY decimals and divide by number of tokens for 1 BTRFLY
value_ = _amount.mul( 10 ** IERC20( BTRFLY ).decimals() ).div( 10 ** IERC20( _token ).decimals() ).mul(10 ** 9).div(nativeFloorPrice[_token]);
} else if ( isLiquidityToken[ _token ] ) {
value_ = IBondCalculator( bondCalculator[ _token ] ).valuation( _token, _amount );
}
}
/**
@notice sets BTRFLY valuation of asset
@param _token address
@param _value uint
*/
function setFloor( address _token, uint _value ) external onlyManager() {
require(nativeFloorPrice[_token] == 0, "Token floor value can only be set once");
nativeFloorPrice[_token] = _value;
emit tokenValueSet(_token, _value);
}
function getFloor(address _token) external view returns(uint){
return nativeFloorPrice[_token];
}
/**
@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 ] = block.number.add( blocksNeededForQueue );
} else if ( _managing == MANAGING.RESERVESPENDER ) { // 1
reserveSpenderQueue[ _address ] = block.number.add( blocksNeededForQueue );
} else if ( _managing == MANAGING.RESERVETOKEN ) { // 2
reserveTokenQueue[ _address ] = block.number.add( blocksNeededForQueue );
} else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3
ReserveManagerQueue[ _address ] = block.number.add( blocksNeededForQueue.mul( 2 ) );
} else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4
LiquidityDepositorQueue[ _address ] = block.number.add( blocksNeededForQueue );
} else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5
LiquidityTokenQueue[ _address ] = block.number.add( blocksNeededForQueue );
} else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6
LiquidityManagerQueue[ _address ] = block.number.add( blocksNeededForQueue.mul( 2 ) );
} else if ( _managing == MANAGING.DEBTOR ) { // 7
debtorQueue[ _address ] = block.number.add( blocksNeededForQueue );
} else if ( _managing == MANAGING.REWARDMANAGER ) { // 8
rewardManagerQueue[ _address ] = block.number.add( blocksNeededForQueue );
} else if ( _managing == MANAGING.SBTRFLY ) { // 9
sBTRFLYQueue = block.number.add( blocksNeededForQueue );
} 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.SBTRFLY ) { // 9
sBTRFLYQueue = 0;
sBTRFLY = _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 => uint ) 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 ] <= block.number, "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;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_BTRFLY","type":"address"},{"internalType":"address","name":"_OHM","type":"address"},{"internalType":"address","name":"_sOHM","type":"address"},{"internalType":"address","name":"_CVX","type":"address"},{"internalType":"address","name":"_CRV","type":"address"},{"internalType":"uint256","name":"_OHMFloor","type":"uint256"},{"internalType":"uint256","name":"_CVXFloor","type":"uint256"},{"internalType":"uint256","name":"_CRVFloor","type":"uint256"},{"internalType":"uint256","name":"_newBlocksNeededForQueue","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum REDACTEDTreasury.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 REDACTEDTreasury.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":"address","name":"niceGuy","type":"address"}],"name":"Simp","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"tokenValueSet","type":"event"},{"inputs":[],"name":"BTRFLY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityDepositorQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityManagerQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityTokenQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ReserveManagerQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auditReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blocksNeededForQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bondCalculator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateAndreMode","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"","type":"uint256"}],"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":"address","name":"_token","type":"address"}],"name":"getFloor","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":[{"internalType":"address","name":"","type":"address"}],"name":"nativeFloorPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newBlocksNeededForQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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 REDACTEDTreasury.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":"repayDebtWithBTRFLY","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":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sBTRFLY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sBTRFLYQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setFloor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"simp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum REDACTEDTreasury.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
60c060405234801561001057600080fd5b5060405162003b7838038062003b78833981810160405261012081101561003657600080fd5b50805160208201516040808401516060850151608086015160a087015160c088015160e089015161010090990151600080546001600160a01b03191633178082559751999a989996989597949693959294929391926001600160a01b0316917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b0389166100cd57600080fd5b886001600160a01b03166080816001600160a01b031660601b815250506001600460008a6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506003889080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b0316021790555083600660008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160046000896001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506003879080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b0316021790555083600660008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160046000886001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506003869080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055508260066000886001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160046000876001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506003859080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055508160066000876001600160a01b03166001600160a01b031681526020019081526020016000208190555060006002819055508060a0818152505050505050505050505060805160601c60a0516137626200041660003980611b3752806126a9525080610b7b5280610f1d528061139552806114e1528061157d52806116315280611c195280611f7f52506137626000f3fe608060405234801561001057600080fd5b50600436106103825760003560e01c806387d67dff116101de578063c99c7d931161010f578063ebd83cd8116100ad578063fbfd393b1161007c578063fbfd393b14610a35578063fc7b9c1814610a6c578063fd1ec01014610a74578063fff9ee8714610a9157610382565b8063ebd83cd8146109bb578063ec7ad1a2146109e1578063ee4e19a1146109e9578063fb93958814610a0f57610382565b8063d07f390f116100e9578063d07f390f14610932578063d796ffb81461093a578063df89b34414610966578063e83afee31461098c57610382565b8063c99c7d93146108c3578063cd85641a146108ef578063d031370b1461091557610382565b8063a569e5711161017c578063b5b1d56011610156578063b5b1d56014610846578063bc157ac114610863578063c24ad43e14610895578063c81d37dd146108bb57610382565b8063a569e571146107d4578063ab319c9a146107fa578063b1bd38b01461082057610382565b80638f840ddd116101b85780638f840ddd14610778578063932cc8c3146107805780639e5722f9146107a6578063a1210a2d146107ae57610382565b806387d67dff1461070f5780638f59c727146107355780638f6a7b571461075b57610382565b8063437f7912116102b857806368c31dd51161025657806370a0502a1161023057806370a0502a14610689578063788c6c01146106a657806383f67ba4146106cc578063869871bf146106f257610382565b806368c31dd51461061a5780636a20de92146106405780636b5e40a71461066c57610382565b8063481c6a7511610292578063481c6a75146105dc5780634e83423c146105e45780635a96ac0a1461060a5780635bc42af51461061257610382565b8063437f79121461056d578063441b9e3d1461058a57806346f68ee9146105b657610382565b806312422d231161032557806322443c10116102ff57806322443c101461051a57806324793cea146105225780632a186a781461053f5780632b7ce5001461056557610382565b806312422d231461049c5780631af4da70146104c85780631eec5a9a146104ee57610382565b8063094a865111610361578063094a8651146103f65780630b0eee301461042e5780630c3513a81461045a578063124154ca1461046257610382565b8062f714ce146103875780630619aff1146103b5578063089208d8146103ee575b600080fd5b6103b36004803603604081101561039d57600080fd5b50803590602001356001600160a01b0316610ab7565b005b6103d2600480360360208110156103cb57600080fd5b5035610c8e565b604080516001600160a01b039092168252519081900360200190f35b6103b3610cb8565b61041c6004803603602081101561040c57600080fd5b50356001600160a01b0316610d4f565b60408051918252519081900360200190f35b6103b36004803603604081101561044457600080fd5b506001600160a01b038135169060200135610d61565b61041c610f10565b6104886004803603602081101561047857600080fd5b50356001600160a01b0316610fb4565b604080519115158252519081900360200190f35b6103b3600480360360408110156104b257600080fd5b50803590602001356001600160a01b0316610fc9565b6103d2600480360360208110156104de57600080fd5b50356001600160a01b0316611299565b61041c6004803603604081101561050457600080fd5b506001600160a01b0381351690602001356112b4565b6103d26114df565b6103b36004803603602081101561053857600080fd5b5035611503565b61041c6004803603602081101561055557600080fd5b50356001600160a01b0316611682565b6103b3611694565b6103d26004803603602081101561058357600080fd5b503561180a565b6103b3600480360360408110156105a057600080fd5b50803590602001356001600160a01b031661181a565b6103b3600480360360208110156105cc57600080fd5b50356001600160a01b031661192d565b6103d2611a1a565b610488600480360360208110156105fa57600080fd5b50356001600160a01b0316611a29565b6103b3611a3e565b6103b3611ae8565b6104886004803603602081101561063057600080fd5b50356001600160a01b0316611b5b565b6103b36004803603604081101561065657600080fd5b506001600160a01b038135169060200135611b70565b6103d26004803603602081101561068257600080fd5b5035611cea565b6103d26004803603602081101561069f57600080fd5b5035611cfa565b61041c600480360360208110156106bc57600080fd5b50356001600160a01b0316611d0a565b61041c600480360360208110156106e257600080fd5b50356001600160a01b0316611d1c565b6103d26004803603602081101561070857600080fd5b5035611d37565b6104886004803603602081101561072557600080fd5b50356001600160a01b0316611d47565b61041c6004803603602081101561074b57600080fd5b50356001600160a01b0316611d5c565b6103d26004803603602081101561077157600080fd5b5035611d6e565b61041c611d7e565b61041c6004803603602081101561079657600080fd5b50356001600160a01b0316611d84565b6103d2611d96565b610488600480360360208110156107c457600080fd5b50356001600160a01b0316611da5565b610488600480360360208110156107ea57600080fd5b50356001600160a01b0316611dba565b61041c6004803603602081101561081057600080fd5b50356001600160a01b0316611dcf565b61041c6004803603602081101561083657600080fd5b50356001600160a01b0316611de1565b6103d26004803603602081101561085c57600080fd5b5035611df3565b61041c6004803603606081101561087957600080fd5b508035906001600160a01b036020820135169060400135611e03565b61041c600480360360208110156108ab57600080fd5b50356001600160a01b0316612081565b61041c612093565b6103b3600480360360408110156108d957600080fd5b506001600160a01b038135169060200135612099565b61041c6004803603602081101561090557600080fd5b50356001600160a01b0316612194565b6103d26004803603602081101561092b57600080fd5b50356121a6565b61041c6121b6565b6103b36004803603604081101561095057600080fd5b50803590602001356001600160a01b03166121bc565b6104886004803603602081101561097c57600080fd5b50356001600160a01b031661233f565b610488600480360360408110156109a257600080fd5b50803560ff1690602001356001600160a01b0316612354565b610488600480360360208110156109d157600080fd5b50356001600160a01b0316612692565b61041c6126a7565b610488600480360360208110156109ff57600080fd5b50356001600160a01b03166126cb565b61041c60048036036020811015610a2557600080fd5b50356001600160a01b03166126e0565b61048860048036036060811015610a4b57600080fd5b5060ff813516906001600160a01b03602082013581169160400135166126f1565b61041c612fac565b6103d260048036036020811015610a8a57600080fd5b5035612fb2565b61041c60048036036020811015610aa757600080fd5b50356001600160a01b0316612fc2565b6001600160a01b03811660009081526004602052604090205460ff16610b13576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b336000908152600b602052604090205460ff161515600114610b6b576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610b7782846112b4565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610bf057600080fd5b505af1158015610c04573d6000803e3d6000fd5b5050602354610c169250905082612fd4565b60238190556040516000805160206136e383398151915290600090a2610c466001600160a01b0383163385613016565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60148181548110610c9e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610d05576040805162461bcd60e51b815260206004820181905260248201526000805160206136c3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601d6020526000908152604090205481565b6001600160a01b0382166000908152600e602052604090205460ff1615610dda573360009081526018602052604090205460ff16610dd5576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b610e2d565b3360009081526015602052604090205460ff16610e2d576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610e3983836112b4565b9050610e43610f10565b811115610e8f576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b602354610e9c9082612fd4565b60238190556040516000805160206136e383398151915290600090a2610ecc6001600160a01b0384163384613016565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000610faf610fa66024547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7457600080fd5b505afa158015610f88573d6000803e3d6000fd5b505050506040513d6020811015610f9e57600080fd5b505190612fd4565b60235490612fd4565b905090565b60086020526000908152604090205460ff1681565b336000908152601b602052604090205460ff1661101c576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff16611078576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b600061108482846112b4565b602154604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156110d557600080fd5b505afa1580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b5051336000908152601d602052604081205491925090611120908390612fd4565b90508083111561116c576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601d6020526040902054611186908461306d565b336000908152601d60205260409020556024546111a3908461306d565b6024556023546111b39084612fd4565b60238190556040516000805160206136e383398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b15801561121e57600080fd5b505af1158015611232573d6000803e3d6000fd5b505050506040513d602081101561124857600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b6013602052600090815260409020546001600160a01b031681565b6001600160a01b03821660009081526004602052604081205460ff16156114285761142160066000856001600160a01b03166001600160a01b0316815260200190815260200160002054611415633b9aca0061141b876001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561134257600080fd5b505afa158015611356573d6000803e3d6000fd5b505050506040513d602081101561136c57600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a91611415916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163313ce56791600480820192602092909190829003018186803b1580156113dc57600080fd5b505afa1580156113f0573d6000803e3d6000fd5b505050506040513d602081101561140657600080fd5b5051899060ff16600a0a6130c7565b90613120565b906130c7565b90506114d9565b6001600160a01b0383166000908152600e602052604090205460ff16156114d9576001600160a01b03808416600081815260136020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b1580156114aa57600080fd5b505afa1580156114be573d6000803e3d6000fd5b505050506040513d60208110156114d457600080fd5b505190505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b336000908152601b602052604090205460ff16611556576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916379cc679091604480830192600092919082900301818387803b1580156115c457600080fd5b505af11580156115d8573d6000803e3d6000fd5b5050336000908152601d60205260409020546115f79250905082612fd4565b336000908152601d60205260409020556024546116149082612fd4565b602455604080518281526020810183905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60066020526000908152604090205481565b6000805b60035481101561176c5761176261175b600383815481106116b557fe5b600091825260209091200154600380546001600160a01b0390921691859081106116db57fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561172a57600080fd5b505afa15801561173e573d6000803e3d6000fd5b505050506040513d602081101561175457600080fd5b50516112b4565b839061306d565b9150600101611698565b5060005b600d548110156117bd576117b361175b600d838154811061178d57fe5b600091825260209091200154600d80546001600160a01b0390921691859081106116db57fe5b9150600101611770565b50602381905560405181906000805160206136e383398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b600a8181548110610c9e57600080fd5b6001600160a01b03811660009081526004602052604090205460ff168061185957506001600160a01b0381166000908152600e602052604090205460ff165b611899576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b6118ae6001600160a01b038216333085613162565b60006118ba82846112b4565b6023549091506118ca908261306d565b60238190556040516000805160206136e383398151915290600090a26040805184815233602082015281516001600160a01b038516927f74af5e21416172c4018da0bd43190a10fbb3f7901101907929a85a069d9e4f94928290030190a2505050565b6000546001600160a01b0316331461197a576040805162461bcd60e51b815260206004820181905260248201526000805160206136c3833981519152604482015290519081900360640190fd5b6001600160a01b0381166119bf5760405162461bcd60e51b81526004018080602001828103825260268152602001806136346026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601f6020526000908152604090205460ff1681565b6001546001600160a01b03163314611a875760405162461bcd60e51b815260040180806020018281038252602281526020018061365a6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b03163314611b35576040805162461bcd60e51b815260206004820181905260248201526000805160206136c3833981519152604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000000000600255565b60046020526000908152604090205460ff1681565b336000908152601f602052604090205460ff16611bc3576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611bcb610f10565b811115611c17576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611c8e57600080fd5b505af1158015611ca2573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60078181548110610c9e57600080fd5b60178181548110610c9e57600080fd5b60056020526000908152604090205481565b6001600160a01b031660009081526006602052604090205490565b601a8181548110610c9e57600080fd5b600b6020526000908152604090205460ff1681565b600f6020526000908152604090205481565b60108181548110610c9e57600080fd5b60235481565b60096020526000908152604090205481565b6021546001600160a01b031681565b60116020526000908152604090205460ff1681565b600e6020526000908152604090205460ff1681565b60196020526000908152604090205481565b60166020526000908152604090205481565b601e8181548110610c9e57600080fd5b6001600160a01b03821660009081526004602052604081205460ff1680611e4257506001600160a01b0383166000908152600e602052604090205460ff165b611e82576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611e976001600160a01b038416333087613162565b6001600160a01b03831660009081526004602052604090205460ff1615611f10573360009081526008602052604090205460ff16611f0b576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611f63565b3360009081526011602052604090205460ff16611f63576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000611f6f84866112b4565b9050611f7b8184612fd4565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611ff457600080fd5b505af1158015612008573d6000803e3d6000fd5b505060235461201a925090508261306d565b60238190556040516000805160206136e383398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b600c6020526000908152604090205481565b60225481565b6000546001600160a01b031633146120e6576040805162461bcd60e51b815260206004820181905260248201526000805160206136c3833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600660205260409020541561213b5760405162461bcd60e51b815260040180806020018281038252602681526020018061367c6026913960400191505060405180910390fd5b6001600160a01b0382166000818152600660209081526040918290208490558151928352820183905280517f3338cd46289b179104f17582d19068f0b9dacabfc55ef6e4e98f1df99d5165fb9281900390910190a15050565b601c6020526000908152604090205481565b60038181548110610c9e57600080fd5b60025481565b336000908152601b602052604090205460ff1661220f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff1661226b576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b6122806001600160a01b038216333085613162565b600061228c82846112b4565b336000908152601d60205260409020549091506122a99082612fd4565b336000908152601d60205260409020556024546122c69082612fd4565b6024556023546122d6908261306d565b60238190556040516000805160206136e383398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b60186020526000908152604090205460ff1681565b600080546001600160a01b031633146123a2576040805162461bcd60e51b815260206004820181905260248201526000805160206136c3833981519152604482015290519081900360640190fd5b6001600160a01b0382166123b557600080fd5b60008360098111156123c357fe5b14156123f5576002546123d790439061306d565b6001600160a01b038316600090815260096020526040902055612641565b600183600981111561240357fe5b14156124355760025461241790439061306d565b6001600160a01b0383166000908152600c6020526040902055612641565b600283600981111561244357fe5b14156124755760025461245790439061306d565b6001600160a01b038316600090815260056020526040902055612641565b600383600981111561248357fe5b14156124c6576124a86124a1600280546130c790919063ffffffff16565b439061306d565b6001600160a01b038316600090815260166020526040902055612641565b60048360098111156124d457fe5b1415612506576002546124e890439061306d565b6001600160a01b038316600090815260126020526040902055612641565b600583600981111561251457fe5b14156125465760025461252890439061306d565b6001600160a01b0383166000908152600f6020526040902055612641565b600683600981111561255457fe5b1415612590576125726124a1600280546130c790919063ffffffff16565b6001600160a01b038316600090815260196020526040902055612641565b600783600981111561259e57fe5b14156125d0576002546125b290439061306d565b6001600160a01b0383166000908152601c6020526040902055612641565b60088360098111156125de57fe5b141561260f576002546125f290439061306d565b6001600160a01b0383166000908152602080526040902055612641565b600983600981111561261d57fe5b14156126395760025461263190439061306d565b602255612641565b5060006114d9565b82600981111561264d57fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b60156020526000908152604090205460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b601b6020526000908152604090205460ff1681565b602080526000908152604090205481565b600080546001600160a01b0316331461273f576040805162461bcd60e51b815260206004820181905260248201526000805160206136c3833981519152604482015290519081900360640190fd5b6001600160a01b03831661275257600080fd5b60008085600981111561276157fe5b141561281d5761277460096008866131c2565b156127ed576001600160a01b03841660009081526009602052604081205561279d6007856132ac565b6127ed57600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600860205260409020805460ff81161560ff199091168117909155612f4e565b600185600981111561282b57fe5b14156128e75761283e600c600b866131c2565b156128b7576001600160a01b0384166000908152600c6020526040812055612867600a856132ac565b6128b757600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600b60205260409020805460ff81161560ff199091168117909155612f4e565b60028560098111156128f557fe5b14156129b15761290860056004866131c2565b15612981576001600160a01b0384166000908152600560205260408120556129316003856132ac565b61298157600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600460205260409020805460ff81161560ff199091168117909155612f4e565b60038560098111156129bf57fe5b1415612ab8576129d260166015866131c2565b15612a8857601480546001810182557fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319166001600160a01b038716908117909155600090815260166020526040812055612a3890856132ac565b612a8857601480546001810182556000919091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601560205260409020805460ff81161560ff199091168117909155612f4e565b6004856009811115612ac657fe5b1415612bbf57612ad960126011866131c2565b15612b8f57601080546001810182557f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b038716908117909155600090815260126020526040812055612b3f90856132ac565b612b8f57601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601160205260409020805460ff81161560ff199091168117909155612f4e565b6005856009811115612bcd57fe5b1415612cab57612be0600f600e866131c2565b15612c59576001600160a01b0384166000908152600f6020526040812055612c09600d856132ac565b612c5957600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600e60209081526040808320805460ff81161560ff199091168117909155601390925290912080546001600160a01b03191692851692909217909155612f4e565b6006856009811115612cb957fe5b1415612d7557612ccc60196018866131c2565b15612d45576001600160a01b038416600090815260196020526040812055612cf56017856132ac565b612d4557601780546001810182556000919091527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c150180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601860205260409020805460ff81161560ff199091168117909155612f4e565b6007856009811115612d8357fe5b1415612e3f57612d96601c601b866131c2565b15612e0f576001600160a01b0384166000908152601c6020526040812055612dbf601a856132ac565b612e0f57601a80546001810182556000919091527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601b60205260409020805460ff81161560ff199091168117909155612f4e565b6008856009811115612e4d57fe5b1415612f0857612e606020601f866131c2565b15612ed8576001600160a01b0384166000908152602080526040812055612e88601e856132ac565b612ed857601e80546001810182556000919091527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601f60205260409020805460ff81161560ff199091168117909155612f4e565b6009856009811115612f1657fe5b1415612f4457506000602255602180546001600160a01b0319166001600160a01b0385161790556001612f4e565b6000915050612fa5565b846009811115612f5a57fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60245481565b600d8181548110610c9e57600080fd5b60126020526000908152604090205481565b6000612fa583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132fc565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052613068908490613393565b505050565b600082820183811015612fa5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826130d6575060006114d9565b828202828482816130e357fe5b0414612fa55760405162461bcd60e51b81526004018080602001828103825260218152602001806136a26021913960400191505060405180910390fd5b6000612fa583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613444565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526131bc908590613393565b50505050565b6001600160a01b03811660009081526020839052604081205460ff166132a2576001600160a01b038216600090815260208590526040902054613239576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b03821660009081526020859052604090205443101561329a576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b506001612fa5565b5060009392505050565b6000805b83548110156132a257826001600160a01b03168482815481106132cf57fe5b6000918252602090912001546001600160a01b031614156132f45760019150506114d9565b6001016132b0565b6000818484111561338b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613350578181015183820152602001613338565b50505050905090810190601f16801561337d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60606133e8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166134a99092919063ffffffff16565b8051909150156130685780806020019051602081101561340757600080fd5b50516130685760405162461bcd60e51b815260040180806020018281038252602a815260200180613703602a913960400191505060405180910390fd5b600081836134935760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613350578181015183820152602001613338565b50600083858161349f57fe5b0495945050505050565b60606134b884846000856134c0565b949350505050565b60606134cb8561362d565b61351c576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061355b5780518252601f19909201916020918201910161353c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146135bd576040519150601f19603f3d011682016040523d82523d6000602084013e6135c2565b606091505b509150915081156135d65791506134b89050565b8051156135e65780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315613350578181015183820152602001613338565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c546f6b656e20666c6f6f722076616c75652063616e206f6e6c7920626520736574206f6e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220138383546aae90fd6ee919ba3a41d500524c5144e52d8564f795ce5324cc7ea564736f6c63430007050033000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d500000000000000000000000004906695d6d12cf5459975d7c3c03356e4ccd4600000000000000000000000004e3fbd56cd56c3e72c1403e103b45db9da5b9d2b000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd5200000000000000000000000000000000000000000000000000000000002625a00000000000000000000000000000000000000000000000000000000001dcd650000000000000000000000000000000000000000000000000000000000ee6b2800000000000000000000000000000000000000000000000000000000000000ce5
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103825760003560e01c806387d67dff116101de578063c99c7d931161010f578063ebd83cd8116100ad578063fbfd393b1161007c578063fbfd393b14610a35578063fc7b9c1814610a6c578063fd1ec01014610a74578063fff9ee8714610a9157610382565b8063ebd83cd8146109bb578063ec7ad1a2146109e1578063ee4e19a1146109e9578063fb93958814610a0f57610382565b8063d07f390f116100e9578063d07f390f14610932578063d796ffb81461093a578063df89b34414610966578063e83afee31461098c57610382565b8063c99c7d93146108c3578063cd85641a146108ef578063d031370b1461091557610382565b8063a569e5711161017c578063b5b1d56011610156578063b5b1d56014610846578063bc157ac114610863578063c24ad43e14610895578063c81d37dd146108bb57610382565b8063a569e571146107d4578063ab319c9a146107fa578063b1bd38b01461082057610382565b80638f840ddd116101b85780638f840ddd14610778578063932cc8c3146107805780639e5722f9146107a6578063a1210a2d146107ae57610382565b806387d67dff1461070f5780638f59c727146107355780638f6a7b571461075b57610382565b8063437f7912116102b857806368c31dd51161025657806370a0502a1161023057806370a0502a14610689578063788c6c01146106a657806383f67ba4146106cc578063869871bf146106f257610382565b806368c31dd51461061a5780636a20de92146106405780636b5e40a71461066c57610382565b8063481c6a7511610292578063481c6a75146105dc5780634e83423c146105e45780635a96ac0a1461060a5780635bc42af51461061257610382565b8063437f79121461056d578063441b9e3d1461058a57806346f68ee9146105b657610382565b806312422d231161032557806322443c10116102ff57806322443c101461051a57806324793cea146105225780632a186a781461053f5780632b7ce5001461056557610382565b806312422d231461049c5780631af4da70146104c85780631eec5a9a146104ee57610382565b8063094a865111610361578063094a8651146103f65780630b0eee301461042e5780630c3513a81461045a578063124154ca1461046257610382565b8062f714ce146103875780630619aff1146103b5578063089208d8146103ee575b600080fd5b6103b36004803603604081101561039d57600080fd5b50803590602001356001600160a01b0316610ab7565b005b6103d2600480360360208110156103cb57600080fd5b5035610c8e565b604080516001600160a01b039092168252519081900360200190f35b6103b3610cb8565b61041c6004803603602081101561040c57600080fd5b50356001600160a01b0316610d4f565b60408051918252519081900360200190f35b6103b36004803603604081101561044457600080fd5b506001600160a01b038135169060200135610d61565b61041c610f10565b6104886004803603602081101561047857600080fd5b50356001600160a01b0316610fb4565b604080519115158252519081900360200190f35b6103b3600480360360408110156104b257600080fd5b50803590602001356001600160a01b0316610fc9565b6103d2600480360360208110156104de57600080fd5b50356001600160a01b0316611299565b61041c6004803603604081101561050457600080fd5b506001600160a01b0381351690602001356112b4565b6103d26114df565b6103b36004803603602081101561053857600080fd5b5035611503565b61041c6004803603602081101561055557600080fd5b50356001600160a01b0316611682565b6103b3611694565b6103d26004803603602081101561058357600080fd5b503561180a565b6103b3600480360360408110156105a057600080fd5b50803590602001356001600160a01b031661181a565b6103b3600480360360208110156105cc57600080fd5b50356001600160a01b031661192d565b6103d2611a1a565b610488600480360360208110156105fa57600080fd5b50356001600160a01b0316611a29565b6103b3611a3e565b6103b3611ae8565b6104886004803603602081101561063057600080fd5b50356001600160a01b0316611b5b565b6103b36004803603604081101561065657600080fd5b506001600160a01b038135169060200135611b70565b6103d26004803603602081101561068257600080fd5b5035611cea565b6103d26004803603602081101561069f57600080fd5b5035611cfa565b61041c600480360360208110156106bc57600080fd5b50356001600160a01b0316611d0a565b61041c600480360360208110156106e257600080fd5b50356001600160a01b0316611d1c565b6103d26004803603602081101561070857600080fd5b5035611d37565b6104886004803603602081101561072557600080fd5b50356001600160a01b0316611d47565b61041c6004803603602081101561074b57600080fd5b50356001600160a01b0316611d5c565b6103d26004803603602081101561077157600080fd5b5035611d6e565b61041c611d7e565b61041c6004803603602081101561079657600080fd5b50356001600160a01b0316611d84565b6103d2611d96565b610488600480360360208110156107c457600080fd5b50356001600160a01b0316611da5565b610488600480360360208110156107ea57600080fd5b50356001600160a01b0316611dba565b61041c6004803603602081101561081057600080fd5b50356001600160a01b0316611dcf565b61041c6004803603602081101561083657600080fd5b50356001600160a01b0316611de1565b6103d26004803603602081101561085c57600080fd5b5035611df3565b61041c6004803603606081101561087957600080fd5b508035906001600160a01b036020820135169060400135611e03565b61041c600480360360208110156108ab57600080fd5b50356001600160a01b0316612081565b61041c612093565b6103b3600480360360408110156108d957600080fd5b506001600160a01b038135169060200135612099565b61041c6004803603602081101561090557600080fd5b50356001600160a01b0316612194565b6103d26004803603602081101561092b57600080fd5b50356121a6565b61041c6121b6565b6103b36004803603604081101561095057600080fd5b50803590602001356001600160a01b03166121bc565b6104886004803603602081101561097c57600080fd5b50356001600160a01b031661233f565b610488600480360360408110156109a257600080fd5b50803560ff1690602001356001600160a01b0316612354565b610488600480360360208110156109d157600080fd5b50356001600160a01b0316612692565b61041c6126a7565b610488600480360360208110156109ff57600080fd5b50356001600160a01b03166126cb565b61041c60048036036020811015610a2557600080fd5b50356001600160a01b03166126e0565b61048860048036036060811015610a4b57600080fd5b5060ff813516906001600160a01b03602082013581169160400135166126f1565b61041c612fac565b6103d260048036036020811015610a8a57600080fd5b5035612fb2565b61041c60048036036020811015610aa757600080fd5b50356001600160a01b0316612fc2565b6001600160a01b03811660009081526004602052604090205460ff16610b13576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b336000908152600b602052604090205460ff161515600114610b6b576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610b7782846112b4565b90507f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a6001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610bf057600080fd5b505af1158015610c04573d6000803e3d6000fd5b5050602354610c169250905082612fd4565b60238190556040516000805160206136e383398151915290600090a2610c466001600160a01b0383163385613016565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60148181548110610c9e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610d05576040805162461bcd60e51b815260206004820181905260248201526000805160206136c3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601d6020526000908152604090205481565b6001600160a01b0382166000908152600e602052604090205460ff1615610dda573360009081526018602052604090205460ff16610dd5576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b610e2d565b3360009081526015602052604090205460ff16610e2d576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610e3983836112b4565b9050610e43610f10565b811115610e8f576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b602354610e9c9082612fd4565b60238190556040516000805160206136e383398151915290600090a2610ecc6001600160a01b0384163384613016565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000610faf610fa66024547f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7457600080fd5b505afa158015610f88573d6000803e3d6000fd5b505050506040513d6020811015610f9e57600080fd5b505190612fd4565b60235490612fd4565b905090565b60086020526000908152604090205460ff1681565b336000908152601b602052604090205460ff1661101c576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff16611078576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b600061108482846112b4565b602154604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156110d557600080fd5b505afa1580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b5051336000908152601d602052604081205491925090611120908390612fd4565b90508083111561116c576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601d6020526040902054611186908461306d565b336000908152601d60205260409020556024546111a3908461306d565b6024556023546111b39084612fd4565b60238190556040516000805160206136e383398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b15801561121e57600080fd5b505af1158015611232573d6000803e3d6000fd5b505050506040513d602081101561124857600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b6013602052600090815260409020546001600160a01b031681565b6001600160a01b03821660009081526004602052604081205460ff16156114285761142160066000856001600160a01b03166001600160a01b0316815260200190815260200160002054611415633b9aca0061141b876001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561134257600080fd5b505afa158015611356573d6000803e3d6000fd5b505050506040513d602081101561136c57600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a91611415916001600160a01b037f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a169163313ce56791600480820192602092909190829003018186803b1580156113dc57600080fd5b505afa1580156113f0573d6000803e3d6000fd5b505050506040513d602081101561140657600080fd5b5051899060ff16600a0a6130c7565b90613120565b906130c7565b90506114d9565b6001600160a01b0383166000908152600e602052604090205460ff16156114d9576001600160a01b03808416600081815260136020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b1580156114aa57600080fd5b505afa1580156114be573d6000803e3d6000fd5b505050506040513d60208110156114d457600080fd5b505190505b92915050565b7f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a81565b336000908152601b602052604090205460ff16611556576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a16916379cc679091604480830192600092919082900301818387803b1580156115c457600080fd5b505af11580156115d8573d6000803e3d6000fd5b5050336000908152601d60205260409020546115f79250905082612fd4565b336000908152601d60205260409020556024546116149082612fd4565b602455604080518281526020810183905281516001600160a01b037f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60066020526000908152604090205481565b6000805b60035481101561176c5761176261175b600383815481106116b557fe5b600091825260209091200154600380546001600160a01b0390921691859081106116db57fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561172a57600080fd5b505afa15801561173e573d6000803e3d6000fd5b505050506040513d602081101561175457600080fd5b50516112b4565b839061306d565b9150600101611698565b5060005b600d548110156117bd576117b361175b600d838154811061178d57fe5b600091825260209091200154600d80546001600160a01b0390921691859081106116db57fe5b9150600101611770565b50602381905560405181906000805160206136e383398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b600a8181548110610c9e57600080fd5b6001600160a01b03811660009081526004602052604090205460ff168061185957506001600160a01b0381166000908152600e602052604090205460ff165b611899576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b6118ae6001600160a01b038216333085613162565b60006118ba82846112b4565b6023549091506118ca908261306d565b60238190556040516000805160206136e383398151915290600090a26040805184815233602082015281516001600160a01b038516927f74af5e21416172c4018da0bd43190a10fbb3f7901101907929a85a069d9e4f94928290030190a2505050565b6000546001600160a01b0316331461197a576040805162461bcd60e51b815260206004820181905260248201526000805160206136c3833981519152604482015290519081900360640190fd5b6001600160a01b0381166119bf5760405162461bcd60e51b81526004018080602001828103825260268152602001806136346026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601f6020526000908152604090205460ff1681565b6001546001600160a01b03163314611a875760405162461bcd60e51b815260040180806020018281038252602281526020018061365a6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b03163314611b35576040805162461bcd60e51b815260206004820181905260248201526000805160206136c3833981519152604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000000ce5600255565b60046020526000908152604090205460ff1681565b336000908152601f602052604090205460ff16611bc3576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611bcb610f10565b811115611c17576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a6001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611c8e57600080fd5b505af1158015611ca2573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60078181548110610c9e57600080fd5b60178181548110610c9e57600080fd5b60056020526000908152604090205481565b6001600160a01b031660009081526006602052604090205490565b601a8181548110610c9e57600080fd5b600b6020526000908152604090205460ff1681565b600f6020526000908152604090205481565b60108181548110610c9e57600080fd5b60235481565b60096020526000908152604090205481565b6021546001600160a01b031681565b60116020526000908152604090205460ff1681565b600e6020526000908152604090205460ff1681565b60196020526000908152604090205481565b60166020526000908152604090205481565b601e8181548110610c9e57600080fd5b6001600160a01b03821660009081526004602052604081205460ff1680611e4257506001600160a01b0383166000908152600e602052604090205460ff165b611e82576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611e976001600160a01b038416333087613162565b6001600160a01b03831660009081526004602052604090205460ff1615611f10573360009081526008602052604090205460ff16611f0b576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611f63565b3360009081526011602052604090205460ff16611f63576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000611f6f84866112b4565b9050611f7b8184612fd4565b91507f000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a6001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611ff457600080fd5b505af1158015612008573d6000803e3d6000fd5b505060235461201a925090508261306d565b60238190556040516000805160206136e383398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b600c6020526000908152604090205481565b60225481565b6000546001600160a01b031633146120e6576040805162461bcd60e51b815260206004820181905260248201526000805160206136c3833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600660205260409020541561213b5760405162461bcd60e51b815260040180806020018281038252602681526020018061367c6026913960400191505060405180910390fd5b6001600160a01b0382166000818152600660209081526040918290208490558151928352820183905280517f3338cd46289b179104f17582d19068f0b9dacabfc55ef6e4e98f1df99d5165fb9281900390910190a15050565b601c6020526000908152604090205481565b60038181548110610c9e57600080fd5b60025481565b336000908152601b602052604090205460ff1661220f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff1661226b576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b6122806001600160a01b038216333085613162565b600061228c82846112b4565b336000908152601d60205260409020549091506122a99082612fd4565b336000908152601d60205260409020556024546122c69082612fd4565b6024556023546122d6908261306d565b60238190556040516000805160206136e383398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b60186020526000908152604090205460ff1681565b600080546001600160a01b031633146123a2576040805162461bcd60e51b815260206004820181905260248201526000805160206136c3833981519152604482015290519081900360640190fd5b6001600160a01b0382166123b557600080fd5b60008360098111156123c357fe5b14156123f5576002546123d790439061306d565b6001600160a01b038316600090815260096020526040902055612641565b600183600981111561240357fe5b14156124355760025461241790439061306d565b6001600160a01b0383166000908152600c6020526040902055612641565b600283600981111561244357fe5b14156124755760025461245790439061306d565b6001600160a01b038316600090815260056020526040902055612641565b600383600981111561248357fe5b14156124c6576124a86124a1600280546130c790919063ffffffff16565b439061306d565b6001600160a01b038316600090815260166020526040902055612641565b60048360098111156124d457fe5b1415612506576002546124e890439061306d565b6001600160a01b038316600090815260126020526040902055612641565b600583600981111561251457fe5b14156125465760025461252890439061306d565b6001600160a01b0383166000908152600f6020526040902055612641565b600683600981111561255457fe5b1415612590576125726124a1600280546130c790919063ffffffff16565b6001600160a01b038316600090815260196020526040902055612641565b600783600981111561259e57fe5b14156125d0576002546125b290439061306d565b6001600160a01b0383166000908152601c6020526040902055612641565b60088360098111156125de57fe5b141561260f576002546125f290439061306d565b6001600160a01b0383166000908152602080526040902055612641565b600983600981111561261d57fe5b14156126395760025461263190439061306d565b602255612641565b5060006114d9565b82600981111561264d57fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b60156020526000908152604090205460ff1681565b7f0000000000000000000000000000000000000000000000000000000000000ce581565b601b6020526000908152604090205460ff1681565b602080526000908152604090205481565b600080546001600160a01b0316331461273f576040805162461bcd60e51b815260206004820181905260248201526000805160206136c3833981519152604482015290519081900360640190fd5b6001600160a01b03831661275257600080fd5b60008085600981111561276157fe5b141561281d5761277460096008866131c2565b156127ed576001600160a01b03841660009081526009602052604081205561279d6007856132ac565b6127ed57600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600860205260409020805460ff81161560ff199091168117909155612f4e565b600185600981111561282b57fe5b14156128e75761283e600c600b866131c2565b156128b7576001600160a01b0384166000908152600c6020526040812055612867600a856132ac565b6128b757600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600b60205260409020805460ff81161560ff199091168117909155612f4e565b60028560098111156128f557fe5b14156129b15761290860056004866131c2565b15612981576001600160a01b0384166000908152600560205260408120556129316003856132ac565b61298157600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600460205260409020805460ff81161560ff199091168117909155612f4e565b60038560098111156129bf57fe5b1415612ab8576129d260166015866131c2565b15612a8857601480546001810182557fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319166001600160a01b038716908117909155600090815260166020526040812055612a3890856132ac565b612a8857601480546001810182556000919091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601560205260409020805460ff81161560ff199091168117909155612f4e565b6004856009811115612ac657fe5b1415612bbf57612ad960126011866131c2565b15612b8f57601080546001810182557f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b038716908117909155600090815260126020526040812055612b3f90856132ac565b612b8f57601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601160205260409020805460ff81161560ff199091168117909155612f4e565b6005856009811115612bcd57fe5b1415612cab57612be0600f600e866131c2565b15612c59576001600160a01b0384166000908152600f6020526040812055612c09600d856132ac565b612c5957600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600e60209081526040808320805460ff81161560ff199091168117909155601390925290912080546001600160a01b03191692851692909217909155612f4e565b6006856009811115612cb957fe5b1415612d7557612ccc60196018866131c2565b15612d45576001600160a01b038416600090815260196020526040812055612cf56017856132ac565b612d4557601780546001810182556000919091527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c150180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601860205260409020805460ff81161560ff199091168117909155612f4e565b6007856009811115612d8357fe5b1415612e3f57612d96601c601b866131c2565b15612e0f576001600160a01b0384166000908152601c6020526040812055612dbf601a856132ac565b612e0f57601a80546001810182556000919091527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601b60205260409020805460ff81161560ff199091168117909155612f4e565b6008856009811115612e4d57fe5b1415612f0857612e606020601f866131c2565b15612ed8576001600160a01b0384166000908152602080526040812055612e88601e856132ac565b612ed857601e80546001810182556000919091527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601f60205260409020805460ff81161560ff199091168117909155612f4e565b6009856009811115612f1657fe5b1415612f4457506000602255602180546001600160a01b0319166001600160a01b0385161790556001612f4e565b6000915050612fa5565b846009811115612f5a57fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60245481565b600d8181548110610c9e57600080fd5b60126020526000908152604090205481565b6000612fa583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132fc565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052613068908490613393565b505050565b600082820183811015612fa5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826130d6575060006114d9565b828202828482816130e357fe5b0414612fa55760405162461bcd60e51b81526004018080602001828103825260218152602001806136a26021913960400191505060405180910390fd5b6000612fa583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613444565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526131bc908590613393565b50505050565b6001600160a01b03811660009081526020839052604081205460ff166132a2576001600160a01b038216600090815260208590526040902054613239576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b03821660009081526020859052604090205443101561329a576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b506001612fa5565b5060009392505050565b6000805b83548110156132a257826001600160a01b03168482815481106132cf57fe5b6000918252602090912001546001600160a01b031614156132f45760019150506114d9565b6001016132b0565b6000818484111561338b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613350578181015183820152602001613338565b50505050905090810190601f16801561337d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60606133e8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166134a99092919063ffffffff16565b8051909150156130685780806020019051602081101561340757600080fd5b50516130685760405162461bcd60e51b815260040180806020018281038252602a815260200180613703602a913960400191505060405180910390fd5b600081836134935760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613350578181015183820152602001613338565b50600083858161349f57fe5b0495945050505050565b60606134b884846000856134c0565b949350505050565b60606134cb8561362d565b61351c576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061355b5780518252601f19909201916020918201910161353c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146135bd576040519150601f19603f3d011682016040523d82523d6000602084013e6135c2565b606091505b509150915081156135d65791506134b89050565b8051156135e65780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315613350578181015183820152602001613338565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c546f6b656e20666c6f6f722076616c75652063616e206f6e6c7920626520736574206f6e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220138383546aae90fd6ee919ba3a41d500524c5144e52d8564f795ce5324cc7ea564736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d500000000000000000000000004906695d6d12cf5459975d7c3c03356e4ccd4600000000000000000000000004e3fbd56cd56c3e72c1403e103b45db9da5b9d2b000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd5200000000000000000000000000000000000000000000000000000000002625a00000000000000000000000000000000000000000000000000000000001dcd650000000000000000000000000000000000000000000000000000000000ee6b2800000000000000000000000000000000000000000000000000000000000000ce5
-----Decoded View---------------
Arg [0] : _BTRFLY (address): 0xC0d4Ceb216B3BA9C3701B291766fDCbA977ceC3A
Arg [1] : _OHM (address): 0x64aa3364F17a4D01c6f1751Fd97C2BD3D7e7f1D5
Arg [2] : _sOHM (address): 0x04906695D6D12CF5459975d7C3C03356E4Ccd460
Arg [3] : _CVX (address): 0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B
Arg [4] : _CRV (address): 0xD533a949740bb3306d119CC777fa900bA034cd52
Arg [5] : _OHMFloor (uint256): 2500000
Arg [6] : _CVXFloor (uint256): 31250000
Arg [7] : _CRVFloor (uint256): 250000000
Arg [8] : _newBlocksNeededForQueue (uint256): 3301
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 000000000000000000000000c0d4ceb216b3ba9c3701b291766fdcba977cec3a
Arg [1] : 00000000000000000000000064aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5
Arg [2] : 00000000000000000000000004906695d6d12cf5459975d7c3c03356e4ccd460
Arg [3] : 0000000000000000000000004e3fbd56cd56c3e72c1403e103b45db9da5b9d2b
Arg [4] : 000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd52
Arg [5] : 00000000000000000000000000000000000000000000000000000000002625a0
Arg [6] : 0000000000000000000000000000000000000000000000000000000001dcd650
Arg [7] : 000000000000000000000000000000000000000000000000000000000ee6b280
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000ce5
Deployed Bytecode Sourcemap
6755:21220:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13409:587;;;;;;;;;;;;;;;;-1:-1:-1;13409:587:0;;;;;;-1:-1:-1;;;;;13409:587:0;;:::i;:::-;;9456:32;;;;;;;;;;;;;;;;-1:-1:-1;9456:32:0;;:::i;:::-;;;;-1:-1:-1;;;;;9456:32:0;;;;;;;;;;;;;;4143:159;;;:::i;10168:47::-;;;;;;;;;;;;;;;;-1:-1:-1;10168:47:0;-1:-1:-1;;;;;10168:47:0;;:::i;:::-;;;;;;;;;;;;;;;;16471:626;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16471:626:0;;;;;;;;:::i;17633:149::-;;;:::i;8478:52::-;;;;;;;;;;;;;;;;-1:-1:-1;8478:52:0;-1:-1:-1;;;;;8478:52:0;;:::i;:::-;;;;;;;;;;;;;;;;;;14141:865;;;;;;;;;;;;;;;;-1:-1:-1;14141:865:0;;;;;;-1:-1:-1;;;;;14141:865:0;;:::i;9357:51::-;;;;;;;;;;;;;;;;-1:-1:-1;9357:51:0;-1:-1:-1;;;;;9357:51:0;;:::i;18755:551::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18755:551:0;;;;;;;;:::i;7935:31::-;;;:::i;15938:388::-;;;;;;;;;;;;;;;;-1:-1:-1;15938:388:0;;:::i;8290:50::-;;;;;;;;;;;;;;;;-1:-1:-1;8290:50:0;-1:-1:-1;;;;;8290:50:0;;:::i;17935:654::-;;;:::i;8631:32::-;;;;;;;;;;;;;;;;-1:-1:-1;8631:32:0;;:::i;12825:430::-;;;;;;;;;;;;;;;;-1:-1:-1;12825:430:0;;;;;;-1:-1:-1;;;;;12825:430:0;;:::i;4310:261::-;;;;;;;;;;;;;;;;-1:-1:-1;4310:261:0;-1:-1:-1;;;;;4310:261:0;;:::i;3916:90::-;;;:::i;10318:49::-;;;;;;;;;;;;;;;;-1:-1:-1;10318:49:0;-1:-1:-1;;;;;10318:49:0;;:::i;4583:221::-;;;:::i;11604:118::-;;;:::i;8147:48::-;;;;;;;;;;;;;;;;-1:-1:-1;8147:48:0;-1:-1:-1;;;;;8147:48:0;;:::i;17178:346::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17178:346:0;;;;;;;;:::i;8381:34::-;;;;;;;;;;;;;;;;-1:-1:-1;8381:34:0;;:::i;9700:::-;;;;;;;;;;;;;;;;-1:-1:-1;9700:34:0;;:::i;8202:51::-;;;;;;;;;;;;;;;;-1:-1:-1;8202:51:0;-1:-1:-1;;;;;8202:51:0;;:::i;19708:111::-;;;;;;;;;;;;;;;;-1:-1:-1;19708:111:0;-1:-1:-1;;;;;19708:111:0;;:::i;9950:24::-;;;;;;;;;;;;;;;;-1:-1:-1;9950:24:0;;:::i;8726:50::-;;;;;;;;;;;;;;;;-1:-1:-1;8726:50:0;-1:-1:-1;;;;;8726:50:0;;:::i;9009:53::-;;;;;;;;;;;;;;;;-1:-1:-1;9009:53:0;-1:-1:-1;;;;;9009:53:0;;:::i;9101:36::-;;;;;;;;;;;;;;;;-1:-1:-1;9101:36:0;;:::i;10567:25::-;;;:::i;8537:55::-;;;;;;;;;;;;;;;;-1:-1:-1;8537:55:0;-1:-1:-1;;;;;8537:55:0;;:::i;10465:22::-;;;:::i;9200:54::-;;;;;;;;;;;;;;;;-1:-1:-1;9200:54:0;-1:-1:-1;;;;;9200:54:0;;:::i;8952:50::-;;;;;;;;;;;;;;;;-1:-1:-1;8952:50:0;-1:-1:-1;;;;;8952:50:0;;:::i;9856:55::-;;;;;;;;;;;;;;;;-1:-1:-1;9856:55:0;-1:-1:-1;;;;;9856:55:0;;:::i;9608:53::-;;;;;;;;;;;;;;;;-1:-1:-1;9608:53:0;-1:-1:-1;;;;;9608:53:0;;:::i;10224:31::-;;;;;;;;;;;;;;;;-1:-1:-1;10224:31:0;;:::i;11936:881::-;;;;;;;;;;;;;;;;-1:-1:-1;11936:881:0;;;-1:-1:-1;;;;;11936:881:0;;;;;;;;;;:::i;8783:53::-;;;;;;;;;;;;;;;;-1:-1:-1;8783:53:0;-1:-1:-1;;;;;8783:53:0;;:::i;10494:24::-;;;:::i;19440:260::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19440:260:0;;;;;;;;:::i;10086:45::-;;;;;;;;;;;;;;;;-1:-1:-1;10086:45:0;-1:-1:-1;;;;;10086:45:0;;:::i;8072:30::-;;;;;;;;;;;;;;;;-1:-1:-1;8072:30:0;;:::i;7973:32::-;;;:::i;15173:631::-;;;;;;;;;;;;;;;;-1:-1:-1;15173:631:0;;;;;;-1:-1:-1;;;;;15173:631:0;;:::i;9797:52::-;;;;;;;;;;;;;;;;-1:-1:-1;9797:52:0;-1:-1:-1;;;;;9797:52:0;;:::i;19997:1791::-;;;;;;;;;;;;;;;;-1:-1:-1;19997:1791:0;;;;;;;;-1:-1:-1;;;;;19997:1791:0;;:::i;9551:50::-;;;;;;;;;;;;;;;;-1:-1:-1;9551:50:0;-1:-1:-1;;;;;9551:50:0;;:::i;8018:45::-;;;:::i;10037:42::-;;;;;;;;;;;;;;;;-1:-1:-1;10037:42:0;-1:-1:-1;;;;;10037:42:0;;:::i;10374:52::-;;;;;;;;;;;;;;;;-1:-1:-1;10374:52:0;-1:-1:-1;;;;;10374:52:0;;:::i;21998:4842::-;;;;;;;;;;;;;;;;-1:-1:-1;21998:4842:0;;;;;-1:-1:-1;;;;;21998:4842:0;;;;;;;;;;;;:::i;10632:21::-;;;:::i;8875:32::-;;;;;;;;;;;;;;;;-1:-1:-1;8875:32:0;;:::i;9261:57::-;;;;;;;;;;;;;;;;-1:-1:-1;9261:57:0;-1:-1:-1;;;;;9261:57:0;;:::i;13409:587::-;-1:-1:-1;;;;;13488:24:0;;;;;;:14;:24;;;;;;;;13479:51;;;;;-1:-1:-1;;;13479:51:0;;;;;;;;;;;;-1:-1:-1;;;13479:51:0;;;;;;;;;;;;;;;13613:10;13595:30;;;;:16;:30;;;;;;;;:38;;:30;:38;13586:65;;;;;-1:-1:-1;;;13586:65:0;;;;;;;;;;;;-1:-1:-1;;;13586:65:0;;;;;;;;;;;;;;;13664:10;13677:26;13686:6;13694:7;13677;:26::i;:::-;13664:39;;13728:6;-1:-1:-1;;;;;13714:31:0;;13747:10;13759:5;13714:52;;;;;;;;;;;;;-1:-1:-1;;;;;13714:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13795:13:0;;:26;;-1:-1:-1;13795:13:0;-1:-1:-1;13814:5:0;13795:17;:26::i;:::-;13779:13;:42;;;13837:32;;-1:-1:-1;;;;;;;;;;;13837:32:0;;;;13882:52;-1:-1:-1;;;;;13882:29:0;;13913:10;13925:7;13882:29;:52::i;:::-;13952:36;;;;;;;;;;;;;;-1:-1:-1;;;;;13952:36:0;;;;;;;;;;;13409:587;;;:::o;9456:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9456:32:0;;-1:-1:-1;9456:32:0;:::o;4143:159::-;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;4260:1:::1;4244:6:::0;;4227:37:::1;::::0;-1:-1:-1;;;;;4244:6:0;;::::1;::::0;4227:37:::1;::::0;4260:1;;4227:37:::1;4292:1;4275:19:::0;;-1:-1:-1;;;;;;4275:19:0::1;::::0;;4143:159::o;10168:47::-;;;;;;;;;;;;;:::o;16471:626::-;-1:-1:-1;;;;;16543:26:0;;;;;;:16;:26;;;;;;;;16539:209;;;16616:10;16596:32;;;;:18;:32;;;;;;;;16587:59;;;;;-1:-1:-1;;;16587:59:0;;;;;;;;;;;;-1:-1:-1;;;16587:59:0;;;;;;;;;;;;;;;16539:209;;;16706:10;16688:30;;;;:16;:30;;;;;;;;16679:57;;;;;-1:-1:-1;;;16679:57:0;;;;;;;;;;;;-1:-1:-1;;;16679:57:0;;;;;;;;;;;;;;;16760:10;16773:24;16781:6;16789:7;16773;:24::i;:::-;16760:37;;16826:16;:14;:16::i;:::-;16817:5;:25;;16808:61;;;;;-1:-1:-1;;;16808:61:0;;;;;;;;;;;;-1:-1:-1;;;16808:61:0;;;;;;;;;;;;;;;16898:13;;:26;;16917:5;16898:17;:26::i;:::-;16882:13;:42;;;16940:32;;-1:-1:-1;;;;;;;;;;;16940:32:0;;;;16985:52;-1:-1:-1;;;;;16985:29:0;;17016:10;17028:7;16985:29;:52::i;:::-;17055:34;;;;;;;;-1:-1:-1;;;;;17055:34:0;;;;;;;;;;;;;16471:626;;;:::o;17633:149::-;17681:4;17706:68;17725:47;17761:9;;17733:6;-1:-1:-1;;;;;17725:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17725:30:0;;:34;:47::i;:::-;17706:13;;;:17;:68::i;:::-;17699:75;;17633:149;:::o;8478:52::-;;;;;;;;;;;;;;;:::o;14141:865::-;14231:10;14221:22;;;;:8;:22;;;;;;;;14212:49;;;;;-1:-1:-1;;;14212:49:0;;;;;;;;;;;;-1:-1:-1;;;14212:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14281:24:0;;;;;;:14;:24;;;;;;;;14272:51;;;;;-1:-1:-1;;;14272:51:0;;;;;;;;;;;;-1:-1:-1;;;14272:51:0;;;;;;;;;;;;;;;14336:10;14349:26;14358:6;14366:7;14349;:26::i;:::-;14415:7;;14407:41;;;-1:-1:-1;;;14407:41:0;;14436:10;14407:41;;;;;;14336:39;;-1:-1:-1;14388:16:0;;-1:-1:-1;;;;;14415:7:0;;;;14407:27;;:41;;;;;;;;;;;;;;;14415:7;14407:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14407:41:0;14552:10;14499:18;14537:27;;;:13;14407:41;14537:27;;;;;14407:41;;-1:-1:-1;14499:18:0;14520:46;;14407:41;;14520:15;:46::i;:::-;14499:67;;14595:13;14586:5;:22;;14577:55;;;;;-1:-1:-1;;;14577:55:0;;;;;;;;;;;;-1:-1:-1;;;14577:55:0;;;;;;;;;;;;;;;14690:10;14675:27;;;;:13;:27;;;;;;:40;;14708:5;14675:31;:40::i;:::-;14660:10;14645:27;;;;:13;:27;;;;;:70;14738:9;;:22;;14753:5;14738:13;:22::i;:::-;14726:9;:34;14789:13;;:26;;14808:5;14789:17;:26::i;:::-;14773:13;:42;;;14831:32;;-1:-1:-1;;;;;;;;;;;14831:32:0;;;;14876:48;;;-1:-1:-1;;;14876:48:0;;14903:10;14876:48;;;;;;;;;;;;-1:-1:-1;;;;;14876:25:0;;;;;:48;;;;;;;;;;;;;;-1:-1:-1;14876:25:0;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14950:48:0;;;;;;14876;14950;;;;;;;-1:-1:-1;;;;;14950:48:0;;;14962:10;;14950:48;;;;;;;;;;;14141:865;;;;;:::o;9357:51::-;;;;;;;;;;;;-1:-1:-1;;;;;9357:51:0;;:::o;18755:551::-;-1:-1:-1;;;;;18856:24:0;;18826:11;18856:24;;;:14;:24;;;;;;;;18851:448;;;19007:132;19114:16;:24;19131:6;-1:-1:-1;;;;;19114:24:0;-1:-1:-1;;;;;19114:24:0;;;;;;;;;;;;;19007:102;19101:7;19007:89;19075:6;-1:-1:-1;;;;;19067:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19067:27:0;19026;;;-1:-1:-1;;;19026:27:0;;;;19061:33;;;;:2;:33;;19007:48;;-1:-1:-1;;;;;19034:6:0;19026:25;;;;:27;;;;;19067;;19026;;;;;;;;:25;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19026:27:0;19007:7;;19020:33;;:2;:33;19007:11;:48::i;:::-;:52;;:89::i;:::-;:93;;:102::i;:132::-;18998:141;;18851:448;;;-1:-1:-1;;;;;19162:26:0;;;;;;:16;:26;;;;;;;;19157:142;;;-1:-1:-1;;;;;19232:24:0;;;;;;;:14;:24;;;;;;;;;;19215:72;;-1:-1:-1;;;19215:72:0;;;;;;;;;;;;;;;;;19232:24;;;;;19215:53;;:72;;;;;;;;;;;19232:24;19215:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19215:72:0;;-1:-1:-1;19157:142:0;18755:551;;;;:::o;7935:31::-;;;:::o;15938:388::-;16022:10;16012:22;;;;:8;:22;;;;;;;;16003:49;;;;;-1:-1:-1;;;16003:49:0;;;;;;;;;;;;-1:-1:-1;;;16003:49:0;;;;;;;;;;;;;;;16065:54;;;-1:-1:-1;;;16065:54:0;;16098:10;16065:54;;;;;;;;;;;;-1:-1:-1;;;;;16079:6:0;16065:31;;;;:54;;;;;-1:-1:-1;;16065:54:0;;;;;;;-1:-1:-1;16065:31:0;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16177:10:0;16162:27;;;;:13;:27;;;;;;:42;;-1:-1:-1;16162:27:0;-1:-1:-1;16195:7:0;16162:31;:42::i;:::-;16147:10;16132:27;;;;:13;:27;;;;;:72;16227:9;;:24;;16242:7;16227:13;:24::i;:::-;16215:9;:36;16269:49;;;;;;;;;;;;;;-1:-1:-1;;;;;16292:6:0;16269:49;;16280:10;;16269:49;;;;;;;;;;;15938:388;:::o;8290:50::-;;;;;;;;;;;;;:::o;17935:654::-;17980:13;;18004:221;18025:13;:20;18021:24;;18004:221;;;18079:134;18112:86;18121:13;18136:1;18121:18;;;;;;;;;;;;;;;;;;18149:13;:18;;-1:-1:-1;;;;;18121:18:0;;;;18164:1;;18149:18;;;;;;;;;;;;;;;;;18141:55;;;-1:-1:-1;;;18141:55:0;;18189:4;18141:55;;;;;;-1:-1:-1;;;;;18149:18:0;;;;18141:38;;:55;;;;;;;;;;18149:18;18141:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18141:55:0;18112:7;:86::i;:::-;18079:8;;:12;:134::i;:::-;18068:145;-1:-1:-1;18047:3:0;;18004:221;;;;18240:6;18235:226;18256:15;:22;18252:26;;18235:226;;;18312:137;18344:90;18353:15;18370:1;18353:20;;;;;;;;;;;;;;;;;;18383:15;:20;;-1:-1:-1;;;;;18353:20:0;;;;18400:1;;18383:20;;;;;18312:137;18301:148;-1:-1:-1;18280:3:0;;18235:226;;;-1:-1:-1;18471:13:0;:24;;;18511:27;;18487:8;;-1:-1:-1;;;;;;;;;;;18511:27:0;;;;18554;;18571:8;;18554:27;;;;;17935:654;:::o;8631:32::-;;;;;;;;;;;;12825:430;-1:-1:-1;;;;;12897:24:0;;;;;;:14;:24;;;;;;;;;:54;;-1:-1:-1;;;;;;12925:26:0;;;;;;:16;:26;;;;;;;;12897:54;12888:81;;;;;-1:-1:-1;;;12888:81:0;;;;;;;;;;;;-1:-1:-1;;;12888:81:0;;;;;;;;;;;;;;;12980:71;-1:-1:-1;;;;;12980:33:0;;13015:10;13035:4;13042:7;12980:33;:71::i;:::-;13062:10;13075:24;13083:6;13091:7;13075;:24::i;:::-;13126:13;;13062:37;;-1:-1:-1;13126:26:0;;13062:37;13126:17;:26::i;:::-;13110:13;:42;;;13168:32;;-1:-1:-1;;;;;;;;;;;13168:32:0;;;;13216:31;;;;;;13236:10;13216:31;;;;;;-1:-1:-1;;;;;13216:31:0;;;;;;;;;;;12825:430;;;:::o;4310:261::-;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;4413:23:0;::::1;4404:75;;;;-1:-1:-1::0;;;4404:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4512:6;::::0;;4495:36:::1;::::0;-1:-1:-1;;;;;4495:36:0;;::::1;::::0;4512:6;::::1;::::0;4495:36:::1;::::0;::::1;4542:9;:21:::0;;-1:-1:-1;;;;;;4542:21:0::1;-1:-1:-1::0;;;;;4542:21:0;;;::::1;::::0;;;::::1;::::0;;4310:261::o;3916:90::-;3965:7;3992:6;-1:-1:-1;;;;;3992:6:0;3916:90;:::o;10318:49::-;;;;;;;;;;;;;;;:::o;4583:221::-;4667:9;;-1:-1:-1;;;;;4667:9:0;4653:10;:23;4644:71;;;;-1:-1:-1;;;4644:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4756:9;;;4748:6;;4731:36;;-1:-1:-1;;;;;4756:9:0;;;;4748:6;;;;4731:36;;;4787:9;;;4778:18;;-1:-1:-1;;;;;;4778:18:0;-1:-1:-1;;;;;4787:9:0;;;4778:18;;;;;;4583:221::o;11604:118::-;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;11691:23:::1;11668:20;:46:::0;11604:118::o;8147:48::-;;;;;;;;;;;;;;;:::o;17178:346::-;17281:10;17264:29;;;;:15;:29;;;;;;;;17255:56;;;;;-1:-1:-1;;;17255:56:0;;;;;;;;;;;;-1:-1:-1;;;17255:56:0;;;;;;;;;;;;;;;17342:16;:14;:16::i;:::-;17331:7;:27;;17322:63;;;;;-1:-1:-1;;;17322:63:0;;;;;;;;;;;;-1:-1:-1;;;17322:63:0;;;;;;;;;;;;;;;17414:6;-1:-1:-1;;;;;17398:29:0;;17429:10;17441:7;17398:52;;;;;;;;;;;;;-1:-1:-1;;;;;17398:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17468:48:0;;;;;;;;-1:-1:-1;;;;;17468:48:0;;;-1:-1:-1;17483:10:0;;-1:-1:-1;17468:48:0;;;;;;;;;17178:346;;:::o;8381:34::-;;;;;;;;;;;;9700;;;;;;;;;;;;8202:51;;;;;;;;;;;;;:::o;19708:111::-;-1:-1:-1;;;;;19787:24:0;19764:4;19787:24;;;:16;:24;;;;;;;19708:111::o;9950:24::-;;;;;;;;;;;;8726:50;;;;;;;;;;;;;;;:::o;9009:53::-;;;;;;;;;;;;;:::o;9101:36::-;;;;;;;;;;;;10567:25;;;;:::o;8537:55::-;;;;;;;;;;;;;:::o;10465:22::-;;;-1:-1:-1;;;;;10465:22:0;;:::o;9200:54::-;;;;;;;;;;;;;;;:::o;8952:50::-;;;;;;;;;;;;;;;:::o;9856:55::-;;;;;;;;;;;;;:::o;9608:53::-;;;;;;;;;;;;;:::o;10224:31::-;;;;;;;;;;;;11936:881;-1:-1:-1;;;;;12051:24:0;;12018:10;12051:24;;;:14;:24;;;;;;;;;:54;;-1:-1:-1;;;;;;12079:26:0;;;;;;:16;:26;;;;;;;;12051:54;12042:81;;;;;-1:-1:-1;;;12042:81:0;;;;;;;;;;;;-1:-1:-1;;;12042:81:0;;;;;;;;;;;;;;;12134:71;-1:-1:-1;;;;;12134:33:0;;12169:10;12189:4;12196:7;12134:33;:71::i;:::-;-1:-1:-1;;;;;12223:24:0;;;;;;:14;:24;;;;;;;;12218:212;;;12294:10;12274:32;;;;:18;:32;;;;;;;;12265:59;;;;;-1:-1:-1;;;12265:59:0;;;;;;;;;;;;-1:-1:-1;;;12265:59:0;;;;;;;;;;;;;;;12218:212;;;12388:10;12366:34;;;;:20;:34;;;;;;;;12357:61;;;;;-1:-1:-1;;;12357:61:0;;;;;;;;;;;;-1:-1:-1;;;12357:61:0;;;;;;;;;;;;;;;12442:10;12455:24;12463:6;12471:7;12455;:24::i;:::-;12442:37;-1:-1:-1;12574:20:0;12442:37;12585:7;12574:9;:20::i;:::-;12566:28;;12621:6;-1:-1:-1;;;;;12605:29:0;;12636:10;12648:5;12605:50;;;;;;;;;;;;;-1:-1:-1;;;;;12605:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12684:13:0;;:26;;-1:-1:-1;12684:13:0;-1:-1:-1;12703:5:0;12684:17;:26::i;:::-;12668:13;:42;;;12726:32;;-1:-1:-1;;;;;;;;;;;12726:32:0;;;;12776:33;;;;;;;;;;;;;;-1:-1:-1;;;;;12776:33:0;;;;;;;;;;;11936:881;;;;;;:::o;8783:53::-;;;;;;;;;;;;;:::o;10494:24::-;;;;:::o;19440:260::-;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19531:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;;:29;19523:80:::1;;;;-1:-1:-1::0;;;19523:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;19614:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;;;;;:33;;;19663:29;;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;19440:260:::0;;:::o;10086:45::-;;;;;;;;;;;;;:::o;8072:30::-;;;;;;;;;;;;7973:32;;;;:::o;15173:631::-;15274:10;15264:22;;;;:8;:22;;;;;;;;15255:49;;;;;-1:-1:-1;;;15255:49:0;;;;;;;;;;;;-1:-1:-1;;;15255:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15324:24:0;;;;;;:14;:24;;;;;;;;15315:51;;;;;-1:-1:-1;;;15315:51:0;;;;;;;;;;;;-1:-1:-1;;;15315:51:0;;;;;;;;;;;;;;;15379:71;-1:-1:-1;;;;;15379:33:0;;15414:10;15434:4;15441:7;15379:33;:71::i;:::-;15463:10;15476:26;15485:6;15493:7;15476;:26::i;:::-;15558:10;15543:27;;;;:13;:27;;;;;;15463:39;;-1:-1:-1;15543:40:0;;15463:39;15543:31;:40::i;:::-;15528:10;15513:27;;;;:13;:27;;;;;:70;15606:9;;:22;;15621:5;15606:13;:22::i;:::-;15594:9;:34;15657:13;;:26;;15676:5;15657:17;:26::i;:::-;15641:13;:42;;;15699:32;;-1:-1:-1;;;;;;;;;;;15699:32:0;;;;15749:47;;;;;;;;;;;;;;-1:-1:-1;;;;;15749:47:0;;;15760:10;;15749:47;;;;;;;;;;;15173:631;;;:::o;9797:52::-;;;;;;;;;;;;;;;:::o;19997:1791::-;20085:4;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20112:22:0;::::1;20103:33;;;::::0;::::1;;20165:25;20152:9;:38;;;;;;;;;20147:1558;;;20267:20;::::0;20249:40:::1;::::0;:12:::1;::::0;:16:::1;:40::i;:::-;-1:-1:-1::0;;;;;20213:33:0;::::1;;::::0;;;:21:::1;:33;::::0;;;;:76;20147:1558:::1;;;20325:23;20312:9;:36;;;;;;;;;20307:1398;;;20423:20;::::0;20405:40:::1;::::0;:12:::1;::::0;:16:::1;:40::i;:::-;-1:-1:-1::0;;;;;20371:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:74;20307:1398:::1;;;20481:21;20468:9;:34;;;;;;;;;20463:1242;;;20575:20;::::0;20557:40:::1;::::0;:12:::1;::::0;:16:::1;:40::i;:::-;-1:-1:-1::0;;;;;20525:29:0;::::1;;::::0;;;:17:::1;:29;::::0;;;;:72;20463:1242:::1;;;20633:23;20620:9;:36;;;;;;;;;20615:1090;;;20713:49;20731:29;20757:1;20731:20:::0;::::1;:24;;:29;;;;:::i;:::-;20713:12;::::0;:16:::1;:49::i;:::-;-1:-1:-1::0;;;;;20679:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:83;20615:1090:::1;;;20798:27;20785:9;:40;;;;;;;;;20780:925;;;20904:20;::::0;20886:40:::1;::::0;:12:::1;::::0;:16:::1;:40::i;:::-;-1:-1:-1::0;;;;;20848:35:0;::::1;;::::0;;;:23:::1;:35;::::0;;;;:78;20780:925:::1;;;20962:23;20949:9;:36;;;;;;;;;20944:761;;;21060:20;::::0;21042:40:::1;::::0;:12:::1;::::0;:16:::1;:40::i;:::-;-1:-1:-1::0;;;;;21008:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:74;20944:761:::1;;;21118:25;21105:9;:38;;;;;;;;;21100:605;;;21202:49;21220:29;21246:1;21220:20:::0;::::1;:24;;:29;;;;:::i;21202:49::-;-1:-1:-1::0;;;;;21166:33:0;::::1;;::::0;;;:21:::1;:33;::::0;;;;:85;21100:605:::1;;;21287:15;21274:9;:28;;;;;;;;;21269:436;;;21369:20;::::0;21351:40:::1;::::0;:12:::1;::::0;:16:::1;:40::i;:::-;-1:-1:-1::0;;;;;21325:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;:66;21269:436:::1;;;21427:22;21414:9;:35;;;;;;;;;21409:296;;;21523:20;::::0;21505:40:::1;::::0;:12:::1;::::0;:16:::1;:40::i;:::-;-1:-1:-1::0;;;;;21472:30:0;::::1;;::::0;;;:18:::1;:30:::0;;;;;:73;21409:296:::1;;;21581:16;21568:9;:29;;;;;;;;;21563:142;;;21653:20;::::0;21635:40:::1;::::0;:12:::1;::::0;:16:::1;:40::i;:::-;21620:12;:55:::0;21563:142:::1;;;-1:-1:-1::0;21700:5:0::1;21693:12;;21563:142;21737:9;21723:35;;;;;;;;;::::0;;-1:-1:-1;;;;;21723:35:0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;21776:4:0::1;19997:1791:::0;;;;:::o;9551:50::-;;;;;;;;;;;;;;;:::o;8018:45::-;;;:::o;10037:42::-;;;;;;;;;;;;;;;:::o;10374:52::-;;;;;;;;;;;;;:::o;21998:4842::-;22108:4;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22135:22:0;::::1;22126:33;;;::::0;::::1;;22170:11;::::0;22197:9:::1;:38;;;;;;;;;22192:4554;;;22263:67;22277:21;22300:18;22320:8;22263:12;:67::i;:::-;22258:293;;;-1:-1:-1::0;;;;;22352:33:0;::::1;22388:1;22352:33:::0;;;:21:::1;:33;::::0;;;;:37;22413:43:::1;22427:17;22375:8:::0;22413:12:::1;:43::i;:::-;22408:128;;22482:17;:34:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22482:34:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;22482:34:0::1;-1:-1:-1::0;;;;;22482:34:0;::::1;;::::0;;22408:128:::1;-1:-1:-1::0;;;;;;22575:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;;;::::1;::::0;::::1;22574:31;-1:-1:-1::0;;22620:39:0;;::::1;::::0;::::1;::::0;;;22192:4554:::1;;;22709:23;22696:9;:36;;;;;;;;;22691:4055;;;22760:63;22774:19;22795:16;22813:8;22760:12;:63::i;:::-;22755:283;;;-1:-1:-1::0;;;;;22845:31:0;::::1;22879:1;22845:31:::0;;;:19:::1;:31;::::0;;;;:35;22904:41:::1;22918:15;22866:8:::0;22904:12:::1;:41::i;:::-;22899:124;;22971:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22971:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;22971:32:0::1;-1:-1:-1::0;;;;;22971:32:0;::::1;;::::0;;22899:124:::1;-1:-1:-1::0;;;;;;23062:28:0;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;::::1;::::0;::::1;23061:29;-1:-1:-1::0;;23105:37:0;;::::1;::::0;::::1;::::0;;;22691:4055:::1;;;23180:21;23167:9;:34;;;;;;;;;23162:3584;;;23229:59;23243:17;23262:14;23278:8;23229:12;:59::i;:::-;23224:273;;;-1:-1:-1::0;;;;;23310:29:0;::::1;23342:1;23310:29:::0;;;:17:::1;:29;::::0;;;;:33;23367:39:::1;23381:13;23329:8:::0;23367:12:::1;:39::i;:::-;23362:120;;23432:13;:30:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23432:30:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;23432:30:0::1;-1:-1:-1::0;;;;;23432:30:0;::::1;;::::0;;23362:120:::1;-1:-1:-1::0;;;;;;23521:26:0;::::1;;::::0;;;:14:::1;:26;::::0;;;;;;::::1;::::0;::::1;23520:27;-1:-1:-1::0;;23562:35:0;;::::1;::::0;::::1;::::0;;;23162:3584:::1;;;23635:23;23622:9;:36;;;;;;;;;23617:3129;;;23686:63;23700:19;23721:16;23739:8;23686:12;:63::i;:::-;23681:334;;;23771:15;:32:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;23771:32:0::1;-1:-1:-1::0;;;;;23771:32:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;23822:31:0;;;:19:::1;23771:32;23822:31:::0;;;;:35;23881:41:::1;::::0;23771:32;23881:12:::1;:41::i;:::-;23876:124;;23948:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23948:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;23948:32:0::1;-1:-1:-1::0;;;;;23948:32:0;::::1;;::::0;;23876:124:::1;-1:-1:-1::0;;;;;;24039:28:0;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;::::1;::::0;::::1;24038:29;-1:-1:-1::0;;24082:37:0;;::::1;::::0;::::1;::::0;;;23617:3129:::1;;;24157:27;24144:9;:40;;;;;;;;;24139:2607;;;24212:71;24226:23;24251:20;24273:8;24212:12;:71::i;:::-;24207:358;;;24305:19;:36:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;24305:36:0::1;-1:-1:-1::0;;;;;24305:36:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;24360:35:0;;;:23:::1;24305:36;24360:35:::0;;;;:39;24423:45:::1;::::0;24305:36;24423:12:::1;:45::i;:::-;24418:132;;24494:19;:36:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24494:36:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24494:36:0::1;-1:-1:-1::0;;;;;24494:36:0;::::1;;::::0;;24418:132:::1;-1:-1:-1::0;;;;;;24589:32:0;::::1;;::::0;;;:20:::1;:32;::::0;;;;;;::::1;::::0;::::1;24588:33;-1:-1:-1::0;;24636:41:0;;::::1;::::0;::::1;::::0;;;24139:2607:::1;;;24715:23;24702:9;:36;;;;;;;;;24697:2049;;;24766:63;24780:19;24801:16;24819:8;24766:12;:63::i;:::-;24761:283;;;-1:-1:-1::0;;;;;24851:31:0;::::1;24885:1;24851:31:::0;;;:19:::1;:31;::::0;;;;:35;24910:41:::1;24924:15;24872:8:::0;24910:12:::1;:41::i;:::-;24905:124;;24977:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24977:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24977:32:0::1;-1:-1:-1::0;;;;;24977:32:0;::::1;;::::0;;24905:124:::1;-1:-1:-1::0;;;;;;25068:28:0;;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;;;;::::1;::::0;::::1;25067:29;-1:-1:-1::0;;25111:37:0;;::::1;::::0;::::1;::::0;;;25163:14:::1;:26:::0;;;;;;:40;;-1:-1:-1;;;;;;25163:40:0::1;::::0;;::::1;::::0;;;::::1;::::0;;;24697:2049:::1;;;25241:25;25228:9;:38;;;;;;;;;25223:1523;;;25294:67;25308:21;25331:18;25351:8;25294:12;:67::i;:::-;25289:293;;;-1:-1:-1::0;;;;;25383:33:0;::::1;25419:1;25383:33:::0;;;:21:::1;:33;::::0;;;;:37;25444:43:::1;25458:17;25406:8:::0;25444:12:::1;:43::i;:::-;25439:128;;25513:17;:34:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;25513:34:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;25513:34:0::1;-1:-1:-1::0;;;;;25513:34:0;::::1;;::::0;;25439:128:::1;-1:-1:-1::0;;;;;;25606:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;;;::::1;::::0;::::1;25605:31;-1:-1:-1::0;;25651:39:0;;::::1;::::0;::::1;::::0;;;25223:1523:::1;;;25728:15;25715:9;:28;;;;;;;;;25710:1036;;;25771:47;25785:11;25798:8;25808;25771:12;:47::i;:::-;25766:243;;;-1:-1:-1::0;;;;;25840:23:0;::::1;25866:1;25840:23:::0;;;:11:::1;:23;::::0;;;;:27;25891:33:::1;25905:7;25853:8:::0;25891:12:::1;:33::i;:::-;25886:108;;25950:7;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;25950:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;25950:24:0::1;-1:-1:-1::0;;;;;25950:24:0;::::1;;::::0;;25886:108:::1;-1:-1:-1::0;;;;;;26033:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;;::::1;::::0;::::1;26032:21;-1:-1:-1::0;;26068:29:0;;::::1;::::0;::::1;::::0;;;25710:1036:::1;;;26135:22;26122:9;:35;;;;;;;;;26117:629;;;26185:61;26199:18;26219:15;26236:8;26185:12;:61::i;:::-;26180:278;;;-1:-1:-1::0;;;;;26268:30:0;::::1;26301:1;26268:30:::0;;;:18:::1;:30:::0;;;;;:34;26326:40:::1;26340:14;26288:8:::0;26326:12:::1;:40::i;:::-;26321:122;;26392:14;:31:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;26392:31:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;26392:31:0::1;-1:-1:-1::0;;;;;26392:31:0;::::1;;::::0;;26321:122:::1;-1:-1:-1::0;;;;;;26482:27:0;::::1;;::::0;;;:15:::1;:27;::::0;;;;;;::::1;::::0;::::1;26481:28;-1:-1:-1::0;;26524:36:0;;::::1;::::0;::::1;::::0;;;26117:629:::1;;;26598:16;26585:9;:29;;;;;;;;;26580:166;;;-1:-1:-1::0;26652:1:0::1;26637:12;:16:::0;26668:7:::1;:18:::0;;-1:-1:-1;;;;;;26668:18:0::1;-1:-1:-1::0;;;;;26668:18:0;::::1;;::::0;;-1:-1:-1;26580:166:0::1;;;26741:5;26734:12;;;;;26580:166;26781:9;26764:46;;;;;;;;;::::0;;-1:-1:-1;;;;;26764:46:0;::::1;::::0;;;::::1;;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;26828:4;26821:11;;;4126:1;21998:4842:::0;;;;;:::o;10632:21::-;;;;:::o;8875:32::-;;;;;;;;;;;;9261:57;;;;;;;;;;;;;:::o;288:136::-;346:7;373:43;377:1;380;373:43;;;;;;;;;;;;;;;;;:3;:43::i;5561:177::-;5671:58;;;-1:-1:-1;;;;;5671:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5671:58:0;-1:-1:-1;;;5671:58:0;;;5644:86;;5664:5;;5644:19;:86::i;:::-;5561:177;;;:::o;99:181::-;157:7;189:5;;;213:6;;;;205:46;;;;;-1:-1:-1;;;205:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;632:250;690:7;714:6;710:47;;-1:-1:-1;744:1:0;737:8;;710:47;781:5;;;785:1;781;:5;:1;805:5;;;;;:10;797:56;;;;-1:-1:-1;;;797:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;890:132;948:7;975:39;979:1;982;975:39;;;;;;;;;;;;;;;;;:3;:39::i;5746:205::-;5874:68;;;-1:-1:-1;;;;;5874:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5874:68:0;-1:-1:-1;;;5874:68:0;;;5847:96;;5867:5;;5847:19;:96::i;:::-;5746:205;;;;:::o;27088:438::-;-1:-1:-1;;;;;27301:19:0;;27277:4;27301:19;;;;;;;;;;;;;27295:210;;-1:-1:-1;;;;;27347:18:0;;;;;;;;;;;;;;27338:48;;;;;-1:-1:-1;;;27338:48:0;;;;;;;;;;;;-1:-1:-1;;;27338:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27410:18:0;;;;;;;;;;;;;;27432:12;-1:-1:-1;27410:34:0;27401:66;;;;;-1:-1:-1;;;27401:66:0;;;;;;;;;;;;-1:-1:-1;;;27401:66:0;;;;;;;;;;;;;;;-1:-1:-1;27489:4:0;27482:11;;27295:210;-1:-1:-1;27513:5:0;27088:438;;;;;:::o;27695:277::-;27784:4;;27802:140;27823:12;;27819:16;;27802:140;;;27876:6;-1:-1:-1;;;;;27862:20:0;:5;27869:1;27862:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27862:10:0;:20;27858:73;;;27911:4;27904:11;;;;;27858:73;27837:3;;27802:140;;432:192;518:7;554:12;546:6;;;;538:29;;;;-1:-1:-1;;;538:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;590:5:0;;;432:192::o;5959:418::-;6040:23;6066:69;6094:4;6066:69;;;;;;;;;;;;;;;;;6074:5;-1:-1:-1;;;;;6066:27:0;;;:69;;;;;:::i;:::-;6150:17;;6040:95;;-1:-1:-1;6150:21:0;6146:224;;6292:10;6281:30;;;;;;;;;;;;;;;-1:-1:-1;6281:30:0;6273:85;;;;-1:-1:-1;;;6273:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1030:189;1116:7;1151:12;1144:5;1136:28;;;;-1:-1:-1;;;1136:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1175:9;1191:1;1187;:5;;;;;;;1030:189;-1:-1:-1;;;;;1030:189:0:o;1679:196::-;1782:12;1814:53;1837:6;1845:4;1851:1;1854:12;1814:22;:53::i;:::-;1807:60;1679:196;-1:-1:-1;;;;1679:196:0:o;1883:817::-;2013:12;2046:18;2057:6;2046:10;:18::i;:::-;2038:60;;;;;-1:-1:-1;;;2038:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2172:12;2186:23;2213:6;-1:-1:-1;;;;;2213:11:0;2233:8;2244:4;2213:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2213:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2171:78;;;;2264:7;2260:433;;;2295:10;-1:-1:-1;2288:17:0;;-1:-1:-1;2288:17:0;2260:433;2342:17;;:21;2338:344;;2510:10;2504:17;2571:15;2558:10;2554:2;2550:19;2543:44;2458:148;2646:20;;-1:-1:-1;;;2646:20:0;;;;;;;;;;;;;;;;;2653:12;;2646:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1249:422;1616:20;1655:8;;;1249:422::o
Swarm Source
ipfs://138383546aae90fd6ee919ba3a41d500524c5144e52d8564f795ce5324cc7ea5
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.12
Net Worth in ETH
0.00006
Token Allocations
CRV
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.233038 | 0.5114 | $0.1191 |
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.