Overview
ETH Balance
72 wei
Eth Value
Less Than $0.01 (@ $2,446.17/ETH)Token Holdings
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 185 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 12656064 | 1236 days ago | IN | 0 ETH | 0.00048409 | ||||
Withdraw | 12578285 | 1248 days ago | IN | 0 ETH | 0.01497946 | ||||
Withdraw | 12544568 | 1253 days ago | IN | 0 ETH | 0.02813528 | ||||
Withdraw | 12351716 | 1283 days ago | IN | 0 ETH | 0.00298815 | ||||
Withdraw | 12307559 | 1290 days ago | IN | 0 ETH | 0.05355473 | ||||
Withdraw | 11900901 | 1353 days ago | IN | 0 ETH | 0.16233594 | ||||
Withdraw | 11897770 | 1353 days ago | IN | 0 ETH | 0.00833513 | ||||
Withdraw | 11893225 | 1354 days ago | IN | 0 ETH | 0.15417062 | ||||
Withdraw | 11773004 | 1372 days ago | IN | 0 ETH | 0.25289232 | ||||
Withdraw | 11768038 | 1373 days ago | IN | 0 ETH | 0.0109 | ||||
Withdraw | 11754317 | 1375 days ago | IN | 0 ETH | 0.006 | ||||
Deposit | 11681716 | 1386 days ago | IN | 0 ETH | 0.0422892 | ||||
Withdraw | 11678975 | 1387 days ago | IN | 0 ETH | 0.07856832 | ||||
Deposit | 11672662 | 1388 days ago | IN | 0 ETH | 0.04443264 | ||||
Withdraw | 11579428 | 1402 days ago | IN | 0 ETH | 0.01599584 | ||||
Withdraw | 11579410 | 1402 days ago | IN | 0 ETH | 0.0061 | ||||
Withdraw | 11566479 | 1404 days ago | IN | 0 ETH | 0.02207875 | ||||
Withdraw | 11566471 | 1404 days ago | IN | 0 ETH | 0.00899766 | ||||
Withdraw | 11565464 | 1404 days ago | IN | 0 ETH | 0.007 | ||||
Withdraw | 11564248 | 1404 days ago | IN | 0 ETH | 0.0012 | ||||
Withdraw | 11563367 | 1405 days ago | IN | 0 ETH | 0.0065 | ||||
Withdraw | 11557262 | 1406 days ago | IN | 0 ETH | 0.025 | ||||
Withdraw | 11557253 | 1406 days ago | IN | 0 ETH | 0.0199948 | ||||
Withdraw | 11557225 | 1406 days ago | IN | 0 ETH | 0.0129 | ||||
Withdraw | 11486447 | 1416 days ago | IN | 0 ETH | 0.04651107 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
12578285 | 1248 days ago | 0.00001334 ETH | ||||
12578285 | 1248 days ago | 0.000654 ETH | ||||
12578285 | 1248 days ago | 0.00066735 ETH | ||||
12544568 | 1253 days ago | 0.00001453 ETH | ||||
12544568 | 1253 days ago | 0.00071224 ETH | ||||
12544568 | 1253 days ago | 0.00072677 ETH | ||||
12307559 | 1290 days ago | 0.00015775 ETH | ||||
12307559 | 1290 days ago | 0.00772998 ETH | ||||
12307559 | 1290 days ago | 0.00788773 ETH | ||||
11900901 | 1353 days ago | 0.00010828 ETH | ||||
11900901 | 1353 days ago | 0.00530592 ETH | ||||
11900901 | 1353 days ago | 0.00541421 ETH | ||||
11893225 | 1354 days ago | 0.00020037 ETH | ||||
11893225 | 1354 days ago | 0.00981854 ETH | ||||
11893225 | 1354 days ago | 0.01001892 ETH | ||||
11773004 | 1372 days ago | 0.00129466 ETH | ||||
11773004 | 1372 days ago | 0.06343846 ETH | ||||
11773004 | 1372 days ago | 0.06473313 ETH | ||||
11678975 | 1387 days ago | 0.00033523 ETH | ||||
11678975 | 1387 days ago | 0.01642664 ETH | ||||
11678975 | 1387 days ago | 0.01676188 ETH | ||||
11486447 | 1416 days ago | 0.00354365 ETH | ||||
11486447 | 1416 days ago | 0.17363892 ETH | ||||
11486447 | 1416 days ago | 0.17718257 ETH | ||||
11450218 | 1422 days ago | 0.00132952 ETH |
Loading...
Loading
Contract Name:
yDAI
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 yDAI 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 aavePool; address public aaveToken; address public dydx; uint256 public dToken; address public apr; address public chai; // Add other tokens if implemented for another stablecoin address public uniswapRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address public dai = 0x6B175474E89094C44Da98b954EedeAC495271d0F; address public weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address payable public retirementYeldTreasury; IERC20 public yeldToken; uint256 public maximumTokensToBurn = 50000 * 1e18; // When you stake say 1000 DAI for a day that will be your maximum // if you stake the next time 300 DAI your maximum will stay the same // if you stake 2000 at once it will increase to 2000 DAI mapping(bytes32 => uint256) public numberOfParticipants; mapping(address => uint256) public depositBlockStarts; 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; enum Lender { NONE, DYDX, COMPOUND, AAVE, FULCRUM } Lender public provider = Lender.NONE; constructor (address _yeldToken, address payable _retirementYeldTreasury) public payable ERC20Detailed("yearn DAI", "yDAI", 18) { token = address(0x6B175474E89094C44Da98b954EedeAC495271d0F); apr = address(0xdD6d648C991f7d47454354f4Ef326b04025a48A8); dydx = address(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e); aave = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8); aavePool = address(0x3dfd23A6c5E8BbcFc9581d2E864a68feb6a076d3); fulcrum = address(0x493C57C4763932315A328269E1ADaD09653B9081); aaveToken = address(0xfC1E690f61EFd961294b3e1Ce3313fBD8aa4f85d); compound = address(0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643); chai = address(0x06AF07097C9Eeb7fD685c692751D5C66dB49c215); dToken = 3; yeldToken = IERC20(_yeldToken); retirementYeldTreasury = _retirementYeldTreasury; approveToken(); } // To receive ETH after converting it from DAI 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; } // This will work because amount is a token with 18 decimals // Take the deposit, reduce it by 1 million (by removing 6 zeroes) so you get 1 // That 1 means get 1 YELD per day (in blocks). Now multiply that 1 by 100 to get 100 YELD per day // your deposits in dai div by 1 million * by yeld to reward / 1e18 since yeldToReward is in 18 decimals to be able to provide a smaller price since // we can't go below 1 in a variable. You can't make the price 0.00001 that's why we need that 1e18 padding // For USDC and Tether gotta multiply by 1e12 since they have 6 decimals to get the proper result of YELD 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.div(oneMillion).mul(yeldToRewardPerDay).div(1e18).mul(blocksPassed).div(oneDayInBlocks); return generatedYelds; } 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(); } // Converts DAI to ETH and returns how much ETH has been received from Uniswap function daiToETH(uint256 _amount) internal returns(uint256) { IERC20(dai).safeApprove(uniswapRouter, 0); IERC20(dai).safeApprove(uniswapRouter, _amount); address[] memory path = new address[](2); path[0] = dai; path[1] = weth; // swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) // 'amounts' is an array where [0] is input DAI 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]; } // Buys YELD tokens paying in ETH on Uniswap and removes them from circulation // Returns how many YELD tokens have been burned 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]; } // 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"); 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, '#1 Total supply sub error'); emit Transfer(msg.sender, address(0), _shares); uint256 b = IERC20(token).balanceOf(address(this)); if (b < stablecoinsToWithdraw) { _withdrawSome(stablecoinsToWithdraw.sub(b, '#2 Withdraw some sub error')); } // 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 DAI earned into ETH for the protocol algorithms uint256 stakingProfits = daiToETH(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).safeTransfer(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 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)); 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 balanceDydxAvailable() public view returns (uint256) { return IERC20(token).balanceOf(dydx); } 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 balanceFulcrumAvailable() public view returns (uint256) { return IERC20(chai).balanceOf(fulcrum); } 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 balanceAaveAvailable() public view returns (uint256) { return IERC20(token).balanceOf(aavePool); } function balanceAave() public view returns (uint256) { return IERC20(aaveToken).balanceOf(address(this)); } 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; } function _withdrawAll() internal { uint256 amount = balanceCompound(); if (amount > 0) { _withdrawSomeCompound(balanceCompoundInToken().sub(1)); } amount = balanceDydx(); if (amount > 0) { if (amount > balanceDydxAvailable()) { amount = balanceDydxAvailable(); } _withdrawDydx(amount); } amount = balanceFulcrum(); if (amount > 0) { if (amount > balanceFulcrumAvailable().sub(1)) { amount = balanceFulcrumAvailable().sub(1); } _withdrawSomeFulcrum(amount); } amount = balanceAave(); if (amount > 0) { if (amount > balanceAaveAvailable()) { amount = balanceAaveAvailable(); } _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); } function _withdrawSomeFulcrum(uint256 _amount) internal { uint256 b = balanceFulcrum(); uint256 bT = balanceFulcrumInToken(); 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 returns (bool) { uint256 origAmount = _amount; uint256 amount = balanceCompound(); if (amount > 0) { if (_amount > balanceCompoundInToken().sub(1)) { _withdrawSomeCompound(balanceCompoundInToken().sub(1)); _amount = origAmount.sub(IERC20(token).balanceOf(address(this))); } else { _withdrawSomeCompound(_amount); return true; } } amount = balanceDydx(); if (amount > 0) { if (_amount > balanceDydxAvailable()) { _withdrawDydx(balanceDydxAvailable()); _amount = origAmount.sub(IERC20(token).balanceOf(address(this))); } else { _withdrawDydx(_amount); return true; } } amount = balanceFulcrum(); if (amount > 0) { if (_amount > balanceFulcrumAvailable().sub(1)) { amount = balanceFulcrumAvailable().sub(1); _withdrawSomeFulcrum(balanceFulcrumAvailable().sub(1)); _amount = origAmount.sub(IERC20(token).balanceOf(address(this))); } else { _withdrawSomeFulcrum(amount); return true; } } amount = balanceAave(); if (amount > 0) { if (_amount > balanceAaveAvailable()) { _withdrawAave(balanceAaveAvailable()); _amount = origAmount.sub(IERC20(token).balanceOf(address(this))); } else { _withdrawAave(_amount); return true; } } return true; } function _supplyDydx(uint256 amount) internal { 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 _supplyAave(uint amount) internal { Aave(getAave()).deposit(token, amount, 0); } function _supplyFulcrum(uint amount) internal { require(Fulcrum(fulcrum).mint(address(this), amount) > 0, "FULCRUM: supply failed"); } function _supplyCompound(uint amount) internal { 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 _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 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); } }
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":true,"stateMutability":"payable","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":"aavePool","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":"balanceAaveAvailable","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":"balanceDydxAvailable","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":"balanceFulcrumAvailable","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":true,"inputs":[],"name":"chai","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"dai","outputs":[{"internalType":"address","name":"","type":"address"}],"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":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":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"numberOfParticipants","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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 yDAI.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 yDAI.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","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":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":"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
60806040819052601380546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d17909155601480548216736b175474e89094c44da98b954eedeac495271d0f1790556015805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179055690a968163f0a57b4000006018556802b5e3af16b1880000601b55601c805460ff1916905562004e1838819003908190833981016040819052620000b09162000785565b6040805180820182526009815268796561726e2044414960b81b6020808301918252835180850190945260048452637944414960e01b90840152815191929160129162000101916003919062000695565b5081516200011790600490602085019062000695565b506005805460ff191660ff92909216919091179055505060016006556200013d620002e9565b600780546001600160a01b0319166001600160a01b0392831617908190556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600980546001600160a01b0319908116736b175474e89094c44da98b954eedeac495271d0f1790915560118054821673dd6d648c991f7d47454354f4ef326b04025a48a8179055600f80548216731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e179055600c805482167324a42fd28c976a61df5d00d0599c34c4f90748c8179055600d80548216733dfd23a6c5e8bbcfc9581d2e864a68feb6a076d3179055600b8054821673493c57c4763932315a328269e1adad09653b9081179055600e8054821673fc1e690f61efd961294b3e1ce3313fbd8aa4f85d179055600a80548216735d3a536e4d6dbd6114cc1ead35777bab948e36431790556012805482167306af07097c9eeb7fd685c692751d5c66db49c2151790556003601055601780546001600160a01b03858116918416919091179091556016805491841691909216179055620002e16001600160e01b03620002ee16565b505062000aa6565b335b90565b600a546009546200031b916001600160a01b039182169116600019620003b0602090811b62002ab217901c565b600f5460095462000348916001600160a01b039182169116600019620003b0602090811b62002ab217901c565b620003816200035f6001600160e01b03620004ca16565b6009546001600160a01b031690600019620003b0602090811b62002ab217901c565b600b54600954620003ae916001600160a01b039182169116600019620003b0602090811b62002ab217901c565b565b8015806200043f5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90620003e9903090869060040162000991565b60206040518083038186803b1580156200040257600080fd5b505afa15801562000417573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200043d9190810190620007e5565b155b620004675760405162461bcd60e51b81526004016200045e90620009f3565b60405180910390fd5b604051620004c590849063095ea7b360e01b906200048c9086908690602401620009b0565b60408051808303601f190181529190526020810180516001600160e01b0319939093166001600160e01b03938416179052906200055016565b505050565b600c546040805163076b7fbb60e51b815290516000926001600160a01b03169163ed6ff760916004808301926020929190829003018186803b1580156200051057600080fd5b505afa15801562000525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200054b919081019062000764565b905090565b6200056f826001600160a01b03166200065860201b620031351760201c565b6200058e5760405162461bcd60e51b81526004016200045e9062000a05565b60006060836001600160a01b031683604051620005ac91906200097c565b6000604051808303816000865af19150503d8060008114620005eb576040519150601f19603f3d011682016040523d82523d6000602084013e620005f0565b606091505b509150915081620006155760405162461bcd60e51b81526004016200045e90620009cf565b805115620006525780806020019051620006339190810190620007c4565b620006525760405162461bcd60e51b81526004016200045e90620009e1565b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906200068d5750808214155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006d857805160ff191683800117855562000708565b8280016001018555821562000708579182015b8281111562000708578251825591602001919060010190620006eb565b50620007169291506200071a565b5090565b620002eb91905b8082111562000716576000815560010162000721565b8051620007448162000a76565b92915050565b8051620007448162000a90565b8051620007448162000a9b565b6000602082840312156200077757600080fd5b60006200068d848462000737565b600080604083850312156200079957600080fd5b6000620007a7858562000737565b9250506020620007ba8582860162000737565b9150509250929050565b600060208284031215620007d757600080fd5b60006200068d84846200074a565b600060208284031215620007f857600080fd5b60006200068d848462000757565b620008118162000a29565b82525050565b6000620008248262000a17565b62000830818562000a1b565b93506200084281856020860162000a47565b9290920192915050565b60006200085b60208362000a20565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b600062000896602a8362000a20565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000620008e460368362000a20565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015260400192915050565b600062000945601f8362000a20565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b6200081181620002eb565b60006200098a828462000817565b9392505050565b60408101620009a1828562000806565b6200098a602083018462000806565b60408101620009c0828562000806565b6200098a602083018462000971565b6020808252810162000744816200084c565b60208082528101620007448162000887565b602080825281016200074481620008d5565b60208082528101620007448162000936565b5190565b919050565b90815260200190565b6000620007448262000a3b565b151590565b6001600160a01b031690565b60005b8381101562000a6457818101518382015260200162000a4a565b83811115620006525750506000910152565b62000a818162000a29565b811462000a8d57600080fd5b50565b62000a818162000a36565b62000a8181620002eb565b6143628062000ab66000396000f3fe6080604052600436106103b85760003560e01c80638da5cb5b116101f2578063bea9849e1161010d578063f29e15a2116100a0578063f69e20461161006f578063f69e2046146109a5578063f7c1ec77146109ba578063f82ce27d146109cf578063fc0c546a146109e4576103b8565b8063f29e15a214610946578063f2fde38b1461095b578063f4b9fa751461097b578063f5a41dea14610990576103b8565b8063dd62ed3e116100dc578063dd62ed3e146108dc578063ebc51160146108fc578063f02fbd4a14610911578063f2978d9814610931576103b8565b8063bea9849e1461087d578063cf8ca4261461089d578063d54e3244146108b2578063d9d7858a146108c7576103b8565b8063a457c2d711610185578063b098fc8011610154578063b098fc801461081e578063b69d045614610833578063b69ef8a814610848578063b6b55f251461085d576103b8565b8063a457c2d7146107a9578063a7287971146107c9578063a9059cbb146107de578063a9a1015a146107fe576103b8565b806395d89b41116101c157806395d89b411461075557806399b71d5c1461076a578063a03e4bc31461077f578063a160176d14610794576103b8565b80638da5cb5b146107015780638e4ec6ef146107165780638f32d59b1461072b5780638f9225ca14610740576103b8565b80633fc8cef3116102e25780637137ef99116102755780637b82784c116102445780637b82784c146106955780637d7c2a1c146106b55780637f50d4d8146106ca578063819faf7b146106ec576103b8565b80637137ef9914610641578063715018a614610656578063735de9f71461066b57806377c7b8fc14610680576103b8565b806358782c21116102b157806358782c21146105e257806361c1ec55146105f75780636ff2bf081461060c57806370a0823114610621576103b8565b80633fc8cef31461058e578063413e920d146105a35780634fe41129146105b857806357ded9c9146105cd576103b8565b806323b872dd1161035a578063313ce56711610329578063313ce567146105175780633889cab114610539578063395093511461055957806339c0a7e114610579576103b8565b806323b872dd146104a25780632622678c146104c25780632e1a7d4d146104d75780632eb4520a146104f7576103b8565b8063095ea7b311610396578063095ea7b3146104295780630eb2a2671461045657806316f0115b1461047857806318160ddd1461048d576103b8565b806306a3fe59146103ba57806306fdde03146103e5578063085d488314610407575b005b3480156103c657600080fd5b506103cf6109f9565b6040516103dc9190613df4565b60405180910390f35b3480156103f157600080fd5b506103fa610a08565b6040516103dc9190613ef3565b34801561041357600080fd5b5061041c610a9f565b6040516103dc9190613ee5565b34801561043557600080fd5b50610449610444366004613412565b610aa8565b6040516103dc9190613ec9565b34801561046257600080fd5b5061046b610ac6565b6040516103dc919061407f565b34801561048457600080fd5b5061046b610b4c565b34801561049957600080fd5b5061046b610b52565b3480156104ae57600080fd5b506104496104bd3660046133c5565b610b58565b3480156104ce57600080fd5b506103cf610be6565b3480156104e357600080fd5b506103b86104f2366004613495565b610bf5565b34801561050357600080fd5b506103b861051236600461334f565b6110d9565b34801561052357600080fd5b5061052c61111f565b6040516103dc919061411c565b34801561054557600080fd5b5061046b610554366004613495565b611128565b34801561056557600080fd5b50610449610574366004613412565b61113a565b34801561058557600080fd5b5061046b61118e565b34801561059a57600080fd5b506103cf611235565b3480156105af57600080fd5b5061046b611244565b3480156105c457600080fd5b506103b861124b565b3480156105d957600080fd5b506103cf6112b2565b3480156105ee57600080fd5b506103cf6112c1565b34801561060357600080fd5b5061046b6112d0565b34801561061857600080fd5b5061046b611301565b34801561062d57600080fd5b5061046b61063c36600461334f565b6113c8565b34801561064d57600080fd5b5061046b6113e7565b34801561066257600080fd5b506103b8611429565b34801561067757600080fd5b506103cf611497565b34801561068c57600080fd5b5061046b6114a6565b3480156106a157600080fd5b5061046b6106b036600461334f565b6114d9565b3480156106c157600080fd5b506103b86114eb565b3480156106d657600080fd5b506106df6115e8565b6040516103dc9190613ed7565b3480156106f857600080fd5b506103cf6115f7565b34801561070d57600080fd5b506103cf611606565b34801561072257600080fd5b506103cf611615565b34801561073757600080fd5b50610449611624565b34801561074c57600080fd5b5061046b61164a565b34801561076157600080fd5b506103fa611682565b34801561077657600080fd5b506103b86116e3565b34801561078b57600080fd5b506103cf61177a565b3480156107a057600080fd5b5061041c611789565b3480156107b557600080fd5b506104496107c4366004613412565b61189b565b3480156107d557600080fd5b5061046b611909565b3480156107ea57600080fd5b506104496107f9366004613412565b6119be565b34801561080a57600080fd5b506103b8610819366004613412565b6119d2565b34801561082a57600080fd5b5061046b611a7b565b34801561083f57600080fd5b506103cf611ab3565b34801561085457600080fd5b5061046b611ac2565b34801561086957600080fd5b506103b8610878366004613495565b611af3565b34801561088957600080fd5b506103b861089836600461334f565b611bc6565b3480156108a957600080fd5b5061046b611c0c565b3480156108be57600080fd5b5061046b611c3d565b3480156108d357600080fd5b5061046b611c75565b3480156108e857600080fd5b5061046b6108f736600461338b565b611c7b565b34801561090857600080fd5b5061046b611ca6565b34801561091d57600080fd5b506103b861092c366004613495565b611cac565b34801561093d57600080fd5b5061046b611cd5565b34801561095257600080fd5b5061046b611cdb565b34801561096757600080fd5b506103b861097636600461334f565b611ce1565b34801561098757600080fd5b506103cf611d0e565b34801561099c57600080fd5b5061046b611d1d565b3480156109b157600080fd5b506103cf611db0565b3480156109c657600080fd5b506103cf611dbf565b3480156109db57600080fd5b506103cf611e3c565b3480156109f057600080fd5b506103cf611e81565b600e546001600160a01b031681565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a945780601f10610a6957610100808354040283529160200191610a94565b820191906000526020600020905b815481529060010190602001808311610a7757829003601f168201915b505050505090505b90565b601c5460ff1681565b6000610abc610ab5611e90565b8484611e94565b5060015b92915050565b600b546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610af7903090600401613e02565b60206040518083038186803b158015610b0f57600080fd5b505afa158015610b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b47919081019061355d565b905090565b60085481565b60025490565b6000610b65848484611f48565b610bdb84610b71611e90565b610bd6856040518060600160405280602881526020016142d3602891396001600160a01b038a16600090815260016020526040812090610baf611e90565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61205e16565b611e94565b5060015b9392505050565b6016546001600160a01b031681565b600680546001019081905581610c265760405162461bcd60e51b8152600401610c1d90613fb4565b60405180910390fd5b6000610c31336113c8565b905080831115610c535760405162461bcd60e51b8152600401610c1d90613fa4565b610c5b6113e7565b6008556000610c68611301565b90506000610c93600254610c878760085461208a90919063ffffffff16565b9063ffffffff6120c416565b604080518082018252601d81527f72656465656d20616d6f756e7420657863656564732062616c616e6365000000602080830191909152336000908152908190529190912054919250610cee9190879063ffffffff61205e16565b3360009081526020818152604091829020929092558051808201909152601981527f233120546f74616c20737570706c7920737562206572726f720000000000000091810191909152600254610d4b91879063ffffffff61205e16565b60025560405160009033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d8390899061407f565b60405180910390a36009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610dbc903090600401613e02565b60206040518083038186803b158015610dd457600080fd5b505afa158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e0c919081019061355d565b905081811015610e6a57610e68610e63826040518060400160405280601a81526020017f233220576974686472617720736f6d6520737562206572726f720000000000008152508561205e9092919063ffffffff16565b612106565b505b6000610e7d83606463ffffffff6120c416565b336000818152601a602052604090819020439055601754905163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb91610ec1918890600401613e10565b602060405180830381600087803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f139190810190613477565b506000610f1f82612365565b6017546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190610f55908490600401613e02565b60206040518083038186803b158015610f6d57600080fd5b505afa158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fa5919081019061355d565b9050601854811015611030576000610fc96064610c8785606263ffffffff61208a16565b9050610fd4816124e2565b506000610fed6064610c8786600263ffffffff61208a16565b6016546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611028573d6000803e3d6000fd5b50505061106d565b60165460405183916001600160a01b03169082156108fc029083906000818181858888f1935050505015801561106a573d6000803e3d6000fd5b50505b61109a33611081878663ffffffff6125fb16565b6009546001600160a01b0316919063ffffffff61263d16565b6110a26113e7565b6008556110ad6114eb565b5050505050505060065481146110d55760405162461bcd60e51b8152600401610c1d90614024565b5050565b6110e1611624565b6110fd5760405162461bcd60e51b8152600401610c1d90613f94565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b60055460ff1690565b60196020526000908152604090205481565b6000610abc611147611e90565b84610bd68560016000611158611e90565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61269616565b6000611198613171565b600f5460408051808201825230815260006020820152601054915163306430bb60e21b81526001600160a01b039093169263c190c2ec926111dc9291600401614064565b604080518083038186803b1580156111f357600080fd5b505afa158015611207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061122b919081019061353f565b6020015191505090565b6015546001600160a01b031681565b620f424081565b611253611624565b61126f5760405162461bcd60e51b8152600401610c1d90613f94565b611277611606565b6001600160a01b03166108fc479081150290604051600060405180830381858888f193505050501580156112af573d6000803e3d6000fd5b50565b6011546001600160a01b031681565b600b546001600160a01b031681565b600a546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610af7903090600401613e02565b336000908152601a602052604081205481901561134057336000908152601a602052604090205461133990439063ffffffff6125fb16565b905061134a565b6000915050610a9c565b6000611355336113c8565b90506000806002541161136a5750600061138b565b611388600254610c878461137c6113e7565b9063ffffffff61208a16565b90505b60006113bf611964610c878661137c670de0b6b3a7640000610c87601b5461137c620f42408b6120c490919063ffffffff16565b94505050505090565b6001600160a01b0381166000908152602081905260409020545b919050565b6000610b476113f4611ac2565b61141d6113ff611c0c565b61141d61140a61118e565b61141d611415611d1d565b61141d611909565b9063ffffffff61269616565b611431611624565b61144d5760405162461bcd60e51b8152600401610c1d90613f94565b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600780546001600160a01b0319169055565b6013546001600160a01b031681565b6000806114b16113e7565b6002549091506114d390610c8783670de0b6b3a764000063ffffffff61208a16565b91505090565b601a6020526000908152604090205481565b60006114f5611789565b601c5490915060ff16600481111561150957fe5b81600481111561151557fe5b14611522576115226126bb565b600061152c611ac2565b11156115c757600181600481111561154057fe5b141561155b57611556611551611ac2565b612780565b6115c7565b600481600481111561156957fe5b141561157f5761155661157a611ac2565b6128fe565b600281600481111561158d57fe5b14156115a35761155661159e611ac2565b6129a0565b60038160048111156115b157fe5b14156115c7576115c76115c2611ac2565b612a3f565b601c805482919060ff191660018360048111156115e057fe5b021790555050565b6017546001600160a01b031681565b600c546001600160a01b031681565b6007546001600160a01b031690565b600f546001600160a01b031681565b6007546000906001600160a01b031661163b611e90565b6001600160a01b031614905090565b601254600b546040516370a0823160e01b81526000926001600160a01b03908116926370a0823192610af79290911690600401613df4565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a945780601f10610a6957610100808354040283529160200191610a94565b600a54600954611708916001600160a01b03918216911660001963ffffffff612ab216565b600f5460095461172d916001600160a01b03918216911660001963ffffffff612ab216565b611753611738611e3c565b6009546001600160a01b03169060001963ffffffff612ab216565b600b54600954611778916001600160a01b03918216911660001963ffffffff612ab216565b565b600d546001600160a01b031681565b6011546009546040516303622f8f60e61b815260009283928392839283926001600160a01b039182169263d88be3c0926117c7921690600401613df4565b60006040518083038186803b1580156117df57600080fd5b505afa1580156117f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261181b91908101906134b3565b929750909550935091506000905084156118325750835b8084111561183d5750825b808311156118485750815b808211156118535750805b60008186141561186557506002611891565b8482141561187557506004611891565b8382141561188557506003611891565b82821415611891575060015b9550505050505090565b6000610abc6118a8611e90565b84610bd6856040518060600160405280602581526020016142fb60259139600160006118d2611e90565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61205e16565b6000806119146112d0565b90508015610b4757610ac0670de0b6b3a7640000610c87600a60009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119b1919081019061355d565b849063ffffffff61208a16565b6000610abc6119cb611e90565b8484611f48565b6119da611624565b6119f65760405162461bcd60e51b8152600401610c1d90613f94565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90611a249033908590600401613e10565b602060405180830381600087803b158015611a3e57600080fd5b505af1158015611a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a769190810190613477565b505050565b600954600d546040516370a0823160e01b81526000926001600160a01b03908116926370a0823192610af79290911690600401613df4565b6012546001600160a01b031681565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610af7903090600401613e02565b600680546001019081905581611b1b5760405162461bcd60e51b8152600401610c1d90613ff4565b611b236113e7565b600855600954611b44906001600160a01b031633308563ffffffff612b7816565b336000908152601a60205260408120439055600854611b695750600882905581611b87565b611b84600854610c876002548661208a90919063ffffffff16565b90505b611b8f6113e7565b600855611b9c3382612ba2565b611ba46114eb565b5060065481146110d55760405162461bcd60e51b8152600401610c1d90614024565b611bce611624565b611bea5760405162461bcd60e51b8152600401610c1d90613f94565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b600e546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610af7903090600401613e02565b600954600f546040516370a0823160e01b81526000926001600160a01b03908116926370a0823192610af79290911690600401613df4565b60105481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b601b5481565b611cb4611624565b611cd05760405162461bcd60e51b8152600401610c1d90613f94565b601b55565b61196481565b60185481565b611ce9611624565b611d055760405162461bcd60e51b8152600401610c1d90613f94565b6112af81612c62565b6014546001600160a01b031681565b600080611d28610ac6565b90508015610b4757600b54604051630359f7eb60e11b81526001600160a01b03909116906306b3efd690611d60903090600401613e02565b60206040518083038186803b158015611d7857600080fd5b505afa158015611d8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ac0919081019061355d565b600a546001600160a01b031681565b600c5460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b916004808301926020929190829003018186803b158015611e0457600080fd5b505afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b47919081019061336d565b600c546040805163076b7fbb60e51b815290516000926001600160a01b03169163ed6ff760916004808301926020929190829003018186803b158015611e0457600080fd5b6009546001600160a01b031681565b3390565b6001600160a01b038316611eba5760405162461bcd60e51b8152600401610c1d90613fe4565b6001600160a01b038216611ee05760405162461bcd60e51b8152600401610c1d90613f34565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611f3b90859061407f565b60405180910390a3505050565b6001600160a01b038316611f6e5760405162461bcd60e51b8152600401610c1d90613fc4565b6001600160a01b038216611f945760405162461bcd60e51b8152600401610c1d90613f04565b611fd7816040518060600160405280602681526020016142ad602691396001600160a01b038616600090815260208190526040902054919063ffffffff61205e16565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461200c908263ffffffff61269616565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f3b90859061407f565b600081848411156120825760405162461bcd60e51b8152600401610c1d9190613ef3565b505050900390565b60008261209957506000610ac0565b828202828482816120a657fe5b0414610bdf5760405162461bcd60e51b8152600401610c1d90613f74565b6000610bdf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ce4565b600081816121126112d0565b905080156121f9576121336001612127611909565b9063ffffffff6125fb16565b8411156121e55761214f61214a6001612127611909565b612d1b565b6009546040516370a0823160e01b81526121de916001600160a01b0316906370a0823190612181903090600401613e02565b60206040518083038186803b15801561219957600080fd5b505afa1580156121ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121d1919081019061355d565b839063ffffffff6125fb16565b93506121f9565b6121ee84612d1b565b6001925050506113e2565b61220161118e565b9050801561226a57612211611c3d565b84111561226157612228612223611c3d565b612d79565b6009546040516370a0823160e01b815261225a916001600160a01b0316906370a0823190612181903090600401613e02565b935061226a565b6121ee84612d79565b612272610ac6565b905080156122f457612287600161212761164a565b8411156122eb5761229b600161212761164a565b90506122b26122ad600161212761164a565b612e81565b6009546040516370a0823160e01b81526122e4916001600160a01b0316906370a0823190612181903090600401613e02565b93506122f4565b6121ee81612e81565b6122fc611c0c565b90508015610bdb5761230c611a7b565b84111561235c5761232361231e611a7b565b612edf565b6009546040516370a0823160e01b8152612355916001600160a01b0316906370a0823190612181903090600401613e02565b9350610bdb565b6121ee84612edf565b60135460145460009161238b916001600160a01b0390811691168363ffffffff612ab216565b6013546014546123ae916001600160a01b0391821691168463ffffffff612ab216565b6040805160028082526060808301845292602083019080388339505060145482519293506001600160a01b0316918391506000906123e857fe5b6001600160a01b03928316602091820292909201015260155482519116908290600190811061241357fe5b6001600160a01b039283166020918202929092010152601354606091166318cbafe5856000853061244c4261070863ffffffff61269616565b6040518663ffffffff1660e01b815260040161246c9594939291906140c9565b600060405180830381600087803b15801561248657600080fd5b505af115801561249a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124c29190810190613442565b9050806001815181106124d157fe5b602002602001015192505050919050565b6040805160028082526060808301845260009390929190602083019080388339505060155482519293506001600160a01b03169183915060009061252257fe5b6001600160a01b03928316602091820292909201015260175482519116908290600190811061254d57fe5b6001600160a01b03928316602091820292909201015260135460609116637ff36ab585600085816125864261070863ffffffff61269616565b6040518663ffffffff1660e01b81526004016125a5949392919061408d565b6000604051808303818588803b1580156125be57600080fd5b505af11580156125d2573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526124c29190810190613442565b6000610bdf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061205e565b604051611a7690849063a9059cbb60e01b9061265f9086908690602401613e6e565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612f0f565b600082820183811015610bdf5760405162461bcd60e51b8152600401610c1d90613f54565b60006126c56112d0565b905080156126dd576126dd61214a6001612127611909565b6126e561118e565b90508015612710576126f5611c3d565b81111561270757612704611c3d565b90505b61271081612d79565b612718610ac6565b9050801561274d5761272d600161212761164a565b81111561274457612741600161212761164a565b90505b61274d81612e81565b612755611c0c565b905080156112af57612765611a7b565b81111561277757612774611a7b565b90505b6112af81612edf565b604080516001808252818301909252606091816020015b61279f613171565b8152602001906001900390816127975790505090506040518060400160405280306001600160a01b031681526020016000815250816000815181106127e057fe5b60200260200101819052506127f3613188565b60408051608081019091526001815260208101600081526020016000815260200184905290506128216131b1565b600081819052506000602082015260408082018390526010546060808401919091523060a0840152815160018082528184019093529091816020015b6128656131b1565b81526020019060019003908161285d579050509050818160008151811061288857fe5b6020908102919091010152600f5460405163a67a6a4560e01b81526001600160a01b039091169063a67a6a45906128c59087908590600401613ea4565b600060405180830381600087803b1580156128df57600080fd5b505af11580156128f3573d6000803e3d6000fd5b505050505050505050565b600b546040516340c10f1960e01b81526000916001600160a01b0316906340c10f19906129319030908690600401613e10565b602060405180830381600087803b15801561294b57600080fd5b505af115801561295f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612983919081019061355d565b116112af5760405162461bcd60e51b8152600401610c1d90614004565b600a5460405163140e25ad60e31b81526001600160a01b039091169063a0712d68906129d090849060040161407f565b602060405180830381600087803b1580156129ea57600080fd5b505af11580156129fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a22919081019061355d565b156112af5760405162461bcd60e51b8152600401610c1d90613f44565b612a47611dbf565b600954604051636968703360e11b81526001600160a01b039283169263d2d0e06692612a7d929116908590600090600401613e7c565b600060405180830381600087803b158015612a9757600080fd5b505af1158015612aab573d6000803e3d6000fd5b5050505050565b801580612b3a5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90612ae89030908690600401613e2b565b60206040518083038186803b158015612b0057600080fd5b505afa158015612b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b38919081019061355d565b155b612b565760405162461bcd60e51b8152600401610c1d90614034565b604051611a7690849063095ea7b360e01b9061265f9086908690602401613e6e565b604051612b9c9085906323b872dd60e01b9061265f90879087908790602401613e46565b50505050565b6001600160a01b038216612bc85760405162461bcd60e51b8152600401610c1d90614054565b600254612bdb908263ffffffff61269616565b6002556001600160a01b038216600090815260208190526040902054612c07908263ffffffff61269616565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612c5690859061407f565b60405180910390a35050565b6001600160a01b038116612c885760405162461bcd60e51b8152600401610c1d90613f24565b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b60008183612d055760405162461bcd60e51b8152600401610c1d9190613ef3565b506000838581612d1157fe5b0495945050505050565b6000612d256112d0565b90506000612d31611909565b905082811015612d535760405162461bcd60e51b8152600401610c1d90613fd4565b6000612d6e600161141d84610c87878963ffffffff61208a16565b9050612b9c81612ff4565b604080516001808252818301909252606091816020015b612d98613171565b815260200190600190039081612d905790505090506040518060400160405280306001600160a01b03168152602001600081525081600081518110612dd957fe5b6020026020010181905250612dec613188565b6040805160808101909152600080825260208201908152602001600081526020018490529050612e1a6131b1565b600181819052506000602082015260408082018390526010546060808401919091523060a0840152815160018082528184019093529091816020015b612e5e6131b1565b815260200190600190039081612e56579050509050818160008151811061288857fe5b6000612e8b610ac6565b90506000612e97611d1d565b905082811015612eb95760405162461bcd60e51b8152600401610c1d90613fd4565b6000612ed4600161141d84610c87878963ffffffff61208a16565b9050612b9c81613093565b600e5460405163db006a7560e01b81526001600160a01b039091169063db006a7590612a7d90849060040161407f565b612f21826001600160a01b0316613135565b612f3d5760405162461bcd60e51b8152600401610c1d90614044565b60006060836001600160a01b031683604051612f599190613de8565b6000604051808303816000865af19150503d8060008114612f96576040519150601f19603f3d011682016040523d82523d6000602084013e612f9b565b606091505b509150915081612fbd5760405162461bcd60e51b8152600401610c1d90613f64565b805115612b9c5780806020019051612fd89190810190613477565b612b9c5760405162461bcd60e51b8152600401610c1d90614014565b600a5460405163db006a7560e01b81526001600160a01b039091169063db006a759061302490849060040161407f565b602060405180830381600087803b15801561303e57600080fd5b505af1158015613052573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613076919081019061355d565b156112af5760405162461bcd60e51b8152600401610c1d90613f14565b600b54604051632770a7eb60e21b81526000916001600160a01b031690639dc29fac906130c69030908690600401613e10565b602060405180830381600087803b1580156130e057600080fd5b505af11580156130f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613118919081019061355d565b116112af5760405162461bcd60e51b8152600401610c1d90613f84565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906131695750808214155b949350505050565b604080518082019091526000808252602082015290565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b6040805161010081018252600080825260208201529081016131d1613188565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b8035610ac081614286565b8051610ac081614286565b600082601f83011261322a57600080fd5b815161323d61323882614151565b61412a565b9150818183526020840193506020810190508385602084028201111561326257600080fd5b60005b8381101561328e57816132788882613344565b8452506020928301929190910190600101613265565b5050505092915050565b8051610ac08161429a565b8035610ac0816142a3565b600082601f8301126132bf57600080fd5b81516132cd61323882614172565b915080825260208301602083018583830111156132e957600080fd5b6132f4838284614232565b50505092915050565b60006040828403121561330f57600080fd5b613319604061412a565b905060006133278484613298565b825250602061333884848301613344565b60208301525092915050565b8051610ac0816142a3565b60006020828403121561336157600080fd5b60006131698484613203565b60006020828403121561337f57600080fd5b6000613169848461320e565b6000806040838503121561339e57600080fd5b60006133aa8585613203565b92505060206133bb85828601613203565b9150509250929050565b6000806000606084860312156133da57600080fd5b60006133e68686613203565b93505060206133f786828701613203565b9250506040613408868287016132a3565b9150509250925092565b6000806040838503121561342557600080fd5b60006134318585613203565b92505060206133bb858286016132a3565b60006020828403121561345457600080fd5b815167ffffffffffffffff81111561346b57600080fd5b61316984828501613219565b60006020828403121561348957600080fd5b60006131698484613298565b6000602082840312156134a757600080fd5b600061316984846132a3565b600080600080600060a086880312156134cb57600080fd5b855167ffffffffffffffff8111156134e257600080fd5b6134ee888289016132ae565b95505060206134ff88828901613344565b945050604061351088828901613344565b935050606061352188828901613344565b925050608061353288828901613344565b9150509295509295909350565b60006040828403121561355157600080fd5b600061316984846132fd565b60006020828403121561356f57600080fd5b60006131698484613344565b600061358783836135be565b505060200190565b6000610bdf8383613cc1565b60006135a78383613db6565b505060400190565b6135b8816141f4565b82525050565b6135b8816141ad565b60006135d2826141a0565b6135dc81856141a4565b93506135e78361419a565b8060005b838110156136155781516135ff888261357b565b975061360a8361419a565b9250506001016135eb565b509495945050505050565b600061362b826141a0565b61363581856141a4565b9350836020820285016136478561419a565b8060005b858110156136815784840389528151613664858261358f565b945061366f8361419a565b60209a909a019992505060010161364b565b5091979650505050505050565b6000613699826141a0565b6136a381856141a4565b93506136ae8361419a565b8060005b838110156136155781516136c6888261359b565b97506136d18361419a565b9250506001016136b2565b6135b8816141b8565b60006136f0826141a0565b6136fa81856113e2565b935061370a818560208601614232565b9290920192915050565b600061371f826141a0565b61372981856141a4565b9350613739818560208601614232565b6137428161425e565b9093019392505050565b6135b8816141fb565b6135b881614206565b6135b881614211565b6135b88161421c565b6135b881614227565b60006137866023836141a4565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b602082015260400192915050565b60006137cb6019836141a4565b7f434f4d504f554e443a207769746864726177206661696c656400000000000000815260200192915050565b60006138046026836141a4565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061384c6022836141a4565b7f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b602082015260400192915050565b60006138906017836141a4565b7f434f4d504f554e443a20737570706c79206661696c6564000000000000000000815260200192915050565b60006138c9601b836141a4565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006139026020836141a4565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b600061393b6021836141a4565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061397e6018836141a4565b7f46554c4352554d3a207769746864726177206661696c65640000000000000000815260200192915050565b60006139b76020836141a4565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006139f06014836141a4565b73696e73756666696369656e742062616c616e636560601b815260200192915050565b6000613a20601f836141a4565b7f7769746864726177206d7573742062652067726561746572207468616e203000815260200192915050565b6000613a596025836141a4565b7f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b602082015260400192915050565b6000613aa06012836141a4565b71696e73756666696369656e742066756e647360701b815260200192915050565b6000613ace6024836141a4565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b602082015260400192915050565b6000613b14601e836141a4565b7f6465706f736974206d7573742062652067726561746572207468616e20300000815260200192915050565b6000613b4d6016836141a4565b7511955310d495534e881cdd5c1c1b1e4819985a5b195960521b815260200192915050565b6000613b7f602a836141a4565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000613bcb601f836141a4565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b6000613c046036836141a4565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b602082015260400192915050565b6000613c5c601f836141a4565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b6000613c95601f836141a4565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300815260200192915050565b8051600090610160840190613cd68582613755565b506020830151613ce96020860182613dd6565b506040830151613cfc6040860182613d6c565b506060830151613d0f60c0860182613dd6565b506080830151613d2260e0860182613dd6565b5060a0830151613d366101008601826135be565b5060c0830151613d4a610120860182613dd6565b5060e0830151848203610140860152613d638282613714565b95945050505050565b80516080830190613d7d84826136dc565b506020820151613d90602085018261375e565b506040820151613da3604085018261375e565b506060820151612b9c6060850182613dd6565b80516040830190613dc784826135be565b506020820151612b9c60208501825b6135b881610a9c565b6135b8816141ee565b6000610bdf82846136e5565b60208101610ac082846135be565b60208101610ac082846135af565b60408101613e1e82856135af565b610bdf6020830184613dd6565b60408101613e3982856135be565b610bdf60208301846135be565b60608101613e5482866135be565b613e6160208301856135be565b6131696040830184613dd6565b60408101613e1e82856135be565b60608101613e8a82866135be565b613e976020830185613dd6565b6131696040830184613770565b60408082528101613eb5818561368e565b905081810360208301526131698184613620565b60208101610ac082846136dc565b60208101610ac0828461374c565b60208101610ac08284613767565b60208082528101610bdf8184613714565b60208082528101610ac081613779565b60208082528101610ac0816137be565b60208082528101610ac0816137f7565b60208082528101610ac08161383f565b60208082528101610ac081613883565b60208082528101610ac0816138bc565b60208082528101610ac0816138f5565b60208082528101610ac08161392e565b60208082528101610ac081613971565b60208082528101610ac0816139aa565b60208082528101610ac0816139e3565b60208082528101610ac081613a13565b60208082528101610ac081613a4c565b60208082528101610ac081613a93565b60208082528101610ac081613ac1565b60208082528101610ac081613b07565b60208082528101610ac081613b40565b60208082528101610ac081613b72565b60208082528101610ac081613bbe565b60208082528101610ac081613bf7565b60208082528101610ac081613c4f565b60208082528101610ac081613c88565b606081016140728285613db6565b610bdf6040830184613dd6565b60208101610ac08284613dd6565b6080810161409b8287613dd6565b81810360208301526140ad81866135c7565b90506140bc60408301856135af565b613d636060830184613dd6565b60a081016140d78288613dd6565b6140e46020830187613dd6565b81810360408301526140f681866135c7565b905061410560608301856135af565b6141126080830184613dd6565b9695505050505050565b60208101610ac08284613ddf565b60405181810167ffffffffffffffff8111828210171561414957600080fd5b604052919050565b600067ffffffffffffffff82111561416857600080fd5b5060209081020190565b600067ffffffffffffffff82111561418957600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b6000610ac0826141e2565b151590565b806113e281614268565b806113e281614272565b806113e28161427c565b61ffff1690565b6001600160a01b031690565b60ff1690565b6000610ac0825b6000610ac0826141ad565b6000610ac0826141bd565b6000610ac0826141c7565b6000610ac0826141d1565b6000610ac0826141db565b60005b8381101561424d578181015183820152602001614235565b83811115612b9c5750506000910152565b601f01601f191690565b600281106112af57fe5b600181106112af57fe5b600581106112af57fe5b61428f816141ad565b81146112af57600080fd5b61428f816141b8565b61428f81610a9c56fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a7231582015c0ea15ad76247ce499e3fb8c066167671ee93f818961da6b0ac11c9841451d6c6578706572696d656e74616cf564736f6c63430005110040000000000000000000000000468ab3b1f63a1c14b361bc367c3cc92277588da1000000000000000000000000f572096bbb414c6cc0c8915e9bf9e77c89eff2bd
Deployed Bytecode
0x6080604052600436106103b85760003560e01c80638da5cb5b116101f2578063bea9849e1161010d578063f29e15a2116100a0578063f69e20461161006f578063f69e2046146109a5578063f7c1ec77146109ba578063f82ce27d146109cf578063fc0c546a146109e4576103b8565b8063f29e15a214610946578063f2fde38b1461095b578063f4b9fa751461097b578063f5a41dea14610990576103b8565b8063dd62ed3e116100dc578063dd62ed3e146108dc578063ebc51160146108fc578063f02fbd4a14610911578063f2978d9814610931576103b8565b8063bea9849e1461087d578063cf8ca4261461089d578063d54e3244146108b2578063d9d7858a146108c7576103b8565b8063a457c2d711610185578063b098fc8011610154578063b098fc801461081e578063b69d045614610833578063b69ef8a814610848578063b6b55f251461085d576103b8565b8063a457c2d7146107a9578063a7287971146107c9578063a9059cbb146107de578063a9a1015a146107fe576103b8565b806395d89b41116101c157806395d89b411461075557806399b71d5c1461076a578063a03e4bc31461077f578063a160176d14610794576103b8565b80638da5cb5b146107015780638e4ec6ef146107165780638f32d59b1461072b5780638f9225ca14610740576103b8565b80633fc8cef3116102e25780637137ef99116102755780637b82784c116102445780637b82784c146106955780637d7c2a1c146106b55780637f50d4d8146106ca578063819faf7b146106ec576103b8565b80637137ef9914610641578063715018a614610656578063735de9f71461066b57806377c7b8fc14610680576103b8565b806358782c21116102b157806358782c21146105e257806361c1ec55146105f75780636ff2bf081461060c57806370a0823114610621576103b8565b80633fc8cef31461058e578063413e920d146105a35780634fe41129146105b857806357ded9c9146105cd576103b8565b806323b872dd1161035a578063313ce56711610329578063313ce567146105175780633889cab114610539578063395093511461055957806339c0a7e114610579576103b8565b806323b872dd146104a25780632622678c146104c25780632e1a7d4d146104d75780632eb4520a146104f7576103b8565b8063095ea7b311610396578063095ea7b3146104295780630eb2a2671461045657806316f0115b1461047857806318160ddd1461048d576103b8565b806306a3fe59146103ba57806306fdde03146103e5578063085d488314610407575b005b3480156103c657600080fd5b506103cf6109f9565b6040516103dc9190613df4565b60405180910390f35b3480156103f157600080fd5b506103fa610a08565b6040516103dc9190613ef3565b34801561041357600080fd5b5061041c610a9f565b6040516103dc9190613ee5565b34801561043557600080fd5b50610449610444366004613412565b610aa8565b6040516103dc9190613ec9565b34801561046257600080fd5b5061046b610ac6565b6040516103dc919061407f565b34801561048457600080fd5b5061046b610b4c565b34801561049957600080fd5b5061046b610b52565b3480156104ae57600080fd5b506104496104bd3660046133c5565b610b58565b3480156104ce57600080fd5b506103cf610be6565b3480156104e357600080fd5b506103b86104f2366004613495565b610bf5565b34801561050357600080fd5b506103b861051236600461334f565b6110d9565b34801561052357600080fd5b5061052c61111f565b6040516103dc919061411c565b34801561054557600080fd5b5061046b610554366004613495565b611128565b34801561056557600080fd5b50610449610574366004613412565b61113a565b34801561058557600080fd5b5061046b61118e565b34801561059a57600080fd5b506103cf611235565b3480156105af57600080fd5b5061046b611244565b3480156105c457600080fd5b506103b861124b565b3480156105d957600080fd5b506103cf6112b2565b3480156105ee57600080fd5b506103cf6112c1565b34801561060357600080fd5b5061046b6112d0565b34801561061857600080fd5b5061046b611301565b34801561062d57600080fd5b5061046b61063c36600461334f565b6113c8565b34801561064d57600080fd5b5061046b6113e7565b34801561066257600080fd5b506103b8611429565b34801561067757600080fd5b506103cf611497565b34801561068c57600080fd5b5061046b6114a6565b3480156106a157600080fd5b5061046b6106b036600461334f565b6114d9565b3480156106c157600080fd5b506103b86114eb565b3480156106d657600080fd5b506106df6115e8565b6040516103dc9190613ed7565b3480156106f857600080fd5b506103cf6115f7565b34801561070d57600080fd5b506103cf611606565b34801561072257600080fd5b506103cf611615565b34801561073757600080fd5b50610449611624565b34801561074c57600080fd5b5061046b61164a565b34801561076157600080fd5b506103fa611682565b34801561077657600080fd5b506103b86116e3565b34801561078b57600080fd5b506103cf61177a565b3480156107a057600080fd5b5061041c611789565b3480156107b557600080fd5b506104496107c4366004613412565b61189b565b3480156107d557600080fd5b5061046b611909565b3480156107ea57600080fd5b506104496107f9366004613412565b6119be565b34801561080a57600080fd5b506103b8610819366004613412565b6119d2565b34801561082a57600080fd5b5061046b611a7b565b34801561083f57600080fd5b506103cf611ab3565b34801561085457600080fd5b5061046b611ac2565b34801561086957600080fd5b506103b8610878366004613495565b611af3565b34801561088957600080fd5b506103b861089836600461334f565b611bc6565b3480156108a957600080fd5b5061046b611c0c565b3480156108be57600080fd5b5061046b611c3d565b3480156108d357600080fd5b5061046b611c75565b3480156108e857600080fd5b5061046b6108f736600461338b565b611c7b565b34801561090857600080fd5b5061046b611ca6565b34801561091d57600080fd5b506103b861092c366004613495565b611cac565b34801561093d57600080fd5b5061046b611cd5565b34801561095257600080fd5b5061046b611cdb565b34801561096757600080fd5b506103b861097636600461334f565b611ce1565b34801561098757600080fd5b506103cf611d0e565b34801561099c57600080fd5b5061046b611d1d565b3480156109b157600080fd5b506103cf611db0565b3480156109c657600080fd5b506103cf611dbf565b3480156109db57600080fd5b506103cf611e3c565b3480156109f057600080fd5b506103cf611e81565b600e546001600160a01b031681565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a945780601f10610a6957610100808354040283529160200191610a94565b820191906000526020600020905b815481529060010190602001808311610a7757829003601f168201915b505050505090505b90565b601c5460ff1681565b6000610abc610ab5611e90565b8484611e94565b5060015b92915050565b600b546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610af7903090600401613e02565b60206040518083038186803b158015610b0f57600080fd5b505afa158015610b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b47919081019061355d565b905090565b60085481565b60025490565b6000610b65848484611f48565b610bdb84610b71611e90565b610bd6856040518060600160405280602881526020016142d3602891396001600160a01b038a16600090815260016020526040812090610baf611e90565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61205e16565b611e94565b5060015b9392505050565b6016546001600160a01b031681565b600680546001019081905581610c265760405162461bcd60e51b8152600401610c1d90613fb4565b60405180910390fd5b6000610c31336113c8565b905080831115610c535760405162461bcd60e51b8152600401610c1d90613fa4565b610c5b6113e7565b6008556000610c68611301565b90506000610c93600254610c878760085461208a90919063ffffffff16565b9063ffffffff6120c416565b604080518082018252601d81527f72656465656d20616d6f756e7420657863656564732062616c616e6365000000602080830191909152336000908152908190529190912054919250610cee9190879063ffffffff61205e16565b3360009081526020818152604091829020929092558051808201909152601981527f233120546f74616c20737570706c7920737562206572726f720000000000000091810191909152600254610d4b91879063ffffffff61205e16565b60025560405160009033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d8390899061407f565b60405180910390a36009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610dbc903090600401613e02565b60206040518083038186803b158015610dd457600080fd5b505afa158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e0c919081019061355d565b905081811015610e6a57610e68610e63826040518060400160405280601a81526020017f233220576974686472617720736f6d6520737562206572726f720000000000008152508561205e9092919063ffffffff16565b612106565b505b6000610e7d83606463ffffffff6120c416565b336000818152601a602052604090819020439055601754905163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb91610ec1918890600401613e10565b602060405180830381600087803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f139190810190613477565b506000610f1f82612365565b6017546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190610f55908490600401613e02565b60206040518083038186803b158015610f6d57600080fd5b505afa158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fa5919081019061355d565b9050601854811015611030576000610fc96064610c8785606263ffffffff61208a16565b9050610fd4816124e2565b506000610fed6064610c8786600263ffffffff61208a16565b6016546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611028573d6000803e3d6000fd5b50505061106d565b60165460405183916001600160a01b03169082156108fc029083906000818181858888f1935050505015801561106a573d6000803e3d6000fd5b50505b61109a33611081878663ffffffff6125fb16565b6009546001600160a01b0316919063ffffffff61263d16565b6110a26113e7565b6008556110ad6114eb565b5050505050505060065481146110d55760405162461bcd60e51b8152600401610c1d90614024565b5050565b6110e1611624565b6110fd5760405162461bcd60e51b8152600401610c1d90613f94565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b60055460ff1690565b60196020526000908152604090205481565b6000610abc611147611e90565b84610bd68560016000611158611e90565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61269616565b6000611198613171565b600f5460408051808201825230815260006020820152601054915163306430bb60e21b81526001600160a01b039093169263c190c2ec926111dc9291600401614064565b604080518083038186803b1580156111f357600080fd5b505afa158015611207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061122b919081019061353f565b6020015191505090565b6015546001600160a01b031681565b620f424081565b611253611624565b61126f5760405162461bcd60e51b8152600401610c1d90613f94565b611277611606565b6001600160a01b03166108fc479081150290604051600060405180830381858888f193505050501580156112af573d6000803e3d6000fd5b50565b6011546001600160a01b031681565b600b546001600160a01b031681565b600a546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610af7903090600401613e02565b336000908152601a602052604081205481901561134057336000908152601a602052604090205461133990439063ffffffff6125fb16565b905061134a565b6000915050610a9c565b6000611355336113c8565b90506000806002541161136a5750600061138b565b611388600254610c878461137c6113e7565b9063ffffffff61208a16565b90505b60006113bf611964610c878661137c670de0b6b3a7640000610c87601b5461137c620f42408b6120c490919063ffffffff16565b94505050505090565b6001600160a01b0381166000908152602081905260409020545b919050565b6000610b476113f4611ac2565b61141d6113ff611c0c565b61141d61140a61118e565b61141d611415611d1d565b61141d611909565b9063ffffffff61269616565b611431611624565b61144d5760405162461bcd60e51b8152600401610c1d90613f94565b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600780546001600160a01b0319169055565b6013546001600160a01b031681565b6000806114b16113e7565b6002549091506114d390610c8783670de0b6b3a764000063ffffffff61208a16565b91505090565b601a6020526000908152604090205481565b60006114f5611789565b601c5490915060ff16600481111561150957fe5b81600481111561151557fe5b14611522576115226126bb565b600061152c611ac2565b11156115c757600181600481111561154057fe5b141561155b57611556611551611ac2565b612780565b6115c7565b600481600481111561156957fe5b141561157f5761155661157a611ac2565b6128fe565b600281600481111561158d57fe5b14156115a35761155661159e611ac2565b6129a0565b60038160048111156115b157fe5b14156115c7576115c76115c2611ac2565b612a3f565b601c805482919060ff191660018360048111156115e057fe5b021790555050565b6017546001600160a01b031681565b600c546001600160a01b031681565b6007546001600160a01b031690565b600f546001600160a01b031681565b6007546000906001600160a01b031661163b611e90565b6001600160a01b031614905090565b601254600b546040516370a0823160e01b81526000926001600160a01b03908116926370a0823192610af79290911690600401613df4565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a945780601f10610a6957610100808354040283529160200191610a94565b600a54600954611708916001600160a01b03918216911660001963ffffffff612ab216565b600f5460095461172d916001600160a01b03918216911660001963ffffffff612ab216565b611753611738611e3c565b6009546001600160a01b03169060001963ffffffff612ab216565b600b54600954611778916001600160a01b03918216911660001963ffffffff612ab216565b565b600d546001600160a01b031681565b6011546009546040516303622f8f60e61b815260009283928392839283926001600160a01b039182169263d88be3c0926117c7921690600401613df4565b60006040518083038186803b1580156117df57600080fd5b505afa1580156117f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261181b91908101906134b3565b929750909550935091506000905084156118325750835b8084111561183d5750825b808311156118485750815b808211156118535750805b60008186141561186557506002611891565b8482141561187557506004611891565b8382141561188557506003611891565b82821415611891575060015b9550505050505090565b6000610abc6118a8611e90565b84610bd6856040518060600160405280602581526020016142fb60259139600160006118d2611e90565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61205e16565b6000806119146112d0565b90508015610b4757610ac0670de0b6b3a7640000610c87600a60009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119b1919081019061355d565b849063ffffffff61208a16565b6000610abc6119cb611e90565b8484611f48565b6119da611624565b6119f65760405162461bcd60e51b8152600401610c1d90613f94565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90611a249033908590600401613e10565b602060405180830381600087803b158015611a3e57600080fd5b505af1158015611a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a769190810190613477565b505050565b600954600d546040516370a0823160e01b81526000926001600160a01b03908116926370a0823192610af79290911690600401613df4565b6012546001600160a01b031681565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610af7903090600401613e02565b600680546001019081905581611b1b5760405162461bcd60e51b8152600401610c1d90613ff4565b611b236113e7565b600855600954611b44906001600160a01b031633308563ffffffff612b7816565b336000908152601a60205260408120439055600854611b695750600882905581611b87565b611b84600854610c876002548661208a90919063ffffffff16565b90505b611b8f6113e7565b600855611b9c3382612ba2565b611ba46114eb565b5060065481146110d55760405162461bcd60e51b8152600401610c1d90614024565b611bce611624565b611bea5760405162461bcd60e51b8152600401610c1d90613f94565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b600e546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610af7903090600401613e02565b600954600f546040516370a0823160e01b81526000926001600160a01b03908116926370a0823192610af79290911690600401613df4565b60105481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b601b5481565b611cb4611624565b611cd05760405162461bcd60e51b8152600401610c1d90613f94565b601b55565b61196481565b60185481565b611ce9611624565b611d055760405162461bcd60e51b8152600401610c1d90613f94565b6112af81612c62565b6014546001600160a01b031681565b600080611d28610ac6565b90508015610b4757600b54604051630359f7eb60e11b81526001600160a01b03909116906306b3efd690611d60903090600401613e02565b60206040518083038186803b158015611d7857600080fd5b505afa158015611d8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ac0919081019061355d565b600a546001600160a01b031681565b600c5460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b916004808301926020929190829003018186803b158015611e0457600080fd5b505afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b47919081019061336d565b600c546040805163076b7fbb60e51b815290516000926001600160a01b03169163ed6ff760916004808301926020929190829003018186803b158015611e0457600080fd5b6009546001600160a01b031681565b3390565b6001600160a01b038316611eba5760405162461bcd60e51b8152600401610c1d90613fe4565b6001600160a01b038216611ee05760405162461bcd60e51b8152600401610c1d90613f34565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611f3b90859061407f565b60405180910390a3505050565b6001600160a01b038316611f6e5760405162461bcd60e51b8152600401610c1d90613fc4565b6001600160a01b038216611f945760405162461bcd60e51b8152600401610c1d90613f04565b611fd7816040518060600160405280602681526020016142ad602691396001600160a01b038616600090815260208190526040902054919063ffffffff61205e16565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461200c908263ffffffff61269616565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f3b90859061407f565b600081848411156120825760405162461bcd60e51b8152600401610c1d9190613ef3565b505050900390565b60008261209957506000610ac0565b828202828482816120a657fe5b0414610bdf5760405162461bcd60e51b8152600401610c1d90613f74565b6000610bdf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ce4565b600081816121126112d0565b905080156121f9576121336001612127611909565b9063ffffffff6125fb16565b8411156121e55761214f61214a6001612127611909565b612d1b565b6009546040516370a0823160e01b81526121de916001600160a01b0316906370a0823190612181903090600401613e02565b60206040518083038186803b15801561219957600080fd5b505afa1580156121ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121d1919081019061355d565b839063ffffffff6125fb16565b93506121f9565b6121ee84612d1b565b6001925050506113e2565b61220161118e565b9050801561226a57612211611c3d565b84111561226157612228612223611c3d565b612d79565b6009546040516370a0823160e01b815261225a916001600160a01b0316906370a0823190612181903090600401613e02565b935061226a565b6121ee84612d79565b612272610ac6565b905080156122f457612287600161212761164a565b8411156122eb5761229b600161212761164a565b90506122b26122ad600161212761164a565b612e81565b6009546040516370a0823160e01b81526122e4916001600160a01b0316906370a0823190612181903090600401613e02565b93506122f4565b6121ee81612e81565b6122fc611c0c565b90508015610bdb5761230c611a7b565b84111561235c5761232361231e611a7b565b612edf565b6009546040516370a0823160e01b8152612355916001600160a01b0316906370a0823190612181903090600401613e02565b9350610bdb565b6121ee84612edf565b60135460145460009161238b916001600160a01b0390811691168363ffffffff612ab216565b6013546014546123ae916001600160a01b0391821691168463ffffffff612ab216565b6040805160028082526060808301845292602083019080388339505060145482519293506001600160a01b0316918391506000906123e857fe5b6001600160a01b03928316602091820292909201015260155482519116908290600190811061241357fe5b6001600160a01b039283166020918202929092010152601354606091166318cbafe5856000853061244c4261070863ffffffff61269616565b6040518663ffffffff1660e01b815260040161246c9594939291906140c9565b600060405180830381600087803b15801561248657600080fd5b505af115801561249a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124c29190810190613442565b9050806001815181106124d157fe5b602002602001015192505050919050565b6040805160028082526060808301845260009390929190602083019080388339505060155482519293506001600160a01b03169183915060009061252257fe5b6001600160a01b03928316602091820292909201015260175482519116908290600190811061254d57fe5b6001600160a01b03928316602091820292909201015260135460609116637ff36ab585600085816125864261070863ffffffff61269616565b6040518663ffffffff1660e01b81526004016125a5949392919061408d565b6000604051808303818588803b1580156125be57600080fd5b505af11580156125d2573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526124c29190810190613442565b6000610bdf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061205e565b604051611a7690849063a9059cbb60e01b9061265f9086908690602401613e6e565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612f0f565b600082820183811015610bdf5760405162461bcd60e51b8152600401610c1d90613f54565b60006126c56112d0565b905080156126dd576126dd61214a6001612127611909565b6126e561118e565b90508015612710576126f5611c3d565b81111561270757612704611c3d565b90505b61271081612d79565b612718610ac6565b9050801561274d5761272d600161212761164a565b81111561274457612741600161212761164a565b90505b61274d81612e81565b612755611c0c565b905080156112af57612765611a7b565b81111561277757612774611a7b565b90505b6112af81612edf565b604080516001808252818301909252606091816020015b61279f613171565b8152602001906001900390816127975790505090506040518060400160405280306001600160a01b031681526020016000815250816000815181106127e057fe5b60200260200101819052506127f3613188565b60408051608081019091526001815260208101600081526020016000815260200184905290506128216131b1565b600081819052506000602082015260408082018390526010546060808401919091523060a0840152815160018082528184019093529091816020015b6128656131b1565b81526020019060019003908161285d579050509050818160008151811061288857fe5b6020908102919091010152600f5460405163a67a6a4560e01b81526001600160a01b039091169063a67a6a45906128c59087908590600401613ea4565b600060405180830381600087803b1580156128df57600080fd5b505af11580156128f3573d6000803e3d6000fd5b505050505050505050565b600b546040516340c10f1960e01b81526000916001600160a01b0316906340c10f19906129319030908690600401613e10565b602060405180830381600087803b15801561294b57600080fd5b505af115801561295f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612983919081019061355d565b116112af5760405162461bcd60e51b8152600401610c1d90614004565b600a5460405163140e25ad60e31b81526001600160a01b039091169063a0712d68906129d090849060040161407f565b602060405180830381600087803b1580156129ea57600080fd5b505af11580156129fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a22919081019061355d565b156112af5760405162461bcd60e51b8152600401610c1d90613f44565b612a47611dbf565b600954604051636968703360e11b81526001600160a01b039283169263d2d0e06692612a7d929116908590600090600401613e7c565b600060405180830381600087803b158015612a9757600080fd5b505af1158015612aab573d6000803e3d6000fd5b5050505050565b801580612b3a5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90612ae89030908690600401613e2b565b60206040518083038186803b158015612b0057600080fd5b505afa158015612b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b38919081019061355d565b155b612b565760405162461bcd60e51b8152600401610c1d90614034565b604051611a7690849063095ea7b360e01b9061265f9086908690602401613e6e565b604051612b9c9085906323b872dd60e01b9061265f90879087908790602401613e46565b50505050565b6001600160a01b038216612bc85760405162461bcd60e51b8152600401610c1d90614054565b600254612bdb908263ffffffff61269616565b6002556001600160a01b038216600090815260208190526040902054612c07908263ffffffff61269616565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612c5690859061407f565b60405180910390a35050565b6001600160a01b038116612c885760405162461bcd60e51b8152600401610c1d90613f24565b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b60008183612d055760405162461bcd60e51b8152600401610c1d9190613ef3565b506000838581612d1157fe5b0495945050505050565b6000612d256112d0565b90506000612d31611909565b905082811015612d535760405162461bcd60e51b8152600401610c1d90613fd4565b6000612d6e600161141d84610c87878963ffffffff61208a16565b9050612b9c81612ff4565b604080516001808252818301909252606091816020015b612d98613171565b815260200190600190039081612d905790505090506040518060400160405280306001600160a01b03168152602001600081525081600081518110612dd957fe5b6020026020010181905250612dec613188565b6040805160808101909152600080825260208201908152602001600081526020018490529050612e1a6131b1565b600181819052506000602082015260408082018390526010546060808401919091523060a0840152815160018082528184019093529091816020015b612e5e6131b1565b815260200190600190039081612e56579050509050818160008151811061288857fe5b6000612e8b610ac6565b90506000612e97611d1d565b905082811015612eb95760405162461bcd60e51b8152600401610c1d90613fd4565b6000612ed4600161141d84610c87878963ffffffff61208a16565b9050612b9c81613093565b600e5460405163db006a7560e01b81526001600160a01b039091169063db006a7590612a7d90849060040161407f565b612f21826001600160a01b0316613135565b612f3d5760405162461bcd60e51b8152600401610c1d90614044565b60006060836001600160a01b031683604051612f599190613de8565b6000604051808303816000865af19150503d8060008114612f96576040519150601f19603f3d011682016040523d82523d6000602084013e612f9b565b606091505b509150915081612fbd5760405162461bcd60e51b8152600401610c1d90613f64565b805115612b9c5780806020019051612fd89190810190613477565b612b9c5760405162461bcd60e51b8152600401610c1d90614014565b600a5460405163db006a7560e01b81526001600160a01b039091169063db006a759061302490849060040161407f565b602060405180830381600087803b15801561303e57600080fd5b505af1158015613052573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613076919081019061355d565b156112af5760405162461bcd60e51b8152600401610c1d90613f14565b600b54604051632770a7eb60e21b81526000916001600160a01b031690639dc29fac906130c69030908690600401613e10565b602060405180830381600087803b1580156130e057600080fd5b505af11580156130f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613118919081019061355d565b116112af5760405162461bcd60e51b8152600401610c1d90613f84565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906131695750808214155b949350505050565b604080518082019091526000808252602082015290565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b6040805161010081018252600080825260208201529081016131d1613188565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b8035610ac081614286565b8051610ac081614286565b600082601f83011261322a57600080fd5b815161323d61323882614151565b61412a565b9150818183526020840193506020810190508385602084028201111561326257600080fd5b60005b8381101561328e57816132788882613344565b8452506020928301929190910190600101613265565b5050505092915050565b8051610ac08161429a565b8035610ac0816142a3565b600082601f8301126132bf57600080fd5b81516132cd61323882614172565b915080825260208301602083018583830111156132e957600080fd5b6132f4838284614232565b50505092915050565b60006040828403121561330f57600080fd5b613319604061412a565b905060006133278484613298565b825250602061333884848301613344565b60208301525092915050565b8051610ac0816142a3565b60006020828403121561336157600080fd5b60006131698484613203565b60006020828403121561337f57600080fd5b6000613169848461320e565b6000806040838503121561339e57600080fd5b60006133aa8585613203565b92505060206133bb85828601613203565b9150509250929050565b6000806000606084860312156133da57600080fd5b60006133e68686613203565b93505060206133f786828701613203565b9250506040613408868287016132a3565b9150509250925092565b6000806040838503121561342557600080fd5b60006134318585613203565b92505060206133bb858286016132a3565b60006020828403121561345457600080fd5b815167ffffffffffffffff81111561346b57600080fd5b61316984828501613219565b60006020828403121561348957600080fd5b60006131698484613298565b6000602082840312156134a757600080fd5b600061316984846132a3565b600080600080600060a086880312156134cb57600080fd5b855167ffffffffffffffff8111156134e257600080fd5b6134ee888289016132ae565b95505060206134ff88828901613344565b945050604061351088828901613344565b935050606061352188828901613344565b925050608061353288828901613344565b9150509295509295909350565b60006040828403121561355157600080fd5b600061316984846132fd565b60006020828403121561356f57600080fd5b60006131698484613344565b600061358783836135be565b505060200190565b6000610bdf8383613cc1565b60006135a78383613db6565b505060400190565b6135b8816141f4565b82525050565b6135b8816141ad565b60006135d2826141a0565b6135dc81856141a4565b93506135e78361419a565b8060005b838110156136155781516135ff888261357b565b975061360a8361419a565b9250506001016135eb565b509495945050505050565b600061362b826141a0565b61363581856141a4565b9350836020820285016136478561419a565b8060005b858110156136815784840389528151613664858261358f565b945061366f8361419a565b60209a909a019992505060010161364b565b5091979650505050505050565b6000613699826141a0565b6136a381856141a4565b93506136ae8361419a565b8060005b838110156136155781516136c6888261359b565b97506136d18361419a565b9250506001016136b2565b6135b8816141b8565b60006136f0826141a0565b6136fa81856113e2565b935061370a818560208601614232565b9290920192915050565b600061371f826141a0565b61372981856141a4565b9350613739818560208601614232565b6137428161425e565b9093019392505050565b6135b8816141fb565b6135b881614206565b6135b881614211565b6135b88161421c565b6135b881614227565b60006137866023836141a4565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b602082015260400192915050565b60006137cb6019836141a4565b7f434f4d504f554e443a207769746864726177206661696c656400000000000000815260200192915050565b60006138046026836141a4565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061384c6022836141a4565b7f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b602082015260400192915050565b60006138906017836141a4565b7f434f4d504f554e443a20737570706c79206661696c6564000000000000000000815260200192915050565b60006138c9601b836141a4565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006139026020836141a4565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b600061393b6021836141a4565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061397e6018836141a4565b7f46554c4352554d3a207769746864726177206661696c65640000000000000000815260200192915050565b60006139b76020836141a4565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006139f06014836141a4565b73696e73756666696369656e742062616c616e636560601b815260200192915050565b6000613a20601f836141a4565b7f7769746864726177206d7573742062652067726561746572207468616e203000815260200192915050565b6000613a596025836141a4565b7f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b602082015260400192915050565b6000613aa06012836141a4565b71696e73756666696369656e742066756e647360701b815260200192915050565b6000613ace6024836141a4565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b602082015260400192915050565b6000613b14601e836141a4565b7f6465706f736974206d7573742062652067726561746572207468616e20300000815260200192915050565b6000613b4d6016836141a4565b7511955310d495534e881cdd5c1c1b1e4819985a5b195960521b815260200192915050565b6000613b7f602a836141a4565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000613bcb601f836141a4565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b6000613c046036836141a4565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b602082015260400192915050565b6000613c5c601f836141a4565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b6000613c95601f836141a4565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300815260200192915050565b8051600090610160840190613cd68582613755565b506020830151613ce96020860182613dd6565b506040830151613cfc6040860182613d6c565b506060830151613d0f60c0860182613dd6565b506080830151613d2260e0860182613dd6565b5060a0830151613d366101008601826135be565b5060c0830151613d4a610120860182613dd6565b5060e0830151848203610140860152613d638282613714565b95945050505050565b80516080830190613d7d84826136dc565b506020820151613d90602085018261375e565b506040820151613da3604085018261375e565b506060820151612b9c6060850182613dd6565b80516040830190613dc784826135be565b506020820151612b9c60208501825b6135b881610a9c565b6135b8816141ee565b6000610bdf82846136e5565b60208101610ac082846135be565b60208101610ac082846135af565b60408101613e1e82856135af565b610bdf6020830184613dd6565b60408101613e3982856135be565b610bdf60208301846135be565b60608101613e5482866135be565b613e6160208301856135be565b6131696040830184613dd6565b60408101613e1e82856135be565b60608101613e8a82866135be565b613e976020830185613dd6565b6131696040830184613770565b60408082528101613eb5818561368e565b905081810360208301526131698184613620565b60208101610ac082846136dc565b60208101610ac0828461374c565b60208101610ac08284613767565b60208082528101610bdf8184613714565b60208082528101610ac081613779565b60208082528101610ac0816137be565b60208082528101610ac0816137f7565b60208082528101610ac08161383f565b60208082528101610ac081613883565b60208082528101610ac0816138bc565b60208082528101610ac0816138f5565b60208082528101610ac08161392e565b60208082528101610ac081613971565b60208082528101610ac0816139aa565b60208082528101610ac0816139e3565b60208082528101610ac081613a13565b60208082528101610ac081613a4c565b60208082528101610ac081613a93565b60208082528101610ac081613ac1565b60208082528101610ac081613b07565b60208082528101610ac081613b40565b60208082528101610ac081613b72565b60208082528101610ac081613bbe565b60208082528101610ac081613bf7565b60208082528101610ac081613c4f565b60208082528101610ac081613c88565b606081016140728285613db6565b610bdf6040830184613dd6565b60208101610ac08284613dd6565b6080810161409b8287613dd6565b81810360208301526140ad81866135c7565b90506140bc60408301856135af565b613d636060830184613dd6565b60a081016140d78288613dd6565b6140e46020830187613dd6565b81810360408301526140f681866135c7565b905061410560608301856135af565b6141126080830184613dd6565b9695505050505050565b60208101610ac08284613ddf565b60405181810167ffffffffffffffff8111828210171561414957600080fd5b604052919050565b600067ffffffffffffffff82111561416857600080fd5b5060209081020190565b600067ffffffffffffffff82111561418957600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b6000610ac0826141e2565b151590565b806113e281614268565b806113e281614272565b806113e28161427c565b61ffff1690565b6001600160a01b031690565b60ff1690565b6000610ac0825b6000610ac0826141ad565b6000610ac0826141bd565b6000610ac0826141c7565b6000610ac0826141d1565b6000610ac0826141db565b60005b8381101561424d578181015183820152602001614235565b83811115612b9c5750506000910152565b601f01601f191690565b600281106112af57fe5b600181106112af57fe5b600581106112af57fe5b61428f816141ad565b81146112af57600080fd5b61428f816141b8565b61428f81610a9c56fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a7231582015c0ea15ad76247ce499e3fb8c066167671ee93f818961da6b0ac11c9841451d6c6578706572696d656e74616cf564736f6c63430005110040
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:17552:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14425:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14425:24:0;;;:::i;:::-;;;;;;;;;;;;;;;;6436:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6436:83:0;;;:::i;:::-;;;;;;;;15616:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15616:36:0;;;:::i;:::-;;;;;;;;3456:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3456:152:0;;;;;;;;:::i;:::-;;;;;;;;25477:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25477:116:0;;;:::i;:::-;;;;;;;;14269:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14269: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;14827:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14827:45:0;;;:::i;20841:2298::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20841:2298:0;;;;;;;;:::i;16617:126::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16617:126:0;;;;;;;;:::i;6618:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6618:83:0;;;:::i;:::-;;;;;;;;15165:55;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15165:55:0;;;;;;;;:::i;3924:210::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3924:210:0;;;;;;;;:::i;24602:166::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24602:166:0;;;:::i;14758:64::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14758:64:0;;;:::i;15472:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15472:40:0;;;:::i;17063:98::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17063:98:0;;;:::i;14504:18::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14504:18:0;;;:::i;14346:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14346:22:0;;;:::i;24772:120::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24772:120:0;;;:::i;17282:1361::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17282:1361:0;;;:::i;3036:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3036:110:0;;;;;;;;:::i;31269:217::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31269:217:0;;;:::i;2198:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2198:140:0;;;:::i;14612:73::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14612:73:0;;;:::i;31492:154::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31492:154:0;;;:::i;15225:53::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15225:53:0;;;;;;;;:::i;25839:547::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25839:547:0;;;:::i;14877:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14877:23:0;;;:::i;:::-;;;;;;;;14373:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14373:19:0;;;:::i;1893:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1893:87:0;;;:::i;14454:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14454:19:0;;;:::i;2098:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2098:94:0;;;:::i;25148:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25148:118:0;;;:::i;6525:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6525:87:0;;;:::i;24115:253::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24115:253:0;;;:::i;14397:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14397:23:0;;;:::i;23145:706::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23145:706:0;;;:::i;4140:261::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4140:261:0;;;;;;;;:::i;24896:248::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24896:248:0;;;:::i;3152:158::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3152:158:0;;;;;;;;:::i;16920:137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16920:137:0;;;;;;;;:::i;25597:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25597:117:0;;;:::i;14527:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14527:19:0;;;:::i;24374:107::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24374:107:0;;;:::i;18649:618::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18649:618:0;;;;;;;;:::i;16804:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16804:110:0;;;;;;;;:::i;25718:115::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25718:115:0;;;:::i;24485:113::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24485:113:0;;;:::i;14478:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14478:21:0;;;:::i;3316:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3316:134:0;;;;;;;;:::i;15333:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15333:41:0;;;:::i;17167:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17167:109:0;;;;;;;;:::i;15283:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15283:45:0;;;:::i;14905:49::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14905:49:0;;;:::i;2344:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2344:117:0;;;;;;;;:::i;14690:63::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14690:63:0;;;:::i;25270:203::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25270:203:0;;;:::i;14318:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14318:23:0;;;:::i;23857:120::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23857:120:0;;;:::i;23981:128::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23981:128:0;;;:::i;14293:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14293:20:0;;;:::i;14425:24::-;;;-1:-1:-1;;;;;14425: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;15616: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;25477:116::-;25554:7;;25547:40;;-1:-1:-1;;;25547:40:0;;25524:7;;-1:-1:-1;;;;;25554:7:0;;25547:25;;:40;;25581:4;;25547:40;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25547:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25547: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;25547:40:0;;;;;;;;;25540:47;;25477:116;:::o;14269: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;14827:45::-;;;-1:-1:-1;;;;;14827:45:0;;:::o;20841:2298::-;6881:13;:18;;6898:1;6881:18;;;;;20932:11;20924:55;;;;-1:-1:-1;;;20924:55:0;;;;;;;;;;;;;;;;;20988:16;21007:21;21017:10;21007:9;:21::i;:::-;20988:40;;21056:8;21045:7;:19;;21037:52;;;;-1:-1:-1;;;21037:52:0;;;;;;;;;21105:22;:20;:22::i;:::-;21098:4;:29;21151:22;21176:19;:17;:19::i;:::-;21151:44;;21219:29;21251:37;21275:12;;21252:17;21261:7;21252:4;;:8;;:17;;;;:::i;:::-;21251:23;:37;:23;:37;:::i;:::-;21321:67;;;;;;;;;;;;;;;;;;;;21331:10;-1:-1:-1;21321:21:0;;;;;;;;;;;;21219:69;;-1:-1:-1;21321:67:0;;:21;21347:7;;21321:67;:25;:67;:::i;:::-;21307:10;21297:9;:21;;;;;;;;;;;;:91;;;;21412:54;;;;;;;;;;;;;;;;;;;:12;;:54;;21429:7;;21412:54;:16;:54;:::i;:::-;21397:12;:69;21480:41;;21509:1;;21489:10;;21480:41;;;;21513:7;;21480:41;;;;;;;;;;21549:5;;21542:38;;-1:-1:-1;;;21542:38:0;;21530:9;;-1:-1:-1;;;;;21549:5:0;;21542:23;;:38;;21574:4;;21542:38;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21542:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21542: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;21542:38:0;;;;;;;;;21530:50;;21597:21;21593:1;:25;21589:125;;;21631:73;21645:58;21671:1;21645:58;;;;;;;;;;;;;;;;;:21;:25;;:58;;;;;:::i;:::-;21631:13;:73::i;:::-;;21589:125;21783:18;21804:30;:21;21830:3;21804:30;:25;:30;:::i;:::-;21862:10;21843:30;;;;:18;:30;;;;;;;21876:12;21843:45;;21897:9;;:46;;-1:-1:-1;;;21897:46:0;;21783:51;;-1:-1:-1;;;;;;21897:9:0;;:18;;:46;;21928:14;;21897:46;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21897:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21897: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;21897:46:0;;;;;;;;;;22110:22;22135:20;22144:10;22135:8;:20::i;:::-;22194:9;;:31;;-1:-1:-1;;;22194:31:0;;22110:45;;-1:-1:-1;22164:27:0;;-1:-1:-1;;;;;22194:9:0;;;;:19;;:31;;22164:27;;22194:31;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22194:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22194: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;22194:31:0;;;;;;;;;22164:61;;22260:19;;22238;:41;22234:739;;;22357:17;22377:31;22404:3;22377:22;:14;22396:2;22377:22;:18;:22;:::i;:31::-;22357:51;;22481:19;22490:9;22481:8;:19::i;:::-;-1:-1:-1;22551:22:0;22576:30;22602:3;22576:21;:14;22595:1;22576:21;:18;:21;:::i;:30::-;22650:22;;:47;;22551:55;;-1:-1:-1;;;;;;22650:22:0;;:47;;;;;22551:55;;22650:22;:47;:22;:47;22551:55;22650:22;:47;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22650:47:0;22234:739;;;;;22916:22;;:47;;22858:14;;-1:-1:-1;;;;;22916:22:0;;:47;;;;;22858:14;;22833:22;22916:47;22833:22;22916:47;22858:14;22916:22;:47;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22916:47:0;22234:739;;22981:77;23008:10;23020:37;:21;23046:10;23020:37;:25;:37;:::i;:::-;22988:5;;-1:-1:-1;;;;;22988:5:0;;22981:77;;:26;:77;:::i;:::-;23091:22;:20;:22::i;:::-;23084:4;:29;23122:11;:9;:11::i;:::-;6957:1;;;;;;;6993:13;;6977:12;:29;6969:73;;;;-1:-1:-1;;;6969:73:0;;;;;;;;;20841:2298;;:::o;16617:126::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;16703:22;:34;;-1:-1:-1;;;;;;16703:34:0;-1:-1:-1;;;;;16703:34:0;;;;;;;;;;16617:126::o;6618:83::-;6684:9;;;;6618:83;:::o;15165:55::-;;;;;;;;;;;;;:::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;24602:166::-;24646:7;24664:14;;:::i;:::-;24686:4;;24706:22;;;;;;;;24719:4;24706:22;;24686:4;24706:22;;;;24730:6;;24681:56;;-1:-1:-1;;;24681:56:0;;-1:-1:-1;;;;;24686:4:0;;;;24681:24;;:56;;24706:22;24681:56;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24681:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24681: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;24681:56:0;;;;;;;;;24753:9;;;;-1:-1:-1;;24602:166:0;:::o;14758:64::-;;;-1:-1:-1;;;;;14758:64:0;;:::o;15472:40::-;15509:3;15472:40;:::o;17063:98::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;17116:7;:5;:7::i;:::-;-1:-1:-1;;;;;17116:16:0;:39;17133:21;17116:39;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17116:39:0;17063:98::o;14504:18::-;;;-1:-1:-1;;;;;14504:18:0;;:::o;14346:22::-;;;-1:-1:-1;;;;;14346:22:0;;:::o;24772:120::-;24852:8;;24845:41;;-1:-1:-1;;;24845:41:0;;24820:7;;-1:-1:-1;;;;;24852:8:0;;24845:26;;:41;;24880:4;;24845:41;;;;17282:1361;17397:10;17331:7;17378:30;;;:18;:30;;;;;;17331:7;;17378:34;17374:151;;17474:10;17455:30;;;;:18;:30;;;;;;17438:48;;:12;;:48;:16;:48;:::i;:::-;17423:63;;17374:151;;;17516:1;17509:8;;;;;17374:151;18192:16;18211:21;18221:10;18211:9;:21::i;:::-;18192:40;;18261:30;18318:1;18302:12;;:17;18298:170;;-1:-1:-1;18355:1:0;18298:170;;;18404:56;18447:12;;18405:36;18432:8;18405:22;:20;:22::i;:::-;:26;:36;:26;:36;:::i;18404:56::-;18379:81;;18298:170;18474:22;18499:110;15324:4;18499:90;18576:12;18499:72;18566:4;18499:62;18542:18;;18499:38;15509:3;18499:22;:26;;:38;;;;:::i;:110::-;18474:135;-1:-1:-1;;;;;17282:1361:0;:::o;3036:110::-;-1:-1:-1;;;;;3120:18:0;;3093:7;3120:18;;;;;;;;;;;3036:110;;;;:::o;31269:217::-;31322:4;31342:138;31470:9;:7;:9::i;:::-;31342:115;31443:13;:11;:13::i;:::-;31342:88;31416:13;:11;:13::i;:::-;31342:61;31379:23;:21;:23::i;:::-;31342: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;14612:73::-;;;-1:-1:-1;;;;;14612:73:0;;:::o;31492:154::-;31545:4;31558:10;31571:22;:20;:22::i;:::-;31627:12;;31558:35;;-1:-1:-1;31607:33:0;;:15;31558:35;31617:4;31607:15;:9;:15;:::i;:33::-;31600:40;;;31492:154;:::o;15225:53::-;;;;;;;;;;;;;:::o;25839:547::-;25874:18;25895:11;:9;:11::i;:::-;25934:8;;25874:32;;-1:-1:-1;25934:8:0;;25919:23;;;;;;;;:11;:23;;;;;;;;;25915:60;;25953:14;:12;:14::i;:::-;25999:1;25987:9;:7;:9::i;:::-;:13;25983:367;;;26030:11;26015;:26;;;;;;;;;26011:332;;;26054:22;26066:9;:7;:9::i;:::-;26054:11;:22::i;:::-;26011:332;;;26111:14;26096:11;:29;;;;;;;;;26092:251;;;26138:25;26153:9;:7;:9::i;:::-;26138:14;:25::i;26092:251::-;26198:15;26183:11;:30;;;;;;;;;26179:164;;;26226:26;26242:9;:7;:9::i;:::-;26226:15;:26::i;26179:164::-;26287:11;26272;:26;;;;;;;;;26268:75;;;26311:22;26323:9;:7;:9::i;:::-;26311:11;:22::i;:::-;26358:8;:22;;26369:11;;26358:8;-1:-1:-1;;26358:22:0;;26369:11;26358:22;;;;;;;;;;;;;25839:547;:::o;14877:23::-;;;-1:-1:-1;;;;;14877:23:0;;:::o;14373:19::-;;;-1:-1:-1;;;;;14373:19:0;;:::o;1893:87::-;1966:6;;-1:-1:-1;;;;;1966:6:0;1893:87;:::o;14454:19::-;;;-1:-1:-1;;;;;14454: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;25148:118::-;25236:4;;25252:7;;25229:31;;-1:-1:-1;;;25229:31:0;;25204:7;;-1:-1:-1;;;;;25236:4:0;;;;25229:22;;:31;;25252:7;;;;25229:31;;;;6525:87;6597:7;6590:14;;;;;;;;-1:-1:-1;;6590:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6564:13;;6590:14;;6597:7;;6590:14;;6597:7;6590:14;;;;;;;;;;;;;;;;;;;;;;;;24115:253;24181:8;;24162:5;;24155:45;;-1:-1:-1;;;;;24162:5:0;;;;24181:8;-1:-1:-1;;24155:45:0;:25;:45;:::i;:::-;24235:4;;24216:5;;24209:41;;-1:-1:-1;;;;;24216:5:0;;;;24235:4;-1:-1:-1;;24209:41:0;:25;:41;:::i;:::-;24259:50;24285:13;:11;:13::i;:::-;24266:5;;-1:-1:-1;;;;;24266:5:0;;-1:-1:-1;;24259:50:0;:25;:50;:::i;:::-;24344:7;;24325:5;;24318:44;;-1:-1:-1;;;;;24325:5:0;;;;24344:7;-1:-1:-1;;24318:44:0;:25;:44;:::i;:::-;24115:253::o;14397:23::-;;;-1:-1:-1;;;;;14397:23:0;;:::o;23145:706::-;23273:3;;23288:5;;23259:35;;-1:-1:-1;;;23259:35:0;;23187:6;;;;;;;;;;-1:-1:-1;;;;;23273:3:0;;;;23259:28;;:35;;23288:5;;23259:35;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23259:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23259:35:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;23259:35:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;23259:35:0;;;;;;;;;23202:92;;-1:-1:-1;23202:92:0;;-1:-1:-1;23202:92:0;-1:-1:-1;23202:92:0;-1:-1:-1;23301:11:0;;-1:-1:-1;23327:10:0;;23323:43;;-1:-1:-1;23354:4:0;23323:43;23383:3;23376:4;:10;23372:43;;;-1:-1:-1;23403:4:0;23372:43;23432:3;23425:4;:10;23421:43;;;-1:-1:-1;23452:4:0;23421:43;23481:3;23474:4;:10;23470:43;;;-1:-1:-1;23501:4:0;23470:43;23521:18;23564:11;;;23560:261;;;-1:-1:-1;23600:15:0;23560:261;;;23640:4;23633:3;:11;23629:192;;;-1:-1:-1;23669:14:0;23629:192;;;23708:4;23701:3;:11;23697:124;;;-1:-1:-1;23737:11:0;23697:124;;;23773:4;23766:3;:11;23762:59;;;-1:-1:-1;23802:11:0;23762:59;23834:11;-1:-1:-1;;;;;;23145: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;24896:248::-;24951:7;25000:9;25012:17;:15;:17::i;:::-;25000:29;-1:-1:-1;25040:5:0;;25036:88;;25060:56;25111:4;25060:46;25075:8;;;;;;;;;-1:-1:-1;;;;;25075:8:0;-1:-1:-1;;;;;25066:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25066:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25066: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;25066:39:0;;;;;;;;;25060:1;;:46;:5;:46;:::i;3152:158::-;3221:4;3238:42;3248:12;:10;:12::i;:::-;3262:9;3273:6;3238:9;:42::i;16920:137::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;17007:44;;-1:-1:-1;;;17007:44:0;;-1:-1:-1;;;;;17007:23:0;;;;;:44;;17031:10;;17043:7;;17007:44;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17007:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17007: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;17007:44:0;;;;;;;;;;16920:137;;:::o;25597:117::-;25682:5;;25699:8;;25675:33;;-1:-1:-1;;;25675:33:0;;25650:7;;-1:-1:-1;;;;;25682:5:0;;;;25675:23;;:33;;25699:8;;;;25675:33;;;;14527:19;;;-1:-1:-1;;;;;14527:19:0;;:::o;24374:107::-;24444:5;;24437:38;;-1:-1:-1;;;24437:38:0;;24414:7;;-1:-1:-1;;;;;24444:5:0;;24437:23;;:38;;24469:4;;24437:38;;;;18649:618;6881:13;:18;;6898:1;6881:18;;;;;18737:11;18729:54;;;;-1:-1:-1;;;18729:54:0;;;;;;;;;18797:22;:20;:22::i;:::-;18790:4;:29;18833:5;;18826:66;;-1:-1:-1;;;;;18833:5:0;18857:10;18877:4;18884:7;18826:66;:30;:66;:::i;:::-;18933:10;18914:30;;;;:18;:30;;;;;18947:12;18914:45;;19040:4;;19036:140;;-1:-1:-1;19085:4:0;:14;;;19069:7;19036:140;;;19131:37;19163:4;;19132:25;19144:12;;19132:7;:11;;:25;;;;:::i;19131:37::-;19122:46;;19036:140;19189:22;:20;:22::i;:::-;19182:4;:29;19218:25;19224:10;19236:6;19218:5;:25::i;:::-;19250:11;:9;:11::i;:::-;6957:1;6993:13;;6977:12;:29;6969:73;;;;-1:-1:-1;;;6969:73:0;;;;;;;;16804:110;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;16878:13;:30;;-1:-1:-1;;;;;;16878:30:0;-1:-1:-1;;;;;16878:30:0;;;;;;;;;;16804:110::o;25718:115::-;25792:9;;25785:42;;-1:-1:-1;;;25785:42:0;;25762:7;;-1:-1:-1;;;;;25792:9:0;;25785:27;;:42;;25821:4;;25785:42;;;;24485:113;24570:5;;24587:4;;24563:29;;-1:-1:-1;;;24563:29:0;;24538:7;;-1:-1:-1;;;;;24570:5:0;;;;24563:23;;:29;;24587:4;;;;24563:29;;;;14478:21;;;;:::o;3316:134::-;-1:-1:-1;;;;;3415:18:0;;;3388:7;3415:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3316:134::o;15333:41::-;;;;:::o;17167:109::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;17242:18;:28;17167:109::o;15283:45::-;15324:4;15283:45;:::o;14905: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;14690:63::-;;;-1:-1:-1;;;;;14690:63:0;;:::o;25270:203::-;25324:7;25340:9;25352:16;:14;:16::i;:::-;25340:28;-1:-1:-1;25379:5:0;;25375:78;;25407:7;;25399:46;;-1:-1:-1;;;25399:46:0;;-1:-1:-1;;;;;25407:7:0;;;;25399:31;;:46;;25439:4;;25399:46;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25399:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25399: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;25399:46:0;;;;;;;;14318:23;;;-1:-1:-1;;;;;14318:23:0;;:::o;23857:120::-;23949:4;;23920:51;;;-1:-1:-1;;;23920:51:0;;;;23897:7;;-1:-1:-1;;;;;23949:4:0;;23920:49;;:51;;;;;;;;;;;;;;23949:4;23920:51;;;5:2:-1;;;;30:1;27;20:12;5:2;23920:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23920: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;23920:51:0;;;;;;;;23981:128;24077:4;;24048:55;;;-1:-1:-1;;;24048:55:0;;;;24025:7;;-1:-1:-1;;;;;24077:4:0;;24048:53;;:55;;;;;;;;;;;;;;24077:4;24048:55;;;5:2:-1;;;;30:1;27;20:12;14293:20:0;;;-1:-1:-1;;;;;14293: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;;;;;;;;;;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;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;27825:1503::-;27883:4;27917:7;27883:4;27950:17;:15;:17::i;:::-;27933:34;-1:-1:-1;27978:10:0;;27974:308;;28013:31;28042:1;28013:24;:22;:24::i;:::-;:28;:31;:28;:31;:::i;:::-;28003:7;:41;27999:276;;;28057:54;28079:31;28108:1;28079:24;:22;:24::i;:31::-;28057:21;:54::i;:::-;28154:5;;28147:38;;-1:-1:-1;;;28147:38:0;;28132:54;;-1:-1:-1;;;;;28154:5:0;;28147:23;;:38;;28179:4;;28147:38;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28147:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28147: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;28147:38:0;;;;;;;;;28132:10;;:54;:14;:54;:::i;:::-;28122:64;;27999:276;;;28213:30;28235:7;28213:21;:30::i;:::-;28261:4;28254:11;;;;;;27999:276;28299:13;:11;:13::i;:::-;28290:22;-1:-1:-1;28323:10:0;;28319:274;;28358:22;:20;:22::i;:::-;28348:7;:32;28344:242;;;28393:37;28407:22;:20;:22::i;:::-;28393:13;:37::i;:::-;28473:5;;28466:38;;-1:-1:-1;;;28466:38:0;;28451:54;;-1:-1:-1;;;;;28473:5:0;;28466:23;;:38;;28498:4;;28466:38;;;;28451:54;28441:64;;28344:242;;;28532:22;28546:7;28532:13;:22::i;28344:242::-;28610:16;:14;:16::i;:::-;28601:25;-1:-1:-1;28637:10:0;;28633:359;;28672:32;28702:1;28672:25;:23;:25::i;:32::-;28662:7;:42;28658:327;;;28726:32;28756:1;28726:25;:23;:25::i;:32::-;28717:41;;28769:54;28790:32;28820:1;28790:25;:23;:25::i;:32::-;28769:20;:54::i;:::-;28866:5;;28859:38;;-1:-1:-1;;;28859:38:0;;28844:54;;-1:-1:-1;;;;;28866:5:0;;28859:23;;:38;;28891:4;;28859:38;;;;28844:54;28834:64;;28658:327;;;28925:28;28946:6;28925:20;:28::i;28658:327::-;29009:13;:11;:13::i;:::-;29000:22;-1:-1:-1;29033:10:0;;29029:274;;29068:22;:20;:22::i;:::-;29058:7;:32;29054:242;;;29103:37;29117:22;:20;:22::i;:::-;29103:13;:37::i;:::-;29183:5;;29176:38;;-1:-1:-1;;;29176:38:0;;29161:54;;-1:-1:-1;;;;;29183:5:0;;29176:23;;:38;;29208:4;;29176:38;;;;29161:54;29151:64;;29054:242;;;29242:22;29256:7;29242:13;:22::i;19355:849::-;19449:13;;19432:3;;19407:7;;19425:41;;-1:-1:-1;;;;;19432:3:0;;;;19449:13;19407:7;19425:41;:23;:41;:::i;:::-;19499:13;;19482:3;;19475:47;;-1:-1:-1;;;;;19482:3:0;;;;19499:13;19514:7;19475:47;:23;:47;:::i;:::-;19555:16;;;19569:1;19555:16;;;19531:21;19555:16;;;;;19531:21;19555:16;;;;;105:10:-1;19555:16:0;88:34:-1;-1:-1;;19590:3:0;;19580:7;;;;-1:-1:-1;;;;;;19590:3:0;;19580:7;;-1:-1:-1;19590:3:0;;19580:7;;;;-1:-1:-1;;;;;19580:13:0;;;:7;;;;;;;;;:13;19612:4;;19602:7;;19612:4;;;19602;;19612;;19602:7;;;;;;-1:-1:-1;;;;;19602:14:0;;;:7;;;;;;;;;:14;20082:13;;20049:21;;20082:13;20073:45;20119:7;20082:13;20137:4;20151;20158:13;:3;20166:4;20158:13;:7;:13;:::i;:::-;20073:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20073:99:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20073:99:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;20073:99:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;20073:99:0;;;;;;;;;20049:123;;20188:7;20196:1;20188:10;;;;;;;;;;;;;;20181:17;;;;19355:849;;;:::o;20344:425::-;20439:16;;;20453:1;20439:16;;;20415:21;20439:16;;;;;20399:7;;20415:21;;20439:16;20453:1;20439:16;;;;;105:10:-1;20439:16:0;88:34:-1;-1:-1;;20472:4:0;;20462:7;;;;-1:-1:-1;;;;;;20472:4:0;;20462:7;;-1:-1:-1;20472:4:0;;20462:7;;;;-1:-1:-1;;;;;20462:14:0;;;:7;;;;;;;;;:14;20501:9;;20483:7;;20501:9;;;20483:4;;20501:9;;20483:7;;;;;;-1:-1:-1;;;;;20483:28:0;;;:7;;;;;;;;;:28;20643:13;;20610:21;;20643:13;20634:45;20686:10;20643:13;20707:4;20643:13;20725;:3;20733:4;20725:13;:7;:13;:::i;:::-;20634:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20634:105:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20634:105:0;;;;;;;39:16:-1;36:1;17:17;2:54;101:4;20634:105:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;20634:105:0;;;;;;;;7268:136;7326:7;7353:43;7357:1;7360;7353:43;;;;;;;;;;;;;;;;;:3;:43::i;9581:176::-;9690:58;;9664:85;;9683:5;;-1:-1:-1;;;9713:23:0;9690:58;;9738:2;;9742:5;;9690:58;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;9690:58:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;9690:58:0;;;179:29:-1;;;;160:49;;;9664:18:0;:85::i;7081:181::-;7139:7;7171:5;;;7195:6;;;;7187:46;;;;-1:-1:-1;;;7187:46:0;;;;;;;;26392:761;26432:14;26449:17;:15;:17::i;:::-;26432:34;-1:-1:-1;26477:10:0;;26473:87;;26498:54;26520:31;26549:1;26520:24;:22;:24::i;26498:54::-;26575:13;:11;:13::i;:::-;26566:22;-1:-1:-1;26599:10:0;;26595:151;;26633:22;:20;:22::i;:::-;26624:6;:31;26620:89;;;26677:22;:20;:22::i;:::-;26668:31;;26620:89;26717:21;26731:6;26717:13;:21::i;:::-;26761:16;:14;:16::i;:::-;26752:25;-1:-1:-1;26788:10:0;;26784:178;;26822:32;26852:1;26822:25;:23;:25::i;:32::-;26813:6;:41;26809:109;;;26876:32;26906:1;26876:25;:23;:25::i;:32::-;26867:41;;26809:109;26926:28;26947:6;26926:20;:28::i;:::-;26977:13;:11;:13::i;:::-;26968:22;-1:-1:-1;27001:10:0;;26997:151;;27035:22;:20;:22::i;:::-;27026:6;:31;27022:89;;;27079:22;:20;:22::i;:::-;27070:31;;27022:89;27119:21;27133:6;27119:13;:21::i;29334:568::-;29411:13;;;29422:1;29411:13;;;;;;;;;29389:19;;29411:13;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29389:35;;29444:22;;;;;;;;29457:4;-1:-1:-1;;;;;29444:22:0;;;;;29464:1;29444:22;;;29433:5;29439:1;29433:8;;;;;;;;;;;;;:33;;;;29477:22;;:::i;:::-;29502:70;;;;;;;;;29514:4;29502:70;;;;;-1:-1:-1;29502:70:0;;;;29543:20;29502:70;;;;;;;29477:95;-1:-1:-1;29581:21:0;;:::i;:::-;29628:18;29611:3;29628:18;29611:35;;-1:-1:-1;29671:1:0;29655:13;;;:17;29681:10;;;;:16;;;29728:6;;29706:19;;;;:28;;;;29770:4;29743:16;;;:32;29813:19;;29830:1;29813:19;;;;;;;;;29706;;29813;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29786:46;;29851:3;29841:4;29846:1;29841:7;;;;;;;;;;;;;;;;;:13;29870:4;;29865:31;;-1:-1:-1;;;29865:31:0;;-1:-1:-1;;;;;29870:4:0;;;;29865:18;;:31;;29884:5;;29891:4;;29865:31;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29865:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29865:31:0;;;;29334:568;;;;;:::o;30011:144::-;30082:7;;30074:44;;-1:-1:-1;;;30074:44:0;;30121:1;;-1:-1:-1;;;;;30082:7:0;;30074:21;;:44;;30104:4;;30111:6;;30074:44;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30074:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30074: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;30074:44:0;;;;;;;;;:48;30066:83;;;;-1:-1:-1;;;30066:83:0;;;;;;;;30159:134;30232:8;;30223:31;;-1:-1:-1;;;30223:31:0;;-1:-1:-1;;;;;30232:8:0;;;;30223:23;;:31;;30247:6;;30223:31;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30223:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30223: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;30223:31:0;;;;;;;;;:36;30215:72;;;;-1:-1:-1;;;30215:72:0;;;;;;;;29908:99;29965:9;:7;:9::i;:::-;29984:5;;29960:41;;-1:-1:-1;;;29960:41:0;;-1:-1:-1;;;;;29960:23:0;;;;;;:41;;29984:5;;;29991:6;;29984:5;;29960:41;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29960:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29960:41:0;;;;29908:99;:::o;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;;;;9765:204;9892:68;;9866:95;;9885:5;;-1:-1:-1;;;9915:27:0;9892:68;;9944:4;;9950:2;;9954:5;;9892:68;;;;9866:95;9765:204;;;;:::o;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;5147:37;;;;5177:6;;5147:37;;;;;;;;;;4884:308;;:::o;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;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;27159:328::-;27223:9;27235:17;:15;:17::i;:::-;27223:29;;27259:10;27272:24;:22;:24::i;:::-;27259:37;;27317:7;27311:2;:13;;27303:44;;;;-1:-1:-1;;;27303:44:0;;;;;;;;;27401:14;27418:31;27447:1;27418:24;27439:2;27419:14;:1;27425:7;27419:14;:5;:14;:::i;27418:31::-;27401:48;;27456:25;27474:6;27456:17;:25::i;30691:572::-;30770:13;;;30781:1;30770:13;;;;;;;;;30748:19;;30770:13;;;;;;:::i;:::-;;;;;;;;;;;;;;;;30748:35;;30803:22;;;;;;;;30816:4;-1:-1:-1;;;;;30803:22:0;;;;;30823:1;30803:22;;;30792:5;30798:1;30792:8;;;;;;;;;;;;;:33;;;;30836:22;;:::i;:::-;30861:71;;;;;;;;;-1:-1:-1;30861:71:0;;;;;;;;;;;30903:20;30861:71;;;;;;;30836:96;-1:-1:-1;30941:21:0;;:::i;:::-;30988:19;30971:3;30988:19;30971:36;;-1:-1:-1;31032:1:0;31016:13;;;:17;31042:10;;;;:16;;;31089:6;;31067:19;;;;:28;;;;31131:4;31104:16;;;:32;31174:19;;31191:1;31174:19;;;;;;;;;31067;;31174;;;;;;:::i;:::-;;;;;;;;;;;;;;;;31147:46;;31212:3;31202:4;31207:1;31202:7;;;;;;;27493:324;27556:9;27568:16;:14;:16::i;:::-;27556:28;;27591:10;27604:23;:21;:23::i;:::-;27591:36;;27648:7;27642:2;:13;;27634:44;;;;-1:-1:-1;;;27634:44:0;;;;;;;;;27732:14;27749:31;27778:1;27749:24;27770:2;27750:14;:1;27756:7;27750:14;:5;:14;:::i;27749:31::-;27732:48;;27787:24;27804:6;27787:16;:24::i;30297:92::-;30358:9;;30351:32;;-1:-1:-1;;;30351:32:0;;-1:-1:-1;;;;;30358:9:0;;;;30351:24;;:32;;30376:6;;30351:32;;;;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;;;;;;;;30545:140;30620:8;;30611:33;;-1:-1:-1;;;30611:33:0;;-1:-1:-1;;;;;30620:8:0;;;;30611:25;;:33;;30637:6;;30611:33;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30611:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30611: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;30611:33:0;;;;;;;;;:38;30603:76;;;;-1:-1:-1;;;30603:76:0;;;;;;;;30393:148;30466:7;;30458:44;;-1:-1:-1;;;30458:44:0;;30505:1;;-1:-1:-1;;;;;30466:7:0;;30458:21;;:44;;30488:4;;30495:6;;30458:44;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30458:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30458: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;30458:44:0;;;;;;;;;:48;30450:85;;;;-1:-1:-1;;;30450: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:17552::-;;;;;;;;;;-1:-1:-1;14097:17552:0;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;14097:17552:0;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;14097:17552:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14097:17552: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;;1319:130;1386:20;;1411:33;1386:20;1411:33;;1457:444;;1570:3;1563:4;1555:6;1551:17;1547:27;1537:2;;1588:1;1585;1578:12;1537:2;1618:6;1612:13;1640:65;1655:49;1697:6;1655:49;;1640:65;1631:74;;1725:6;1718:5;1711:21;1761:4;1753:6;1749:17;1794:4;1787:5;1783:16;1829:3;1820:6;1815:3;1811:16;1808:25;1805:2;;;1846:1;1843;1836:12;1805:2;1856:39;1888:6;1883:3;1878;1856:39;;;1530:371;;;;;;;;1934:494;;2055:4;2043:9;2038:3;2034:19;2030:30;2027:2;;;2073:1;2070;2063:12;2027:2;2091:20;2106:4;2091:20;;;2082:29;-1:-1;2161:1;2193:57;2246:3;2226:9;2193:57;;;2168:83;;-1:-1;2313:2;2346:60;2402:3;2378:22;;;2346:60;;;2339:4;2332:5;2328:16;2321:86;2272:146;2021:407;;;;;2572:134;2650:13;;2668:33;2650:13;2668:33;;2713:241;;2817:2;2805:9;2796:7;2792:23;2788:32;2785:2;;;2833:1;2830;2823:12;2785:2;2868:1;2885:53;2930:7;2910:9;2885:53;;2961:263;;3076:2;3064:9;3055:7;3051:23;3047:32;3044:2;;;3092:1;3089;3082:12;3044:2;3127:1;3144:64;3200:7;3180:9;3144:64;;3495:366;;;3616:2;3604:9;3595:7;3591:23;3587:32;3584:2;;;3632:1;3629;3622:12;3584:2;3667:1;3684:53;3729:7;3709:9;3684:53;;;3674:63;;3646:97;3774:2;3792:53;3837:7;3828:6;3817:9;3813:22;3792:53;;;3782:63;;3753:98;3578:283;;;;;;3868:491;;;;4006:2;3994:9;3985:7;3981:23;3977:32;3974:2;;;4022:1;4019;4012:12;3974:2;4057:1;4074:53;4119:7;4099:9;4074:53;;;4064:63;;4036:97;4164:2;4182:53;4227:7;4218:6;4207:9;4203:22;4182:53;;;4172:63;;4143:98;4272:2;4290:53;4335:7;4326:6;4315:9;4311:22;4290:53;;;4280:63;;4251:98;3968:391;;;;;;4366:366;;;4487:2;4475:9;4466:7;4462:23;4458:32;4455:2;;;4503:1;4500;4493:12;4455:2;4538:1;4555:53;4600:7;4580:9;4555:53;;;4545:63;;4517:97;4645:2;4663:53;4708:7;4699:6;4688:9;4684:22;4663:53;;4739:392;;4879:2;4867:9;4858:7;4854:23;4850:32;4847:2;;;4895:1;4892;4885:12;4847:2;4930:24;;4974:18;4963:30;;4960:2;;;5006:1;5003;4996:12;4960:2;5026:89;5107:7;5098:6;5087:9;5083:22;5026:89;;5138:257;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5301:1;5318:61;5371:7;5351:9;5318:61;;5402:241;;5506:2;5494:9;5485:7;5481:23;5477:32;5474:2;;;5522:1;5519;5512:12;5474:2;5557:1;5574:53;5619:7;5599:9;5574:53;;5650:908;;;;;;5843:3;5831:9;5822:7;5818:23;5814:33;5811:2;;;5860:1;5857;5850:12;5811:2;5895:24;;5939:18;5928:30;;5925:2;;;5971:1;5968;5961:12;5925:2;5991:74;6057:7;6048:6;6037:9;6033:22;5991:74;;;5981:84;;5874:197;6102:2;6120:64;6176:7;6167:6;6156:9;6152:22;6120:64;;;6110:74;;6081:109;6221:2;6239:64;6295:7;6286:6;6275:9;6271:22;6239:64;;;6229:74;;6200:109;6340:2;6358:64;6414:7;6405:6;6394:9;6390:22;6358:64;;;6348:74;;6319:109;6459:3;6478:64;6534:7;6525:6;6514:9;6510:22;6478:64;;;6468:74;;6438:110;5805:753;;;;;;;;;6565:305;;6701:2;6689:9;6680:7;6676:23;6672:32;6669:2;;;6717:1;6714;6707:12;6669:2;6752:1;6769:85;6846:7;6826:9;6769:85;;7125:263;;7240:2;7228:9;7219:7;7215:23;7211:32;7208:2;;;7256:1;7253;7246:12;7208:2;7291:1;7308:64;7364:7;7344:9;7308:64;;7396:173;;7483:46;7525:3;7517:6;7483:46;;;-1:-1;;7558:4;7549:14;;7476:93;7578:253;;7727:98;7821:3;7813:6;7727:98;;7840:249;;7963:86;8045:3;8037:6;7963:86;;;-1:-1;;8078:4;8069:14;;7956:133;8097:142;8188:45;8227:5;8188:45;;;8183:3;8176:58;8170:69;;;8246:137;8345:32;8371:5;8345:32;;8651:690;;8796:54;8844:5;8796:54;;;8863:86;8942:6;8937:3;8863:86;;;8856:93;;8970:56;9020:5;8970:56;;;9046:7;9074:1;9059:260;9084:6;9081:1;9078:13;9059:260;;;9151:6;9145:13;9172:63;9231:3;9216:13;9172:63;;;9165:70;;9252:60;9305:6;9252:60;;;9242:70;-1:-1;;9106:1;9099:9;9059:260;;;-1:-1;9332:3;;8775:566;-1:-1;;;;;8775:566;9416:1040;;9609:78;9681:5;9609:78;;;9700:110;9803:6;9798:3;9700:110;;;9693:117;;9833:3;9875:4;9867:6;9863:17;9858:3;9854:27;9902:80;9976:5;9902:80;;;10002:7;10030:1;10015:402;10040:6;10037:1;10034:13;10015:402;;;10102:9;10096:4;10092:20;10087:3;10080:33;10147:6;10141:13;10169:112;10276:4;10261:13;10169:112;;;10161:120;;10298:84;10375:6;10298:84;;;10405:4;10396:14;;;;;10288:94;-1:-1;;10062:1;10055:9;10015:402;;;-1:-1;10430:4;;9588:868;-1:-1;;;;;;;9588:868;10519:834;;10700:72;10766:5;10700:72;;;10785:104;10882:6;10877:3;10785:104;;;10778:111;;10910:74;10978:5;10910:74;;;11004:7;11032:1;11017:314;11042:6;11039:1;11036:13;11017:314;;;11109:6;11103:13;11130:99;11225:3;11210:13;11130:99;;;11123:106;;11246:78;11317:6;11246:78;;;11236:88;-1:-1;;11064:1;11057:9;11017:314;;11361:94;11428:21;11443:5;11428:21;;11573:356;;11701:38;11733:5;11701:38;;;11751:88;11832:6;11827:3;11751:88;;;11744:95;;11844:52;11889:6;11884:3;11877:4;11870:5;11866:16;11844:52;;;11908:16;;;;;11681:248;-1:-1;;11681:248;11936:315;;12032:34;12060:5;12032:34;;;12078:60;12131:6;12126:3;12078:60;;;12071:67;;12143:52;12188:6;12183:3;12176:4;12169:5;12165:16;12143:52;;;12216:29;12238:6;12216:29;;;12207:39;;;;12012:239;-1:-1;;;12012:239;12258:154;12355:51;12400:5;12355:51;;12419:142;12505:50;12549:5;12505:50;;12568:156;12661:57;12712:5;12661:57;;12888:144;12980:46;13020:5;12980:46;;13039:140;13129:44;13167:5;13129:44;;13541:372;;13701:67;13765:2;13760:3;13701:67;;;13801:34;13781:55;;-1:-1;;;13865:2;13856:12;;13849:27;13904:2;13895:12;;13687:226;-1:-1;;13687:226;13922:325;;14082:67;14146:2;14141:3;14082:67;;;14182:27;14162:48;;14238:2;14229:12;;14068:179;-1:-1;;14068:179;14256:375;;14416:67;14480:2;14475:3;14416:67;;;14516:34;14496:55;;-1:-1;;;14580:2;14571:12;;14564:30;14622:2;14613:12;;14402:229;-1:-1;;14402:229;14640:371;;14800:67;14864:2;14859:3;14800:67;;;14900:34;14880:55;;-1:-1;;;14964:2;14955:12;;14948:26;15002:2;14993:12;;14786:225;-1:-1;;14786:225;15020:323;;15180:67;15244:2;15239:3;15180:67;;;15280:25;15260:46;;15334:2;15325:12;;15166:177;-1:-1;;15166:177;15352:327;;15512:67;15576:2;15571:3;15512:67;;;15612:29;15592:50;;15670:2;15661:12;;15498:181;-1:-1;;15498:181;15688:332;;15848:67;15912:2;15907:3;15848:67;;;15948:34;15928:55;;16011:2;16002:12;;15834:186;-1:-1;;15834:186;16029:370;;16189:67;16253:2;16248:3;16189:67;;;16289:34;16269:55;;-1:-1;;;16353:2;16344:12;;16337:25;16390:2;16381:12;;16175:224;-1:-1;;16175:224;16408:324;;16568:67;16632:2;16627:3;16568:67;;;16668:26;16648:47;;16723:2;16714:12;;16554:178;-1:-1;;16554:178;16741:332;;16901:67;16965:2;16960:3;16901:67;;;17001:34;16981:55;;17064:2;17055:12;;16887:186;-1:-1;;16887:186;17082:320;;17242:67;17306:2;17301:3;17242:67;;;-1:-1;;;17322:43;;17393:2;17384:12;;17228:174;-1:-1;;17228:174;17411:331;;17571:67;17635:2;17630:3;17571:67;;;17671:33;17651:54;;17733:2;17724:12;;17557:185;-1:-1;;17557:185;17751:374;;17911:67;17975:2;17970:3;17911:67;;;18011:34;17991:55;;-1:-1;;;18075:2;18066:12;;18059:29;18116:2;18107:12;;17897:228;-1:-1;;17897:228;18134:318;;18294:67;18358:2;18353:3;18294:67;;;-1:-1;;;18374:41;;18443:2;18434:12;;18280:172;-1:-1;;18280:172;18461:373;;18621:67;18685:2;18680:3;18621:67;;;18721:34;18701:55;;-1:-1;;;18785:2;18776:12;;18769:28;18825:2;18816:12;;18607:227;-1:-1;;18607:227;18843:330;;19003:67;19067:2;19062:3;19003:67;;;19103:32;19083:53;;19164:2;19155:12;;18989:184;-1:-1;;18989:184;19182:322;;19342:67;19406:2;19401:3;19342:67;;;-1:-1;;;19422:45;;19495:2;19486:12;;19328:176;-1:-1;;19328:176;19513:379;;19673:67;19737:2;19732:3;19673:67;;;19773:34;19753:55;;-1:-1;;;19837:2;19828:12;;19821:34;19883:2;19874:12;;19659:233;-1:-1;;19659:233;19901:331;;20061:67;20125:2;20120:3;20061:67;;;20161:33;20141:54;;20223:2;20214:12;;20047:185;-1:-1;;20047:185;20241:391;;20401:67;20465:2;20460:3;20401:67;;;20501:34;20481:55;;-1:-1;;;20565:2;20556:12;;20549:46;20623:2;20614:12;;20387:245;-1:-1;;20387:245;20641:331;;20801:67;20865:2;20860:3;20801:67;;;20901:33;20881:54;;20963:2;20954:12;;20787:185;-1:-1;;20787:185;20981:331;;21141:67;21205:2;21200:3;21141:67;;;21241:33;21221:54;;21303:2;21294:12;;21127:185;-1:-1;;21127:185;21381:1611;21598:23;;21381:1611;;21524:6;21515:16;;;21627:76;21519:3;21598:23;21627:76;;;21546:163;21787:4;21780:5;21776:16;21770:23;21799:63;21856:4;21851:3;21847:14;21833:12;21799:63;;;21719:149;21943:4;21936:5;21932:16;21926:23;21955:117;22066:4;22061:3;22057:14;22043:12;21955:117;;;21878:200;22162:4;22155:5;22151:16;22145:23;22174:63;22231:4;22226:3;22222:14;22208:12;22174:63;;;22088:155;22329:4;22322:5;22318:16;22312:23;22341:63;22398:4;22393:3;22389:14;22375:12;22341:63;;;22253:157;22491:4;22484:5;22480:16;22474:23;22503:65;22560:6;22555:3;22551:16;22537:12;22503:65;;;22420:154;22657:4;22650:5;22646:16;22640:23;22669:65;22726:6;22721:3;22717:16;22703:12;22669:65;;;22584:156;22813:4;22806:5;22802:16;22796:23;22867:3;22861:4;22857:14;22848:6;22843:3;22839:16;22832:40;22887:67;22949:4;22935:12;22887:67;;;22879:75;21497:1495;-1:-1;;;;;21497:1495;23062:817;23265:23;;23199:4;23190:14;;;23294:57;23194:3;23265:23;23294:57;;;23219:138;23438:4;23431:5;23427:16;23421:23;23450:83;23527:4;23522:3;23518:14;23504:12;23450:83;;;23367:172;23611:4;23604:5;23600:16;23594:23;23623:80;23697:4;23692:3;23688:14;23674:12;23623:80;;;23549:160;23783:4;23776:5;23772:16;23766:23;23795:63;23852:4;23847:3;23843:14;23829:12;23795:63;;23935:459;24125:23;;24058:4;24049:14;;;24154:63;24053:3;24125:23;24154:63;;;24078:145;24298:4;24291:5;24287:16;24281:23;24310:63;24367:4;24362:3;24358:14;24344:12;24926:103;24999:24;25017:5;24999:24;;25156:107;25235:22;25251:5;25235:22;;25270:262;;25414:93;25503:3;25494:6;25414:93;;25539:213;25657:2;25642:18;;25671:71;25646:9;25715:6;25671:71;;25759:229;25885:2;25870:18;;25899:79;25874:9;25951:6;25899:79;;26247:340;26401:2;26386:18;;26415:79;26390:9;26467:6;26415:79;;;26505:72;26573:2;26562:9;26558:18;26549:6;26505:72;;26594:324;26740:2;26725:18;;26754:71;26729:9;26798:6;26754:71;;;26836:72;26904:2;26893:9;26889:18;26880:6;26836:72;;26925:435;27099:2;27084:18;;27113:71;27088:9;27157:6;27113:71;;;27195:72;27263:2;27252:9;27248:18;27239:6;27195:72;;;27278;27346:2;27335:9;27331:18;27322:6;27278:72;;27367:324;27513:2;27498:18;;27527:71;27502:9;27571:6;27527:71;;27698:449;27879:2;27864:18;;27893:71;27868:9;27937:6;27893:71;;;27975:72;28043:2;28032:9;28028:18;28019:6;27975:72;;;28058:79;28133:2;28122:9;28118:18;28109:6;28058:79;;28154:788;28484:2;28498:47;;;28469:18;;28559:144;28469:18;28689:6;28559:144;;;28551:152;;28751:9;28745:4;28741:20;28736:2;28725:9;28721:18;28714:48;28776:156;28927:4;28918:6;28776:156;;28949:201;29061:2;29046:18;;29075:65;29050:9;29113:6;29075:65;;29157:241;29289:2;29274:18;;29303:85;29278:9;29361:6;29303:85;;29405:231;29532:2;29517:18;;29546:80;29521:9;29599:6;29546:80;;29643:301;29781:2;29795:47;;;29766:18;;29856:78;29766:18;29920:6;29856:78;;29951:407;30142:2;30156:47;;;30127:18;;30217:131;30127:18;30217:131;;30365:407;30556:2;30570:47;;;30541:18;;30631:131;30541:18;30631:131;;30779:407;30970:2;30984:47;;;30955:18;;31045:131;30955:18;31045:131;;31193:407;31384:2;31398:47;;;31369:18;;31459:131;31369:18;31459:131;;31607:407;31798:2;31812:47;;;31783:18;;31873:131;31783:18;31873:131;;32021:407;32212:2;32226:47;;;32197:18;;32287:131;32197:18;32287:131;;32435:407;32626:2;32640:47;;;32611:18;;32701:131;32611:18;32701:131;;32849:407;33040:2;33054:47;;;33025:18;;33115:131;33025:18;33115:131;;33263:407;33454:2;33468:47;;;33439:18;;33529:131;33439:18;33529:131;;33677:407;33868:2;33882:47;;;33853:18;;33943:131;33853:18;33943:131;;34091:407;34282:2;34296:47;;;34267:18;;34357:131;34267:18;34357:131;;34505:407;34696:2;34710:47;;;34681:18;;34771:131;34681:18;34771:131;;34919:407;35110:2;35124:47;;;35095:18;;35185:131;35095:18;35185:131;;35333:407;35524:2;35538:47;;;35509:18;;35599:131;35509:18;35599:131;;35747:407;35938:2;35952:47;;;35923:18;;36013:131;35923:18;36013:131;;36161:407;36352:2;36366:47;;;36337:18;;36427:131;36337:18;36427:131;;36575:407;36766:2;36780:47;;;36751:18;;36841:131;36751:18;36841:131;;36989:407;37180:2;37194:47;;;37165:18;;37255:131;37165:18;37255:131;;37403:407;37594:2;37608:47;;;37579:18;;37669:131;37579:18;37669:131;;37817:407;38008:2;38022:47;;;37993:18;;38083:131;37993:18;38083:131;;38231:407;38422:2;38436:47;;;38407:18;;38497:131;38407:18;38497:131;;38645:407;38836:2;38850:47;;;38821:18;;38911:131;38821:18;38911:131;;39059:404;39245:2;39230:18;;39259:111;39234:9;39343:6;39259:111;;;39381:72;39449:2;39438:9;39434:18;39425:6;39381:72;;39470:213;39588:2;39573:18;;39602:71;39577:9;39646:6;39602:71;;39690:711;39950:3;39935:19;;39965:71;39939:9;40009:6;39965:71;;;40084:9;40078:4;40074:20;40069:2;40058:9;40054:18;40047:48;40109:108;40212:4;40203:6;40109:108;;;40101:116;;40228:80;40304:2;40293:9;40289:18;40280:6;40228:80;;;40319:72;40387:2;40376:9;40372:18;40363:6;40319:72;;40408:823;40696:3;40681:19;;40711:71;40685:9;40755:6;40711:71;;;40793:72;40861:2;40850:9;40846:18;40837:6;40793:72;;;40913:9;40907:4;40903:20;40898:2;40887:9;40883:18;40876:48;40938:108;41041:4;41032:6;40938:108;;;40930:116;;41057:80;41133:2;41122:9;41118:18;41109:6;41057:80;;;41148:73;41216:3;41205:9;41201:19;41192:6;41148:73;;;40667:564;;;;;;;;;41238:205;41352:2;41337:18;;41366:67;41341:9;41406:6;41366:67;;41450:256;41512:2;41506:9;41538:17;;;41613:18;41598:34;;41634:22;;;41595:62;41592:2;;;41670:1;41667;41660:12;41592:2;41686;41679:22;41490:216;;-1:-1;41490:216;41713:304;;41872:18;41864:6;41861:30;41858:2;;;41904:1;41901;41894:12;41858:2;-1:-1;41939:4;41927:17;;;41992:15;;41795:222;42024:322;;42168:18;42160:6;42157:30;42154:2;;;42200:1;42197;42190:12;42154:2;-1:-1;42331:4;42267;42244:17;;;;-1:-1;;42240:33;42321:15;;42091:255;42353:151;42477:4;42468:14;;42425:79;42869:137;42972:12;;42943:63;44112:178;44230:19;;;44279:4;44270:14;;44223:67;45200:91;;45262:24;45280:5;45262:24;;45404:85;45470:13;45463:21;;45446:43;45575:136;45652:5;45658:48;45652:5;45658:48;;45718:150;45802:5;45808:55;45802:5;45808:55;;46026:128;46099:5;46105:44;46099:5;46105:44;;46161:84;46233:6;46222:18;;46205:40;46252:121;-1:-1;;;;;46314:54;;46297:76;46459:81;46530:4;46519:16;;46502:38;46547:129;;46634:37;46665:5;46683:149;;46776:51;46821:5;46776:51;;46968:136;;47060:39;47093:5;47060:39;;47111:150;;47210:46;47250:5;47210:46;;47419:128;;47507:35;47536:5;47507:35;;47554:114;;47640:23;47657:5;47640:23;;47919:268;47984:1;47991:101;48005:6;48002:1;47999:13;47991:101;;;48072:11;;;48066:18;48053:11;;;48046:39;48027:2;48020:10;47991:101;;;48107:6;48104:1;48101:13;48098:2;;;-1:-1;;48172:1;48154:16;;48147:27;47968:219;48195:97;48283:2;48263:14;-1:-1;;48259:28;;48243:49;48300:106;48384:1;48377:5;48374:12;48364:2;;48390:9;48413:113;48504:1;48497:5;48494:12;48484:2;;48510:9;48650:102;48730:1;48723:5;48720:12;48710:2;;48736:9;48759:117;48828:24;48846:5;48828:24;;;48821:5;48818:35;48808:2;;48867:1;48864;48857:12;49023:111;49089:21;49104:5;49089:21;;49141:117;49210:24;49228:5;49210:24;
Swarm Source
bzzr://15c0ea15ad76247ce499e3fb8c066167671ee93f818961da6b0ac11c9841451d
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.