Contract
0x215D5eDEb6A6a3f84AE9d72962FEaCCdF815BF27
5
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
GaugeProxyV2
Compiler Version
v0.6.7+commit.b8d736ae
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2021-11-05 */ // File: contracts/snowcones/gauge-proxy-v2.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.7; //^0.7.5; library SafeMath { function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; require(c >= a, "add: +"); return c; } function add(uint a, uint b, string memory errorMessage) internal pure returns (uint) { uint c = a + b; require(c >= a, errorMessage); return c; } function sub(uint a, uint b) internal pure returns (uint) { return sub(a, b, "sub: -"); } function sub(uint a, uint b, string memory errorMessage) internal pure returns (uint) { require(b <= a, errorMessage); uint c = a - b; return c; } function mul(uint a, uint b) internal pure returns (uint) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint c = a * b; require(c / a == b, "mul: *"); return c; } function mul(uint a, uint b, string memory errorMessage) internal pure returns (uint) { if (a == 0) { return 0; } uint c = a * b; require(c / a == b, errorMessage); return c; } function div(uint a, uint b) internal pure returns (uint) { return div(a, b, "div: /"); } function div(uint a, uint b, string memory errorMessage) internal pure returns (uint) { require(b > 0, errorMessage); uint c = a / b; return c; } } library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call{value:amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function callOptionalReturn(IERC20 token, bytes memory data) private { require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () public { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } contract ProtocolGovernance { /// @notice governance address for the governance contract address public governance; address public pendingGovernance; /** * @notice modifier to allow for easy gov only control over a function */ modifier onlyGovernance() { require(msg.sender == governance, "unauthorized sender (governance"); _; } /** * @notice Allows governance to change governance (for future upgradability) * @param _governance new governance address to set */ function setGovernance(address _governance) external onlyGovernance{ pendingGovernance = _governance; } /** * @notice Allows pendingGovernance to accept their role as governance (protection pattern) */ function acceptGovernance() external { require(msg.sender == pendingGovernance, "acceptGovernance: !pendingGov"); governance = pendingGovernance; } } contract Strategist { /// @notice strategist address for the strategist contract address public strategist; address public pendingStrategist; /** * @notice modifier to allow for easy gov only control over a function */ modifier onlyStrategist() { require(msg.sender == strategist, "unauthorized sender (strategist)"); _; } /** * @notice Allows strategist to change strategist (for future upgradability) * @param _strategist new strategist address to set */ function setStrategist(address _strategist) external onlyStrategist { pendingStrategist = _strategist; } /** * @notice Allows pendingStrategist to accept their role as strategist (protection pattern) */ function acceptStrategist() external { require(msg.sender == pendingStrategist, "unauthorized sender (pendingStrategist)"); strategist = pendingStrategist; } } contract GaugeV2 is ReentrancyGuard, ProtocolGovernance { using SafeMath for uint256; using SafeERC20 for IERC20; //FUJI testnet IERC20 public constant SNOWBALL = IERC20(0xC38f41A296A4493Ff429F1238e030924A1542e50); IERC20 public constant SNOWCONE = IERC20(0x83952E7ab4aca74ca96217D6F8f7591BEaD6D64E); address public constant TREASURY = address(0x294aB3200ef36200db84C4128b7f1b4eec71E38a); IERC20 public immutable TOKEN; address public DISTRIBUTION; uint256 public constant DURATION = 7 days; uint256 public periodFinish = 0; uint256 public rewardRate = 0; uint256 public lastUpdateTime; uint256 public rewardPerTokenStored; modifier onlyDistribution() { require(msg.sender == DISTRIBUTION, "Caller is not RewardsDistribution contract"); _; } mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; uint256 private _totalSupply; uint public derivedSupply; mapping(address => uint256) private _balances; mapping(address => uint256) public derivedBalances; mapping(address => uint) private _base; constructor(address _token, address _governance) public { TOKEN = IERC20(_token); DISTRIBUTION = msg.sender; governance = _governance; } // This function is to allow us to update the gaugeProxy // without resetting the old gauges. function changeDistribution(address _distribution) external onlyGovernance { DISTRIBUTION = _distribution; } function totalSupply() external view returns (uint256) { return _totalSupply; } function balanceOf(address account) external view returns (uint256) { return _balances[account]; } function lastTimeRewardApplicable() public view returns (uint256) { return Math.min(block.timestamp, periodFinish); } function rewardPerToken() public view returns (uint256) { if (_totalSupply == 0) { return rewardPerTokenStored; } return rewardPerTokenStored.add( lastTimeRewardApplicable().sub(lastUpdateTime).mul(rewardRate).mul(1e18).div(derivedSupply) ); } function derivedBalance(address account) public view returns (uint) { uint _balance = _balances[account]; uint _derived = _balance.mul(40).div(100); uint _adjusted = (_totalSupply.mul(SNOWCONE.balanceOf(account)).div(SNOWCONE.totalSupply())).mul(60).div(100); return Math.min(_derived.add(_adjusted), _balance); } function kick(address account) public { uint _derivedBalance = derivedBalances[account]; derivedSupply = derivedSupply.sub(_derivedBalance); _derivedBalance = derivedBalance(account); derivedBalances[account] = _derivedBalance; derivedSupply = derivedSupply.add(_derivedBalance); } function earned(address account) public view returns (uint256) { return derivedBalances[account].mul(rewardPerToken().sub(userRewardPerTokenPaid[account])).div(1e18).add(rewards[account]); } function getRewardForDuration() external view returns (uint256) { return rewardRate.mul(DURATION); } function depositAll() external { _deposit(TOKEN.balanceOf(msg.sender), msg.sender); } function deposit(uint256 amount) external { _deposit(amount, msg.sender); } function depositFor(uint256 amount, address account) external { _deposit(amount, account); } function _deposit(uint amount, address account) internal nonReentrant updateReward(account) { require(amount > 0, "Cannot stake 0"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Staked(account, amount); TOKEN.safeTransferFrom(account, address(this), amount); } function withdrawAll() external { _withdraw(_balances[msg.sender]); } function withdraw(uint256 amount) external { _withdraw(amount); } function _withdraw(uint amount) internal nonReentrant updateReward(msg.sender) { require(amount > 0, "Cannot withdraw 0"); _totalSupply = _totalSupply.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); TOKEN.safeTransfer(msg.sender, amount); emit Withdrawn(msg.sender, amount); } function getReward() public nonReentrant updateReward(msg.sender) { uint256 reward = rewards[msg.sender]; if (reward > 0) { rewards[msg.sender] = 0; SNOWBALL.safeTransfer(msg.sender, reward); emit RewardPaid(msg.sender, reward); } } function exit() external { _withdraw(_balances[msg.sender]); getReward(); } function notifyRewardAmount(uint256 reward) external onlyDistribution updateReward(address(0)) { SNOWBALL.safeTransferFrom(DISTRIBUTION, address(this), reward); if (block.timestamp >= periodFinish) { rewardRate = reward.div(DURATION); } else { uint256 remaining = periodFinish.sub(block.timestamp); uint256 leftover = remaining.mul(rewardRate); rewardRate = reward.add(leftover).div(DURATION); } // Ensure the provided reward amount is not more than the balance in the contract. // This keeps the reward rate in the right range, preventing overflows due to // very high values of rewardRate in the earned and rewardsPerToken functions; // Reward + leftover must be less than 2^256 / 10^18 to avoid overflow. uint balance = SNOWBALL.balanceOf(address(this)); require(rewardRate <= balance.div(DURATION), "Provided reward too high"); lastUpdateTime = block.timestamp; periodFinish = block.timestamp.add(DURATION); emit RewardAdded(reward); } modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); lastUpdateTime = lastTimeRewardApplicable(); if (account != address(0)) { rewards[account] = earned(account); userRewardPerTokenPaid[account] = rewardPerTokenStored; } _; if (account != address(0)) { kick(account); } } event RewardAdded(uint256 reward); event Staked(address indexed user, uint256 amount); event Withdrawn(address indexed user, uint256 amount); event RewardPaid(address indexed user, uint256 reward); } interface IceQueen { function deposit(uint, uint) external; function withdraw(uint, uint) external; function userInfo(uint, address) external view returns (uint, uint); } contract MakeSnowCones { using SafeMath for uint; /// @notice EIP-20 token name for this token string public constant name = "Make SNOWCONES"; /// @notice EIP-20 token symbol for this token string public constant symbol = "mSNOWCONES"; /// @notice EIP-20 token decimals for this token uint8 public constant decimals = 18; /// @notice Total number of tokens in circulation uint public totalSupply = 1e18; mapping (address => mapping (address => uint)) internal allowances; mapping (address => uint) internal balances; /// @notice The standard EIP-20 transfer event event Transfer(address indexed from, address indexed to, uint amount); /// @notice The standard EIP-20 approval event event Approval(address indexed owner, address indexed spender, uint amount); constructor() public { balances[msg.sender] = 1e18; emit Transfer(address(0x0), msg.sender, 1e18); } /** * @notice Get the number of tokens `spender` is approved to spend on behalf of `account` * @param account The address of the account holding the funds * @param spender The address of the account spending the funds * @return The number of tokens approved */ function allowance(address account, address spender) external view returns (uint) { return allowances[account][spender]; } /** * @notice Approve `spender` to transfer up to `amount` from `src` * @dev This will overwrite the approval amount for `spender` * and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve) * @param spender The address of the account which may transfer tokens * @param amount The number of tokens that are approved (2^256-1 means infinite) * @return Whether or not the approval succeeded */ function approve(address spender, uint amount) external returns (bool) { allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } /** * @notice Get the number of tokens held by the `account` * @param account The address of the account to get the balance of * @return The number of tokens held */ function balanceOf(address account) external view returns (uint) { return balances[account]; } /** * @notice Transfer `amount` tokens from `msg.sender` to `dst` * @param dst The address of the destination account * @param amount The number of tokens to transfer * @return Whether or not the transfer succeeded */ function transfer(address dst, uint amount) external returns (bool) { _transferTokens(msg.sender, dst, amount); return true; } /** * @notice Transfer `amount` tokens from `src` to `dst` * @param src The address of the source account * @param dst The address of the destination account * @param amount The number of tokens to transfer * @return Whether or not the transfer succeeded */ function transferFrom(address src, address dst, uint amount) external returns (bool) { address spender = msg.sender; uint spenderAllowance = allowances[src][spender]; if (spender != src && spenderAllowance != uint(-1)) { uint newAllowance = spenderAllowance.sub(amount, "transferFrom: exceeds spender allowance"); allowances[src][spender] = newAllowance; emit Approval(src, spender, newAllowance); } _transferTokens(src, dst, amount); return true; } function _transferTokens(address src, address dst, uint amount) internal { require(src != address(0), "_transferTokens: zero address"); require(dst != address(0), "_transferTokens: zero address"); balances[src] = balances[src].sub(amount, "_transferTokens: exceeds balance"); balances[dst] = balances[dst].add(amount, "_transferTokens: overflows"); emit Transfer(src, dst, amount); } } contract GaugeProxyV2 is ProtocolGovernance, Strategist { using SafeMath for uint256; using SafeERC20 for IERC20; IceQueen public constant MASTER = IceQueen(0xB12531a2d758c7a8BF09f44FC88E646E1BF9D375); IERC20 public constant SNOWCONE = IERC20(0x83952E7ab4aca74ca96217D6F8f7591BEaD6D64E); IERC20 public constant SNOWBALL = IERC20(0xC38f41A296A4493Ff429F1238e030924A1542e50); IERC20 public immutable TOKEN; uint public immutable DISTRIBUTION_DEADLINE = 21600; uint public pid; uint public totalWeight; uint private lockedTotalWeight; uint private lockedBalance; uint private locktime; address[] internal _tokens; mapping(address => address) public gauges; // token => gauge mapping(address => address) public deprecated; // token => gauge mapping(address => uint) public weights; // token => weight mapping(address => uint) private lockedWeights; // token => weight mapping(address => mapping(address => uint)) public votes; // msg.sender => token => votes mapping(address => address[]) public tokenVote;// msg.sender => token mapping(address => uint) public usedWeights; // msg.sender => total voting weight of user mapping(address => bool) public deployers; function addDeployer(address _deployer) external onlyGovernance { deployers[_deployer] = true; } function removeDeployer(address _deployer) external onlyGovernance { deployers[_deployer] = false; } modifier onlyBenevolent { require( msg.sender == strategist || msg.sender == governance, "unauthorized sender" ); _; } function tokens() external view returns (address[] memory) { return _tokens; } function getGauge(address _token) external view returns (address) { return gauges[_token]; } constructor() public { TOKEN = IERC20(address(new MakeSnowCones())); governance = msg.sender; } // Reset votes to 0 function reset() external { _reset(msg.sender); } // Reset votes to 0 function _reset(address _owner) internal { address[] storage _tokenVote = tokenVote[_owner]; uint256 _tokenVoteCnt = _tokenVote.length; for (uint i = 0; i < _tokenVoteCnt; i ++) { address _token = _tokenVote[i]; uint _votes = votes[_owner][_token]; if (_votes > 0) { totalWeight = totalWeight.sub(_votes); weights[_token] = weights[_token].sub(_votes); votes[_owner][_token] = 0; } } delete tokenVote[_owner]; } // Adjusts _owner's votes according to latest _owner's SNOWCONE balance function poke(address _owner) public { address[] memory _tokenVote = tokenVote[_owner]; uint256 _tokenCnt = _tokenVote.length; uint256[] memory _weights = new uint[](_tokenCnt); uint256 _prevUsedWeight = usedWeights[_owner]; uint256 _weight = SNOWCONE.balanceOf(_owner); for (uint256 i = 0; i < _tokenCnt; i ++) { uint256 _prevWeight = votes[_owner][_tokenVote[i]]; _weights[i] = _prevWeight.mul(_weight).div(_prevUsedWeight); } _vote(_owner, _tokenVote, _weights); } function _vote(address _owner, address[] memory _tokenVote, uint256[] memory _weights) internal { // _weights[i] = percentage * 100 _reset(_owner); uint256 _tokenCnt = _tokenVote.length; uint256 _weight = SNOWCONE.balanceOf(_owner); uint256 _totalVoteWeight = 0; uint256 _usedWeight = 0; for (uint256 i = 0; i < _tokenCnt; i ++) { _totalVoteWeight = _totalVoteWeight.add(_weights[i]); } for (uint256 i = 0; i < _tokenCnt; i ++) { address _token = _tokenVote[i]; address _gauge = gauges[_token]; uint256 _tokenWeight = _weights[i].mul(_weight).div(_totalVoteWeight); if (_gauge != address(0x0)) { _usedWeight = _usedWeight.add(_tokenWeight); totalWeight = totalWeight.add(_tokenWeight); weights[_token] = weights[_token].add(_tokenWeight); tokenVote[_owner].push(_token); votes[_owner][_token] = _tokenWeight; } } usedWeights[_owner] = _usedWeight; } // Vote with SNOWCONE on a gauge // _tokenVote: the array of tokens which will recieve tokens // _weights: the weights to associate with the tokens listed in _tokenVote function vote(address[] calldata _tokenVote, uint256[] calldata _weights) external { require(_tokenVote.length == _weights.length); _vote(msg.sender, _tokenVote, _weights); } // Add new token gauge function addGauge(address _token) external onlyBenevolent { require(gauges[_token] == address(0x0), "exists"); gauges[_token] = address(new GaugeV2(_token, governance)); _tokens.push(_token); } // Deprecate existing gauge function deprecateGauge(address _token) external onlyBenevolent { require(gauges[_token] != address(0x0), "does not exist"); deprecated[_token] = gauges[_token]; delete gauges[_token]; totalWeight = totalWeight.sub(weights[_token]); delete weights[_token]; } // Bring Deprecated gauge back into use function renewGauge(address _token) external onlyBenevolent { require(gauges[_token] == address(0x0), "exists"); gauges[_token] = deprecated[_token]; delete deprecated[_token]; } // Add existing gauge function migrateGauge(address _gauge, address _token) external onlyBenevolent { require(gauges[_token] == address(0x0), "exists"); gauges[_token] = _gauge; _tokens.push(_token); } // Sets IceQueen PID function setPID(uint _pid) external onlyGovernance { require(pid == 0, "pid has already been set"); require(_pid > 0, "invalid pid"); pid = _pid; } // Deposits mSNOWCONES into IceQueen function deposit() public { require(pid > 0, "pid not initialized"); IERC20 _token = TOKEN; uint _balance = _token.balanceOf(address(this)); _token.safeApprove(address(MASTER), 0); _token.safeApprove(address(MASTER), _balance); MASTER.deposit(pid, _balance); } // Fetches Snowball function collect() public { (uint _locked,) = MASTER.userInfo(pid, address(this)); MASTER.withdraw(pid, _locked); deposit(); } function length() external view returns (uint) { return _tokens.length; } function preDistribute() external { require( deployers[msg.sender] || msg.sender == strategist || msg.sender == governance, "unauthorized sender" ); lockedTotalWeight = totalWeight; for (uint i = 0; i < _tokens.length; i++) { lockedWeights[_tokens[i]] = weights[_tokens[i]]; } collect(); lockedBalance = SNOWBALL.balanceOf(address(this)); locktime = block.timestamp; } function distribute(uint _start, uint _end) external { require( deployers[msg.sender] || msg.sender == strategist || msg.sender == governance, "unauthorized sender" ); require(_start < _end, "bad _start"); require(_end <= _tokens.length, "bad _end"); require(locktime + DISTRIBUTION_DEADLINE >= block.timestamp, "lock expired"); if (lockedBalance > 0 && lockedTotalWeight > 0) { for (uint i = _start; i < _end; i++) { address _token = _tokens[i]; address _gauge = gauges[_token]; uint _reward = lockedBalance.mul(lockedWeights[_token]).div(totalWeight); if (_reward > 0) { SNOWBALL.safeApprove(_gauge, 0); SNOWBALL.safeApprove(_gauge, _reward); GaugeV2(_gauge).notifyRewardAmount(_reward); } } } } }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"DISTRIBUTION_DEADLINE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MASTER","outputs":[{"internalType":"contract IceQueen","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SNOWBALL","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SNOWCONE","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptStrategist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_deployer","type":"address"}],"name":"addDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"addGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"deployers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"deprecateGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"deprecated","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_end","type":"uint256"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"gauges","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getGauge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"length","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_gauge","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"migrateGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pendingGovernance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingStrategist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"poke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"preDistribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_deployer","type":"address"}],"name":"removeDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"renewGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"setPID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategist","type":"address"}],"name":"setStrategist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strategist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenVote","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokens","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"usedWeights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokenVote","type":"address[]"},{"internalType":"uint256[]","name":"_weights","type":"uint256[]"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"votes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"weights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c060405261546060a05234801561001657600080fd5b5060405161002390610069565b604051809103906000f08015801561003f573d6000803e3d6000fd5b5060601b6001600160601b03191660805260008054336001600160a01b0319909116179055610077565b6107fa8062003eaa83390190565b60805160601c60a051613e02620000a860003980610ae85280611984525080610f8052806118215250613e026000f3fe608060405234801561001057600080fd5b506004361061023c5760003560e01c80639da882ac1161013b578063cad1b906116100b8578063ecb7347f1161007c578063ecb7347f146106a1578063f1068454146106a9578063f2a1a8ed146106b1578063f315df86146106dd578063f39c38a0146107035761023c565b8063cad1b90614610653578063d0e30db014610681578063d826f88f14610689578063e07a3c9814610691578063e5225381146106995761023c565b8063b9a09fd5116100ff578063b9a09fd5146105d1578063bdcf1508146105f7578063c3de0cc41461061d578063c3f4538714610625578063c7b9d5301461062d5761023c565b80639da882ac14610513578063a7cac84614610539578063ab033ea91461055f578063b1a997ac14610585578063b1c6f0e9146105ab5761023c565b80636efc0e6f116101c957806382bfefc81161018d57806382bfefc814610468578063880f4039146104705780638d0605191461049657806396c82e57146104b35780639d63848a146104bb5761023c565b80636efc0e6f146103455780636f816a201461034d5780637625391a1461040f5780637b6666531461043257806382836391146104605761023c565b8063266f803a11610210578063266f803a146102af578063471aedc2146102d55780635aa6e675146102dd5780636848c2bd146102e55780636a2385e81461030b5761023c565b80622f8de4146102415780631f7b6d32146102795780631fe4a68614610281578063238efcbc146102a5575b600080fd5b6102676004803603602081101561025757600080fd5b50356001600160a01b031661070b565b60408051918252519081900360200190f35b61026761071d565b610289610724565b604080516001600160a01b039092168252519081900360200190f35b6102ad610733565b005b610289600480360360208110156102c557600080fd5b50356001600160a01b03166107b6565b6102896107d1565b6102896107e9565b6102ad600480360360208110156102fb57600080fd5b50356001600160a01b03166107f8565b6103316004803603602081101561032157600080fd5b50356001600160a01b0316610931565b604080519115158252519081900360200190f35b610289610946565b6102ad6004803603604081101561036357600080fd5b81019060208101813564010000000081111561037e57600080fd5b82018360208201111561039057600080fd5b803590602001918460208302840111640100000000831117156103b257600080fd5b9193909290916020810190356401000000008111156103d057600080fd5b8201836020820111156103e257600080fd5b8035906020019184602083028401116401000000008311171561040457600080fd5b50909250905061095e565b6102ad6004803603604081101561042557600080fd5b50803590602001356109de565b6102ad6004803603604081101561044857600080fd5b506001600160a01b0381358116916020013516610c9f565b6102ad610dca565b610289610f7e565b6102ad6004803603602081101561048657600080fd5b50356001600160a01b0316610fa2565b6102ad600480360360208110156104ac57600080fd5b5035611013565b6102676110fd565b6104c3611103565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104ff5781810151838201526020016104e7565b505050509050019250505060405180910390f35b6102ad6004803603602081101561052957600080fd5b50356001600160a01b0316611165565b6102676004803603602081101561054f57600080fd5b50356001600160a01b03166112df565b6102ad6004803603602081101561057557600080fd5b50356001600160a01b03166112f1565b6102ad6004803603602081101561059b57600080fd5b50356001600160a01b0316611360565b610289600480360360208110156105c157600080fd5b50356001600160a01b0316611563565b610289600480360360208110156105e757600080fd5b50356001600160a01b0316611581565b6102ad6004803603602081101561060d57600080fd5b50356001600160a01b031661159c565b6102896116a2565b6102ad6116b1565b6102ad6004803603602081101561064357600080fd5b50356001600160a01b031661171e565b6102676004803603604081101561066957600080fd5b506001600160a01b038135811691602001351661179f565b6102ad6117bc565b6102ad611977565b610267611982565b6102ad6119a6565b610289611ab0565b610267611ac8565b610289600480360360408110156106c757600080fd5b506001600160a01b038135169060200135611ace565b6102ad600480360360208110156106f357600080fd5b50356001600160a01b0316611b03565b610289611b71565b60106020526000908152604090205481565b6009545b90565b6002546001600160a01b031681565b6001546001600160a01b03163314610792576040805162461bcd60e51b815260206004820152601d60248201527f616363657074476f7665726e616e63653a202170656e64696e67476f76000000604482015290519081900360640190fd5b600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600b602052600090815260409020546001600160a01b031681565b73b12531a2d758c7a8bf09f44fc88e646e1bf9d37581565b6000546001600160a01b031681565b6002546001600160a01b031633148061081b57506000546001600160a01b031633145b610862576040805162461bcd60e51b81526020600482015260136024820152723ab730baba3437b934bd32b21039b2b73232b960691b604482015290519081900360640190fd5b6001600160a01b038181166000908152600a6020526040902054166108bf576040805162461bcd60e51b815260206004820152600e60248201526d191bd95cc81b9bdd08195e1a5cdd60921b604482015290519081900360640190fd5b6001600160a01b038181166000908152600a602090815260408083208054600b84528285208054919096166001600160a01b0319918216179095558054909416909355600c9052205460055461091491611b80565b6005556001600160a01b03166000908152600c6020526040812055565b60116020526000908152604090205460ff1681565b7383952e7ab4aca74ca96217d6f8f7591bead6d64e81565b82811461096a57600080fd5b6109d83385858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250611bb492505050565b50505050565b3360009081526011602052604090205460ff1680610a0657506002546001600160a01b031633145b80610a1b57506000546001600160a01b031633145b610a62576040805162461bcd60e51b81526020600482015260136024820152723ab730baba3437b934bd32b21039b2b73232b960691b604482015290519081900360640190fd5b808210610aa3576040805162461bcd60e51b815260206004820152600a6024820152691898590817dcdd185c9d60b21b604482015290519081900360640190fd5b600954811115610ae5576040805162461bcd60e51b81526020600482015260086024820152671898590817d95b9960c21b604482015290519081900360640190fd5b427f0000000000000000000000000000000000000000000000000000000000000000600854011015610b4d576040805162461bcd60e51b815260206004820152600c60248201526b1b1bd8dac8195e1c1a5c995960a21b604482015290519081900360640190fd5b6000600754118015610b6157506000600654115b15610c9b57815b81811015610c9957600060098281548110610b7f57fe5b60009182526020808320909101546001600160a01b03908116808452600a8352604080852054600554600d9095529085205460075492965092169392610bdc929091610bd09163ffffffff611df016565b9063ffffffff611e4816565b90508015610c8e57610c0a73c38f41a296a4493ff429f1238e030924a1542e5083600063ffffffff611e7316565b610c2f73c38f41a296a4493ff429f1238e030924a1542e50838363ffffffff611e7316565b816001600160a01b0316633c6b16ab826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610c7557600080fd5b505af1158015610c89573d6000803e3d6000fd5b505050505b505050600101610b68565b505b5050565b6002546001600160a01b0316331480610cc257506000546001600160a01b031633145b610d09576040805162461bcd60e51b81526020600482015260136024820152723ab730baba3437b934bd32b21039b2b73232b960691b604482015290519081900360640190fd5b6001600160a01b038181166000908152600a60205260409020541615610d5f576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b6001600160a01b039081166000818152600a602052604081208054939094166001600160a01b0319938416179093556009805460018101825593527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90920180549091169091179055565b3360009081526011602052604090205460ff1680610df257506002546001600160a01b031633145b80610e0757506000546001600160a01b031633145b610e4e576040805162461bcd60e51b81526020600482015260136024820152723ab730baba3437b934bd32b21039b2b73232b960691b604482015290519081900360640190fd5b60055460065560005b600954811015610eef57600c600060098381548110610e7257fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002054600d600060098481548110610ec257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902055600101610e57565b50610ef86119a6565b604080516370a0823160e01b8152306004820152905173c38f41a296a4493ff429f1238e030924a1542e50916370a08231916024808301926020929190829003018186803b158015610f4957600080fd5b505afa158015610f5d573d6000803e3d6000fd5b505050506040513d6020811015610f7357600080fd5b505160075542600855565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314610fef576040805162461bcd60e51b815260206004820152601f6024820152600080516020613dad833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6000546001600160a01b03163314611060576040805162461bcd60e51b815260206004820152601f6024820152600080516020613dad833981519152604482015290519081900360640190fd5b600454156110b5576040805162461bcd60e51b815260206004820152601860248201527f7069642068617320616c7265616479206265656e207365740000000000000000604482015290519081900360640190fd5b600081116110f8576040805162461bcd60e51b815260206004820152600b60248201526a1a5b9d985b1a59081c1a5960aa1b604482015290519081900360640190fd5b600455565b60055481565b6060600980548060200260200160405190810160405280929190818152602001828054801561115b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161113d575b5050505050905090565b6002546001600160a01b031633148061118857506000546001600160a01b031633145b6111cf576040805162461bcd60e51b81526020600482015260136024820152723ab730baba3437b934bd32b21039b2b73232b960691b604482015290519081900360640190fd5b6001600160a01b038181166000908152600a60205260409020541615611225576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b60005460405182916001600160a01b031690611240906123c7565b6001600160a01b03928316815291166020820152604080519182900301906000f080158015611273573d6000803e3d6000fd5b506001600160a01b039182166000818152600a602052604081208054939094166001600160a01b0319938416179093556009805460018101825593527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90920180549091169091179055565b600c6020526000908152604090205481565b6000546001600160a01b0316331461133e576040805162461bcd60e51b815260206004820152601f6024820152600080516020613dad833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600f60209081526040918290208054835181840281018401909452808452606093928301828280156113ca57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113ac575b5050505050905060008151905060608167ffffffffffffffff811180156113f057600080fd5b5060405190808252806020026020018201604052801561141a578160200160208202803683370190505b506001600160a01b03851660008181526010602090815260408083205481516370a0823160e01b8152600481019590955290519495509391927383952e7ab4aca74ca96217d6f8f7591bead6d64e926370a0823192602480840193919291829003018186803b15801561148c57600080fd5b505afa1580156114a0573d6000803e3d6000fd5b505050506040513d60208110156114b657600080fd5b5051905060005b8481101561154f576001600160a01b0387166000908152600e60205260408120875182908990859081106114ed57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054905061152f84610bd08584611df090919063ffffffff16565b85838151811061153b57fe5b6020908102919091010152506001016114bd565b5061155b868685611bb4565b505050505050565b6001600160a01b039081166000908152600a60205260409020541690565b600a602052600090815260409020546001600160a01b031681565b6002546001600160a01b03163314806115bf57506000546001600160a01b031633145b611606576040805162461bcd60e51b81526020600482015260136024820152723ab730baba3437b934bd32b21039b2b73232b960691b604482015290519081900360640190fd5b6001600160a01b038181166000908152600a6020526040902054161561165c576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b6001600160a01b039081166000908152600b602081815260408084208054600a8452919094208054919095166001600160a01b0319918216179094555280549091169055565b6003546001600160a01b031681565b6003546001600160a01b031633146116fa5760405162461bcd60e51b8152600401808060200182810382526027815260200180613d266027913960400191505060405180910390fd5b600354600280546001600160a01b0319166001600160a01b03909216919091179055565b6002546001600160a01b0316331461177d576040805162461bcd60e51b815260206004820181905260248201527f756e617574686f72697a65642073656e64657220287374726174656769737429604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600e60209081526000928352604080842090915290825290205481565b600060045411611809576040805162461bcd60e51b81526020600482015260136024820152721c1a59081b9bdd081a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290517f0000000000000000000000000000000000000000000000000000000000000000916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561187457600080fd5b505afa158015611888573d6000803e3d6000fd5b505050506040513d602081101561189e57600080fd5b505190506118d16001600160a01b03831673b12531a2d758c7a8bf09f44fc88e646e1bf9d375600063ffffffff611e7316565b6118ff6001600160a01b03831673b12531a2d758c7a8bf09f44fc88e646e1bf9d3758363ffffffff611e7316565b73b12531a2d758c7a8bf09f44fc88e646e1bf9d3756001600160a01b031663e2bbb158600454836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561196357600080fd5b505af115801561155b573d6000803e3d6000fd5b61198033611f86565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60048054604080516393f1a40b60e01b815292830191909152306024830152805160009273b12531a2d758c7a8bf09f44fc88e646e1bf9d375926393f1a40b92604480840193829003018186803b158015611a0057600080fd5b505afa158015611a14573d6000803e3d6000fd5b505050506040513d6040811015611a2a57600080fd5b50516004805460408051630441a3e760e41b815292830191909152602482018390525191925073b12531a2d758c7a8bf09f44fc88e646e1bf9d3759163441a3e709160448082019260009290919082900301818387803b158015611a8d57600080fd5b505af1158015611aa1573d6000803e3d6000fd5b50505050611aad6117bc565b50565b73c38f41a296a4493ff429f1238e030924a1542e5081565b60045481565b600f6020528160005260406000208181548110611ae757fe5b6000918252602090912001546001600160a01b03169150829050565b6000546001600160a01b03163314611b50576040805162461bcd60e51b815260206004820152601f6024820152600080516020613dad833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152601160205260409020805460ff19169055565b6001546001600160a01b031681565b6000611bab8383604051806040016040528060068152602001657375623a202d60d01b815250612094565b90505b92915050565b611bbd83611f86565b8151604080516370a0823160e01b81526001600160a01b038616600482015290516000917383952e7ab4aca74ca96217d6f8f7591bead6d64e916370a0823191602480820192602092909190829003018186803b158015611c1d57600080fd5b505afa158015611c31573d6000803e3d6000fd5b505050506040513d6020811015611c4757600080fd5b50519050600080805b84811015611c8857611c7e868281518110611c6757fe5b60200260200101518461212b90919063ffffffff16565b9250600101611c50565b5060005b84811015611dcb576000878281518110611ca257fe5b6020908102919091018101516001600160a01b038082166000908152600a90935260408320548a51929450169190611cfe908790610bd0908a908d9089908110611ce857fe5b6020026020010151611df090919063ffffffff16565b90506001600160a01b03821615611dc057611d1f858263ffffffff61212b16565b600554909550611d35908263ffffffff61212b16565b6005556001600160a01b0383166000908152600c6020526040902054611d61908263ffffffff61212b16565b6001600160a01b038085166000818152600c6020908152604080832095909555928f16808252600f845284822080546001810182559083528483200180546001600160a01b031916841790558152600e83528381209181529152208190555b505050600101611c8c565b506001600160a01b039096166000908152601060205260409020959095555050505050565b600082611dff57506000611bae565b82820282848281611e0c57fe5b0414611bab576040805162461bcd60e51b815260206004820152600660248201526536bab61d101560d11b604482015290519081900360640190fd5b6000611bab8383604051806040016040528060068152602001656469763a202f60d01b81525061216e565b801580611ef9575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015611ecb57600080fd5b505afa158015611edf573d6000803e3d6000fd5b505050506040513d6020811015611ef557600080fd5b5051155b611f345760405162461bcd60e51b8152600401808060200182810382526036815260200180613d776036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610c999084906121d3565b6001600160a01b0381166000908152600f60205260408120805490915b81811015612072576000838281548110611fb957fe5b60009182526020808320909101546001600160a01b038881168452600e8352604080852091909216808552925290912054909150801561206857600554612006908263ffffffff611b8016565b6005556001600160a01b0382166000908152600c6020526040902054612032908263ffffffff611b8016565b6001600160a01b038084166000818152600c6020908152604080832095909555928a168152600e83528381209181529152908120555b5050600101611fa3565b506001600160a01b0383166000908152600f60205260408120610c99916123d4565b600081848411156121235760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120e85781810151838201526020016120d0565b50505050905090810190601f1680156121155780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611bab576040805162461bcd60e51b81526020600482015260066024820152656164643a202b60d01b604482015290519081900360640190fd5b600081836121bd5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156120e85781810151838201526020016120d0565b5060008385816121c957fe5b0495945050505050565b6121e5826001600160a01b031661238b565b612236576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106122745780518252601f199092019160209182019101612255565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146122d6576040519150601f19603f3d011682016040523d82523d6000602084013e6122db565b606091505b509150915081612332576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156109d85780806020019051602081101561234e57600080fd5b50516109d85760405162461bcd60e51b815260040180806020018281038252602a815260200180613d4d602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906123bf5750808214155b949350505050565b61191a8061240c83390190565b5080546000825590600052602060002090810190611aad919061072191905b8082111561240757600081556001016123f3565b509056fe60a06040526000600455600060055534801561001a57600080fd5b5060405161191a38038061191a8339818101604052604081101561003d57600080fd5b50805160209091015160016000818155606084901b6001600160601b03191660805260038054336001600160a01b0319918216179091558254166001600160a01b039384161790915591169061186b906100af903980610b4b5280610e9752806111ac52806113d4525061186b6000f3fe608060405234801561001057600080fd5b50600436106102105760003560e01c80637c91e4eb11610125578063cd3daf9d116100ad578063df136d651161007c578063df136d65146104a6578063e9fad8ee146104ae578063ebe2b12b146104b6578063ecb7347f146104be578063f39c38a0146104c657610210565b8063cd3daf9d14610468578063d35e254414610470578063d7da4bb014610496578063de5f62681461049e57610210565b80638b876347116100f45780638b876347146103d157806396c55175146103f7578063ab033ea91461041d578063b6b55f2514610443578063c8f33c911461046057610210565b80637c91e4eb146103b157806380faa57d146103b957806382bfefc8146103c1578063853828b6146103c957610210565b806336efd16f116101a857806362b009d91161017757806362b009d91461032f57806363fb415b146103555780636efc0e6f1461037b57806370a08231146103835780637b0a47ee146103a957610210565b806336efd16f146102d65780633c6b16ab146103025780633d18b9121461031f5780635aa6e6751461032757610210565b80631c1f78eb116101e45780631c1f78eb14610283578063238efcbc1461028b5780632d2c5565146102955780632e1a7d4d146102b957610210565b80628cc262146102155780630700037d1461024d57806318160ddd146102735780631be052891461027b575b600080fd5b61023b6004803603602081101561022b57600080fd5b50356001600160a01b03166104ce565b60408051918252519081900360200190f35b61023b6004803603602081101561026357600080fd5b50356001600160a01b0316610564565b61023b610576565b61023b61057d565b61023b610584565b6102936105a2565b005b61029d610625565b604080516001600160a01b039092168252519081900360200190f35b610293600480360360208110156102cf57600080fd5b503561063d565b610293600480360360408110156102ec57600080fd5b50803590602001356001600160a01b0316610649565b6102936004803603602081101561031857600080fd5b5035610657565b6102936108f5565b61029d610a51565b6102936004803603602081101561034557600080fd5b50356001600160a01b0316610a60565b61023b6004803603602081101561036b57600080fd5b50356001600160a01b0316610ae1565b61029d610af3565b61023b6004803603602081101561039957600080fd5b50356001600160a01b0316610b0b565b61023b610b26565b61029d610b2c565b61023b610b3b565b61029d610b49565b610293610b6d565b61023b600480360360208110156103e757600080fd5b50356001600160a01b0316610b88565b6102936004803603602081101561040d57600080fd5b50356001600160a01b0316610b9a565b6102936004803603602081101561043357600080fd5b50356001600160a01b0316610c0a565b6102936004803603602081101561045957600080fd5b5035610c8b565b61023b610c95565b61023b610c9b565b61023b6004803603602081101561048657600080fd5b50356001600160a01b0316610cf5565b61023b610e6d565b610293610e73565b61023b610f10565b610293610f16565b61023b610f37565b61029d610f3d565b61029d610f55565b6001600160a01b038116600090815260096020908152604080832054600890925282205461055e919061055290670de0b6b3a7640000906105469061052190610515610c9b565b9063ffffffff610f6416565b6001600160a01b0388166000908152600d60205260409020549063ffffffff610f9616565b9063ffffffff610fee16565b9063ffffffff61101916565b92915050565b60096020526000908152604090205481565b600a545b90565b62093a8081565b60055460009061059d9062093a8063ffffffff610f9616565b905090565b6002546001600160a01b03163314610601576040805162461bcd60e51b815260206004820152601d60248201527f616363657074476f7665726e616e63653a202170656e64696e67476f76000000604482015290519081900360640190fd5b600254600180546001600160a01b0319166001600160a01b03909216919091179055565b73294ab3200ef36200db84c4128b7f1b4eec71e38a81565b6106468161105c565b50565b6106538282611238565b5050565b6003546001600160a01b031633146106a05760405162461bcd60e51b815260040180806020018281038252602a8152602001806117e2602a913960400191505060405180910390fd5b60006106aa610c9b565b6007556106b5610b3b565b6006556001600160a01b038116156106fc576106d0816104ce565b6001600160a01b0382166000908152600960209081526040808320939093556007546008909152919020555b60035461072f9073c38f41a296a4493ff429f1238e030924a1542e50906001600160a01b0316308563ffffffff61142416565b60045442106107535761074b8262093a8063ffffffff610fee16565b6005556107a1565b600454600090610769904263ffffffff610f6416565b9050600061078260055483610f9690919063ffffffff16565b905061079b62093a80610546868463ffffffff61101916565b60055550505b604080516370a0823160e01b8152306004820152905160009173c38f41a296a4493ff429f1238e030924a1542e50916370a0823191602480820192602092909190829003018186803b1580156107f657600080fd5b505afa15801561080a573d6000803e3d6000fd5b505050506040513d602081101561082057600080fd5b505190506108378162093a8063ffffffff610fee16565b600554111561088d576040805162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f20686967680000000000000000604482015290519081900360640190fd5b4260068190556108a69062093a8063ffffffff61101916565b6004556040805184815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a1506001600160a01b038116156106535761065381610b9a565b6002600054141561094d576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000553361095b610c9b565b600755610966610b3b565b6006556001600160a01b038116156109ad57610981816104ce565b6001600160a01b0382166000908152600960209081526040808320939093556007546008909152919020555b336000908152600960205260409020548015610a3057336000818152600960205260408120556109f99073c38f41a296a4493ff429f1238e030924a1542e50908363ffffffff61148416565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b506001600160a01b03811615610a4957610a4981610b9a565b506001600055565b6001546001600160a01b031681565b6001546001600160a01b03163314610abf576040805162461bcd60e51b815260206004820152601f60248201527f756e617574686f72697a65642073656e6465722028676f7665726e616e636500604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600d6020526000908152604090205481565b7383952e7ab4aca74ca96217d6f8f7591bead6d64e81565b6001600160a01b03166000908152600c602052604090205490565b60055481565b6003546001600160a01b031681565b600061059d426004546114db565b7f000000000000000000000000000000000000000000000000000000000000000081565b336000908152600c6020526040902054610b869061105c565b565b60086020526000908152604090205481565b6001600160a01b0381166000908152600d6020526040902054600b54610bc6908263ffffffff610f6416565b600b55610bd282610cf5565b6001600160a01b0383166000908152600d60205260409020819055600b54909150610c03908263ffffffff61101916565b600b555050565b6001546001600160a01b03163314610c69576040805162461bcd60e51b815260206004820152601f60248201527f756e617574686f72697a65642073656e6465722028676f7665726e616e636500604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6106468133611238565b60065481565b6000600a5460001415610cb1575060075461057a565b61059d610ce6600b54610546670de0b6b3a7640000610cda600554610cda600654610515610b3b565b9063ffffffff610f9616565b6007549063ffffffff61101916565b6001600160a01b0381166000908152600c602052604081205481610d25606461054684602863ffffffff610f9616565b90506000610e496064610546603c610cda7383952e7ab4aca74ca96217d6f8f7591bead6d64e6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8357600080fd5b505afa158015610d97573d6000803e3d6000fd5b505050506040513d6020811015610dad57600080fd5b5051604080516370a0823160e01b81526001600160a01b038d1660048201529051610546917383952e7ab4aca74ca96217d6f8f7591bead6d64e916370a0823191602480820192602092909190829003018186803b158015610e0e57600080fd5b505afa158015610e22573d6000803e3d6000fd5b505050506040513d6020811015610e3857600080fd5b5051600a549063ffffffff610f9616565b9050610e64610e5e838363ffffffff61101916565b846114db565b95945050505050565b600b5481565b604080516370a0823160e01b81523360048201529051610b86916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015610ede57600080fd5b505afa158015610ef2573d6000803e3d6000fd5b505050506040513d6020811015610f0857600080fd5b505133611238565b60075481565b336000908152600c6020526040902054610f2f9061105c565b610b866108f5565b60045481565b73c38f41a296a4493ff429f1238e030924a1542e5081565b6002546001600160a01b031681565b6000610f8f8383604051806040016040528060068152602001657375623a202d60d01b8152506114f1565b9392505050565b600082610fa55750600061055e565b82820282848281610fb257fe5b0414610f8f576040805162461bcd60e51b815260206004820152600660248201526536bab61d101560d11b604482015290519081900360640190fd5b6000610f8f8383604051806040016040528060068152602001656469763a202f60d01b815250611588565b600082820183811015610f8f576040805162461bcd60e51b81526020600482015260066024820152656164643a202b60d01b604482015290519081900360640190fd5b600260005414156110b4576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055336110c2610c9b565b6007556110cd610b3b565b6006556001600160a01b03811615611114576110e8816104ce565b6001600160a01b0382166000908152600960209081526040808320939093556007546008909152919020555b6000821161115d576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b600a54611170908363ffffffff610f6416565b600a55336000908152600c6020526040902054611193908363ffffffff610f6416565b336000818152600c60205260409020919091556111e1907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316908463ffffffff61148416565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a26001600160a01b0381161561122f5761122f81610b9a565b50506001600055565b60026000541415611290576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000558061129e610c9b565b6007556112a9610b3b565b6006556001600160a01b038116156112f0576112c4816104ce565b6001600160a01b0382166000908152600960209081526040808320939093556007546008909152919020555b60008311611336576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b600a54611349908463ffffffff61101916565b600a556001600160a01b0382166000908152600c6020526040902054611375908463ffffffff61101916565b6001600160a01b0383166000818152600c6020908152604091829020939093558051868152905191927f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d92918290030190a26114026001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683308663ffffffff61142416565b6001600160a01b0381161561141a5761141a81610b9a565b5050600160005550565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261147e9085906115ed565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526114d69084906115ed565b505050565b60008183106114ea5781610f8f565b5090919050565b600081848411156115805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561154557818101518382015260200161152d565b50505050905090810190601f1680156115725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836115d75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561154557818101518382015260200161152d565b5060008385816115e357fe5b0495945050505050565b6115ff826001600160a01b03166117a5565b611650576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061168e5780518252601f19909201916020918201910161166f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146116f0576040519150601f19603f3d011682016040523d82523d6000602084013e6116f5565b606091505b50915091508161174c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561147e5780806020019051602081101561176857600080fd5b505161147e5760405162461bcd60e51b815260040180806020018281038252602a81526020018061180c602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906117d95750808214155b94935050505056fe43616c6c6572206973206e6f742052657761726473446973747269627574696f6e20636f6e74726163745361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220183450e1fa31e421e43a1c89279cdf73fd640126be89f649b8ec55143e61dfc964736f6c63430006070033756e617574686f72697a65642073656e646572202870656e64696e6753747261746567697374295361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365756e617574686f72697a65642073656e6465722028676f7665726e616e636500a2646970667358221220353c5784b4d37c040d293a3e64f1ed1fb1cfbc5f7e5948f88df05b672967c39764736f6c634300060700336080604052670de0b6b3a764000060005534801561001c57600080fd5b50336000818152600260209081526040808320670de0b6b3a764000090819055815190815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a361077d8061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063313ce56711610066578063313ce567146101a557806370a08231146101c357806395d89b41146101e9578063a9059cbb146101f1578063dd62ed3e1461021d57610093565b806306fdde0314610098578063095ea7b31461011557806318160ddd1461015557806323b872dd1461016f575b600080fd5b6100a061024b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100da5781810151838201526020016100c2565b50505050905090810190601f1680156101075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101416004803603604081101561012b57600080fd5b506001600160a01b038135169060200135610275565b604080519115158252519081900360200190f35b61015d6102db565b60408051918252519081900360200190f35b6101416004803603606081101561018557600080fd5b506001600160a01b038135811691602081013590911690604001356102e1565b6101ad6103c9565b6040805160ff9092168252519081900360200190f35b61015d600480360360208110156101d957600080fd5b50356001600160a01b03166103ce565b6100a06103e9565b6101416004803603604081101561020757600080fd5b506001600160a01b03813516906020013561040f565b61015d6004803603604081101561023357600080fd5b506001600160a01b0381358116916020013516610425565b6040518060400160405280600e81526020016d4d616b6520534e4f57434f4e455360901b81525081565b3360008181526001602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60005481565b6001600160a01b03831660008181526001602090815260408083203380855292528220549192909190821480159061031b57506000198114155b156103b257600061034d856040518060600160405280602781526020016107216027913984919063ffffffff61045016565b6001600160a01b0380891660008181526001602090815260408083209489168084529482529182902085905581518581529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a3505b6103bd8686866104e7565b50600195945050505050565b601281565b6001600160a01b031660009081526002602052604090205490565b6040518060400160405280600a8152602001696d534e4f57434f4e455360b01b81525081565b600061041c3384846104e7565b50600192915050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600081848411156104df5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156104a457818101518382015260200161048c565b50505050905090810190601f1680156104d15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038316610542576040805162461bcd60e51b815260206004820152601d60248201527f5f7472616e73666572546f6b656e733a207a65726f2061646472657373000000604482015290519081900360640190fd5b6001600160a01b03821661059d576040805162461bcd60e51b815260206004820152601d60248201527f5f7472616e73666572546f6b656e733a207a65726f2061646472657373000000604482015290519081900360640190fd5b60408051808201825260208082527f5f7472616e73666572546f6b656e733a20657863656564732062616c616e6365818301526001600160a01b0386166000908152600290915291909120546105fa91839063ffffffff61045016565b6001600160a01b0380851660009081526002602081815260408084209590955584518086018652601a81527f5f7472616e73666572546f6b656e733a206f766572666c6f777300000000000081830152938716835252919091205461066691839063ffffffff6106c216565b6001600160a01b0380841660008181526002602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600083830182858210156107175760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156104a457818101518382015260200161048c565b5094935050505056fe7472616e7366657246726f6d3a2065786365656473207370656e64657220616c6c6f77616e6365a2646970667358221220d36810ed3b8613861c6f43f908e0f30ecf1bddbbee6f4d1a9911e27fbe30c5f864736f6c63430006070033
Deployed ByteCode Sourcemap
21651:8541:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21651:8541:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;22800:43:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22800:43:0;-1:-1:-1;;;;;22800:43:0;;:::i;:::-;;;;;;;;;;;;;;;;28607:87;;;:::i;9639:25::-;;;:::i;:::-;;;;-1:-1:-1;;;;;9639:25:0;;;;;;;;;;;;;;9371:170;;;:::i;:::-;;22422:45;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22422:45:0;-1:-1:-1;;;;;22422:45:0;;:::i;21786:86::-;;;:::i;8666:25::-;;;:::i;26981:308::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26981:308:0;-1:-1:-1;;;;;26981:308:0;;:::i;22896:41::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22896:41:0;-1:-1:-1;;;;;22896:41:0;;:::i;:::-;;;;;;;;;;;;;;;;;;21879:84;;;:::i;26478:197::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;26478:197:0;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26478:197:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26478:197:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26478:197:0;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26478:197:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26478:197:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;26478:197:0;;-1:-1:-1;26478:197:0;-1:-1:-1;26478:197:0;:::i;29211:978::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29211:978:0;;;;;;;:::i;27587:211::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;27587:211:0;;;;;;;;;;:::i;28702:495::-;;;:::i;22067:29::-;;;:::i;22954:110::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22954:110:0;-1:-1:-1;;;;;22954:110:0;;:::i;27836:179::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27836:179:0;;:::i;22189:23::-;;;:::i;23382:92::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;23382:92:0;;;;;;;;;;;;;;;;;26715:225;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26715:225:0;-1:-1:-1;;;;;26715:225:0;;:::i;22492:39::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22492:39:0;-1:-1:-1;;;;;22492:39:0;;:::i;9131:117::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9131:117:0;-1:-1:-1;;;;;9131:117:0;;:::i;24548:592::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24548:592:0;-1:-1:-1;;;;;24548:592:0;;:::i;23486:106::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23486:106:0;-1:-1:-1;;;;;23486:106:0;;:::i;22356:41::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22356:41:0;-1:-1:-1;;;;;22356:41:0;;:::i;27342:210::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27342:210:0;-1:-1:-1;;;;;27342:210:0;;:::i;9671:32::-;;;:::i;10342:180::-;;;:::i;10101:118::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10101:118:0;-1:-1:-1;;;;;10101:118:0;;:::i;22629:57::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;22629:57:0;;;;;;;;;;:::i;28075:319::-;;;:::i;23759:63::-;;;:::i;22103:51::-;;;:::i;28437:158::-;;;:::i;21970:84::-;;;:::i;22167:15::-;;;:::i;22725:46::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;22725:46:0;;;;;;;;:::i;23072:114::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23072:114:0;-1:-1:-1;;;;;23072:114:0;;:::i;8698:32::-;;;:::i;22800:43::-;;;;;;;;;;;;;:::o;28607:87::-;28672:7;:14;28607:87;;:::o;9639:25::-;;;-1:-1:-1;;;;;9639:25:0;;:::o;9371:170::-;9441:17;;-1:-1:-1;;;;;9441:17:0;9427:10;:31;9419:73;;;;;-1:-1:-1;;;9419:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9516:17;;;9503:30;;-1:-1:-1;;;;;;9503:30:0;-1:-1:-1;;;;;9516:17:0;;;9503:30;;;;;;9371:170::o;22422:45::-;;;;;;;;;;;;-1:-1:-1;;;;;22422:45:0;;:::o;21786:86::-;21829:42;21786:86;:::o;8666:25::-;;;-1:-1:-1;;;;;8666:25:0;;:::o;26981:308::-;23265:10;;-1:-1:-1;;;;;23265:10:0;23251;:24;;:65;;-1:-1:-1;23306:10:0;;-1:-1:-1;;;;;23306:10:0;23292;:24;23251:65;23229:121;;;;;-1:-1:-1;;;23229:121:0;;;;;;;;;;;;-1:-1:-1;;;23229:121:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27064:14:0;;::::1;27090:3;27064:14:::0;;;:6:::1;:14;::::0;;;;;::::1;27056:57;;;::::0;;-1:-1:-1;;;27056:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27056:57:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;27145:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;;;;;;27124:10:::1;:18:::0;;;;;:35;;27145:14;;;::::1;-1:-1:-1::0;;;;;;27124:35:0;;::::1;;::::0;;;27170:21;;;;::::1;::::0;;;27232:7:::1;:15:::0;;;;27216:11:::1;::::0;:32:::1;::::0;:15:::1;:32::i;:::-;27202:11;:46:::0;-1:-1:-1;;;;;27266:15:0::1;;::::0;;;:7:::1;:15;::::0;;;;27259:22;26981:308::o;22896:41::-;;;;;;;;;;;;;;;:::o;21879:84::-;21920:42;21879:84;:::o;26478:197::-;26580:36;;;26572:45;;12:1:-1;9;2:12;26572:45:0;26628:39;26634:10;26646;;26628:39;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;26628:39:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26658:8:0;;-1:-1:-1;26658:8:0;;;;26628:39;;;26658:8;;26628:39;26658:8;26628:39;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;26628:5:0;;-1:-1:-1;;;26628:39:0:i;:::-;26478:197;;;;:::o;29211:978::-;29307:10;29297:21;;;;:9;:21;;;;;;;;;:62;;-1:-1:-1;29349:10:0;;-1:-1:-1;;;;;29349:10:0;29335;:24;29297:62;:103;;;-1:-1:-1;29390:10:0;;-1:-1:-1;;;;;29390:10:0;29376;:24;29297:103;29275:159;;;;;-1:-1:-1;;;29275:159:0;;;;;;;;;;;;-1:-1:-1;;;29275:159:0;;;;;;;;;;;;;;;29462:4;29453:6;:13;29445:36;;;;;-1:-1:-1;;;29445:36:0;;;;;;;;;;;;-1:-1:-1;;;29445:36:0;;;;;;;;;;;;;;;29508:7;:14;29500:22;;;29492:43;;;;;-1:-1:-1;;;29492:43:0;;;;;;;;;;;;-1:-1:-1;;;29492:43:0;;;;;;;;;;;;;;;29590:15;29565:21;29554:8;;:32;:51;;29546:76;;;;;-1:-1:-1;;;29546:76:0;;;;;;;;;;;;-1:-1:-1;;;29546:76:0;;;;;;;;;;;;;;;29653:1;29637:13;;:17;:42;;;;;29678:1;29658:17;;:21;29637:42;29633:549;;;29710:6;29696:475;29722:4;29718:1;:8;29696:475;;;29752:14;29769:7;29777:1;29769:10;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29769:10:0;;;29815:14;;;:6;:14;;;;;;;29908:11;;29881:13;:21;;;;;;;29863:13;;29769:10;;-1:-1:-1;29815:14:0;;;29769:10;29863:57;;29908:11;;29863:40;;;:17;:40;:::i;:::-;:44;:57;:44;:57;:::i;:::-;29848:72;-1:-1:-1;29943:11:0;;29939:217;;29979:31;22011:42;30000:6;30008:1;29979:31;:20;:31;:::i;:::-;30033:37;22011:42;30054:6;30062:7;30033:37;:20;:37;:::i;:::-;30101:6;-1:-1:-1;;;;;30093:34:0;;30128:7;30093:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30093:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30093:43:0;;;;29939:217;-1:-1:-1;;;29728:3:0;;29696:475;;;;29633:549;29211:978;;:::o;27587:211::-;23265:10;;-1:-1:-1;;;;;23265:10:0;23251;:24;;:65;;-1:-1:-1;23306:10:0;;-1:-1:-1;;;;;23306:10:0;23292;:24;23251:65;23229:121;;;;;-1:-1:-1;;;23229:121:0;;;;;;;;;;;;-1:-1:-1;;;23229:121:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27684:14:0;;::::1;27710:3;27684:14:::0;;;:6:::1;:14;::::0;;;;;::::1;:30:::0;27676:49:::1;;;::::0;;-1:-1:-1;;;27676:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27676:49:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;27736:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;:23;;;;;::::1;-1:-1:-1::0;;;;;;27736:23:0;;::::1;;::::0;;;27770:7:::1;27:10:-1::0;;27736:23:0;23:18:-1;::::1;45:23:::0;;27770:20:0;;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;27587:211::o;28702:495::-;28779:10;28769:21;;;;:9;:21;;;;;;;;;:62;;-1:-1:-1;28821:10:0;;-1:-1:-1;;;;;28821:10:0;28807;:24;28769:62;:103;;;-1:-1:-1;28862:10:0;;-1:-1:-1;;;;;28862:10:0;28848;:24;28769:103;28747:159;;;;;-1:-1:-1;;;28747:159:0;;;;;;;;;;;;-1:-1:-1;;;28747:159:0;;;;;;;;;;;;;;;28937:11;;28917:17;:31;-1:-1:-1;28959:114:0;28980:7;:14;28976:18;;28959:114;;;29042:7;:19;29050:7;29058:1;29050:10;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29050:10:0;-1:-1:-1;;;;;29042:19:0;-1:-1:-1;;;;;29042:19:0;;;;;;;;;;;;;29014:13;:25;29028:7;29036:1;29028:10;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29028:10:0;29014:25;;;;;;;;;;;;:47;29028:10;28996:3;28959:114;;;;29083:9;:7;:9::i;:::-;29119:33;;;-1:-1:-1;;;29119:33:0;;29146:4;29119:33;;;;;;22011:42;;29119:18;;:33;;;;;;;;;;;;;;22011:42;29119:33;;;2:2:-1;;;;27:1;24;17:12;2:2;29119:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29119:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29119:33:0;29103:13;:49;29174:15;29163:8;:26;28702:495::o;22067:29::-;;;:::o;22954:110::-;8896:10;;-1:-1:-1;;;;;8896:10:0;8882;:24;8874:68;;;;;-1:-1:-1;;;8874:68:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8874:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23029:20:0::1;;::::0;;;:9:::1;:20;::::0;;;;:27;;-1:-1:-1;;23029:27:0::1;23052:4;23029:27;::::0;;22954:110::o;27836:179::-;8896:10;;-1:-1:-1;;;;;8896:10:0;8882;:24;8874:68;;;;;-1:-1:-1;;;8874:68:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8874:68:0;;;;;;;;;;;;;;;27906:3:::1;::::0;:8;27898:45:::1;;;::::0;;-1:-1:-1;;;27898:45:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27969:1;27962:4;:8;27954:32;;;::::0;;-1:-1:-1;;;27954:32:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27954:32:0;;;;;;;;;;;;;::::1;;27997:3;:10:::0;27836:179::o;22189:23::-;;;;:::o;23382:92::-;23423:16;23459:7;23452:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23452:14:0;;;;;;;;;;;;;;;;;;;;;;;23382:92;:::o;26715:225::-;23265:10;;-1:-1:-1;;;;;23265:10:0;23251;:24;;:65;;-1:-1:-1;23306:10:0;;-1:-1:-1;;;;;23306:10:0;23292;:24;23251:65;23229:121;;;;;-1:-1:-1;;;23229:121:0;;;;;;;;;;;;-1:-1:-1;;;23229:121:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26792:14:0;;::::1;26818:3;26792:14:::0;;;:6:::1;:14;::::0;;;;;::::1;:30:::0;26784:49:::1;;;::::0;;-1:-1:-1;;;26784:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26784:49:0;;;;;;;;;;;;;::::1;;26889:10;::::0;26869:31:::1;::::0;26881:6;;-1:-1:-1;;;;;26889:10:0::1;::::0;26869:31:::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;26869:31:0;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;;;;;;;;;-1:-1:-1;26869:31:0::1;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;;;;;26844:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;:57;;;;;::::1;-1:-1:-1::0;;;;;;26844:57:0;;::::1;;::::0;;;26912:7:::1;27:10:-1::0;;26844:57:0;23:18:-1;::::1;45:23:::0;;26912:20:0;;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;26715:225::o;22492:39::-;;;;;;;;;;;;;:::o;9131:117::-;8896:10;;-1:-1:-1;;;;;8896:10:0;8882;:24;8874:68;;;;;-1:-1:-1;;;8874:68:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8874:68:0;;;;;;;;;;;;;;;9209:17:::1;:31:::0;;-1:-1:-1;;;;;;9209:31:0::1;-1:-1:-1::0;;;;;9209:31:0;;;::::1;::::0;;;::::1;::::0;;9131:117::o;24548:592::-;-1:-1:-1;;;;;24626:17:0;;;;;;:9;:17;;;;;;;;;24596:47;;;;;;;;;;;;;;;;;:27;;:47;;;24626:17;24596:47;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24596:47:0;;;;;;;;;;;;;;;;;;;;;;;24654:17;24674:10;:17;24654:37;;24702:25;24741:9;24730:21;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24730:21:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;24730:21:0;-1:-1:-1;;;;;;24798:19:0;;24772:23;24798:19;;;:11;:19;;;;;;;;;24846:26;;-1:-1:-1;;;24846:26:0;;;;;;;;;;;24702:49;;-1:-1:-1;24798:19:0;24772:23;;21920:42;;24846:18;;:26;;;;;24798:19;;24846:26;;;;;;21920:42;24846:26;;;2:2:-1;;;;27:1;24;17:12;2:2;24846:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24846:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24846:26:0;;-1:-1:-1;24898:9:0;24893:192;24917:9;24913:1;:13;24893:192;;;-1:-1:-1;;;;;24971:13:0;;24949:19;24971:13;;;:5;:13;;;;;24985;;24949:19;;24985:10;;24996:1;;24985:13;;;;;;;;;;;;-1:-1:-1;;;;;24971:28:0;-1:-1:-1;;;;;24971:28:0;;;;;;;;;;;;;24949:50;;25028:45;25057:15;25028:24;25044:7;25028:11;:15;;:24;;;;:::i;:45::-;25014:8;25023:1;25014:11;;;;;;;;;;;;;;;;;:59;-1:-1:-1;24928:4:0;;24893:192;;;;25097:35;25103:6;25111:10;25123:8;25097:5;:35::i;:::-;24548:592;;;;;;:::o;23486:106::-;-1:-1:-1;;;;;23570:14:0;;;23543:7;23570:14;;;:6;:14;;;;;;;;23486:106::o;22356:41::-;;;;;;;;;;;;-1:-1:-1;;;;;22356:41:0;;:::o;27342:210::-;23265:10;;-1:-1:-1;;;;;23265:10:0;23251;:24;;:65;;-1:-1:-1;23306:10:0;;-1:-1:-1;;;;;23306:10:0;23292;:24;23251:65;23229:121;;;;;-1:-1:-1;;;23229:121:0;;;;;;;;;;;;-1:-1:-1;;;23229:121:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27421:14:0;;::::1;27447:3;27421:14:::0;;;:6:::1;:14;::::0;;;;;::::1;:30:::0;27413:49:::1;;;::::0;;-1:-1:-1;;;27413:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27413:49:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;27490:18:0;;::::1;;::::0;;;:10:::1;:18;::::0;;;;;;;;;27473:6:::1;:14:::0;;;;;;:35;;27490:18;;;::::1;-1:-1:-1::0;;;;;;27473:35:0;;::::1;;::::0;;;27526:18;27519:25;;;;::::1;::::0;;27342:210::o;9671:32::-;;;-1:-1:-1;;;;;9671:32:0;;:::o;10342:180::-;10412:17;;-1:-1:-1;;;;;10412:17:0;10398:10;:31;10390:83;;;;-1:-1:-1;;;10390:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10497:17;;10484:10;:30;;-1:-1:-1;;;;;;10484:30:0;-1:-1:-1;;;;;10497:17:0;;;10484:30;;;;;;10342:180::o;10101:118::-;9865:10;;-1:-1:-1;;;;;9865:10:0;9851;:24;9843:69;;;;;-1:-1:-1;;;9843:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10180:17:::1;:31:::0;;-1:-1:-1;;;;;;10180:31:0::1;-1:-1:-1::0;;;;;10180:31:0;;;::::1;::::0;;;::::1;::::0;;10101:118::o;22629:57::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;28075:319::-;28126:1;28120:3;;:7;28112:39;;;;;-1:-1:-1;;;28112:39:0;;;;;;;;;;;;-1:-1:-1;;;28112:39:0;;;;;;;;;;;;;;;28210:31;;;-1:-1:-1;;;28210:31:0;;28235:4;28210:31;;;;;;28178:5;;28162:13;;-1:-1:-1;;;;;28210:16:0;;;;;:31;;;;;;;;;;;;;;:16;:31;;;2:2:-1;;;;27:1;24;17:12;2:2;28210:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28210:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28210:31:0;;-1:-1:-1;28252:38:0;-1:-1:-1;;;;;28252:18:0;;21829:42;28288:1;28252:38;:18;:38;:::i;:::-;28301:45;-1:-1:-1;;;;;28301:18:0;;21829:42;28337:8;28301:45;:18;:45;:::i;:::-;21829:42;-1:-1:-1;;;;;28357:14:0;;28372:3;;28377:8;28357:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28357:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;23759:63:0;23796:18;23803:10;23796:6;:18::i;:::-;23759:63::o;22103:51::-;;;:::o;28437:158::-;28508:3;;;28492:35;;;-1:-1:-1;;;28492:35:0;;;;;;;;;28521:4;28492:35;;;;;;28475:12;;21829:42;;28492:15;;:35;;;;;;;;;;21829:42;28492:35;;;2:2:-1;;;;27:1;24;17:12;2:2;28492:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28492:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28492:35:0;28554:3;;;28492:35;28538:29;;-1:-1:-1;;;28538:29:0;;;;;;;;;;;;;;;;28492:35;;-1:-1:-1;21829:42:0;;28538:15;;:29;;;;;-1:-1:-1;;28538:29:0;;;;;;;;-1:-1:-1;21829:42:0;28538:29;;;2:2:-1;;;;27:1;24;17:12;2:2;28538:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28538:29:0;;;;28578:9;:7;:9::i;:::-;28437:158;:::o;21970:84::-;22011:42;21970:84;:::o;22167:15::-;;;;:::o;22725:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22725:46:0;;-1:-1:-1;22725:46:0;;-1:-1:-1;22725:46:0:o;23072:114::-;8896:10;;-1:-1:-1;;;;;8896:10:0;8882;:24;8874:68;;;;;-1:-1:-1;;;8874:68:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8874:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23150:20:0::1;23173:5;23150:20:::0;;;:9:::1;:20;::::0;;;;:28;;-1:-1:-1;;23150:28:0::1;::::0;;23072:114::o;8698:32::-;;;-1:-1:-1;;;;;8698:32:0;;:::o;485:103::-;537:4;561:19;565:1;568;561:19;;;;;;;;;;;;;-1:-1:-1;;;561:19:0;;;:3;:19::i;:::-;554:26;;485:103;;;;;:::o;25152:1124::-;25302:14;25309:6;25302;:14::i;:::-;25347:17;;25393:26;;;-1:-1:-1;;;25393:26:0;;-1:-1:-1;;;;;25393:26:0;;;;;;;;25327:17;;21920:42;;25393:18;;:26;;;;;;;;;;;;;;;21920:42;25393:26;;;2:2:-1;;;;27:1;24;17:12;2:2;25393:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25393:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25393:26:0;;-1:-1:-1;25430:24:0;;;25505:120;25529:9;25525:1;:13;25505:120;;;25580:33;25601:8;25610:1;25601:11;;;;;;;;;;;;;;25580:16;:20;;:33;;;;:::i;:::-;25561:52;-1:-1:-1;25540:4:0;;25505:120;;;-1:-1:-1;25642:9:0;25637:586;25661:9;25657:1;:13;25637:586;;;25693:14;25710:10;25721:1;25710:13;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25755:14:0;;;25738;25755;;;:6;:14;;;;;;;25807:11;;25710:13;;-1:-1:-1;25755:14:0;;25738;25807:46;;25836:16;;25807:24;;25823:7;;25807:8;;25816:1;;25807:11;;;;;;;;;;;;:15;;:24;;;;:::i;:46::-;25784:69;-1:-1:-1;;;;;;25874:22:0;;;25870:342;;25931:29;:11;25947:12;25931:29;:15;:29;:::i;:::-;25993:11;;25917:43;;-1:-1:-1;25993:29:0;;26009:12;25993:29;:15;:29;:::i;:::-;25979:11;:43;-1:-1:-1;;;;;26059:15:0;;;;;;:7;:15;;;;;;:33;;26079:12;26059:33;:19;:33;:::i;:::-;-1:-1:-1;;;;;26041:15:0;;;;;;;:7;:15;;;;;;;;:51;;;;26111:17;;;;;;:9;:17;;;;;27:10:-1;;39:1;23:18;;45:23;;26111:30:0;;;;;;;;;-1:-1:-1;;;;;;26111:30:0;;;;;26160:13;;:5;:13;;;;;:21;;;;;;:36;;;25870:342;-1:-1:-1;;;25672:4:0;;25637:586;;;-1:-1:-1;;;;;;26235:19:0;;;;;;;:11;:19;;;;;:33;;;;-1:-1:-1;;;;;25152:1124:0:o;780:432::-;832:4;1074:6;1070:47;;-1:-1:-1;1104:1:0;1097:8;;1070:47;1138:5;;;1142:1;1138;:5;:1;1162:5;;;;;:10;1154:29;;;;;-1:-1:-1;;;1154:29:0;;;;;;;;;;;;-1:-1:-1;;;1154:29:0;;;;;;;;;;;;;;1467:103;1519:4;1543:19;1547:1;1550;1543:19;;;;;;;;;;;;;-1:-1:-1;;;1543:19:0;;;:3;:19::i;3679:347::-;3775:10;;;3774:62;;-1:-1:-1;3791:39:0;;;-1:-1:-1;;;3791:39:0;;3815:4;3791:39;;;;-1:-1:-1;;;;;3791:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;2:2:-1;;;;27:1;24;17:12;2:2;3791:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3791:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3791:39:0;:44;3774:62;3766:152;;;;-1:-1:-1;;;3766:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3955:62;;;-1:-1:-1;;;;;3955:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3955:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;3929:89:0;;3948:5;;3929:18;:89::i;23859:600::-;-1:-1:-1;;;;;23942:17:0;;23911:28;23942:17;;;:9;:17;;;;;23994;;23942;;24024:391;24045:13;24041:1;:17;24024:391;;;24081:14;24098:10;24109:1;24098:13;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24140:13:0;;;;;:5;:13;;;;;;24098;;;;24140:21;;;;;;;;;24098:13;;-1:-1:-1;24194:10:0;;24190:214;;24239:11;;:23;;24255:6;24239:23;:15;:23;:::i;:::-;24225:11;:37;-1:-1:-1;;;;;24299:15:0;;;;;;:7;:15;;;;;;:27;;24319:6;24299:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;24281:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;24363:13;;;;;:5;:13;;;;;:21;;;;;;;;:25;24190:214;-1:-1:-1;;24060:4:0;;24024:391;;;-1:-1:-1;;;;;;24434:17:0;;;;;;:9;:17;;;;;24427:24;;;:::i;594:180::-;674:4;707:12;699:6;;;;691:29;;;;-1:-1:-1;;;691:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;691:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;740:5:0;;;594:180::o;145:148::-;197:4;223:5;;;247:6;;;;239:25;;;;;-1:-1:-1;;;239:25:0;;;;;;;;;;;;-1:-1:-1;;;239:25:0;;;;;;;;;;;;;;1576:179;1656:4;1688:12;1681:5;1673:28;;;;-1:-1:-1;;;1673:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1673:28:0;;1712:6;1725:1;1721;:5;;;;;;;1576:179;-1:-1:-1;;;;;1576:179:0:o;4663:598::-;4751:27;4759:5;-1:-1:-1;;;;;4751:25:0;;:27::i;:::-;4743:71;;;;;-1:-1:-1;;;4743:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4888:12;4902:23;4937:5;-1:-1:-1;;;;;4929:19:0;4949:4;4929:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4929:25:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;4887:67:0;;;;4973:7;4965:52;;;;;-1:-1:-1;;;4965:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5034:17;;:21;5030:224;;5176:10;5165:30;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5165:30:0;5157:85;;;;-1:-1:-1;;;5157:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1785:374;1845:4;2068:20;;1911:66;2108:15;;;;;:42;;;2139:11;2127:8;:23;;2108:42;2100:51;1785:374;-1:-1:-1;;;;1785:374:0:o;21651:8541::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://d36810ed3b8613861c6f43f908e0f30ecf1bddbbee6f4d1a9911e27fbe30c5f8
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.