Contract
0x3bc41521a7bF38b279FC5C3BD6C0DC290767b115
1
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
VVSMaker
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-09-27 */ /** *Submitted for verification at cronoscan.com on 2022-04-07 */ // File @openzeppelin/contracts/math/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @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, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @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) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * 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); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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 @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @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 @openzeppelin/contracts/utils/[email protected] pragma solidity >=0.6.2 <0.8.0; /** * @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"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { 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 @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @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 @vvs-finance/vvs-swap-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IVVSPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File @vvs-finance/vvs-swap-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IVVSFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File @openzeppelin/contracts/utils/[email protected] pragma solidity >=0.6.0 <0.8.0; /* * @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 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 @openzeppelin/contracts/access/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File contracts/VVSMaker.sol pragma solidity ^0.6.12; // VVSMaker receives swap fees in the form of LP from the swaps made on Cronos bling swap // This contract buys back VVS from the fee collected and distribute the vvs to xVVS and Treasury contract VVSMaker is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; IVVSFactory public immutable factory; address public immutable bar; address public immutable vvs; address public immutable wcro; address public treasury; uint256 public barFeeShare; //(1-100 parts) rest fee share will be given to treasury uint256 public maxSlipaage = 5000; //1-10_000 parts (5000 = 50%) mapping(address => address) internal _bridges; event UpdateMaxSlippage(uint256 maxSlipaage); event UpdateTreasury(address treasury); event UpdateBarFeeShare(uint256 barFeeShare); event LogBridgeSet(address indexed token, address indexed bridge); event LogConvert( address indexed server, address indexed token0, address indexed token1, uint256 amount0, uint256 amount1, uint256 treasuryAmt, uint256 barAmt ); constructor( address _factory, address _bar, address _treasury, address _vvs, address _wcro, uint256 _barFeeShare ) public { require(_barFeeShare <= 100, "VVSMaker: invalid barFeeShare percentage"); factory = IVVSFactory(_factory); bar = _bar; treasury = _treasury; vvs = _vvs; wcro = _wcro; barFeeShare = _barFeeShare; } function updateTreasury(address _treasury) external onlyOwner { require(_treasury != address(0), "setTokenToAddress, address cannot be zero address"); treasury = _treasury; emit UpdateTreasury(_treasury); } function updateBarFeeShare(uint256 _barFeeShare) external onlyOwner { require(_barFeeShare <= 100, "VVSMaker: invalid barFeeShare percentage"); barFeeShare = _barFeeShare; emit UpdateBarFeeShare(_barFeeShare); } function updateMaxSlippage(uint256 _slippage) external onlyOwner { require(_slippage <= 5000, "VVSMaker: slippage overflow"); maxSlipaage = _slippage; emit UpdateMaxSlippage(_slippage); } function bridgeFor(address token) public view returns (address bridge) { bridge = _bridges[token]; if (bridge == address(0)) { bridge = wcro; } } function setBridge(address token, address bridge) external onlyOwner { require( token != vvs && token != wcro && token != bridge, "VVSMaker: Invalid bridge" ); _bridges[token] = bridge; emit LogBridgeSet(token, bridge); } // It's not a fool proof solution, but it prevents flash loans, so here it's ok to use tx.origin modifier onlyEOA() { // Try to make flash-loan exploit harder to do by only allowing externally owned addresses. require(msg.sender == tx.origin, "VVSMaker: must use EOA"); _; } // _convert is separate to save gas by only checking the 'onlyEOA' modifier once in case of convertMultiple //the onlyEOA modifier prevents this being done with a flash loan. function convert(address token0, address token1) external onlyEOA() onlyOwner { _convert(token0, token1); } function convertMultiple( address[] calldata token0, address[] calldata token1 ) external onlyEOA() onlyOwner { // TODO: This can be optimized a fair bit, but this is safer and simpler for now uint256 len = token0.length; for (uint256 i = 0; i < len; i++) { _convert(token0[i], token1[i]); } } function _convert(address token0, address token1) internal { IVVSPair pair = IVVSPair(factory.getPair(token0, token1)); require(address(pair) != address(0), "VVSMaker: Invalid pair"); IERC20(address(pair)).safeTransfer( address(pair), pair.balanceOf(address(this)) ); (uint256 amount0, uint256 amount1) = pair.burn(address(this)); if (token0 != pair.token0()) { (amount0, amount1) = (amount1, amount0); } uint vvsOut = _convertStep(token0, token1, amount0, amount1); uint barAmt = vvsOut.mul(barFeeShare).div(100); uint treasuryAmt = vvsOut.sub(barAmt); IERC20(vvs).safeTransfer(treasury, treasuryAmt); IERC20(vvs).safeTransfer(bar, barAmt); emit LogConvert( msg.sender, token0, token1, amount0, amount1, treasuryAmt, barAmt ); } function _convertStep( address token0, address token1, uint256 amount0, uint256 amount1 ) internal returns (uint256 vvsOut) { // Interactions if (token0 == token1) { uint256 amount = amount0.add(amount1); if (token0 == vvs) { vvsOut = amount; } else if (token0 == wcro) { vvsOut = _toVVS(wcro, amount); } else { address bridge = bridgeFor(token0); amount = _swap(token0, bridge, amount, address(this)); vvsOut = _convertStep(bridge, bridge, amount, 0); } } else if (token0 == vvs) { vvsOut = _toVVS(token1, amount1).add(amount0); } else if (token1 == vvs) { vvsOut = _toVVS(token0, amount0).add(amount1); } else if (token0 == wcro) { vvsOut = _toVVS( wcro, _swap(token1, wcro, amount1, address(this)).add(amount0) ); } else if (token1 == wcro) { vvsOut = _toVVS( wcro, _swap(token0, wcro, amount0, address(this)).add(amount1) ); } else { address bridge0 = bridgeFor(token0); address bridge1 = bridgeFor(token1); if (bridge0 == token1) { vvsOut = _convertStep( bridge0, token1, _swap(token0, bridge0, amount0, address(this)), amount1 ); } else if (bridge1 == token0) { vvsOut = _convertStep( token0, bridge1, amount0, _swap(token1, bridge1, amount1, address(this)) ); } else { vvsOut = _convertStep( bridge0, bridge1, _swap(token0, bridge0, amount0, address(this)), _swap(token1, bridge1, amount1, address(this)) ); } } } function _swap( address fromToken, address toToken, uint256 amountIn, address to ) internal returns (uint256 amountOut) { IVVSPair pair = IVVSPair(factory.getPair(fromToken, toToken)); require(address(pair) != address(0), "VVSMaker: Cannot convert"); (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); (uint256 reserveInput, uint256 reserveOutput) = fromToken == pair.token0() ? (reserve0, reserve1) : (reserve1, reserve0); IERC20(fromToken).safeTransfer(address(pair), amountIn); uint256 amountInput = IERC20(fromToken).balanceOf(address(pair)).sub(reserveInput); // calculate transfer fees amountOut = getAmountOut(amountInput, reserveInput, reserveOutput); { uint256 rest = uint256(10000).sub(maxSlipaage); /// We simulate the amount received if we did a swapIn and swapOut without updating the reserves, /// hence why we do rest^2, i.e. calculating the slippage twice cause we actually do two swaps. /// This allows us to catch if a pair has low liquidity require( getAmountOut(amountOut, reserveOutput, reserveInput) >= amountInput.mul(rest).mul(rest).div(100000000), //10_000 * 10_000 "VVSMaker: low liquidity" ); } (uint256 amount0Out, uint256 amount1Out) = fromToken == pair.token0() ? (uint256(0), amountOut) : (amountOut, uint256(0)); pair.swap(amount0Out, amount1Out, to, new bytes(0)); } function _toVVS(address token, uint256 amountIn) internal returns (uint256 amountOut) { amountOut = _swap(token, vvs, amountIn, address(this)); } // using the function from vvs library to save gas function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) { require(amountIn > 0, 'VVSLibrary: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'VVSLibrary: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(997); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } }
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_bar","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_vvs","type":"address"},{"internalType":"address","name":"_wcro","type":"address"},{"internalType":"uint256","name":"_barFeeShare","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"bridge","type":"address"}],"name":"LogBridgeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"server","type":"address"},{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"barAmt","type":"uint256"}],"name":"LogConvert","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"barFeeShare","type":"uint256"}],"name":"UpdateBarFeeShare","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxSlipaage","type":"uint256"}],"name":"UpdateMaxSlippage","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"treasury","type":"address"}],"name":"UpdateTreasury","type":"event"},{"inputs":[],"name":"bar","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"barFeeShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"bridgeFor","outputs":[{"internalType":"address","name":"bridge","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"convert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"token0","type":"address[]"},{"internalType":"address[]","name":"token1","type":"address[]"}],"name":"convertMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IVVSFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSlipaage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bridge","type":"address"}],"name":"setBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_barFeeShare","type":"uint256"}],"name":"updateBarFeeShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slippage","type":"uint256"}],"name":"updateMaxSlippage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"updateTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vvs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wcro","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
61010060405261138860035534801561001757600080fd5b50604051620021aa380380620021aa833981810160405260c081101561003c57600080fd5b508051602082015160408301516060840151608085015160a0909501519394929391929091600061006b61014a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060648111156100f65760405162461bcd60e51b8152600401808060200182810382526028815260200180620021826028913960400191505060405180910390fd5b606095861b6001600160601b031990811660805294861b851660a052600180546001600160a01b0319166001600160a01b03959095169490941790935590841b831660c05290921b1660e05260025561014e565b3390565b60805160601c60a05160601c60c05160601c60e05160601c611f8e620001f4600039806106ed528061080b528061083252806110c5528061110252806111ff528061123c5280611265528061129252806112cf52806112f852508061035452806106b05280610f1f5280610f555280611083528061116252806111b75280611605525080610c105280610f775250806109195280610c3a52806116375250611f8e6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063a761a939116100a2578063c45a015511610071578063c45a0155146102e2578063cc998a5f146102ea578063f2fde38b14610307578063f896acc71461032d578063febb0f7e1461034a5761010b565b8063a761a9391461027e578063af2dd0e6146102a4578063bd1b820c146102ac578063c0efaaf6146102da5761010b565b8063715018a6116100de578063715018a61461021a5780637f51bb1f146102225780638da5cb5b146102485780639d22ae8c146102505761010b565b806308e773441461011057806327e2f20914610134578063303e6aa41461014e57806361d027b314610212575b600080fd5b610118610352565b604080516001600160a01b039092168252519081900360200190f35b61013c610376565b60408051918252519081900360200190f35b6102106004803603604081101561016457600080fd5b81019060208101813564010000000081111561017f57600080fd5b82018360208201111561019157600080fd5b803590602001918460208302840111640100000000831117156101b357600080fd5b9193909290916020810190356401000000008111156101d157600080fd5b8201836020820111156101e357600080fd5b8035906020019184602083028401116401000000008311171561020557600080fd5b50909250905061037c565b005b610118610487565b610210610496565b6102106004803603602081101561023857600080fd5b50356001600160a01b0316610542565b61011861063d565b6102106004803603604081101561026657600080fd5b506001600160a01b038135811691602001351661064c565b6101186004803603602081101561029457600080fd5b50356001600160a01b03166107e8565b610118610830565b610210600480360360408110156102c257600080fd5b506001600160a01b0381358116916020013516610854565b61013c610911565b610118610917565b6102106004803603602081101561030057600080fd5b503561093b565b6102106004803603602081101561031d57600080fd5b50356001600160a01b0316610a18565b6102106004803603602081101561034357600080fd5b5035610b1a565b610118610c0e565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025481565b3332146103c9576040805162461bcd60e51b81526020600482015260166024820152755656534d616b65723a206d7573742075736520454f4160501b604482015290519081900360640190fd5b6103d1610c32565b6001600160a01b03166103e261063d565b6001600160a01b03161461042b576040805162461bcd60e51b81526020600482018190526024820152600080516020611ec2833981519152604482015290519081900360640190fd5b8260005b8181101561047f5761047786868381811061044657fe5b905060200201356001600160a01b031685858481811061046257fe5b905060200201356001600160a01b0316610c36565b60010161042f565b505050505050565b6001546001600160a01b031681565b61049e610c32565b6001600160a01b03166104af61063d565b6001600160a01b0316146104f8576040805162461bcd60e51b81526020600482018190526024820152600080516020611ec2833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61054a610c32565b6001600160a01b031661055b61063d565b6001600160a01b0316146105a4576040805162461bcd60e51b81526020600482018190526024820152600080516020611ec2833981519152604482015290519081900360640190fd5b6001600160a01b0381166105e95760405162461bcd60e51b8152600401808060200182810382526031815260200180611e4e6031913960400191505060405180910390fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f1f54d231bb9d500b1923e4a1cb25e600f366a8368873d9af7c1c623814df19fc9181900360200190a150565b6000546001600160a01b031690565b610654610c32565b6001600160a01b031661066561063d565b6001600160a01b0316146106ae576040805162461bcd60e51b81526020600482018190526024820152600080516020611ec2833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415801561072257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156107405750806001600160a01b0316826001600160a01b031614155b610791576040805162461bcd60e51b815260206004820152601860248201527f5656534d616b65723a20496e76616c6964206272696467650000000000000000604482015290519081900360640190fd5b6001600160a01b0382811660008181526004602052604080822080546001600160a01b0319169486169485179055517f2e103aa707acc565f9a1547341914802b2bfe977fd79c595209f248ae4b006139190a35050565b6001600160a01b03808216600090815260046020526040902054168061082b57507f00000000000000000000000000000000000000000000000000000000000000005b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b3332146108a1576040805162461bcd60e51b81526020600482015260166024820152755656534d616b65723a206d7573742075736520454f4160501b604482015290519081900360640190fd5b6108a9610c32565b6001600160a01b03166108ba61063d565b6001600160a01b031614610903576040805162461bcd60e51b81526020600482018190526024820152600080516020611ec2833981519152604482015290519081900360640190fd5b61090d8282610c36565b5050565b60035481565b7f000000000000000000000000000000000000000000000000000000000000000081565b610943610c32565b6001600160a01b031661095461063d565b6001600160a01b03161461099d576040805162461bcd60e51b81526020600482018190526024820152600080516020611ec2833981519152604482015290519081900360640190fd5b60648111156109dd5760405162461bcd60e51b8152600401808060200182810382526028815260200180611f316028913960400191505060405180910390fd5b60028190556040805182815290517f8306799281887eb8f9c822e8cdb277c66366c7186c7cd6f4d5eb20636a5a18b29181900360200190a150565b610a20610c32565b6001600160a01b0316610a3161063d565b6001600160a01b031614610a7a576040805162461bcd60e51b81526020600482018190526024820152600080516020611ec2833981519152604482015290519081900360640190fd5b6001600160a01b038116610abf5760405162461bcd60e51b8152600401808060200182810382526026815260200180611e026026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b610b22610c32565b6001600160a01b0316610b3361063d565b6001600160a01b031614610b7c576040805162461bcd60e51b81526020600482018190526024820152600080516020611ec2833981519152604482015290519081900360640190fd5b611388811115610bd3576040805162461bcd60e51b815260206004820152601b60248201527f5656534d616b65723a20736c697070616765206f766572666c6f770000000000604482015290519081900360640190fd5b60038190556040805182815290517f4a89796ff6202e1af14e40383f1d399e7e962b57662c1d62ce91f56201ab6e049181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a4390584846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015610cb657600080fd5b505afa158015610cca573d6000803e3d6000fd5b505050506040513d6020811015610ce057600080fd5b505190506001600160a01b038116610d38576040805162461bcd60e51b81526020600482015260166024820152752b2b29a6b0b5b2b91d1024b73b30b634b2103830b4b960511b604482015290519081900360640190fd5b610dc681826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610d8957600080fd5b505afa158015610d9d573d6000803e3d6000fd5b505050506040513d6020811015610db357600080fd5b50516001600160a01b0384169190611000565b600080826001600160a01b03166389afcb44306040518263ffffffff1660e01b815260040180826001600160a01b031681526020019150506040805180830381600087803b158015610e1757600080fd5b505af1158015610e2b573d6000803e3d6000fd5b505050506040513d6040811015610e4157600080fd5b50805160209182015160408051630dfe168160e01b815290519295509093506001600160a01b03861692630dfe168192600480840193829003018186803b158015610e8b57600080fd5b505afa158015610e9f573d6000803e3d6000fd5b505050506040513d6020811015610eb557600080fd5b50516001600160a01b03868116911614610ecb57905b6000610ed986868585611057565b90506000610efd6064610ef7600254856113cc90919063ffffffff16565b9061142e565b90506000610f0b8383611495565b600154909150610f48906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683611000565b610f9c6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000084611000565b60408051868152602081018690528082018390526060810184905290516001600160a01b03808a1692908b169133917f24c161da1a42522d536b6562a1a7517a74a0fb9c0bd24666ec210d98c9ae8844919081900360800190a45050505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110529084906114f2565b505050565b6000836001600160a01b0316856001600160a01b0316141561116057600061107f84846115a3565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614156110c35780915061115a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316141561112e576111277f0000000000000000000000000000000000000000000000000000000000000000826115fd565b915061115a565b6000611139876107e8565b905061114787828430611632565b91506111568182846000611057565b9250505b506113c4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614156111b5576111ae836111a886856115fd565b906115a3565b90506113c4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614156111fd576111ae826111a887866115fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415611290576111ae7f000000000000000000000000000000000000000000000000000000000000000061128b856111a8887f00000000000000000000000000000000000000000000000000000000000000008830611632565b6115fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316141561131e576111ae7f000000000000000000000000000000000000000000000000000000000000000061128b846111a8897f00000000000000000000000000000000000000000000000000000000000000008930611632565b6000611329866107e8565b90506000611336866107e8565b9050856001600160a01b0316826001600160a01b031614156113705761136982876113638a868a30611632565b87611057565b92506113c1565b866001600160a01b0316816001600160a01b031614156113a15761136987828761139c8a868a30611632565b611057565b6113be82826113b28a868a30611632565b61139c8a868a30611632565b92505b50505b949350505050565b6000826113db57506000611428565b828202828482816113e857fe5b04146114255760405162461bcd60e51b8152600401808060200182810382526021815260200180611ea16021913960400191505060405180910390fd5b90505b92915050565b6000808211611484576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161148d57fe5b049392505050565b6000828211156114ec576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6060611547826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b259092919063ffffffff16565b8051909150156110525780806020019051602081101561156657600080fd5b50516110525760405162461bcd60e51b815260040180806020018281038252602a815260200180611f07602a913960400191505060405180910390fd5b600082820183811015611425576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061162b837f00000000000000000000000000000000000000000000000000000000000000008430611632565b9392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a4390587876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156116b357600080fd5b505afa1580156116c7573d6000803e3d6000fd5b505050506040513d60208110156116dd57600080fd5b505190506001600160a01b03811661173c576040805162461bcd60e51b815260206004820152601860248201527f5656534d616b65723a2043616e6e6f7420636f6e766572740000000000000000604482015290519081900360640190fd5b600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561177857600080fd5b505afa15801561178c573d6000803e3d6000fd5b505050506040513d60608110156117a257600080fd5b50805160209182015160408051630dfe168160e01b815290516dffffffffffffffffffffffffffff938416965092909116935060009283926001600160a01b03881692630dfe1681926004808301939192829003018186803b15801561180757600080fd5b505afa15801561181b573d6000803e3d6000fd5b505050506040513d602081101561183157600080fd5b50516001600160a01b038b811691161461184c57828461184f565b83835b90925090506118686001600160a01b038b16868a611000565b60006118ed838c6001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156118bb57600080fd5b505afa1580156118cf573d6000803e3d6000fd5b505050506040513d60208110156118e557600080fd5b505190611495565b90506118fa818484611b34565b9650600061191560035461271061149590919063ffffffff16565b90506119336305f5e100610ef78361192d86826113cc565b906113cc565b61193e898587611b34565b1015611991576040805162461bcd60e51b815260206004820152601760248201527f5656534d616b65723a206c6f77206c6971756964697479000000000000000000604482015290519081900360640190fd5b50600080876001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d60208110156119f857600080fd5b50516001600160a01b038e8116911614611a1457886000611a18565b6000895b604080516000808252602082019092529294509092506001600160a01b038a169163022c0d9f91859185918f9190506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611aae578181015183820152602001611a96565b50505050905090810190601f168015611adb5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015611afd57600080fd5b505af1158015611b11573d6000803e3d6000fd5b505050505050505050505050949350505050565b60606113c48484600085611c06565b6000808411611b745760405162461bcd60e51b8152600401808060200182810382526025815260200180611ee26025913960400191505060405180910390fd5b600083118015611b845750600082115b611bbf5760405162461bcd60e51b8152600401808060200182810382526022815260200180611e7f6022913960400191505060405180910390fd5b6000611bcd856103e56113cc565b90506000611bdb82856113cc565b90506000611bef836111a8886103e86113cc565b9050808281611bfa57fe5b04979650505050505050565b606082471015611c475760405162461bcd60e51b8152600401808060200182810382526026815260200180611e286026913960400191505060405180910390fd5b611c5085611d57565b611ca1576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310611ce05780518252601f199092019160209182019101611cc1565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611d42576040519150601f19603f3d011682016040523d82523d6000602084013e611d47565b606091505b50915091506113be828286611d5d565b3b151590565b60608315611d6c57508161162b565b825115611d7c5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611dc6578181015183820152602001611dae565b50505050905090810190601f168015611df35780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c736574546f6b656e546f416464726573732c20616464726573732063616e6e6f74206265207a65726f20616464726573735656534c6962726172793a20494e53554646494349454e545f4c4951554944495459536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725656534c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645656534d616b65723a20696e76616c69642062617246656553686172652070657263656e74616765a26469706673582212204376b5191174120c01603883c69c598e2419ae64754aae13771d7bbae7cd720b64736f6c634300060c00335656534d616b65723a20696e76616c69642062617246656553686172652070657263656e746167650000000000000000000000003b44b2a187a7b3824131f8db5a74194d0a42fc150000000000000000000000007fe4db9063b7dd7ba55313b9c258070bed2c143a000000000000000000000000e09f3b486c6d45cf7017d5d45dfb3ab35f8a51b80000000000000000000000002d03bece6747adc00e1a131bba1469c15fd11e030000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae230000000000000000000000000000000000000000000000000000000000000050
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003b44b2a187a7b3824131f8db5a74194d0a42fc150000000000000000000000007fe4db9063b7dd7ba55313b9c258070bed2c143a000000000000000000000000e09f3b486c6d45cf7017d5d45dfb3ab35f8a51b80000000000000000000000002d03bece6747adc00e1a131bba1469c15fd11e030000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae230000000000000000000000000000000000000000000000000000000000000050
-----Decoded View---------------
Arg [0] : _factory (address): 0x3b44b2a187a7b3824131f8db5a74194d0a42fc15
Arg [1] : _bar (address): 0x7fe4db9063b7dd7ba55313b9c258070bed2c143a
Arg [2] : _treasury (address): 0xe09f3b486c6d45cf7017d5d45dfb3ab35f8a51b8
Arg [3] : _vvs (address): 0x2d03bece6747adc00e1a131bba1469c15fd11e03
Arg [4] : _wcro (address): 0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Arg [5] : _barFeeShare (uint256): 80
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000003b44b2a187a7b3824131f8db5a74194d0a42fc15
Arg [1] : 0000000000000000000000007fe4db9063b7dd7ba55313b9c258070bed2c143a
Arg [2] : 000000000000000000000000e09f3b486c6d45cf7017d5d45dfb3ab35f8a51b8
Arg [3] : 0000000000000000000000002d03bece6747adc00e1a131bba1469c15fd11e03
Arg [4] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000050
Deployed ByteCode Sourcemap
29075:9228:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29257:28;;;:::i;:::-;;;;-1:-1:-1;;;;;29257:28:0;;;;;;;;;;;;;;29358:26;;;:::i;:::-;;;;;;;;;;;;;;;;32335:370;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32335:370:0;;-1:-1:-1;32335:370:0;-1:-1:-1;32335:370:0;:::i;:::-;;29328:23;;;:::i;28257:148::-;;;:::i;30483:238::-;;;;;;;;;;;;;;;;-1:-1:-1;30483:238:0;-1:-1:-1;;;;;30483:238:0;;:::i;27606:87::-;;;:::i;31406:288::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31406:288:0;;;;;;;;;;:::i;31208:190::-;;;;;;;;;;;;;;;;-1:-1:-1;31208:190:0;-1:-1:-1;;;;;31208:190:0;;:::i;29292:29::-;;;:::i;32206:121::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32206:121:0;;;;;;;;;;:::i;29448:33::-;;;:::i;29179:36::-;;;:::i;30729:243::-;;;;;;;;;;;;;;;;-1:-1:-1;30729:243:0;;:::i;28560:244::-;;;;;;;;;;;;;;;;-1:-1:-1;28560:244:0;-1:-1:-1;;;;;28560:244:0;;:::i;30980:220::-;;;;;;;;;;;;;;;;-1:-1:-1;30980:220:0;;:::i;29222:28::-;;;:::i;29257:::-;;;:::o;29358:26::-;;;;:::o;32335:370::-;31943:10;31957:9;31943:23;31935:58;;;;;-1:-1:-1;;;31935:58:0;;;;;;;;;;;;-1:-1:-1;;;31935:58:0;;;;;;;;;;;;;;;27837:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;27826:23:0::1;:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;27826:23:0::1;;27818:68;;;::::0;;-1:-1:-1;;;27818:68:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;27818:68:0;;;;;;;;;;;;;::::1;;32583:6:::0;32569:11:::2;32607:91;32631:3;32627:1;:7;32607:91;;;32656:30;32665:6;;32672:1;32665:9;;;;;;;;;;;;;-1:-1:-1::0;;;;;32665:9:0::2;32676:6;;32683:1;32676:9;;;;;;;;;;;;;-1:-1:-1::0;;;;;32676:9:0::2;32656:8;:30::i;:::-;32636:3;;32607:91;;;;27897:1;32335:370:::0;;;;:::o;29328:23::-;;;-1:-1:-1;;;;;29328:23:0;;:::o;28257:148::-;27837:12;:10;:12::i;:::-;-1:-1:-1;;;;;27826:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;27826:23:0;;27818:68;;;;;-1:-1:-1;;;27818:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27818:68:0;;;;;;;;;;;;;;;28364:1:::1;28348:6:::0;;28327:40:::1;::::0;-1:-1:-1;;;;;28348:6:0;;::::1;::::0;28327:40:::1;::::0;28364:1;;28327:40:::1;28395:1;28378:19:::0;;-1:-1:-1;;;;;;28378:19:0::1;::::0;;28257:148::o;30483:238::-;27837:12;:10;:12::i;:::-;-1:-1:-1;;;;;27826:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;27826:23:0;;27818:68;;;;;-1:-1:-1;;;27818:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27818:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30564:23:0;::::1;30556:85;;;;-1:-1:-1::0;;;30556:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30652:8;:20:::0;;-1:-1:-1;;;;;30652:20:0;::::1;-1:-1:-1::0;;;;;;30652:20:0;;::::1;::::0;::::1;::::0;;;30688:25:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;30483:238:::0;:::o;27606:87::-;27652:7;27679:6;-1:-1:-1;;;;;27679:6:0;27606:87;:::o;31406:288::-;27837:12;:10;:12::i;:::-;-1:-1:-1;;;;;27826:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;27826:23:0;;27818:68;;;;;-1:-1:-1;;;27818:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27818:68:0;;;;;;;;;;;;;;;31517:3:::1;-1:-1:-1::0;;;;;31508:12:0::1;:5;-1:-1:-1::0;;;;;31508:12:0::1;;;:29;;;;;31533:4;-1:-1:-1::0;;;;;31524:13:0::1;:5;-1:-1:-1::0;;;;;31524:13:0::1;;;31508:29;:48;;;;;31550:6;-1:-1:-1::0;;;;;31541:15:0::1;:5;-1:-1:-1::0;;;;;31541:15:0::1;;;31508:48;31486:122;;;::::0;;-1:-1:-1;;;31486:122:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;31619:15:0;;::::1;;::::0;;;:8:::1;:15;::::0;;;;;:24;;-1:-1:-1;;;;;;31619:24:0::1;::::0;;::::1;::::0;;::::1;::::0;;31659:27;::::1;::::0;31619:15;31659:27:::1;31406:288:::0;;:::o;31208:190::-;-1:-1:-1;;;;;31299:15:0;;;31263:14;31299:15;;;:8;:15;;;;;;;31329:20;31325:66;;-1:-1:-1;31375:4:0;31325:66;31208:190;;;:::o;29292:29::-;;;:::o;32206:121::-;31943:10;31957:9;31943:23;31935:58;;;;;-1:-1:-1;;;31935:58:0;;;;;;;;;;;;-1:-1:-1;;;31935:58:0;;;;;;;;;;;;;;;27837:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;27826:23:0::1;:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;27826:23:0::1;;27818:68;;;::::0;;-1:-1:-1;;;27818:68:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;27818:68:0;;;;;;;;;;;;;::::1;;32295:24:::2;32304:6;32312;32295:8;:24::i;:::-;32206:121:::0;;:::o;29448:33::-;;;;:::o;29179:36::-;;;:::o;30729:243::-;27837:12;:10;:12::i;:::-;-1:-1:-1;;;;;27826:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;27826:23:0;;27818:68;;;;;-1:-1:-1;;;27818:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27818:68:0;;;;;;;;;;;;;;;30832:3:::1;30816:12;:19;;30808:72;;;;-1:-1:-1::0;;;30808:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30891:11;:26:::0;;;30933:31:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;30729:243:::0;:::o;28560:244::-;27837:12;:10;:12::i;:::-;-1:-1:-1;;;;;27826:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;27826:23:0;;27818:68;;;;;-1:-1:-1;;;27818:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27818:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28649:22:0;::::1;28641:73;;;;-1:-1:-1::0;;;28641:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28751:6;::::0;;28730:38:::1;::::0;-1:-1:-1;;;;;28730:38:0;;::::1;::::0;28751:6;::::1;::::0;28730:38:::1;::::0;::::1;28779:6;:17:::0;;-1:-1:-1;;;;;;28779:17:0::1;-1:-1:-1::0;;;;;28779:17:0;;;::::1;::::0;;;::::1;::::0;;28560:244::o;30980:220::-;27837:12;:10;:12::i;:::-;-1:-1:-1;;;;;27826:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;27826:23:0;;27818:68;;;;;-1:-1:-1;;;27818:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27818:68:0;;;;;;;;;;;;;;;31078:4:::1;31065:9;:17;;31057:57;;;::::0;;-1:-1:-1;;;31057:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31125:11;:23:::0;;;31164:28:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;30980:220:::0;:::o;29222:28::-;;;:::o;26133:106::-;26221:10;26133:106;:::o;32713:990::-;32783:13;32808:7;-1:-1:-1;;;;;32808:15:0;;32824:6;32832;32808:31;;;;;;;;;;;;;-1:-1:-1;;;;;32808:31:0;;;;;;-1:-1:-1;;;;;32808:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32808:31:0;;-1:-1:-1;;;;;;32859:27:0;;32851:62;;;;;-1:-1:-1;;;32851:62:0;;;;;;;;;;;;-1:-1:-1;;;32851:62:0;;;;;;;;;;;;;;;32924:117;32981:4;33001;-1:-1:-1;;;;;33001:14:0;;33024:4;33001:29;;;;;;;;;;;;;-1:-1:-1;;;;;33001:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33001:29:0;-1:-1:-1;;;;;32924:34:0;;;:117;:34;:117::i;:::-;33053:15;33070;33089:4;-1:-1:-1;;;;;33089:9:0;;33107:4;33089:24;;;;;;;;;;;;;-1:-1:-1;;;;;33089:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33089:24:0;;;;;;;;33138:13;;-1:-1:-1;;;33138:13:0;;;;33089:24;;-1:-1:-1;33089:24:0;;-1:-1:-1;;;;;;33138:11:0;;;;;:13;;;;;;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33138:13:0;-1:-1:-1;;;;;33128:23:0;;;;;;33124:95;;33190:7;33124:95;33229:11;33243:46;33256:6;33264;33272:7;33281;33243:12;:46::i;:::-;33229:60;;33300:11;33314:32;33342:3;33314:23;33325:11;;33314:6;:10;;:23;;;;:::i;:::-;:27;;:32::i;:::-;33300:46;-1:-1:-1;33357:16:0;33376:18;:6;33300:46;33376:10;:18::i;:::-;33430:8;;33357:37;;-1:-1:-1;33405:47:0;;-1:-1:-1;;;;;33412:3:0;33405:24;;;33430:8;33357:37;33405:24;:47::i;:::-;33463:37;-1:-1:-1;;;;;33470:3:0;33463:24;33488:3;33493:6;33463:24;:37::i;:::-;33516:179;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33516:179:0;;;;;;;;33541:10;;33516:179;;;;;;;;;;32713:990;;;;;;;;:::o;19105:177::-;19215:58;;;-1:-1:-1;;;;;19215:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19215:58:0;-1:-1:-1;;;19215:58:0;;;19188:86;;19208:5;;19188:19;:86::i;:::-;19105:177;;;:::o;33711:2166::-;33860:14;33926:6;-1:-1:-1;;;;;33916:16:0;:6;-1:-1:-1;;;;;33916:16:0;;33912:1958;;;33949:14;33966:20;:7;33978;33966:11;:20::i;:::-;33949:37;;34015:3;-1:-1:-1;;;;;34005:13:0;:6;-1:-1:-1;;;;;34005:13:0;;34001:373;;;34048:6;34039:15;;34001:373;;;34090:4;-1:-1:-1;;;;;34080:14:0;:6;-1:-1:-1;;;;;34080:14:0;;34076:298;;;34124:20;34131:4;34137:6;34124;:20::i;:::-;34115:29;;34076:298;;;34185:14;34202:17;34212:6;34202:9;:17::i;:::-;34185:34;;34247:44;34253:6;34261;34269;34285:4;34247:5;:44::i;:::-;34238:53;;34319:39;34332:6;34340;34348;34356:1;34319:12;:39::i;:::-;34310:48;;34076:298;;33912:1958;;;;34405:3;-1:-1:-1;;;;;34395:13:0;:6;-1:-1:-1;;;;;34395:13:0;;34391:1479;;;34434:36;34462:7;34434:23;34441:6;34449:7;34434:6;:23::i;:::-;:27;;:36::i;:::-;34425:45;;34391:1479;;;34502:3;-1:-1:-1;;;;;34492:13:0;:6;-1:-1:-1;;;;;34492:13:0;;34488:1382;;;34531:36;34559:7;34531:23;34538:6;34546:7;34531:6;:23::i;34488:1382::-;34599:4;-1:-1:-1;;;;;34589:14:0;:6;-1:-1:-1;;;;;34589:14:0;;34585:1285;;;34629:119;34654:4;34677:56;34725:7;34677:43;34683:6;34691:4;34697:7;34714:4;34677:5;:43::i;:56::-;34629:6;:119::i;34585:1285::-;34780:4;-1:-1:-1;;;;;34770:14:0;:6;-1:-1:-1;;;;;34770:14:0;;34766:1104;;;34810:119;34835:4;34858:56;34906:7;34858:43;34864:6;34872:4;34878:7;34895:4;34858:5;:43::i;34766:1104::-;34962:15;34980:17;34990:6;34980:9;:17::i;:::-;34962:35;;35012:15;35030:17;35040:6;35030:9;:17::i;:::-;35012:35;;35077:6;-1:-1:-1;;;;;35066:17:0;:7;-1:-1:-1;;;;;35066:17:0;;35062:797;;;35113:189;35148:7;35178:6;35207:46;35213:6;35221:7;35230;35247:4;35207:5;:46::i;:::-;35276:7;35113:12;:189::i;:::-;35104:198;;35062:797;;;35339:6;-1:-1:-1;;;;;35328:17:0;:7;-1:-1:-1;;;;;35328:17:0;;35324:535;;;35375:189;35410:6;35439:7;35469;35499:46;35505:6;35513:7;35522;35539:4;35499:5;:46::i;:::-;35375:12;:189::i;35324:535::-;35614:229;35649:7;35679;35709:46;35715:6;35723:7;35732;35749:4;35709:5;:46::i;:::-;35778;35784:6;35792:7;35801;35818:4;35778:5;:46::i;35614:229::-;35605:238;;35324:535;34766:1104;;;33711:2166;;;;;;:::o;3785:220::-;3843:7;3867:6;3863:20;;-1:-1:-1;3882:1:0;3875:8;;3863:20;3906:5;;;3910:1;3906;:5;:1;3930:5;;;;;:10;3922:56;;;;-1:-1:-1;;;3922:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3996:1;-1:-1:-1;3785:220:0;;;;;:::o;4483:153::-;4541:7;4573:1;4569;:5;4561:44;;;;;-1:-1:-1;;;4561:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4627:1;4623;:5;;;;;;;4483:153;-1:-1:-1;;;4483:153:0:o;3368:158::-;3426:7;3459:1;3454;:6;;3446:49;;;;;-1:-1:-1;;;3446:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3513:5:0;;;3368:158::o;21410:761::-;21834:23;21860:69;21888:4;21860:69;;;;;;;;;;;;;;;;;21868:5;-1:-1:-1;;;;;21860:27:0;;;:69;;;;;:::i;:::-;21944:17;;21834:95;;-1:-1:-1;21944:21:0;21940:224;;22086:10;22075:30;;;;;;;;;;;;;;;-1:-1:-1;22075:30:0;22067:85;;;;-1:-1:-1;;;22067:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2906:179;2964:7;2996:5;;;3020:6;;;;3012:46;;;;;-1:-1:-1;;;3012:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;37549:182;37634:17;37681:42;37687:5;37694:3;37699:8;37717:4;37681:5;:42::i;:::-;37669:54;37549:182;-1:-1:-1;;;37549:182:0:o;35885:1656::-;36027:17;36057:13;36095:7;-1:-1:-1;;;;;36095:15:0;;36111:9;36122:7;36095:35;;;;;;;;;;;;;-1:-1:-1;;;;;36095:35:0;;;;;;-1:-1:-1;;;;;36095:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36095:35:0;;-1:-1:-1;;;;;;36150:27:0;;36142:64;;;;;-1:-1:-1;;;36142:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36220:16;36238;36260:4;-1:-1:-1;;;;;36260:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36260:18:0;;;;;;;;36352:13;;-1:-1:-1;;;36352:13:0;;;;36219:59;;;;;-1:-1:-1;36219:59:0;;;;;-1:-1:-1;36292:20:0;;;;-1:-1:-1;;;;;36352:11:0;;;;;:13;;;;;36260:18;;36352:13;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36352:13:0;-1:-1:-1;;;;;36339:26:0;;;;;;:98;;36418:8;36428;36339:98;;;36382:8;36392;36339:98;36291:146;;-1:-1:-1;36291:146:0;-1:-1:-1;36448:55:0;-1:-1:-1;;;;;36448:30:0;;36487:4;36494:8;36448:30;:55::i;:::-;36514:19;36536:60;36583:12;36543:9;-1:-1:-1;;;;;36536:27:0;;36572:4;36536:42;;;;;;;;;;;;;-1:-1:-1;;;;;36536:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36536:42:0;;:46;:60::i;:::-;36514:82;;36646:54;36659:11;36672:12;36686:13;36646:12;:54::i;:::-;36634:66;;36726:12;36741:31;36760:11;;36749:5;36741:18;;:31;;;;:::i;:::-;36726:46;-1:-1:-1;37179:46:0;37215:9;37179:31;36726:46;37179:21;:11;36726:46;37179:15;:21::i;:::-;:25;;:31::i;:46::-;37102:52;37115:9;37126:13;37141:12;37102;:52::i;:::-;:123;;37076:226;;;;;-1:-1:-1;;;37076:226:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35885:1656;37325:18;37345;37380:4;-1:-1:-1;;;;;37380:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37380:13:0;-1:-1:-1;;;;;37367:26:0;;;;;;:104;;37449:9;37468:1;37367:104;;;37418:1;37422:9;37367:104;37520:12;;;37530:1;37520:12;;;;;;;;;37324:147;;-1:-1:-1;37324:147:0;;-1:-1:-1;;;;;;37482:9:0;;;;;37324:147;;;;37516:2;;37520:12;;37482:51;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37482:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35885:1656;;;;;;;;;;;;;;:::o;14092:195::-;14195:12;14227:52;14249:6;14257:4;14263:1;14266:12;14227:21;:52::i;37795:505::-;37888:14;37934:1;37923:8;:12;37915:62;;;;-1:-1:-1;;;37915:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38008:1;37996:9;:13;:31;;;;;38026:1;38013:10;:14;37996:31;37988:78;;;;-1:-1:-1;;;37988:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38077:20;38100:17;:8;38113:3;38100:12;:17::i;:::-;38077:40;-1:-1:-1;38128:14:0;38145:31;38077:40;38165:10;38145:19;:31::i;:::-;38128:48;-1:-1:-1;38187:16:0;38206:40;38230:15;38206:19;:9;38220:4;38206:13;:19::i;:40::-;38187:59;;38281:11;38269:9;:23;;;;;;;37795:505;-1:-1:-1;;;;;;;37795:505:0:o;15144:530::-;15271:12;15329:5;15304:21;:30;;15296:81;;;;-1:-1:-1;;;15296:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15396:18;15407:6;15396:10;:18::i;:::-;15388:60;;;;;-1:-1:-1;;;15388:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15522:12;15536:23;15563:6;-1:-1:-1;;;;;15563:11:0;15583:5;15591:4;15563:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15563:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15521:75;;;;15614:52;15632:7;15641:10;15653:12;15614:17;:52::i;11174:422::-;11541:20;11580:8;;;11174:422::o;17684:742::-;17799:12;17828:7;17824:595;;;-1:-1:-1;17859:10:0;17852:17;;17824:595;17973:17;;:21;17969:439;;18236:10;18230:17;18297:15;18284:10;18280:2;18276:19;18269:44;18184:148;18379:12;18372:20;;-1:-1:-1;;;18372:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://4376b5191174120c01603883c69c598e2419ae64754aae13771d7bbae7cd720b
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.