Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
Farming
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at moonbeam.moonscan.io on 2022-08-22 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: contracts/libraries/AdminUpgradeable.sol pragma solidity >=0.8.0; abstract contract AdminUpgradeable { address public admin; address public adminCandidate; function _initializeAdmin(address _admin) internal { require(admin == address(0), "admin already set"); admin = _admin; } function candidateConfirm() external { require(msg.sender == adminCandidate, "not Candidate"); emit AdminChanged(admin, adminCandidate); admin = adminCandidate; adminCandidate = address(0); } function setAdminCandidate(address _candidate) external onlyAdmin { adminCandidate = _candidate; emit Candidate(_candidate); } modifier onlyAdmin { require(msg.sender == admin, "not admin"); _; } event Candidate(address indexed newAdmin); event AdminChanged(address indexed oldAdmin, address indexed newAdmin); } // File: contracts/core/interfaces/IFactory.sol pragma solidity >=0.8.0; interface IFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); event PairCreateLocked( address indexed caller ); event PairCreateUnlocked( address indexed caller ); event BootstrapSetted( address indexed tokenA, address indexed tokenB, address indexed bootstrap ); event FeetoUpdated( address indexed feeto ); event FeeBasePointUpdated( uint8 basePoint ); function feeto() external view returns (address); function feeBasePoint() external view returns (uint8); function lockForPairCreate() external view returns (bool); function getPair(address tokenA, address tokenB) external view returns (address pair); function getBootstrap(address tokenA, address tokenB) external view returns (address bootstrap); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); } // File: contracts/core/interfaces/IPair.sol pragma solidity >=0.8.0; interface IPair { event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: contracts/libraries/Math.sol pragma solidity >=0.8.0; // a library for performing various math operations library Math { function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } } // File: contracts/libraries/Helper.sol pragma solidity >=0.8.0; library Helper { using Math for uint256; function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, "Helper: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "Helper: ZERO_ADDRESS"); } function pairFor( address factory, address tokenA, address tokenB ) internal view returns (address pair) { return IFactory(factory).getPair(tokenA, tokenB); } function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) internal pure returns (uint256 amountB) { require(amountA > 0, "INSUFFICIENT_AMOUNT"); require(reserveA > 0 && reserveB > 0, "INSUFFICIENT_LIQUIDITY"); amountB = amountA.mul(reserveB) / reserveA; } function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint256 reserveA, uint256 reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); (uint256 reserve0, uint256 reserve1, ) = IPair( pairFor(factory, tokenA, tokenB) ).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0x23b872dd, from, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::transferFrom: transferFrom failed" ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0xa9059cbb, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::safeTransfer: transfer failed" ); } function safeTransferNativeCurrency(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require( success, "TransferHelper::safeTransferNativeCurrency: NativeCurrency transfer failed" ); } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountOut) { require(amountIn > 0, "Helper: INSUFFICIENT_INPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "Helper: INSUFFICIENT_LIQUIDITY" ); uint256 amountInWithFee = amountIn.mul(997); uint256 numerator = amountInWithFee.mul(reserveOut); uint256 denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountIn) { require(amountOut > 0, "Helper: INSUFFICIENT_OUTPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "Helper: INSUFFICIENT_LIQUIDITY" ); uint256 numerator = reserveIn.mul(amountOut).mul(1000); uint256 denominator = reserveOut.sub(amountOut).mul(997); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint256 amountIn, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "Helper: INVALID_PATH"); amounts = new uint256[](path.length); amounts[0] = amountIn; for (uint256 i; i < path.length - 1; i++) { (uint256 reserveIn, uint256 reserveOut) = getReserves( factory, path[i], path[i + 1] ); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } function getAmountsIn( address factory, uint256 amountOut, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "Helper: INVALID_PATH"); amounts = new uint256[](path.length); amounts[amounts.length - 1] = amountOut; for (uint256 i = path.length - 1; i > 0; i--) { (uint256 reserveIn, uint256 reserveOut) = getReserves( factory, path[i - 1], path[i] ); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } // File: contracts/periphery/Farming.sol pragma solidity >=0.8.0; contract Farming is AdminUpgradeable { using Math for uint256; // Info of each user. struct UserInfo { uint256 amount; // How many farming tokens that user has provided. uint256[] rewardDebt; // Reward debt. See explanation below. // pending reward = (user.amount * pool.accRewardPerShare) - user.rewardDebt // Whenever a user stakes or redeems farming tokens to a pool. Here's what happens: // 1. The pool's `accRewardPerShare` (and `lastRewardBlock`) gets updated. // 2. User add pending reward to his/her info. // 3. User's `amount` gets updated. // 4. User's `rewardDebt` gets updated. uint256[] pending; // Pending rewards. uint256 nextClaimableBlock; // Next Block user can claim rewards. } // Info of each pool. struct PoolInfo { address farmingToken; // Address of farming token contract. address[] rewardTokens; // Reward tokens. uint256[] rewardPerBlock; // Reward tokens created per block. uint256[] accRewardPerShare; // Accumulated rewards per share, times 1e12. uint256[] remainingRewards; // remaining rewards in the pool. uint256 amount; // amount of farming token. uint256 lastRewardBlock; // Last block number that pools updated. uint256 startBlock; // Start block of pools. uint256 claimableInterval; // How many blocks of rewards can be claimed. } // Info of each pool. PoolInfo[] private poolInfo; // Info of each user that stakes farming tokens. mapping(uint256 => mapping(address => UserInfo)) private userInfo; event PoolAdded(address indexed farmingToken); event ClaimableBlockUpdated(uint256 indexed pid, uint256 interval); event Charged(uint256 indexed pid, address[] rewards, uint256[] amounts); event WithdrawRewards(uint256 indexed pid, address[] rewards, uint256[] amounts); event Stake(address indexed user, uint256 indexed pid, uint256 amount); event Redeem(address indexed user, uint256 indexed pid, uint256 amount); event Claim( address indexed user, uint256 indexed pid, address[] rewards, uint256[] amounts ); event EmergencyWithdraw( address indexed user, uint256 indexed pid, uint256 amount ); constructor() { _initializeAdmin(msg.sender); } function poolLength() external view returns (uint256) { return poolInfo.length; } // Add a new farming token to the pool. Can only be called by the admin. // XXX DO NOT add the same farming token more than once. Rewards will be messed up if you do. function add( address _farmingToken, address[] memory _rewardTokens, uint256[] memory _rewardPerBlock, uint256 _startBlock, uint256 _claimableInterval ) external onlyAdmin { require(_rewardTokens.length == _rewardPerBlock.length, 'INVALID_REWARDS'); uint256 lastRewardBlock = block.number > _startBlock ? block.number : _startBlock; uint256[] memory accRewardPerShare = new uint256[](_rewardTokens.length); uint256[] memory remainingRewards = new uint256[](_rewardTokens.length); poolInfo.push( PoolInfo({ farmingToken: _farmingToken, rewardTokens: _rewardTokens, rewardPerBlock: _rewardPerBlock, accRewardPerShare: accRewardPerShare, remainingRewards: remainingRewards, amount: 0, lastRewardBlock: lastRewardBlock, startBlock: _startBlock, claimableInterval: _claimableInterval }) ); emit PoolAdded(_farmingToken); } // Update the given pool's rewardPerBlock. Can only be called by the admin. function set( uint256 _pid, uint256[] memory _rewardPerBlock, bool _withUpdate ) external onlyAdmin { if (_withUpdate) { updatePool(_pid); } PoolInfo storage pool = poolInfo[_pid]; require(_rewardPerBlock.length == pool.rewardPerBlock.length, 'INVALID_REWARDS'); pool.rewardPerBlock = _rewardPerBlock; } function setClaimableBlock( uint256 _pid, uint256 _interval ) external onlyAdmin { PoolInfo storage pool = poolInfo[_pid]; pool.claimableInterval = _interval; emit ClaimableBlockUpdated(_pid, _interval); } // Charge the given pool's rewards. Can only be called by the admin. function charge( uint256 _pid, uint256[] memory _amounts ) external onlyAdmin { PoolInfo storage pool = poolInfo[_pid]; require(_amounts.length == pool.rewardTokens.length, 'INVALID_AMOUNTS'); for (uint256 i = 0; i < _amounts.length; i++) { if (_amounts[i] > 0) { Helper.safeTransferFrom( pool.rewardTokens[i], msg.sender, address(this), _amounts[i] ); pool.remainingRewards[i] = pool.remainingRewards[i].add(_amounts[i]); } } emit Charged(_pid, pool.rewardTokens, _amounts); } // Withdraw the given pool's rewards. Can only be called by the admin. function withdrawRewards( uint256 _pid, uint256[] memory _amounts ) external onlyAdmin { PoolInfo storage pool = poolInfo[_pid]; require(_amounts.length == pool.rewardTokens.length, 'INVALID_AMOUNTS'); for (uint256 i = 0; i < _amounts.length; i++) { require(_amounts[i] <= pool.remainingRewards[i], 'INVALID_AMOUNT'); if (_amounts[i] > 0) { Helper.safeTransfer( pool.rewardTokens[i], msg.sender, _amounts[i] ); pool.remainingRewards[i] = pool.remainingRewards[i].sub(_amounts[i]); } } emit WithdrawRewards(_pid, pool.rewardTokens, _amounts); } // View function to see the given pool's info. function getPoolInfo(uint256 _pid) external view returns( address farmingToken, uint256 amount, address[] memory rewardTokens, uint256[] memory rewardPerBlock, uint256[] memory accRewardPerShare, uint256 lastRewardBlock, uint256 startBlock, uint256 claimableInterval ) { PoolInfo memory pool = poolInfo[_pid]; farmingToken = pool.farmingToken; amount = pool.amount; rewardTokens = pool.rewardTokens; rewardPerBlock = pool.rewardPerBlock; accRewardPerShare = pool.accRewardPerShare; lastRewardBlock = pool.lastRewardBlock; startBlock = pool.startBlock; claimableInterval = pool.claimableInterval; } // View function to see the remaing rewards of the given pool. function getRemaingRewards(uint256 _pid) external view returns(uint256[] memory remainingRewards) { PoolInfo memory pool = poolInfo[_pid]; remainingRewards = pool.remainingRewards; } // View function to see the given pool's info of user. function getUserInfo(uint256 _pid, address _user) external view returns( uint256 amount, uint256[] memory pending, uint256[] memory rewardDebt, uint256 nextClaimableBlock ) { UserInfo memory user = userInfo[_pid][_user]; amount = user.amount; pending = user.pending; rewardDebt= user.rewardDebt; nextClaimableBlock = user.nextClaimableBlock; } // View function to see pending rewards. function pendingRewards(uint256 _pid, address _user) public view returns(uint256[] memory rewards, uint256 nextClaimableBlock) { PoolInfo memory pool = poolInfo[_pid]; UserInfo memory user = userInfo[_pid][_user]; uint256 farmingTokenSupply = pool.amount; rewards = user.pending; if (block.number >= pool.lastRewardBlock && user.pending.length > 0 && farmingTokenSupply != 0) { for (uint256 i = 0; i < pool.accRewardPerShare.length; i++) { uint256 reward = pool.rewardPerBlock[i].mul( block.number.sub(pool.lastRewardBlock) ); uint256 accRewardPerShare = pool.accRewardPerShare[i].add( reward.mul(1e12) / farmingTokenSupply ); rewards[i] = user.pending[i].add( (user.amount.mul(accRewardPerShare) / 1e12).sub(user.rewardDebt[i]) ); } } nextClaimableBlock = user.nextClaimableBlock; } // View function to see current periods. function getPeriodsSinceStart(uint256 _pid) public view returns(uint256 periods) { PoolInfo memory pool = poolInfo[_pid]; if (block.number <= pool.startBlock || pool.claimableInterval == 0) return 0; uint256 blocksSinceStart = block.number.sub(pool.startBlock); periods = (blocksSinceStart / pool.claimableInterval).add(1); if (blocksSinceStart % pool.claimableInterval == 0) { periods = periods - 1; } } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; if (block.number <= pool.lastRewardBlock) { return; } uint256 farmingTokenSupply = pool.amount; if (farmingTokenSupply == 0) { pool.lastRewardBlock = block.number; return; } for (uint256 i = 0; i < pool.accRewardPerShare.length; i++) { uint256 reward = pool.rewardPerBlock[i].mul( block.number.sub(pool.lastRewardBlock) ); if (pool.remainingRewards[i] >= reward) { pool.remainingRewards[i] = pool.remainingRewards[i].sub(reward); } else { pool.remainingRewards[i] = 0; } pool.accRewardPerShare[i] = pool.accRewardPerShare[i].add( reward.mul(1e12) / farmingTokenSupply ); } pool.lastRewardBlock = block.number; } // Stake farming tokens to the given pool. function stake( uint256 _pid, address _farmingToken, uint256 _amount ) external { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(pool.farmingToken == _farmingToken, 'FARMING_TOKEN_SAFETY_CHECK'); updatePool(_pid); if (user.amount > 0) { for (uint256 i = 0; i < pool.accRewardPerShare.length; i++) { uint256 pending = ( user.amount.mul(pool.accRewardPerShare[i]) / 1e12 ).sub(user.rewardDebt[i]); user.pending[i] = user.pending[i].add(pending); } } if (user.nextClaimableBlock == 0 && user.amount == 0) { if (block.number <= pool.startBlock) { user.nextClaimableBlock = pool.startBlock.add(pool.claimableInterval); } else { uint256 periods = getPeriodsSinceStart(_pid); user.nextClaimableBlock = pool.startBlock.add( periods.mul(pool.claimableInterval) ); } user.rewardDebt = new uint256[](pool.rewardTokens.length); user.pending = new uint256[](pool.rewardTokens.length); } Helper.safeTransferFrom( pool.farmingToken, msg.sender, address(this), _amount ); user.amount = user.amount.add(_amount); pool.amount = pool.amount.add(_amount); for (uint256 i = 0; i < pool.accRewardPerShare.length; i++) { user.rewardDebt[i] = user.amount.mul(pool.accRewardPerShare[i]) / 1e12; } emit Stake(msg.sender, _pid, _amount); } // Redeem farming tokens from the given pool. function redeem( uint256 _pid, address _farmingToken, uint256 _amount ) external { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(pool.farmingToken == _farmingToken, 'FARMING_TOKEN_SAFETY_CHECK'); require(user.amount >= _amount, 'INSUFFICIENT_AMOUNT'); updatePool(_pid); for (uint256 i = 0; i < pool.accRewardPerShare.length; i++) { uint256 pending = ( user.amount.mul(pool.accRewardPerShare[i]) / 1e12 ).sub(user.rewardDebt[i]); user.pending[i] = user.pending[i].add(pending); user.rewardDebt[i] = user.amount.sub(_amount).mul(pool.accRewardPerShare[i]) / 1e12; } Helper.safeTransfer(pool.farmingToken, msg.sender, _amount); user.amount = user.amount.sub(_amount); pool.amount = pool.amount.sub(_amount); emit Redeem(msg.sender, _pid, _amount); } // Claim rewards when block number larger than user's nextClaimableBlock. function claim(uint256 _pid) external { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(block.number > user.nextClaimableBlock, 'NOT_CLAIMABLE'); (uint256[] memory rewards, ) = pendingRewards(_pid, msg.sender); updatePool(_pid); for (uint256 i = 0; i < pool.accRewardPerShare.length; i++) { user.pending[i] = 0; user.rewardDebt[i] = user.amount.mul(pool.accRewardPerShare[i]) / 1e12; if (rewards[i] > 0) { Helper.safeTransfer(pool.rewardTokens[i], msg.sender, rewards[i]); } } uint256 periods = getPeriodsSinceStart(_pid); user.nextClaimableBlock = pool.startBlock.add( periods.mul(pool.claimableInterval) ); emit Claim(msg.sender, _pid, pool.rewardTokens, rewards); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) external { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 amount = user.amount; pool.amount = pool.amount.sub(amount); user.amount = 0; user.pending = new uint256[](pool.accRewardPerShare.length); user.rewardDebt = new uint256[](pool.accRewardPerShare.length); user.nextClaimableBlock = 0; Helper.safeTransfer(pool.farmingToken, msg.sender, amount); emit EmergencyWithdraw(msg.sender, _pid, amount); } }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"Candidate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"rewards","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"Charged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"rewards","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"interval","type":"uint256"}],"name":"ClaimableBlockUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"farmingToken","type":"address"}],"name":"PoolAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"rewards","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"WithdrawRewards","type":"event"},{"inputs":[{"internalType":"address","name":"_farmingToken","type":"address"},{"internalType":"address[]","name":"_rewardTokens","type":"address[]"},{"internalType":"uint256[]","name":"_rewardPerBlock","type":"uint256[]"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_claimableInterval","type":"uint256"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminCandidate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"candidateConfirm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"charge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getPeriodsSinceStart","outputs":[{"internalType":"uint256","name":"periods","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getPoolInfo","outputs":[{"internalType":"address","name":"farmingToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address[]","name":"rewardTokens","type":"address[]"},{"internalType":"uint256[]","name":"rewardPerBlock","type":"uint256[]"},{"internalType":"uint256[]","name":"accRewardPerShare","type":"uint256[]"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"claimableInterval","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getRemaingRewards","outputs":[{"internalType":"uint256[]","name":"remainingRewards","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256[]","name":"pending","type":"uint256[]"},{"internalType":"uint256[]","name":"rewardDebt","type":"uint256[]"},{"internalType":"uint256","name":"nextClaimableBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingRewards","outputs":[{"internalType":"uint256[]","name":"rewards","type":"uint256[]"},{"internalType":"uint256","name":"nextClaimableBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_farmingToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256[]","name":"_rewardPerBlock","type":"uint256[]"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_candidate","type":"address"}],"name":"setAdminCandidate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"setClaimableBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_farmingToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"withdrawRewards","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5062000023336200002960201b60201c565b62000181565b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620000bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000b29062000125565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006200010d60118362000147565b91506200011a8262000158565b602082019050919050565b600060208201905081810360008301526200014081620000fe565b9050919050565b600082825260208201905092915050565b7f61646d696e20616c726561647920736574000000000000000000000000000000600082015250565b6146c080620001916000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80635312ea8e116100ad578063a0b1f5dd11610071578063a0b1f5dd1461030d578063d18df53c14610329578063d87801611461035a578063f674fc5014610376578063f851a440146103a65761012c565b80635312ea8e1461026d5780636e9c931c1461028957806374ffcc1a146102a557806395e77e53146102d557806396de7aa0146102f15761012c565b80633accfa6c116100f45780633accfa6c146101f15780633f0232301461020f578063432daf3d146102195780634dd1a1b71461023557806351eb05a6146102515761012c565b8063081e3eda146101315780631069f3b51461014f57806313df2cb5146101825780632f380b351461019e578063379607f5146101d5575b600080fd5b6101396103c4565b6040516101469190613ebd565b60405180910390f35b6101696004803603810190610164919061364c565b6103d1565b6040516101799493929190613ed8565b60405180910390f35b61019c6004803603810190610197919061353f565b610520565b005b6101b860048036038101906101b3919061361f565b610856565b6040516101cc989796959493929190613c01565b60405180910390f35b6101ef60048036038101906101ea919061361f565b610aed565b005b6101f9610da2565b6040516102069190613b86565b60405180910390f35b610217610dc8565b005b610233600480360381019061022e91906136df565b610f9a565b005b61024f600480360381019061024a919061373b565b6111f5565b005b61026b6004803603810190610266919061361f565b611322565b005b6102876004803603810190610282919061361f565b611521565b005b6102a3600480360381019061029e919061368c565b61172b565b005b6102bf60048036038101906102ba919061361f565b611c03565b6040516102cc9190613ccb565b60405180910390f35b6102ef60048036038101906102ea91906137aa565b611e58565b005b61030b60048036038101906103069190613512565b611f52565b005b610327600480360381019061032291906136df565b612067565b005b610343600480360381019061033e919061364c565b61233e565b604051610351929190613ced565b60405180910390f35b610374600480360381019061036f919061368c565b612865565b005b610390600480360381019061038b919061361f565b612bfc565b60405161039d9190613ebd565b60405180910390f35b6103ae612edc565b6040516103bb9190613b86565b60405180910390f35b6000600280549050905090565b60006060806000806003600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806080016040529081600082015481526020016001820180548060200260200160405190810160405280929190818152602001828054801561048d57602002820191906000526020600020905b815481526020019060010190808311610479575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156104e557602002820191906000526020600020905b8154815260200190600101908083116104d1575b505050505081526020016003820154815250509050806000015194508060400151935080602001519250806060015191505092959194509250565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a590613e5d565b60405180910390fd5b82518451146105f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e990613e3d565b60405180910390fd5b60008243116106015782610603565b435b90506000855167ffffffffffffffff81111561062257610621614370565b5b6040519080825280602002602001820160405280156106505781602001602082028036833780820191505090505b5090506000865167ffffffffffffffff8111156106705761066f614370565b5b60405190808252806020026020018201604052801561069e5781602001602082028036833780820191505090505b50905060026040518061012001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018881526020018481526020018381526020016000815260200185815260200187815260200186815250908060018154018082558091505060019003906000526020600020906009020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101908051906020019061078692919061328e565b5060408201518160020190805190602001906107a3929190613318565b5060608201518160030190805190602001906107c0929190613318565b5060808201518160040190805190602001906107dd929190613318565b5060a0820151816005015560c0820151816006015560e08201518160070155610100820151816008015550508773ffffffffffffffffffffffffffffffffffffffff167f73cca62ab1b520c9715bf4e6c71e3e518c754e7148f65102f43289a7df0efea660405160405180910390a25050505050505050565b600080606080606060008060008060028a8154811061087857610877614341565b5b9060005260206000209060090201604051806101200160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820180548060200260200160405190810160405280929190818152602001828054801561096d57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610923575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156109c557602002820191906000526020600020905b8154815260200190600101908083116109b1575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610a1d57602002820191906000526020600020905b815481526020019060010190808311610a09575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610a7557602002820191906000526020600020905b815481526020019060010190808311610a61575b505050505081526020016005820154815260200160068201548152602001600782015481526020016008820154815250509050806000015198508060a0015197508060200151965080604001519550806060015194508060c0015193508060e001519250806101000151915050919395975091939597565b600060028281548110610b0357610b02614341565b5b9060005260206000209060090201905060006003600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600301544311610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba490613d9d565b60405180910390fd5b6000610bb9843361233e565b509050610bc584611322565b60005b8360030180549050811015610d04576000836002018281548110610bef57610bee614341565b5b906000526020600020018190555064e8d4a51000610c3a856003018381548110610c1c57610c1b614341565b5b90600052602060002001548560000154612f0090919063ffffffff16565b610c4491906140c4565b836001018281548110610c5a57610c59614341565b5b90600052602060002001819055506000828281518110610c7d57610c7c614341565b5b60200260200101511115610cf157610cf0846001018281548110610ca457610ca3614341565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633848481518110610ce357610ce2614341565b5b6020026020010151612f6d565b5b8080610cfc90614269565b915050610bc8565b506000610d1085612bfc565b9050610d3f610d2c856008015483612f0090919063ffffffff16565b85600701546130a390919063ffffffff16565b8360030181905550843373ffffffffffffffffffffffffffffffffffffffff167f29efd1570858633f7fcf640ecc43b3edc6515af5b29e8e92d9dcad5209f5cd0d8660010185604051610d93929190613c94565b60405180910390a35050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f90613dfd565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f60405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f90613e5d565b60405180910390fd5b60006002838154811061103e5761103d614341565b5b906000526020600020906009020190508060010180549050825114611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f90613dbd565b60405180910390fd5b60005b82518110156111b25760008382815181106110b9576110b8614341565b5b6020026020010151111561119f5761112d8260010182815481106110e0576110df614341565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633308685815181106111205761111f614341565b5b60200260200101516130fc565b61117a83828151811061114357611142614341565b5b602002602001015183600401838154811061116157611160614341565b5b90600052602060002001546130a390919063ffffffff16565b8260040182815481106111905761118f614341565b5b90600052602060002001819055505b80806111aa90614269565b91505061109b565b50827fa145d60156a87e91a4a98486a8d187f4e4b78f756ff02d42b63b4b2f97207d4d82600101846040516111e8929190613c94565b60405180910390a2505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a90613e5d565b60405180910390fd5b80156112935761129283611322565b5b6000600284815481106112a9576112a8614341565b5b906000526020600020906009020190508060020180549050835114611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa90613e3d565b60405180910390fd5b8281600201908051906020019061131b929190613318565b5050505050565b60006002828154811061133857611337614341565b5b9060005260206000209060090201905080600601544311611359575061151e565b600081600501549050600081141561137b57438260060181905550505061151e565b60005b82600301805490508110156115115760006113d86113a985600601544361323590919063ffffffff16565b8560020184815481106113bf576113be614341565b5b9060005260206000200154612f0090919063ffffffff16565b9050808460040183815481106113f1576113f0614341565b5b90600052602060002001541061145d576114348185600401848154811061141b5761141a614341565b5b906000526020600020015461323590919063ffffffff16565b84600401838154811061144a57611449614341565b5b9060005260206000200181905550611484565b600084600401838154811061147557611474614341565b5b90600052602060002001819055505b6114d9836114a064e8d4a5100084612f0090919063ffffffff16565b6114aa91906140c4565b8560030184815481106114c0576114bf614341565b5b90600052602060002001546130a390919063ffffffff16565b8460030183815481106114ef576114ee614341565b5b906000526020600020018190555050808061150990614269565b91505061137e565b5043826006018190555050505b50565b60006002828154811061153757611536614341565b5b9060005260206000209060090201905060006003600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015490506115bb81846005015461323590919063ffffffff16565b836005018190555060008260000181905550826003018054905067ffffffffffffffff8111156115ee576115ed614370565b5b60405190808252806020026020018201604052801561161c5781602001602082028036833780820191505090505b50826002019080519060200190611634929190613318565b50826003018054905067ffffffffffffffff81111561165657611655614370565b5b6040519080825280602002602001820160405280156116845781602001602082028036833780820191505090505b5082600101908051906020019061169c929190613318565b50600082600301819055506116d68360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163383612f6d565b833373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05958360405161171d9190613ebd565b60405180910390a350505050565b60006002848154811061174157611740614341565b5b9060005260206000209060090201905060006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508373ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90613ddd565b60405180910390fd5b61184085611322565b6000816000015411156119495760005b82600301805490508110156119475760006118da83600101838154811061187a57611879614341565b5b906000526020600020015464e8d4a510006118c28760030186815481106118a4576118a3614341565b5b90600052602060002001548760000154612f0090919063ffffffff16565b6118cc91906140c4565b61323590919063ffffffff16565b905061190f818460020184815481106118f6576118f5614341565b5b90600052602060002001546130a390919063ffffffff16565b83600201838154811061192557611924614341565b5b906000526020600020018190555050808061193f90614269565b915050611850565b505b60008160030154148015611961575060008160000154145b15611aae57816007015443116119995761198c826008015483600701546130a390919063ffffffff16565b81600301819055506119dd565b60006119a486612bfc565b90506119d36119c0846008015483612f0090919063ffffffff16565b84600701546130a390919063ffffffff16565b8260030181905550505b816001018054905067ffffffffffffffff8111156119fe576119fd614370565b5b604051908082528060200260200182016040528015611a2c5781602001602082028036833780820191505090505b50816001019080519060200190611a44929190613318565b50816001018054905067ffffffffffffffff811115611a6657611a65614370565b5b604051908082528060200260200182016040528015611a945781602001602082028036833780820191505090505b50816002019080519060200190611aac929190613318565b505b611ade8260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163330866130fc565b611af58382600001546130a390919063ffffffff16565b8160000181905550611b148383600501546130a390919063ffffffff16565b826005018190555060005b8260030180549050811015611bac5764e8d4a51000611b6b846003018381548110611b4d57611b4c614341565b5b90600052602060002001548460000154612f0090919063ffffffff16565b611b7591906140c4565b826001018281548110611b8b57611b8a614341565b5b90600052602060002001819055508080611ba490614269565b915050611b1f565b50843373ffffffffffffffffffffffffffffffffffffffff167f5af417134f72a9d41143ace85b0a26dce6f550f894f2cbc1eeee8810603d91b685604051611bf49190613ebd565b60405180910390a35050505050565b6060600060028381548110611c1b57611c1a614341565b5b9060005260206000209060090201604051806101200160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805480602002602001604051908101604052809291908181526020018280548015611d1057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611cc6575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015611d6857602002820191906000526020600020905b815481526020019060010190808311611d54575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015611dc057602002820191906000526020600020905b815481526020019060010190808311611dac575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015611e1857602002820191906000526020600020905b815481526020019060010190808311611e04575b5050505050815260200160058201548152602001600682015481526020016007820154815260200160088201548152505090508060800151915050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edd90613e5d565b60405180910390fd5b600060028381548110611efc57611efb614341565b5b90600052602060002090600902019050818160080181905550827fa885ff4d8d3bf78eea3ffc74848dbebe77635486e06727000a3c1b5837845e0a83604051611f459190613ebd565b60405180910390a2505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613e5d565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f8cc40b9abca4a505a92028908f9d913d621d18112c69412806506f02333f26b460405160405180910390a250565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec90613e5d565b60405180910390fd5b60006002838154811061210b5761210a614341565b5b906000526020600020906009020190508060010180549050825114612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c90613dbd565b60405180910390fd5b60005b82518110156122fb5781600401818154811061218757612186614341565b5b90600052602060002001548382815181106121a5576121a4614341565b5b602002602001015111156121ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e590613e9d565b60405180910390fd5b600083828151811061220357612202614341565b5b602002602001015111156122e85761227682600101828154811061222a57612229614341565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163385848151811061226957612268614341565b5b6020026020010151612f6d565b6122c383828151811061228c5761228b614341565b5b60200260200101518360040183815481106122aa576122a9614341565b5b906000526020600020015461323590919063ffffffff16565b8260040182815481106122d9576122d8614341565b5b90600052602060002001819055505b80806122f390614269565b915050612168565b50827f8a63d6747886a8cc1166e78fdd0df86a7a77fe1ee60ac1d042e6ff56c234fcc58260010184604051612331929190613c94565b60405180910390a2505050565b60606000806002858154811061235757612356614341565b5b9060005260206000209060090201604051806101200160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820180548060200260200160405190810160405280929190818152602001828054801561244c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612402575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156124a457602002820191906000526020600020905b815481526020019060010190808311612490575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156124fc57602002820191906000526020600020905b8154815260200190600101908083116124e8575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561255457602002820191906000526020600020905b815481526020019060010190808311612540575b50505050508152602001600582015481526020016006820154815260200160078201548152602001600882015481525050905060006003600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806080016040529081600082015481526020016001820180548060200260200160405190810160405280929190818152602001828054801561263d57602002820191906000526020600020905b815481526020019060010190808311612629575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561269557602002820191906000526020600020905b815481526020019060010190808311612681575b50505050508152602001600382015481525050905060008260a001519050816040015194508260c0015143101580156126d357506000826040015151115b80156126e0575060008114155b156128545760005b83606001515181101561285257600061273e6127118660c001514361323590919063ffffffff16565b8660400151848151811061272857612727614341565b5b6020026020010151612f0090919063ffffffff16565b905060006127958461275e64e8d4a5100085612f0090919063ffffffff16565b61276891906140c4565b8760600151858151811061277f5761277e614341565b5b60200260200101516130a390919063ffffffff16565b905061281e6127f1866020015185815181106127b4576127b3614341565b5b602002602001015164e8d4a510006127d9858a60000151612f0090919063ffffffff16565b6127e391906140c4565b61323590919063ffffffff16565b8660400151858151811061280857612807614341565b5b60200260200101516130a390919063ffffffff16565b88848151811061283157612830614341565b5b6020026020010181815250505050808061284a90614269565b9150506126e8565b505b816060015193505050509250929050565b60006002848154811061287b5761287a614341565b5b9060005260206000209060090201905060006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508373ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296890613ddd565b60405180910390fd5b82816000015410156129b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129af90613e7d565b60405180910390fd5b6129c185611322565b60005b8260030180549050811015612b38576000612a4e8360010183815481106129ee576129ed614341565b5b906000526020600020015464e8d4a51000612a36876003018681548110612a1857612a17614341565b5b90600052602060002001548760000154612f0090919063ffffffff16565b612a4091906140c4565b61323590919063ffffffff16565b9050612a8381846002018481548110612a6a57612a69614341565b5b90600052602060002001546130a390919063ffffffff16565b836002018381548110612a9957612a98614341565b5b906000526020600020018190555064e8d4a51000612af6856003018481548110612ac657612ac5614341565b5b9060005260206000200154612ae888876000015461323590919063ffffffff16565b612f0090919063ffffffff16565b612b0091906140c4565b836001018381548110612b1657612b15614341565b5b9060005260206000200181905550508080612b3090614269565b9150506129c4565b50612b688260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163385612f6d565b612b7f83826000015461323590919063ffffffff16565b8160000181905550612b9e83836005015461323590919063ffffffff16565b8260050181905550843373ffffffffffffffffffffffffffffffffffffffff167fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a92985604051612bed9190613ebd565b60405180910390a35050505050565b60008060028381548110612c1357612c12614341565b5b9060005260206000209060090201604051806101200160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805480602002602001604051908101604052809291908181526020018280548015612d0857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612cbe575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015612d6057602002820191906000526020600020905b815481526020019060010190808311612d4c575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015612db857602002820191906000526020600020905b815481526020019060010190808311612da4575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015612e1057602002820191906000526020600020905b815481526020019060010190808311612dfc575b5050505050815260200160058201548152602001600682015481526020016007820154815260200160088201548152505090508060e0015143111580612e5b57506000816101000151145b15612e6a576000915050612ed7565b6000612e838260e001514361323590919063ffffffff16565b9050612ea9600183610100015183612e9b91906140c4565b6130a390919063ffffffff16565b9250600082610100015182612ebe91906142b2565b1415612ed457600183612ed1919061414f565b92505b50505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080821480612f28575082828385612f1991906140f5565b925082612f2691906140c4565b145b612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e90613d3d565b60405180910390fd5b92915050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401612f9f929190613bd8565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612fed9190613b6f565b6000604051808303816000865af19150503d806000811461302a576040519150601f19603f3d011682016040523d82523d6000602084013e61302f565b606091505b509150915081801561305d575060008151148061305c57508080602001905181019061305b91906135f2565b5b5b61309c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309390613e1d565b60405180910390fd5b5050505050565b60008282846130b2919061406e565b91508110156130f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ed90613d5d565b60405180910390fd5b92915050565b6000808573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161313093929190613ba1565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161317e9190613b6f565b6000604051808303816000865af19150503d80600081146131bb576040519150601f19603f3d011682016040523d82523d6000602084013e6131c0565b606091505b50915091508180156131ee57506000815114806131ed5750808060200190518101906131ec91906135f2565b5b5b61322d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322490613d7d565b60405180910390fd5b505050505050565b6000828284613244919061414f565b9150811115613288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327f90613d1d565b60405180910390fd5b92915050565b828054828255906000526020600020908101928215613307579160200282015b828111156133065782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906132ae565b5b5090506133149190613365565b5090565b828054828255906000526020600020908101928215613354579160200282015b82811115613353578251825591602001919060010190613338565b5b5090506133619190613365565b5090565b5b8082111561337e576000816000905550600101613366565b5090565b600061339561339084613f50565b613f2b565b905080838252602082019050828560208602820111156133b8576133b76143b7565b5b60005b858110156133e857816133ce8882613462565b8452602084019350602083019250506001810190506133bb565b5050509392505050565b600061340561340084613f7c565b613f2b565b90508083825260208201905082856020860282011115613428576134276143b7565b5b60005b85811015613458578161343e88826134fd565b84526020840193506020830192505060018101905061342b565b5050509392505050565b60008135905061347181614645565b92915050565b600082601f83011261348c5761348b6143b2565b5b813561349c848260208601613382565b91505092915050565b600082601f8301126134ba576134b96143b2565b5b81356134ca8482602086016133f2565b91505092915050565b6000813590506134e28161465c565b92915050565b6000815190506134f78161465c565b92915050565b60008135905061350c81614673565b92915050565b600060208284031215613528576135276143c1565b5b600061353684828501613462565b91505092915050565b600080600080600060a0868803121561355b5761355a6143c1565b5b600061356988828901613462565b955050602086013567ffffffffffffffff81111561358a576135896143bc565b5b61359688828901613477565b945050604086013567ffffffffffffffff8111156135b7576135b66143bc565b5b6135c3888289016134a5565b93505060606135d4888289016134fd565b92505060806135e5888289016134fd565b9150509295509295909350565b600060208284031215613608576136076143c1565b5b6000613616848285016134e8565b91505092915050565b600060208284031215613635576136346143c1565b5b6000613643848285016134fd565b91505092915050565b60008060408385031215613663576136626143c1565b5b6000613671858286016134fd565b925050602061368285828601613462565b9150509250929050565b6000806000606084860312156136a5576136a46143c1565b5b60006136b3868287016134fd565b93505060206136c486828701613462565b92505060406136d5868287016134fd565b9150509250925092565b600080604083850312156136f6576136f56143c1565b5b6000613704858286016134fd565b925050602083013567ffffffffffffffff811115613725576137246143bc565b5b613731858286016134a5565b9150509250929050565b600080600060608486031215613754576137536143c1565b5b6000613762868287016134fd565b935050602084013567ffffffffffffffff811115613783576137826143bc565b5b61378f868287016134a5565b92505060406137a0868287016134d3565b9150509250925092565b600080604083850312156137c1576137c06143c1565b5b60006137cf858286016134fd565b92505060206137e0858286016134fd565b9150509250929050565b60006137f6838361381a565b60208301905092915050565b600061380e8383613b51565b60208301905092915050565b613823816141a3565b82525050565b613832816141a3565b82525050565b600061384382613fdd565b61384d8185614030565b935061385883613fa8565b8060005b8381101561388957815161387088826137ea565b975061387b83614009565b92505060018101905061385c565b5085935050505092915050565b60006138a182613fe8565b6138ab8185614030565b93506138b683613fb8565b8060005b838110156138ee576138cb8261439f565b6138d588826137ea565b97506138e083614016565b9250506001810190506138ba565b5085935050505092915050565b600061390682613ff3565b6139108185614041565b935061391b83613fcd565b8060005b8381101561394c5781516139338882613802565b975061393e83614023565b92505060018101905061391f565b5085935050505092915050565b600061396482613ffe565b61396e8185614052565b935061397e8185602086016141eb565b80840191505092915050565b600061399760158361405d565b91506139a2826143e4565b602082019050919050565b60006139ba60148361405d565b91506139c58261440d565b602082019050919050565b60006139dd60148361405d565b91506139e882614436565b602082019050919050565b6000613a0060318361405d565b9150613a0b8261445f565b604082019050919050565b6000613a23600d8361405d565b9150613a2e826144ae565b602082019050919050565b6000613a46600f8361405d565b9150613a51826144d7565b602082019050919050565b6000613a69601a8361405d565b9150613a7482614500565b602082019050919050565b6000613a8c600d8361405d565b9150613a9782614529565b602082019050919050565b6000613aaf602d8361405d565b9150613aba82614552565b604082019050919050565b6000613ad2600f8361405d565b9150613add826145a1565b602082019050919050565b6000613af560098361405d565b9150613b00826145ca565b602082019050919050565b6000613b1860138361405d565b9150613b23826145f3565b602082019050919050565b6000613b3b600e8361405d565b9150613b468261461c565b602082019050919050565b613b5a816141e1565b82525050565b613b69816141e1565b82525050565b6000613b7b8284613959565b915081905092915050565b6000602082019050613b9b6000830184613829565b92915050565b6000606082019050613bb66000830186613829565b613bc36020830185613829565b613bd06040830184613b60565b949350505050565b6000604082019050613bed6000830185613829565b613bfa6020830184613b60565b9392505050565b600061010082019050613c17600083018b613829565b613c24602083018a613b60565b8181036040830152613c368189613838565b90508181036060830152613c4a81886138fb565b90508181036080830152613c5e81876138fb565b9050613c6d60a0830186613b60565b613c7a60c0830185613b60565b613c8760e0830184613b60565b9998505050505050505050565b60006040820190508181036000830152613cae8185613896565b90508181036020830152613cc281846138fb565b90509392505050565b60006020820190508181036000830152613ce581846138fb565b905092915050565b60006040820190508181036000830152613d0781856138fb565b9050613d166020830184613b60565b9392505050565b60006020820190508181036000830152613d368161398a565b9050919050565b60006020820190508181036000830152613d56816139ad565b9050919050565b60006020820190508181036000830152613d76816139d0565b9050919050565b60006020820190508181036000830152613d96816139f3565b9050919050565b60006020820190508181036000830152613db681613a16565b9050919050565b60006020820190508181036000830152613dd681613a39565b9050919050565b60006020820190508181036000830152613df681613a5c565b9050919050565b60006020820190508181036000830152613e1681613a7f565b9050919050565b60006020820190508181036000830152613e3681613aa2565b9050919050565b60006020820190508181036000830152613e5681613ac5565b9050919050565b60006020820190508181036000830152613e7681613ae8565b9050919050565b60006020820190508181036000830152613e9681613b0b565b9050919050565b60006020820190508181036000830152613eb681613b2e565b9050919050565b6000602082019050613ed26000830184613b60565b92915050565b6000608082019050613eed6000830187613b60565b8181036020830152613eff81866138fb565b90508181036040830152613f1381856138fb565b9050613f226060830184613b60565b95945050505050565b6000613f35613f46565b9050613f418282614238565b919050565b6000604051905090565b600067ffffffffffffffff821115613f6b57613f6a614370565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f9757613f96614370565b5b602082029050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b6000819050602082019050919050565b600081519050919050565b600081549050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000600182019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614079826141e1565b9150614084836141e1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140b9576140b86142e3565b5b828201905092915050565b60006140cf826141e1565b91506140da836141e1565b9250826140ea576140e9614312565b5b828204905092915050565b6000614100826141e1565b915061410b836141e1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614144576141436142e3565b5b828202905092915050565b600061415a826141e1565b9150614165836141e1565b925082821015614178576141776142e3565b5b828203905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141ae826141c1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156142095780820151818401526020810190506141ee565b83811115614218576000848401525b50505050565b600061423161422c836143d7565b614183565b9050919050565b614241826143c6565b810181811067ffffffffffffffff821117156142605761425f614370565b5b80604052505050565b6000614274826141e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142a7576142a66142e3565b5b600182019050919050565b60006142bd826141e1565b91506142c8836141e1565b9250826142d8576142d7614312565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006143ab825461421e565b9050919050565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160001c9050919050565b7f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000600082015250565b7f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000600082015250565b7f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000600082015250565b7f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a20747260008201527f616e7366657246726f6d206661696c6564000000000000000000000000000000602082015250565b7f4e4f545f434c41494d41424c4500000000000000000000000000000000000000600082015250565b7f494e56414c49445f414d4f554e54530000000000000000000000000000000000600082015250565b7f4641524d494e475f544f4b454e5f5341464554595f434845434b000000000000600082015250565b7f6e6f742043616e64696461746500000000000000000000000000000000000000600082015250565b7f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260008201527f616e73666572206661696c656400000000000000000000000000000000000000602082015250565b7f494e56414c49445f524557415244530000000000000000000000000000000000600082015250565b7f6e6f742061646d696e0000000000000000000000000000000000000000000000600082015250565b7f494e53554646494349454e545f414d4f554e5400000000000000000000000000600082015250565b7f494e56414c49445f414d4f554e54000000000000000000000000000000000000600082015250565b61464e816141a3565b811461465957600080fd5b50565b614665816141b5565b811461467057600080fd5b50565b61467c816141e1565b811461468757600080fd5b5056fea264697066735822122049f3d1af78ddadd53a9a8ecb82118b70e32b559a60d0d14462c68b7fb9a7c9fa64736f6c63430008070033
Deployed ByteCode Sourcemap
13545:15320:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16005:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21090:487;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;16285:1127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19878:830;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;27295:906;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3033:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3225:234;;;:::i;:::-;;18249:714;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17501:398;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23350:978;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28272:590;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24384:1758;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20784:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17907:260;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3467:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19047:771;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21631:1077;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;26201:1007;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22762:512;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3006:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16005:95;16050:7;16077:8;:15;;;;16070:22;;16005:95;:::o;21090:487::-;21204:14;21233:24;21272:27;21314:26;21368:20;21391:8;:14;21400:4;21391:14;;;;;;;;;;;:21;21406:5;21391:21;;;;;;;;;;;;;;;21368:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21432:4;:11;;;21423:20;;21464:4;:12;;;21454:22;;21499:4;:15;;;21487:27;;21546:4;:23;;;21525:44;;21357:220;21090:487;;;;;;;:::o;16285:1127::-;3676:5;;;;;;;;;;3662:19;;:10;:19;;;3654:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;16550:15:::1;:22;16526:13;:20;:46;16518:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16603:23;16657:11;16642:12;:26;:55;;16686:11;16642:55;;;16671:12;16642:55;16603:94;;16708:34;16759:13;:20;16745:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16708:72;;16791:33;16841:13;:20;16827:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16791:71;;16873:8;16901:452;;;;;;;;16943:13;16901:452;;;;;;16989:13;16901:452;;;;17037:15;16901:452;;;;17090:17;16901:452;;;;17144:16;16901:452;;;;17187:1;16901:452;;;;17224:15;16901:452;;;;17270:11;16901:452;;;;17319:18;16901:452;;::::0;16873:491:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17390:13;17380:24;;;;;;;;;;;;16507:905;;;16285:1127:::0;;;;;:::o;19878:830::-;19978:20;20013:14;20042:29;20086:31;20132:34;20181:23;20219:18;20252:25;20305:20;20328:8;20337:4;20328:14;;;;;;;;:::i;:::-;;;;;;;;;;;;20305:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20368:4;:17;;;20353:32;;20405:4;:11;;;20396:20;;20442:4;:17;;;20427:32;;20487:4;:19;;;20470:36;;20537:4;:22;;;20517:42;;20588:4;:20;;;20570:38;;20632:4;:15;;;20619:28;;20678:4;:22;;;20658:42;;20294:414;19878:830;;;;;;;;;:::o;27295:906::-;27344:21;27368:8;27377:4;27368:14;;;;;;;;:::i;:::-;;;;;;;;;;;;27344:38;;27393:21;27417:8;:14;27426:4;27417:14;;;;;;;;;;;:26;27432:10;27417:26;;;;;;;;;;;;;;;27393:50;;27477:4;:23;;;27462:12;:38;27454:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27530:24;27560:32;27575:4;27581:10;27560:14;:32::i;:::-;27529:63;;;27603:16;27614:4;27603:10;:16::i;:::-;27635:9;27630:325;27654:4;:22;;:29;;;;27650:1;:33;27630:325;;;27723:1;27705:4;:12;;27718:1;27705:15;;;;;;;;:::i;:::-;;;;;;;;;:19;;;;27805:4;27760:42;27776:4;:22;;27799:1;27776:25;;;;;;;;:::i;:::-;;;;;;;;;;27760:4;:11;;;:15;;:42;;;;:::i;:::-;:49;;;;:::i;:::-;27739:4;:15;;27755:1;27739:18;;;;;;;;:::i;:::-;;;;;;;;;:70;;;;27841:1;27828:7;27836:1;27828:10;;;;;;;;:::i;:::-;;;;;;;;:14;27824:120;;;27863:65;27883:4;:17;;27901:1;27883:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27905:10;27917:7;27925:1;27917:10;;;;;;;;:::i;:::-;;;;;;;;27863:19;:65::i;:::-;27824:120;27685:3;;;;;:::i;:::-;;;;27630:325;;;;27965:15;27983:26;28004:4;27983:20;:26::i;:::-;27965:44;;28046:80;28080:35;28092:4;:22;;;28080:7;:11;;:35;;;;:::i;:::-;28046:4;:15;;;:19;;:80;;;;:::i;:::-;28020:4;:23;;:106;;;;28160:4;28148:10;28142:51;;;28166:4;:17;;28185:7;28142:51;;;;;;;:::i;:::-;;;;;;;;27333:868;;;;27295:906;:::o;3033:29::-;;;;;;;;;;;;;:::o;3225:234::-;3295:14;;;;;;;;;;;3281:28;;:10;:28;;;3273:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;3363:14;;;;;;;;;;;3343:35;;3356:5;;;;;;;;;;3343:35;;;;;;;;;;;;3399:14;;;;;;;;;;;3391:5;;:22;;;;;;;;;;;;;;;;;;3449:1;3424:14;;:27;;;;;;;;;;;;;;;;;;3225:234::o;18249:714::-;3676:5;;;;;;;;;;3662:19;;:10;:19;;;3654:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;18361:21:::1;18385:8;18394:4;18385:14;;;;;;;;:::i;:::-;;;;;;;;;;;;18361:38;;18437:4;:17;;:24;;;;18418:8;:15;:43;18410:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18497:9;18492:406;18516:8;:15;18512:1;:19;18492:406;;;18571:1;18557:8;18566:1;18557:11;;;;;;;;:::i;:::-;;;;;;;;:15;18553:334;;;18593:191;18639:4;:17;;18657:1;18639:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18683:10;18725:4;18754:8;18763:1;18754:11;;;;;;;;:::i;:::-;;;;;;;;18593:23;:191::i;:::-;18830:41;18859:8;18868:1;18859:11;;;;;;;;:::i;:::-;;;;;;;;18830:4;:21;;18852:1;18830:24;;;;;;;;:::i;:::-;;;;;;;;;;:28;;:41;;;;:::i;:::-;18803:4;:21;;18825:1;18803:24;;;;;;;;:::i;:::-;;;;;;;;;:68;;;;18553:334;18533:3;;;;;:::i;:::-;;;;18492:406;;;;18921:4;18913:42;18927:4;:17;;18946:8;18913:42;;;;;;;:::i;:::-;;;;;;;;18350:613;18249:714:::0;;:::o;17501:398::-;3676:5;;;;;;;;;;3662:19;;:10;:19;;;3654:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;17648:11:::1;17644:60;;;17676:16;17687:4;17676:10;:16::i;:::-;17644:60;17714:21;17738:8;17747:4;17738:14;;;;;;;;:::i;:::-;;;;;;;;;;;;17714:38;;17797:4;:19;;:26;;;;17771:15;:22;:52;17763:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;17876:15;17854:4;:19;;:37;;;;;;;;;;;;:::i;:::-;;17633:266;17501:398:::0;;;:::o;23350:978::-;23402:21;23426:8;23435:4;23426:14;;;;;;;;:::i;:::-;;;;;;;;;;;;23402:38;;23471:4;:20;;;23455:12;:36;23451:75;;23508:7;;;23451:75;23536:26;23565:4;:11;;;23536:40;;23613:1;23591:18;:23;23587:112;;;23654:12;23631:4;:20;;:35;;;;23681:7;;;;23587:112;23714:9;23709:566;23733:4;:22;;:29;;;;23729:1;:33;23709:566;;;23784:14;23801:98;23846:38;23863:4;:20;;;23846:12;:16;;:38;;;;:::i;:::-;23801:4;:19;;23821:1;23801:22;;;;;;;;:::i;:::-;;;;;;;;;;:26;;:98;;;;:::i;:::-;23784:115;;23946:6;23918:4;:21;;23940:1;23918:24;;;;;;;;:::i;:::-;;;;;;;;;;:34;23914:207;;24000:36;24029:6;24000:4;:21;;24022:1;24000:24;;;;;;;;:::i;:::-;;;;;;;;;;:28;;:36;;;;:::i;:::-;23973:4;:21;;23995:1;23973:24;;;;;;;;:::i;:::-;;;;;;;;;:63;;;;23914:207;;;24104:1;24077:4;:21;;24099:1;24077:24;;;;;;;;:::i;:::-;;;;;;;;;:28;;;;23914:207;24163:100;24230:18;24211:16;24222:4;24211:6;:10;;:16;;;;:::i;:::-;:37;;;;:::i;:::-;24163:4;:22;;24186:1;24163:25;;;;;;;;:::i;:::-;;;;;;;;;;:29;;:100;;;;:::i;:::-;24135:4;:22;;24158:1;24135:25;;;;;;;;:::i;:::-;;;;;;;;;:128;;;;23769:506;23764:3;;;;;:::i;:::-;;;;23709:566;;;;24308:12;24285:4;:20;;:35;;;;23391:937;;23350:978;;:::o;28272:590::-;28333:21;28357:8;28366:4;28357:14;;;;;;;;:::i;:::-;;;;;;;;;;;;28333:38;;28382:21;28406:8;:14;28415:4;28406:14;;;;;;;;;;;:26;28421:10;28406:26;;;;;;;;;;;;;;;28382:50;;28443:14;28460:4;:11;;;28443:28;;28496:23;28512:6;28496:4;:11;;;:15;;:23;;;;:::i;:::-;28482:4;:11;;:37;;;;28544:1;28530:4;:11;;:15;;;;28585:4;:22;;:29;;;;28571:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28556:4;:12;;:59;;;;;;;;;;;;:::i;:::-;;28658:4;:22;;:29;;;;28644:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28626:4;:15;;:62;;;;;;;;;;;;:::i;:::-;;28725:1;28699:4;:23;;:27;;;;28737:58;28757:4;:17;;;;;;;;;;;;28776:10;28788:6;28737:19;:58::i;:::-;28841:4;28829:10;28811:43;;;28847:6;28811:43;;;;;;:::i;:::-;;;;;;;;28322:540;;;28272:590;:::o;24384:1758::-;24508:21;24532:8;24541:4;24532:14;;;;;;;;:::i;:::-;;;;;;;;;;;;24508:38;;24557:21;24581:8;:14;24590:4;24581:14;;;;;;;;;;;:26;24596:10;24581:26;;;;;;;;;;;;;;;24557:50;;24647:13;24626:34;;:4;:17;;;;;;;;;;;;:34;;;24618:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24702:16;24713:4;24702:10;:16::i;:::-;24747:1;24733:4;:11;;;:15;24729:340;;;24770:9;24765:293;24789:4;:22;;:29;;;;24785:1;:33;24765:293;;;24844:15;24862:115;24958:4;:15;;24974:1;24958:18;;;;;;;;:::i;:::-;;;;;;;;;;24930:4;24885:42;24901:4;:22;;24924:1;24901:25;;;;;;;;:::i;:::-;;;;;;;;;;24885:4;:11;;;:15;;:42;;;;:::i;:::-;:49;;;;:::i;:::-;24862:95;;:115;;;;:::i;:::-;24844:133;;25014:28;25034:7;25014:4;:12;;25027:1;25014:15;;;;;;;;:::i;:::-;;;;;;;;;;:19;;:28;;;;:::i;:::-;24996:4;:12;;25009:1;24996:15;;;;;;;;:::i;:::-;;;;;;;;;:46;;;;24825:233;24820:3;;;;;:::i;:::-;;;;24765:293;;;;24729:340;25110:1;25083:4;:23;;;:28;:48;;;;;25130:1;25115:4;:11;;;:16;25083:48;25079:588;;;25168:4;:15;;;25152:12;:31;25148:367;;25230:43;25250:4;:22;;;25230:4;:15;;;:19;;:43;;;;:::i;:::-;25204:4;:23;;:69;;;;25148:367;;;25314:15;25332:26;25353:4;25332:20;:26::i;:::-;25314:44;;25403:96;25445:35;25457:4;:22;;;25445:7;:11;;:35;;;;:::i;:::-;25403:4;:15;;;:19;;:96;;;;:::i;:::-;25377:4;:23;;:122;;;;25295:220;25148:367;25561:4;:17;;:24;;;;25547:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25529:4;:15;;:57;;;;;;;;;;;;:::i;:::-;;25630:4;:17;;:24;;;;25616:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25601:4;:12;;:54;;;;;;;;;;;;:::i;:::-;;25079:588;25677:144;25715:4;:17;;;;;;;;;;;;25748:10;25782:4;25803:7;25677:23;:144::i;:::-;25846:24;25862:7;25846:4;:11;;;:15;;:24;;;;:::i;:::-;25832:4;:11;;:38;;;;25895:24;25911:7;25895:4;:11;;;:15;;:24;;;;:::i;:::-;25881:4;:11;;:38;;;;25935:9;25930:157;25954:4;:22;;:29;;;;25950:1;:33;25930:157;;;26071:4;26026:42;26042:4;:22;;26065:1;26042:25;;;;;;;;:::i;:::-;;;;;;;;;;26026:4;:11;;;:15;;:42;;;;:::i;:::-;:49;;;;:::i;:::-;26005:4;:15;;26021:1;26005:18;;;;;;;;:::i;:::-;;;;;;;;;:70;;;;25985:3;;;;;:::i;:::-;;;;25930:157;;;;26120:4;26108:10;26102:32;;;26126:7;26102:32;;;;;;:::i;:::-;;;;;;;;24497:1645;;24384:1758;;;:::o;20784:238::-;20875:33;20926:20;20949:8;20958:4;20949:14;;;;;;;;:::i;:::-;;;;;;;;;;;;20926:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20993:4;:21;;;20974:40;;20915:107;20784:238;;;:::o;17907:260::-;3676:5;;;;;;;;;;3662:19;;:10;:19;;;3654:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;18022:21:::1;18046:8;18055:4;18046:14;;;;;;;;:::i;:::-;;;;;;;;;;;;18022:38;;18096:9;18071:4;:22;;:34;;;;18143:4;18121:38;18149:9;18121:38;;;;;;:::i;:::-;;;;;;;;18011:156;17907:260:::0;;:::o;3467:149::-;3676:5;;;;;;;;;;3662:19;;:10;:19;;;3654:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;3561:10:::1;3544:14;;:27;;;;;;;;;;;;;;;;;;3597:10;3587:21;;;;;;;;;;;;3467:149:::0;:::o;19047:771::-;3676:5;;;;;;;;;;3662:19;;:10;:19;;;3654:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;19168:21:::1;19192:8;19201:4;19192:14;;;;;;;;:::i;:::-;;;;;;;;;;;;19168:38;;19244:4;:17;;:24;;;;19225:8;:15;:43;19217:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19304:9;19299:446;19323:8;:15;19319:1;:19;19299:446;;;19383:4;:21;;19405:1;19383:24;;;;;;;;:::i;:::-;;;;;;;;;;19368:8;19377:1;19368:11;;;;;;;;:::i;:::-;;;;;;;;:39;;19360:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19459:1;19445:8;19454:1;19445:11;;;;;;;;:::i;:::-;;;;;;;;:15;19441:293;;;19481:150;19523:4;:17;;19541:1;19523:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19567:10;19601:8;19610:1;19601:11;;;;;;;;:::i;:::-;;;;;;;;19481:19;:150::i;:::-;19677:41;19706:8;19715:1;19706:11;;;;;;;;:::i;:::-;;;;;;;;19677:4;:21;;19699:1;19677:24;;;;;;;;:::i;:::-;;;;;;;;;;:28;;:41;;;;:::i;:::-;19650:4;:21;;19672:1;19650:24;;;;;;;;:::i;:::-;;;;;;;;;:68;;;;19441:293;19340:3;;;;;:::i;:::-;;;;19299:446;;;;19776:4;19760:50;19782:4;:17;;19801:8;19760:50;;;;;;;:::i;:::-;;;;;;;;19157:661;19047:771:::0;;:::o;21631:1077::-;21734:24;21760:26;21804:20;21827:8;21836:4;21827:14;;;;;;;;:::i;:::-;;;;;;;;;;;;21804:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21852:20;21875:8;:14;21884:4;21875:14;;;;;;;;;;;:21;21890:5;21875:21;;;;;;;;;;;;;;;21852:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21907:26;21936:4;:11;;;21907:40;;21968:4;:12;;;21958:22;;22011:4;:20;;;21995:12;:36;;:63;;;;;22057:1;22035:4;:12;;;:19;:23;21995:63;:90;;;;;22084:1;22062:18;:23;;21995:90;21991:655;;;22107:9;22102:533;22126:4;:22;;;:29;22122:1;:33;22102:533;;;22181:14;22198:106;22247:38;22264:4;:20;;;22247:12;:16;;:38;;;;:::i;:::-;22198:4;:19;;;22218:1;22198:22;;;;;;;;:::i;:::-;;;;;;;;:26;;:106;;;;:::i;:::-;22181:123;;22323:25;22351:108;22422:18;22403:16;22414:4;22403:6;:10;;:16;;;;:::i;:::-;:37;;;;:::i;:::-;22351:4;:22;;;22374:1;22351:25;;;;;;;;:::i;:::-;;;;;;;;:29;;:108;;;;:::i;:::-;22323:136;;22491:128;22533:67;22581:4;:15;;;22597:1;22581:18;;;;;;;;:::i;:::-;;;;;;;;22571:4;22534:34;22550:17;22534:4;:11;;;:15;;:34;;;;:::i;:::-;:41;;;;:::i;:::-;22533:47;;:67;;;;:::i;:::-;22491:4;:12;;;22504:1;22491:15;;;;;;;;:::i;:::-;;;;;;;;:19;;:128;;;;:::i;:::-;22478:7;22486:1;22478:10;;;;;;;;:::i;:::-;;;;;;;:141;;;;;22162:473;;22157:3;;;;;:::i;:::-;;;;22102:533;;;;21991:655;22677:4;:23;;;22656:44;;21793:915;;;21631:1077;;;;;:::o;26201:1007::-;26327:21;26351:8;26360:4;26351:14;;;;;;;;:::i;:::-;;;;;;;;;;;;26327:38;;26376:21;26400:8;:14;26409:4;26400:14;;;;;;;;;;;:26;26415:10;26400:26;;;;;;;;;;;;;;;26376:50;;26466:13;26445:34;;:4;:17;;;;;;;;;;;;:34;;;26437:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26544:7;26529:4;:11;;;:22;;26521:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;26586:16;26597:4;26586:10;:16::i;:::-;26618:9;26613:371;26637:4;:22;;:29;;;;26633:1;:33;26613:371;;;26688:15;26706:107;26794:4;:15;;26810:1;26794:18;;;;;;;;:::i;:::-;;;;;;;;;;26770:4;26725:42;26741:4;:22;;26764:1;26741:25;;;;;;;;:::i;:::-;;;;;;;;;;26725:4;:11;;;:15;;:42;;;;:::i;:::-;:49;;;;:::i;:::-;26706:87;;:107;;;;:::i;:::-;26688:125;;26846:28;26866:7;26846:4;:12;;26859:1;26846:15;;;;;;;;:::i;:::-;;;;;;;;;;:19;;:28;;;;:::i;:::-;26828:4;:12;;26841:1;26828:15;;;;;;;;:::i;:::-;;;;;;;;;:46;;;;26968:4;26910:55;26939:4;:22;;26962:1;26939:25;;;;;;;;:::i;:::-;;;;;;;;;;26910:24;26926:7;26910:4;:11;;;:15;;:24;;;;:::i;:::-;:28;;:55;;;;:::i;:::-;:62;;;;:::i;:::-;26889:4;:15;;26905:1;26889:18;;;;;;;;:::i;:::-;;;;;;;;;:83;;;;26673:311;26668:3;;;;;:::i;:::-;;;;26613:371;;;;26994:59;27014:4;:17;;;;;;;;;;;;27033:10;27045:7;26994:19;:59::i;:::-;27078:24;27094:7;27078:4;:11;;;:15;;:24;;;;:::i;:::-;27064:4;:11;;:38;;;;27127:24;27143:7;27127:4;:11;;;:15;;:24;;;;:::i;:::-;27113:4;:11;;:38;;;;27186:4;27174:10;27167:33;;;27192:7;27167:33;;;;;;:::i;:::-;;;;;;;;26316:892;;26201:1007;;;:::o;22762:512::-;22856:15;22890:20;22913:8;22922:4;22913:14;;;;;;;;:::i;:::-;;;;;;;;;;;;22890:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22958:4;:15;;;22942:12;:31;;:62;;;;23003:1;22977:4;:22;;;:27;22942:62;22938:76;;;23013:1;23006:8;;;;;22938:76;23025:24;23052:33;23069:4;:15;;;23052:12;:16;;:33;;;;:::i;:::-;23025:60;;23106:50;23154:1;23126:4;:22;;;23107:16;:41;;;;:::i;:::-;23106:47;;:50;;;;:::i;:::-;23096:60;;23216:1;23190:4;:22;;;23171:16;:41;;;;:::i;:::-;:46;23167:100;;;23254:1;23244:7;:11;;;;:::i;:::-;23234:21;;23167:100;22879:395;;22762:512;;;;:::o;3006:20::-;;;;;;;;;;;;:::o;7710:151::-;7768:9;7803:1;7798;:6;:30;;;;7827:1;7822;7817;7813;:5;;;;:::i;:::-;7809:9;;;7808:15;;;;:::i;:::-;:20;7798:30;7790:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7710:151;;;;:::o;9966:473::-;10152:12;10166:17;10187:5;:10;;10235;10247:2;10251:5;10212:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10187:81;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10151:117;;;;10301:7;:57;;;;;10328:1;10313:4;:11;:16;:44;;;;10344:4;10333:24;;;;;;;;;;;;:::i;:::-;10313:44;10301:57;10279:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;10073:366;;9966:473;;;:::o;7419:137::-;7477:9;7522:1;7516;7512;:5;;;;:::i;:::-;7508:9;;;7507:16;;7499:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;7419:137;;;;:::o;9436:522::-;9661:12;9675:17;9696:5;:10;;9744;9756:4;9762:2;9766:5;9721:51;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9696:87;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9660:123;;;;9816:7;:57;;;;;9843:1;9828:4;:11;:16;:44;;;;9859:4;9848:24;;;;;;;;;;;;:::i;:::-;9828:44;9816:57;9794:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;9570:388;;9436:522;;;;:::o;7564:138::-;7622:9;7667:1;7661;7657;:5;;;;:::i;:::-;7653:9;;;7652:16;;7644:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;7564:138;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:139::-;1543:5;1581:6;1568:20;1559:29;;1597:33;1624:5;1597:33;:::i;:::-;1497:139;;;;:::o;1659:370::-;1730:5;1779:3;1772:4;1764:6;1760:17;1756:27;1746:122;;1787:79;;:::i;:::-;1746:122;1904:6;1891:20;1929:94;2019:3;2011:6;2004:4;1996:6;1992:17;1929:94;:::i;:::-;1920:103;;1736:293;1659:370;;;;:::o;2052:::-;2123:5;2172:3;2165:4;2157:6;2153:17;2149:27;2139:122;;2180:79;;:::i;:::-;2139:122;2297:6;2284:20;2322:94;2412:3;2404:6;2397:4;2389:6;2385:17;2322:94;:::i;:::-;2313:103;;2129:293;2052:370;;;;:::o;2428:133::-;2471:5;2509:6;2496:20;2487:29;;2525:30;2549:5;2525:30;:::i;:::-;2428:133;;;;:::o;2567:137::-;2621:5;2652:6;2646:13;2637:22;;2668:30;2692:5;2668:30;:::i;:::-;2567:137;;;;:::o;2710:139::-;2756:5;2794:6;2781:20;2772:29;;2810:33;2837:5;2810:33;:::i;:::-;2710:139;;;;:::o;2855:329::-;2914:6;2963:2;2951:9;2942:7;2938:23;2934:32;2931:119;;;2969:79;;:::i;:::-;2931:119;3089:1;3114:53;3159:7;3150:6;3139:9;3135:22;3114:53;:::i;:::-;3104:63;;3060:117;2855:329;;;;:::o;3190:1331::-;3335:6;3343;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:120;;;3423:79;;:::i;:::-;3384:120;3543:1;3568:53;3613:7;3604:6;3593:9;3589:22;3568:53;:::i;:::-;3558:63;;3514:117;3698:2;3687:9;3683:18;3670:32;3729:18;3721:6;3718:30;3715:117;;;3751:79;;:::i;:::-;3715:117;3856:78;3926:7;3917:6;3906:9;3902:22;3856:78;:::i;:::-;3846:88;;3641:303;4011:2;4000:9;3996:18;3983:32;4042:18;4034:6;4031:30;4028:117;;;4064:79;;:::i;:::-;4028:117;4169:78;4239:7;4230:6;4219:9;4215:22;4169:78;:::i;:::-;4159:88;;3954:303;4296:2;4322:53;4367:7;4358:6;4347:9;4343:22;4322:53;:::i;:::-;4312:63;;4267:118;4424:3;4451:53;4496:7;4487:6;4476:9;4472:22;4451:53;:::i;:::-;4441:63;;4395:119;3190:1331;;;;;;;;:::o;4527:345::-;4594:6;4643:2;4631:9;4622:7;4618:23;4614:32;4611:119;;;4649:79;;:::i;:::-;4611:119;4769:1;4794:61;4847:7;4838:6;4827:9;4823:22;4794:61;:::i;:::-;4784:71;;4740:125;4527:345;;;;:::o;4878:329::-;4937:6;4986:2;4974:9;4965:7;4961:23;4957:32;4954:119;;;4992:79;;:::i;:::-;4954:119;5112:1;5137:53;5182:7;5173:6;5162:9;5158:22;5137:53;:::i;:::-;5127:63;;5083:117;4878:329;;;;:::o;5213:474::-;5281:6;5289;5338:2;5326:9;5317:7;5313:23;5309:32;5306:119;;;5344:79;;:::i;:::-;5306:119;5464:1;5489:53;5534:7;5525:6;5514:9;5510:22;5489:53;:::i;:::-;5479:63;;5435:117;5591:2;5617:53;5662:7;5653:6;5642:9;5638:22;5617:53;:::i;:::-;5607:63;;5562:118;5213:474;;;;;:::o;5693:619::-;5770:6;5778;5786;5835:2;5823:9;5814:7;5810:23;5806:32;5803:119;;;5841:79;;:::i;:::-;5803:119;5961:1;5986:53;6031:7;6022:6;6011:9;6007:22;5986:53;:::i;:::-;5976:63;;5932:117;6088:2;6114:53;6159:7;6150:6;6139:9;6135:22;6114:53;:::i;:::-;6104:63;;6059:118;6216:2;6242:53;6287:7;6278:6;6267:9;6263:22;6242:53;:::i;:::-;6232:63;;6187:118;5693:619;;;;;:::o;6318:684::-;6411:6;6419;6468:2;6456:9;6447:7;6443:23;6439:32;6436:119;;;6474:79;;:::i;:::-;6436:119;6594:1;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6565:117;6749:2;6738:9;6734:18;6721:32;6780:18;6772:6;6769:30;6766:117;;;6802:79;;:::i;:::-;6766:117;6907:78;6977:7;6968:6;6957:9;6953:22;6907:78;:::i;:::-;6897:88;;6692:303;6318:684;;;;;:::o;7008:823::-;7107:6;7115;7123;7172:2;7160:9;7151:7;7147:23;7143:32;7140:119;;;7178:79;;:::i;:::-;7140:119;7298:1;7323:53;7368:7;7359:6;7348:9;7344:22;7323:53;:::i;:::-;7313:63;;7269:117;7453:2;7442:9;7438:18;7425:32;7484:18;7476:6;7473:30;7470:117;;;7506:79;;:::i;:::-;7470:117;7611:78;7681:7;7672:6;7661:9;7657:22;7611:78;:::i;:::-;7601:88;;7396:303;7738:2;7764:50;7806:7;7797:6;7786:9;7782:22;7764:50;:::i;:::-;7754:60;;7709:115;7008:823;;;;;:::o;7837:474::-;7905:6;7913;7962:2;7950:9;7941:7;7937:23;7933:32;7930:119;;;7968:79;;:::i;:::-;7930:119;8088:1;8113:53;8158:7;8149:6;8138:9;8134:22;8113:53;:::i;:::-;8103:63;;8059:117;8215:2;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8186:118;7837:474;;;;;:::o;8317:179::-;8386:10;8407:46;8449:3;8441:6;8407:46;:::i;:::-;8485:4;8480:3;8476:14;8462:28;;8317:179;;;;:::o;8502:::-;8571:10;8592:46;8634:3;8626:6;8592:46;:::i;:::-;8670:4;8665:3;8661:14;8647:28;;8502:179;;;;:::o;8687:108::-;8764:24;8782:5;8764:24;:::i;:::-;8759:3;8752:37;8687:108;;:::o;8801:118::-;8888:24;8906:5;8888:24;:::i;:::-;8883:3;8876:37;8801:118;;:::o;8955:732::-;9074:3;9103:54;9151:5;9103:54;:::i;:::-;9173:86;9252:6;9247:3;9173:86;:::i;:::-;9166:93;;9283:56;9333:5;9283:56;:::i;:::-;9362:7;9393:1;9378:284;9403:6;9400:1;9397:13;9378:284;;;9479:6;9473:13;9506:63;9565:3;9550:13;9506:63;:::i;:::-;9499:70;;9592:60;9645:6;9592:60;:::i;:::-;9582:70;;9438:224;9425:1;9422;9418:9;9413:14;;9378:284;;;9382:14;9678:3;9671:10;;9079:608;;;8955:732;;;;:::o;9723:751::-;9839:3;9868:51;9913:5;9868:51;:::i;:::-;9935:86;10014:6;10009:3;9935:86;:::i;:::-;9928:93;;10045:53;10092:5;10045:53;:::i;:::-;10121:7;10152:1;10137:312;10162:6;10159:1;10156:13;10137:312;;;10232:44;10269:6;10232:44;:::i;:::-;10296:63;10355:3;10340:13;10296:63;:::i;:::-;10289:70;;10382:57;10432:6;10382:57;:::i;:::-;10372:67;;10197:252;10184:1;10181;10177:9;10172:14;;10137:312;;;10141:14;10465:3;10458:10;;9844:630;;;9723:751;;;;:::o;10510:732::-;10629:3;10658:54;10706:5;10658:54;:::i;:::-;10728:86;10807:6;10802:3;10728:86;:::i;:::-;10721:93;;10838:56;10888:5;10838:56;:::i;:::-;10917:7;10948:1;10933:284;10958:6;10955:1;10952:13;10933:284;;;11034:6;11028:13;11061:63;11120:3;11105:13;11061:63;:::i;:::-;11054:70;;11147:60;11200:6;11147:60;:::i;:::-;11137:70;;10993:224;10980:1;10977;10973:9;10968:14;;10933:284;;;10937:14;11233:3;11226:10;;10634:608;;;10510:732;;;;:::o;11248:373::-;11352:3;11380:38;11412:5;11380:38;:::i;:::-;11434:88;11515:6;11510:3;11434:88;:::i;:::-;11427:95;;11531:52;11576:6;11571:3;11564:4;11557:5;11553:16;11531:52;:::i;:::-;11608:6;11603:3;11599:16;11592:23;;11356:265;11248:373;;;;:::o;11627:366::-;11769:3;11790:67;11854:2;11849:3;11790:67;:::i;:::-;11783:74;;11866:93;11955:3;11866:93;:::i;:::-;11984:2;11979:3;11975:12;11968:19;;11627:366;;;:::o;11999:::-;12141:3;12162:67;12226:2;12221:3;12162:67;:::i;:::-;12155:74;;12238:93;12327:3;12238:93;:::i;:::-;12356:2;12351:3;12347:12;12340:19;;11999:366;;;:::o;12371:::-;12513:3;12534:67;12598:2;12593:3;12534:67;:::i;:::-;12527:74;;12610:93;12699:3;12610:93;:::i;:::-;12728:2;12723:3;12719:12;12712:19;;12371:366;;;:::o;12743:::-;12885:3;12906:67;12970:2;12965:3;12906:67;:::i;:::-;12899:74;;12982:93;13071:3;12982:93;:::i;:::-;13100:2;13095:3;13091:12;13084:19;;12743:366;;;:::o;13115:::-;13257:3;13278:67;13342:2;13337:3;13278:67;:::i;:::-;13271:74;;13354:93;13443:3;13354:93;:::i;:::-;13472:2;13467:3;13463:12;13456:19;;13115:366;;;:::o;13487:::-;13629:3;13650:67;13714:2;13709:3;13650:67;:::i;:::-;13643:74;;13726:93;13815:3;13726:93;:::i;:::-;13844:2;13839:3;13835:12;13828:19;;13487:366;;;:::o;13859:::-;14001:3;14022:67;14086:2;14081:3;14022:67;:::i;:::-;14015:74;;14098:93;14187:3;14098:93;:::i;:::-;14216:2;14211:3;14207:12;14200:19;;13859:366;;;:::o;14231:::-;14373:3;14394:67;14458:2;14453:3;14394:67;:::i;:::-;14387:74;;14470:93;14559:3;14470:93;:::i;:::-;14588:2;14583:3;14579:12;14572:19;;14231:366;;;:::o;14603:::-;14745:3;14766:67;14830:2;14825:3;14766:67;:::i;:::-;14759:74;;14842:93;14931:3;14842:93;:::i;:::-;14960:2;14955:3;14951:12;14944:19;;14603:366;;;:::o;14975:::-;15117:3;15138:67;15202:2;15197:3;15138:67;:::i;:::-;15131:74;;15214:93;15303:3;15214:93;:::i;:::-;15332:2;15327:3;15323:12;15316:19;;14975:366;;;:::o;15347:365::-;15489:3;15510:66;15574:1;15569:3;15510:66;:::i;:::-;15503:73;;15585:93;15674:3;15585:93;:::i;:::-;15703:2;15698:3;15694:12;15687:19;;15347:365;;;:::o;15718:366::-;15860:3;15881:67;15945:2;15940:3;15881:67;:::i;:::-;15874:74;;15957:93;16046:3;15957:93;:::i;:::-;16075:2;16070:3;16066:12;16059:19;;15718:366;;;:::o;16090:::-;16232:3;16253:67;16317:2;16312:3;16253:67;:::i;:::-;16246:74;;16329:93;16418:3;16329:93;:::i;:::-;16447:2;16442:3;16438:12;16431:19;;16090:366;;;:::o;16462:108::-;16539:24;16557:5;16539:24;:::i;:::-;16534:3;16527:37;16462:108;;:::o;16576:118::-;16663:24;16681:5;16663:24;:::i;:::-;16658:3;16651:37;16576:118;;:::o;16700:271::-;16830:3;16852:93;16941:3;16932:6;16852:93;:::i;:::-;16845:100;;16962:3;16955:10;;16700:271;;;;:::o;16977:222::-;17070:4;17108:2;17097:9;17093:18;17085:26;;17121:71;17189:1;17178:9;17174:17;17165:6;17121:71;:::i;:::-;16977:222;;;;:::o;17205:442::-;17354:4;17392:2;17381:9;17377:18;17369:26;;17405:71;17473:1;17462:9;17458:17;17449:6;17405:71;:::i;:::-;17486:72;17554:2;17543:9;17539:18;17530:6;17486:72;:::i;:::-;17568;17636:2;17625:9;17621:18;17612:6;17568:72;:::i;:::-;17205:442;;;;;;:::o;17653:332::-;17774:4;17812:2;17801:9;17797:18;17789:26;;17825:71;17893:1;17882:9;17878:17;17869:6;17825:71;:::i;:::-;17906:72;17974:2;17963:9;17959:18;17950:6;17906:72;:::i;:::-;17653:332;;;;;:::o;17991:1450::-;18430:4;18468:3;18457:9;18453:19;18445:27;;18482:71;18550:1;18539:9;18535:17;18526:6;18482:71;:::i;:::-;18563:72;18631:2;18620:9;18616:18;18607:6;18563:72;:::i;:::-;18682:9;18676:4;18672:20;18667:2;18656:9;18652:18;18645:48;18710:108;18813:4;18804:6;18710:108;:::i;:::-;18702:116;;18865:9;18859:4;18855:20;18850:2;18839:9;18835:18;18828:48;18893:108;18996:4;18987:6;18893:108;:::i;:::-;18885:116;;19049:9;19043:4;19039:20;19033:3;19022:9;19018:19;19011:49;19077:108;19180:4;19171:6;19077:108;:::i;:::-;19069:116;;19195:73;19263:3;19252:9;19248:19;19239:6;19195:73;:::i;:::-;19278;19346:3;19335:9;19331:19;19322:6;19278:73;:::i;:::-;19361;19429:3;19418:9;19414:19;19405:6;19361:73;:::i;:::-;17991:1450;;;;;;;;;;;:::o;19447:628::-;19665:4;19703:2;19692:9;19688:18;19680:26;;19752:9;19746:4;19742:20;19738:1;19727:9;19723:17;19716:47;19780:105;19880:4;19871:6;19780:105;:::i;:::-;19772:113;;19932:9;19926:4;19922:20;19917:2;19906:9;19902:18;19895:48;19960:108;20063:4;20054:6;19960:108;:::i;:::-;19952:116;;19447:628;;;;;:::o;20081:373::-;20224:4;20262:2;20251:9;20247:18;20239:26;;20311:9;20305:4;20301:20;20297:1;20286:9;20282:17;20275:47;20339:108;20442:4;20433:6;20339:108;:::i;:::-;20331:116;;20081:373;;;;:::o;20460:483::-;20631:4;20669:2;20658:9;20654:18;20646:26;;20718:9;20712:4;20708:20;20704:1;20693:9;20689:17;20682:47;20746:108;20849:4;20840:6;20746:108;:::i;:::-;20738:116;;20864:72;20932:2;20921:9;20917:18;20908:6;20864:72;:::i;:::-;20460:483;;;;;:::o;20949:419::-;21115:4;21153:2;21142:9;21138:18;21130:26;;21202:9;21196:4;21192:20;21188:1;21177:9;21173:17;21166:47;21230:131;21356:4;21230:131;:::i;:::-;21222:139;;20949:419;;;:::o;21374:::-;21540:4;21578:2;21567:9;21563:18;21555:26;;21627:9;21621:4;21617:20;21613:1;21602:9;21598:17;21591:47;21655:131;21781:4;21655:131;:::i;:::-;21647:139;;21374:419;;;:::o;21799:::-;21965:4;22003:2;21992:9;21988:18;21980:26;;22052:9;22046:4;22042:20;22038:1;22027:9;22023:17;22016:47;22080:131;22206:4;22080:131;:::i;:::-;22072:139;;21799:419;;;:::o;22224:::-;22390:4;22428:2;22417:9;22413:18;22405:26;;22477:9;22471:4;22467:20;22463:1;22452:9;22448:17;22441:47;22505:131;22631:4;22505:131;:::i;:::-;22497:139;;22224:419;;;:::o;22649:::-;22815:4;22853:2;22842:9;22838:18;22830:26;;22902:9;22896:4;22892:20;22888:1;22877:9;22873:17;22866:47;22930:131;23056:4;22930:131;:::i;:::-;22922:139;;22649:419;;;:::o;23074:::-;23240:4;23278:2;23267:9;23263:18;23255:26;;23327:9;23321:4;23317:20;23313:1;23302:9;23298:17;23291:47;23355:131;23481:4;23355:131;:::i;:::-;23347:139;;23074:419;;;:::o;23499:::-;23665:4;23703:2;23692:9;23688:18;23680:26;;23752:9;23746:4;23742:20;23738:1;23727:9;23723:17;23716:47;23780:131;23906:4;23780:131;:::i;:::-;23772:139;;23499:419;;;:::o;23924:::-;24090:4;24128:2;24117:9;24113:18;24105:26;;24177:9;24171:4;24167:20;24163:1;24152:9;24148:17;24141:47;24205:131;24331:4;24205:131;:::i;:::-;24197:139;;23924:419;;;:::o;24349:::-;24515:4;24553:2;24542:9;24538:18;24530:26;;24602:9;24596:4;24592:20;24588:1;24577:9;24573:17;24566:47;24630:131;24756:4;24630:131;:::i;:::-;24622:139;;24349:419;;;:::o;24774:::-;24940:4;24978:2;24967:9;24963:18;24955:26;;25027:9;25021:4;25017:20;25013:1;25002:9;24998:17;24991:47;25055:131;25181:4;25055:131;:::i;:::-;25047:139;;24774:419;;;:::o;25199:::-;25365:4;25403:2;25392:9;25388:18;25380:26;;25452:9;25446:4;25442:20;25438:1;25427:9;25423:17;25416:47;25480:131;25606:4;25480:131;:::i;:::-;25472:139;;25199:419;;;:::o;25624:::-;25790:4;25828:2;25817:9;25813:18;25805:26;;25877:9;25871:4;25867:20;25863:1;25852:9;25848:17;25841:47;25905:131;26031:4;25905:131;:::i;:::-;25897:139;;25624:419;;;:::o;26049:::-;26215:4;26253:2;26242:9;26238:18;26230:26;;26302:9;26296:4;26292:20;26288:1;26277:9;26273:17;26266:47;26330:131;26456:4;26330:131;:::i;:::-;26322:139;;26049:419;;;:::o;26474:222::-;26567:4;26605:2;26594:9;26590:18;26582:26;;26618:71;26686:1;26675:9;26671:17;26662:6;26618:71;:::i;:::-;26474:222;;;;:::o;26702:855::-;26979:4;27017:3;27006:9;27002:19;26994:27;;27031:71;27099:1;27088:9;27084:17;27075:6;27031:71;:::i;:::-;27149:9;27143:4;27139:20;27134:2;27123:9;27119:18;27112:48;27177:108;27280:4;27271:6;27177:108;:::i;:::-;27169:116;;27332:9;27326:4;27322:20;27317:2;27306:9;27302:18;27295:48;27360:108;27463:4;27454:6;27360:108;:::i;:::-;27352:116;;27478:72;27546:2;27535:9;27531:18;27522:6;27478:72;:::i;:::-;26702:855;;;;;;;:::o;27563:129::-;27597:6;27624:20;;:::i;:::-;27614:30;;27653:33;27681:4;27673:6;27653:33;:::i;:::-;27563:129;;;:::o;27698:75::-;27731:6;27764:2;27758:9;27748:19;;27698:75;:::o;27779:311::-;27856:4;27946:18;27938:6;27935:30;27932:56;;;27968:18;;:::i;:::-;27932:56;28018:4;28010:6;28006:17;27998:25;;28078:4;28072;28068:15;28060:23;;27779:311;;;:::o;28096:::-;28173:4;28263:18;28255:6;28252:30;28249:56;;;28285:18;;:::i;:::-;28249:56;28335:4;28327:6;28323:17;28315:25;;28395:4;28389;28385:15;28377:23;;28096:311;;;:::o;28413:132::-;28480:4;28503:3;28495:11;;28533:4;28528:3;28524:14;28516:22;;28413:132;;;:::o;28551:156::-;28615:4;28638:3;28630:11;;28661:3;28658:1;28651:14;28695:4;28692:1;28682:18;28674:26;;28551:156;;;:::o;28713:132::-;28780:4;28803:3;28795:11;;28833:4;28828:3;28824:14;28816:22;;28713:132;;;:::o;28851:114::-;28918:6;28952:5;28946:12;28936:22;;28851:114;;;:::o;28971:111::-;29035:6;29069:5;29063:12;29053:22;;28971:111;;;:::o;29088:114::-;29155:6;29189:5;29183:12;29173:22;;29088:114;;;:::o;29208:98::-;29259:6;29293:5;29287:12;29277:22;;29208:98;;;:::o;29312:113::-;29382:4;29414;29409:3;29405:14;29397:22;;29312:113;;;:::o;29431:110::-;29498:4;29530;29525:3;29521:14;29513:22;;29431:110;;;:::o;29547:113::-;29617:4;29649;29644:3;29640:14;29632:22;;29547:113;;;:::o;29666:184::-;29765:11;29799:6;29794:3;29787:19;29839:4;29834:3;29830:14;29815:29;;29666:184;;;;:::o;29856:::-;29955:11;29989:6;29984:3;29977:19;30029:4;30024:3;30020:14;30005:29;;29856:184;;;;:::o;30046:147::-;30147:11;30184:3;30169:18;;30046:147;;;;:::o;30199:169::-;30283:11;30317:6;30312:3;30305:19;30357:4;30352:3;30348:14;30333:29;;30199:169;;;;:::o;30374:305::-;30414:3;30433:20;30451:1;30433:20;:::i;:::-;30428:25;;30467:20;30485:1;30467:20;:::i;:::-;30462:25;;30621:1;30553:66;30549:74;30546:1;30543:81;30540:107;;;30627:18;;:::i;:::-;30540:107;30671:1;30668;30664:9;30657:16;;30374:305;;;;:::o;30685:185::-;30725:1;30742:20;30760:1;30742:20;:::i;:::-;30737:25;;30776:20;30794:1;30776:20;:::i;:::-;30771:25;;30815:1;30805:35;;30820:18;;:::i;:::-;30805:35;30862:1;30859;30855:9;30850:14;;30685:185;;;;:::o;30876:348::-;30916:7;30939:20;30957:1;30939:20;:::i;:::-;30934:25;;30973:20;30991:1;30973:20;:::i;:::-;30968:25;;31161:1;31093:66;31089:74;31086:1;31083:81;31078:1;31071:9;31064:17;31060:105;31057:131;;;31168:18;;:::i;:::-;31057:131;31216:1;31213;31209:9;31198:20;;30876:348;;;;:::o;31230:191::-;31270:4;31290:20;31308:1;31290:20;:::i;:::-;31285:25;;31324:20;31342:1;31324:20;:::i;:::-;31319:25;;31363:1;31360;31357:8;31354:34;;;31368:18;;:::i;:::-;31354:34;31413:1;31410;31406:9;31398:17;;31230:191;;;;:::o;31427:139::-;31477:7;31517:42;31510:5;31506:54;31495:65;;31427:139;;;:::o;31572:96::-;31609:7;31638:24;31656:5;31638:24;:::i;:::-;31627:35;;31572:96;;;:::o;31674:90::-;31708:7;31751:5;31744:13;31737:21;31726:32;;31674:90;;;:::o;31770:126::-;31807:7;31847:42;31840:5;31836:54;31825:65;;31770:126;;;:::o;31902:77::-;31939:7;31968:5;31957:16;;31902:77;;;:::o;31985:307::-;32053:1;32063:113;32077:6;32074:1;32071:13;32063:113;;;32162:1;32157:3;32153:11;32147:18;32143:1;32138:3;32134:11;32127:39;32099:2;32096:1;32092:10;32087:15;;32063:113;;;32194:6;32191:1;32188:13;32185:101;;;32274:1;32265:6;32260:3;32256:16;32249:27;32185:101;32034:258;31985:307;;;:::o;32298:166::-;32367:5;32392:66;32423:34;32446:10;32423:34;:::i;:::-;32392:66;:::i;:::-;32383:75;;32298:166;;;:::o;32470:281::-;32553:27;32575:4;32553:27;:::i;:::-;32545:6;32541:40;32683:6;32671:10;32668:22;32647:18;32635:10;32632:34;32629:62;32626:88;;;32694:18;;:::i;:::-;32626:88;32734:10;32730:2;32723:22;32513:238;32470:281;;:::o;32757:233::-;32796:3;32819:24;32837:5;32819:24;:::i;:::-;32810:33;;32865:66;32858:5;32855:77;32852:103;;;32935:18;;:::i;:::-;32852:103;32982:1;32975:5;32971:13;32964:20;;32757:233;;;:::o;32996:176::-;33028:1;33045:20;33063:1;33045:20;:::i;:::-;33040:25;;33079:20;33097:1;33079:20;:::i;:::-;33074:25;;33118:1;33108:35;;33123:18;;:::i;:::-;33108:35;33164:1;33161;33157:9;33152:14;;32996:176;;;;:::o;33178:180::-;33226:77;33223:1;33216:88;33323:4;33320:1;33313:15;33347:4;33344:1;33337:15;33364:180;33412:77;33409:1;33402:88;33509:4;33506:1;33499:15;33533:4;33530:1;33523:15;33550:180;33598:77;33595:1;33588:88;33695:4;33692:1;33685:15;33719:4;33716:1;33709:15;33736:180;33784:77;33781:1;33774:88;33881:4;33878:1;33871:15;33905:4;33902:1;33895:15;33922:144;33977:5;34002:57;34053:4;34047:11;34002:57;:::i;:::-;33993:66;;33922:144;;;:::o;34072:117::-;34181:1;34178;34171:12;34195:117;34304:1;34301;34294:12;34318:117;34427:1;34424;34417:12;34441:117;34550:1;34547;34540:12;34564:102;34605:6;34656:2;34652:7;34647:2;34640:5;34636:14;34632:28;34622:38;;34564:102;;;:::o;34672:::-;34714:8;34761:5;34758:1;34754:13;34733:34;;34672:102;;;:::o;34780:171::-;34920:23;34916:1;34908:6;34904:14;34897:47;34780:171;:::o;34957:170::-;35097:22;35093:1;35085:6;35081:14;35074:46;34957:170;:::o;35133:::-;35273:22;35269:1;35261:6;35257:14;35250:46;35133:170;:::o;35309:236::-;35449:34;35445:1;35437:6;35433:14;35426:58;35518:19;35513:2;35505:6;35501:15;35494:44;35309:236;:::o;35551:163::-;35691:15;35687:1;35679:6;35675:14;35668:39;35551:163;:::o;35720:165::-;35860:17;35856:1;35848:6;35844:14;35837:41;35720:165;:::o;35891:176::-;36031:28;36027:1;36019:6;36015:14;36008:52;35891:176;:::o;36073:163::-;36213:15;36209:1;36201:6;36197:14;36190:39;36073:163;:::o;36242:232::-;36382:34;36378:1;36370:6;36366:14;36359:58;36451:15;36446:2;36438:6;36434:15;36427:40;36242:232;:::o;36480:165::-;36620:17;36616:1;36608:6;36604:14;36597:41;36480:165;:::o;36651:159::-;36791:11;36787:1;36779:6;36775:14;36768:35;36651:159;:::o;36816:169::-;36956:21;36952:1;36944:6;36940:14;36933:45;36816:169;:::o;36991:164::-;37131:16;37127:1;37119:6;37115:14;37108:40;36991:164;:::o;37161:122::-;37234:24;37252:5;37234:24;:::i;:::-;37227:5;37224:35;37214:63;;37273:1;37270;37263:12;37214:63;37161:122;:::o;37289:116::-;37359:21;37374:5;37359:21;:::i;:::-;37352:5;37349:32;37339:60;;37395:1;37392;37385:12;37339:60;37289:116;:::o;37411:122::-;37484:24;37502:5;37484:24;:::i;:::-;37477:5;37474:35;37464:63;;37523:1;37520;37513:12;37464:63;37411:122;:::o
Swarm Source
ipfs://49f3d1af78ddadd53a9a8ecb82118b70e32b559a60d0d14462c68b7fb9a7c9fa
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.