Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 52 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 16810426 | 550 days ago | IN | 0 ETH | 0.02308798 | ||||
Withdraw | 16582738 | 582 days ago | IN | 0 ETH | 0.03123773 | ||||
Withdraw | 16563059 | 585 days ago | IN | 0 ETH | 0.02609741 | ||||
Withdraw | 16527668 | 590 days ago | IN | 0 ETH | 0.03306997 | ||||
Withdraw | 16527660 | 590 days ago | IN | 0 ETH | 0.03571356 | ||||
Withdraw | 16516997 | 591 days ago | IN | 0 ETH | 0.01770767 | ||||
Withdraw | 16471042 | 597 days ago | IN | 0 ETH | 0.23778859 | ||||
Withdraw | 16394405 | 608 days ago | IN | 0 ETH | 0.02552129 | ||||
Withdraw | 16390571 | 609 days ago | IN | 0 ETH | 0.02338171 | ||||
Withdraw | 16375097 | 611 days ago | IN | 0 ETH | 0.02160952 | ||||
Withdraw | 16245850 | 629 days ago | IN | 0 ETH | 0.01718482 | ||||
Withdraw | 16217522 | 633 days ago | IN | 0 ETH | 0.01527025 | ||||
Withdraw | 16152869 | 642 days ago | IN | 0 ETH | 0.01728146 | ||||
Withdraw | 16129816 | 645 days ago | IN | 0 ETH | 0.01644737 | ||||
Withdraw | 16124556 | 646 days ago | IN | 0 ETH | 0.0178512 | ||||
Withdraw | 16014901 | 661 days ago | IN | 0 ETH | 0.01441457 | ||||
Withdraw | 16007670 | 662 days ago | IN | 0 ETH | 0.01394577 | ||||
Withdraw | 15960692 | 669 days ago | IN | 0 ETH | 0.23577719 | ||||
Withdraw | 15960673 | 669 days ago | IN | 0 ETH | 0.24166116 | ||||
Withdraw | 15936077 | 672 days ago | IN | 0 ETH | 0.23623007 | ||||
Withdraw | 15935315 | 672 days ago | IN | 0 ETH | 0.23840762 | ||||
Withdraw | 15935231 | 672 days ago | IN | 0 ETH | 0.23577719 | ||||
Withdraw | 15935171 | 672 days ago | IN | 0 ETH | 0.28042214 | ||||
Withdraw | 15935096 | 672 days ago | IN | 0 ETH | 0.14118901 | ||||
Withdraw | 15935013 | 672 days ago | IN | 0 ETH | 0.11280964 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract contains unverified libraries: SafeMath, TransferableToken
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
CFVaultV2
Compiler Version
v0.5.10+commit.5a6ea5b1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-15 */ // File: contracts/utils/Ownable.sol pragma solidity >=0.4.21 <0.6.0; contract Ownable { address private _contract_owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = msg.sender; _contract_owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _contract_owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_contract_owner == msg.sender, "Ownable: caller is not the owner"); _; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_contract_owner, newOwner); _contract_owner = newOwner; } } // File: contracts/utils/SafeMath.sol pragma solidity >=0.4.21 <0.6.0; library SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a, "add"); } function safeSubR(uint a, uint b, string memory s) public pure returns (uint c) { require(b <= a, s); c = a - b; } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a, "sub"); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b, "mul"); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0, "div"); c = a / b; } function safeDivR(uint a, uint b, string memory s) public pure returns (uint c) { require(b > 0, s); c = a / b; } } // File: contracts/utils/Address.sol pragma solidity >=0.4.21 <0.6.0; library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } // File: contracts/utils/ReentrancyGuard.sol pragma solidity >=0.4.21 <0.6.0; contract ReentrancyGuard { uint256 private _guardCounter; constructor () internal { _guardCounter = 1; } modifier nonReentrant() { _guardCounter += 1; uint256 localCounter = _guardCounter; _; require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call"); } } // File: contracts/erc20/IERC20.sol pragma solidity >=0.4.21 <0.6.0; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/erc20/SafeERC20.sol pragma solidity >=0.4.21 <0.6.0; library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { 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).safeAdd(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).safeSub(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function callOptionalReturn(IERC20 token, bytes memory data) private { require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "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/utils/TransferableToken.sol pragma solidity >=0.4.21 <0.6.0; contract TransferableTokenHelper{ uint256 public decimals; } library TransferableToken{ using SafeERC20 for IERC20; function transfer(address target_token, address payable to, uint256 amount) public { if(target_token == address(0x0)){ (bool status, ) = to.call.value(address(this).balance)(""); require(status, "TransferableToken, transfer eth failed"); }else{ IERC20(target_token).safeTransfer(to, amount); } } function balanceOfAddr(address target_token, address _of) public view returns(uint256){ if(target_token == address(0x0)){ return address(_of).balance; }else{ return IERC20(target_token).balanceOf(address(_of)); } } function decimals(address target_token) public view returns(uint256) { if(target_token == address(0x0)){ return 18; }else{ return TransferableTokenHelper(target_token).decimals(); } } } // File: contracts/utils/AddressArray.sol pragma solidity >=0.4.21 <0.6.0; library AddressArray{ function exists(address[] memory self, address addr) public pure returns(bool){ for (uint i = 0; i< self.length;i++){ if (self[i]==addr){ return true; } } return false; } function index_of(address[] memory self, address addr) public pure returns(uint){ for (uint i = 0; i< self.length;i++){ if (self[i]==addr){ return i; } } require(false, "AddressArray:index_of, not exist"); } function remove(address[] storage self, address addr) public returns(bool){ uint index = index_of(self, addr); self[index] = self[self.length - 1]; delete self[self.length-1]; self.length--; return true; } } // File: contracts/erc20/ERC20Impl.sol pragma solidity >=0.4.21 <0.6.0; contract ApproveAndCallFallBack { function receiveApproval( address from, uint256 _amount, address _token, bytes memory _data ) public; } contract TransferEventCallBack{ function onTransfer(address _from, address _to, uint256 _amount) public; } contract ERC20Base { string public name; //The Token's name: e.g. GTToken uint8 public decimals; //Number of decimals of the smallest unit string public symbol; //An identifier: e.g. REP string public version = "AET_0.1"; //An arbitrary versioning scheme using AddressArray for address[]; address[] public transferListeners; //////////////// // Events //////////////// event Transfer(address indexed _from, address indexed _to, uint256 _amount); event Approval( address indexed _owner, address indexed _spender, uint256 _amount ); event NewTransferListener(address _addr); event RemoveTransferListener(address _addr); /// @dev `Checkpoint` is the structure that attaches a block number to a /// given value, the block number attached is the one that last changed the /// value struct Checkpoint { // `fromBlock` is the block number that the value was generated from uint128 fromBlock; // `value` is the amount of tokens at a specific block number uint128 value; } // `parentToken` is the Token address that was cloned to produce this token; // it will be 0x0 for a token that was not cloned ERC20Base public parentToken; // `parentSnapShotBlock` is the block number from the Parent Token that was // used to determine the initial distribution of the Clone Token uint public parentSnapShotBlock; // `creationBlock` is the block number that the Clone Token was created uint public creationBlock; // `balances` is the map that tracks the balance of each address, in this // contract when the balance changes the block number that the change // occurred is also included in the map mapping (address => Checkpoint[]) balances; // `allowed` tracks any extra transfer rights as in all ERC20 tokens mapping (address => mapping (address => uint256)) allowed; // Tracks the history of the `totalSupply` of the token Checkpoint[] totalSupplyHistory; // Flag that determines if the token is transferable or not. bool public transfersEnabled; //////////////// // Constructor //////////////// /// @notice Constructor to create a ERC20Base /// @param _parentToken Address of the parent token, set to 0x0 if it is a /// new token /// @param _parentSnapShotBlock Block of the parent token that will /// determine the initial distribution of the clone token, set to 0 if it /// is a new token /// @param _tokenName Name of the new token /// @param _decimalUnits Number of decimals of the new token /// @param _tokenSymbol Token Symbol for the new token /// @param _transfersEnabled If true, tokens will be able to be transferred constructor( ERC20Base _parentToken, uint _parentSnapShotBlock, string memory _tokenName, uint8 _decimalUnits, string memory _tokenSymbol, bool _transfersEnabled ) public { name = _tokenName; // Set the name decimals = _decimalUnits; // Set the decimals symbol = _tokenSymbol; // Set the symbol parentToken = _parentToken; parentSnapShotBlock = _parentSnapShotBlock; transfersEnabled = _transfersEnabled; creationBlock = block.number; } /////////////////// // ERC20 Methods /////////////////// /// @notice Send `_amount` tokens to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _amount The amount of tokens to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _amount) public returns (bool success) { require(transfersEnabled); return doTransfer(msg.sender, _to, _amount); } /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it /// is approved by `_from` /// @param _from The address holding the tokens being transferred /// @param _to The address of the recipient /// @param _amount The amount of tokens to be transferred /// @return True if the transfer was successful function transferFrom(address _from, address _to, uint256 _amount) public returns (bool success) { require(transfersEnabled); // The standard ERC 20 transferFrom functionality if (allowed[_from][msg.sender] < _amount) return false; allowed[_from][msg.sender] -= _amount; return doTransfer(_from, _to, _amount); } /// @dev This is the actual transfer function in the token contract, it can /// only be called by other functions in this contract. /// @param _from The address holding the tokens being transferred /// @param _to The address of the recipient /// @param _amount The amount of tokens to be transferred /// @return True if the transfer was successful function doTransfer(address _from, address _to, uint _amount) internal returns(bool) { if (_amount == 0) { return true; } require(parentSnapShotBlock < block.number); // Do not allow transfer to 0x0 or the token contract itself require((_to != address(0)) && (_to != address(this))); // If the amount being transfered is more than the balance of the // account the transfer returns false uint256 previousBalanceFrom = balanceOfAt(_from, block.number); if (previousBalanceFrom < _amount) { return false; } // First update the balance array with the new value for the address // sending the tokens updateValueAtNow(balances[_from], previousBalanceFrom - _amount); // Then update the balance array with the new value for the address // receiving the tokens uint256 previousBalanceTo = balanceOfAt(_to, block.number); require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow updateValueAtNow(balances[_to], previousBalanceTo + _amount); // An event to make the transfer easy to find on the blockchain emit Transfer(_from, _to, _amount); return true; } /// @param _owner The address that's balance is being requested /// @return The balance of `_owner` at the current block function balanceOf(address _owner) public view returns (uint256 balance) { return balanceOfAt(_owner, block.number); } /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on /// its behalf. This is a modified version of the ERC20 approve function /// to be a little bit safer /// @param _spender The address of the account able to transfer the tokens /// @param _amount The amount of tokens to be approved for transfer /// @return True if the approval was successful function approve(address _spender, uint256 _amount) public returns (bool success) { require(transfersEnabled); // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender,0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _amount; emit Approval(msg.sender, _spender, _amount); return true; } /// @dev This function makes it easy to read the `allowed[]` map /// @param _owner The address of the account that owns the token /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens of _owner that _spender is allowed /// to spend function allowance(address _owner, address _spender) public view returns (uint256 remaining) { return allowed[_owner][_spender]; } /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on /// its behalf, and then a function is triggered in the contract that is /// being approved, `_spender`. This allows users to use their tokens to /// interact with contracts in one function call instead of two /// @param _spender The address of the contract able to transfer the tokens /// @param _amount The amount of tokens to be approved for transfer /// @return True if the function call was successful function approveAndCall(ApproveAndCallFallBack _spender, uint256 _amount, bytes memory _extraData) public returns (bool success) { require(approve(address(_spender), _amount)); _spender.receiveApproval( msg.sender, _amount, address(this), _extraData ); return true; } /// @dev This function makes it easy to get the total number of tokens /// @return The total number of tokens function totalSupply() public view returns (uint) { return totalSupplyAt(block.number); } //////////////// // Query balance and totalSupply in History //////////////// /// @dev Queries the balance of `_owner` at a specific `_blockNumber` /// @param _owner The address from which the balance will be retrieved /// @param _blockNumber The block number when the balance is queried /// @return The balance at `_blockNumber` function balanceOfAt(address _owner, uint _blockNumber) public view returns (uint) { // These next few lines are used when the balance of the token is // requested before a check point was ever created for this token, it // requires that the `parentToken.balanceOfAt` be queried at the // genesis block for that token as this contains initial balance of // this token if ((balances[_owner].length == 0) || (balances[_owner][0].fromBlock > _blockNumber)) { if (address(parentToken) != address(0)) { return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock)); } else { // Has no parent return 0; } // This will return the expected balance during normal situations } else { return getValueAt(balances[_owner], _blockNumber); } } /// @notice Total amount of tokens at a specific `_blockNumber`. /// @param _blockNumber The block number when the totalSupply is queried /// @return The total amount of tokens at `_blockNumber` function totalSupplyAt(uint _blockNumber) public view returns(uint) { // These next few lines are used when the totalSupply of the token is // requested before a check point was ever created for this token, it // requires that the `parentToken.totalSupplyAt` be queried at the // genesis block for this token as that contains totalSupply of this // token at this block number. if ((totalSupplyHistory.length == 0) || (totalSupplyHistory[0].fromBlock > _blockNumber)) { if (address(parentToken) != address(0)) { return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock)); } else { return 0; } // This will return the expected totalSupply during normal situations } else { return getValueAt(totalSupplyHistory, _blockNumber); } } //////////////// // Generate and destroy tokens //////////////// /// @notice Generates `_amount` tokens that are assigned to `_owner` /// @param _owner The address that will be assigned the new tokens /// @param _amount The quantity of tokens generated /// @return True if the tokens are generated correctly function _generateTokens(address _owner, uint _amount) internal returns (bool) { uint curTotalSupply = totalSupply(); require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow uint previousBalanceTo = balanceOf(_owner); require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount); updateValueAtNow(balances[_owner], previousBalanceTo + _amount); emit Transfer(address(0), _owner, _amount); return true; } /// @notice Burns `_amount` tokens from `_owner` /// @param _owner The address that will lose the tokens /// @param _amount The quantity of tokens to burn /// @return True if the tokens are burned correctly function _destroyTokens(address _owner, uint _amount) internal returns (bool) { uint curTotalSupply = totalSupply(); require(curTotalSupply >= _amount); uint previousBalanceFrom = balanceOf(_owner); require(previousBalanceFrom >= _amount); updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount); updateValueAtNow(balances[_owner], previousBalanceFrom - _amount); emit Transfer(_owner, address(0), _amount); return true; } //////////////// // Enable tokens transfers //////////////// /// @notice Enables token holders to transfer their tokens freely if true /// @param _transfersEnabled True if transfers are allowed in the clone function _enableTransfers(bool _transfersEnabled) internal { transfersEnabled = _transfersEnabled; } //////////////// // Internal helper functions to query and set a value in a snapshot array //////////////// /// @dev `getValueAt` retrieves the number of tokens at a given block number /// @param checkpoints The history of values being queried /// @param _block The block number to retrieve the value at /// @return The number of tokens being queried function getValueAt(Checkpoint[] storage checkpoints, uint _block) internal view returns (uint) { if (checkpoints.length == 0) return 0; // Shortcut for the actual value if (_block >= checkpoints[checkpoints.length-1].fromBlock) return checkpoints[checkpoints.length-1].value; if (_block < checkpoints[0].fromBlock) return 0; // Binary search of the value in the array uint min = 0; uint max = checkpoints.length-1; while (max > min) { uint mid = (max + min + 1) / 2; if (checkpoints[mid].fromBlock<=_block) { min = mid; } else { max = mid-1; } } return checkpoints[min].value; } /// @dev `updateValueAtNow` used to update the `balances` map and the /// `totalSupplyHistory` /// @param checkpoints The history of data being updated /// @param _value The new number of tokens function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value) internal { if ((checkpoints.length == 0) || (checkpoints[checkpoints.length - 1].fromBlock < block.number)) { Checkpoint storage newCheckPoint = checkpoints[checkpoints.length++]; newCheckPoint.fromBlock = uint128(block.number); newCheckPoint.value = uint128(_value); } else { Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length - 1]; oldCheckPoint.value = uint128(_value); } } function onTransferDone(address _from, address _to, uint256 _amount) internal { for(uint i = 0; i < transferListeners.length; i++){ TransferEventCallBack t = TransferEventCallBack(transferListeners[i]); t.onTransfer(_from, _to, _amount); } } function _addTransferListener(address _addr) internal { transferListeners.push(_addr); emit NewTransferListener(_addr); } function _removeTransferListener(address _addr) internal{ transferListeners.remove(_addr); emit RemoveTransferListener(_addr); } /// @dev Helper function to return a min betwen the two uints function min(uint a, uint b) pure internal returns (uint) { return a < b ? a : b; } //function () external payable { //require(false, "cannot transfer ether to this contract"); //} } // File: contracts/core/IPool.sol pragma solidity >=0.4.21 <0.6.0; contract ICurvePool{ function deposit(uint256 _amount) public; function withdraw(uint256 _amount) public; function get_virtual_price() public view returns(uint256); function get_lp_token_balance() public view returns(uint256); function get_lp_token_addr() public view returns(address); string public name; } // File: contracts/core/CFVault.sol pragma solidity >=0.4.21 <0.6.0; contract CFControllerInterface{ function withdraw(uint256 _amount) public; function deposit(uint256 _amount) public; function get_current_pool() public view returns(ICurvePool); } contract TokenInterfaceERC20{ function destroyTokens(address _owner, uint _amount) public returns(bool); function generateTokens(address _owner, uint _amount) public returns(bool); } contract CFVaultV2 is Ownable, ReentrancyGuard{ using SafeERC20 for IERC20; using SafeMath for uint256; using Address for address; using TransferableToken for address; address public target_token; CFControllerInterface public controller; uint256 public ratio_base; uint256 public withdraw_fee_ratio; address payable public fee_pool; address public lp_token; uint256 public max_amount; uint256 public slip; //@param _target_token, means ETH if it's 0x0 constructor(address _target_token, address _lp_token, address _controller) public { require(_controller != address(0x0), "invalid controller"); target_token = _target_token; controller = CFControllerInterface(_controller); ratio_base = 10000; lp_token = _lp_token; } event ChangeMaxAmount(uint256 old, uint256 _new); function set_max_amount(uint _amount) public onlyOwner{ uint256 old = max_amount; max_amount = _amount; emit ChangeMaxAmount(old, max_amount); } event CFFDeposit(address from, uint256 target_amount, uint256 cff_amount, uint256 virtual_price); event CFFDepositFee(address from, uint256 target_amount, uint256 fee_amount); event ChangeSlippage(uint256 old, uint256 _new); function set_slippage(uint256 _slip) public onlyOwner{ //base: 10000 uint256 old = slip; slip = _slip; emit ChangeSlippage(old, slip); } function deposit(uint256 _amount) public payable nonReentrant{ require(controller != CFControllerInterface(0x0) && controller.get_current_pool() != ICurvePool(0x0), "paused"); if(target_token == address(0x0)){ require(_amount == msg.value, "inconsist amount"); }else{ require(IERC20(target_token).allowance(msg.sender, address(this)) >= _amount, "CFVault: not enough allowance"); } require(_amount <= max_amount, "too large amount"); require(slip != 0, "Slippage not set"); require(_amount != 0, "too small amount"); uint tt_before = TransferableToken.balanceOfAddr(target_token, address(controller.get_current_pool())); if(target_token != address(0x0)){ IERC20(target_token).safeTransferFrom(msg.sender, address(controller.get_current_pool()), _amount); }else{ TransferableToken.transfer(target_token, address(controller.get_current_pool()).toPayable(), _amount); } uint tt_after = TransferableToken.balanceOfAddr(target_token, address(controller.get_current_pool())); require(tt_after.safeSub(tt_before) == _amount, "token inflation"); uint256 lp_amount; uint lp_before = controller.get_current_pool().get_lp_token_balance(); { uint dec = uint(10)**(TransferableToken.decimals(target_token)); uint vir = controller.get_current_pool().get_virtual_price(); uint min_amount = _amount.safeMul(uint(1e32)).safeMul(slip).safeDiv(dec).safeDiv(vir); controller.deposit(_amount); uint lp_after = controller.get_current_pool().get_lp_token_balance(); lp_amount = lp_after.safeSub(lp_before); require(lp_amount >= min_amount, "Slippage"); } uint256 d = ERC20Base(controller.get_current_pool().get_lp_token_addr()).decimals(); require(d <= 18, "invalid decimal"); uint cff_amount = 0; if (lp_before == 0){ cff_amount = lp_amount.safeMul(uint256(10)**18).safeDiv(uint256(10)**d); } else{ cff_amount = lp_amount.safeMul(IERC20(lp_token).totalSupply()).safeDiv(lp_before); } TokenInterfaceERC20(lp_token).generateTokens(msg.sender, cff_amount); emit CFFDeposit(msg.sender, _amount, cff_amount, get_virtual_price()); } event CFFWithdraw(address from, uint256 target_amount, uint256 cff_amount, uint256 target_fee, uint256 virtual_price); //@_amount: CFLPToken amount function withdraw(uint256 _amount) public nonReentrant{ require(controller != CFControllerInterface(0x0) && controller.get_current_pool() != ICurvePool(0x0), "paused"); require(slip != 0, "Slippage not set"); uint256 amount = IERC20(lp_token).balanceOf(msg.sender); require(amount >= _amount, "no enough LP tokens"); uint LP_token_amount = _amount.safeMul(controller.get_current_pool().get_lp_token_balance()).safeDiv(IERC20(lp_token).totalSupply()); uint dec = uint(10)**(TransferableToken.decimals(target_token)); uint vir = controller.get_current_pool().get_virtual_price(); uint min_amount = LP_token_amount.safeMul(vir).safeMul(slip).safeMul(dec).safeDiv(uint(1e40)); uint256 _before = TransferableToken.balanceOfAddr(target_token, address(this)); controller.withdraw(LP_token_amount); uint256 _after = TransferableToken.balanceOfAddr(target_token, address(this)); uint256 target_amount = _after.safeSub(_before); require(target_amount >= min_amount, "Slippage"); if(withdraw_fee_ratio != 0 && fee_pool != address(0x0)){ uint256 f = target_amount.safeMul(withdraw_fee_ratio).safeDiv(ratio_base); uint256 r = target_amount.safeSub(f); TransferableToken.transfer(target_token, msg.sender, r); TransferableToken.transfer(target_token, fee_pool, f); TokenInterfaceERC20(lp_token).destroyTokens(msg.sender, _amount); emit CFFWithdraw(msg.sender, r, _amount, f, get_virtual_price()); }else{ TransferableToken.transfer(target_token, msg.sender, target_amount); TokenInterfaceERC20(lp_token).destroyTokens(msg.sender, _amount); emit CFFWithdraw(msg.sender, target_amount, _amount, 0, get_virtual_price()); } } event ChangeWithdrawFee(uint256 old, uint256 _new); function changeWithdrawFee(uint256 _fee) public onlyOwner{ require(_fee < ratio_base, "invalid fee"); uint256 old = withdraw_fee_ratio; withdraw_fee_ratio = _fee; emit ChangeWithdrawFee(old, withdraw_fee_ratio); } event ChangeController(address old, address _new); function changeController(address _ctrl) public onlyOwner{ address old = address(controller); controller = CFControllerInterface(_ctrl); emit ChangeController(old, address(controller)); } event ChangeFeePool(address old, address _new); function changeFeePool(address payable _fp) public onlyOwner{ address old = fee_pool; fee_pool = _fp; emit ChangeFeePool(old, fee_pool); } function get_virtual_price() public view returns(uint256){ ICurvePool cp = controller.get_current_pool(); uint256 v1 = cp.get_lp_token_balance().safeMul(uint256(10)**ERC20Base(lp_token).decimals()); uint256 v2 = IERC20(lp_token).totalSupply().safeMul(uint256(10) ** ERC20Base(cp.get_lp_token_addr()).decimals()); if(v2 == 0){ return 0; } return v1.safeMul(cp.get_virtual_price()).safeDiv(v2); } // helper function added for local test, not deployed on chain function get_asset() public view returns(uint256) { return controller.get_current_pool().get_lp_token_balance(); } function() external payable{} } contract CFVaultV2Factory{ event NewCFVault(address addr); function createCFVault(address _target_token, address _lp_token, address _controller) public returns(address){ CFVaultV2 cf = new CFVaultV2(_target_token, _lp_token, _controller); cf.transferOwnership(msg.sender); emit NewCFVault(address(cf)); return address(cf); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"ratio_base","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"max_amount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"slip","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_ctrl","type":"address"}],"name":"changeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"get_asset","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"set_max_amount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"withdraw_fee_ratio","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fee_pool","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lp_token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_slip","type":"uint256"}],"name":"set_slippage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"changeWithdrawFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"get_virtual_price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_fp","type":"address"}],"name":"changeFeePool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"target_token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_target_token","type":"address"},{"name":"_lp_token","type":"address"},{"name":"_controller","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"old","type":"uint256"},{"indexed":false,"name":"_new","type":"uint256"}],"name":"ChangeMaxAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"target_amount","type":"uint256"},{"indexed":false,"name":"cff_amount","type":"uint256"},{"indexed":false,"name":"virtual_price","type":"uint256"}],"name":"CFFDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"target_amount","type":"uint256"},{"indexed":false,"name":"fee_amount","type":"uint256"}],"name":"CFFDepositFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"old","type":"uint256"},{"indexed":false,"name":"_new","type":"uint256"}],"name":"ChangeSlippage","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"target_amount","type":"uint256"},{"indexed":false,"name":"cff_amount","type":"uint256"},{"indexed":false,"name":"target_fee","type":"uint256"},{"indexed":false,"name":"virtual_price","type":"uint256"}],"name":"CFFWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"old","type":"uint256"},{"indexed":false,"name":"_new","type":"uint256"}],"name":"ChangeWithdrawFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"old","type":"address"},{"indexed":false,"name":"_new","type":"address"}],"name":"ChangeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"old","type":"address"},{"indexed":false,"name":"_new","type":"address"}],"name":"ChangeFeePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051620036ad380380620036ad8339818101604052606081101561003557600080fd5b5080516020820151604092830151600080546001600160a01b0319163390811782559451939492939192918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180556001600160a01b03811661010257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c696420636f6e74726f6c6c65720000000000000000000000000000604482015290519081900360640190fd5b600280546001600160a01b039485166001600160a01b03199182161790915560038054928516928216929092179091556127106004556007805492909316911617905561355880620001556000396000f3fe6080604052600436106101145760003560e01c806382c63066116100a0578063bb7b8b8011610064578063bb7b8b80146102e4578063d367e2aa146102f9578063f2fde38b1461032c578063f51f74961461035f578063f77c47911461037457610114565b806382c63066146102495780638da5cb5b1461025e5780638edd69ec14610273578063a893c9be1461029d578063b6b55f25146102c757610114565b80633cebb823116100e75780633cebb8231461019157806344e81c0c146101c45780635a2dfd49146101d957806370f9e52f14610203578063797d19851461021857610114565b80630e775274146101165780631a34fe811461013d5780632e1a7d4d14610152578063392c731f1461017c575b005b34801561012257600080fd5b5061012b610389565b60408051918252519081900360200190f35b34801561014957600080fd5b5061012b61038f565b34801561015e57600080fd5b506101146004803603602081101561017557600080fd5b5035610395565b34801561018857600080fd5b5061012b611383565b34801561019d57600080fd5b50610114600480360360208110156101b457600080fd5b50356001600160a01b0316611389565b3480156101d057600080fd5b5061012b611438565b3480156101e557600080fd5b50610114600480360360208110156101fc57600080fd5b503561151d565b34801561020f57600080fd5b5061012b6115b1565b34801561022457600080fd5b5061022d6115b7565b604080516001600160a01b039092168252519081900360200190f35b34801561025557600080fd5b5061022d6115c6565b34801561026a57600080fd5b5061022d6115d5565b34801561027f57600080fd5b506101146004803603602081101561029657600080fd5b50356115e4565b3480156102a957600080fd5b50610114600480360360208110156102c057600080fd5b5035611678565b610114600480360360208110156102dd57600080fd5b5035611750565b3480156102f057600080fd5b5061012b612b2d565b34801561030557600080fd5b506101146004803603602081101561031c57600080fd5b50356001600160a01b0316613099565b34801561033857600080fd5b506101146004803603602081101561034f57600080fd5b50356001600160a01b0316613148565b34801561036b57600080fd5b5061022d6131a1565b34801561038057600080fd5b5061022d6131b0565b60045481565b60085481565b600180548101908190556003546001600160a01b0316158015906104315750600354604080516320aed76360e01b815290516000926001600160a01b0316916320aed763916004808301926020929190829003018186803b1580156103f957600080fd5b505afa15801561040d573d6000803e3d6000fd5b505050506040513d602081101561042357600080fd5b50516001600160a01b031614155b61046b576040805162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b604482015290519081900360640190fd5b6009546104b2576040805162461bcd60e51b815260206004820152601060248201526f14db1a5c1c1859d9481b9bdd081cd95d60821b604482015290519081900360640190fd5b600754604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156104fd57600080fd5b505afa158015610511573d6000803e3d6000fd5b505050506040513d602081101561052757600080fd5b5051905082811015610576576040805162461bcd60e51b81526020600482015260136024820152726e6f20656e6f756768204c5020746f6b656e7360681b604482015290519081900360640190fd5b600354604080516320aed76360e01b8152905160009273071108ad85d7a766b41e0f5e5195537a8fc8e74d9263d05c78da9288926001600160a01b0316916320aed763916004808301926020929190829003018186803b1580156105d957600080fd5b505afa1580156105ed573d6000803e3d6000fd5b505050506040513d602081101561060357600080fd5b5051604080516303837a9760e41b815290516001600160a01b0390921691633837a97091600480820192602092909190829003018186803b15801561064757600080fd5b505afa15801561065b573d6000803e3d6000fd5b505050506040513d602081101561067157600080fd5b5051604080516001600160e01b031960e086901b16815260048101939093526024830191909152516044808301926020929190829003018186803b1580156106b857600080fd5b505af41580156106cc573d6000803e3d6000fd5b505050506040513d60208110156106e257600080fd5b5051600754604080516318160ddd60e01b8152905173071108ad85d7a766b41e0f5e5195537a8fc8e74d9363b5931f7c9390926001600160a01b03909116916318160ddd91600480820192602092909190829003018186803b15801561074757600080fd5b505afa15801561075b573d6000803e3d6000fd5b505050506040513d602081101561077157600080fd5b5051604080516001600160e01b031960e086901b16815260048101939093526024830191909152516044808301926020929190829003018186803b1580156107b857600080fd5b505af41580156107cc573d6000803e3d6000fd5b505050506040513d60208110156107e257600080fd5b505160025460408051636a24d41960e11b81526001600160a01b03909216600483015251919250600091733fae5f25953e16833fbf9c1fa55b683dc87e2aad9163d449a832916024808301926020929190829003018186803b15801561084757600080fd5b505af415801561085b573d6000803e3d6000fd5b505050506040513d602081101561087157600080fd5b5051600354604080516320aed76360e01b81529051600a9390930a93506000926001600160a01b03909216916320aed76391600480820192602092909190829003018186803b1580156108c357600080fd5b505afa1580156108d7573d6000803e3d6000fd5b505050506040513d60208110156108ed57600080fd5b505160408051630176f71760e71b815290516001600160a01b039092169163bb7b8b8091600480820192602092909190829003018186803b15801561093157600080fd5b505afa158015610945573d6000803e3d6000fd5b505050506040513d602081101561095b57600080fd5b50516040805163682e3c6d60e11b81526004810186905260248101839052905191925060009173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163d05c78da916044808301926020929190829003018186803b1580156109bc57600080fd5b505af41580156109d0573d6000803e3d6000fd5b505050506040513d60208110156109e657600080fd5b50516009546040805163682e3c6d60e11b8152600481019390935260248301919091525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163d05c78da916044808301926020929190829003018186803b158015610a4557600080fd5b505af4158015610a59573d6000803e3d6000fd5b505050506040513d6020811015610a6f57600080fd5b50516040805163682e3c6d60e11b81526004810192909252602482018590525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163d05c78da916044808301926020929190829003018186803b158015610aca57600080fd5b505af4158015610ade573d6000803e3d6000fd5b505050506040513d6020811015610af457600080fd5b505160408051632d64c7df60e21b81526004810192909252701d6329f1c35ca4bfabb9f561000000000060248301525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163b5931f7c916044808301926020929190829003018186803b158015610b5f57600080fd5b505af4158015610b73573d6000803e3d6000fd5b505050506040513d6020811015610b8957600080fd5b505160025460408051631dc9608b60e01b81526001600160a01b03909216600483015230602483015251919250600091733fae5f25953e16833fbf9c1fa55b683dc87e2aad91631dc9608b916044808301926020929190829003018186803b158015610bf457600080fd5b505af4158015610c08573d6000803e3d6000fd5b505050506040513d6020811015610c1e57600080fd5b505160035460408051632e1a7d4d60e01b81526004810189905290519293506001600160a01b0390911691632e1a7d4d9160248082019260009290919082900301818387803b158015610c7057600080fd5b505af1158015610c84573d6000803e3d6000fd5b505060025460408051631dc9608b60e01b81526001600160a01b0390921660048301523060248301525160009350733fae5f25953e16833fbf9c1fa55b683dc87e2aad9250631dc9608b91604480820192602092909190829003018186803b158015610cef57600080fd5b505af4158015610d03573d6000803e3d6000fd5b505050506040513d6020811015610d1957600080fd5b5051604080516314527a3d60e31b81526004810183905260248101859052905191925060009173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163a293d1e8916044808301926020929190829003018186803b158015610d7a57600080fd5b505af4158015610d8e573d6000803e3d6000fd5b505050506040513d6020811015610da457600080fd5b5051905083811015610de8576040805162461bcd60e51b8152602060048201526008602482015267536c69707061676560c01b604482015290519081900360640190fd5b60055415801590610e0357506006546001600160a01b031615155b156111bb5760008173071108ad85d7a766b41e0f5e5195537a8fc8e74d63d05c78da90916005546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015610e6557600080fd5b505af4158015610e79573d6000803e3d6000fd5b505050506040513d6020811015610e8f57600080fd5b50516004805460408051632d64c7df60e21b8152928301939093526024820152905173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163b5931f7c916044808301926020929190829003018186803b158015610eec57600080fd5b505af4158015610f00573d6000803e3d6000fd5b505050506040513d6020811015610f1657600080fd5b5051604080516314527a3d60e31b81526004810185905260248101839052905191925060009173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163a293d1e8916044808301926020929190829003018186803b158015610f7757600080fd5b505af4158015610f8b573d6000803e3d6000fd5b505050506040513d6020811015610fa157600080fd5b5051600254604080516317d5759960e31b81526001600160a01b0390921660048301523360248301526044820183905251919250733fae5f25953e16833fbf9c1fa55b683dc87e2aad9163beabacc891606480820192600092909190829003018186803b15801561101157600080fd5b505af4158015611025573d6000803e3d6000fd5b5050600254600654604080516317d5759960e31b81526001600160a01b0393841660048201529290911660248301526044820186905251733fae5f25953e16833fbf9c1fa55b683dc87e2aad935063beabacc892506064808301926000929190829003018186803b15801561109957600080fd5b505af41580156110ad573d6000803e3d6000fd5b50505050600760009054906101000a90046001600160a01b03166001600160a01b031663d3ce77fe338e6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561112657600080fd5b505af115801561113a573d6000803e3d6000fd5b505050506040513d602081101561115057600080fd5b507fbdd509a6ec35e0e438c8b76b0ccbd5cac5d64387affc672f95bdcb361c817a22905033828e85611180612b2d565b604080516001600160a01b03909616865260208601949094528484019290925260608401526080830152519081900360a00190a15050611321565b600254604080516317d5759960e31b81526001600160a01b0390921660048301523360248301526044820183905251733fae5f25953e16833fbf9c1fa55b683dc87e2aad9163beabacc8916064808301926000929190829003018186803b15801561122557600080fd5b505af4158015611239573d6000803e3d6000fd5b5050600754604080516369e73bff60e11b8152336004820152602481018f905290516001600160a01b03909216935063d3ce77fe92506044808201926020929091908290030181600087803b15801561129157600080fd5b505af11580156112a5573d6000803e3d6000fd5b505050506040513d60208110156112bb57600080fd5b507fbdd509a6ec35e0e438c8b76b0ccbd5cac5d64387affc672f95bdcb361c817a22905033828c60006112ec612b2d565b604080516001600160a01b03909616865260208601949094528484019290925260608401526080830152519081900360a00190a15b5050505050505050600154811461137f576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b5050565b60095481565b6000546001600160a01b031633146113d6576040805162461bcd60e51b815260206004820181905260248201526000805160206134da833981519152604482015290519081900360640190fd5b600380546001600160a01b038381166001600160a01b0319831617928390556040805192821680845293909116602083015280517f7bd9aab74fc8b860dff8328bda449632993abb9bd61340154740618a3debeb899281900390910190a15050565b600354604080516320aed76360e01b815290516000926001600160a01b0316916320aed763916004808301926020929190829003018186803b15801561147d57600080fd5b505afa158015611491573d6000803e3d6000fd5b505050506040513d60208110156114a757600080fd5b5051604080516303837a9760e41b815290516001600160a01b0390921691633837a97091600480820192602092909190829003018186803b1580156114eb57600080fd5b505afa1580156114ff573d6000803e3d6000fd5b505050506040513d602081101561151557600080fd5b505190505b90565b6000546001600160a01b0316331461156a576040805162461bcd60e51b815260206004820181905260248201526000805160206134da833981519152604482015290519081900360640190fd5b6008805490829055604080518281526020810184905281517fda1ac08e19cf366ae5b5feb717776ca672304e55946e9640989edad1d94900b5929181900390910190a15050565b60055481565b6006546001600160a01b031681565b6007546001600160a01b031681565b6000546001600160a01b031690565b6000546001600160a01b03163314611631576040805162461bcd60e51b815260206004820181905260248201526000805160206134da833981519152604482015290519081900360640190fd5b6009805490829055604080518281526020810184905281517f2907babb582b9aa1fe5f5f2ca87731be3df371028343bff630802198ff4662cc929181900390910190a15050565b6000546001600160a01b031633146116c5576040805162461bcd60e51b815260206004820181905260248201526000805160206134da833981519152604482015290519081900360640190fd5b6004548110611709576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6005805490829055604080518281526020810184905281517f2776661234beb4ca23052cb251bc0272106d670416a34e5a858fdbabec033d15929181900390910190a15050565b600180548101908190556003546001600160a01b0316158015906117ec5750600354604080516320aed76360e01b815290516000926001600160a01b0316916320aed763916004808301926020929190829003018186803b1580156117b457600080fd5b505afa1580156117c8573d6000803e3d6000fd5b505050506040513d60208110156117de57600080fd5b50516001600160a01b031614155b611826576040805162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b604482015290519081900360640190fd5b6002546001600160a01b03166118825734821461187d576040805162461bcd60e51b815260206004820152601060248201526f1a5b98dbdb9cda5cdd08185b5bdd5b9d60821b604482015290519081900360640190fd5b611951565b60025460408051636eb1769f60e11b8152336004820152306024820152905184926001600160a01b03169163dd62ed3e916044808301926020929190829003018186803b1580156118d257600080fd5b505afa1580156118e6573d6000803e3d6000fd5b505050506040513d60208110156118fc57600080fd5b50511015611951576040805162461bcd60e51b815260206004820152601d60248201527f43465661756c743a206e6f7420656e6f75676820616c6c6f77616e6365000000604482015290519081900360640190fd5b60085482111561199b576040805162461bcd60e51b815260206004820152601060248201526f1d1bdbc81b185c99d948185b5bdd5b9d60821b604482015290519081900360640190fd5b6009546119e2576040805162461bcd60e51b815260206004820152601060248201526f14db1a5c1c1859d9481b9bdd081cd95d60821b604482015290519081900360640190fd5b81611a27576040805162461bcd60e51b815260206004820152601060248201526f1d1bdbc81cdb585b1b08185b5bdd5b9d60821b604482015290519081900360640190fd5b600254600354604080516320aed76360e01b81529051600093733fae5f25953e16833fbf9c1fa55b683dc87e2aad93631dc9608b936001600160a01b039283169391909216916320aed763916004808301926020929190829003018186803b158015611a9257600080fd5b505afa158015611aa6573d6000803e3d6000fd5b505050506040513d6020811015611abc57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b158015611b0c57600080fd5b505af4158015611b20573d6000803e3d6000fd5b505050506040513d6020811015611b3657600080fd5b50516002549091506001600160a01b031615611be957611be433600360009054906101000a90046001600160a01b03166001600160a01b03166320aed7636040518163ffffffff1660e01b815260040160206040518083038186803b158015611b9e57600080fd5b505afa158015611bb2573d6000803e3d6000fd5b505050506040513d6020811015611bc857600080fd5b50516002546001600160a01b031691908663ffffffff6131bf16565b611d0f565b600254600354604080516320aed76360e01b81529051733fae5f25953e16833fbf9c1fa55b683dc87e2aad9363beabacc8936001600160a01b0391821693611c8f9391909216916320aed763916004808301926020929190829003018186803b158015611c5557600080fd5b505afa158015611c69573d6000803e3d6000fd5b505050506040513d6020811015611c7f57600080fd5b50516001600160a01b031661151a565b866040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060006040518083038186803b158015611cf657600080fd5b505af4158015611d0a573d6000803e3d6000fd5b505050505b600254600354604080516320aed76360e01b81529051600093733fae5f25953e16833fbf9c1fa55b683dc87e2aad93631dc9608b936001600160a01b039283169391909216916320aed763916004808301926020929190829003018186803b158015611d7a57600080fd5b505afa158015611d8e573d6000803e3d6000fd5b505050506040513d6020811015611da457600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b158015611df457600080fd5b505af4158015611e08573d6000803e3d6000fd5b505050506040513d6020811015611e1e57600080fd5b5051604080516314527a3d60e31b815260048101839052602481018590529051919250859173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163a293d1e8916044808301926020929190829003018186803b158015611e7e57600080fd5b505af4158015611e92573d6000803e3d6000fd5b505050506040513d6020811015611ea857600080fd5b505114611eee576040805162461bcd60e51b815260206004820152600f60248201526e3a37b5b2b71034b7333630ba34b7b760891b604482015290519081900360640190fd5b600080600360009054906101000a90046001600160a01b03166001600160a01b03166320aed7636040518163ffffffff1660e01b815260040160206040518083038186803b158015611f3f57600080fd5b505afa158015611f53573d6000803e3d6000fd5b505050506040513d6020811015611f6957600080fd5b5051604080516303837a9760e41b815290516001600160a01b0390921691633837a97091600480820192602092909190829003018186803b158015611fad57600080fd5b505afa158015611fc1573d6000803e3d6000fd5b505050506040513d6020811015611fd757600080fd5b505160025460408051636a24d41960e11b81526001600160a01b03909216600483015251919250600091733fae5f25953e16833fbf9c1fa55b683dc87e2aad9163d449a832916024808301926020929190829003018186803b15801561203c57600080fd5b505af4158015612050573d6000803e3d6000fd5b505050506040513d602081101561206657600080fd5b5051600354604080516320aed76360e01b81529051600a9390930a93506000926001600160a01b03909216916320aed76391600480820192602092909190829003018186803b1580156120b857600080fd5b505afa1580156120cc573d6000803e3d6000fd5b505050506040513d60208110156120e257600080fd5b505160408051630176f71760e71b815290516001600160a01b039092169163bb7b8b8091600480820192602092909190829003018186803b15801561212657600080fd5b505afa15801561213a573d6000803e3d6000fd5b505050506040513d602081101561215057600080fd5b50516040805163682e3c6d60e11b8152600481018b90526d04ee2d6d415b85acef81000000006024820152905191925060009173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163d05c78da916044808301926020929190829003018186803b1580156121be57600080fd5b505af41580156121d2573d6000803e3d6000fd5b505050506040513d60208110156121e857600080fd5b50516009546040805163682e3c6d60e11b8152600481019390935260248301919091525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163d05c78da916044808301926020929190829003018186803b15801561224757600080fd5b505af415801561225b573d6000803e3d6000fd5b505050506040513d602081101561227157600080fd5b505160408051632d64c7df60e21b81526004810192909252602482018590525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163b5931f7c916044808301926020929190829003018186803b1580156122cc57600080fd5b505af41580156122e0573d6000803e3d6000fd5b505050506040513d60208110156122f657600080fd5b505160408051632d64c7df60e21b81526004810192909252602482018490525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163b5931f7c916044808301926020929190829003018186803b15801561235157600080fd5b505af4158015612365573d6000803e3d6000fd5b505050506040513d602081101561237b57600080fd5b50516003546040805163b6b55f2560e01b8152600481018d905290519293506001600160a01b039091169163b6b55f259160248082019260009290919082900301818387803b1580156123cd57600080fd5b505af11580156123e1573d6000803e3d6000fd5b505050506000600360009054906101000a90046001600160a01b03166001600160a01b03166320aed7636040518163ffffffff1660e01b815260040160206040518083038186803b15801561243557600080fd5b505afa158015612449573d6000803e3d6000fd5b505050506040513d602081101561245f57600080fd5b5051604080516303837a9760e41b815290516001600160a01b0390921691633837a97091600480820192602092909190829003018186803b1580156124a357600080fd5b505afa1580156124b7573d6000803e3d6000fd5b505050506040513d60208110156124cd57600080fd5b5051604080516314527a3d60e31b81526004810183905260248101889052905191925073071108ad85d7a766b41e0f5e5195537a8fc8e74d9163a293d1e891604480820192602092909190829003018186803b15801561252c57600080fd5b505af4158015612540573d6000803e3d6000fd5b505050506040513d602081101561255657600080fd5b505195508186101561259a576040805162461bcd60e51b8152602060048201526008602482015267536c69707061676560c01b604482015290519081900360640190fd5b505050506000600360009054906101000a90046001600160a01b03166001600160a01b03166320aed7636040518163ffffffff1660e01b815260040160206040518083038186803b1580156125ee57600080fd5b505afa158015612602573d6000803e3d6000fd5b505050506040513d602081101561261857600080fd5b505160408051631ddf237f60e21b815290516001600160a01b039092169163777c8dfc91600480820192602092909190829003018186803b15801561265c57600080fd5b505afa158015612670573d6000803e3d6000fd5b505050506040513d602081101561268657600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156126ca57600080fd5b505afa1580156126de573d6000803e3d6000fd5b505050506040513d60208110156126f457600080fd5b505160ff1690506012811115612743576040805162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a5908191958da5b585b608a1b604482015290519081900360640190fd5b600082612865576040805163682e3c6d60e11b815260048101869052670de0b6b3a76400006024820152905173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163d05c78da916044808301926020929190829003018186803b1580156127aa57600080fd5b505af41580156127be573d6000803e3d6000fd5b505050506040513d60208110156127d457600080fd5b505160408051632d64c7df60e21b81526004810192909252600a84900a60248301525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163b5931f7c916044808301926020929190829003018186803b15801561283257600080fd5b505af4158015612846573d6000803e3d6000fd5b505050506040513d602081101561285c57600080fd5b505190506129f5565b8373071108ad85d7a766b41e0f5e5195537a8fc8e74d63d05c78da9091600760009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156128d057600080fd5b505afa1580156128e4573d6000803e3d6000fd5b505050506040513d60208110156128fa57600080fd5b5051604080516001600160e01b031960e086901b16815260048101939093526024830191909152516044808301926020929190829003018186803b15801561294157600080fd5b505af4158015612955573d6000803e3d6000fd5b505050506040513d602081101561296b57600080fd5b505160408051632d64c7df60e21b81526004810192909252602482018590525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163b5931f7c916044808301926020929190829003018186803b1580156129c657600080fd5b505af41580156129da573d6000803e3d6000fd5b505050506040513d60208110156129f057600080fd5b505190505b60075460408051630209fccb60e61b81523360048201526024810184905290516001600160a01b039092169163827f32c0916044808201926020929091908290030181600087803b158015612a4957600080fd5b505af1158015612a5d573d6000803e3d6000fd5b505050506040513d6020811015612a7357600080fd5b507f405007275853f6b040feb6bd41de0d355501031f20550aa7b4278f89ab83cf359050338983612aa2612b2d565b604080516001600160a01b0390951685526020850193909352838301919091526060830152519081900360800190a1505050505050600154811461137f576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600080600360009054906101000a90046001600160a01b03166001600160a01b03166320aed7636040518163ffffffff1660e01b815260040160206040518083038186803b158015612b7e57600080fd5b505afa158015612b92573d6000803e3d6000fd5b505050506040513d6020811015612ba857600080fd5b5051604080516303837a9760e41b815290519192506000916001600160a01b03841691633837a970916004808301926020929190829003018186803b158015612bf057600080fd5b505afa158015612c04573d6000803e3d6000fd5b505050506040513d6020811015612c1a57600080fd5b50516007546040805163313ce56760e01b8152905173071108ad85d7a766b41e0f5e5195537a8fc8e74d9363d05c78da9390926001600160a01b039091169163313ce56791600480820192602092909190829003018186803b158015612c7f57600080fd5b505afa158015612c93573d6000803e3d6000fd5b505050506040513d6020811015612ca957600080fd5b5051604080516001600160e01b031960e086901b168152600481019390935260ff909116600a0a6024830152516044808301926020929190829003018186803b158015612cf557600080fd5b505af4158015612d09573d6000803e3d6000fd5b505050506040513d6020811015612d1f57600080fd5b5051600754604080516318160ddd60e01b815290519293506000926001600160a01b03909216916318160ddd91600480820192602092909190829003018186803b158015612d6c57600080fd5b505afa158015612d80573d6000803e3d6000fd5b505050506040513d6020811015612d9657600080fd5b505160408051631ddf237f60e21b8152905173071108ad85d7a766b41e0f5e5195537a8fc8e74d9263d05c78da9290916001600160a01b0388169163777c8dfc916004808301926020929190829003018186803b158015612df657600080fd5b505afa158015612e0a573d6000803e3d6000fd5b505050506040513d6020811015612e2057600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b158015612e6457600080fd5b505afa158015612e78573d6000803e3d6000fd5b505050506040513d6020811015612e8e57600080fd5b5051604080516001600160e01b031960e086901b168152600481019390935260ff909116600a0a6024830152516044808301926020929190829003018186803b158015612eda57600080fd5b505af4158015612eee573d6000803e3d6000fd5b505050506040513d6020811015612f0457600080fd5b5051905080612f19576000935050505061151a565b8173071108ad85d7a766b41e0f5e5195537a8fc8e74d63d05c78da9091856001600160a01b031663bb7b8b806040518163ffffffff1660e01b815260040160206040518083038186803b158015612f6f57600080fd5b505afa158015612f83573d6000803e3d6000fd5b505050506040513d6020811015612f9957600080fd5b5051604080516001600160e01b031960e086901b16815260048101939093526024830191909152516044808301926020929190829003018186803b158015612fe057600080fd5b505af4158015612ff4573d6000803e3d6000fd5b505050506040513d602081101561300a57600080fd5b505160408051632d64c7df60e21b81526004810192909252602482018390525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163b5931f7c916044808301926020929190829003018186803b15801561306557600080fd5b505af4158015613079573d6000803e3d6000fd5b505050506040513d602081101561308f57600080fd5b5051935050505090565b6000546001600160a01b031633146130e6576040805162461bcd60e51b815260206004820181905260248201526000805160206134da833981519152604482015290519081900360640190fd5b600680546001600160a01b038381166001600160a01b0319831617928390556040805192821680845293909116602083015280517fdb914ba6c4c3f90ff1efa3912c65fe18309a37a068e54771193c20f1e2ba180c9281900390910190a15050565b6000546001600160a01b03163314613195576040805162461bcd60e51b815260206004820181905260248201526000805160206134da833981519152604482015290519081900360640190fd5b61319e8161321f565b50565b6002546001600160a01b031681565b6003546001600160a01b031681565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526132199085906132bf565b50505050565b6001600160a01b0381166132645760405162461bcd60e51b81526004018080602001828103825260268152602001806134b46026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6132d1826001600160a01b0316613477565b613322576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106133605780518252601f199092019160209182019101613341565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146133c2576040519150601f19603f3d011682016040523d82523d6000602084013e6133c7565b606091505b50915091508161341e576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156132195780806020019051602081101561343a57600080fd5b50516132195760405162461bcd60e51b815260040180806020018281038252602a8152602001806134fa602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906134ab5750808214155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72305820649f64bad91b3f479bb051e0e2102f422ae21197b10655f0fe16d8affbbde03264736f6c634300050a0032000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000412ebdc655f897e0ec0f89022bc7dec62baae0af00000000000000000000000073b1502149f4296f137f3d432c74e62344cfc2d7
Deployed Bytecode
0x6080604052600436106101145760003560e01c806382c63066116100a0578063bb7b8b8011610064578063bb7b8b80146102e4578063d367e2aa146102f9578063f2fde38b1461032c578063f51f74961461035f578063f77c47911461037457610114565b806382c63066146102495780638da5cb5b1461025e5780638edd69ec14610273578063a893c9be1461029d578063b6b55f25146102c757610114565b80633cebb823116100e75780633cebb8231461019157806344e81c0c146101c45780635a2dfd49146101d957806370f9e52f14610203578063797d19851461021857610114565b80630e775274146101165780631a34fe811461013d5780632e1a7d4d14610152578063392c731f1461017c575b005b34801561012257600080fd5b5061012b610389565b60408051918252519081900360200190f35b34801561014957600080fd5b5061012b61038f565b34801561015e57600080fd5b506101146004803603602081101561017557600080fd5b5035610395565b34801561018857600080fd5b5061012b611383565b34801561019d57600080fd5b50610114600480360360208110156101b457600080fd5b50356001600160a01b0316611389565b3480156101d057600080fd5b5061012b611438565b3480156101e557600080fd5b50610114600480360360208110156101fc57600080fd5b503561151d565b34801561020f57600080fd5b5061012b6115b1565b34801561022457600080fd5b5061022d6115b7565b604080516001600160a01b039092168252519081900360200190f35b34801561025557600080fd5b5061022d6115c6565b34801561026a57600080fd5b5061022d6115d5565b34801561027f57600080fd5b506101146004803603602081101561029657600080fd5b50356115e4565b3480156102a957600080fd5b50610114600480360360208110156102c057600080fd5b5035611678565b610114600480360360208110156102dd57600080fd5b5035611750565b3480156102f057600080fd5b5061012b612b2d565b34801561030557600080fd5b506101146004803603602081101561031c57600080fd5b50356001600160a01b0316613099565b34801561033857600080fd5b506101146004803603602081101561034f57600080fd5b50356001600160a01b0316613148565b34801561036b57600080fd5b5061022d6131a1565b34801561038057600080fd5b5061022d6131b0565b60045481565b60085481565b600180548101908190556003546001600160a01b0316158015906104315750600354604080516320aed76360e01b815290516000926001600160a01b0316916320aed763916004808301926020929190829003018186803b1580156103f957600080fd5b505afa15801561040d573d6000803e3d6000fd5b505050506040513d602081101561042357600080fd5b50516001600160a01b031614155b61046b576040805162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b604482015290519081900360640190fd5b6009546104b2576040805162461bcd60e51b815260206004820152601060248201526f14db1a5c1c1859d9481b9bdd081cd95d60821b604482015290519081900360640190fd5b600754604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156104fd57600080fd5b505afa158015610511573d6000803e3d6000fd5b505050506040513d602081101561052757600080fd5b5051905082811015610576576040805162461bcd60e51b81526020600482015260136024820152726e6f20656e6f756768204c5020746f6b656e7360681b604482015290519081900360640190fd5b600354604080516320aed76360e01b8152905160009273071108ad85d7a766b41e0f5e5195537a8fc8e74d9263d05c78da9288926001600160a01b0316916320aed763916004808301926020929190829003018186803b1580156105d957600080fd5b505afa1580156105ed573d6000803e3d6000fd5b505050506040513d602081101561060357600080fd5b5051604080516303837a9760e41b815290516001600160a01b0390921691633837a97091600480820192602092909190829003018186803b15801561064757600080fd5b505afa15801561065b573d6000803e3d6000fd5b505050506040513d602081101561067157600080fd5b5051604080516001600160e01b031960e086901b16815260048101939093526024830191909152516044808301926020929190829003018186803b1580156106b857600080fd5b505af41580156106cc573d6000803e3d6000fd5b505050506040513d60208110156106e257600080fd5b5051600754604080516318160ddd60e01b8152905173071108ad85d7a766b41e0f5e5195537a8fc8e74d9363b5931f7c9390926001600160a01b03909116916318160ddd91600480820192602092909190829003018186803b15801561074757600080fd5b505afa15801561075b573d6000803e3d6000fd5b505050506040513d602081101561077157600080fd5b5051604080516001600160e01b031960e086901b16815260048101939093526024830191909152516044808301926020929190829003018186803b1580156107b857600080fd5b505af41580156107cc573d6000803e3d6000fd5b505050506040513d60208110156107e257600080fd5b505160025460408051636a24d41960e11b81526001600160a01b03909216600483015251919250600091733fae5f25953e16833fbf9c1fa55b683dc87e2aad9163d449a832916024808301926020929190829003018186803b15801561084757600080fd5b505af415801561085b573d6000803e3d6000fd5b505050506040513d602081101561087157600080fd5b5051600354604080516320aed76360e01b81529051600a9390930a93506000926001600160a01b03909216916320aed76391600480820192602092909190829003018186803b1580156108c357600080fd5b505afa1580156108d7573d6000803e3d6000fd5b505050506040513d60208110156108ed57600080fd5b505160408051630176f71760e71b815290516001600160a01b039092169163bb7b8b8091600480820192602092909190829003018186803b15801561093157600080fd5b505afa158015610945573d6000803e3d6000fd5b505050506040513d602081101561095b57600080fd5b50516040805163682e3c6d60e11b81526004810186905260248101839052905191925060009173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163d05c78da916044808301926020929190829003018186803b1580156109bc57600080fd5b505af41580156109d0573d6000803e3d6000fd5b505050506040513d60208110156109e657600080fd5b50516009546040805163682e3c6d60e11b8152600481019390935260248301919091525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163d05c78da916044808301926020929190829003018186803b158015610a4557600080fd5b505af4158015610a59573d6000803e3d6000fd5b505050506040513d6020811015610a6f57600080fd5b50516040805163682e3c6d60e11b81526004810192909252602482018590525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163d05c78da916044808301926020929190829003018186803b158015610aca57600080fd5b505af4158015610ade573d6000803e3d6000fd5b505050506040513d6020811015610af457600080fd5b505160408051632d64c7df60e21b81526004810192909252701d6329f1c35ca4bfabb9f561000000000060248301525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163b5931f7c916044808301926020929190829003018186803b158015610b5f57600080fd5b505af4158015610b73573d6000803e3d6000fd5b505050506040513d6020811015610b8957600080fd5b505160025460408051631dc9608b60e01b81526001600160a01b03909216600483015230602483015251919250600091733fae5f25953e16833fbf9c1fa55b683dc87e2aad91631dc9608b916044808301926020929190829003018186803b158015610bf457600080fd5b505af4158015610c08573d6000803e3d6000fd5b505050506040513d6020811015610c1e57600080fd5b505160035460408051632e1a7d4d60e01b81526004810189905290519293506001600160a01b0390911691632e1a7d4d9160248082019260009290919082900301818387803b158015610c7057600080fd5b505af1158015610c84573d6000803e3d6000fd5b505060025460408051631dc9608b60e01b81526001600160a01b0390921660048301523060248301525160009350733fae5f25953e16833fbf9c1fa55b683dc87e2aad9250631dc9608b91604480820192602092909190829003018186803b158015610cef57600080fd5b505af4158015610d03573d6000803e3d6000fd5b505050506040513d6020811015610d1957600080fd5b5051604080516314527a3d60e31b81526004810183905260248101859052905191925060009173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163a293d1e8916044808301926020929190829003018186803b158015610d7a57600080fd5b505af4158015610d8e573d6000803e3d6000fd5b505050506040513d6020811015610da457600080fd5b5051905083811015610de8576040805162461bcd60e51b8152602060048201526008602482015267536c69707061676560c01b604482015290519081900360640190fd5b60055415801590610e0357506006546001600160a01b031615155b156111bb5760008173071108ad85d7a766b41e0f5e5195537a8fc8e74d63d05c78da90916005546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015610e6557600080fd5b505af4158015610e79573d6000803e3d6000fd5b505050506040513d6020811015610e8f57600080fd5b50516004805460408051632d64c7df60e21b8152928301939093526024820152905173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163b5931f7c916044808301926020929190829003018186803b158015610eec57600080fd5b505af4158015610f00573d6000803e3d6000fd5b505050506040513d6020811015610f1657600080fd5b5051604080516314527a3d60e31b81526004810185905260248101839052905191925060009173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163a293d1e8916044808301926020929190829003018186803b158015610f7757600080fd5b505af4158015610f8b573d6000803e3d6000fd5b505050506040513d6020811015610fa157600080fd5b5051600254604080516317d5759960e31b81526001600160a01b0390921660048301523360248301526044820183905251919250733fae5f25953e16833fbf9c1fa55b683dc87e2aad9163beabacc891606480820192600092909190829003018186803b15801561101157600080fd5b505af4158015611025573d6000803e3d6000fd5b5050600254600654604080516317d5759960e31b81526001600160a01b0393841660048201529290911660248301526044820186905251733fae5f25953e16833fbf9c1fa55b683dc87e2aad935063beabacc892506064808301926000929190829003018186803b15801561109957600080fd5b505af41580156110ad573d6000803e3d6000fd5b50505050600760009054906101000a90046001600160a01b03166001600160a01b031663d3ce77fe338e6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561112657600080fd5b505af115801561113a573d6000803e3d6000fd5b505050506040513d602081101561115057600080fd5b507fbdd509a6ec35e0e438c8b76b0ccbd5cac5d64387affc672f95bdcb361c817a22905033828e85611180612b2d565b604080516001600160a01b03909616865260208601949094528484019290925260608401526080830152519081900360a00190a15050611321565b600254604080516317d5759960e31b81526001600160a01b0390921660048301523360248301526044820183905251733fae5f25953e16833fbf9c1fa55b683dc87e2aad9163beabacc8916064808301926000929190829003018186803b15801561122557600080fd5b505af4158015611239573d6000803e3d6000fd5b5050600754604080516369e73bff60e11b8152336004820152602481018f905290516001600160a01b03909216935063d3ce77fe92506044808201926020929091908290030181600087803b15801561129157600080fd5b505af11580156112a5573d6000803e3d6000fd5b505050506040513d60208110156112bb57600080fd5b507fbdd509a6ec35e0e438c8b76b0ccbd5cac5d64387affc672f95bdcb361c817a22905033828c60006112ec612b2d565b604080516001600160a01b03909616865260208601949094528484019290925260608401526080830152519081900360a00190a15b5050505050505050600154811461137f576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b5050565b60095481565b6000546001600160a01b031633146113d6576040805162461bcd60e51b815260206004820181905260248201526000805160206134da833981519152604482015290519081900360640190fd5b600380546001600160a01b038381166001600160a01b0319831617928390556040805192821680845293909116602083015280517f7bd9aab74fc8b860dff8328bda449632993abb9bd61340154740618a3debeb899281900390910190a15050565b600354604080516320aed76360e01b815290516000926001600160a01b0316916320aed763916004808301926020929190829003018186803b15801561147d57600080fd5b505afa158015611491573d6000803e3d6000fd5b505050506040513d60208110156114a757600080fd5b5051604080516303837a9760e41b815290516001600160a01b0390921691633837a97091600480820192602092909190829003018186803b1580156114eb57600080fd5b505afa1580156114ff573d6000803e3d6000fd5b505050506040513d602081101561151557600080fd5b505190505b90565b6000546001600160a01b0316331461156a576040805162461bcd60e51b815260206004820181905260248201526000805160206134da833981519152604482015290519081900360640190fd5b6008805490829055604080518281526020810184905281517fda1ac08e19cf366ae5b5feb717776ca672304e55946e9640989edad1d94900b5929181900390910190a15050565b60055481565b6006546001600160a01b031681565b6007546001600160a01b031681565b6000546001600160a01b031690565b6000546001600160a01b03163314611631576040805162461bcd60e51b815260206004820181905260248201526000805160206134da833981519152604482015290519081900360640190fd5b6009805490829055604080518281526020810184905281517f2907babb582b9aa1fe5f5f2ca87731be3df371028343bff630802198ff4662cc929181900390910190a15050565b6000546001600160a01b031633146116c5576040805162461bcd60e51b815260206004820181905260248201526000805160206134da833981519152604482015290519081900360640190fd5b6004548110611709576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6005805490829055604080518281526020810184905281517f2776661234beb4ca23052cb251bc0272106d670416a34e5a858fdbabec033d15929181900390910190a15050565b600180548101908190556003546001600160a01b0316158015906117ec5750600354604080516320aed76360e01b815290516000926001600160a01b0316916320aed763916004808301926020929190829003018186803b1580156117b457600080fd5b505afa1580156117c8573d6000803e3d6000fd5b505050506040513d60208110156117de57600080fd5b50516001600160a01b031614155b611826576040805162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b604482015290519081900360640190fd5b6002546001600160a01b03166118825734821461187d576040805162461bcd60e51b815260206004820152601060248201526f1a5b98dbdb9cda5cdd08185b5bdd5b9d60821b604482015290519081900360640190fd5b611951565b60025460408051636eb1769f60e11b8152336004820152306024820152905184926001600160a01b03169163dd62ed3e916044808301926020929190829003018186803b1580156118d257600080fd5b505afa1580156118e6573d6000803e3d6000fd5b505050506040513d60208110156118fc57600080fd5b50511015611951576040805162461bcd60e51b815260206004820152601d60248201527f43465661756c743a206e6f7420656e6f75676820616c6c6f77616e6365000000604482015290519081900360640190fd5b60085482111561199b576040805162461bcd60e51b815260206004820152601060248201526f1d1bdbc81b185c99d948185b5bdd5b9d60821b604482015290519081900360640190fd5b6009546119e2576040805162461bcd60e51b815260206004820152601060248201526f14db1a5c1c1859d9481b9bdd081cd95d60821b604482015290519081900360640190fd5b81611a27576040805162461bcd60e51b815260206004820152601060248201526f1d1bdbc81cdb585b1b08185b5bdd5b9d60821b604482015290519081900360640190fd5b600254600354604080516320aed76360e01b81529051600093733fae5f25953e16833fbf9c1fa55b683dc87e2aad93631dc9608b936001600160a01b039283169391909216916320aed763916004808301926020929190829003018186803b158015611a9257600080fd5b505afa158015611aa6573d6000803e3d6000fd5b505050506040513d6020811015611abc57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b158015611b0c57600080fd5b505af4158015611b20573d6000803e3d6000fd5b505050506040513d6020811015611b3657600080fd5b50516002549091506001600160a01b031615611be957611be433600360009054906101000a90046001600160a01b03166001600160a01b03166320aed7636040518163ffffffff1660e01b815260040160206040518083038186803b158015611b9e57600080fd5b505afa158015611bb2573d6000803e3d6000fd5b505050506040513d6020811015611bc857600080fd5b50516002546001600160a01b031691908663ffffffff6131bf16565b611d0f565b600254600354604080516320aed76360e01b81529051733fae5f25953e16833fbf9c1fa55b683dc87e2aad9363beabacc8936001600160a01b0391821693611c8f9391909216916320aed763916004808301926020929190829003018186803b158015611c5557600080fd5b505afa158015611c69573d6000803e3d6000fd5b505050506040513d6020811015611c7f57600080fd5b50516001600160a01b031661151a565b866040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060006040518083038186803b158015611cf657600080fd5b505af4158015611d0a573d6000803e3d6000fd5b505050505b600254600354604080516320aed76360e01b81529051600093733fae5f25953e16833fbf9c1fa55b683dc87e2aad93631dc9608b936001600160a01b039283169391909216916320aed763916004808301926020929190829003018186803b158015611d7a57600080fd5b505afa158015611d8e573d6000803e3d6000fd5b505050506040513d6020811015611da457600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b158015611df457600080fd5b505af4158015611e08573d6000803e3d6000fd5b505050506040513d6020811015611e1e57600080fd5b5051604080516314527a3d60e31b815260048101839052602481018590529051919250859173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163a293d1e8916044808301926020929190829003018186803b158015611e7e57600080fd5b505af4158015611e92573d6000803e3d6000fd5b505050506040513d6020811015611ea857600080fd5b505114611eee576040805162461bcd60e51b815260206004820152600f60248201526e3a37b5b2b71034b7333630ba34b7b760891b604482015290519081900360640190fd5b600080600360009054906101000a90046001600160a01b03166001600160a01b03166320aed7636040518163ffffffff1660e01b815260040160206040518083038186803b158015611f3f57600080fd5b505afa158015611f53573d6000803e3d6000fd5b505050506040513d6020811015611f6957600080fd5b5051604080516303837a9760e41b815290516001600160a01b0390921691633837a97091600480820192602092909190829003018186803b158015611fad57600080fd5b505afa158015611fc1573d6000803e3d6000fd5b505050506040513d6020811015611fd757600080fd5b505160025460408051636a24d41960e11b81526001600160a01b03909216600483015251919250600091733fae5f25953e16833fbf9c1fa55b683dc87e2aad9163d449a832916024808301926020929190829003018186803b15801561203c57600080fd5b505af4158015612050573d6000803e3d6000fd5b505050506040513d602081101561206657600080fd5b5051600354604080516320aed76360e01b81529051600a9390930a93506000926001600160a01b03909216916320aed76391600480820192602092909190829003018186803b1580156120b857600080fd5b505afa1580156120cc573d6000803e3d6000fd5b505050506040513d60208110156120e257600080fd5b505160408051630176f71760e71b815290516001600160a01b039092169163bb7b8b8091600480820192602092909190829003018186803b15801561212657600080fd5b505afa15801561213a573d6000803e3d6000fd5b505050506040513d602081101561215057600080fd5b50516040805163682e3c6d60e11b8152600481018b90526d04ee2d6d415b85acef81000000006024820152905191925060009173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163d05c78da916044808301926020929190829003018186803b1580156121be57600080fd5b505af41580156121d2573d6000803e3d6000fd5b505050506040513d60208110156121e857600080fd5b50516009546040805163682e3c6d60e11b8152600481019390935260248301919091525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163d05c78da916044808301926020929190829003018186803b15801561224757600080fd5b505af415801561225b573d6000803e3d6000fd5b505050506040513d602081101561227157600080fd5b505160408051632d64c7df60e21b81526004810192909252602482018590525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163b5931f7c916044808301926020929190829003018186803b1580156122cc57600080fd5b505af41580156122e0573d6000803e3d6000fd5b505050506040513d60208110156122f657600080fd5b505160408051632d64c7df60e21b81526004810192909252602482018490525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163b5931f7c916044808301926020929190829003018186803b15801561235157600080fd5b505af4158015612365573d6000803e3d6000fd5b505050506040513d602081101561237b57600080fd5b50516003546040805163b6b55f2560e01b8152600481018d905290519293506001600160a01b039091169163b6b55f259160248082019260009290919082900301818387803b1580156123cd57600080fd5b505af11580156123e1573d6000803e3d6000fd5b505050506000600360009054906101000a90046001600160a01b03166001600160a01b03166320aed7636040518163ffffffff1660e01b815260040160206040518083038186803b15801561243557600080fd5b505afa158015612449573d6000803e3d6000fd5b505050506040513d602081101561245f57600080fd5b5051604080516303837a9760e41b815290516001600160a01b0390921691633837a97091600480820192602092909190829003018186803b1580156124a357600080fd5b505afa1580156124b7573d6000803e3d6000fd5b505050506040513d60208110156124cd57600080fd5b5051604080516314527a3d60e31b81526004810183905260248101889052905191925073071108ad85d7a766b41e0f5e5195537a8fc8e74d9163a293d1e891604480820192602092909190829003018186803b15801561252c57600080fd5b505af4158015612540573d6000803e3d6000fd5b505050506040513d602081101561255657600080fd5b505195508186101561259a576040805162461bcd60e51b8152602060048201526008602482015267536c69707061676560c01b604482015290519081900360640190fd5b505050506000600360009054906101000a90046001600160a01b03166001600160a01b03166320aed7636040518163ffffffff1660e01b815260040160206040518083038186803b1580156125ee57600080fd5b505afa158015612602573d6000803e3d6000fd5b505050506040513d602081101561261857600080fd5b505160408051631ddf237f60e21b815290516001600160a01b039092169163777c8dfc91600480820192602092909190829003018186803b15801561265c57600080fd5b505afa158015612670573d6000803e3d6000fd5b505050506040513d602081101561268657600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156126ca57600080fd5b505afa1580156126de573d6000803e3d6000fd5b505050506040513d60208110156126f457600080fd5b505160ff1690506012811115612743576040805162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a5908191958da5b585b608a1b604482015290519081900360640190fd5b600082612865576040805163682e3c6d60e11b815260048101869052670de0b6b3a76400006024820152905173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163d05c78da916044808301926020929190829003018186803b1580156127aa57600080fd5b505af41580156127be573d6000803e3d6000fd5b505050506040513d60208110156127d457600080fd5b505160408051632d64c7df60e21b81526004810192909252600a84900a60248301525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163b5931f7c916044808301926020929190829003018186803b15801561283257600080fd5b505af4158015612846573d6000803e3d6000fd5b505050506040513d602081101561285c57600080fd5b505190506129f5565b8373071108ad85d7a766b41e0f5e5195537a8fc8e74d63d05c78da9091600760009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156128d057600080fd5b505afa1580156128e4573d6000803e3d6000fd5b505050506040513d60208110156128fa57600080fd5b5051604080516001600160e01b031960e086901b16815260048101939093526024830191909152516044808301926020929190829003018186803b15801561294157600080fd5b505af4158015612955573d6000803e3d6000fd5b505050506040513d602081101561296b57600080fd5b505160408051632d64c7df60e21b81526004810192909252602482018590525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163b5931f7c916044808301926020929190829003018186803b1580156129c657600080fd5b505af41580156129da573d6000803e3d6000fd5b505050506040513d60208110156129f057600080fd5b505190505b60075460408051630209fccb60e61b81523360048201526024810184905290516001600160a01b039092169163827f32c0916044808201926020929091908290030181600087803b158015612a4957600080fd5b505af1158015612a5d573d6000803e3d6000fd5b505050506040513d6020811015612a7357600080fd5b507f405007275853f6b040feb6bd41de0d355501031f20550aa7b4278f89ab83cf359050338983612aa2612b2d565b604080516001600160a01b0390951685526020850193909352838301919091526060830152519081900360800190a1505050505050600154811461137f576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600080600360009054906101000a90046001600160a01b03166001600160a01b03166320aed7636040518163ffffffff1660e01b815260040160206040518083038186803b158015612b7e57600080fd5b505afa158015612b92573d6000803e3d6000fd5b505050506040513d6020811015612ba857600080fd5b5051604080516303837a9760e41b815290519192506000916001600160a01b03841691633837a970916004808301926020929190829003018186803b158015612bf057600080fd5b505afa158015612c04573d6000803e3d6000fd5b505050506040513d6020811015612c1a57600080fd5b50516007546040805163313ce56760e01b8152905173071108ad85d7a766b41e0f5e5195537a8fc8e74d9363d05c78da9390926001600160a01b039091169163313ce56791600480820192602092909190829003018186803b158015612c7f57600080fd5b505afa158015612c93573d6000803e3d6000fd5b505050506040513d6020811015612ca957600080fd5b5051604080516001600160e01b031960e086901b168152600481019390935260ff909116600a0a6024830152516044808301926020929190829003018186803b158015612cf557600080fd5b505af4158015612d09573d6000803e3d6000fd5b505050506040513d6020811015612d1f57600080fd5b5051600754604080516318160ddd60e01b815290519293506000926001600160a01b03909216916318160ddd91600480820192602092909190829003018186803b158015612d6c57600080fd5b505afa158015612d80573d6000803e3d6000fd5b505050506040513d6020811015612d9657600080fd5b505160408051631ddf237f60e21b8152905173071108ad85d7a766b41e0f5e5195537a8fc8e74d9263d05c78da9290916001600160a01b0388169163777c8dfc916004808301926020929190829003018186803b158015612df657600080fd5b505afa158015612e0a573d6000803e3d6000fd5b505050506040513d6020811015612e2057600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b158015612e6457600080fd5b505afa158015612e78573d6000803e3d6000fd5b505050506040513d6020811015612e8e57600080fd5b5051604080516001600160e01b031960e086901b168152600481019390935260ff909116600a0a6024830152516044808301926020929190829003018186803b158015612eda57600080fd5b505af4158015612eee573d6000803e3d6000fd5b505050506040513d6020811015612f0457600080fd5b5051905080612f19576000935050505061151a565b8173071108ad85d7a766b41e0f5e5195537a8fc8e74d63d05c78da9091856001600160a01b031663bb7b8b806040518163ffffffff1660e01b815260040160206040518083038186803b158015612f6f57600080fd5b505afa158015612f83573d6000803e3d6000fd5b505050506040513d6020811015612f9957600080fd5b5051604080516001600160e01b031960e086901b16815260048101939093526024830191909152516044808301926020929190829003018186803b158015612fe057600080fd5b505af4158015612ff4573d6000803e3d6000fd5b505050506040513d602081101561300a57600080fd5b505160408051632d64c7df60e21b81526004810192909252602482018390525173071108ad85d7a766b41e0f5e5195537a8fc8e74d9163b5931f7c916044808301926020929190829003018186803b15801561306557600080fd5b505af4158015613079573d6000803e3d6000fd5b505050506040513d602081101561308f57600080fd5b5051935050505090565b6000546001600160a01b031633146130e6576040805162461bcd60e51b815260206004820181905260248201526000805160206134da833981519152604482015290519081900360640190fd5b600680546001600160a01b038381166001600160a01b0319831617928390556040805192821680845293909116602083015280517fdb914ba6c4c3f90ff1efa3912c65fe18309a37a068e54771193c20f1e2ba180c9281900390910190a15050565b6000546001600160a01b03163314613195576040805162461bcd60e51b815260206004820181905260248201526000805160206134da833981519152604482015290519081900360640190fd5b61319e8161321f565b50565b6002546001600160a01b031681565b6003546001600160a01b031681565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526132199085906132bf565b50505050565b6001600160a01b0381166132645760405162461bcd60e51b81526004018080602001828103825260268152602001806134b46026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6132d1826001600160a01b0316613477565b613322576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106133605780518252601f199092019160209182019101613341565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146133c2576040519150601f19603f3d011682016040523d82523d6000602084013e6133c7565b606091505b50915091508161341e576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156132195780806020019051602081101561343a57600080fd5b50516132195760405162461bcd60e51b815260040180806020018281038252602a8152602001806134fa602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906134ab5750808214155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72305820649f64bad91b3f479bb051e0e2102f422ae21197b10655f0fe16d8affbbde03264736f6c634300050a0032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000412ebdc655f897e0ec0f89022bc7dec62baae0af00000000000000000000000073b1502149f4296f137f3d432c74e62344cfc2d7
-----Decoded View---------------
Arg [0] : _target_token (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [1] : _lp_token (address): 0x412EbDc655f897e0eC0f89022bc7DEC62BAaE0aF
Arg [2] : _controller (address): 0x73B1502149F4296F137F3d432C74e62344CfC2d7
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [1] : 000000000000000000000000412ebdc655f897e0ec0f89022bc7dec62baae0af
Arg [2] : 00000000000000000000000073b1502149f4296f137f3d432c74e62344cfc2d7
Libraries Used
SafeMath : 0x071108ad85d7a766b41e0f5e5195537a8fc8e74dUnverifiedTransferableToken : 0x3fae5f25953e16833fbf9c1fa55b683dc87e2aadUnverified
Deployed Bytecode Sourcemap
26511:7041:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26774:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26774:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;26906;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26906:25:0;;;:::i;30341:1764::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30341:1764:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30341:1764:0;;:::i;26936:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26936:19:0;;;:::i;32462:205::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32462:205:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32462:205:0;-1:-1:-1;;;;;32462:205:0;;:::i;33390:124::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33390:124:0;;;:::i;27364:162::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27364:162:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27364:162:0;;:::i;26804:33::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26804:33:0;;;:::i;26842:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26842:31:0;;;:::i;:::-;;;;-1:-1:-1;;;;;26842:31:0;;;;;;;;;;;;;;26878:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26878:23:0;;;:::i;582:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;582:88:0;;;:::i;27768:159::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27768:159:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27768:159:0;;:::i;32166:236::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32166:236:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32166:236:0;;:::i;27933:2246::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27933:2246:0;;:::i;32886:434::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32886:434:0;;;:::i;32724:156::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32724:156:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32724:156:0;-1:-1:-1;;;;;32724:156:0;;:::i;1044:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1044:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1044:109:0;-1:-1:-1;;;;;1044:109:0;;:::i;26696:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26696:27:0;;;:::i;26728:39::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26728:39:0;;;:::i;26774:25::-;;;;:::o;26906:::-;;;;:::o;30341:1764::-;3693:1;3676:18;;;;;;;;30410:10;;-1:-1:-1;;;;;30410:10:0;:40;;;;:92;;-1:-1:-1;30454:10:0;;:29;;;-1:-1:-1;;;30454:29:0;;;;30498:3;;-1:-1:-1;;;;;30454:10:0;;-1:-1:-1;;30454:29:0;;;;;;;;;;;;;;:10;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;30454:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30454:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30454:29:0;-1:-1:-1;;;;;30454:48:0;;;30410:92;30402:111;;;;;-1:-1:-1;;;30402:111:0;;;;;;;;;;;;-1:-1:-1;;;30402:111:0;;;;;;;;;;;;;;;30528:4;;30520:38;;;;;-1:-1:-1;;;30520:38:0;;;;;;;;;;;;-1:-1:-1;;;30520:38:0;;;;;;;;;;;;;;;30589:8;;30582:38;;;-1:-1:-1;;;30582:38:0;;30609:10;30582:38;;;;;;-1:-1:-1;;;;;;;30589:8:0;;-1:-1:-1;;30582:38:0;;;;;;;;;;;;;;30589:8;30582:38;;;5:2:-1;;;;30:1;27;20:12;5:2;30582:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30582:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30582:38:0;;-1:-1:-1;30635:17:0;;;;30627:49;;;;;-1:-1:-1;;;30627:49:0;;;;;;;;;;;;-1:-1:-1;;;30627:49:0;;;;;;;;;;;;;;;30724:10;;:29;;;-1:-1:-1;;;30724:29:0;;;;30685:20;;30708:15;;;;:7;;-1:-1:-1;;;;;30724:10:0;;-1:-1:-1;;30724:29:0;;;;;;;;;;;;;;:10;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;30724:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30724:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30724:29:0;:52;;;-1:-1:-1;;;30724:52:0;;;;-1:-1:-1;;;;;30724:50:0;;;;;;:52;;;;;:29;;:52;;;;;;;;:50;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;30724:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30724:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30724:52:0;30708:69;;;-1:-1:-1;30708:69:0;;;-1:-1:-1;;;;;;30708:69:0;;;;;;;;;;;;;;;;;;;;;;;30724:52;;30708:69;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;30708:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30708:69:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30708:69:0;30793:8;;30786:30;;;-1:-1:-1;;;30786:30:0;;;;30708:77;;;;:69;;-1:-1:-1;;;;;30793:8:0;;;;-1:-1:-1;;30786:30:0;;;;;30708:69;;30786:30;;;;;;;;30793:8;30786:30;;;5:2:-1;;;;30:1;27;20:12;5:2;30786:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30786:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30786:30:0;30708:109;;;-1:-1:-1;30708:109:0;;;-1:-1:-1;;;;;;30708:109:0;;;;;;;;;;;;;;;;;;;;;;;30786:30;;30708:109;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;30708:109:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30708:109:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30708:109:0;30875:12;;30848:40;;;-1:-1:-1;;;30848:40:0;;-1:-1:-1;;;;;30875:12:0;;;30848:40;;;;;30708:109;;-1:-1:-1;;;30848:17:0;;:26;;:40;;;;;30708:109;;30848:40;;;;;;;:17;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;30848:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30848:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30848:40:0;30907:10;;:29;;;-1:-1:-1;;;30907:29:0;;;;30842:2;30837:52;;;;;-1:-1:-1;30896:8:0;;-1:-1:-1;;;;;30907:10:0;;;;-1:-1:-1;;30907:29:0;;;;;30848:40;;30907:29;;;;;;;;:10;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;30907:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30907:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30907:29:0;:49;;;-1:-1:-1;;;30907:49:0;;;;-1:-1:-1;;;;;30907:47:0;;;;;;:49;;;;;:29;;:49;;;;;;;;:47;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;30907:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30907:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30907:49:0;30981:28;;;-1:-1:-1;;;30981:28:0;;;;;;;;;;;;;;;;30907:49;;-1:-1:-1;;;30981:23:0;;;;:28;;;;;30907:49;;30981:28;;;;;;;:23;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;30981:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30981:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30981:28:0;31018:4;;30981:42;;;-1:-1:-1;;;30981:42:0;;;;;;;;;;;;;;;;;:36;;;;:42;;;;;:28;;:42;;;;;;;:36;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;30981:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30981:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30981:42:0;:55;;;-1:-1:-1;;;30981:55:0;;;;;;;;;;;;;;;;:50;;;;:55;;;;;:42;;:55;;;;;;;:50;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;30981:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30981:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30981:55:0;:75;;;-1:-1:-1;;;30981:75:0;;;;;;;;;31050:4;30981:75;;;;;:63;;;;:75;;;;;:55;;:75;;;;;;;:63;:75;;;5:2:-1;;;;30:1;27;20:12;5:2;30981:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30981:75:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30981:75:0;31115:12;;31083:60;;;-1:-1:-1;;;31083:60:0;;-1:-1:-1;;;;;31115:12:0;;;31083:60;;;;31137:4;31083:60;;;;;30981:75;;-1:-1:-1;;;31083:17:0;;-1:-1:-1;;31083:60:0;;;;;30981:75;;31083:60;;;;;;;:17;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;31083:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31083:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31083:60:0;31150:10;;:36;;;-1:-1:-1;;;31150:36:0;;;;;;;;;;31083:60;;-1:-1:-1;;;;;;31150:10:0;;;;-1:-1:-1;;31150:36:0;;;;;-1:-1:-1;;31150:36:0;;;;;;;;-1:-1:-1;31150:10:0;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;31150:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;31242:12:0;;31210:60;;;-1:-1:-1;;;31210:60:0;;-1:-1:-1;;;;;31242:12:0;;;31210:60;;;;31264:4;31210:60;;;;;-1:-1:-1;;;31210:17:0;;-1:-1:-1;;;31210:60:0;;;;;;;;;;;;;;;:17;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;31210:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31210:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31210:60:0;31301:23;;;-1:-1:-1;;;31301:23:0;;;;;;;;;;;;;;;;31210:60;;-1:-1:-1;;;31301:14:0;;;;:23;;;;;31210:60;;31301:23;;;;;;;:14;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;31301:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31301:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31301:23:0;;-1:-1:-1;31341:27:0;;;;31333:48;;;;;-1:-1:-1;;;31333:48:0;;;;;;;;;;;;-1:-1:-1;;;31333:48:0;;;;;;;;;;;;;;;31395:18;;:23;;;;:51;;-1:-1:-1;31422:8:0;;-1:-1:-1;;;;;31422:8:0;:24;;31395:51;31392:708;;;31456:9;31468:13;:21;;;;31490:18;;31468:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31468:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31468:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31468:41:0;31518:10;;;31468:61;;;-1:-1:-1;;;31468:61:0;;;;;;;;;;;;;;;:49;;;;:61;;;;;:41;;:61;;;;;;;:49;:61;;;5:2:-1;;;;30:1;27;20:12;5:2;31468:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31468:61:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31468:61:0;31550:24;;;-1:-1:-1;;;31550:24:0;;;;;;;;;;;;;;;;31468:61;;-1:-1:-1;;;31550:21:0;;;;:24;;;;;31468:61;;31550:24;;;;;;;:21;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;31550:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31550:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31550:24:0;31610:12;;31583:55;;;-1:-1:-1;;;31583:55:0;;-1:-1:-1;;;;;31610:12:0;;;31583:55;;;;31624:10;31583:55;;;;;;;;;;;31550:24;;-1:-1:-1;31583:17:0;;:26;;:55;;;;;-1:-1:-1;;31583:55:0;;;;;;;;:17;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;31583:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;31674:12:0;;31688:8;;31647:53;;;-1:-1:-1;;;31647:53:0;;-1:-1:-1;;;;;31674:12:0;;;31647:53;;;;31688:8;;;;31647:53;;;;;;;;;;;:17;;-1:-1:-1;31647:26:0;;-1:-1:-1;31647:53:0;;;;;-1:-1:-1;;31647:53:0;;;;;;;:17;:53;;;5:2:-1;;;;30:1;27;20:12;5:2;31647:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31647:53:0;;;;31729:8;;;;;;;;;-1:-1:-1;;;;;31729:8:0;-1:-1:-1;;;;;31709:43:0;;31753:10;31765:7;31709:64;;;;;;;;;;;;;-1:-1:-1;;;;;31709:64:0;-1:-1:-1;;;;;31709:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31709:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31709:64:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31787:59:0;;-1:-1:-1;31799:10:0;31811:1;31814:7;31823:1;31826:19;:17;:19::i;:::-;31787:59;;;-1:-1:-1;;;;;31787:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31787:59:0;;;31392:708;;;;;31894:12;;31867:67;;;-1:-1:-1;;;31867:67:0;;-1:-1:-1;;;;;31894:12:0;;;31867:67;;;;31908:10;31867:67;;;;;;;;;;;:17;;:26;;:67;;;;;-1:-1:-1;;31867:67:0;;;;;;;:17;:67;;;5:2:-1;;;;30:1;27;20:12;5:2;31867:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;31963:8:0;;31943:64;;;-1:-1:-1;;;31943:64:0;;31987:10;31943:64;;;;;;;;;;;;-1:-1:-1;;;;;31963:8:0;;;;-1:-1:-1;31943:43:0;;-1:-1:-1;31943:64:0;;;;;;;;;;;;;;;-1:-1:-1;31963:8:0;31943:64;;;5:2:-1;;;;30:1;27;20:12;5:2;31943:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31943:64:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32021:71:0;;-1:-1:-1;32033:10:0;32045:13;32060:7;32069:1;32072:19;:17;:19::i;:::-;32021:71;;;-1:-1:-1;;;;;32021:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32021:71:0;;;31392:708;3752:1;;;;;;;;3788:13;;3772:12;:29;3764:73;;;;;-1:-1:-1;;;3764:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30341:1764;;:::o;26936:19::-;;;;:::o;32462:205::-;803:15;;-1:-1:-1;;;;;803:15:0;822:10;803:29;795:74;;;;;-1:-1:-1;;;795:74:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;795:74:0;;;;;;;;;;;;;;;32548:10;;;-1:-1:-1;;;;;32566:41:0;;;-1:-1:-1;;;;;;32566:41:0;;;;;;;32619:42;;;32548:10;;;32619:42;;;32649:10;;;;32619:42;;;;;;;;;;;;;;;;880:1;32462:205;:::o;33390:124::-;33456:10;;:29;;;-1:-1:-1;;;33456:29:0;;;;33431:7;;-1:-1:-1;;;;;33456:10:0;;-1:-1:-1;;33456:29:0;;;;;;;;;;;;;;:10;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;33456:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33456:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33456:29:0;:52;;;-1:-1:-1;;;33456:52:0;;;;-1:-1:-1;;;;;33456:50:0;;;;;;:52;;;;;:29;;:52;;;;;;;;:50;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;33456:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33456:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33456:52:0;;-1:-1:-1;33390:124:0;;:::o;27364:162::-;803:15;;-1:-1:-1;;;;;803:15:0;822:10;803:29;795:74;;;;;-1:-1:-1;;;795:74:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;795:74:0;;;;;;;;;;;;;;;27439:10;;;27456:20;;;;27488:32;;;;;;;;;;;;;;;;;;;;;;;;;880:1;27364:162;:::o;26804:33::-;;;;:::o;26842:31::-;;;-1:-1:-1;;;;;26842:31:0;;:::o;26878:23::-;;;-1:-1:-1;;;;;26878:23:0;;:::o;582:88::-;620:7;647:15;-1:-1:-1;;;;;647:15:0;;582:88::o;27768:159::-;803:15;;-1:-1:-1;;;;;803:15:0;822:10;803:29;795:74;;;;;-1:-1:-1;;;795:74:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;795:74:0;;;;;;;;;;;;;;;27861:4;;;27872:12;;;;27896:25;;;;;;;;;;;;;;;;;;;;;;;;;880:1;27768:159;:::o;32166:236::-;803:15;;-1:-1:-1;;;;;803:15:0;822:10;803:29;795:74;;;;;-1:-1:-1;;;795:74:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;795:74:0;;;;;;;;;;;;;;;32245:10;;32238:4;:17;32230:41;;;;;-1:-1:-1;;;32230:41:0;;;;;;;;;;;;-1:-1:-1;;;32230:41:0;;;;;;;;;;;;;;;32292:18;;;32317:25;;;;32354:42;;;;;;;;;;;;;;;;;;;;;;;;;880:1;32166:236;:::o;27933:2246::-;3693:1;3676:18;;;;;;;;28009:10;;-1:-1:-1;;;;;28009:10:0;:40;;;;:92;;-1:-1:-1;28053:10:0;;:29;;;-1:-1:-1;;;28053:29:0;;;;28097:3;;-1:-1:-1;;;;;28053:10:0;;-1:-1:-1;;28053:29:0;;;;;;;;;;;;;;:10;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;28053:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28053:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28053:29:0;-1:-1:-1;;;;;28053:48:0;;;28009:92;28001:111;;;;;-1:-1:-1;;;28001:111:0;;;;;;;;;;;;-1:-1:-1;;;28001:111:0;;;;;;;;;;;;;;;28122:12;;-1:-1:-1;;;;;28122:12:0;28119:229;;28179:9;28168:7;:20;28160:49;;;;;-1:-1:-1;;;28160:49:0;;;;;;;;;;;;-1:-1:-1;;;28160:49:0;;;;;;;;;;;;;;;28119:229;;;28245:12;;28238:57;;;-1:-1:-1;;;28238:57:0;;28269:10;28238:57;;;;28289:4;28238:57;;;;;;28299:7;;-1:-1:-1;;;;;28245:12:0;;28238:30;;:57;;;;;;;;;;;;;;28245:12;28238:57;;;5:2:-1;;;;30:1;27;20:12;5:2;28238:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28238:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28238:57:0;:68;;28230:110;;;;;-1:-1:-1;;;28230:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28375:10;;28364:7;:21;;28356:50;;;;;-1:-1:-1;;;28356:50:0;;;;;;;;;;;;-1:-1:-1;;;28356:50:0;;;;;;;;;;;;;;;28421:4;;28413:38;;;;;-1:-1:-1;;;28413:38:0;;;;;;;;;;;;-1:-1:-1;;;28413:38:0;;;;;;;;;;;;;;;28466:12;28458:41;;;;;-1:-1:-1;;;28458:41:0;;;;;;;;;;;;-1:-1:-1;;;28458:41:0;;;;;;;;;;;;;;;28559:12;;28581:10;;:29;;;-1:-1:-1;;;28581:29:0;;;;28510:14;;28527:17;;:31;;-1:-1:-1;;;;;28559:12:0;;;;28581:10;;;;;-1:-1:-1;;28581:29:0;;;;;;;;;;;;;;;:10;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;28581:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28581:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28581:29:0;28527:85;;;-1:-1:-1;28527:85:0;;;-1:-1:-1;;;;;;28527:85:0;;;-1:-1:-1;;;;;28527:85:0;;;;;;;;;;;;;;;;;;;;;28581:29;;28527:85;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;28527:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28527:85:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28527:85:0;28622:12;;28527:85;;-1:-1:-1;;;;;;28622:12:0;:28;28619:269;;28718:10;;:29;;;-1:-1:-1;;;28718:29:0;;;;28660:98;;28698:10;;-1:-1:-1;;;;;28718:10:0;;;;:27;;:29;;;;;;;;;;;;;;;:10;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;28718:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28718:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28718:29:0;28667:12;;-1:-1:-1;;;;;28667:12:0;;;28750:7;28660:37;:98::i;:::-;28619:269;;;28806:12;;28828:10;;:29;;;-1:-1:-1;;;28828:29:0;;;;28779:17;;:26;;-1:-1:-1;;;;;28806:12:0;;;;28820:50;;28828:10;;;;;-1:-1:-1;;28828:29:0;;;;;;;;;;;;;;;:10;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;28828:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28828:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28828:29:0;-1:-1:-1;;;;;28820:48:0;;:50::i;:::-;28779:101;;;-1:-1:-1;;;;;;28779:101:0;;;;;;;-1:-1:-1;;;;;28779:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28779:101:0;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;28779:101:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28779:101:0;;;;28619:269;28942:12;;28964:10;;:29;;;-1:-1:-1;;;28964:29:0;;;;28894:13;;28910:17;;:31;;-1:-1:-1;;;;;28942:12:0;;;;28964:10;;;;;-1:-1:-1;;28964:29:0;;;;;;;;;;;;;;;:10;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;28964:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28964:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28964:29:0;28910:85;;;-1:-1:-1;28910:85:0;;;-1:-1:-1;;;;;;28910:85:0;;;-1:-1:-1;;;;;28910:85:0;;;;;;;;;;;;;;;;;;;;;28964:29;;28910:85;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;28910:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28910:85:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28910:85:0;29010:27;;;-1:-1:-1;;;29010:27:0;;;;;;;;;;;;;;;;28910:85;;-1:-1:-1;29041:7:0;;29010:16;;;;:27;;;;;28910:85;;29010:27;;;;;;;:16;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;29010:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29010:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29010:27:0;:38;29002:66;;;;;-1:-1:-1;;;29002:66:0;;;;;;;;;;;;-1:-1:-1;;;29002:66:0;;;;;;;;;;;;;;;29118:10;;:29;;;-1:-1:-1;;;29118:29:0;;;;29077:17;;;;-1:-1:-1;;;;;29118:10:0;;;;:27;;:29;;;;;;;;;;;;;;;:10;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;29118:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29118:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29118:29:0;:52;;;-1:-1:-1;;;29118:52:0;;;;-1:-1:-1;;;;;29118:50:0;;;;;;:52;;;;;:29;;:52;;;;;;;;:50;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;29118:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29118:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29118:52:0;29235:12;;29208:40;;;-1:-1:-1;;;29208:40:0;;-1:-1:-1;;;;;29235:12:0;;;29208:40;;;;;29118:52;;-1:-1:-1;;;29208:17:0;;:26;;:40;;;;;29118:52;;29208:40;;;;;;;:17;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;29208:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29208:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29208:40:0;29269:10;;:29;;;-1:-1:-1;;;29269:29:0;;;;29202:2;29197:52;;;;;-1:-1:-1;29258:8:0;;-1:-1:-1;;;;;29269:10:0;;;;-1:-1:-1;;29269:29:0;;;;;29208:40;;29269:29;;;;;;;;:10;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;29269:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29269:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29269:29:0;:49;;;-1:-1:-1;;;29269:49:0;;;;-1:-1:-1;;;;;29269:47:0;;;;;;:49;;;;;:29;;:49;;;;;;;;:47;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;29269:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29269:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29269:49:0;29345:27;;;-1:-1:-1;;;29345:27:0;;;;;;;;29366:4;29345:27;;;;;;29269:49;;-1:-1:-1;;;29345:15:0;;;;:27;;;;;29269:49;;29345:27;;;;;;;:15;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;29345:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29345:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29345:27:0;29381:4;;29345:41;;;-1:-1:-1;;;29345:41:0;;;;;;;;;;;;;;;;;:35;;;;:41;;;;;:27;;:41;;;;;;;:35;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;29345:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29345:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29345:41:0;:54;;;-1:-1:-1;;;29345:54:0;;;;;;;;;;;;;;;;:49;;;;:54;;;;;:41;;:54;;;;;;;:49;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;29345:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29345:54:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29345:54:0;:67;;;-1:-1:-1;;;29345:67:0;;;;;;;;;;;;;;;;:62;;;;:67;;;;;:54;;:67;;;;;;;:62;:67;;;5:2:-1;;;;30:1;27;20:12;5:2;29345:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29345:67:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29345:67:0;29425:10;;:27;;;-1:-1:-1;;;29425:27:0;;;;;;;;;;29345:67;;-1:-1:-1;;;;;;29425:10:0;;;;-1:-1:-1;;29425:27:0;;;;;-1:-1:-1;;29425:27:0;;;;;;;;-1:-1:-1;29425:10:0;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;29425:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29479:10:0;;:29;;;-1:-1:-1;;;29479:29:0;;;;29463:13;;-1:-1:-1;;;;;;29479:10:0;;;;-1:-1:-1;29479:27:0;;:29;;;;;;;;;;;;;;:10;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;29479:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29479:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29479:29:0;:52;;;-1:-1:-1;;;29479:52:0;;;;-1:-1:-1;;;;;29479:50:0;;;;;;:52;;;;;:29;;:52;;;;;;;;:50;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;29479:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29479:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29479:52:0;29552:27;;;-1:-1:-1;;;29552:27:0;;;;;;;;;;;;;;;;29479:52;;-1:-1:-1;29552:16:0;;;;:27;;;;;29479:52;;29552:27;;;;;;;;:16;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;29552:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29552:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29552:27:0;;-1:-1:-1;29598:23:0;;;;29590:44;;;;;-1:-1:-1;;;29590:44:0;;;;;;;;;;;;-1:-1:-1;;;29590:44:0;;;;;;;;;;;;;;;-1:-1:-1;;29672:10:0;;:29;;;-1:-1:-1;;;29672:29:0;;;;29650:9;;-1:-1:-1;;;;;;29672:10:0;;;;-1:-1:-1;29672:27:0;;:29;;;;;;;;;;;;;;:10;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;29672:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29672:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29672:29:0;:49;;;-1:-1:-1;;;29672:49:0;;;;-1:-1:-1;;;;;29672:47:0;;;;;;:49;;;;;:29;;:49;;;;;;;;:47;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;29672:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29672:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29672:49:0;29662:71;;;-1:-1:-1;;;29662:71:0;;;;-1:-1:-1;;;;;29662:69:0;;;;-1:-1:-1;;29662:71:0;;;;;29672:49;;29662:71;;;;;;;;:69;:71;;;5:2:-1;;;;30:1;27;20:12;5:2;29662:71:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29662:71:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29662:71:0;29650:83;;;-1:-1:-1;29753:2:0;29748:7;;;29740:35;;;;;-1:-1:-1;;;29740:35:0;;;;;;;;;;;;-1:-1:-1;;;29740:35:0;;;;;;;;;;;;;;;29782:15;29812:14;29808:215;;29849:34;;;-1:-1:-1;;;29849:34:0;;;;;;;;29867:15;29849:34;;;;;;:17;;;;:34;;;;;;;;;;;;;;:17;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;29849:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29849:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29849:34:0;:58;;;-1:-1:-1;;;29849:58:0;;;;;;;;;29900:2;29892:14;;;29849:58;;;;;:42;;;;:58;;;;;:34;;:58;;;;;;;:42;:58;;;5:2:-1;;;;30:1;27;20:12;5:2;29849:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29849:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29849:58:0;;-1:-1:-1;29808:215:0;;;29972:8;;29965:30;;;-1:-1:-1;;;29965:30:0;;;;29947:17;;;;:9;;-1:-1:-1;;;;;29972:8:0;;;;29965:28;;:30;;;;;;;;;;;;;;;29972:8;29965:30;;;5:2:-1;;;;30:1;27;20:12;5:2;29965:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29965:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29965:30:0;29947:49;;;-1:-1:-1;29947:49:0;;;-1:-1:-1;;;;;;29947:49:0;;;;;;;;;;;;;;;;;;;;;;;29965:30;;29947:49;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;29947:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29947:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29947:49:0;:68;;;-1:-1:-1;;;29947:68:0;;;;;;;;;;;;;;;;:57;;;;:68;;;;;:49;;:68;;;;;;;:57;:68;;;5:2:-1;;;;30:1;27;20:12;5:2;29947:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29947:68:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29947:68:0;;-1:-1:-1;29808:215:0;30049:8;;30029:68;;;-1:-1:-1;;;30029:68:0;;30074:10;30029:68;;;;;;;;;;;;-1:-1:-1;;;;;30049:8:0;;;;30029:44;;:68;;;;;;;;;;;;;;;-1:-1:-1;30049:8:0;30029:68;;;5:2:-1;;;;30:1;27;20:12;5:2;30029:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30029:68:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30109:64:0;;-1:-1:-1;30120:10:0;30132:7;30141:10;30153:19;:17;:19::i;:::-;30109:64;;;-1:-1:-1;;;;;30109:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3752:1;;;;;;3788:13;;3772:12;:29;3764:73;;;;;-1:-1:-1;;;3764:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;32886:434;32966:10;;:29;;;-1:-1:-1;;;32966:29:0;;;;32935:7;;;;-1:-1:-1;;;;;32966:10:0;;;;:27;;:29;;;;;;;;;;;;;;;:10;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;32966:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32966:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32966:29:0;33015:25;;;-1:-1:-1;;;33015:25:0;;;;32966:29;;-1:-1:-1;33002:10:0;;-1:-1:-1;;;;;33015:23:0;;;;;:25;;;;;32966:29;;33015:25;;;;;;;:23;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;33015:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33015:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33015:25:0;33072:8;;33062:30;;;-1:-1:-1;;;33062:30:0;;;;33015:33;;;;:25;;-1:-1:-1;;;;;33072:8:0;;;;-1:-1:-1;;33062:30:0;;;;;33015:25;;33062:30;;;;;;;;33072:8;33062:30;;;5:2:-1;;;;30:1;27;20:12;5:2;33062:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33062:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33062:30:0;33015:78;;;-1:-1:-1;33015:78:0;;;-1:-1:-1;;;;;;33015:78:0;;;;;;;;;;33049:43;;;;33057:2;33049:43;33015:78;;;;;;;;;;33062:30;;33015:78;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;33015:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33015:78:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33015:78:0;33120:8;;33113:30;;;-1:-1:-1;;;33113:30:0;;;;33015:78;;-1:-1:-1;33100:10:0;;-1:-1:-1;;;;;33120:8:0;;;;-1:-1:-1;;33113:30:0;;;;;33015:78;;33113:30;;;;;;;;33120:8;33113:30;;;5:2:-1;;;;30:1;27;20:12;5:2;33113:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33113:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33113:30:0;33177:22;;;-1:-1:-1;;;33177:22:0;;;;33113:38;;;;:30;;-1:-1:-1;;;;;33177:20:0;;;;;:22;;;;;33113:30;;33177:22;;;;;;;:20;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;33177:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33177:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33177:22:0;33167:44;;;-1:-1:-1;;;33167:44:0;;;;-1:-1:-1;;;;;33167:42:0;;;;-1:-1:-1;;33167:44:0;;;;;33177:22;;33167:44;;;;;;;;:42;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;33167:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33167:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33167:44:0;33113:99;;;-1:-1:-1;33113:99:0;;;-1:-1:-1;;;;;;33113:99:0;;;;;;;;;;33152:59;;;;33160:2;33152:59;33113:99;;;;;;;;;;33167:44;;33113:99;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;33113:99:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33113:99:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33113:99:0;;-1:-1:-1;33222:7:0;33219:36;;33246:1;33239:8;;;;;;;33219:36;33268:2;:10;;;;33279:2;-1:-1:-1;;;;;33279:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33279:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33279:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33279:22:0;33268:34;;;-1:-1:-1;33268:34:0;;;-1:-1:-1;;;;;;33268:34:0;;;;;;;;;;;;;;;;;;;;;;;33279:22;;33268:34;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;33268:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33268:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33268:34:0;:46;;;-1:-1:-1;;;33268:46:0;;;;;;;;;;;;;;;;:42;;;;:46;;;;;:34;;:46;;;;;;;:42;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;33268:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33268:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33268:46:0;;-1:-1:-1;;;;32886:434:0;:::o;32724:156::-;803:15;;-1:-1:-1;;;;;803:15:0;822:10;803:29;795:74;;;;;-1:-1:-1;;;795:74:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;795:74:0;;;;;;;;;;;;;;;32805:8;;;-1:-1:-1;;;;;32820:14:0;;;-1:-1:-1;;;;;;32820:14:0;;;;;;;32846:28;;;32805:8;;;32846:28;;;32865:8;;;;32846:28;;;;;;;;;;;;;;;;880:1;32724:156;:::o;1044:109::-;803:15;;-1:-1:-1;;;;;803:15:0;822:10;803:29;795:74;;;;;-1:-1:-1;;;795:74:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;795:74:0;;;;;;;;;;;;;;;1117:28;1136:8;1117:18;:28::i;:::-;1044:109;:::o;26696:27::-;;;-1:-1:-1;;;;;26696:27:0;;:::o;26728:39::-;;;-1:-1:-1;;;;;26728:39:0;;:::o;4964:204::-;5091:68;;;-1:-1:-1;;;;;5091:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;5091:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;5065:95:0;;5084:5;;5065:18;:95::i;:::-;4964:204;;;;:::o;1259:247::-;-1:-1:-1;;;;;1333:22:0;;1325:73;;;;-1:-1:-1;;;1325:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1435:15;;;1414:47;;-1:-1:-1;;;;;1414:47:0;;;;1435:15;;;1414:47;;;1472:15;:26;;-1:-1:-1;;;;;;1472:26:0;-1:-1:-1;;;;;1472:26:0;;;;;;;;;;1259:247::o;6123:598::-;6211:27;-1:-1:-1;;;;;6211:25:0;;;:27::i;:::-;6203:71;;;;;-1:-1:-1;;;6203:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6348:12;6362:23;6397:5;-1:-1:-1;;;;;6389:19:0;6409:4;6389:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6389:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;6347:67:0;;;;6433:7;6425:52;;;;;-1:-1:-1;;;6425:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6494:17;;:21;6490:224;;6636:10;6625:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6625:30:0;6617:85;;;;-1:-1:-1;;;6617:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2528:374;2588:4;2811:20;;2654:66;2851:15;;;;;:42;;;2882:11;2870:8;:23;;2851:42;2843:51;2528:374;-1:-1:-1;;;;2528:374:0:o
Swarm Source
bzzr://649f64bad91b3f479bb051e0e2102f422ae21197b10655f0fe16d8affbbde032
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.