Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,381.599082 ERC20 ***
Holders
69
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 6 Decimals)
Balance
0.000051 ERC20 ***Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
yUSDC
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-28 */ pragma solidity 0.5.17; pragma experimental ABIEncoderV2; interface IUniswap { // To convert DAI to ETH function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); // To convert ETH to YELD and burn it function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); } 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); } contract Context { constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Ownable is Context { address payable private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () internal { _owner = _msgSender(); emit OwnershipTransferred(address(0), _owner); } function owner() public view returns (address payable) { return _owner; } modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } function isOwner() public view returns (bool) { return _msgSender() == _owner; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address payable newOwner) public onlyOwner { _transferOwnership(newOwner); } function _transferOwnership(address payable newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract ERC20 is Context, IERC20 { using SafeMath for uint256; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 _totalSupply; function totalSupply() public view returns (uint256) { return _totalSupply; } function balanceOf(address account) public view returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal { require(account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint256 amount) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance")); } } contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; constructor (string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } } contract ReentrancyGuard { uint256 private _guardCounter; constructor () internal { _guardCounter = 1; } modifier nonReentrant() { _guardCounter += 1; uint256 localCounter = _guardCounter; _; require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call"); } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } 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"); } } 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).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } 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"); } } } interface Compound { function mint ( uint256 mintAmount ) external returns ( uint256 ); function redeem(uint256 redeemTokens) external returns (uint256); function exchangeRateStored() external view returns (uint); } interface Fulcrum { function mint(address receiver, uint256 amount) external payable returns (uint256 mintAmount); function burn(address receiver, uint256 burnAmount) external returns (uint256 loanAmountPaid); function assetBalanceOf(address _owner) external view returns (uint256 balance); } interface ILendingPoolAddressesProvider { function getLendingPool() external view returns (address); } interface Aave { function deposit(address _reserve, uint256 _amount, uint16 _referralCode) external; } interface AToken { function redeem(uint256 amount) external; } interface IIEarnManager { function recommend(address _token) external view returns ( string memory choice, uint256 capr, uint256 iapr, uint256 aapr, uint256 dapr ); } contract Structs { struct Val { uint256 value; } enum ActionType { Deposit, // supply tokens Withdraw // borrow tokens } enum AssetDenomination { Wei // the amount is denominated in wei } enum AssetReference { Delta // the amount is given as a delta from the current value } struct AssetAmount { bool sign; // true if positive AssetDenomination denomination; AssetReference ref; uint256 value; } struct ActionArgs { ActionType actionType; uint256 accountId; AssetAmount amount; uint256 primaryMarketId; uint256 secondaryMarketId; address otherAddress; uint256 otherAccountId; bytes data; } struct Info { address owner; // The address that owns the account uint256 number; // A nonce that allows a single address to control many accounts } struct Wei { bool sign; // true if positive uint256 value; } } contract DyDx is Structs { function getAccountWei(Info memory account, uint256 marketId) public view returns (Wei memory); function operate(Info[] memory, ActionArgs[] memory) public; } interface LendingPoolAddressesProvider { function getLendingPool() external view returns (address); function getLendingPoolCore() external view returns (address); } contract yUSDC is ERC20, ERC20Detailed, ReentrancyGuard, Structs, Ownable { using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; uint256 public pool; address public token; address public compound; address public fulcrum; address public aave; address public aaveToken; address public dydx; uint256 public dToken; address public apr; // Yeld mapping(address => uint256) public depositBlockStarts; address public uniswapRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address public usdc = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; address public weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address payable public retirementYeldTreasury; IERC20 public yeldToken; uint256 public maximumTokensToBurn = 50000 * 1e18; uint256 public constant oneDayInBlocks = 6500; uint256 public yeldToRewardPerDay = 50e18; // 100 YELD per day per 1 million stablecoins padded with 18 zeroes to have that flexibility uint256 public constant oneMillion = 1e6; // Yeld enum Lender { NONE, DYDX, COMPOUND, AAVE, FULCRUM } Lender public provider = Lender.NONE; constructor (address _yeldToken, address payable _retirementYeldTreasury) public ERC20Detailed("yeld USDC", "yUSDC", 6) { token = address(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); apr = address(0xdD6d648C991f7d47454354f4Ef326b04025a48A8); dydx = address(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e); aave = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8); fulcrum = address(0xF013406A0B1d544238083DF0B93ad0d2cBE0f65f); aaveToken = address(0x9bA00D6856a4eDF4665BcA2C2309936572473B7E); compound = address(0x39AA39c021dfbaE8faC545936693aC917d5E7563); dToken = 2; yeldToken = IERC20(_yeldToken); retirementYeldTreasury = _retirementYeldTreasury; approveToken(); } // Yeld // To receive ETH after converting it from USDC function () external payable {} function setRetirementYeldTreasury(address payable _treasury) public onlyOwner { retirementYeldTreasury = _treasury; } // In case a new uniswap router version is released function setUniswapRouter(address _uniswapRouter) public onlyOwner { uniswapRouter = _uniswapRouter; } function extractTokensIfStuck(address _token, uint256 _amount) public onlyOwner { IERC20(_token).transfer(msg.sender, _amount); } function extractETHIfStuck() public onlyOwner { owner().transfer(address(this).balance); } function changeYeldToRewardPerDay(uint256 _amount) public onlyOwner { yeldToRewardPerDay = _amount; } function getGeneratedYelds() public view returns(uint256) { uint256 blocksPassed; if (depositBlockStarts[msg.sender] > 0) { blocksPassed = block.number.sub(depositBlockStarts[msg.sender]); } else { return 0; } uint256 ibalance = balanceOf(msg.sender); // Balance of yTokens uint256 accomulatedStablecoins; if (_totalSupply <= 0) { accomulatedStablecoins = 0; } else { accomulatedStablecoins = (calcPoolValueInToken().mul(ibalance)).div(_totalSupply); } uint256 generatedYelds = accomulatedStablecoins.mul(1e12).div(oneMillion).mul(yeldToRewardPerDay).div(1e18).mul(blocksPassed).div(oneDayInBlocks); return generatedYelds; } // Converts USDC to ETH and returns how much ETH has been received from Uniswap function usdcToETH(uint256 _amount) internal returns(uint256) { IERC20(usdc).safeApprove(uniswapRouter, 0); IERC20(usdc).safeApprove(uniswapRouter, _amount); address[] memory path = new address[](2); path[0] = usdc; path[1] = weth; // swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) // 'amounts' is an array where [0] is input USDC amount and [1] is the resulting ETH after the conversion // even tho we've specified the WETH address, we'll receive ETH since that's how it works on uniswap // https://uniswap.org/docs/v2/smart-contracts/router02/#swapexacttokensforeth uint[] memory amounts = IUniswap(uniswapRouter).swapExactTokensForETH(_amount, uint(0), path, address(this), now.add(1800)); return amounts[1]; } function buyNBurn(uint256 _ethToSwap) internal returns(uint256) { address[] memory path = new address[](2); path[0] = weth; path[1] = address(yeldToken); // Burns the tokens by taking them out of circulation, sending them to the 0x0 address uint[] memory amounts = IUniswap(uniswapRouter).swapExactETHForTokens.value(_ethToSwap)(uint(0), path, address(0), now.add(1800)); return amounts[1]; } // Yeld // Quick swap low gas method for pool swaps function deposit(uint256 _amount) external nonReentrant { require(_amount > 0, "deposit must be greater than 0"); pool = _calcPoolValueInToken(); IERC20(token).safeTransferFrom(msg.sender, address(this), _amount); // Yeld depositBlockStarts[msg.sender] = block.number; // Yeld // Calculate pool shares uint256 shares = 0; if (pool == 0) { shares = _amount; pool = _amount; } else { shares = (_amount.mul(_totalSupply)).div(pool); } pool = _calcPoolValueInToken(); _mint(msg.sender, shares); rebalance(); } // No rebalance implementation for lower fees and faster swaps function withdraw(uint256 _shares) external nonReentrant { require(_shares > 0, "withdraw must be greater than 0"); uint256 ibalance = balanceOf(msg.sender); require(_shares <= ibalance, "insufficient balance"); // Could have over value from cTokens pool = _calcPoolValueInToken(); // Yeld uint256 generatedYelds = getGeneratedYelds(); // Yeld uint256 stablecoinsToWithdraw = (pool.mul(_shares)).div(_totalSupply); _balances[msg.sender] = _balances[msg.sender].sub(_shares, "redeem amount exceeds balance"); _totalSupply = _totalSupply.sub(_shares); emit Transfer(msg.sender, address(0), _shares); uint256 b = IERC20(token).balanceOf(address(this)); if (b < stablecoinsToWithdraw) { _withdrawSome(stablecoinsToWithdraw.sub(b)); } // Yeld // Take 1% of the amount to withdraw uint256 onePercent = stablecoinsToWithdraw.div(100); depositBlockStarts[msg.sender] = block.number; yeldToken.transfer(msg.sender, generatedYelds); // Take a portion of the profits for the buy and burn and retirement yeld // Convert half the USDC earned into ETH for the protocol algorithms uint256 stakingProfits = usdcToETH(onePercent); uint256 tokensAlreadyBurned = yeldToken.balanceOf(address(0)); if (tokensAlreadyBurned < maximumTokensToBurn) { // 98% is the 49% doubled since we already took the 50% uint256 ethToSwap = stakingProfits.mul(98).div(100); // Buy and burn only applies up to 50k tokens burned buyNBurn(ethToSwap); // 1% for the Retirement Yield uint256 retirementYeld = stakingProfits.mul(2).div(100); // Send to the treasury retirementYeldTreasury.transfer(retirementYeld); } else { // If we've reached the maximum burn point, send half the profits to the treasury to reward holders uint256 retirementYeld = stakingProfits; // Send to the treasury retirementYeldTreasury.transfer(retirementYeld); } IERC20(token).transfer(msg.sender, stablecoinsToWithdraw.sub(onePercent)); // Yeld pool = _calcPoolValueInToken(); rebalance(); } function recommend() public view returns (Lender) { (,uint256 capr,uint256 iapr,uint256 aapr,uint256 dapr) = IIEarnManager(apr).recommend(token); uint256 max = 0; if (capr > max) { max = capr; } if (iapr > max) { max = iapr; } if (aapr > max) { max = aapr; } if (dapr > max) { max = dapr; } Lender newProvider = Lender.NONE; if (max == capr) { newProvider = Lender.COMPOUND; } else if (max == iapr) { newProvider = Lender.FULCRUM; } else if (max == aapr) { newProvider = Lender.AAVE; } else if (max == dapr) { newProvider = Lender.DYDX; } return newProvider; } function supplyDydx(uint256 amount) public returns(uint) { Info[] memory infos = new Info[](1); infos[0] = Info(address(this), 0); AssetAmount memory amt = AssetAmount(true, AssetDenomination.Wei, AssetReference.Delta, amount); ActionArgs memory act; act.actionType = ActionType.Deposit; act.accountId = 0; act.amount = amt; act.primaryMarketId = dToken; act.otherAddress = address(this); ActionArgs[] memory args = new ActionArgs[](1); args[0] = act; DyDx(dydx).operate(infos, args); } function _withdrawDydx(uint256 amount) internal { Info[] memory infos = new Info[](1); infos[0] = Info(address(this), 0); AssetAmount memory amt = AssetAmount(false, AssetDenomination.Wei, AssetReference.Delta, amount); ActionArgs memory act; act.actionType = ActionType.Withdraw; act.accountId = 0; act.amount = amt; act.primaryMarketId = dToken; act.otherAddress = address(this); ActionArgs[] memory args = new ActionArgs[](1); args[0] = act; DyDx(dydx).operate(infos, args); } function getAave() public view returns (address) { return LendingPoolAddressesProvider(aave).getLendingPool(); } function getAaveCore() public view returns (address) { return LendingPoolAddressesProvider(aave).getLendingPoolCore(); } function approveToken() public { IERC20(token).safeApprove(compound, uint(-1)); //also add to constructor IERC20(token).safeApprove(dydx, uint(-1)); IERC20(token).safeApprove(getAaveCore(), uint(-1)); IERC20(token).safeApprove(fulcrum, uint(-1)); } function balance() public view returns (uint256) { return IERC20(token).balanceOf(address(this)); } function balanceDydx() public view returns (uint256) { Wei memory bal = DyDx(dydx).getAccountWei(Info(address(this), 0), dToken); return bal.value; } function balanceCompound() public view returns (uint256) { return IERC20(compound).balanceOf(address(this)); } function balanceCompoundInToken() public view returns (uint256) { // Mantisa 1e18 to decimals uint256 b = balanceCompound(); if (b > 0) { b = b.mul(Compound(compound).exchangeRateStored()).div(1e18); } return b; } function balanceFulcrumInToken() public view returns (uint256) { uint256 b = balanceFulcrum(); if (b > 0) { b = Fulcrum(fulcrum).assetBalanceOf(address(this)); } return b; } function balanceFulcrum() public view returns (uint256) { return IERC20(fulcrum).balanceOf(address(this)); } function balanceAave() public view returns (uint256) { return IERC20(aaveToken).balanceOf(address(this)); } function _balance() internal view returns (uint256) { return IERC20(token).balanceOf(address(this)); } function _balanceDydx() internal view returns (uint256) { Wei memory bal = DyDx(dydx).getAccountWei(Info(address(this), 0), dToken); return bal.value; } function _balanceCompound() internal view returns (uint256) { return IERC20(compound).balanceOf(address(this)); } function _balanceCompoundInToken() internal view returns (uint256) { // Mantisa 1e18 to decimals uint256 b = balanceCompound(); if (b > 0) { b = b.mul(Compound(compound).exchangeRateStored()).div(1e18); } return b; } function _balanceFulcrumInToken() internal view returns (uint256) { uint256 b = balanceFulcrum(); if (b > 0) { b = Fulcrum(fulcrum).assetBalanceOf(address(this)); } return b; } function _balanceFulcrum() internal view returns (uint256) { return IERC20(fulcrum).balanceOf(address(this)); } function _balanceAave() internal view returns (uint256) { return IERC20(aaveToken).balanceOf(address(this)); } function _withdrawAll() internal { uint256 amount = _balanceCompound(); if (amount > 0) { _withdrawCompound(amount); } amount = _balanceDydx(); if (amount > 0) { _withdrawDydx(amount); } amount = _balanceFulcrum(); if (amount > 0) { _withdrawFulcrum(amount); } amount = _balanceAave(); if (amount > 0) { _withdrawAave(amount); } } function _withdrawSomeCompound(uint256 _amount) internal { uint256 b = balanceCompound(); uint256 bT = balanceCompoundInToken(); require(bT >= _amount, "insufficient funds"); // can have unintentional rounding errors uint256 amount = (b.mul(_amount)).div(bT).add(1); _withdrawCompound(amount); } // 1999999614570950845 function _withdrawSomeFulcrum(uint256 _amount) internal { // Balance of fulcrum tokens, 1 iDAI = 1.00x DAI uint256 b = balanceFulcrum(); // 1970469086655766652 // Balance of token in fulcrum uint256 bT = balanceFulcrumInToken(); // 2000000803224344406 require(bT >= _amount, "insufficient funds"); // can have unintentional rounding errors uint256 amount = (b.mul(_amount)).div(bT).add(1); _withdrawFulcrum(amount); } function _withdrawSome(uint256 _amount) internal { if (provider == Lender.COMPOUND) { _withdrawSomeCompound(_amount); } if (provider == Lender.AAVE) { require(balanceAave() >= _amount, "insufficient funds"); _withdrawAave(_amount); } if (provider == Lender.DYDX) { require(balanceDydx() >= _amount, "insufficient funds"); _withdrawDydx(_amount); } if (provider == Lender.FULCRUM) { _withdrawSomeFulcrum(_amount); } } function rebalance() public { Lender newProvider = recommend(); if (newProvider != provider) { _withdrawAll(); } if (balance() > 0) { if (newProvider == Lender.DYDX) { supplyDydx(balance()); } else if (newProvider == Lender.FULCRUM) { supplyFulcrum(balance()); } else if (newProvider == Lender.COMPOUND) { supplyCompound(balance()); } else if (newProvider == Lender.AAVE) { supplyAave(balance()); } } provider = newProvider; } // Internal only rebalance for better gas in redeem function _rebalance(Lender newProvider) internal { if (_balance() > 0) { if (newProvider == Lender.DYDX) { supplyDydx(_balance()); } else if (newProvider == Lender.FULCRUM) { supplyFulcrum(_balance()); } else if (newProvider == Lender.COMPOUND) { supplyCompound(_balance()); } else if (newProvider == Lender.AAVE) { supplyAave(_balance()); } } provider = newProvider; } function supplyAave(uint amount) public { Aave(getAave()).deposit(token, amount, 0); } function supplyFulcrum(uint amount) public { require(Fulcrum(fulcrum).mint(address(this), amount) > 0, "FULCRUM: supply failed"); } function supplyCompound(uint amount) public { require(Compound(compound).mint(amount) == 0, "COMPOUND: supply failed"); } function _withdrawAave(uint amount) internal { AToken(aaveToken).redeem(amount); } function _withdrawFulcrum(uint amount) internal { require(Fulcrum(fulcrum).burn(address(this), amount) > 0, "FULCRUM: withdraw failed"); } function _withdrawCompound(uint amount) internal { require(Compound(compound).redeem(amount) == 0, "COMPOUND: withdraw failed"); } function invest(uint256 _amount) external nonReentrant { require(_amount > 0, "deposit must be greater than 0"); pool = calcPoolValueInToken(); IERC20(token).safeTransferFrom(msg.sender, address(this), _amount); rebalance(); // Calculate pool shares uint256 shares = 0; if (pool == 0) { shares = _amount; pool = _amount; } else { shares = (_amount.mul(_totalSupply)).div(pool); } pool = calcPoolValueInToken(); _mint(msg.sender, shares); } function _calcPoolValueInToken() internal view returns (uint) { return _balanceCompoundInToken() .add(_balanceFulcrumInToken()) .add(_balanceDydx()) .add(_balanceAave()) .add(_balance()); } function calcPoolValueInToken() public view returns (uint) { return balanceCompoundInToken() .add(balanceFulcrumInToken()) .add(balanceDydx()) .add(balanceAave()) .add(balance()); } function getPricePerFullShare() public view returns (uint) { uint _pool = calcPoolValueInToken(); return _pool.mul(1e18).div(_totalSupply); } // Redeem any invested tokens from the pool function redeem(uint256 _shares) external nonReentrant { require(_shares > 0, "withdraw must be greater than 0"); uint256 ibalance = balanceOf(msg.sender); require(_shares <= ibalance, "insufficient balance"); // Could have over value from cTokens pool = calcPoolValueInToken(); // Calc to redeem before updating balances uint256 r = (pool.mul(_shares)).div(_totalSupply); _balances[msg.sender] = _balances[msg.sender].sub(_shares, "redeem amount exceeds balance"); _totalSupply = _totalSupply.sub(_shares); emit Transfer(msg.sender, address(0), _shares); // Check ETH balance uint256 b = IERC20(token).balanceOf(address(this)); Lender newProvider = provider; if (b < r) { newProvider = recommend(); if (newProvider != provider) { _withdrawAll(); } else { _withdrawSome(r.sub(b)); } } IERC20(token).safeTransfer(msg.sender, r); if (newProvider != provider) { _rebalance(newProvider); } pool = calcPoolValueInToken(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_yeldToken","type":"address"},{"internalType":"address payable","name":"_retirementYeldTreasury","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"aave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"aaveToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"approveToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"apr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceAave","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompoundInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrumInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"calcPoolValueInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeYeldToRewardPerDay","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"compound","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositBlockStarts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dydx","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"extractETHIfStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"extractTokensIfStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"fulcrum","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAaveCore","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getGeneratedYelds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"invest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximumTokensToBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"oneDayInBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"oneMillion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"provider","outputs":[{"internalType":"enum yUSDC.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"rebalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"recommend","outputs":[{"internalType":"enum yUSDC.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"retirementYeldTreasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_treasury","type":"address"}],"name":"setRetirementYeldTreasury","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_uniswapRouter","type":"address"}],"name":"setUniswapRouter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyAave","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyFulcrum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"usdc","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"yeldToRewardPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"yeldToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052601280546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560138054821673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481790556014805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179055690a968163f0a57b4000006017556802b5e3af16b18800006018556019805460ff191690553480156200009c57600080fd5b5060405162004ed738038062004ed7833981016040819052620000bf9162000759565b604080518082018252600981526879656c64205553444360b81b602080830191825283518085019094526005845264795553444360d81b90840152815191929160069162000111916003919062000669565b5081516200012790600490602085019062000669565b506005805460ff191660ff92909216919091179055505060016006556200014d620002bd565b600780546001600160a01b0319166001600160a01b0392831617908190556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600980546001600160a01b031990811673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481790915560108054821673dd6d648c991f7d47454354f4ef326b04025a48a8179055600e80548216731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e179055600c805482167324a42fd28c976a61df5d00d0599c34c4f90748c8179055600b8054821673f013406a0b1d544238083df0b93ad0d2cbe0f65f179055600d80548216739ba00d6856a4edf4665bca2c2309936572473b7e179055600a805482167339aa39c021dfbae8fac545936693ac917d5e75631790556002600f55601680546001600160a01b03858116918416919091179091556015805491841691909216179055620002b56001600160e01b03620002c216565b505062000a7a565b335b90565b600a54600954620002ef916001600160a01b03918216911660001962000384602090811b62002bcf17901c565b600e546009546200031c916001600160a01b03918216911660001962000384602090811b62002bcf17901c565b62000355620003336001600160e01b036200049e16565b6009546001600160a01b03169060001962000384602090811b62002bcf17901c565b600b5460095462000382916001600160a01b03918216911660001962000384602090811b62002bcf17901c565b565b801580620004135750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90620003bd903090869060040162000965565b60206040518083038186803b158015620003d657600080fd5b505afa158015620003eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620004119190810190620007b9565b155b6200043b5760405162461bcd60e51b81526004016200043290620009c7565b60405180910390fd5b6040516200049990849063095ea7b360e01b9062000460908690869060240162000984565b60408051808303601f190181529190526020810180516001600160e01b0319939093166001600160e01b03938416179052906200052416565b505050565b600c546040805163076b7fbb60e51b815290516000926001600160a01b03169163ed6ff760916004808301926020929190829003018186803b158015620004e457600080fd5b505afa158015620004f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200051f919081019062000738565b905090565b62000543826001600160a01b03166200062c60201b620032001760201c565b620005625760405162461bcd60e51b81526004016200043290620009d9565b60006060836001600160a01b03168360405162000580919062000950565b6000604051808303816000865af19150503d8060008114620005bf576040519150601f19603f3d011682016040523d82523d6000602084013e620005c4565b606091505b509150915081620005e95760405162461bcd60e51b81526004016200043290620009a3565b80511562000626578080602001905162000607919081019062000798565b620006265760405162461bcd60e51b81526004016200043290620009b5565b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590620006615750808214155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006ac57805160ff1916838001178555620006dc565b82800160010185558215620006dc579182015b82811115620006dc578251825591602001919060010190620006bf565b50620006ea929150620006ee565b5090565b620002bf91905b80821115620006ea5760008155600101620006f5565b8051620007188162000a4a565b92915050565b8051620007188162000a64565b8051620007188162000a6f565b6000602082840312156200074b57600080fd5b60006200066184846200070b565b600080604083850312156200076d57600080fd5b60006200077b85856200070b565b92505060206200078e858286016200070b565b9150509250929050565b600060208284031215620007ab57600080fd5b60006200066184846200071e565b600060208284031215620007cc57600080fd5b60006200066184846200072b565b620007e581620009fd565b82525050565b6000620007f882620009eb565b620008048185620009ef565b93506200081681856020860162000a1b565b9290920192915050565b60006200082f602083620009f4565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b60006200086a602a83620009f4565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000620008b8603683620009f4565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015260400192915050565b600062000919601f83620009f4565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b620007e581620002bf565b60006200095e8284620007eb565b9392505050565b60408101620009758285620007da565b6200095e6020830184620007da565b60408101620009948285620007da565b6200095e602083018462000945565b60208082528101620007188162000820565b6020808252810162000718816200085b565b602080825281016200071881620008a9565b6020808252810162000718816200090a565b5190565b919050565b90815260200190565b6000620007188262000a0f565b151590565b6001600160a01b031690565b60005b8381101562000a3857818101518382015260200162000a1e565b83811115620006265750506000910152565b62000a5581620009fd565b811462000a6157600080fd5b50565b62000a558162000a0a565b62000a5581620002bf565b61444d8062000a8a6000396000f3fe6080604052600436106103b85760003560e01c80637d7c2a1c116101f2578063bea9849e1161010d578063f2978d98116100a0578063f69e20461161006f578063f69e2046146109dc578063f7c1ec77146109f1578063f82ce27d14610a06578063fc0c546a14610a1b576103b8565b8063f2978d981461097d578063f29e15a214610992578063f2fde38b146109a7578063f5a41dea146109c7576103b8565b8063dd62ed3e116100dc578063dd62ed3e14610908578063e849d65914610928578063ebc5116014610948578063f02fbd4a1461095d576103b8565b8063bea9849e1461089e578063cf8ca426146108be578063d9d7858a146108d3578063db006a75146108e8576103b8565b806399b71d5c11610185578063a9059cbb11610154578063a9059cbb14610829578063a9a1015a14610849578063b69ef8a814610869578063b6b55f251461087e576103b8565b806399b71d5c146107ca578063a160176d146107df578063a457c2d7146107f4578063a728797114610814576103b8565b80638da5cb5b116101c15780638da5cb5b146107765780638e4ec6ef1461078b5780638f32d59b146107a057806395d89b41146107b5576103b8565b80637d7c2a1c1461070a5780637f50d4d81461071f5780638124955c14610741578063819faf7b14610761576103b8565b806339c0a7e1116102e257806365aab74911610275578063715018a611610244578063715018a6146106ab578063735de9f7146106c057806377c7b8fc146106d55780637b82784c146106ea576103b8565b806365aab749146106415780636ff2bf081461066157806370a08231146106765780637137ef9914610696576103b8565b80634fe41129116102b15780634fe41129146105ed57806357ded9c91461060257806358782c211461061757806361c1ec551461062c576103b8565b806339c0a7e1146105995780633e413bee146105ae5780633fc8cef3146105c3578063413e920d146105d8576103b8565b806318160ddd1161035a5780632e1a7d4d116103295780632e1a7d4d146105175780632eb4520a14610537578063313ce567146105575780633950935114610579576103b8565b806318160ddd146104ad57806323b872dd146104c25780632622678c146104e25780632afcf480146104f7576103b8565b8063085d488311610396578063085d488314610434578063095ea7b3146104565780630eb2a2671461048357806316f0115b14610498576103b8565b806306636c1c146103ba57806306a3fe59146103f057806306fdde0314610412575b005b3480156103c657600080fd5b506103da6103d536600461360a565b610a30565b6040516103e7919061414a565b60405180910390f35b3480156103fc57600080fd5b50610405610bb4565b6040516103e79190613ebf565b34801561041e57600080fd5b50610427610bc3565b6040516103e79190613fbe565b34801561044057600080fd5b50610449610c5a565b6040516103e79190613fb0565b34801561046257600080fd5b506104766104713660046134dd565b610c63565b6040516103e79190613f94565b34801561048f57600080fd5b506103da610c81565b3480156104a457600080fd5b506103da610d07565b3480156104b957600080fd5b506103da610d0d565b3480156104ce57600080fd5b506104766104dd366004613490565b610d13565b3480156104ee57600080fd5b50610405610da1565b34801561050357600080fd5b506103b861051236600461360a565b610db0565b34801561052357600080fd5b506103b861053236600461360a565b610e8d565b34801561054357600080fd5b506103b861055236600461341a565b611335565b34801561056357600080fd5b5061056c61137b565b6040516103e791906141e7565b34801561058557600080fd5b506104766105943660046134dd565b611384565b3480156105a557600080fd5b506103da6113d8565b3480156105ba57600080fd5b5061040561147f565b3480156105cf57600080fd5b5061040561148e565b3480156105e457600080fd5b506103da61149d565b3480156105f957600080fd5b506103b86114a4565b34801561060e57600080fd5b5061040561150b565b34801561062357600080fd5b5061040561151a565b34801561063857600080fd5b506103da611529565b34801561064d57600080fd5b506103b861065c36600461360a565b61155a565b34801561066d57600080fd5b506103da6115cd565b34801561068257600080fd5b506103da61069136600461341a565b61169d565b3480156106a257600080fd5b506103da6116bc565b3480156106b757600080fd5b506103b86116fe565b3480156106cc57600080fd5b5061040561176c565b3480156106e157600080fd5b506103da61177b565b3480156106f657600080fd5b506103da61070536600461341a565b6117ae565b34801561071657600080fd5b506103b86117c0565b34801561072b57600080fd5b506107346118af565b6040516103e79190613fa2565b34801561074d57600080fd5b506103b861075c36600461360a565b6118be565b34801561076d57600080fd5b50610405611960565b34801561078257600080fd5b5061040561196f565b34801561079757600080fd5b5061040561197e565b3480156107ac57600080fd5b5061047661198d565b3480156107c157600080fd5b506104276119b3565b3480156107d657600080fd5b506103b8611a14565b3480156107eb57600080fd5b50610449611aab565b34801561080057600080fd5b5061047661080f3660046134dd565b611bbd565b34801561082057600080fd5b506103da611c2b565b34801561083557600080fd5b506104766108443660046134dd565b611ce0565b34801561085557600080fd5b506103b86108643660046134dd565b611cf4565b34801561087557600080fd5b506103da611d9d565b34801561088a57600080fd5b506103b861089936600461360a565b611dce565b3480156108aa57600080fd5b506103b86108b936600461341a565b611e7f565b3480156108ca57600080fd5b506103da611ec5565b3480156108df57600080fd5b506103da611ef6565b3480156108f457600080fd5b506103b861090336600461360a565b611efc565b34801561091457600080fd5b506103da610923366004613456565b61217e565b34801561093457600080fd5b506103b861094336600461360a565b6121a9565b34801561095457600080fd5b506103da612248565b34801561096957600080fd5b506103b861097836600461360a565b61224e565b34801561098957600080fd5b506103da612277565b34801561099e57600080fd5b506103da61227d565b3480156109b357600080fd5b506103b86109c236600461341a565b612283565b3480156109d357600080fd5b506103da6122b0565b3480156109e857600080fd5b50610405612343565b3480156109fd57600080fd5b50610405612352565b348015610a1257600080fd5b506104056123cf565b348015610a2757600080fd5b50610405612414565b60408051600180825281830190925260009160609190816020015b610a5361323c565b815260200190600190039081610a4b5790505090506040518060400160405280306001600160a01b03168152602001600081525081600081518110610a9457fe5b6020026020010181905250610aa7613253565b6040805160808101909152600181526020810160008152602001600081526020018590529050610ad561327c565b60008181905250600060208201526040808201839052600f546060808401919091523060a0840152815160018082528184019093529091816020015b610b1961327c565b815260200190600190039081610b115790505090508181600081518110610b3c57fe5b6020908102919091010152600e5460405163a67a6a4560e01b81526001600160a01b039091169063a67a6a4590610b799087908590600401613f6f565b600060405180830381600087803b158015610b9357600080fd5b505af1158015610ba7573d6000803e3d6000fd5b5050505050505050919050565b600d546001600160a01b031681565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c4f5780601f10610c2457610100808354040283529160200191610c4f565b820191906000526020600020905b815481529060010190602001808311610c3257829003601f168201915b505050505090505b90565b60195460ff1681565b6000610c77610c70612423565b8484612427565b5060015b92915050565b600b546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610cb2903090600401613ecd565b60206040518083038186803b158015610cca57600080fd5b505afa158015610cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d029190810190613628565b905090565b60085481565b60025490565b6000610d208484846124db565b610d9684610d2c612423565b610d918560405180606001604052806028815260200161439e602891396001600160a01b038a16600090815260016020526040812090610d6a612423565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6125df16565b612427565b5060015b9392505050565b6015546001600160a01b031681565b600680546001019081905581610de15760405162461bcd60e51b8152600401610dd8906140bf565b60405180910390fd5b610de96116bc565b600855600954610e0a906001600160a01b031633308563ffffffff61260b16565b610e126117c0565b600854600090610e285750600882905581610e52565b610e4f600854610e436002548661266c90919063ffffffff16565b9063ffffffff6126a616565b90505b610e5a6116bc565b600855610e6733826126e8565b506006548114610e895760405162461bcd60e51b8152600401610dd8906140ef565b5050565b600680546001019081905581610eb55760405162461bcd60e51b8152600401610dd89061407f565b6000610ec03361169d565b905080831115610ee25760405162461bcd60e51b8152600401610dd89061406f565b610eea6116bc565b6008556000610ef76115cd565b90506000610f16600254610e438760085461266c90919063ffffffff16565b604080518082018252601d81527f72656465656d20616d6f756e7420657863656564732062616c616e6365000000602080830191909152336000908152908190529190912054919250610f719190879063ffffffff6125df16565b33600090815260208190526040902055600254610f94908663ffffffff61279616565b60025560405160009033906000805160206143c683398151915290610fba90899061414a565b60405180910390a36009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610ff3903090600401613ecd565b60206040518083038186803b15801561100b57600080fd5b505afa15801561101f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110439190810190613628565b90508181101561106557611065611060838363ffffffff61279616565b6127d8565b600061107883606463ffffffff6126a616565b3360008181526011602052604090819020439055601654905163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb916110bc918890600401613edb565b602060405180830381600087803b1580156110d657600080fd5b505af11580156110ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061110e9190810190613542565b50600061111a826128ae565b6016546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611150908490600401613ecd565b60206040518083038186803b15801561116857600080fd5b505afa15801561117c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111a09190810190613628565b905060175481101561122b5760006111c46064610e4385606263ffffffff61266c16565b90506111cf81612a2b565b5060006111e86064610e4386600263ffffffff61266c16565b6015546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611223573d6000803e3d6000fd5b505050611268565b60155460405183916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611265573d6000803e3d6000fd5b50505b6009546001600160a01b031663a9059cbb3361128a888763ffffffff61279616565b6040518363ffffffff1660e01b81526004016112a7929190613edb565b602060405180830381600087803b1580156112c157600080fd5b505af11580156112d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112f99190810190613542565b506113026116bc565b60085561130d6117c0565b505050505050506006548114610e895760405162461bcd60e51b8152600401610dd8906140ef565b61133d61198d565b6113595760405162461bcd60e51b8152600401610dd89061405f565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60055460ff1690565b6000610c77611391612423565b84610d9185600160006113a2612423565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612b4416565b60006113e261323c565b600e5460408051808201825230815260006020820152600f54915163306430bb60e21b81526001600160a01b039093169263c190c2ec92611426929160040161412f565b604080518083038186803b15801561143d57600080fd5b505afa158015611451573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061147591908101906135ec565b6020015191505090565b6013546001600160a01b031681565b6014546001600160a01b031681565b620f424081565b6114ac61198d565b6114c85760405162461bcd60e51b8152600401610dd89061405f565b6114d061196f565b6001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050158015611508573d6000803e3d6000fd5b50565b6010546001600160a01b031681565b600b546001600160a01b031681565b600a546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610cb2903090600401613ecd565b611562612352565b600954604051636968703360e11b81526001600160a01b039283169263d2d0e06692611598929116908590600090600401613f47565b600060405180830381600087803b1580156115b257600080fd5b505af11580156115c6573d6000803e3d6000fd5b5050505050565b3360009081526011602052604081205481901561160c573360009081526011602052604090205461160590439063ffffffff61279616565b9050611616565b6000915050610c57565b60006116213361169d565b90506000806002541161163657506000611657565b611654600254610e43846116486116bc565b9063ffffffff61266c16565b90505b6000611694611964610e4386611648670de0b6b3a7640000610e43601854611648620f4240610e4364e8d4a510008d61266c90919063ffffffff16565b94505050505090565b6001600160a01b0381166000908152602081905260409020545b919050565b6000610d026116c9611d9d565b6116f26116d4611ec5565b6116f26116df6113d8565b6116f26116ea6122b0565b6116f2611c2b565b9063ffffffff612b4416565b61170661198d565b6117225760405162461bcd60e51b8152600401610dd89061405f565b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600780546001600160a01b0319169055565b6012546001600160a01b031681565b6000806117866116bc565b6002549091506117a890610e4383670de0b6b3a764000063ffffffff61266c16565b91505090565b60116020526000908152604090205481565b60006117ca611aab565b60195490915060ff1660048111156117de57fe5b8160048111156117ea57fe5b146117f7576117f7612b69565b6000611801611d9d565b111561188e57600181600481111561181557fe5b141561182c576118266103d5611d9d565b5061188e565b600481600481111561183a57fe5b14156118505761184b61075c611d9d565b61188e565b600281600481111561185e57fe5b141561186f5761184b610943611d9d565b600381600481111561187d57fe5b141561188e5761188e61065c611d9d565b6019805482919060ff191660018360048111156118a757fe5b021790555050565b6016546001600160a01b031681565b600b546040516340c10f1960e01b81526000916001600160a01b0316906340c10f19906118f19030908690600401613edb565b602060405180830381600087803b15801561190b57600080fd5b505af115801561191f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119439190810190613628565b116115085760405162461bcd60e51b8152600401610dd8906140cf565b600c546001600160a01b031681565b6007546001600160a01b031690565b600e546001600160a01b031681565b6007546000906001600160a01b03166119a4612423565b6001600160a01b031614905090565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c4f5780601f10610c2457610100808354040283529160200191610c4f565b600a54600954611a39916001600160a01b03918216911660001963ffffffff612bcf16565b600e54600954611a5e916001600160a01b03918216911660001963ffffffff612bcf16565b611a84611a696123cf565b6009546001600160a01b03169060001963ffffffff612bcf16565b600b54600954611aa9916001600160a01b03918216911660001963ffffffff612bcf16565b565b6010546009546040516303622f8f60e61b815260009283928392839283926001600160a01b039182169263d88be3c092611ae9921690600401613ebf565b60006040518083038186803b158015611b0157600080fd5b505afa158015611b15573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b3d9190810190613560565b92975090955093509150600090508415611b545750835b80841115611b5f5750825b80831115611b6a5750815b80821115611b755750805b600081861415611b8757506002611bb3565b84821415611b9757506004611bb3565b83821415611ba757506003611bb3565b82821415611bb3575060015b9550505050505090565b6000610c77611bca612423565b84610d91856040518060600160405280602581526020016143e66025913960016000611bf4612423565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6125df16565b600080611c36611529565b90508015610d0257610c7b670de0b6b3a7640000610e43600a60009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9b57600080fd5b505afa158015611caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611cd39190810190613628565b849063ffffffff61266c16565b6000610c77611ced612423565b84846124db565b611cfc61198d565b611d185760405162461bcd60e51b8152600401610dd89061405f565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90611d469033908590600401613edb565b602060405180830381600087803b158015611d6057600080fd5b505af1158015611d74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d989190810190613542565b505050565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610cb2903090600401613ecd565b600680546001019081905581611df65760405162461bcd60e51b8152600401610dd8906140bf565b611dfe6116bc565b600855600954611e1f906001600160a01b031633308563ffffffff61260b16565b336000908152601160205260408120439055600854611e445750600882905581611e62565b611e5f600854610e436002548661266c90919063ffffffff16565b90505b611e6a6116bc565b600855611e7733826126e8565b610e676117c0565b611e8761198d565b611ea35760405162461bcd60e51b8152600401610dd89061405f565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b600d546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610cb2903090600401613ecd565b600f5481565b600680546001019081905581611f245760405162461bcd60e51b8152600401610dd89061407f565b6000611f2f3361169d565b905080831115611f515760405162461bcd60e51b8152600401610dd89061406f565b611f596116bc565b6008819055600254600091611f799190610e43908763ffffffff61266c16565b604080518082018252601d81527f72656465656d20616d6f756e7420657863656564732062616c616e6365000000602080830191909152336000908152908190529190912054919250611fd49190869063ffffffff6125df16565b33600090815260208190526040902055600254611ff7908563ffffffff61279616565b60025560405160009033906000805160206143c68339815191529061201d90889061414a565b60405180910390a36009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190612056903090600401613ecd565b60206040518083038186803b15801561206e57600080fd5b505afa158015612082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120a69190810190613628565b60195490915060ff1682821015612104576120bf611aab565b60195490915060ff1660048111156120d357fe5b8160048111156120df57fe5b146120f1576120ec612b69565b612104565b612104611060848463ffffffff61279616565b600954612121906001600160a01b0316338563ffffffff612c9516565b60195460ff16600481111561213257fe5b81600481111561213e57fe5b1461214c5761214c816117f7565b6121546116bc565b600855505060065483149150610e8990505760405162461bcd60e51b8152600401610dd8906140ef565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600a5460405163140e25ad60e31b81526001600160a01b039091169063a0712d68906121d990849060040161414a565b602060405180830381600087803b1580156121f357600080fd5b505af1158015612207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061222b9190810190613628565b156115085760405162461bcd60e51b8152600401610dd89061400f565b60185481565b61225661198d565b6122725760405162461bcd60e51b8152600401610dd89061405f565b601855565b61196481565b60175481565b61228b61198d565b6122a75760405162461bcd60e51b8152600401610dd89061405f565b61150881612cb7565b6000806122bb610c81565b90508015610d0257600b54604051630359f7eb60e11b81526001600160a01b03909116906306b3efd6906122f3903090600401613ecd565b60206040518083038186803b15801561230b57600080fd5b505afa15801561231f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c7b9190810190613628565b600a546001600160a01b031681565b600c5460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b916004808301926020929190829003018186803b15801561239757600080fd5b505afa1580156123ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d029190810190613438565b600c546040805163076b7fbb60e51b815290516000926001600160a01b03169163ed6ff760916004808301926020929190829003018186803b15801561239757600080fd5b6009546001600160a01b031681565b3390565b6001600160a01b03831661244d5760405162461bcd60e51b8152600401610dd8906140af565b6001600160a01b0382166124735760405162461bcd60e51b8152600401610dd890613fff565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906124ce90859061414a565b60405180910390a3505050565b6001600160a01b0383166125015760405162461bcd60e51b8152600401610dd89061408f565b6001600160a01b0382166125275760405162461bcd60e51b8152600401610dd890613fcf565b61256a81604051806060016040528060268152602001614378602691396001600160a01b038616600090815260208190526040902054919063ffffffff6125df16565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461259f908263ffffffff612b4416565b6001600160a01b0380841660008181526020819052604090819020939093559151908516906000805160206143c6833981519152906124ce90859061414a565b600081848411156126035760405162461bcd60e51b8152600401610dd89190613fbe565b505050900390565b6040516126669085906323b872dd60e01b9061262f90879087908790602401613f11565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612d39565b50505050565b60008261267b57506000610c7b565b8282028284828161268857fe5b0414610d9a5760405162461bcd60e51b8152600401610dd89061403f565b6000610d9a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e1e565b6001600160a01b03821661270e5760405162461bcd60e51b8152600401610dd89061411f565b600254612721908263ffffffff612b4416565b6002556001600160a01b03821660009081526020819052604090205461274d908263ffffffff612b4416565b6001600160a01b0383166000818152602081905260408082209390935591519091906000805160206143c68339815191529061278a90859061414a565b60405180910390a35050565b6000610d9a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125df565b600260195460ff1660048111156127eb57fe5b14156127fa576127fa81612e55565b600360195460ff16600481111561280d57fe5b1415612843578061281c611ec5565b101561283a5760405162461bcd60e51b8152600401610dd89061409f565b61284381612eb3565b600160195460ff16600481111561285657fe5b141561288c57806128656113d8565b10156128835760405162461bcd60e51b8152600401610dd89061409f565b61288c81612ee3565b600460195460ff16600481111561289f57fe5b14156115085761150881613061565b6012546013546000916128d4916001600160a01b0390811691168363ffffffff612bcf16565b6012546013546128f7916001600160a01b0391821691168463ffffffff612bcf16565b6040805160028082526060808301845292602083019080388339505060135482519293506001600160a01b03169183915060009061293157fe5b6001600160a01b03928316602091820292909201015260145482519116908290600190811061295c57fe5b6001600160a01b039283166020918202929092010152601254606091166318cbafe585600085306129954261070863ffffffff612b4416565b6040518663ffffffff1660e01b81526004016129b5959493929190614194565b600060405180830381600087803b1580156129cf57600080fd5b505af11580156129e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a0b919081019061350d565b905080600181518110612a1a57fe5b602002602001015192505050919050565b6040805160028082526060808301845260009390929190602083019080388339505060145482519293506001600160a01b031691839150600090612a6b57fe5b6001600160a01b039283166020918202929092010152601654825191169082906001908110612a9657fe5b6001600160a01b03928316602091820292909201015260125460609116637ff36ab58560008581612acf4261070863ffffffff612b4416565b6040518663ffffffff1660e01b8152600401612aee9493929190614158565b6000604051808303818588803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612a0b919081019061350d565b600082820183811015610d9a5760405162461bcd60e51b8152600401610dd89061401f565b6000612b73611529565b90508015612b8457612b84816130bf565b612b8c6113d8565b90508015612b9d57612b9d81612ee3565b612ba5610c81565b90508015612bb657612bb68161315e565b612bbe611ec5565b905080156115085761150881612eb3565b801580612c575750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90612c059030908690600401613ef6565b60206040518083038186803b158015612c1d57600080fd5b505afa158015612c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c559190810190613628565b155b612c735760405162461bcd60e51b8152600401610dd8906140ff565b604051611d9890849063095ea7b360e01b9061262f9086908690602401613f39565b604051611d9890849063a9059cbb60e01b9061262f9086908690602401613f39565b6001600160a01b038116612cdd5760405162461bcd60e51b8152600401610dd890613fef565b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b612d4b826001600160a01b0316613200565b612d675760405162461bcd60e51b8152600401610dd89061410f565b60006060836001600160a01b031683604051612d839190613eb3565b6000604051808303816000865af19150503d8060008114612dc0576040519150601f19603f3d011682016040523d82523d6000602084013e612dc5565b606091505b509150915081612de75760405162461bcd60e51b8152600401610dd89061402f565b8051156126665780806020019051612e029190810190613542565b6126665760405162461bcd60e51b8152600401610dd8906140df565b60008183612e3f5760405162461bcd60e51b8152600401610dd89190613fbe565b506000838581612e4b57fe5b0495945050505050565b6000612e5f611529565b90506000612e6b611c2b565b905082811015612e8d5760405162461bcd60e51b8152600401610dd89061409f565b6000612ea860016116f284610e43878963ffffffff61266c16565b9050612666816130bf565b600d5460405163db006a7560e01b81526001600160a01b039091169063db006a759061159890849060040161414a565b604080516001808252818301909252606091816020015b612f0261323c565b815260200190600190039081612efa5790505090506040518060400160405280306001600160a01b03168152602001600081525081600081518110612f4357fe5b6020026020010181905250612f56613253565b6040805160808101909152600080825260208201908152602001600081526020018490529050612f8461327c565b60018181905250600060208201526040808201839052600f546060808401919091523060a0840152815160018082528184019093529091816020015b612fc861327c565b815260200190600190039081612fc05790505090508181600081518110612feb57fe5b6020908102919091010152600e5460405163a67a6a4560e01b81526001600160a01b039091169063a67a6a45906130289087908590600401613f6f565b600060405180830381600087803b15801561304257600080fd5b505af1158015613056573d6000803e3d6000fd5b505050505050505050565b600061306b610c81565b905060006130776122b0565b9050828110156130995760405162461bcd60e51b8152600401610dd89061409f565b60006130b460016116f284610e43878963ffffffff61266c16565b90506126668161315e565b600a5460405163db006a7560e01b81526001600160a01b039091169063db006a75906130ef90849060040161414a565b602060405180830381600087803b15801561310957600080fd5b505af115801561311d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131419190810190613628565b156115085760405162461bcd60e51b8152600401610dd890613fdf565b600b54604051632770a7eb60e21b81526000916001600160a01b031690639dc29fac906131919030908690600401613edb565b602060405180830381600087803b1580156131ab57600080fd5b505af11580156131bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131e39190810190613628565b116115085760405162461bcd60e51b8152600401610dd89061404f565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906132345750808214155b949350505050565b604080518082019091526000808252602082015290565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b60408051610100810182526000808252602082015290810161329c613253565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b8035610c7b81614351565b8051610c7b81614351565b600082601f8301126132f557600080fd5b81516133086133038261421c565b6141f5565b9150818183526020840193506020810190508385602084028201111561332d57600080fd5b60005b838110156133595781613343888261340f565b8452506020928301929190910190600101613330565b5050505092915050565b8051610c7b81614365565b600082601f83011261337f57600080fd5b815161338d6133038261423d565b915080825260208301602083018583830111156133a957600080fd5b6133b48382846142fd565b50505092915050565b6000604082840312156133cf57600080fd5b6133d960406141f5565b905060006133e78484613363565b82525060206133f88484830161340f565b60208301525092915050565b8035610c7b8161436e565b8051610c7b8161436e565b60006020828403121561342c57600080fd5b600061323484846132ce565b60006020828403121561344a57600080fd5b600061323484846132d9565b6000806040838503121561346957600080fd5b600061347585856132ce565b9250506020613486858286016132ce565b9150509250929050565b6000806000606084860312156134a557600080fd5b60006134b186866132ce565b93505060206134c2868287016132ce565b92505060406134d386828701613404565b9150509250925092565b600080604083850312156134f057600080fd5b60006134fc85856132ce565b925050602061348685828601613404565b60006020828403121561351f57600080fd5b815167ffffffffffffffff81111561353657600080fd5b613234848285016132e4565b60006020828403121561355457600080fd5b60006132348484613363565b600080600080600060a0868803121561357857600080fd5b855167ffffffffffffffff81111561358f57600080fd5b61359b8882890161336e565b95505060206135ac8882890161340f565b94505060406135bd8882890161340f565b93505060606135ce8882890161340f565b92505060806135df8882890161340f565b9150509295509295909350565b6000604082840312156135fe57600080fd5b600061323484846133bd565b60006020828403121561361c57600080fd5b60006132348484613404565b60006020828403121561363a57600080fd5b6000613234848461340f565b60006136528383613689565b505060200190565b6000610d9a8383613d8c565b60006136728383613e81565b505060400190565b613683816142bf565b82525050565b61368381614278565b600061369d8261426b565b6136a7818561426f565b93506136b283614265565b8060005b838110156136e05781516136ca8882613646565b97506136d583614265565b9250506001016136b6565b509495945050505050565b60006136f68261426b565b613700818561426f565b93508360208202850161371285614265565b8060005b8581101561374c578484038952815161372f858261365a565b945061373a83614265565b60209a909a0199925050600101613716565b5091979650505050505050565b60006137648261426b565b61376e818561426f565b935061377983614265565b8060005b838110156136e05781516137918882613666565b975061379c83614265565b92505060010161377d565b61368381614283565b60006137bb8261426b565b6137c581856116b7565b93506137d58185602086016142fd565b9290920192915050565b60006137ea8261426b565b6137f4818561426f565b93506138048185602086016142fd565b61380d81614329565b9093019392505050565b613683816142c6565b613683816142d1565b613683816142dc565b613683816142e7565b613683816142f2565b600061385160238361426f565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b602082015260400192915050565b600061389660198361426f565b7f434f4d504f554e443a207769746864726177206661696c656400000000000000815260200192915050565b60006138cf60268361426f565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061391760228361426f565b7f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b602082015260400192915050565b600061395b60178361426f565b7f434f4d504f554e443a20737570706c79206661696c6564000000000000000000815260200192915050565b6000613994601b8361426f565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006139cd60208361426f565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000613a0660218361426f565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000613a4960188361426f565b7f46554c4352554d3a207769746864726177206661696c65640000000000000000815260200192915050565b6000613a8260208361426f565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000613abb60148361426f565b73696e73756666696369656e742062616c616e636560601b815260200192915050565b6000613aeb601f8361426f565b7f7769746864726177206d7573742062652067726561746572207468616e203000815260200192915050565b6000613b2460258361426f565b7f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b602082015260400192915050565b6000613b6b60128361426f565b71696e73756666696369656e742066756e647360701b815260200192915050565b6000613b9960248361426f565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b602082015260400192915050565b6000613bdf601e8361426f565b7f6465706f736974206d7573742062652067726561746572207468616e20300000815260200192915050565b6000613c1860168361426f565b7511955310d495534e881cdd5c1c1b1e4819985a5b195960521b815260200192915050565b6000613c4a602a8361426f565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000613c96601f8361426f565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b6000613ccf60368361426f565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b602082015260400192915050565b6000613d27601f8361426f565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b6000613d60601f8361426f565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300815260200192915050565b8051600090610160840190613da18582613820565b506020830151613db46020860182613ea1565b506040830151613dc76040860182613e37565b506060830151613dda60c0860182613ea1565b506080830151613ded60e0860182613ea1565b5060a0830151613e01610100860182613689565b5060c0830151613e15610120860182613ea1565b5060e0830151848203610140860152613e2e82826137df565b95945050505050565b80516080830190613e4884826137a7565b506020820151613e5b6020850182613829565b506040820151613e6e6040850182613829565b5060608201516126666060850182613ea1565b80516040830190613e928482613689565b50602082015161266660208501825b61368381610c57565b613683816142b9565b6000610d9a82846137b0565b60208101610c7b8284613689565b60208101610c7b828461367a565b60408101613ee9828561367a565b610d9a6020830184613ea1565b60408101613f048285613689565b610d9a6020830184613689565b60608101613f1f8286613689565b613f2c6020830185613689565b6132346040830184613ea1565b60408101613ee98285613689565b60608101613f558286613689565b613f626020830185613ea1565b613234604083018461383b565b60408082528101613f808185613759565b9050818103602083015261323481846136eb565b60208101610c7b82846137a7565b60208101610c7b8284613817565b60208101610c7b8284613832565b60208082528101610d9a81846137df565b60208082528101610c7b81613844565b60208082528101610c7b81613889565b60208082528101610c7b816138c2565b60208082528101610c7b8161390a565b60208082528101610c7b8161394e565b60208082528101610c7b81613987565b60208082528101610c7b816139c0565b60208082528101610c7b816139f9565b60208082528101610c7b81613a3c565b60208082528101610c7b81613a75565b60208082528101610c7b81613aae565b60208082528101610c7b81613ade565b60208082528101610c7b81613b17565b60208082528101610c7b81613b5e565b60208082528101610c7b81613b8c565b60208082528101610c7b81613bd2565b60208082528101610c7b81613c0b565b60208082528101610c7b81613c3d565b60208082528101610c7b81613c89565b60208082528101610c7b81613cc2565b60208082528101610c7b81613d1a565b60208082528101610c7b81613d53565b6060810161413d8285613e81565b610d9a6040830184613ea1565b60208101610c7b8284613ea1565b608081016141668287613ea1565b81810360208301526141788186613692565b9050614187604083018561367a565b613e2e6060830184613ea1565b60a081016141a28288613ea1565b6141af6020830187613ea1565b81810360408301526141c18186613692565b90506141d0606083018561367a565b6141dd6080830184613ea1565b9695505050505050565b60208101610c7b8284613eaa565b60405181810167ffffffffffffffff8111828210171561421457600080fd5b604052919050565b600067ffffffffffffffff82111561423357600080fd5b5060209081020190565b600067ffffffffffffffff82111561425457600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b6000610c7b826142ad565b151590565b806116b781614333565b806116b78161433d565b806116b781614347565b61ffff1690565b6001600160a01b031690565b60ff1690565b6000610c7b825b6000610c7b82614278565b6000610c7b82614288565b6000610c7b82614292565b6000610c7b8261429c565b6000610c7b826142a6565b60005b83811015614318578181015183820152602001614300565b838111156126665750506000910152565b601f01601f191690565b6002811061150857fe5b6001811061150857fe5b6005811061150857fe5b61435a81614278565b811461150857600080fd5b61435a81614283565b61435a81610c5756fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a72315820365639d5025e6c918a9e86ef25e2aeadb74b5fd44cb48a582673481ea1d65ba86c6578706572696d656e74616cf564736f6c63430005110040000000000000000000000000468ab3b1f63a1c14b361bc367c3cc92277588da1000000000000000000000000f572096bbb414c6cc0c8915e9bf9e77c89eff2bd
Deployed Bytecode
0x6080604052600436106103b85760003560e01c80637d7c2a1c116101f2578063bea9849e1161010d578063f2978d98116100a0578063f69e20461161006f578063f69e2046146109dc578063f7c1ec77146109f1578063f82ce27d14610a06578063fc0c546a14610a1b576103b8565b8063f2978d981461097d578063f29e15a214610992578063f2fde38b146109a7578063f5a41dea146109c7576103b8565b8063dd62ed3e116100dc578063dd62ed3e14610908578063e849d65914610928578063ebc5116014610948578063f02fbd4a1461095d576103b8565b8063bea9849e1461089e578063cf8ca426146108be578063d9d7858a146108d3578063db006a75146108e8576103b8565b806399b71d5c11610185578063a9059cbb11610154578063a9059cbb14610829578063a9a1015a14610849578063b69ef8a814610869578063b6b55f251461087e576103b8565b806399b71d5c146107ca578063a160176d146107df578063a457c2d7146107f4578063a728797114610814576103b8565b80638da5cb5b116101c15780638da5cb5b146107765780638e4ec6ef1461078b5780638f32d59b146107a057806395d89b41146107b5576103b8565b80637d7c2a1c1461070a5780637f50d4d81461071f5780638124955c14610741578063819faf7b14610761576103b8565b806339c0a7e1116102e257806365aab74911610275578063715018a611610244578063715018a6146106ab578063735de9f7146106c057806377c7b8fc146106d55780637b82784c146106ea576103b8565b806365aab749146106415780636ff2bf081461066157806370a08231146106765780637137ef9914610696576103b8565b80634fe41129116102b15780634fe41129146105ed57806357ded9c91461060257806358782c211461061757806361c1ec551461062c576103b8565b806339c0a7e1146105995780633e413bee146105ae5780633fc8cef3146105c3578063413e920d146105d8576103b8565b806318160ddd1161035a5780632e1a7d4d116103295780632e1a7d4d146105175780632eb4520a14610537578063313ce567146105575780633950935114610579576103b8565b806318160ddd146104ad57806323b872dd146104c25780632622678c146104e25780632afcf480146104f7576103b8565b8063085d488311610396578063085d488314610434578063095ea7b3146104565780630eb2a2671461048357806316f0115b14610498576103b8565b806306636c1c146103ba57806306a3fe59146103f057806306fdde0314610412575b005b3480156103c657600080fd5b506103da6103d536600461360a565b610a30565b6040516103e7919061414a565b60405180910390f35b3480156103fc57600080fd5b50610405610bb4565b6040516103e79190613ebf565b34801561041e57600080fd5b50610427610bc3565b6040516103e79190613fbe565b34801561044057600080fd5b50610449610c5a565b6040516103e79190613fb0565b34801561046257600080fd5b506104766104713660046134dd565b610c63565b6040516103e79190613f94565b34801561048f57600080fd5b506103da610c81565b3480156104a457600080fd5b506103da610d07565b3480156104b957600080fd5b506103da610d0d565b3480156104ce57600080fd5b506104766104dd366004613490565b610d13565b3480156104ee57600080fd5b50610405610da1565b34801561050357600080fd5b506103b861051236600461360a565b610db0565b34801561052357600080fd5b506103b861053236600461360a565b610e8d565b34801561054357600080fd5b506103b861055236600461341a565b611335565b34801561056357600080fd5b5061056c61137b565b6040516103e791906141e7565b34801561058557600080fd5b506104766105943660046134dd565b611384565b3480156105a557600080fd5b506103da6113d8565b3480156105ba57600080fd5b5061040561147f565b3480156105cf57600080fd5b5061040561148e565b3480156105e457600080fd5b506103da61149d565b3480156105f957600080fd5b506103b86114a4565b34801561060e57600080fd5b5061040561150b565b34801561062357600080fd5b5061040561151a565b34801561063857600080fd5b506103da611529565b34801561064d57600080fd5b506103b861065c36600461360a565b61155a565b34801561066d57600080fd5b506103da6115cd565b34801561068257600080fd5b506103da61069136600461341a565b61169d565b3480156106a257600080fd5b506103da6116bc565b3480156106b757600080fd5b506103b86116fe565b3480156106cc57600080fd5b5061040561176c565b3480156106e157600080fd5b506103da61177b565b3480156106f657600080fd5b506103da61070536600461341a565b6117ae565b34801561071657600080fd5b506103b86117c0565b34801561072b57600080fd5b506107346118af565b6040516103e79190613fa2565b34801561074d57600080fd5b506103b861075c36600461360a565b6118be565b34801561076d57600080fd5b50610405611960565b34801561078257600080fd5b5061040561196f565b34801561079757600080fd5b5061040561197e565b3480156107ac57600080fd5b5061047661198d565b3480156107c157600080fd5b506104276119b3565b3480156107d657600080fd5b506103b8611a14565b3480156107eb57600080fd5b50610449611aab565b34801561080057600080fd5b5061047661080f3660046134dd565b611bbd565b34801561082057600080fd5b506103da611c2b565b34801561083557600080fd5b506104766108443660046134dd565b611ce0565b34801561085557600080fd5b506103b86108643660046134dd565b611cf4565b34801561087557600080fd5b506103da611d9d565b34801561088a57600080fd5b506103b861089936600461360a565b611dce565b3480156108aa57600080fd5b506103b86108b936600461341a565b611e7f565b3480156108ca57600080fd5b506103da611ec5565b3480156108df57600080fd5b506103da611ef6565b3480156108f457600080fd5b506103b861090336600461360a565b611efc565b34801561091457600080fd5b506103da610923366004613456565b61217e565b34801561093457600080fd5b506103b861094336600461360a565b6121a9565b34801561095457600080fd5b506103da612248565b34801561096957600080fd5b506103b861097836600461360a565b61224e565b34801561098957600080fd5b506103da612277565b34801561099e57600080fd5b506103da61227d565b3480156109b357600080fd5b506103b86109c236600461341a565b612283565b3480156109d357600080fd5b506103da6122b0565b3480156109e857600080fd5b50610405612343565b3480156109fd57600080fd5b50610405612352565b348015610a1257600080fd5b506104056123cf565b348015610a2757600080fd5b50610405612414565b60408051600180825281830190925260009160609190816020015b610a5361323c565b815260200190600190039081610a4b5790505090506040518060400160405280306001600160a01b03168152602001600081525081600081518110610a9457fe5b6020026020010181905250610aa7613253565b6040805160808101909152600181526020810160008152602001600081526020018590529050610ad561327c565b60008181905250600060208201526040808201839052600f546060808401919091523060a0840152815160018082528184019093529091816020015b610b1961327c565b815260200190600190039081610b115790505090508181600081518110610b3c57fe5b6020908102919091010152600e5460405163a67a6a4560e01b81526001600160a01b039091169063a67a6a4590610b799087908590600401613f6f565b600060405180830381600087803b158015610b9357600080fd5b505af1158015610ba7573d6000803e3d6000fd5b5050505050505050919050565b600d546001600160a01b031681565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c4f5780601f10610c2457610100808354040283529160200191610c4f565b820191906000526020600020905b815481529060010190602001808311610c3257829003601f168201915b505050505090505b90565b60195460ff1681565b6000610c77610c70612423565b8484612427565b5060015b92915050565b600b546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610cb2903090600401613ecd565b60206040518083038186803b158015610cca57600080fd5b505afa158015610cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d029190810190613628565b905090565b60085481565b60025490565b6000610d208484846124db565b610d9684610d2c612423565b610d918560405180606001604052806028815260200161439e602891396001600160a01b038a16600090815260016020526040812090610d6a612423565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6125df16565b612427565b5060015b9392505050565b6015546001600160a01b031681565b600680546001019081905581610de15760405162461bcd60e51b8152600401610dd8906140bf565b60405180910390fd5b610de96116bc565b600855600954610e0a906001600160a01b031633308563ffffffff61260b16565b610e126117c0565b600854600090610e285750600882905581610e52565b610e4f600854610e436002548661266c90919063ffffffff16565b9063ffffffff6126a616565b90505b610e5a6116bc565b600855610e6733826126e8565b506006548114610e895760405162461bcd60e51b8152600401610dd8906140ef565b5050565b600680546001019081905581610eb55760405162461bcd60e51b8152600401610dd89061407f565b6000610ec03361169d565b905080831115610ee25760405162461bcd60e51b8152600401610dd89061406f565b610eea6116bc565b6008556000610ef76115cd565b90506000610f16600254610e438760085461266c90919063ffffffff16565b604080518082018252601d81527f72656465656d20616d6f756e7420657863656564732062616c616e6365000000602080830191909152336000908152908190529190912054919250610f719190879063ffffffff6125df16565b33600090815260208190526040902055600254610f94908663ffffffff61279616565b60025560405160009033906000805160206143c683398151915290610fba90899061414a565b60405180910390a36009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610ff3903090600401613ecd565b60206040518083038186803b15801561100b57600080fd5b505afa15801561101f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110439190810190613628565b90508181101561106557611065611060838363ffffffff61279616565b6127d8565b600061107883606463ffffffff6126a616565b3360008181526011602052604090819020439055601654905163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb916110bc918890600401613edb565b602060405180830381600087803b1580156110d657600080fd5b505af11580156110ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061110e9190810190613542565b50600061111a826128ae565b6016546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611150908490600401613ecd565b60206040518083038186803b15801561116857600080fd5b505afa15801561117c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111a09190810190613628565b905060175481101561122b5760006111c46064610e4385606263ffffffff61266c16565b90506111cf81612a2b565b5060006111e86064610e4386600263ffffffff61266c16565b6015546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611223573d6000803e3d6000fd5b505050611268565b60155460405183916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611265573d6000803e3d6000fd5b50505b6009546001600160a01b031663a9059cbb3361128a888763ffffffff61279616565b6040518363ffffffff1660e01b81526004016112a7929190613edb565b602060405180830381600087803b1580156112c157600080fd5b505af11580156112d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112f99190810190613542565b506113026116bc565b60085561130d6117c0565b505050505050506006548114610e895760405162461bcd60e51b8152600401610dd8906140ef565b61133d61198d565b6113595760405162461bcd60e51b8152600401610dd89061405f565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60055460ff1690565b6000610c77611391612423565b84610d9185600160006113a2612423565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612b4416565b60006113e261323c565b600e5460408051808201825230815260006020820152600f54915163306430bb60e21b81526001600160a01b039093169263c190c2ec92611426929160040161412f565b604080518083038186803b15801561143d57600080fd5b505afa158015611451573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061147591908101906135ec565b6020015191505090565b6013546001600160a01b031681565b6014546001600160a01b031681565b620f424081565b6114ac61198d565b6114c85760405162461bcd60e51b8152600401610dd89061405f565b6114d061196f565b6001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050158015611508573d6000803e3d6000fd5b50565b6010546001600160a01b031681565b600b546001600160a01b031681565b600a546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610cb2903090600401613ecd565b611562612352565b600954604051636968703360e11b81526001600160a01b039283169263d2d0e06692611598929116908590600090600401613f47565b600060405180830381600087803b1580156115b257600080fd5b505af11580156115c6573d6000803e3d6000fd5b5050505050565b3360009081526011602052604081205481901561160c573360009081526011602052604090205461160590439063ffffffff61279616565b9050611616565b6000915050610c57565b60006116213361169d565b90506000806002541161163657506000611657565b611654600254610e43846116486116bc565b9063ffffffff61266c16565b90505b6000611694611964610e4386611648670de0b6b3a7640000610e43601854611648620f4240610e4364e8d4a510008d61266c90919063ffffffff16565b94505050505090565b6001600160a01b0381166000908152602081905260409020545b919050565b6000610d026116c9611d9d565b6116f26116d4611ec5565b6116f26116df6113d8565b6116f26116ea6122b0565b6116f2611c2b565b9063ffffffff612b4416565b61170661198d565b6117225760405162461bcd60e51b8152600401610dd89061405f565b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600780546001600160a01b0319169055565b6012546001600160a01b031681565b6000806117866116bc565b6002549091506117a890610e4383670de0b6b3a764000063ffffffff61266c16565b91505090565b60116020526000908152604090205481565b60006117ca611aab565b60195490915060ff1660048111156117de57fe5b8160048111156117ea57fe5b146117f7576117f7612b69565b6000611801611d9d565b111561188e57600181600481111561181557fe5b141561182c576118266103d5611d9d565b5061188e565b600481600481111561183a57fe5b14156118505761184b61075c611d9d565b61188e565b600281600481111561185e57fe5b141561186f5761184b610943611d9d565b600381600481111561187d57fe5b141561188e5761188e61065c611d9d565b6019805482919060ff191660018360048111156118a757fe5b021790555050565b6016546001600160a01b031681565b600b546040516340c10f1960e01b81526000916001600160a01b0316906340c10f19906118f19030908690600401613edb565b602060405180830381600087803b15801561190b57600080fd5b505af115801561191f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119439190810190613628565b116115085760405162461bcd60e51b8152600401610dd8906140cf565b600c546001600160a01b031681565b6007546001600160a01b031690565b600e546001600160a01b031681565b6007546000906001600160a01b03166119a4612423565b6001600160a01b031614905090565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c4f5780601f10610c2457610100808354040283529160200191610c4f565b600a54600954611a39916001600160a01b03918216911660001963ffffffff612bcf16565b600e54600954611a5e916001600160a01b03918216911660001963ffffffff612bcf16565b611a84611a696123cf565b6009546001600160a01b03169060001963ffffffff612bcf16565b600b54600954611aa9916001600160a01b03918216911660001963ffffffff612bcf16565b565b6010546009546040516303622f8f60e61b815260009283928392839283926001600160a01b039182169263d88be3c092611ae9921690600401613ebf565b60006040518083038186803b158015611b0157600080fd5b505afa158015611b15573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b3d9190810190613560565b92975090955093509150600090508415611b545750835b80841115611b5f5750825b80831115611b6a5750815b80821115611b755750805b600081861415611b8757506002611bb3565b84821415611b9757506004611bb3565b83821415611ba757506003611bb3565b82821415611bb3575060015b9550505050505090565b6000610c77611bca612423565b84610d91856040518060600160405280602581526020016143e66025913960016000611bf4612423565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6125df16565b600080611c36611529565b90508015610d0257610c7b670de0b6b3a7640000610e43600a60009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9b57600080fd5b505afa158015611caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611cd39190810190613628565b849063ffffffff61266c16565b6000610c77611ced612423565b84846124db565b611cfc61198d565b611d185760405162461bcd60e51b8152600401610dd89061405f565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90611d469033908590600401613edb565b602060405180830381600087803b158015611d6057600080fd5b505af1158015611d74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d989190810190613542565b505050565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610cb2903090600401613ecd565b600680546001019081905581611df65760405162461bcd60e51b8152600401610dd8906140bf565b611dfe6116bc565b600855600954611e1f906001600160a01b031633308563ffffffff61260b16565b336000908152601160205260408120439055600854611e445750600882905581611e62565b611e5f600854610e436002548661266c90919063ffffffff16565b90505b611e6a6116bc565b600855611e7733826126e8565b610e676117c0565b611e8761198d565b611ea35760405162461bcd60e51b8152600401610dd89061405f565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b600d546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610cb2903090600401613ecd565b600f5481565b600680546001019081905581611f245760405162461bcd60e51b8152600401610dd89061407f565b6000611f2f3361169d565b905080831115611f515760405162461bcd60e51b8152600401610dd89061406f565b611f596116bc565b6008819055600254600091611f799190610e43908763ffffffff61266c16565b604080518082018252601d81527f72656465656d20616d6f756e7420657863656564732062616c616e6365000000602080830191909152336000908152908190529190912054919250611fd49190869063ffffffff6125df16565b33600090815260208190526040902055600254611ff7908563ffffffff61279616565b60025560405160009033906000805160206143c68339815191529061201d90889061414a565b60405180910390a36009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190612056903090600401613ecd565b60206040518083038186803b15801561206e57600080fd5b505afa158015612082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120a69190810190613628565b60195490915060ff1682821015612104576120bf611aab565b60195490915060ff1660048111156120d357fe5b8160048111156120df57fe5b146120f1576120ec612b69565b612104565b612104611060848463ffffffff61279616565b600954612121906001600160a01b0316338563ffffffff612c9516565b60195460ff16600481111561213257fe5b81600481111561213e57fe5b1461214c5761214c816117f7565b6121546116bc565b600855505060065483149150610e8990505760405162461bcd60e51b8152600401610dd8906140ef565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600a5460405163140e25ad60e31b81526001600160a01b039091169063a0712d68906121d990849060040161414a565b602060405180830381600087803b1580156121f357600080fd5b505af1158015612207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061222b9190810190613628565b156115085760405162461bcd60e51b8152600401610dd89061400f565b60185481565b61225661198d565b6122725760405162461bcd60e51b8152600401610dd89061405f565b601855565b61196481565b60175481565b61228b61198d565b6122a75760405162461bcd60e51b8152600401610dd89061405f565b61150881612cb7565b6000806122bb610c81565b90508015610d0257600b54604051630359f7eb60e11b81526001600160a01b03909116906306b3efd6906122f3903090600401613ecd565b60206040518083038186803b15801561230b57600080fd5b505afa15801561231f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c7b9190810190613628565b600a546001600160a01b031681565b600c5460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b916004808301926020929190829003018186803b15801561239757600080fd5b505afa1580156123ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d029190810190613438565b600c546040805163076b7fbb60e51b815290516000926001600160a01b03169163ed6ff760916004808301926020929190829003018186803b15801561239757600080fd5b6009546001600160a01b031681565b3390565b6001600160a01b03831661244d5760405162461bcd60e51b8152600401610dd8906140af565b6001600160a01b0382166124735760405162461bcd60e51b8152600401610dd890613fff565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906124ce90859061414a565b60405180910390a3505050565b6001600160a01b0383166125015760405162461bcd60e51b8152600401610dd89061408f565b6001600160a01b0382166125275760405162461bcd60e51b8152600401610dd890613fcf565b61256a81604051806060016040528060268152602001614378602691396001600160a01b038616600090815260208190526040902054919063ffffffff6125df16565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461259f908263ffffffff612b4416565b6001600160a01b0380841660008181526020819052604090819020939093559151908516906000805160206143c6833981519152906124ce90859061414a565b600081848411156126035760405162461bcd60e51b8152600401610dd89190613fbe565b505050900390565b6040516126669085906323b872dd60e01b9061262f90879087908790602401613f11565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612d39565b50505050565b60008261267b57506000610c7b565b8282028284828161268857fe5b0414610d9a5760405162461bcd60e51b8152600401610dd89061403f565b6000610d9a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e1e565b6001600160a01b03821661270e5760405162461bcd60e51b8152600401610dd89061411f565b600254612721908263ffffffff612b4416565b6002556001600160a01b03821660009081526020819052604090205461274d908263ffffffff612b4416565b6001600160a01b0383166000818152602081905260408082209390935591519091906000805160206143c68339815191529061278a90859061414a565b60405180910390a35050565b6000610d9a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125df565b600260195460ff1660048111156127eb57fe5b14156127fa576127fa81612e55565b600360195460ff16600481111561280d57fe5b1415612843578061281c611ec5565b101561283a5760405162461bcd60e51b8152600401610dd89061409f565b61284381612eb3565b600160195460ff16600481111561285657fe5b141561288c57806128656113d8565b10156128835760405162461bcd60e51b8152600401610dd89061409f565b61288c81612ee3565b600460195460ff16600481111561289f57fe5b14156115085761150881613061565b6012546013546000916128d4916001600160a01b0390811691168363ffffffff612bcf16565b6012546013546128f7916001600160a01b0391821691168463ffffffff612bcf16565b6040805160028082526060808301845292602083019080388339505060135482519293506001600160a01b03169183915060009061293157fe5b6001600160a01b03928316602091820292909201015260145482519116908290600190811061295c57fe5b6001600160a01b039283166020918202929092010152601254606091166318cbafe585600085306129954261070863ffffffff612b4416565b6040518663ffffffff1660e01b81526004016129b5959493929190614194565b600060405180830381600087803b1580156129cf57600080fd5b505af11580156129e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a0b919081019061350d565b905080600181518110612a1a57fe5b602002602001015192505050919050565b6040805160028082526060808301845260009390929190602083019080388339505060145482519293506001600160a01b031691839150600090612a6b57fe5b6001600160a01b039283166020918202929092010152601654825191169082906001908110612a9657fe5b6001600160a01b03928316602091820292909201015260125460609116637ff36ab58560008581612acf4261070863ffffffff612b4416565b6040518663ffffffff1660e01b8152600401612aee9493929190614158565b6000604051808303818588803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612a0b919081019061350d565b600082820183811015610d9a5760405162461bcd60e51b8152600401610dd89061401f565b6000612b73611529565b90508015612b8457612b84816130bf565b612b8c6113d8565b90508015612b9d57612b9d81612ee3565b612ba5610c81565b90508015612bb657612bb68161315e565b612bbe611ec5565b905080156115085761150881612eb3565b801580612c575750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90612c059030908690600401613ef6565b60206040518083038186803b158015612c1d57600080fd5b505afa158015612c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c559190810190613628565b155b612c735760405162461bcd60e51b8152600401610dd8906140ff565b604051611d9890849063095ea7b360e01b9061262f9086908690602401613f39565b604051611d9890849063a9059cbb60e01b9061262f9086908690602401613f39565b6001600160a01b038116612cdd5760405162461bcd60e51b8152600401610dd890613fef565b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b612d4b826001600160a01b0316613200565b612d675760405162461bcd60e51b8152600401610dd89061410f565b60006060836001600160a01b031683604051612d839190613eb3565b6000604051808303816000865af19150503d8060008114612dc0576040519150601f19603f3d011682016040523d82523d6000602084013e612dc5565b606091505b509150915081612de75760405162461bcd60e51b8152600401610dd89061402f565b8051156126665780806020019051612e029190810190613542565b6126665760405162461bcd60e51b8152600401610dd8906140df565b60008183612e3f5760405162461bcd60e51b8152600401610dd89190613fbe565b506000838581612e4b57fe5b0495945050505050565b6000612e5f611529565b90506000612e6b611c2b565b905082811015612e8d5760405162461bcd60e51b8152600401610dd89061409f565b6000612ea860016116f284610e43878963ffffffff61266c16565b9050612666816130bf565b600d5460405163db006a7560e01b81526001600160a01b039091169063db006a759061159890849060040161414a565b604080516001808252818301909252606091816020015b612f0261323c565b815260200190600190039081612efa5790505090506040518060400160405280306001600160a01b03168152602001600081525081600081518110612f4357fe5b6020026020010181905250612f56613253565b6040805160808101909152600080825260208201908152602001600081526020018490529050612f8461327c565b60018181905250600060208201526040808201839052600f546060808401919091523060a0840152815160018082528184019093529091816020015b612fc861327c565b815260200190600190039081612fc05790505090508181600081518110612feb57fe5b6020908102919091010152600e5460405163a67a6a4560e01b81526001600160a01b039091169063a67a6a45906130289087908590600401613f6f565b600060405180830381600087803b15801561304257600080fd5b505af1158015613056573d6000803e3d6000fd5b505050505050505050565b600061306b610c81565b905060006130776122b0565b9050828110156130995760405162461bcd60e51b8152600401610dd89061409f565b60006130b460016116f284610e43878963ffffffff61266c16565b90506126668161315e565b600a5460405163db006a7560e01b81526001600160a01b039091169063db006a75906130ef90849060040161414a565b602060405180830381600087803b15801561310957600080fd5b505af115801561311d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131419190810190613628565b156115085760405162461bcd60e51b8152600401610dd890613fdf565b600b54604051632770a7eb60e21b81526000916001600160a01b031690639dc29fac906131919030908690600401613edb565b602060405180830381600087803b1580156131ab57600080fd5b505af11580156131bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131e39190810190613628565b116115085760405162461bcd60e51b8152600401610dd89061404f565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906132345750808214155b949350505050565b604080518082019091526000808252602082015290565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b60408051610100810182526000808252602082015290810161329c613253565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b8035610c7b81614351565b8051610c7b81614351565b600082601f8301126132f557600080fd5b81516133086133038261421c565b6141f5565b9150818183526020840193506020810190508385602084028201111561332d57600080fd5b60005b838110156133595781613343888261340f565b8452506020928301929190910190600101613330565b5050505092915050565b8051610c7b81614365565b600082601f83011261337f57600080fd5b815161338d6133038261423d565b915080825260208301602083018583830111156133a957600080fd5b6133b48382846142fd565b50505092915050565b6000604082840312156133cf57600080fd5b6133d960406141f5565b905060006133e78484613363565b82525060206133f88484830161340f565b60208301525092915050565b8035610c7b8161436e565b8051610c7b8161436e565b60006020828403121561342c57600080fd5b600061323484846132ce565b60006020828403121561344a57600080fd5b600061323484846132d9565b6000806040838503121561346957600080fd5b600061347585856132ce565b9250506020613486858286016132ce565b9150509250929050565b6000806000606084860312156134a557600080fd5b60006134b186866132ce565b93505060206134c2868287016132ce565b92505060406134d386828701613404565b9150509250925092565b600080604083850312156134f057600080fd5b60006134fc85856132ce565b925050602061348685828601613404565b60006020828403121561351f57600080fd5b815167ffffffffffffffff81111561353657600080fd5b613234848285016132e4565b60006020828403121561355457600080fd5b60006132348484613363565b600080600080600060a0868803121561357857600080fd5b855167ffffffffffffffff81111561358f57600080fd5b61359b8882890161336e565b95505060206135ac8882890161340f565b94505060406135bd8882890161340f565b93505060606135ce8882890161340f565b92505060806135df8882890161340f565b9150509295509295909350565b6000604082840312156135fe57600080fd5b600061323484846133bd565b60006020828403121561361c57600080fd5b60006132348484613404565b60006020828403121561363a57600080fd5b6000613234848461340f565b60006136528383613689565b505060200190565b6000610d9a8383613d8c565b60006136728383613e81565b505060400190565b613683816142bf565b82525050565b61368381614278565b600061369d8261426b565b6136a7818561426f565b93506136b283614265565b8060005b838110156136e05781516136ca8882613646565b97506136d583614265565b9250506001016136b6565b509495945050505050565b60006136f68261426b565b613700818561426f565b93508360208202850161371285614265565b8060005b8581101561374c578484038952815161372f858261365a565b945061373a83614265565b60209a909a0199925050600101613716565b5091979650505050505050565b60006137648261426b565b61376e818561426f565b935061377983614265565b8060005b838110156136e05781516137918882613666565b975061379c83614265565b92505060010161377d565b61368381614283565b60006137bb8261426b565b6137c581856116b7565b93506137d58185602086016142fd565b9290920192915050565b60006137ea8261426b565b6137f4818561426f565b93506138048185602086016142fd565b61380d81614329565b9093019392505050565b613683816142c6565b613683816142d1565b613683816142dc565b613683816142e7565b613683816142f2565b600061385160238361426f565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b602082015260400192915050565b600061389660198361426f565b7f434f4d504f554e443a207769746864726177206661696c656400000000000000815260200192915050565b60006138cf60268361426f565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061391760228361426f565b7f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b602082015260400192915050565b600061395b60178361426f565b7f434f4d504f554e443a20737570706c79206661696c6564000000000000000000815260200192915050565b6000613994601b8361426f565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006139cd60208361426f565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000613a0660218361426f565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000613a4960188361426f565b7f46554c4352554d3a207769746864726177206661696c65640000000000000000815260200192915050565b6000613a8260208361426f565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000613abb60148361426f565b73696e73756666696369656e742062616c616e636560601b815260200192915050565b6000613aeb601f8361426f565b7f7769746864726177206d7573742062652067726561746572207468616e203000815260200192915050565b6000613b2460258361426f565b7f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b602082015260400192915050565b6000613b6b60128361426f565b71696e73756666696369656e742066756e647360701b815260200192915050565b6000613b9960248361426f565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b602082015260400192915050565b6000613bdf601e8361426f565b7f6465706f736974206d7573742062652067726561746572207468616e20300000815260200192915050565b6000613c1860168361426f565b7511955310d495534e881cdd5c1c1b1e4819985a5b195960521b815260200192915050565b6000613c4a602a8361426f565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000613c96601f8361426f565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b6000613ccf60368361426f565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b602082015260400192915050565b6000613d27601f8361426f565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b6000613d60601f8361426f565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300815260200192915050565b8051600090610160840190613da18582613820565b506020830151613db46020860182613ea1565b506040830151613dc76040860182613e37565b506060830151613dda60c0860182613ea1565b506080830151613ded60e0860182613ea1565b5060a0830151613e01610100860182613689565b5060c0830151613e15610120860182613ea1565b5060e0830151848203610140860152613e2e82826137df565b95945050505050565b80516080830190613e4884826137a7565b506020820151613e5b6020850182613829565b506040820151613e6e6040850182613829565b5060608201516126666060850182613ea1565b80516040830190613e928482613689565b50602082015161266660208501825b61368381610c57565b613683816142b9565b6000610d9a82846137b0565b60208101610c7b8284613689565b60208101610c7b828461367a565b60408101613ee9828561367a565b610d9a6020830184613ea1565b60408101613f048285613689565b610d9a6020830184613689565b60608101613f1f8286613689565b613f2c6020830185613689565b6132346040830184613ea1565b60408101613ee98285613689565b60608101613f558286613689565b613f626020830185613ea1565b613234604083018461383b565b60408082528101613f808185613759565b9050818103602083015261323481846136eb565b60208101610c7b82846137a7565b60208101610c7b8284613817565b60208101610c7b8284613832565b60208082528101610d9a81846137df565b60208082528101610c7b81613844565b60208082528101610c7b81613889565b60208082528101610c7b816138c2565b60208082528101610c7b8161390a565b60208082528101610c7b8161394e565b60208082528101610c7b81613987565b60208082528101610c7b816139c0565b60208082528101610c7b816139f9565b60208082528101610c7b81613a3c565b60208082528101610c7b81613a75565b60208082528101610c7b81613aae565b60208082528101610c7b81613ade565b60208082528101610c7b81613b17565b60208082528101610c7b81613b5e565b60208082528101610c7b81613b8c565b60208082528101610c7b81613bd2565b60208082528101610c7b81613c0b565b60208082528101610c7b81613c3d565b60208082528101610c7b81613c89565b60208082528101610c7b81613cc2565b60208082528101610c7b81613d1a565b60208082528101610c7b81613d53565b6060810161413d8285613e81565b610d9a6040830184613ea1565b60208101610c7b8284613ea1565b608081016141668287613ea1565b81810360208301526141788186613692565b9050614187604083018561367a565b613e2e6060830184613ea1565b60a081016141a28288613ea1565b6141af6020830187613ea1565b81810360408301526141c18186613692565b90506141d0606083018561367a565b6141dd6080830184613ea1565b9695505050505050565b60208101610c7b8284613eaa565b60405181810167ffffffffffffffff8111828210171561421457600080fd5b604052919050565b600067ffffffffffffffff82111561423357600080fd5b5060209081020190565b600067ffffffffffffffff82111561425457600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b6000610c7b826142ad565b151590565b806116b781614333565b806116b78161433d565b806116b781614347565b61ffff1690565b6001600160a01b031690565b60ff1690565b6000610c7b825b6000610c7b82614278565b6000610c7b82614288565b6000610c7b82614292565b6000610c7b8261429c565b6000610c7b826142a6565b60005b83811015614318578181015183820152602001614300565b838111156126665750506000910152565b601f01601f191690565b6002811061150857fe5b6001811061150857fe5b6005811061150857fe5b61435a81614278565b811461150857600080fd5b61435a81614283565b61435a81610c5756fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a72315820365639d5025e6c918a9e86ef25e2aeadb74b5fd44cb48a582673481ea1d65ba86c6578706572696d656e74616cf564736f6c63430005110040
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000468ab3b1f63a1c14b361bc367c3cc92277588da1000000000000000000000000f572096bbb414c6cc0c8915e9bf9e77c89eff2bd
-----Decoded View---------------
Arg [0] : _yeldToken (address): 0x468ab3b1f63A1C14b361bC367c3cC92277588Da1
Arg [1] : _retirementYeldTreasury (address): 0xF572096BbB414C6cC0C8915e9BF9e77C89eff2bD
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000468ab3b1f63a1c14b361bc367c3cc92277588da1
Arg [1] : 000000000000000000000000f572096bbb414c6cc0c8915e9bf9e77c89eff2bd
Deployed Bytecode Sourcemap
14097:18504:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22665:579;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22665:579:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14398:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14398:24:0;;;:::i;:::-;;;;;;;;6436:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6436:83:0;;;:::i;:::-;;;;;;;;15261:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15261:36:0;;;:::i;:::-;;;;;;;;3456:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3456:152:0;;;;;;;;:::i;:::-;;;;;;;;25237:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25237:116:0;;;:::i;14270:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14270:19:0;;;:::i;2939:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2939:91:0;;;:::i;3614:304::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3614:304:0;;;;;;;;:::i;14787:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14787:45:0;;;:::i;30208:569::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30208:569:0;;;;;;;;:::i;19663:2284::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19663:2284:0;;;;;;;;:::i;16130:126::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16130:126:0;;;;;;;;:::i;6618:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6618:83:0;;;:::i;:::-;;;;;;;;3924:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3924:210:0;;;;;;;;:::i;24484:166::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24484:166:0;;;:::i;14649:64::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14649:64:0;;;:::i;14718:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14718:64:0;;;:::i;15108:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15108:40:0;;;:::i;16570:98::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16570:98:0;;;:::i;14477:18::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14477:18:0;;;:::i;14347:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14347:22:0;;;:::i;24654:120::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24654:120:0;;;:::i;29434:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29434:96:0;;;;;;;;:::i;16785:710::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16785:710:0;;;:::i;3036:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3036:110:0;;;;;;;;:::i;31014:217::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31014:217:0;;;:::i;2198:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2198:140:0;;;:::i;14571:73::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14571:73:0;;;:::i;31237:154::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31237:154:0;;;:::i;14513:53::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14513:53:0;;;;;;;;:::i;28366:543::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28366:543:0;;;:::i;14837:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14837:23:0;;;:::i;:::-;;;;;;;;29534:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29534:141:0;;;;;;;;:::i;14374:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14374:19:0;;;:::i;1893:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1893:87:0;;;:::i;14427:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14427:19:0;;;:::i;2098:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2098:94:0;;;:::i;6525:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6525:87:0;;;:::i;24086:279::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24086:279:0;;;:::i;21953:706::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21953:706:0;;;:::i;4140:261::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4140:261:0;;;;;;;;:::i;24778:248::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24778:248:0;;;:::i;3152:158::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3152:158:0;;;;;;;;:::i;16429:137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16429:137:0;;;;;;;;:::i;24371:107::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24371:107:0;;;:::i;18929:662::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18929:662:0;;;;;;;;:::i;16315:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16315:110:0;;;;;;;;:::i;25357:115::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25357:115:0;;;:::i;14451:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14451:21:0;;;:::i;31444:1154::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31444:1154:0;;;;;;;;:::i;3316:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3316:134:0;;;;;;;;:::i;29679:131::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29679:131:0;;;;;;;;:::i;14969:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14969:41:0;;;:::i;16672:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16672:109:0;;;;;;;;:::i;14919:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14919:45:0;;;:::i;14865:49::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14865:49:0;;;:::i;2344:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2344:117:0;;;;;;;;:::i;25030:203::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25030:203:0;;;:::i;14319:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14319:23:0;;;:::i;23828:120::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23828:120:0;;;:::i;23952:128::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23952:128:0;;;:::i;14294:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14294:20:0;;;:::i;22665:579::-;22753:13;;;22764:1;22753:13;;;;;;;;;22716:4;;22731:19;;22753:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22731:35;;22786:22;;;;;;;;22799:4;-1:-1:-1;;;;;22786:22:0;;;;;22806:1;22786:22;;;22775:5;22781:1;22775:8;;;;;;;;;;;;;:33;;;;22819:22;;:::i;:::-;22844:70;;;;;;;;;22856:4;22844:70;;;;;-1:-1:-1;22844:70:0;;;;22885:20;22844:70;;;;;;;22819:95;-1:-1:-1;22923:21:0;;:::i;:::-;22970:18;22953:3;22970:18;22953:35;;-1:-1:-1;23013:1:0;22997:13;;;:17;23023:10;;;;:16;;;23070:6;;23048:19;;;;:28;;;;23112:4;23085:16;;;:32;23155:19;;23172:1;23155:19;;;;;;;;;23048;;23155;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23128:46;;23193:3;23183:4;23188:1;23183:7;;;;;;;;;;;;;;;;;:13;23212:4;;23207:31;;-1:-1:-1;;;23207:31:0;;-1:-1:-1;;;;;23212:4:0;;;;23207:18;;:31;;23226:5;;23233:4;;23207:31;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23207:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23207:31:0;;;;22665:579;;;;;;;:::o;14398:24::-;;;-1:-1:-1;;;;;14398:24:0;;:::o;6436:83::-;6506:5;6499:12;;;;;;;;-1:-1:-1;;6499:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6473:13;;6499:12;;6506:5;;6499:12;;6506:5;6499:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6436:83;;:::o;15261:36::-;;;;;;:::o;3456:152::-;3522:4;3539:39;3548:12;:10;:12::i;:::-;3562:7;3571:6;3539:8;:39::i;:::-;-1:-1:-1;3596:4:0;3456:152;;;;;:::o;25237:116::-;25314:7;;25307:40;;-1:-1:-1;;;25307:40:0;;25284:7;;-1:-1:-1;;;;;25314:7:0;;25307:25;;:40;;25341:4;;25307:40;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25307:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25307:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25307:40:0;;;;;;;;;25300:47;;25237:116;:::o;14270:19::-;;;;:::o;2939:91::-;3010:12;;2939:91;:::o;3614:304::-;3703:4;3720:36;3730:6;3738:9;3749:6;3720:9;:36::i;:::-;3767:121;3776:6;3784:12;:10;:12::i;:::-;3798:89;3836:6;3798:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3798:19:0;;;;;;:11;:19;;;;;;3818:12;:10;:12::i;:::-;-1:-1:-1;;;;;3798:33:0;;;;;;;;;;;;-1:-1:-1;3798:33:0;;;:89;;:37;:89;:::i;:::-;3767:8;:121::i;:::-;-1:-1:-1;3906:4:0;3614:304;;;;;;:::o;14787:45::-;;;-1:-1:-1;;;;;14787:45:0;;:::o;30208:569::-;6881:13;:18;;6898:1;6881:18;;;;;30297:11;30289:54;;;;-1:-1:-1;;;30289:54:0;;;;;;;;;;;;;;;;;30359:22;:20;:22::i;:::-;30352:4;:29;30399:5;;30392:66;;-1:-1:-1;;;;;30399:5:0;30423:10;30443:4;30450:7;30392:66;:30;:66;:::i;:::-;30469:11;:9;:11::i;:::-;30554:4;;30523:14;;30550:150;;-1:-1:-1;30603:4:0;:14;;;30585:7;30550:150;;;30653:37;30685:4;;30654:25;30666:12;;30654:7;:11;;:25;;;;:::i;:::-;30653:31;:37;:31;:37;:::i;:::-;30644:46;;30550:150;30715:22;:20;:22::i;:::-;30708:4;:29;30746:25;30752:10;30764:6;30746:5;:25::i;:::-;6957:1;6993:13;;6977:12;:29;6969:73;;;;-1:-1:-1;;;6969:73:0;;;;;;;;;30208:569;;:::o;19663:2284::-;6881:13;:18;;6898:1;6881:18;;;;;19754:11;19746:55;;;;-1:-1:-1;;;19746:55:0;;;;;;;;;19810:16;19829:21;19839:10;19829:9;:21::i;:::-;19810:40;;19878:8;19867:7;:19;;19859:52;;;;-1:-1:-1;;;19859:52:0;;;;;;;;;19972:23;:21;:23::i;:::-;19965:4;:30;20019:22;20044:19;:17;:19::i;:::-;20019:44;;20087:29;20119:37;20143:12;;20120:17;20129:7;20120:4;;:8;;:17;;;;:::i;20119:37::-;20189:67;;;;;;;;;;;;;;;;;;;;20199:10;-1:-1:-1;20189:21:0;;;;;;;;;;;;20087:69;;-1:-1:-1;20189:67:0;;:21;20215:7;;20189:67;:25;:67;:::i;:::-;20175:10;20165:9;:21;;;;;;;;;;:91;20280:12;;:25;;20297:7;20280:25;:16;:25;:::i;:::-;20265:12;:40;20319:41;;20348:1;;20328:10;;-1:-1:-1;;;;;;;;;;;20319:41:0;;;20352:7;;20319:41;;;;;;;;;;20388:5;;20381:38;;-1:-1:-1;;;20381:38:0;;20369:9;;-1:-1:-1;;;;;20388:5:0;;20381:23;;:38;;20413:4;;20381:38;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20381:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20381:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20381:38:0;;;;;;;;;20369:50;;20436:21;20432:1;:25;20428:95;;;20470:43;20484:28;:21;20510:1;20484:28;:25;:28;:::i;:::-;20470:13;:43::i;:::-;20594:18;20615:30;:21;20641:3;20615:30;:25;:30;:::i;:::-;20673:10;20654:30;;;;:18;:30;;;;;;;20687:12;20654:45;;20708:9;;:46;;-1:-1:-1;;;20708:46:0;;20594:51;;-1:-1:-1;;;;;;20708:9:0;;:18;;:46;;20739:14;;20708:46;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20708:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20708:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20708:46:0;;;;;;;;;;20920:22;20945:21;20955:10;20945:9;:21::i;:::-;21005:9;;:31;;-1:-1:-1;;;21005:31:0;;20920:46;;-1:-1:-1;20975:27:0;;-1:-1:-1;;;;;21005:9:0;;;;:19;;:31;;20975:27;;21005:31;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21005:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21005:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21005:31:0;;;;;;;;;20975:61;;21071:19;;21049;:41;21045:739;;;21168:17;21188:31;21215:3;21188:22;:14;21207:2;21188:22;:18;:22;:::i;:31::-;21168:51;;21292:19;21301:9;21292:8;:19::i;:::-;-1:-1:-1;21362:22:0;21387:30;21413:3;21387:21;:14;21406:1;21387:21;:18;:21;:::i;:30::-;21461:22;;:47;;21362:55;;-1:-1:-1;;;;;;21461:22:0;;:47;;;;;21362:55;;21461:22;:47;:22;:47;21362:55;21461:22;:47;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21461:47:0;21045:739;;;;;21727:22;;:47;;21669:14;;-1:-1:-1;;;;;21727:22:0;;:47;;;;;21669:14;;21644:22;21727:47;21644:22;21727:47;21669:14;21727:22;:47;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21727:47:0;21045:739;;21799:5;;-1:-1:-1;;;;;21799:5:0;21792:22;21815:10;21827:37;:21;21853:10;21827:37;:25;:37;:::i;:::-;21792:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21792:73:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21792:73:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21792:73:0;;;;;;;;;;21898:23;:21;:23::i;:::-;21891:4;:30;21930:11;:9;:11::i;:::-;6957:1;;;;;;;6993:13;;6977:12;:29;6969:73;;;;-1:-1:-1;;;6969:73:0;;;;;;;;16130:126;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;16216:22;:34;;-1:-1:-1;;;;;;16216:34:0;-1:-1:-1;;;;;16216:34:0;;;;;;;;;;16130:126::o;6618:83::-;6684:9;;;;6618:83;:::o;3924:210::-;4004:4;4021:83;4030:12;:10;:12::i;:::-;4044:7;4053:50;4092:10;4053:11;:25;4065:12;:10;:12::i;:::-;-1:-1:-1;;;;;4053:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;4053:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;24484:166::-;24528:7;24546:14;;:::i;:::-;24568:4;;24588:22;;;;;;;;24601:4;24588:22;;24568:4;24588:22;;;;24612:6;;24563:56;;-1:-1:-1;;;24563:56:0;;-1:-1:-1;;;;;24568:4:0;;;;24563:24;;:56;;24588:22;24563:56;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24563:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24563:56:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24563:56:0;;;;;;;;;24635:9;;;;-1:-1:-1;;24484:166:0;:::o;14649:64::-;;;-1:-1:-1;;;;;14649:64:0;;:::o;14718:::-;;;-1:-1:-1;;;;;14718:64:0;;:::o;15108:40::-;15145:3;15108:40;:::o;16570:98::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;16623:7;:5;:7::i;:::-;-1:-1:-1;;;;;16623:16:0;:39;16640:21;16623:39;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16623:39:0;16570:98::o;14477:18::-;;;-1:-1:-1;;;;;14477:18:0;;:::o;14347:22::-;;;-1:-1:-1;;;;;14347:22:0;;:::o;24654:120::-;24734:8;;24727:41;;-1:-1:-1;;;24727:41:0;;24702:7;;-1:-1:-1;;;;;24734:8:0;;24727:26;;:41;;24762:4;;24727:41;;;;29434:96;29488:9;:7;:9::i;:::-;29507:5;;29483:41;;-1:-1:-1;;;29483:41:0;;-1:-1:-1;;;;;29483:23:0;;;;;;:41;;29507:5;;;29514:6;;29507:5;;29483:41;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29483:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29483:41:0;;;;29434:96;:::o;16785:710::-;16900:10;16834:7;16881:30;;;:18;:30;;;;;;16834:7;;16881:34;16877:151;;16977:10;16958:30;;;;:18;:30;;;;;;16941:48;;:12;;:48;:16;:48;:::i;:::-;16926:63;;16877:151;;;17019:1;17012:8;;;;;16877:151;17034:16;17053:21;17063:10;17053:9;:21::i;:::-;17034:40;;17103:30;17160:1;17144:12;;:17;17140:170;;-1:-1:-1;17197:1:0;17140:170;;;17246:56;17289:12;;17247:36;17274:8;17247:22;:20;:22::i;:::-;:26;:36;:26;:36;:::i;17246:56::-;17221:81;;17140:170;17316:22;17341:120;14960:4;17341:100;17428:12;17341:82;17418:4;17341:72;17394:18;;17341:48;15145:3;17341:32;17368:4;17341:22;:26;;:32;;;;:::i;:120::-;17316:145;-1:-1:-1;;;;;16785:710:0;:::o;3036:110::-;-1:-1:-1;;;;;3120:18:0;;3093:7;3120:18;;;;;;;;;;;3036:110;;;;:::o;31014:217::-;31067:4;31087:138;31215:9;:7;:9::i;:::-;31087:115;31188:13;:11;:13::i;:::-;31087:88;31161:13;:11;:13::i;:::-;31087:61;31124:23;:21;:23::i;:::-;31087:24;:22;:24::i;:::-;:36;:61;:36;:61;:::i;2198:140::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;2281:6;;2260:40;;2297:1;;-1:-1:-1;;;;;2281:6:0;;2260:40;;2297:1;;2260:40;2311:6;:19;;-1:-1:-1;;;;;;2311:19:0;;;2198:140::o;14571:73::-;;;-1:-1:-1;;;;;14571:73:0;;:::o;31237:154::-;31290:4;31303:10;31316:22;:20;:22::i;:::-;31372:12;;31303:35;;-1:-1:-1;31352:33:0;;:15;31303:35;31362:4;31352:15;:9;:15;:::i;:33::-;31345:40;;;31237:154;:::o;14513:53::-;;;;;;;;;;;;;:::o;28366:543::-;28401:18;28422:11;:9;:11::i;:::-;28461:8;;28401:32;;-1:-1:-1;28461:8:0;;28446:23;;;;;;;;:11;:23;;;;;;;;;28442:60;;28480:14;:12;:14::i;:::-;28526:1;28514:9;:7;:9::i;:::-;:13;28510:363;;;28557:11;28542;:26;;;;;;;;;28538:328;;;28581:21;28592:9;:7;:9::i;28581:21::-;;28538:328;;;28637:14;28622:11;:29;;;;;;;;;28618:248;;;28664:24;28678:9;:7;:9::i;28664:24::-;28618:248;;;28723:15;28708:11;:30;;;;;;;;;28704:162;;;28751:25;28766:9;:7;:9::i;28704:162::-;28811:11;28796;:26;;;;;;;;;28792:74;;;28835:21;28846:9;:7;:9::i;28835:21::-;28881:8;:22;;28892:11;;28881:8;-1:-1:-1;;28881:22:0;;28892:11;28881:22;;;;;;;;;;;;;28366:543;:::o;14837:23::-;;;-1:-1:-1;;;;;14837:23:0;;:::o;29534:141::-;29602:7;;29594:44;;-1:-1:-1;;;29594:44:0;;29641:1;;-1:-1:-1;;;;;29602:7:0;;29594:21;;:44;;29624:4;;29631:6;;29594:44;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29594:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29594:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29594:44:0;;;;;;;;;:48;29586:83;;;;-1:-1:-1;;;29586:83:0;;;;;;;;14374:19;;;-1:-1:-1;;;;;14374:19:0;;:::o;1893:87::-;1966:6;;-1:-1:-1;;;;;1966:6:0;1893:87;:::o;14427:19::-;;;-1:-1:-1;;;;;14427:19:0;;:::o;2098:94::-;2178:6;;2138:4;;-1:-1:-1;;;;;2178:6:0;2162:12;:10;:12::i;:::-;-1:-1:-1;;;;;2162:22:0;;2155:29;;2098:94;:::o;6525:87::-;6597:7;6590:14;;;;;;;;-1:-1:-1;;6590:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6564:13;;6590:14;;6597:7;;6590:14;;6597:7;6590:14;;;;;;;;;;;;;;;;;;;;;;;;24086:279;24152:8;;24133:5;;24126:45;;-1:-1:-1;;;;;24133:5:0;;;;24152:8;-1:-1:-1;;24126:45:0;:25;:45;:::i;:::-;24232:4;;24213:5;;24206:41;;-1:-1:-1;;;;;24213:5:0;;;;24232:4;-1:-1:-1;;24206:41:0;:25;:41;:::i;:::-;24256:50;24282:13;:11;:13::i;:::-;24263:5;;-1:-1:-1;;;;;24263:5:0;;-1:-1:-1;;24256:50:0;:25;:50;:::i;:::-;24341:7;;24322:5;;24315:44;;-1:-1:-1;;;;;24322:5:0;;;;24341:7;-1:-1:-1;;24315:44:0;:25;:44;:::i;:::-;24086:279::o;21953:706::-;22081:3;;22096:5;;22067:35;;-1:-1:-1;;;22067:35:0;;21995:6;;;;;;;;;;-1:-1:-1;;;;;22081:3:0;;;;22067:28;;:35;;22096:5;;22067:35;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22067:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22067:35:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;22067:35:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;22067:35:0;;;;;;;;;22010:92;;-1:-1:-1;22010:92:0;;-1:-1:-1;22010:92:0;-1:-1:-1;22010:92:0;-1:-1:-1;22109:11:0;;-1:-1:-1;22135:10:0;;22131:43;;-1:-1:-1;22162:4:0;22131:43;22191:3;22184:4;:10;22180:43;;;-1:-1:-1;22211:4:0;22180:43;22240:3;22233:4;:10;22229:43;;;-1:-1:-1;22260:4:0;22229:43;22289:3;22282:4;:10;22278:43;;;-1:-1:-1;22309:4:0;22278:43;22329:18;22372:11;;;22368:261;;;-1:-1:-1;22408:15:0;22368:261;;;22448:4;22441:3;:11;22437:192;;;-1:-1:-1;22477:14:0;22437:192;;;22516:4;22509:3;:11;22505:124;;;-1:-1:-1;22545:11:0;22505:124;;;22581:4;22574:3;:11;22570:59;;;-1:-1:-1;22610:11:0;22570:59;22642:11;-1:-1:-1;;;;;;21953:706:0;:::o;4140:261::-;4225:4;4242:129;4251:12;:10;:12::i;:::-;4265:7;4274:96;4313:15;4274:96;;;;;;;;;;;;;;;;;:11;:25;4286:12;:10;:12::i;:::-;-1:-1:-1;;;;;4274:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;4274:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;24778:248::-;24833:7;24882:9;24894:17;:15;:17::i;:::-;24882:29;-1:-1:-1;24922:5:0;;24918:88;;24942:56;24993:4;24942:46;24957:8;;;;;;;;;-1:-1:-1;;;;;24957:8:0;-1:-1:-1;;;;;24948:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24948:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24948:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24948:39:0;;;;;;;;;24942:1;;:46;:5;:46;:::i;3152:158::-;3221:4;3238:42;3248:12;:10;:12::i;:::-;3262:9;3273:6;3238:9;:42::i;16429:137::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;16516:44;;-1:-1:-1;;;16516:44:0;;-1:-1:-1;;;;;16516:23:0;;;;;:44;;16540:10;;16552:7;;16516:44;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16516:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16516:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16516:44:0;;;;;;;;;;16429:137;;:::o;24371:107::-;24441:5;;24434:38;;-1:-1:-1;;;24434:38:0;;24411:7;;-1:-1:-1;;;;;24441:5:0;;24434:23;;:38;;24466:4;;24434:38;;;;18929:662;6881:13;:18;;6898:1;6881:18;;;;;19019:11;19011:54;;;;-1:-1:-1;;;19011:54:0;;;;;;;;;19081:23;:21;:23::i;:::-;19074:4;:30;19122:5;;19115:66;;-1:-1:-1;;;;;19122:5:0;19146:10;19166:4;19173:7;19115:66;:30;:66;:::i;:::-;19226:10;19207:30;;;;:18;:30;;;;;19240:12;19207:45;;19347:4;;19343:150;;-1:-1:-1;19396:4:0;:14;;;19378:7;19343:150;;;19446:37;19478:4;;19447:25;19459:12;;19447:7;:11;;:25;;;;:::i;19446:37::-;19437:46;;19343:150;19508:23;:21;:23::i;:::-;19501:4;:30;19540:25;19546:10;19558:6;19540:5;:25::i;:::-;19574:11;:9;:11::i;16315:110::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;16389:13;:30;;-1:-1:-1;;;;;;16389:30:0;-1:-1:-1;;;;;16389:30:0;;;;;;;;;;16315:110::o;25357:115::-;25431:9;;25424:42;;-1:-1:-1;;;25424:42:0;;25401:7;;-1:-1:-1;;;;;25431:9:0;;25424:27;;:42;;25460:4;;25424:42;;;;14451:21;;;;:::o;31444:1154::-;6881:13;:18;;6898:1;6881:18;;;;;31533:11;31525:55;;;;-1:-1:-1;;;31525:55:0;;;;;;;;;31591:16;31610:21;31620:10;31610:9;:21::i;:::-;31591:40;;31659:8;31648:7;:19;;31640:52;;;;-1:-1:-1;;;31640:52:0;;;;;;;;;31755:22;:20;:22::i;:::-;31748:4;:29;;;31872:12;;31836:9;;31848:37;;31872:12;31849:17;;31858:7;31849:17;:8;:17;:::i;31848:37::-;31922:67;;;;;;;;;;;;;;;;;;;;31932:10;-1:-1:-1;31922:21:0;;;;;;;;;;;;31836:49;;-1:-1:-1;31922:67:0;;:21;31948:7;;31922:67;:25;:67;:::i;:::-;31908:10;31898:9;:21;;;;;;;;;;:91;32013:12;;:25;;32030:7;32013:25;:16;:25;:::i;:::-;31998:12;:40;32054:41;;32083:1;;32063:10;;-1:-1:-1;;;;;;;;;;;32054:41:0;;;32087:7;;32054:41;;;;;;;;;;32153:5;;32146:38;;-1:-1:-1;;;32146:38:0;;32134:9;;-1:-1:-1;;;;;32153:5:0;;32146:23;;:38;;32178:4;;32146:38;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32146:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32146:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;32146:38:0;;;;;;;;;32214:8;;32134:50;;-1:-1:-1;32214:8:0;;32235:5;;;32231:189;;;32267:11;:9;:11::i;:::-;32308:8;;32253:25;;-1:-1:-1;32308:8:0;;32293:23;;;;;;;;:11;:23;;;;;;;;;32289:122;;32331:14;:12;:14::i;:::-;32289:122;;;32376:23;32390:8;:1;32396;32390:8;:5;:8;:::i;32376:23::-;32437:5;;32430:41;;-1:-1:-1;;;;;32437:5:0;32457:10;32469:1;32430:41;:26;:41;:::i;:::-;32501:8;;;;32486:23;;;;;;;;:11;:23;;;;;;;;;32482:73;;32522:23;32533:11;32522:10;:23::i;:::-;32570:22;:20;:22::i;:::-;32563:4;:29;-1:-1:-1;;6993:13:0;;6977:29;;;-1:-1:-1;6969:73:0;;-1:-1:-1;6969:73:0;;;-1:-1:-1;;;6969:73:0;;;;;;;;3316:134;-1:-1:-1;;;;;3415:18:0;;;3388:7;3415:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3316:134::o;29679:131::-;29749:8;;29740:31;;-1:-1:-1;;;29740:31:0;;-1:-1:-1;;;;;29749:8:0;;;;29740:23;;:31;;29764:6;;29740:31;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29740:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29740:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29740:31:0;;;;;;;;;:36;29732:72;;;;-1:-1:-1;;;29732:72:0;;;;;;;;14969:41;;;;:::o;16672:109::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;16747:18;:28;16672:109::o;14919:45::-;14960:4;14919:45;:::o;14865:49::-;;;;:::o;2344:117::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;2425:28;2444:8;2425:18;:28::i;25030:203::-;25084:7;25100:9;25112:16;:14;:16::i;:::-;25100:28;-1:-1:-1;25139:5:0;;25135:78;;25167:7;;25159:46;;-1:-1:-1;;;25159:46:0;;-1:-1:-1;;;;;25167:7:0;;;;25159:31;;:46;;25199:4;;25159:46;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25159:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25159:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25159:46:0;;;;;;;;14319:23;;;-1:-1:-1;;;;;14319:23:0;;:::o;23828:120::-;23920:4;;23891:51;;;-1:-1:-1;;;23891:51:0;;;;23868:7;;-1:-1:-1;;;;;23920:4:0;;23891:49;;:51;;;;;;;;;;;;;;23920:4;23891:51;;;5:2:-1;;;;30:1;27;20:12;5:2;23891:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23891:51:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23891:51:0;;;;;;;;23952:128;24048:4;;24019:55;;;-1:-1:-1;;;24019:55:0;;;;23996:7;;-1:-1:-1;;;;;24048:4:0;;24019:53;;:55;;;;;;;;;;;;;;24048:4;24019:55;;;5:2:-1;;;;30:1;27;20:12;14294:20:0;;;-1:-1:-1;;;;;14294:20:0;;:::o;1265:98::-;1345:10;1265:98;:::o;5552:338::-;-1:-1:-1;;;;;5646:19:0;;5638:68;;;;-1:-1:-1;;;5638:68:0;;;;;;;;;-1:-1:-1;;;;;5725:21:0;;5717:68;;;;-1:-1:-1;;;5717:68:0;;;;;;;;;-1:-1:-1;;;;;5798:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;5850:32;;;;;5828:6;;5850:32;;;;;;;;;;5552:338;;;:::o;4407:471::-;-1:-1:-1;;;;;4505:20:0;;4497:70;;;;-1:-1:-1;;;4497:70:0;;;;;;;;;-1:-1:-1;;;;;4586:23:0;;4578:71;;;;-1:-1:-1;;;4578:71:0;;;;;;;;;4682;4704:6;4682:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4682:17:0;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;4662:17:0;;;:9;:17;;;;;;;;;;;:91;;;;4787:20;;;;;;;:32;;4812:6;4787:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;4764:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;4835:35;;;;;;-1:-1:-1;;;;;;;;;;;4835:35:0;;;4863:6;;4835:35;;7410:192;7496:7;7532:12;7524:6;;;;7516:29;;;;-1:-1:-1;;;7516:29:0;;;;;;;;;;-1:-1:-1;;;7568:5:0;;;7410:192::o;9765:204::-;9892:68;;9866:95;;9885:5;;-1:-1:-1;;;9915:27:0;9892:68;;9944:4;;9950:2;;9954:5;;9892:68;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;9892:68:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;9892:68:0;;;179:29:-1;;;;160:49;;;9866:18:0;:95::i;:::-;9765:204;;;;:::o;7608:250::-;7666:7;7690:6;7686:47;;-1:-1:-1;7720:1:0;7713:8;;7686:47;7757:5;;;7761:1;7757;:5;:1;7781:5;;;;;:10;7773:56;;;;-1:-1:-1;;;7773:56:0;;;;;;;;7864:132;7922:7;7949:39;7953:1;7956;7949:39;;;;;;;;;;;;;;;;;:3;:39::i;4884:308::-;-1:-1:-1;;;;;4960:21:0;;4952:65;;;;-1:-1:-1;;;4952:65:0;;;;;;;;;5045:12;;:24;;5062:6;5045:24;:16;:24;:::i;:::-;5030:12;:39;-1:-1:-1;;;;;5101:18:0;;:9;:18;;;;;;;;;;;:30;;5124:6;5101:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;5080:18:0;;:9;:18;;;;;;;;;;;:51;;;;5147:37;;5080:18;;:9;-1:-1:-1;;;;;;;;;;;5147:37:0;;;5177:6;;5147:37;;;;;;;;;;4884:308;;:::o;7268:136::-;7326:7;7353:43;7357:1;7360;7353:43;;;;;;;;;;;;;;;;;:3;:43::i;27859:501::-;27931:15;27919:8;;;;:27;;;;;;;;;27915:80;;;27957:30;27979:7;27957:21;:30::i;:::-;28017:11;28005:8;;;;:23;;;;;;;;;28001:132;;;28064:7;28047:13;:11;:13::i;:::-;:24;;28039:55;;;;-1:-1:-1;;;28039:55:0;;;;;;;;;28103:22;28117:7;28103:13;:22::i;:::-;28155:11;28143:8;;;;:23;;;;;;;;;28139:132;;;28202:7;28185:13;:11;:13::i;:::-;:24;;28177:55;;;;-1:-1:-1;;;28177:55:0;;;;;;;;;28241:22;28255:7;28241:13;:22::i;:::-;28293:14;28281:8;;;;:26;;;;;;;;;28277:78;;;28318:29;28339:7;28318:20;:29::i;17582:854::-;17678:13;;17660:4;;17635:7;;17653:42;;-1:-1:-1;;;;;17660:4:0;;;;17678:13;17635:7;17653:42;:24;:42;:::i;:::-;17729:13;;17711:4;;17704:48;;-1:-1:-1;;;;;17711:4:0;;;;17729:13;17744:7;17704:48;:24;:48;:::i;:::-;17785:16;;;17799:1;17785:16;;;17761:21;17785:16;;;;;17761:21;17785:16;;;;;105:10:-1;17785:16:0;88:34:-1;-1:-1;;17820:4:0;;17810:7;;;;-1:-1:-1;;;;;;17820:4:0;;17810:7;;-1:-1:-1;17820:4:0;;17810:7;;;;-1:-1:-1;;;;;17810:14:0;;;:7;;;;;;;;;:14;17843:4;;17833:7;;17843:4;;;17833;;17843;;17833:7;;;;;;-1:-1:-1;;;;;17833:14:0;;;:7;;;;;;;;;:14;18314:13;;18281:21;;18314:13;18305:45;18351:7;18314:13;18369:4;18383;18390:13;:3;18398:4;18390:13;:7;:13;:::i;:::-;18305:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18305:99:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18305:99:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;18305:99:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;18305:99:0;;;;;;;;;18281:123;;18420:7;18428:1;18420:10;;;;;;;;;;;;;;18413:17;;;;17582:854;;;:::o;18440:425::-;18535:16;;;18549:1;18535:16;;;18511:21;18535:16;;;;;18495:7;;18511:21;;18535:16;18549:1;18535:16;;;;;105:10:-1;18535:16:0;88:34:-1;-1:-1;;18568:4:0;;18558:7;;;;-1:-1:-1;;;;;;18568:4:0;;18558:7;;-1:-1:-1;18568:4:0;;18558:7;;;;-1:-1:-1;;;;;18558:14:0;;;:7;;;;;;;;;:14;18597:9;;18579:7;;18597:9;;;18579:4;;18597:9;;18579:7;;;;;;-1:-1:-1;;;;;18579:28:0;;;:7;;;;;;;;;:28;18739:13;;18706:21;;18739:13;18730:45;18782:10;18739:13;18803:4;18739:13;18821;:3;18829:4;18821:13;:7;:13;:::i;:::-;18730:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18730:105:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18730:105:0;;;;;;;39:16:-1;36:1;17:17;2:54;101:4;18730:105:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;18730:105:0;;;;;;;;7081:181;7139:7;7171:5;;;7195:6;;;;7187:46;;;;-1:-1:-1;;;7187:46:0;;;;;;;;26606:421;26646:14;26663:18;:16;:18::i;:::-;26646:35;-1:-1:-1;26692:10:0;;26688:58;;26713:25;26731:6;26713:17;:25::i;:::-;26761:14;:12;:14::i;:::-;26752:23;-1:-1:-1;26786:10:0;;26782:54;;26807:21;26821:6;26807:13;:21::i;:::-;26851:17;:15;:17::i;:::-;26842:26;-1:-1:-1;26879:10:0;;26875:57;;26900:24;26917:6;26900:16;:24::i;:::-;26947:14;:12;:14::i;:::-;26938:23;-1:-1:-1;26972:10:0;;26968:54;;26993:21;27007:6;26993:13;:21::i;9977:347::-;10073:10;;;10072:62;;-1:-1:-1;10089:39:0;;-1:-1:-1;;;10089:39:0;;-1:-1:-1;;;;;10089:15:0;;;;;:39;;10113:4;;10120:7;;10089:39;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10089:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10089:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;10089:39:0;;;;;;;;;:44;10072:62;10064:152;;;;-1:-1:-1;;;10064:152:0;;;;;;;;;10253:62;;10227:89;;10246:5;;-1:-1:-1;;;10276:22:0;10253:62;;10300:7;;10309:5;;10253:62;;;;9581:176;9690:58;;9664:85;;9683:5;;-1:-1:-1;;;9713:23:0;9690:58;;9738:2;;9742:5;;9690:58;;;;2467:237;-1:-1:-1;;;;;2549:22:0;;2541:73;;;;-1:-1:-1;;;2541:73:0;;;;;;;;;2651:6;;2630:38;;-1:-1:-1;;;;;2630:38:0;;;;2651:6;;2630:38;;2651:6;;2630:38;2679:6;:17;;-1:-1:-1;;;;;;2679:17:0;-1:-1:-1;;;;;2679:17:0;;;;;;;;;;2467:237::o;10961:598::-;11049:27;11057:5;-1:-1:-1;;;;;11049:25:0;;:27::i;:::-;11041:71;;;;-1:-1:-1;;;11041:71:0;;;;;;;;;11186:12;11200:23;11235:5;-1:-1:-1;;;;;11227:19:0;11247:4;11227:25;;;;;;;;;;;;;;;;;;;;;;;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;;11185:67:0;;;;11271:7;11263:52;;;;-1:-1:-1;;;11263:52:0;;;;;;;;;11332:17;;:21;11328:224;;11474:10;11463:30;;;;;;;;;;;;;;11455:85;;;;-1:-1:-1;;;11455:85:0;;;;;;;;8002:258;8088:7;8190:12;8183:5;8175:28;;;;-1:-1:-1;;;8175:28:0;;;;;;;;;;;8214:9;8230:1;8226;:5;;;;;;;8002:258;-1:-1:-1;;;;;8002:258:0:o;27033:328::-;27097:9;27109:17;:15;:17::i;:::-;27097:29;;27133:10;27146:24;:22;:24::i;:::-;27133:37;;27191:7;27185:2;:13;;27177:44;;;;-1:-1:-1;;;27177:44:0;;;;;;;;;27275:14;27292:31;27321:1;27292:24;27313:2;27293:14;:1;27299:7;27293:14;:5;:14;:::i;27292:31::-;27275:48;;27330:25;27348:6;27330:17;:25::i;29814:92::-;29875:9;;29868:32;;-1:-1:-1;;;29868:32:0;;-1:-1:-1;;;;;29875:9:0;;;;29868:24;;:32;;29893:6;;29868:32;;;;23250:572;23329:13;;;23340:1;23329:13;;;;;;;;;23307:19;;23329:13;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23307:35;;23362:22;;;;;;;;23375:4;-1:-1:-1;;;;;23362:22:0;;;;;23382:1;23362:22;;;23351:5;23357:1;23351:8;;;;;;;;;;;;;:33;;;;23395:22;;:::i;:::-;23420:71;;;;;;;;;-1:-1:-1;23420:71:0;;;;;;;;;;;23462:20;23420:71;;;;;;;23395:96;-1:-1:-1;23500:21:0;;:::i;:::-;23547:19;23530:3;23547:19;23530:36;;-1:-1:-1;23591:1:0;23575:13;;;:17;23601:10;;;;:16;;;23648:6;;23626:19;;;;:28;;;;23690:4;23663:16;;;:32;23733:19;;23750:1;23733:19;;;;;;;;;23626;;23733;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23706:46;;23771:3;23761:4;23766:1;23761:7;;;;;;;;;;;;;;;;;:13;23790:4;;23785:31;;-1:-1:-1;;;23785:31:0;;-1:-1:-1;;;;;23790:4:0;;;;23785:18;;:31;;23804:5;;23811:4;;23785:31;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23785:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23785:31:0;;;;23250:572;;;;;:::o;27393:460::-;27510:9;27522:16;:14;:16::i;:::-;27510:28;;27604:10;27617:23;:21;:23::i;:::-;27604:36;;27684:7;27678:2;:13;;27670:44;;;;-1:-1:-1;;;27670:44:0;;;;;;;;;27768:14;27785:31;27814:1;27785:24;27806:2;27786:14;:1;27792:7;27786:14;:5;:14;:::i;27785:31::-;27768:48;;27823:24;27840:6;27823:16;:24::i;30062:140::-;30137:8;;30128:33;;-1:-1:-1;;;30128:33:0;;-1:-1:-1;;;;;30137:8:0;;;;30128:25;;:33;;30154:6;;30128:33;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30128:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30128:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30128:33:0;;;;;;;;;:38;30120:76;;;;-1:-1:-1;;;30120:76:0;;;;;;;;29910:148;29983:7;;29975:44;;-1:-1:-1;;;29975:44:0;;30022:1;;-1:-1:-1;;;;;29983:7:0;;29975:21;;:44;;30005:4;;30012:6;;29975:44;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29975:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29975:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29975:44:0;;;;;;;;;:48;29967:85;;;;-1:-1:-1;;;29967:85:0;;;;;;;;8598:374;8658:4;8881:20;;8724:66;8921:15;;;;;:42;;;8952:11;8940:8;:23;;8921:42;8913:51;8598:374;-1:-1:-1;;;;8598:374:0:o;14097:18504::-;;;;;;;;;;-1:-1:-1;14097:18504:0;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;14097:18504:0;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;14097:18504:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14097:18504:0;;;;;;;;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:134;220:13;;238:33;220:13;238:33;;454:722;;582:3;575:4;567:6;563:17;559:27;549:2;;600:1;597;590:12;549:2;630:6;624:13;652:80;667:64;724:6;667:64;;;652:80;;;643:89;;749:5;774:6;767:5;760:21;804:4;796:6;792:17;782:27;;826:4;821:3;817:14;810:21;;879:6;926:3;918:4;910:6;906:17;901:3;897:27;894:36;891:2;;;943:1;940;933:12;891:2;968:1;953:217;978:6;975:1;972:13;953:217;;;1036:3;1058:48;1102:3;1090:10;1058:48;;;1046:61;;-1:-1;1130:4;1121:14;;;;1149;;;;;1000:1;993:9;953:217;;;957:14;542:634;;;;;;;;1184:128;1259:13;;1277:30;1259:13;1277:30;;1320:444;;1433:3;1426:4;1418:6;1414:17;1410:27;1400:2;;1451:1;1448;1441:12;1400:2;1481:6;1475:13;1503:65;1518:49;1560:6;1518:49;;1503:65;1494:74;;1588:6;1581:5;1574:21;1624:4;1616:6;1612:17;1657:4;1650:5;1646:16;1692:3;1683:6;1678:3;1674:16;1671:25;1668:2;;;1709:1;1706;1699:12;1668:2;1719:39;1751:6;1746:3;1741;1719:39;;;1393:371;;;;;;;;1797:494;;1918:4;1906:9;1901:3;1897:19;1893:30;1890:2;;;1936:1;1933;1926:12;1890:2;1954:20;1969:4;1954:20;;;1945:29;-1:-1;2024:1;2056:57;2109:3;2089:9;2056:57;;;2031:83;;-1:-1;2176:2;2209:60;2265:3;2241:22;;;2209:60;;;2202:4;2195:5;2191:16;2184:86;2135:146;1884:407;;;;;2298:130;2365:20;;2390:33;2365:20;2390:33;;2435:134;2513:13;;2531:33;2513:13;2531:33;;2576:241;;2680:2;2668:9;2659:7;2655:23;2651:32;2648:2;;;2696:1;2693;2686:12;2648:2;2731:1;2748:53;2793:7;2773:9;2748:53;;2824:263;;2939:2;2927:9;2918:7;2914:23;2910:32;2907:2;;;2955:1;2952;2945:12;2907:2;2990:1;3007:64;3063:7;3043:9;3007:64;;3358:366;;;3479:2;3467:9;3458:7;3454:23;3450:32;3447:2;;;3495:1;3492;3485:12;3447:2;3530:1;3547:53;3592:7;3572:9;3547:53;;;3537:63;;3509:97;3637:2;3655:53;3700:7;3691:6;3680:9;3676:22;3655:53;;;3645:63;;3616:98;3441:283;;;;;;3731:491;;;;3869:2;3857:9;3848:7;3844:23;3840:32;3837:2;;;3885:1;3882;3875:12;3837:2;3920:1;3937:53;3982:7;3962:9;3937:53;;;3927:63;;3899:97;4027:2;4045:53;4090:7;4081:6;4070:9;4066:22;4045:53;;;4035:63;;4006:98;4135:2;4153:53;4198:7;4189:6;4178:9;4174:22;4153:53;;;4143:63;;4114:98;3831:391;;;;;;4229:366;;;4350:2;4338:9;4329:7;4325:23;4321:32;4318:2;;;4366:1;4363;4356:12;4318:2;4401:1;4418:53;4463:7;4443:9;4418:53;;;4408:63;;4380:97;4508:2;4526:53;4571:7;4562:6;4551:9;4547:22;4526:53;;4602:392;;4742:2;4730:9;4721:7;4717:23;4713:32;4710:2;;;4758:1;4755;4748:12;4710:2;4793:24;;4837:18;4826:30;;4823:2;;;4869:1;4866;4859:12;4823:2;4889:89;4970:7;4961:6;4950:9;4946:22;4889:89;;5001:257;;5113:2;5101:9;5092:7;5088:23;5084:32;5081:2;;;5129:1;5126;5119:12;5081:2;5164:1;5181:61;5234:7;5214:9;5181:61;;5265:908;;;;;;5458:3;5446:9;5437:7;5433:23;5429:33;5426:2;;;5475:1;5472;5465:12;5426:2;5510:24;;5554:18;5543:30;;5540:2;;;5586:1;5583;5576:12;5540:2;5606:74;5672:7;5663:6;5652:9;5648:22;5606:74;;;5596:84;;5489:197;5717:2;5735:64;5791:7;5782:6;5771:9;5767:22;5735:64;;;5725:74;;5696:109;5836:2;5854:64;5910:7;5901:6;5890:9;5886:22;5854:64;;;5844:74;;5815:109;5955:2;5973:64;6029:7;6020:6;6009:9;6005:22;5973:64;;;5963:74;;5934:109;6074:3;6093:64;6149:7;6140:6;6129:9;6125:22;6093:64;;;6083:74;;6053:110;5420:753;;;;;;;;;6180:305;;6316:2;6304:9;6295:7;6291:23;6287:32;6284:2;;;6332:1;6329;6322:12;6284:2;6367:1;6384:85;6461:7;6441:9;6384:85;;6492:241;;6596:2;6584:9;6575:7;6571:23;6567:32;6564:2;;;6612:1;6609;6602:12;6564:2;6647:1;6664:53;6709:7;6689:9;6664:53;;6740:263;;6855:2;6843:9;6834:7;6830:23;6826:32;6823:2;;;6871:1;6868;6861:12;6823:2;6906:1;6923:64;6979:7;6959:9;6923:64;;7011:173;;7098:46;7140:3;7132:6;7098:46;;;-1:-1;;7173:4;7164:14;;7091:93;7193:253;;7342:98;7436:3;7428:6;7342:98;;7455:249;;7578:86;7660:3;7652:6;7578:86;;;-1:-1;;7693:4;7684:14;;7571:133;7712:142;7803:45;7842:5;7803:45;;;7798:3;7791:58;7785:69;;;7861:137;7960:32;7986:5;7960:32;;8266:690;;8411:54;8459:5;8411:54;;;8478:86;8557:6;8552:3;8478:86;;;8471:93;;8585:56;8635:5;8585:56;;;8661:7;8689:1;8674:260;8699:6;8696:1;8693:13;8674:260;;;8766:6;8760:13;8787:63;8846:3;8831:13;8787:63;;;8780:70;;8867:60;8920:6;8867:60;;;8857:70;-1:-1;;8721:1;8714:9;8674:260;;;-1:-1;8947:3;;8390:566;-1:-1;;;;;8390:566;9031:1040;;9224:78;9296:5;9224:78;;;9315:110;9418:6;9413:3;9315:110;;;9308:117;;9448:3;9490:4;9482:6;9478:17;9473:3;9469:27;9517:80;9591:5;9517:80;;;9617:7;9645:1;9630:402;9655:6;9652:1;9649:13;9630:402;;;9717:9;9711:4;9707:20;9702:3;9695:33;9762:6;9756:13;9784:112;9891:4;9876:13;9784:112;;;9776:120;;9913:84;9990:6;9913:84;;;10020:4;10011:14;;;;;9903:94;-1:-1;;9677:1;9670:9;9630:402;;;-1:-1;10045:4;;9203:868;-1:-1;;;;;;;9203:868;10134:834;;10315:72;10381:5;10315:72;;;10400:104;10497:6;10492:3;10400:104;;;10393:111;;10525:74;10593:5;10525:74;;;10619:7;10647:1;10632:314;10657:6;10654:1;10651:13;10632:314;;;10724:6;10718:13;10745:99;10840:3;10825:13;10745:99;;;10738:106;;10861:78;10932:6;10861:78;;;10851:88;-1:-1;;10679:1;10672:9;10632:314;;10976:94;11043:21;11058:5;11043:21;;11188:356;;11316:38;11348:5;11316:38;;;11366:88;11447:6;11442:3;11366:88;;;11359:95;;11459:52;11504:6;11499:3;11492:4;11485:5;11481:16;11459:52;;;11523:16;;;;;11296:248;-1:-1;;11296:248;11551:315;;11647:34;11675:5;11647:34;;;11693:60;11746:6;11741:3;11693:60;;;11686:67;;11758:52;11803:6;11798:3;11791:4;11784:5;11780:16;11758:52;;;11831:29;11853:6;11831:29;;;11822:39;;;;11627:239;-1:-1;;;11627:239;11873:154;11970:51;12015:5;11970:51;;12034:142;12120:50;12164:5;12120:50;;12183:156;12276:57;12327:5;12276:57;;12503:144;12595:46;12635:5;12595:46;;12654:140;12744:44;12782:5;12744:44;;13156:372;;13316:67;13380:2;13375:3;13316:67;;;13416:34;13396:55;;-1:-1;;;13480:2;13471:12;;13464:27;13519:2;13510:12;;13302:226;-1:-1;;13302:226;13537:325;;13697:67;13761:2;13756:3;13697:67;;;13797:27;13777:48;;13853:2;13844:12;;13683:179;-1:-1;;13683:179;13871:375;;14031:67;14095:2;14090:3;14031:67;;;14131:34;14111:55;;-1:-1;;;14195:2;14186:12;;14179:30;14237:2;14228:12;;14017:229;-1:-1;;14017:229;14255:371;;14415:67;14479:2;14474:3;14415:67;;;14515:34;14495:55;;-1:-1;;;14579:2;14570:12;;14563:26;14617:2;14608:12;;14401:225;-1:-1;;14401:225;14635:323;;14795:67;14859:2;14854:3;14795:67;;;14895:25;14875:46;;14949:2;14940:12;;14781:177;-1:-1;;14781:177;14967:327;;15127:67;15191:2;15186:3;15127:67;;;15227:29;15207:50;;15285:2;15276:12;;15113:181;-1:-1;;15113:181;15303:332;;15463:67;15527:2;15522:3;15463:67;;;15563:34;15543:55;;15626:2;15617:12;;15449:186;-1:-1;;15449:186;15644:370;;15804:67;15868:2;15863:3;15804:67;;;15904:34;15884:55;;-1:-1;;;15968:2;15959:12;;15952:25;16005:2;15996:12;;15790:224;-1:-1;;15790:224;16023:324;;16183:67;16247:2;16242:3;16183:67;;;16283:26;16263:47;;16338:2;16329:12;;16169:178;-1:-1;;16169:178;16356:332;;16516:67;16580:2;16575:3;16516:67;;;16616:34;16596:55;;16679:2;16670:12;;16502:186;-1:-1;;16502:186;16697:320;;16857:67;16921:2;16916:3;16857:67;;;-1:-1;;;16937:43;;17008:2;16999:12;;16843:174;-1:-1;;16843:174;17026:331;;17186:67;17250:2;17245:3;17186:67;;;17286:33;17266:54;;17348:2;17339:12;;17172:185;-1:-1;;17172:185;17366:374;;17526:67;17590:2;17585:3;17526:67;;;17626:34;17606:55;;-1:-1;;;17690:2;17681:12;;17674:29;17731:2;17722:12;;17512:228;-1:-1;;17512:228;17749:318;;17909:67;17973:2;17968:3;17909:67;;;-1:-1;;;17989:41;;18058:2;18049:12;;17895:172;-1:-1;;17895:172;18076:373;;18236:67;18300:2;18295:3;18236:67;;;18336:34;18316:55;;-1:-1;;;18400:2;18391:12;;18384:28;18440:2;18431:12;;18222:227;-1:-1;;18222:227;18458:330;;18618:67;18682:2;18677:3;18618:67;;;18718:32;18698:53;;18779:2;18770:12;;18604:184;-1:-1;;18604:184;18797:322;;18957:67;19021:2;19016:3;18957:67;;;-1:-1;;;19037:45;;19110:2;19101:12;;18943:176;-1:-1;;18943:176;19128:379;;19288:67;19352:2;19347:3;19288:67;;;19388:34;19368:55;;-1:-1;;;19452:2;19443:12;;19436:34;19498:2;19489:12;;19274:233;-1:-1;;19274:233;19516:331;;19676:67;19740:2;19735:3;19676:67;;;19776:33;19756:54;;19838:2;19829:12;;19662:185;-1:-1;;19662:185;19856:391;;20016:67;20080:2;20075:3;20016:67;;;20116:34;20096:55;;-1:-1;;;20180:2;20171:12;;20164:46;20238:2;20229:12;;20002:245;-1:-1;;20002:245;20256:331;;20416:67;20480:2;20475:3;20416:67;;;20516:33;20496:54;;20578:2;20569:12;;20402:185;-1:-1;;20402:185;20596:331;;20756:67;20820:2;20815:3;20756:67;;;20856:33;20836:54;;20918:2;20909:12;;20742:185;-1:-1;;20742:185;20996:1611;21213:23;;20996:1611;;21139:6;21130:16;;;21242:76;21134:3;21213:23;21242:76;;;21161:163;21402:4;21395:5;21391:16;21385:23;21414:63;21471:4;21466:3;21462:14;21448:12;21414:63;;;21334:149;21558:4;21551:5;21547:16;21541:23;21570:117;21681:4;21676:3;21672:14;21658:12;21570:117;;;21493:200;21777:4;21770:5;21766:16;21760:23;21789:63;21846:4;21841:3;21837:14;21823:12;21789:63;;;21703:155;21944:4;21937:5;21933:16;21927:23;21956:63;22013:4;22008:3;22004:14;21990:12;21956:63;;;21868:157;22106:4;22099:5;22095:16;22089:23;22118:65;22175:6;22170:3;22166:16;22152:12;22118:65;;;22035:154;22272:4;22265:5;22261:16;22255:23;22284:65;22341:6;22336:3;22332:16;22318:12;22284:65;;;22199:156;22428:4;22421:5;22417:16;22411:23;22482:3;22476:4;22472:14;22463:6;22458:3;22454:16;22447:40;22502:67;22564:4;22550:12;22502:67;;;22494:75;21112:1495;-1:-1;;;;;21112:1495;22677:817;22880:23;;22814:4;22805:14;;;22909:57;22809:3;22880:23;22909:57;;;22834:138;23053:4;23046:5;23042:16;23036:23;23065:83;23142:4;23137:3;23133:14;23119:12;23065:83;;;22982:172;23226:4;23219:5;23215:16;23209:23;23238:80;23312:4;23307:3;23303:14;23289:12;23238:80;;;23164:160;23398:4;23391:5;23387:16;23381:23;23410:63;23467:4;23462:3;23458:14;23444:12;23410:63;;23550:459;23740:23;;23673:4;23664:14;;;23769:63;23668:3;23740:23;23769:63;;;23693:145;23913:4;23906:5;23902:16;23896:23;23925:63;23982:4;23977:3;23973:14;23959:12;24541:103;24614:24;24632:5;24614:24;;24771:107;24850:22;24866:5;24850:22;;24885:262;;25029:93;25118:3;25109:6;25029:93;;25154:213;25272:2;25257:18;;25286:71;25261:9;25330:6;25286:71;;25374:229;25500:2;25485:18;;25514:79;25489:9;25566:6;25514:79;;25862:340;26016:2;26001:18;;26030:79;26005:9;26082:6;26030:79;;;26120:72;26188:2;26177:9;26173:18;26164:6;26120:72;;26209:324;26355:2;26340:18;;26369:71;26344:9;26413:6;26369:71;;;26451:72;26519:2;26508:9;26504:18;26495:6;26451:72;;26540:435;26714:2;26699:18;;26728:71;26703:9;26772:6;26728:71;;;26810:72;26878:2;26867:9;26863:18;26854:6;26810:72;;;26893;26961:2;26950:9;26946:18;26937:6;26893:72;;26982:324;27128:2;27113:18;;27142:71;27117:9;27186:6;27142:71;;27313:449;27494:2;27479:18;;27508:71;27483:9;27552:6;27508:71;;;27590:72;27658:2;27647:9;27643:18;27634:6;27590:72;;;27673:79;27748:2;27737:9;27733:18;27724:6;27673:79;;27769:788;28099:2;28113:47;;;28084:18;;28174:144;28084:18;28304:6;28174:144;;;28166:152;;28366:9;28360:4;28356:20;28351:2;28340:9;28336:18;28329:48;28391:156;28542:4;28533:6;28391:156;;28564:201;28676:2;28661:18;;28690:65;28665:9;28728:6;28690:65;;28772:241;28904:2;28889:18;;28918:85;28893:9;28976:6;28918:85;;29020:231;29147:2;29132:18;;29161:80;29136:9;29214:6;29161:80;;29258:301;29396:2;29410:47;;;29381:18;;29471:78;29381:18;29535:6;29471:78;;29566:407;29757:2;29771:47;;;29742:18;;29832:131;29742:18;29832:131;;29980:407;30171:2;30185:47;;;30156:18;;30246:131;30156:18;30246:131;;30394:407;30585:2;30599:47;;;30570:18;;30660:131;30570:18;30660:131;;30808:407;30999:2;31013:47;;;30984:18;;31074:131;30984:18;31074:131;;31222:407;31413:2;31427:47;;;31398:18;;31488:131;31398:18;31488:131;;31636:407;31827:2;31841:47;;;31812:18;;31902:131;31812:18;31902:131;;32050:407;32241:2;32255:47;;;32226:18;;32316:131;32226:18;32316:131;;32464:407;32655:2;32669:47;;;32640:18;;32730:131;32640:18;32730:131;;32878:407;33069:2;33083:47;;;33054:18;;33144:131;33054:18;33144:131;;33292:407;33483:2;33497:47;;;33468:18;;33558:131;33468:18;33558:131;;33706:407;33897:2;33911:47;;;33882:18;;33972:131;33882:18;33972:131;;34120:407;34311:2;34325:47;;;34296:18;;34386:131;34296:18;34386:131;;34534:407;34725:2;34739:47;;;34710:18;;34800:131;34710:18;34800:131;;34948:407;35139:2;35153:47;;;35124:18;;35214:131;35124:18;35214:131;;35362:407;35553:2;35567:47;;;35538:18;;35628:131;35538:18;35628:131;;35776:407;35967:2;35981:47;;;35952:18;;36042:131;35952:18;36042:131;;36190:407;36381:2;36395:47;;;36366:18;;36456:131;36366:18;36456:131;;36604:407;36795:2;36809:47;;;36780:18;;36870:131;36780:18;36870:131;;37018:407;37209:2;37223:47;;;37194:18;;37284:131;37194:18;37284:131;;37432:407;37623:2;37637:47;;;37608:18;;37698:131;37608:18;37698:131;;37846:407;38037:2;38051:47;;;38022:18;;38112:131;38022:18;38112:131;;38260:407;38451:2;38465:47;;;38436:18;;38526:131;38436:18;38526:131;;38674:404;38860:2;38845:18;;38874:111;38849:9;38958:6;38874:111;;;38996:72;39064:2;39053:9;39049:18;39040:6;38996:72;;39085:213;39203:2;39188:18;;39217:71;39192:9;39261:6;39217:71;;39305:711;39565:3;39550:19;;39580:71;39554:9;39624:6;39580:71;;;39699:9;39693:4;39689:20;39684:2;39673:9;39669:18;39662:48;39724:108;39827:4;39818:6;39724:108;;;39716:116;;39843:80;39919:2;39908:9;39904:18;39895:6;39843:80;;;39934:72;40002:2;39991:9;39987:18;39978:6;39934:72;;40023:823;40311:3;40296:19;;40326:71;40300:9;40370:6;40326:71;;;40408:72;40476:2;40465:9;40461:18;40452:6;40408:72;;;40528:9;40522:4;40518:20;40513:2;40502:9;40498:18;40491:48;40553:108;40656:4;40647:6;40553:108;;;40545:116;;40672:80;40748:2;40737:9;40733:18;40724:6;40672:80;;;40763:73;40831:3;40820:9;40816:19;40807:6;40763:73;;;40282:564;;;;;;;;;40853:205;40967:2;40952:18;;40981:67;40956:9;41021:6;40981:67;;41065:256;41127:2;41121:9;41153:17;;;41228:18;41213:34;;41249:22;;;41210:62;41207:2;;;41285:1;41282;41275:12;41207:2;41301;41294:22;41105:216;;-1:-1;41105:216;41328:304;;41487:18;41479:6;41476:30;41473:2;;;41519:1;41516;41509:12;41473:2;-1:-1;41554:4;41542:17;;;41607:15;;41410:222;41639:322;;41783:18;41775:6;41772:30;41769:2;;;41815:1;41812;41805:12;41769:2;-1:-1;41946:4;41882;41859:17;;;;-1:-1;;41855:33;41936:15;;41706:255;41968:151;42092:4;42083:14;;42040:79;42484:137;42587:12;;42558:63;43727:178;43845:19;;;43894:4;43885:14;;43838:67;44815:91;;44877:24;44895:5;44877:24;;45019:85;45085:13;45078:21;;45061:43;45111:136;45188:5;45194:48;45188:5;45194:48;;45254:150;45338:5;45344:55;45338:5;45344:55;;45562:128;45635:5;45641:44;45635:5;45641:44;;45697:84;45769:6;45758:18;;45741:40;45788:121;-1:-1;;;;;45850:54;;45833:76;45995:81;46066:4;46055:16;;46038:38;46083:129;;46170:37;46201:5;46219:149;;46312:51;46357:5;46312:51;;46504:136;;46596:39;46629:5;46596:39;;46647:150;;46746:46;46786:5;46746:46;;46955:128;;47043:35;47072:5;47043:35;;47090:114;;47176:23;47193:5;47176:23;;47455:268;47520:1;47527:101;47541:6;47538:1;47535:13;47527:101;;;47608:11;;;47602:18;47589:11;;;47582:39;47563:2;47556:10;47527:101;;;47643:6;47640:1;47637:13;47634:2;;;-1:-1;;47708:1;47690:16;;47683:27;47504:219;47731:97;47819:2;47799:14;-1:-1;;47795:28;;47779:49;47836:106;47920:1;47913:5;47910:12;47900:2;;47926:9;47949:113;48040:1;48033:5;48030:12;48020:2;;48046:9;48186:102;48266:1;48259:5;48256:12;48246:2;;48272:9;48295:117;48364:24;48382:5;48364:24;;;48357:5;48354:35;48344:2;;48403:1;48400;48393:12;48559:111;48625:21;48640:5;48625:21;;48677:117;48746:24;48764:5;48746:24;
Swarm Source
bzzr://365639d5025e6c918a9e86ef25e2aeadb74b5fd44cb48a582673481ea1d65ba8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.