Contract 0x3C0c76ceb491Cb0Bacb31F8e7dc6407A25FD87C0 11
Contract Overview
My Name Tag:
Not Available
TokenTracker:
[ Download CSV Export ]
Latest 3 internal transactions
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x3bfa201f885bf35e05f365476930ec188e8188e81aaa8a2a741c0f864af6045a | 69871050 | 379 days 12 hrs ago | 0x3c0c76ceb491cb0bacb31f8e7dc6407a25fd87c0 | Sushiswap: DPX | 0 ETH | ||
0x3bfa201f885bf35e05f365476930ec188e8188e81aaa8a2a741c0f864af6045a | 69871050 | 379 days 12 hrs ago | 0x3c0c76ceb491cb0bacb31f8e7dc6407a25fd87c0 | Sushiswap: DPX | 0 ETH | ||
0x3bfa201f885bf35e05f365476930ec188e8188e81aaa8a2a741c0f864af6045a | 69871050 | 379 days 12 hrs ago | 0x3c0c76ceb491cb0bacb31f8e7dc6407a25fd87c0 | Sushiswap: DPX | 0 ETH |
[ Download CSV Export ]
Contract Name:
VaultSushiWethDpx
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2023-03-14 */ // Sources flattened with hardhat v2.10.1-gzeon-c8fe47dd4 https://hardhat.org // File contracts/interfaces/controller.sol // SPDX-License-Identifier: MIT pragma solidity 0.8.4; interface IController { function vaults(address) external view returns (address); function rewards() external view returns (address); function devfund() external view returns (address); function treasury() external view returns (address); function balanceOf(address) external view returns (uint256); function withdraw(address, uint256) external; function earn(address, uint256) external; // For Big Green Button: function setVault(address _token, address _vault) external; function approveStrategy(address _token, address _strategy) external; function revokeStrategy(address _token, address _strategy) external; function setStrategy(address _token, address _strategy) external; function setStrategist(address _strategist) external; function setGovernance(address _governance) external; function setTimelock(address _timelock) external; } // File contracts/lib/safe-math.sol pragma solidity 0.8.4; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File contracts/lib/context.sol pragma solidity 0.8.4; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File contracts/lib/erc20.sol // File: contracts/GSN/Context.sol pragma solidity 0.8.4; // File: contracts/token/ERC20/IERC20.sol /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on 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; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, 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 { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: contracts/token/ERC20/ERC20.sol /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { 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)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. 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"); } } } // File contracts/vaults/sushi/vault-sushi-weth-dpx.sol // https://github.com/iearn-finance/vaults/blob/master/contracts/vaults/yVault.sol pragma solidity 0.8.4; contract VaultSushiWethDpx is ERC20 { using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; IERC20 public token; uint256 public min = 9500; uint256 public constant max = 10000; address public governance; address public timelock; address public controller; constructor( address _token, address _governance, address _timelock, address _controller ) ERC20( string(abi.encodePacked("freezing ", ERC20(_token).name())), string(abi.encodePacked("s", ERC20(_token).symbol())) ) { _setupDecimals(ERC20(_token).decimals()); token = IERC20(_token); governance = _governance; timelock = _timelock; controller = _controller; } function balance() public view returns (uint256) { return token.balanceOf(address(this)).add( IController(controller).balanceOf(address(token)) ); } function setMin(uint256 _min) external { require(msg.sender == governance, "!governance"); require(_min <= max, "numerator cannot be greater than denominator"); min = _min; } function setGovernance(address _governance) public { require(msg.sender == governance, "!governance"); governance = _governance; } function setTimelock(address _timelock) public { require(msg.sender == timelock, "!timelock"); timelock = _timelock; } function setController(address _controller) public { require(msg.sender == timelock, "!timelock"); controller = _controller; } // Custom logic in here for how much the vault allows to be borrowed // Sets minimum required on-hand to keep small withdrawals cheap function available() public view returns (uint256) { return token.balanceOf(address(this)).mul(min).div(max); } function earn() public { uint256 _bal = available(); token.safeTransfer(controller, _bal); IController(controller).earn(address(token), _bal); } function depositAll() external { deposit(token.balanceOf(msg.sender)); } // Declare a Deposit Event event Deposit(address indexed _from, uint _timestamp, uint _value, uint _shares); function deposit(uint256 _amount) public { uint256 _pool = balance(); uint256 _before = token.balanceOf(address(this)); token.safeTransferFrom(msg.sender, address(this), _amount); uint256 _after = token.balanceOf(address(this)); _amount = _after.sub(_before); // Additional check for deflationary tokens uint256 shares = 0; if (totalSupply() == 0) { shares = _amount; } else { shares = (_amount.mul(totalSupply())).div(_pool); } _mint(msg.sender, shares); emit Deposit(tx.origin, block.timestamp,_amount, shares); } function withdrawAll() external { withdraw(balanceOf(msg.sender)); } // Used to swap any borrowed reserve over the debt limit to liquidate to 'token' function harvest(address reserve, uint256 amount) external { require(msg.sender == controller, "!controller"); require(reserve != address(token), "token"); IERC20(reserve).safeTransfer(controller, amount); } // Declare a Withdraw Event event Withdraw(address indexed _from, uint _timestamp, uint _value, uint _shares); // No rebalance implementation for lower fees and faster swaps function withdraw(uint256 _shares) public { uint256 r = (balance().mul(_shares)).div(totalSupply()); _burn(msg.sender, _shares); // Check balance uint256 b = token.balanceOf(address(this)); if (b < r) { uint256 _withdraw = r.sub(b); IController(controller).withdraw(address(token), _withdraw); uint256 _after = token.balanceOf(address(this)); uint256 _diff = _after.sub(b); if (_diff < _withdraw) { r = b.add(_diff); } } token.safeTransfer(msg.sender, r); emit Withdraw(tx.origin, block.timestamp, r, _shares); } function getRatio() public view returns (uint256) { return balance().mul(1e18).div(totalSupply()); } }
[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_timelock","type":"address"},{"internalType":"address","name":"_controller","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"available","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reserve","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"max","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"min","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"}],"name":"setMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405261251c6006553480156200001757600080fd5b506040516200211a3803806200211a8339810160408190526200003a9162000362565b836001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156200007457600080fd5b505afa15801562000089573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620000b39190810190620003be565b604051602001620000c59190620004c7565b604051602081830303815290604052846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200010e57600080fd5b505afa15801562000123573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200014d9190810190620003be565b6040516020016200015f91906200049c565b60408051601f198184030181529190528151620001849060039060208501906200029f565b5080516200019a9060049060208401906200029f565b50506005805460ff19166012179055506040805163313ce56760e01b8152905162000242916001600160a01b0387169163313ce56791600480820192602092909190829003018186803b158015620001f157600080fd5b505afa15801562000206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022c919062000472565b6005805460ff191660ff92909216919091179055565b600580546001600160a01b0395861661010002610100600160a81b0319909116179055600780549385166001600160a01b031994851617905560088054928516928416929092179091556009805491909316911617905562000580565b828054620002ad906200052d565b90600052602060002090601f016020900481019282620002d157600085556200031c565b82601f10620002ec57805160ff19168380011785556200031c565b828001600101855582156200031c579182015b828111156200031c578251825591602001919060010190620002ff565b506200032a9291506200032e565b5090565b5b808211156200032a57600081556001016200032f565b80516001600160a01b03811681146200035d57600080fd5b919050565b6000806000806080858703121562000378578384fd5b620003838562000345565b9350620003936020860162000345565b9250620003a36040860162000345565b9150620003b36060860162000345565b905092959194509250565b600060208284031215620003d0578081fd5b81516001600160401b0380821115620003e7578283fd5b818401915084601f830112620003fb578283fd5b8151818111156200041057620004106200056a565b604051601f8201601f19908116603f011681019083821181831017156200043b576200043b6200056a565b8160405282815287602084870101111562000454578586fd5b62000467836020830160208801620004fa565b979650505050505050565b60006020828403121562000484578081fd5b815160ff8116811462000495578182fd5b9392505050565b607360f81b815260008251620004ba816001850160208701620004fa565b9190910160010192915050565b680333932b2bd34b733960bd1b815260008251620004ed816009850160208701620004fa565b9190910160090192915050565b60005b8381101562000517578181015183820152602001620004fd565b8381111562000527576000848401525b50505050565b600181811c908216806200054257607f821691505b602082108114156200056457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611b8a80620005906000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806395d89b4111610104578063d33219b4116100a2578063ec1ebd7a11610071578063ec1ebd7a146103f3578063f77c4791146103fb578063f88979451461040e578063fc0c546a1461041757600080fd5b8063d33219b414610397578063d389800f146103aa578063dd62ed3e146103b2578063de5f6268146103eb57600080fd5b8063ab033ea9116100de578063ab033ea914610356578063b69ef8a814610369578063b6b55f2514610371578063bdacb3031461038457600080fd5b806395d89b4114610328578063a457c2d714610330578063a9059cbb1461034357600080fd5b8063395093511161017c5780636ac5db191161014b5780636ac5db19146102db57806370a08231146102e4578063853828b61461030d57806392eefe9b1461031557600080fd5b8063395093511461028257806345dc3dd81461029557806348a0d754146102a85780635aa6e675146102b057600080fd5b806318160ddd116101b857806318160ddd1461023557806323b872dd146102475780632e1a7d4d1461025a578063313ce5671461026d57600080fd5b8063018ee9b7146101df57806306fdde03146101f4578063095ea7b314610212575b600080fd5b6101f26101ed36600461190c565b61042f565b005b6101fc6104e5565b60405161020991906119a1565b60405180910390f35b61022561022036600461190c565b610577565b6040519015158152602001610209565b6002545b604051908152602001610209565b6102256102553660046118d1565b61058e565b6101f2610268366004611955565b6105f7565b60055460405160ff9091168152602001610209565b61022561029036600461190c565b61083e565b6101f26102a3366004611955565b610874565b610239610928565b6007546102c3906001600160a01b031681565b6040516001600160a01b039091168152602001610209565b61023961271081565b6102396102f2366004611885565b6001600160a01b031660009081526020819052604090205490565b6101f26109be565b6101f2610323366004611885565b6109d9565b6101fc610a41565b61022561033e36600461190c565b610a50565b61022561035136600461190c565b610a9f565b6101f2610364366004611885565b610aac565b610239610b16565b6101f261037f366004611955565b610c25565b6101f2610392366004611885565b610de7565b6008546102c3906001600160a01b031681565b6101f2610e4f565b6102396103c036600461189f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101f2610eee565b610239610f70565b6009546102c3906001600160a01b031681565b61023960065481565b6005546102c39061010090046001600160a01b031681565b6009546001600160a01b0316331461047c5760405162461bcd60e51b815260206004820152600b60248201526a10b1b7b73a3937b63632b960a91b60448201526064015b60405180910390fd5b6005546001600160a01b038381166101009092041614156104c75760405162461bcd60e51b81526020600482015260056024820152643a37b5b2b760d91b6044820152606401610473565b6009546104e1906001600160a01b03848116911683610f92565b5050565b6060600380546104f490611a6e565b80601f016020809104026020016040519081016040528092919081815260200182805461052090611a6e565b801561056d5780601f106105425761010080835404028352916020019161056d565b820191906000526020600020905b81548152906001019060200180831161055057829003601f168201915b5050505050905090565b6000610584338484610ffa565b5060015b92915050565b600061059b84848461111f565b6105ed84336105e885604051806060016040528060288152602001611b08602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906112a2565b610ffa565b5060019392505050565b600061061d61060560025490565b61061784610611610b16565b906112dc565b90611362565b905061062933836113a4565b6005546040516370a0823160e01b815230600482015260009161010090046001600160a01b0316906370a082319060240160206040518083038186803b15801561067257600080fd5b505afa158015610686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106aa919061196d565b9050818110156107da5760006106c083836114b0565b60095460055460405163f3fef3a360e01b81526001600160a01b036101009092048216600482015260248101849052929350169063f3fef3a390604401600060405180830381600087803b15801561071757600080fd5b505af115801561072b573d6000803e3d6000fd5b50506005546040516370a0823160e01b8152306004820152600093506101009091046001600160a01b031691506370a082319060240160206040518083038186803b15801561077957600080fd5b505afa15801561078d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b1919061196d565b905060006107bf82856114b0565b9050828110156107d6576107d384826114f2565b94505b5050505b6005546107f69061010090046001600160a01b03163384610f92565b604080514281526020810184905290810184905232907f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca949060600160405180910390a2505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105849185906105e890866114f2565b6007546001600160a01b031633146108bc5760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610473565b6127108111156109235760405162461bcd60e51b815260206004820152602c60248201527f6e756d657261746f722063616e6e6f742062652067726561746572207468616e60448201526b103232b737b6b4b730ba37b960a11b6064820152608401610473565b600655565b6006546005546040516370a0823160e01b81523060048201526000926109b99261271092610617929161010090046001600160a01b0316906370a082319060240160206040518083038186803b15801561098157600080fd5b505afa158015610995573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610611919061196d565b905090565b336000908152602081905260409020546109d7906105f7565b565b6008546001600160a01b03163314610a1f5760405162461bcd60e51b81526020600482015260096024820152682174696d656c6f636b60b81b6044820152606401610473565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480546104f490611a6e565b600061058433846105e885604051806060016040528060258152602001611b30602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906112a2565b600061058433848461111f565b6007546001600160a01b03163314610af45760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610473565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6009546005546040516370a0823160e01b81526001600160a01b03610100909204821660048201526000926109b99216906370a082319060240160206040518083038186803b158015610b6857600080fd5b505afa158015610b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba0919061196d565b6005546040516370a0823160e01b81523060048201526101009091046001600160a01b0316906370a082319060240160206040518083038186803b158015610be757600080fd5b505afa158015610bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1f919061196d565b906114f2565b6000610c2f610b16565b6005546040516370a0823160e01b81523060048201529192506000916101009091046001600160a01b0316906370a082319060240160206040518083038186803b158015610c7c57600080fd5b505afa158015610c90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb4919061196d565b600554909150610cd49061010090046001600160a01b0316333086611551565b6005546040516370a0823160e01b815230600482015260009161010090046001600160a01b0316906370a082319060240160206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d55919061196d565b9050610d6181836114b0565b93506000610d6e60025490565b610d79575083610d93565b610d9084610617610d8960025490565b88906112dc565b90505b610d9d338261158f565b604080514281526020810187905290810182905232907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9060600160405180910390a25050505050565b6008546001600160a01b03163314610e2d5760405162461bcd60e51b81526020600482015260096024820152682174696d656c6f636b60b81b6044820152606401610473565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e59610928565b600954600554919250610e7e9161010090046001600160a01b03908116911683610f92565b60095460055460405163b02bf4b960e01b81526001600160a01b03610100909204821660048201526024810184905291169063b02bf4b990604401600060405180830381600087803b158015610ed357600080fd5b505af1158015610ee7573d6000803e3d6000fd5b5050505050565b6005546040516370a0823160e01b81523360048201526109d79161010090046001600160a01b0316906370a082319060240160206040518083038186803b158015610f3857600080fd5b505afa158015610f4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037f919061196d565b60006109b9610f7e60025490565b610617670de0b6b3a7640000610611610b16565b6040516001600160a01b038316602482015260448101829052610ff590849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611666565b505050565b6001600160a01b03831661105c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610473565b6001600160a01b0382166110bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610473565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166111835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610473565b6001600160a01b0382166111e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610473565b61122281604051806060016040528060268152602001611ae2602691396001600160a01b03861660009081526020819052604090205491906112a2565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461125190826114f2565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611112565b600081848411156112c65760405162461bcd60e51b815260040161047391906119a1565b5060006112d38486611a2b565b95945050505050565b6000826112eb57506000610588565b60006112f78385611a0c565b90508261130485836119ec565b1461135b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610473565b9392505050565b600061135b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611738565b6001600160a01b0382166114045760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610473565b61144181604051806060016040528060228152602001611ac0602291396001600160a01b03851660009081526020819052604090205491906112a2565b6001600160a01b03831660009081526020819052604090205560025461146790826114b0565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600061135b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112a2565b6000806114ff83856119d4565b90508381101561135b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610473565b6040516001600160a01b03808516602483015283166044820152606481018290526115899085906323b872dd60e01b90608401610fbe565b50505050565b6001600160a01b0382166115e55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610473565b6002546115f290826114f2565b6002556001600160a01b03821660009081526020819052604090205461161890826114f2565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016114a4565b60006116bb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166117669092919063ffffffff16565b805190915015610ff557808060200190518101906116d99190611935565b610ff55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610473565b600081836117595760405162461bcd60e51b815260040161047391906119a1565b5060006112d384866119ec565b6060611775848460008561177d565b949350505050565b6060843b6117cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610473565b600080866001600160a01b031685876040516117e99190611985565b60006040518083038185875af1925050503d8060008114611826576040519150601f19603f3d011682016040523d82523d6000602084013e61182b565b606091505b5091509150811561183f5791506117759050565b80511561184f5780518082602001fd5b8360405162461bcd60e51b815260040161047391906119a1565b80356001600160a01b038116811461188057600080fd5b919050565b600060208284031215611896578081fd5b61135b82611869565b600080604083850312156118b1578081fd5b6118ba83611869565b91506118c860208401611869565b90509250929050565b6000806000606084860312156118e5578081fd5b6118ee84611869565b92506118fc60208501611869565b9150604084013590509250925092565b6000806040838503121561191e578182fd5b61192783611869565b946020939093013593505050565b600060208284031215611946578081fd5b8151801515811461135b578182fd5b600060208284031215611966578081fd5b5035919050565b60006020828403121561197e578081fd5b5051919050565b60008251611997818460208701611a42565b9190910192915050565b60208152600082518060208401526119c0816040850160208701611a42565b601f01601f19169190910160400192915050565b600082198211156119e7576119e7611aa9565b500190565b600082611a0757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611a2657611a26611aa9565b500290565b600082821015611a3d57611a3d611aa9565b500390565b60005b83811015611a5d578181015183820152602001611a45565b838111156115895750506000910152565b600181811c90821680611a8257607f821691505b60208210811415611aa357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c5005edb79bdbfd4ad1137f425e094c8bf727096e8aa088ab6f512cbbfa9ab8664736f6c634300080400330000000000000000000000000c1cf6883efa1b496b01f654e247b9b419873054000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc80000000000000000000000001c233a46eae1f928c0467a3c75228e26ea9888d4
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806395d89b4111610104578063d33219b4116100a2578063ec1ebd7a11610071578063ec1ebd7a146103f3578063f77c4791146103fb578063f88979451461040e578063fc0c546a1461041757600080fd5b8063d33219b414610397578063d389800f146103aa578063dd62ed3e146103b2578063de5f6268146103eb57600080fd5b8063ab033ea9116100de578063ab033ea914610356578063b69ef8a814610369578063b6b55f2514610371578063bdacb3031461038457600080fd5b806395d89b4114610328578063a457c2d714610330578063a9059cbb1461034357600080fd5b8063395093511161017c5780636ac5db191161014b5780636ac5db19146102db57806370a08231146102e4578063853828b61461030d57806392eefe9b1461031557600080fd5b8063395093511461028257806345dc3dd81461029557806348a0d754146102a85780635aa6e675146102b057600080fd5b806318160ddd116101b857806318160ddd1461023557806323b872dd146102475780632e1a7d4d1461025a578063313ce5671461026d57600080fd5b8063018ee9b7146101df57806306fdde03146101f4578063095ea7b314610212575b600080fd5b6101f26101ed36600461190c565b61042f565b005b6101fc6104e5565b60405161020991906119a1565b60405180910390f35b61022561022036600461190c565b610577565b6040519015158152602001610209565b6002545b604051908152602001610209565b6102256102553660046118d1565b61058e565b6101f2610268366004611955565b6105f7565b60055460405160ff9091168152602001610209565b61022561029036600461190c565b61083e565b6101f26102a3366004611955565b610874565b610239610928565b6007546102c3906001600160a01b031681565b6040516001600160a01b039091168152602001610209565b61023961271081565b6102396102f2366004611885565b6001600160a01b031660009081526020819052604090205490565b6101f26109be565b6101f2610323366004611885565b6109d9565b6101fc610a41565b61022561033e36600461190c565b610a50565b61022561035136600461190c565b610a9f565b6101f2610364366004611885565b610aac565b610239610b16565b6101f261037f366004611955565b610c25565b6101f2610392366004611885565b610de7565b6008546102c3906001600160a01b031681565b6101f2610e4f565b6102396103c036600461189f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101f2610eee565b610239610f70565b6009546102c3906001600160a01b031681565b61023960065481565b6005546102c39061010090046001600160a01b031681565b6009546001600160a01b0316331461047c5760405162461bcd60e51b815260206004820152600b60248201526a10b1b7b73a3937b63632b960a91b60448201526064015b60405180910390fd5b6005546001600160a01b038381166101009092041614156104c75760405162461bcd60e51b81526020600482015260056024820152643a37b5b2b760d91b6044820152606401610473565b6009546104e1906001600160a01b03848116911683610f92565b5050565b6060600380546104f490611a6e565b80601f016020809104026020016040519081016040528092919081815260200182805461052090611a6e565b801561056d5780601f106105425761010080835404028352916020019161056d565b820191906000526020600020905b81548152906001019060200180831161055057829003601f168201915b5050505050905090565b6000610584338484610ffa565b5060015b92915050565b600061059b84848461111f565b6105ed84336105e885604051806060016040528060288152602001611b08602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906112a2565b610ffa565b5060019392505050565b600061061d61060560025490565b61061784610611610b16565b906112dc565b90611362565b905061062933836113a4565b6005546040516370a0823160e01b815230600482015260009161010090046001600160a01b0316906370a082319060240160206040518083038186803b15801561067257600080fd5b505afa158015610686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106aa919061196d565b9050818110156107da5760006106c083836114b0565b60095460055460405163f3fef3a360e01b81526001600160a01b036101009092048216600482015260248101849052929350169063f3fef3a390604401600060405180830381600087803b15801561071757600080fd5b505af115801561072b573d6000803e3d6000fd5b50506005546040516370a0823160e01b8152306004820152600093506101009091046001600160a01b031691506370a082319060240160206040518083038186803b15801561077957600080fd5b505afa15801561078d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b1919061196d565b905060006107bf82856114b0565b9050828110156107d6576107d384826114f2565b94505b5050505b6005546107f69061010090046001600160a01b03163384610f92565b604080514281526020810184905290810184905232907f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca949060600160405180910390a2505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105849185906105e890866114f2565b6007546001600160a01b031633146108bc5760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610473565b6127108111156109235760405162461bcd60e51b815260206004820152602c60248201527f6e756d657261746f722063616e6e6f742062652067726561746572207468616e60448201526b103232b737b6b4b730ba37b960a11b6064820152608401610473565b600655565b6006546005546040516370a0823160e01b81523060048201526000926109b99261271092610617929161010090046001600160a01b0316906370a082319060240160206040518083038186803b15801561098157600080fd5b505afa158015610995573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610611919061196d565b905090565b336000908152602081905260409020546109d7906105f7565b565b6008546001600160a01b03163314610a1f5760405162461bcd60e51b81526020600482015260096024820152682174696d656c6f636b60b81b6044820152606401610473565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480546104f490611a6e565b600061058433846105e885604051806060016040528060258152602001611b30602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906112a2565b600061058433848461111f565b6007546001600160a01b03163314610af45760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610473565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6009546005546040516370a0823160e01b81526001600160a01b03610100909204821660048201526000926109b99216906370a082319060240160206040518083038186803b158015610b6857600080fd5b505afa158015610b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba0919061196d565b6005546040516370a0823160e01b81523060048201526101009091046001600160a01b0316906370a082319060240160206040518083038186803b158015610be757600080fd5b505afa158015610bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1f919061196d565b906114f2565b6000610c2f610b16565b6005546040516370a0823160e01b81523060048201529192506000916101009091046001600160a01b0316906370a082319060240160206040518083038186803b158015610c7c57600080fd5b505afa158015610c90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb4919061196d565b600554909150610cd49061010090046001600160a01b0316333086611551565b6005546040516370a0823160e01b815230600482015260009161010090046001600160a01b0316906370a082319060240160206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d55919061196d565b9050610d6181836114b0565b93506000610d6e60025490565b610d79575083610d93565b610d9084610617610d8960025490565b88906112dc565b90505b610d9d338261158f565b604080514281526020810187905290810182905232907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9060600160405180910390a25050505050565b6008546001600160a01b03163314610e2d5760405162461bcd60e51b81526020600482015260096024820152682174696d656c6f636b60b81b6044820152606401610473565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e59610928565b600954600554919250610e7e9161010090046001600160a01b03908116911683610f92565b60095460055460405163b02bf4b960e01b81526001600160a01b03610100909204821660048201526024810184905291169063b02bf4b990604401600060405180830381600087803b158015610ed357600080fd5b505af1158015610ee7573d6000803e3d6000fd5b5050505050565b6005546040516370a0823160e01b81523360048201526109d79161010090046001600160a01b0316906370a082319060240160206040518083038186803b158015610f3857600080fd5b505afa158015610f4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037f919061196d565b60006109b9610f7e60025490565b610617670de0b6b3a7640000610611610b16565b6040516001600160a01b038316602482015260448101829052610ff590849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611666565b505050565b6001600160a01b03831661105c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610473565b6001600160a01b0382166110bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610473565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166111835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610473565b6001600160a01b0382166111e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610473565b61122281604051806060016040528060268152602001611ae2602691396001600160a01b03861660009081526020819052604090205491906112a2565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461125190826114f2565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611112565b600081848411156112c65760405162461bcd60e51b815260040161047391906119a1565b5060006112d38486611a2b565b95945050505050565b6000826112eb57506000610588565b60006112f78385611a0c565b90508261130485836119ec565b1461135b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610473565b9392505050565b600061135b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611738565b6001600160a01b0382166114045760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610473565b61144181604051806060016040528060228152602001611ac0602291396001600160a01b03851660009081526020819052604090205491906112a2565b6001600160a01b03831660009081526020819052604090205560025461146790826114b0565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600061135b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112a2565b6000806114ff83856119d4565b90508381101561135b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610473565b6040516001600160a01b03808516602483015283166044820152606481018290526115899085906323b872dd60e01b90608401610fbe565b50505050565b6001600160a01b0382166115e55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610473565b6002546115f290826114f2565b6002556001600160a01b03821660009081526020819052604090205461161890826114f2565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016114a4565b60006116bb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166117669092919063ffffffff16565b805190915015610ff557808060200190518101906116d99190611935565b610ff55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610473565b600081836117595760405162461bcd60e51b815260040161047391906119a1565b5060006112d384866119ec565b6060611775848460008561177d565b949350505050565b6060843b6117cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610473565b600080866001600160a01b031685876040516117e99190611985565b60006040518083038185875af1925050503d8060008114611826576040519150601f19603f3d011682016040523d82523d6000602084013e61182b565b606091505b5091509150811561183f5791506117759050565b80511561184f5780518082602001fd5b8360405162461bcd60e51b815260040161047391906119a1565b80356001600160a01b038116811461188057600080fd5b919050565b600060208284031215611896578081fd5b61135b82611869565b600080604083850312156118b1578081fd5b6118ba83611869565b91506118c860208401611869565b90509250929050565b6000806000606084860312156118e5578081fd5b6118ee84611869565b92506118fc60208501611869565b9150604084013590509250925092565b6000806040838503121561191e578182fd5b61192783611869565b946020939093013593505050565b600060208284031215611946578081fd5b8151801515811461135b578182fd5b600060208284031215611966578081fd5b5035919050565b60006020828403121561197e578081fd5b5051919050565b60008251611997818460208701611a42565b9190910192915050565b60208152600082518060208401526119c0816040850160208701611a42565b601f01601f19169190910160400192915050565b600082198211156119e7576119e7611aa9565b500190565b600082611a0757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611a2657611a26611aa9565b500290565b600082821015611a3d57611a3d611aa9565b500390565b60005b83811015611a5d578181015183820152602001611a45565b838111156115895750506000910152565b600181811c90821680611a8257607f821691505b60208210811415611aa357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c5005edb79bdbfd4ad1137f425e094c8bf727096e8aa088ab6f512cbbfa9ab8664736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000c1cf6883efa1b496b01f654e247b9b419873054000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc80000000000000000000000001c233a46eae1f928c0467a3c75228e26ea9888d4
-----Decoded View---------------
Arg [0] : _token (address): 0x0C1Cf6883efA1B496B01f654E247B9b419873054
Arg [1] : _governance (address): 0xCb410A689A03E06de0a6247b13C13D14237DecC8
Arg [2] : _timelock (address): 0xCb410A689A03E06de0a6247b13C13D14237DecC8
Arg [3] : _controller (address): 0x1C233a46eAE1F928c0467a3C75228E26Ea9888d4
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000c1cf6883efa1b496b01f654e247b9b419873054
Arg [1] : 000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8
Arg [2] : 000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8
Arg [3] : 0000000000000000000000001c233a46eae1f928c0467a3c75228e26ea9888d4
Deployed ByteCode Sourcemap
31105:4505:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34357:239;;;;;;:::i;:::-;;:::i;:::-;;18483:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20589:169;;;;;;:::i;:::-;;:::i;:::-;;;3287:14:1;;3280:22;3262:41;;3250:2;3235:18;20589:169:0;3217:92:1;19558:100:0;19638:12;;19558:100;;;9740:25:1;;;9728:2;9713:18;19558:100:0;9695:76:1;21232:321:0;;;;;;:::i;:::-;;:::i;34796:689::-;;;;;;:::i;:::-;;:::i;19410:83::-;19476:9;;19410:83;;19476:9;;;;10242:36:1;;10230:2;10215:18;19410:83:0;10197:87:1;21962:218:0;;;;;;:::i;:::-;;:::i;32167:206::-;;;;;;:::i;:::-;;:::i;32992:125::-;;;:::i;31352:25::-;;;;;-1:-1:-1;;;;;31352:25:0;;;;;;-1:-1:-1;;;;;2419:32:1;;;2401:51;;2389:2;2374:18;31352:25:0;2356:102:1;31308:35:0;;31338:5;31308:35;;19721:119;;;;;;:::i;:::-;-1:-1:-1;;;;;19814:18:0;19787:7;19814:18;;;;;;;;;;;;19721:119;34181:82;;;:::i;32691:149::-;;;;;;:::i;:::-;;:::i;18685:87::-;;;:::i;22683:269::-;;;;;;:::i;:::-;;:::i;20053:175::-;;;;;;:::i;:::-;;:::i;32381:153::-;;;;;;:::i;:::-;;:::i;31954:205::-;;;:::i;33525:648::-;;;;;;:::i;:::-;;:::i;32542:141::-;;;;;;:::i;:::-;;:::i;31384:23::-;;;;;-1:-1:-1;;;;;31384:23:0;;;33125:176;;;:::i;20291:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;20407:18:0;;;20380:7;20407:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20291:151;33309:86;;;:::i;35493:114::-;;;:::i;31414:25::-;;;;;-1:-1:-1;;;;;31414:25:0;;;31276;;;;;;31248:19;;;;;;;;-1:-1:-1;;;;;31248:19:0;;;34357:239;34449:10;;-1:-1:-1;;;;;34449:10:0;34435;:24;34427:48;;;;-1:-1:-1;;;34427:48:0;;5273:2:1;34427:48:0;;;5255:21:1;5312:2;5292:18;;;5285:30;-1:-1:-1;;;5331:18:1;;;5324:41;5382:18;;34427:48:0;;;;;;;;;34513:5;;-1:-1:-1;;;;;34494:25:0;;;34513:5;;;;;34494:25;;34486:43;;;;-1:-1:-1;;;34486:43:0;;6784:2:1;34486:43:0;;;6766:21:1;6823:1;6803:18;;;6796:29;-1:-1:-1;;;6841:18:1;;;6834:35;6886:18;;34486:43:0;6756:154:1;34486:43:0;34569:10;;34540:48;;-1:-1:-1;;;;;34540:28:0;;;;34569:10;34581:6;34540:28;:48::i;:::-;34357:239;;:::o;18483:83::-;18520:13;18553:5;18546:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18483:83;:::o;20589:169::-;20672:4;20689:39;7211:10;20712:7;20721:6;20689:8;:39::i;:::-;-1:-1:-1;20746:4:0;20589:169;;;;;:::o;21232:321::-;21338:4;21355:36;21365:6;21373:9;21384:6;21355:9;:36::i;:::-;21402:121;21411:6;7211:10;21433:89;21471:6;21433:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21433:19:0;;;;;;:11;:19;;;;;;;;7211:10;21433:33;;;;;;;;;;:37;:89::i;:::-;21402:8;:121::i;:::-;-1:-1:-1;21541:4:0;21232:321;;;;;:::o;34796:689::-;34849:9;34861:43;34890:13;19638:12;;;19558:100;34890:13;34862:22;34876:7;34862:9;:7;:9::i;:::-;:13;;:22::i;:::-;34861:28;;:43::i;:::-;34849:55;;34915:26;34921:10;34933:7;34915:5;:26::i;:::-;34992:5;;:30;;-1:-1:-1;;;34992:30:0;;35016:4;34992:30;;;2401:51:1;34980:9:0;;34992:5;;;-1:-1:-1;;;;;34992:5:0;;:15;;2374:18:1;;34992:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34980:42;;35041:1;35037;:5;35033:334;;;35059:17;35079:8;:1;35085;35079:5;:8::i;:::-;35114:10;;35143:5;;35102:59;;-1:-1:-1;;;35102:59:0;;-1:-1:-1;;;;;35114:10:0;35143:5;;;;;35102:59;;;3017:51:1;3084:18;;;3077:34;;;;;-1:-1:-1;35114:10:0;;35102:32;;2990:18:1;;35102:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35193:5:0;;:30;;-1:-1:-1;;;35193:30:0;;35217:4;35193:30;;;2401:51:1;35176:14:0;;-1:-1:-1;35193:5:0;;;;-1:-1:-1;;;;;35193:5:0;;-1:-1:-1;35193:15:0;;2374:18:1;;35193:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35176:47;-1:-1:-1;35238:13:0;35254;35176:47;35265:1;35254:10;:13::i;:::-;35238:29;;35294:9;35286:5;:17;35282:74;;;35328:12;:1;35334:5;35328;:12::i;:::-;35324:16;;35282:74;35033:334;;;;35379:5;;:33;;:5;;;-1:-1:-1;;;;;35379:5:0;35398:10;35410:1;35379:18;:33::i;:::-;35428:48;;;35448:15;9978:25:1;;10034:2;10019:18;;10012:34;;;10062:18;;;10055:34;;;35437:9:0;;35428:48;;9966:2:1;9951:18;35428:48:0;;;;;;;34796:689;;;:::o;21962:218::-;7211:10;22050:4;22099:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22099:34:0;;;;;;;;;;22050:4;;22067:83;;22090:7;;22099:50;;22138:10;22099:38;:50::i;32167:206::-;32239:10;;-1:-1:-1;;;;;32239:10:0;32225;:24;32217:48;;;;-1:-1:-1;;;32217:48:0;;4530:2:1;32217:48:0;;;4512:21:1;4569:2;4549:18;;;4542:30;-1:-1:-1;;;4588:18:1;;;4581:41;4639:18;;32217:48:0;4502:161:1;32217:48:0;31338:5;32284:4;:11;;32276:68;;;;-1:-1:-1;;;32276:68:0;;5613:2:1;32276:68:0;;;5595:21:1;5652:2;5632:18;;;5625:30;5691:34;5671:18;;;5664:62;-1:-1:-1;;;5742:18:1;;;5735:42;5794:19;;32276:68:0;5585:234:1;32276:68:0;32355:3;:10;32167:206::o;32992:125::-;33096:3;;33061:5;;:30;;-1:-1:-1;;;33061:30:0;;33085:4;33061:30;;;2401:51:1;33034:7:0;;33061:48;;31338:5;;33061:39;;33096:3;33061:5;;;-1:-1:-1;;;;;33061:5:0;;:15;;2374:18:1;;33061:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:48::-;33054:55;;32992:125;:::o;34181:82::-;34243:10;19787:7;19814:18;;;;;;;;;;;34224:31;;34796:689;:::i;34224:31::-;34181:82::o;32691:149::-;32775:8;;-1:-1:-1;;;;;32775:8:0;32761:10;:22;32753:44;;;;-1:-1:-1;;;32753:44:0;;9099:2:1;32753:44:0;;;9081:21:1;9138:1;9118:18;;;9111:29;-1:-1:-1;;;9156:18:1;;;9149:39;9205:18;;32753:44:0;9071:158:1;32753:44:0;32808:10;:24;;-1:-1:-1;;;;;;32808:24:0;-1:-1:-1;;;;;32808:24:0;;;;;;;;;;32691:149::o;18685:87::-;18724:13;18757:7;18750:14;;;;;:::i;22683:269::-;22776:4;22793:129;7211:10;22816:7;22825:96;22864:15;22825:96;;;;;;;;;;;;;;;;;7211:10;22825:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22825:34:0;;;;;;;;;;;;:38;:96::i;20053:175::-;20139:4;20156:42;7211:10;20180:9;20191:6;20156:9;:42::i;32381:153::-;32465:10;;-1:-1:-1;;;;;32465:10:0;32451;:24;32443:48;;;;-1:-1:-1;;;32443:48:0;;4530:2:1;32443:48:0;;;4512:21:1;4569:2;4549:18;;;4542:30;-1:-1:-1;;;4588:18:1;;;4581:41;4639:18;;32443:48:0;4502:161:1;32443:48:0;32502:10;:24;;-1:-1:-1;;;;;;32502:24:0;-1:-1:-1;;;;;32502:24:0;;;;;;;;;;32381:153::o;31954:205::-;32099:10;;32129:5;;32087:49;;-1:-1:-1;;;32087:49:0;;-1:-1:-1;;;;;32099:10:0;32129:5;;;;;32087:49;;;2401:51:1;-1:-1:-1;;32034:117:0;;32099:10;;32087:33;;2374:18:1;;32087:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32034:5;;:30;;-1:-1:-1;;;32034:30:0;;32058:4;32034:30;;;2401:51:1;32034:5:0;;;;-1:-1:-1;;;;;32034:5:0;;:15;;2374:18:1;;32034:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;:117::i;33525:648::-;33577:13;33593:9;:7;:9::i;:::-;33631:5;;:30;;-1:-1:-1;;;33631:30:0;;33655:4;33631:30;;;2401:51:1;33577:25:0;;-1:-1:-1;33613:15:0;;33631:5;;;;-1:-1:-1;;;;;33631:5:0;;:15;;2374:18:1;;33631:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33672:5;;33613:48;;-1:-1:-1;33672:58:0;;:5;;;-1:-1:-1;;;;;33672:5:0;33695:10;33715:4;33722:7;33672:22;:58::i;:::-;33758:5;;:30;;-1:-1:-1;;;33758:30:0;;33782:4;33758:30;;;2401:51:1;33741:14:0;;33758:5;;;-1:-1:-1;;;;;33758:5:0;;:15;;2374:18:1;;33758:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33741:47;-1:-1:-1;33809:19:0;33741:47;33820:7;33809:10;:19::i;:::-;33799:29;;33883:14;33916:13;19638:12;;;19558:100;33916:13;33912:148;;-1:-1:-1;33960:7:0;33912:148;;;34009:39;34042:5;34010:26;34022:13;19638:12;;;19558:100;34022:13;34010:7;;:11;:26::i;34009:39::-;34000:48;;33912:148;34070:25;34076:10;34088:6;34070:5;:25::i;:::-;34113:51;;;34132:15;9978:25:1;;10034:2;10019:18;;10012:34;;;10062:18;;;10055:34;;;34121:9:0;;34113:51;;9966:2:1;9951:18;34113:51:0;;;;;;;33525:648;;;;;:::o;32542:141::-;32622:8;;-1:-1:-1;;;;;32622:8:0;32608:10;:22;32600:44;;;;-1:-1:-1;;;32600:44:0;;9099:2:1;32600:44:0;;;9081:21:1;9138:1;9118:18;;;9111:29;-1:-1:-1;;;9156:18:1;;;9149:39;9205:18;;32600:44:0;9071:158:1;32600:44:0;32655:8;:20;;-1:-1:-1;;;;;;32655:20:0;-1:-1:-1;;;;;32655:20:0;;;;;;;;;;32542:141::o;33125:176::-;33159:12;33174:11;:9;:11::i;:::-;33215:10;;33196:5;;33159:26;;-1:-1:-1;33196:36:0;;33215:10;33196:5;;-1:-1:-1;;;;;33196:5:0;;;;33215:10;33159:26;33196:18;:36::i;:::-;33255:10;;33280:5;;33243:50;;-1:-1:-1;;;33243:50:0;;-1:-1:-1;;;;;33255:10:0;33280:5;;;;;33243:50;;;3017:51:1;3084:18;;;3077:34;;;33255:10:0;;;33243:28;;2990:18:1;;33243:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33125:176;:::o;33309:86::-;33359:5;;:27;;-1:-1:-1;;;33359:27:0;;33375:10;33359:27;;;2401:51:1;33351:36:0;;33359:5;;;-1:-1:-1;;;;;33359:5:0;;:15;;2374:18:1;;33359:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35493:114::-;35534:7;35561:38;35585:13;19638:12;;;19558:100;35585:13;35561:19;35575:4;35561:9;:7;:9::i;27857:177::-;27967:58;;-1:-1:-1;;;;;3035:32:1;;27967:58:0;;;3017:51:1;3084:18;;;3077:34;;;27940:86:0;;27960:5;;-1:-1:-1;;;27990:23:0;2990:18:1;;27967:58:0;;;;-1:-1:-1;;27967:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;27967:58:0;-1:-1:-1;;;;;;27967:58:0;;;;;;;;;;27940:19;:86::i;:::-;27857:177;;;:::o;25828:346::-;-1:-1:-1;;;;;25930:19:0;;25922:68;;;;-1:-1:-1;;;25922:68:0;;7925:2:1;25922:68:0;;;7907:21:1;7964:2;7944:18;;;7937:30;8003:34;7983:18;;;7976:62;-1:-1:-1;;;8054:18:1;;;8047:34;8098:19;;25922:68:0;7897:226:1;25922:68:0;-1:-1:-1;;;;;26009:21:0;;26001:68;;;;-1:-1:-1;;;26001:68:0;;4870:2:1;26001:68:0;;;4852:21:1;4909:2;4889:18;;;4882:30;4948:34;4928:18;;;4921:62;-1:-1:-1;;;4999:18:1;;;4992:32;5041:19;;26001:68:0;4842:224:1;26001:68:0;-1:-1:-1;;;;;26082:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26134:32;;9740:25:1;;;26134:32:0;;9713:18:1;26134:32:0;;;;;;;;25828:346;;;:::o;23442:539::-;-1:-1:-1;;;;;23548:20:0;;23540:70;;;;-1:-1:-1;;;23540:70:0;;7519:2:1;23540:70:0;;;7501:21:1;7558:2;7538:18;;;7531:30;7597:34;7577:18;;;7570:62;-1:-1:-1;;;7648:18:1;;;7641:35;7693:19;;23540:70:0;7491:227:1;23540:70:0;-1:-1:-1;;;;;23629:23:0;;23621:71;;;;-1:-1:-1;;;23621:71:0;;4126:2:1;23621:71:0;;;4108:21:1;4165:2;4145:18;;;4138:30;4204:34;4184:18;;;4177:62;-1:-1:-1;;;4255:18:1;;;4248:33;4298:19;;23621:71:0;4098:225:1;23621:71:0;23785;23807:6;23785:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23785:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;23765:17:0;;;:9;:17;;;;;;;;;;;:91;;;;23890:20;;;;;;;:32;;23915:6;23890:24;:32::i;:::-;-1:-1:-1;;;;;23867:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;23938:35;9740:25:1;;;23867:20:0;;23938:35;;;;;;9713:18:1;23938:35:0;9695:76:1;2946:192:0;3032:7;3068:12;3060:6;;;;3052:29;;;;-1:-1:-1;;;3052:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3092:9:0;3104:5;3108:1;3104;:5;:::i;:::-;3092:17;2946:192;-1:-1:-1;;;;;2946:192:0:o;3397:471::-;3455:7;3700:6;3696:47;;-1:-1:-1;3730:1:0;3723:8;;3696:47;3755:9;3767:5;3771:1;3767;:5;:::i;:::-;3755:17;-1:-1:-1;3800:1:0;3791:5;3795:1;3755:17;3791:5;:::i;:::-;:10;3783:56;;;;-1:-1:-1;;;3783:56:0;;6382:2:1;3783:56:0;;;6364:21:1;6421:2;6401:18;;;6394:30;6460:34;6440:18;;;6433:62;-1:-1:-1;;;6511:18:1;;;6504:31;6552:19;;3783:56:0;6354:223:1;3783:56:0;3859:1;3397:471;-1:-1:-1;;;3397:471:0:o;4344:132::-;4402:7;4429:39;4433:1;4436;4429:39;;;;;;;;;;;;;;;;;:3;:39::i;24972:418::-;-1:-1:-1;;;;;25056:21:0;;25048:67;;;;-1:-1:-1;;;25048:67:0;;7117:2:1;25048:67:0;;;7099:21:1;7156:2;7136:18;;;7129:30;7195:34;7175:18;;;7168:62;-1:-1:-1;;;7246:18:1;;;7239:31;7287:19;;25048:67:0;7089:223:1;25048:67:0;25211:68;25234:6;25211:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25211:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;25190:18:0;;:9;:18;;;;;;;;;;:89;25305:12;;:24;;25322:6;25305:16;:24::i;:::-;25290:12;:39;25345:37;;9740:25:1;;;25371:1:0;;-1:-1:-1;;;;;25345:37:0;;;;;9728:2:1;9713:18;25345:37:0;;;;;;;;24972:418;;:::o;2507:136::-;2565:7;2592:43;2596:1;2599;2592:43;;;;;;;;;;;;;;;;;:3;:43::i;2043:181::-;2101:7;;2133:5;2137:1;2133;:5;:::i;:::-;2121:17;;2162:1;2157;:6;;2149:46;;;;-1:-1:-1;;;2149:46:0;;6026:2:1;2149:46:0;;;6008:21:1;6065:2;6045:18;;;6038:30;6104:29;6084:18;;;6077:57;6151:18;;2149:46:0;5998:177:1;28042:205:0;28170:68;;-1:-1:-1;;;;;2721:15:1;;;28170:68:0;;;2703:34:1;2773:15;;2753:18;;;2746:43;2805:18;;;2798:34;;;28143:96:0;;28163:5;;-1:-1:-1;;;28193:27:0;2638:18:1;;28170:68:0;2620:218:1;28143:96:0;28042:205;;;;:::o;24262:378::-;-1:-1:-1;;;;;24346:21:0;;24338:65;;;;-1:-1:-1;;;24338:65:0;;9436:2:1;24338:65:0;;;9418:21:1;9475:2;9455:18;;;9448:30;9514:33;9494:18;;;9487:61;9565:18;;24338:65:0;9408:181:1;24338:65:0;24493:12;;:24;;24510:6;24493:16;:24::i;:::-;24478:12;:39;-1:-1:-1;;;;;24549:18:0;;:9;:18;;;;;;;;;;;:30;;24572:6;24549:22;:30::i;:::-;-1:-1:-1;;;;;24528:18:0;;:9;:18;;;;;;;;;;;:51;;;;24595:37;;9740:25:1;;;24528:18:0;;:9;;24595:37;;9713:18:1;24595:37:0;9695:76:1;30162:761:0;30586:23;30612:69;30640:4;30612:69;;;;;;;;;;;;;;;;;30620:5;-1:-1:-1;;;;;30612:27:0;;;:69;;;;;:::i;:::-;30696:17;;30586:95;;-1:-1:-1;30696:21:0;30692:224;;30838:10;30827:30;;;;;;;;;;;;:::i;:::-;30819:85;;;;-1:-1:-1;;;30819:85:0;;8688:2:1;30819:85:0;;;8670:21:1;8727:2;8707:18;;;8700:30;8766:34;8746:18;;;8739:62;-1:-1:-1;;;8817:18:1;;;8810:40;8867:19;;30819:85:0;8660:232:1;4972:278:0;5058:7;5093:12;5086:5;5078:28;;;;-1:-1:-1;;;5078:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5117:9:0;5129:5;5133:1;5129;:5;:::i;13986:196::-;14089:12;14121:53;14144:6;14152:4;14158:1;14161:12;14121:22;:53::i;:::-;14114:60;13986:196;-1:-1:-1;;;;13986:196:0:o;15363:979::-;15493:12;11435:20;;15518:60;;;;-1:-1:-1;;;15518:60:0;;8330:2:1;15518:60:0;;;8312:21:1;8369:2;8349:18;;;8342:30;8408:31;8388:18;;;8381:59;8457:18;;15518:60:0;8302:179:1;15518:60:0;15652:12;15666:23;15693:6;-1:-1:-1;;;;;15693:11:0;15713:8;15724:4;15693:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15651:78;;;;15744:7;15740:595;;;15775:10;-1:-1:-1;15768:17:0;;-1:-1:-1;15768:17:0;15740:595;15889:17;;:21;15885:439;;16152:10;16146:17;16213:15;16200:10;16196:2;16192:19;16185:44;16100:148;16295:12;16288:20;;-1:-1:-1;;;16288:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:196::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:270::-;461:6;469;522:2;510:9;501:7;497:23;493:32;490:2;;;543:6;535;528:22;490:2;571:29;590:9;571:29;:::i;:::-;561:39;;619:38;653:2;642:9;638:18;619:38;:::i;:::-;609:48;;480:183;;;;;:::o;668:338::-;745:6;753;761;814:2;802:9;793:7;789:23;785:32;782:2;;;835:6;827;820:22;782:2;863:29;882:9;863:29;:::i;:::-;853:39;;911:38;945:2;934:9;930:18;911:38;:::i;:::-;901:48;;996:2;985:9;981:18;968:32;958:42;;772:234;;;;;:::o;1011:264::-;1079:6;1087;1140:2;1128:9;1119:7;1115:23;1111:32;1108:2;;;1161:6;1153;1146:22;1108:2;1189:29;1208:9;1189:29;:::i;:::-;1179:39;1265:2;1250:18;;;;1237:32;;-1:-1:-1;;;1098:177:1:o;1280:297::-;1347:6;1400:2;1388:9;1379:7;1375:23;1371:32;1368:2;;;1421:6;1413;1406:22;1368:2;1458:9;1452:16;1511:5;1504:13;1497:21;1490:5;1487:32;1477:2;;1538:6;1530;1523:22;1582:190;1641:6;1694:2;1682:9;1673:7;1669:23;1665:32;1662:2;;;1715:6;1707;1700:22;1662:2;-1:-1:-1;1743:23:1;;1652:120;-1:-1:-1;1652:120:1:o;1777:194::-;1847:6;1900:2;1888:9;1879:7;1875:23;1871:32;1868:2;;;1921:6;1913;1906:22;1868:2;-1:-1:-1;1949:16:1;;1858:113;-1:-1:-1;1858:113:1:o;1976:274::-;2105:3;2143:6;2137:13;2159:53;2205:6;2200:3;2193:4;2185:6;2181:17;2159:53;:::i;:::-;2228:16;;;;;2113:137;-1:-1:-1;;2113:137:1:o;3536:383::-;3685:2;3674:9;3667:21;3648:4;3717:6;3711:13;3760:6;3755:2;3744:9;3740:18;3733:34;3776:66;3835:6;3830:2;3819:9;3815:18;3810:2;3802:6;3798:15;3776:66;:::i;:::-;3903:2;3882:15;-1:-1:-1;;3878:29:1;3863:45;;;;3910:2;3859:54;;3657:262;-1:-1:-1;;3657:262:1:o;10289:128::-;10329:3;10360:1;10356:6;10353:1;10350:13;10347:2;;;10366:18;;:::i;:::-;-1:-1:-1;10402:9:1;;10337:80::o;10422:217::-;10462:1;10488;10478:2;;-1:-1:-1;;;10513:31:1;;10567:4;10564:1;10557:15;10595:4;10520:1;10585:15;10478:2;-1:-1:-1;10624:9:1;;10468:171::o;10644:168::-;10684:7;10750:1;10746;10742:6;10738:14;10735:1;10732:21;10727:1;10720:9;10713:17;10709:45;10706:2;;;10757:18;;:::i;:::-;-1:-1:-1;10797:9:1;;10696:116::o;10817:125::-;10857:4;10885:1;10882;10879:8;10876:2;;;10890:18;;:::i;:::-;-1:-1:-1;10927:9:1;;10866:76::o;10947:258::-;11019:1;11029:113;11043:6;11040:1;11037:13;11029:113;;;11119:11;;;11113:18;11100:11;;;11093:39;11065:2;11058:10;11029:113;;;11160:6;11157:1;11154:13;11151:2;;;-1:-1:-1;;11195:1:1;11177:16;;11170:27;11000:205::o;11210:380::-;11289:1;11285:12;;;;11332;;;11353:2;;11407:4;11399:6;11395:17;11385:27;;11353:2;11460;11452:6;11449:14;11429:18;11426:38;11423:2;;;11506:10;11501:3;11497:20;11494:1;11487:31;11541:4;11538:1;11531:15;11569:4;11566:1;11559:15;11423:2;;11265:325;;;:::o;11595:127::-;11656:10;11651:3;11647:20;11644:1;11637:31;11687:4;11684:1;11677:15;11711:4;11708:1;11701:15
Metadata Hash
c5005edb79bdbfd4ad1137f425e094c8bf727096e8aa088ab6f512cbbfa9ab86
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.