Contract Overview
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Kronos
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-04-13 */ // DISCORD: http://discord.gg/Kronos-Sale // WEBSITE: https://www.KronosSale.com // TWITTER: https://www.twitter.com/KronosSale // REDDIT: https://www.reddit.com/r/KronosSale // TG: https://t.me/KronosSalePortal // SPDX-License-Identifier: MIT pragma solidity 0.8.12; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IMeerkatV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IMeerkatV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IMeerkatV2Router02 is IMeerkatV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IMeerkatV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); 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 (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface ICRC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface ICRC20Metadata is ICRC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } interface DividendPayingTokenInterface { function dividendOf(address _owner) external view returns(uint256); function distributeDividends() external payable; function withdrawDividend() external; event DividendsDistributed( address indexed from, uint256 weiAmount ); event DividendWithdrawn( address indexed to, uint256 weiAmount ); } interface DividendPayingTokenOptionalInterface { function withdrawableDividendOf(address _owner) external view returns(uint256); function withdrawnDividendOf(address _owner) external view returns(uint256); function accumulativeDividendOf(address _owner) external view returns(uint256); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // 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; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } library IterableMapping { struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) public view returns (int) { if(!map.inserted[key]) { return -1; } return int(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint index) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint) { return map.keys.length; } function set(Map storage map, address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract CRC20 is Context, ICRC20, ICRC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "CRC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "CRC20: decreased allowance below zero")); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "CRC20: transfer from the zero address"); require(recipient != address(0), "CRC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "CRC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "CRC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "CRC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "CRC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "CRC20: approve from the zero address"); require(spender != address(0), "CRC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract DividendPayingToken is CRC20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 constant internal magnitude = 2**128; uint256 internal magnifiedDividendPerShare; uint256 public totalDividendsDistributed; address public rewardToken; IMeerkatV2Router02 public meerkatV2Router; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; constructor(string memory _name, string memory _symbol) CRC20(_name, _symbol) {} receive() external payable { distributeDividends(); } function distributeDividends() public override onlyOwner payable { require(totalSupply() > 0); if (msg.value > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add((msg.value).mul(magnitude) / totalSupply()); emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed = totalDividendsDistributed.add(msg.value); } } function withdrawDividend() public virtual override onlyOwner { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend); emit DividendWithdrawn(user, _withdrawableDividend); if (rewardToken == meerkatV2Router.WETH()) { (bool success,) = user.call{value: _withdrawableDividend, gas: 3000}(""); if(!success) { withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend); return 0; } return _withdrawableDividend; } else { return swapCROForTokensAndWithdrawDividend(user, _withdrawableDividend); } } return 0; } function swapCROForTokensAndWithdrawDividend(address holder, uint256 croAmount) private returns(uint256) { address[] memory path = new address[](2); path[0] = meerkatV2Router.WETH(); path[1] = address(rewardToken); try meerkatV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : croAmount}( 0, // accept any amount of tokens path, address(holder), block.timestamp ) { return croAmount; } catch { withdrawnDividends[holder] = withdrawnDividends[holder].sub(croAmount); return 0; } } function dividendOf(address _owner) public view override returns(uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view override returns(uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view override returns(uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view override returns(uint256) { return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe() .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude; } function _transfer(address from, address to, uint256 value) internal virtual override { require(false); int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe(); magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection); magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection); } function _mint(address account, uint256 value) internal override { super._mint(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() ); } function _burn(address account, uint256 value) internal override { super._burn(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() ); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if(newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if(newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } function _setRewardToken(address token) internal onlyOwner { rewardToken = token; } function _setMeerkatRouter(address router) internal onlyOwner { meerkatV2Router = IMeerkatV2Router02(router); } } contract Kronos is Ownable, CRC20 { mapping (address => bool) private _isAllowedToTradeWhenDisabled; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcludedFromMaxWalletLimit; mapping (address => bool) private _isExcludedFromMaxTxLimit; mapping (address => bool) public _isBlacklisted; mapping (address => bool) public liquidityPair; KronosDividendTracker public dividendTracker; IMeerkatV2Router02 public meerkatV2Router; address public immutable meerkatV2Pair; string private constant _name = "Kronos"; string private constant _symbol = "$KRO"; uint8 private constant _decimals = 18; uint256 private constant TOTAL_SUPPLY = 100_000_000 * (10**_decimals); bool public isTradingEnabled; uint256 private _tradingPausedTimestamp; bool private _isLaunched; uint256 public _launchStartTimestamp; uint256 public _launchBlockNumber; uint256 public maxWalletAmount = TOTAL_SUPPLY * 15 / 1000; //max wallet is 1.5% of total supply uint256 public maxTxAmount = TOTAL_SUPPLY * 5 / 1000; //max transaction is 0.5% of total supply bool private _swapping; bool public SwapAndLiquifyEnabled; uint256 public minimumTokensBeforeSwap = TOTAL_SUPPLY * 25 / 10000; uint256 public gasForProcessing = 300000; address public dividendToken = 0xc21223249CA28397B4B6541dfFaEcC539BfF0c59; //USDC address payable public marketingWallet = payable (0x5F5B8fa24953ad063840c3dA1445042b34fB9187); address payable public teamWallet = payable (0xe2B97bc28609849c848dc1fE421858DcfC55378C); address payable public rewardPoolWallet = payable (0xa514a0c9eAE1134706cDB5e2B93b839e6093Bd43); struct Taxes { uint256 liquidity; uint256 marketing; uint256 team; uint256 rewards; uint256 rewardPool; } Taxes public _taxBuy = Taxes({ liquidity: 2, marketing: 4, team: 2, rewards: 1, rewardPool: 1 }); Taxes public _taxSell = Taxes({ liquidity: 2, marketing: 4, team: 2, rewards: 1, rewardPool: 1 }); Taxes public _taxTransfer = _taxSell; uint256 private constant _blacklistTimeLimit = 43200; //12 hours to blacklist uint256 private _liquidityFee; uint256 private _marketingFee; uint256 private _teamFee; uint256 private _rewardsFee; uint256 private _rewardPoolFee; uint256 private _totalFee; event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value); event DividendTrackerChange(address indexed newAddress, address indexed oldAddress); event MeerkatV2RouterChange(address indexed newAddress, address indexed oldAddress); event WalletChange(string indexed indentifier, address indexed newWallet, address indexed oldWallet); event PresaleAddressAssigned(address indexed account); event GasForProcessingChange(uint256 indexed newValue, uint256 indexed oldValue); event FeeChange(string indexed identifier, uint256 liquidityFee, uint256 marketingFee, uint256 teamFee, uint256 rewardsFee, uint256 rewardPoolFee); event BlacklistedAccount(address indexed holder, bool indexed status); event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event MaxTxAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxTxChange(address indexed account, bool isExcluded); event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded); event ExcludeFromDividendsChange(address indexed account, bool isExcluded); event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded); event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue); event DividendsSent(uint256 tokensSwapped); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity); event ClaimCroOverflow(uint256 amount); event USDCSent(uint256 amount); event ProcessedDividendTracker( uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor ); event FeesApplied(uint256 liquidityFee, uint256 marketingFee, uint256 teamFee, uint256 rewardsFee, uint256 rewardPoolFee, uint256 totalFee); constructor() CRC20(_name, _symbol) { dividendTracker = new KronosDividendTracker(); dividendTracker.setMeerkatRouter(0x145677FC4d9b8F19B5D56d1820c48e0443049a30); dividendTracker.setRewardToken(dividendToken); IMeerkatV2Router02 _meerkatV2Router = IMeerkatV2Router02(0x145677FC4d9b8F19B5D56d1820c48e0443049a30); address _meerkatV2Pair = IMeerkatV2Factory(_meerkatV2Router.factory()).createPair(address(this), _meerkatV2Router.WETH()); meerkatV2Router = _meerkatV2Router; meerkatV2Pair = _meerkatV2Pair; _setAutomatedMarketMakerPair(_meerkatV2Pair, true); _approve(msg.sender, address(meerkatV2Router), type(uint256).max); _approve(address(this), address(meerkatV2Router), type(uint256).max); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[address(dividendTracker)] = true; dividendTracker.excludeFromDividends(address(dividendTracker)); dividendTracker.excludeFromDividends(address(this)); dividendTracker.excludeFromDividends(address(0x000000000000000000000000000000000000dEaD)); dividendTracker.excludeFromDividends(owner()); dividendTracker.excludeFromDividends(address(_meerkatV2Router)); _isAllowedToTradeWhenDisabled[owner()] = true; _isExcludedFromMaxWalletLimit[_meerkatV2Pair] = true; _isExcludedFromMaxWalletLimit[address(dividendTracker)] = true; _isExcludedFromMaxWalletLimit[address(meerkatV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxTxLimit[_meerkatV2Pair] = true; _isExcludedFromMaxTxLimit[address(dividendTracker)] = true; _isExcludedFromMaxTxLimit[address(meerkatV2Router)] = true; _isExcludedFromMaxTxLimit[address(this)] = true; _isExcludedFromMaxTxLimit[owner()] = true; _mint(owner(), TOTAL_SUPPLY); } receive() external payable {} function decimals() public view virtual override returns (uint8) { return _decimals; } function launch() external onlyOwner { _launchStartTimestamp = block.timestamp; _launchBlockNumber = block.number; isTradingEnabled = true; _isLaunched = true; SwapAndLiquifyEnabled = true; } function activateTrading() external onlyOwner { isTradingEnabled = true; } function deactivateTrading() external onlyOwner { isTradingEnabled = false; _tradingPausedTimestamp = block.timestamp; } function updateDividendTracker(address newAddress) external onlyOwner { require(newAddress != address(dividendTracker), "Kronos: The dividend tracker already has that address"); KronosDividendTracker newDividendTracker = KronosDividendTracker(payable(newAddress)); require(newDividendTracker.owner() == address(this), "Kronos: The new dividend tracker must be owned by the Kronos token contract"); newDividendTracker.excludeFromDividends(address(newDividendTracker)); newDividendTracker.excludeFromDividends(address(this)); newDividendTracker.excludeFromDividends(owner()); newDividendTracker.excludeFromDividends(address(meerkatV2Router)); newDividendTracker.excludeFromDividends(address(meerkatV2Pair)); emit DividendTrackerChange(newAddress, address(dividendTracker)); dividendTracker = newDividendTracker; } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(liquidityPair[pair] != value, "Kronos: Automated market maker pair is already set to that value"); liquidityPair[pair] = value; if(value) { dividendTracker.excludeFromDividends(pair); } emit AutomatedMarketMakerPairChange(pair, value); } function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner { _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function excludeFromFees(address account, bool excluded) external onlyOwner { require(_isExcludedFromFee[account] != excluded, "Kronos: Account is already the value of 'excluded'"); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function excludeFromDividends(address account) external onlyOwner { dividendTracker.excludeFromDividends(account); emit ExcludeFromDividendsChange(account, true); } function includeInDividends(address account) external onlyOwner { dividendTracker.includeInDividends(account); emit ExcludeFromDividendsChange(account, false); } function includeMeInDividends() external { dividendTracker.includeInDividends(msg.sender); emit ExcludeFromDividendsChange(msg.sender, false); } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxWalletLimit[account] != excluded, "Kronos: Account is already the value of 'excluded'"); _isExcludedFromMaxWalletLimit[account] = excluded; emit ExcludeFromMaxWalletChange(account, excluded); } function excludeFromMaxTxLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxTxLimit[account] != excluded, "Kronos: Account is already the value of 'excluded'"); _isExcludedFromMaxTxLimit[account] = excluded; emit ExcludeFromMaxTxChange(account, excluded); } function blacklistAccount(address account) external onlyOwner { uint256 currentTimestamp = block.timestamp; require(!_isBlacklisted[account], "Kronos: Account is already blocked"); require(!liquidityPair[account], "Kronos: Cannot blacklist pair"); require(account != address(meerkatV2Router), "Kronos: Cannot blacklist router address"); if (_isLaunched) { require((currentTimestamp - _launchStartTimestamp) < _blacklistTimeLimit, "Kronos: Time to block accounts has expired"); } _isBlacklisted[account] = true; emit BlacklistedAccount(account, true); } function unblacklistAccount(address account) external onlyOwner { require(_isBlacklisted[account], "Kronos: Account is not blcoked"); _isBlacklisted[account] = false; emit BlacklistedAccount(account, false); } function setWallets( address payable newMarketingWallet, address payable newteamWallet, address payable newRewardPoolWallet) external onlyOwner { if(marketingWallet != newMarketingWallet) { require(newMarketingWallet != address(0), "Kronos: The marketingWallet cannot be 0"); emit WalletChange("marketingWallet", newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } if(teamWallet != newteamWallet) { require(newteamWallet != address(0), "Kronos: The teamWallet cannot be 0"); emit WalletChange("teamWallet", newteamWallet, teamWallet); teamWallet = newteamWallet; } if(rewardPoolWallet != newRewardPoolWallet) { require(newteamWallet != address(0), "Kronos: The rewardPoolWallet cannot be 0"); emit WalletChange("rewardPoolWallet", newRewardPoolWallet, rewardPoolWallet); rewardPoolWallet = newRewardPoolWallet; } } function setMeerkatRouter(address newAddress) external onlyOwner { require(newAddress != address(meerkatV2Router), "Kronos: The router already has that address"); emit MeerkatV2RouterChange(newAddress, address(meerkatV2Router)); meerkatV2Router = IMeerkatV2Router02(newAddress); dividendTracker.setMeerkatRouter(newAddress); _approve(address(this), address(meerkatV2Router), type(uint256).max); } function setGasForProcessing(uint256 newValue) external onlyOwner { require(newValue != gasForProcessing, "Kronos: Cannot update gasForProcessing to same value"); emit GasForProcessingChange(newValue, gasForProcessing); gasForProcessing = newValue; } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require(newValue != maxWalletAmount, "Kronos: Cannot update maxWalletAmount to same value"); require(newValue >= TOTAL_SUPPLY / 1000, "Kronos: Cannot update maxWalletAmount to less than 0.1% of supply"); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function setMaxTxAmount(uint256 newValue) external onlyOwner { require(newValue != maxTxAmount, "Kronos: Cannot update maxTxAmount to same value"); require(newValue >= TOTAL_SUPPLY / 1000, "Kronos: Cannot update maxTxAmount to less than 0.1% of supply"); emit MaxTxAmountChange(newValue, maxWalletAmount); maxTxAmount = newValue; } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require(newValue != minimumTokensBeforeSwap, "Kronos: Cannot update minimumTokensBeforeSwap to same value"); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function setMinimumTokenBalanceForDividends(uint256 newValue) external onlyOwner { dividendTracker.setTokenBalanceForDividends(newValue); } function setPresaleAddress(address presaleAddress) external onlyOwner { _isExcludedFromFee[presaleAddress] = true; dividendTracker.excludeFromDividends(presaleAddress); _isAllowedToTradeWhenDisabled[presaleAddress] = true; _isExcludedFromMaxWalletLimit[presaleAddress] = true; _isExcludedFromMaxTxLimit[presaleAddress] = true; emit PresaleAddressAssigned(presaleAddress); } function setTaxBuy(uint256 _liquidity, uint256 _marketing, uint256 _team, uint256 _rewards, uint256 _rewardPool) external onlyOwner { uint256 totalTax = _liquidity + _marketing + _team + _rewards + _rewardPool; require(totalTax <= 20, "Kronos: Cannot update taxes to more than 20%"); _taxBuy = Taxes(_liquidity, _marketing, _team, _rewards, _rewardPool); emit FeeChange("Buy", _liquidity, _marketing, _team, _rewards, _rewardPool); } function setTaxSell(uint256 _liquidity, uint256 _marketing, uint256 _team, uint256 _rewards, uint256 _rewardPool) external onlyOwner { uint256 totalTax = _liquidity + _marketing + _team + _rewards + _rewardPool; require(totalTax <= 20, "Kronos: Cannot update taxes to more than 20%"); _taxSell = Taxes(_liquidity, _marketing, _team, _rewards, _rewardPool); emit FeeChange("Sell", _liquidity, _marketing, _team, _rewards, _rewardPool); } function setTaxTransfer(uint256 _liquidity, uint256 _marketing, uint256 _team, uint256 _rewards, uint256 _rewardPool) external onlyOwner { uint256 totalTax = _liquidity + _marketing + _team + _rewards + _rewardPool; require(totalTax <= 20, "Kronos: Cannot update taxes to more than 20%"); _taxTransfer = Taxes(_liquidity, _marketing, _team, _rewards, _rewardPool); emit FeeChange("Transfer", _liquidity, _marketing, _team, _rewards, _rewardPool); } function toggleSwapAndLiquify(bool enable) external onlyOwner { require(SwapAndLiquifyEnabled != enable, "swapAndLiquify status already set to desire choice"); SwapAndLiquifyEnabled = enable; } function claim() external { dividendTracker.processAccount(payable(msg.sender), false); } function claimCroOverflow() external onlyOwner { uint256 amount = address(this).balance; (bool success,) = address(owner()).call{value : amount}(""); if (success){ emit ClaimCroOverflow(amount); } } // Getters function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function withdrawableDividendOf(address account) external view returns(uint256) { return dividendTracker.withdrawableDividendOf(account); } function dividendTokenBalanceOf(address account) external view returns (uint256) { return dividendTracker.balanceOf(account); } function getAccountDividendsInfo(address account) external view returns ( address, int256, int256, uint256, uint256, uint256, uint256, uint256) { return dividendTracker.getAccount(account); } function getNumberOfDividendTokenHolders() external view returns(uint256) { return dividendTracker.getNumberOfTokenHolders(); } // Main function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "CRC20: transfer from the zero address"); require(to != address(0), "CRC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } bool isBuyFromLp = liquidityPair[from]; bool isSelltoLp = liquidityPair[to]; if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) { require(isTradingEnabled, "Kronos: Trading is currently disabled."); require(!_isBlacklisted[to], "Kronos: Account is blocked"); require(!_isBlacklisted[from], "Kronos: Account is blocked"); if (!_isExcludedFromMaxWalletLimit[to]) { require((balanceOf(to) + amount) <= maxWalletAmount, "Kronos: Expected wallet amount exceeds the maxWalletAmount."); } if (liquidityPair[from] || liquidityPair[to]) { if (!_isExcludedFromMaxTxLimit[from] || !_isExcludedFromMaxTxLimit[to]) { require(amount <= maxTxAmount, "Kronos: Amount exceeds maxTxAmount"); } } } _adjustTaxes(isBuyFromLp, isSelltoLp); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if ( isTradingEnabled && canSwap && !_swapping && _totalFee > 0 && liquidityPair[to] && from != marketingWallet && to != marketingWallet && from != teamWallet && to != teamWallet && SwapAndLiquifyEnabled ) { _swapping = true; _swapAndLiquify(); _swapping = false; } bool takeFee = !_swapping && isTradingEnabled; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } if (takeFee) { uint256 fee = amount * _totalFee / 100; amount = amount - fee; super._transfer(from, address(this), fee); } super._transfer(from, to, amount); try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {} try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {} if(!_swapping) { uint256 gas = gasForProcessing; try dividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) { emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin); } catch {} } } function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private { _liquidityFee = 0; _marketingFee = 0; _teamFee = 0; _rewardsFee = 0; _rewardPoolFee = 0; if (isBuyFromLp) { _liquidityFee = _taxBuy.liquidity; _marketingFee = _taxBuy.marketing; _teamFee = _taxBuy.team; _rewardsFee = _taxBuy.rewards; _rewardPoolFee = _taxBuy.rewardPool; } else if (isSelltoLp) { _liquidityFee = _taxSell.liquidity; _marketingFee = _taxSell.marketing; _teamFee = _taxSell.team; _rewardsFee = _taxSell.rewards; _rewardPoolFee = _taxSell.rewardPool; } else { _liquidityFee = _taxTransfer.liquidity; _marketingFee = _taxTransfer.marketing; _teamFee = _taxTransfer.team; _rewardsFee = _taxTransfer.rewards; _rewardPoolFee = _taxTransfer.rewardPool; } _totalFee = _liquidityFee + _marketingFee + _teamFee + _rewardsFee + _rewardPoolFee; emit FeesApplied(_liquidityFee, _marketingFee, _teamFee, _rewardsFee, _rewardPoolFee, _totalFee); } function _swapAndLiquify() private { if(allowance(address(this), address(meerkatV2Router)) != type(uint256).max) { _approve(address(this), address(meerkatV2Router), type(uint256).max); } uint256 contractBalance = balanceOf(address(this)); uint256 initialCROBalance = address(this).balance; uint256 totalFeePrior = _totalFee; uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2; uint256 amountToSwap = contractBalance - amountToLiquify; _swapTokensForCRO(amountToSwap); uint256 croBalanceAfterSwap = address(this).balance - initialCROBalance; uint256 totalCROFee = _totalFee - (_liquidityFee / 2); uint256 amountCROLiquidity = croBalanceAfterSwap * _liquidityFee / totalCROFee / 2; uint256 amountCROMarketing = croBalanceAfterSwap * _marketingFee / totalCROFee; uint256 amountCROTeam = croBalanceAfterSwap * _teamFee / totalCROFee; uint256 amountCRORewardPool = croBalanceAfterSwap * _rewardPoolFee / totalCROFee; uint256 amountCRORewards = croBalanceAfterSwap - (amountCROLiquidity + amountCROMarketing + amountCROTeam + amountCRORewardPool); if(amountCROMarketing > 0) marketingWallet.transfer(amountCROMarketing); if(amountCROTeam > 0) teamWallet.transfer(amountCROTeam); if(amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountCROLiquidity); emit SwapAndLiquify(amountToSwap, amountCROLiquidity, amountToLiquify); } if(amountCRORewardPool > 0) { _swapAndSendUSDC(amountCRORewardPool); emit USDCSent(amountCRORewardPool); } if(amountCRORewards > 0) { (bool dividendSuccess,) = address(dividendTracker).call{value: amountCRORewards}(""); if(dividendSuccess) { emit DividendsSent(amountCRORewards); } } _totalFee = totalFeePrior; } function _swapTokensForCRO(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = meerkatV2Router.WETH(); _approve(address(this), address(meerkatV2Router), tokenAmount); meerkatV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function _swapAndSendUSDC(uint256 croAmount) private { address[] memory path = new address[](2); path[0] = meerkatV2Router.WETH(); path[1] = dividendToken; meerkatV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : croAmount}( 0, // accept any amount of tokens path, rewardPoolWallet, block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(meerkatV2Router), tokenAmount); meerkatV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable teamWallet, block.timestamp ); } function manualSwap() external onlyOwner { _swapAndLiquify(); } } contract KronosDividendTracker is DividendPayingToken { using SafeMath for uint256; using SafeMathInt for int256; using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; uint256 public lastProcessedIndex; mapping (address => bool) public excludedFromDividends; mapping (address => uint256) public lastClaimTimes; uint256 public claimWait; uint256 public minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event IncludeInDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim(address indexed account, uint256 amount, bool indexed automatic); constructor() DividendPayingToken("Kronos_Dividend_Tracker", "Kronos_Dividend_Tracker") { claimWait = 3600; //distribute hourly minimumTokenBalanceForDividends = 1_000 * (10**18); //must hold 0.001% of supply to receive dividends } function setRewardToken(address token) external onlyOwner { _setRewardToken(token); } function setMeerkatRouter(address router) external onlyOwner { _setMeerkatRouter(router); } function _transfer(address, address, uint256) internal pure override { require(false, "Kronos_Dividend_Tracker: No transfers allowed"); } function excludeFromDividends(address account) external onlyOwner { require(!excludedFromDividends[account]); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function includeInDividends(address account) external onlyOwner { require(excludedFromDividends[account]); excludedFromDividends[account] = false; emit IncludeInDividends(account); } function setTokenBalanceForDividends(uint256 newValue) external onlyOwner { require(minimumTokenBalanceForDividends != newValue, "Kronos_Dividend_Tracker: minimumTokenBalanceForDividends already the value of 'newValue'."); minimumTokenBalanceForDividends = newValue; } function updateClaimWait(uint256 newClaimWait) external onlyOwner { require(newClaimWait >= 3600 && newClaimWait <= 86400, "Kronos_Dividend_Tracker: claimWait must be updated to between 1 and 24 hours"); require(newClaimWait != claimWait, "Kronos_Dividend_Tracker: Cannot update claimWait to same value"); emit ClaimWaitUpdated(newClaimWait, claimWait); claimWait = newClaimWait; } function getLastProcessedIndex() external view returns(uint256) { return lastProcessedIndex; } function getNumberOfTokenHolders() external view returns(uint256) { return tokenHoldersMap.keys.length; } function getAccount(address _account) public view returns ( address account, int256 index, int256 iterationsUntilProcessed, uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime, uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); iterationsUntilProcessed = -1; if(index >= 0) { if(uint256(index) > lastProcessedIndex) { iterationsUntilProcessed = index.sub(int256(lastProcessedIndex)); } else { uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ? tokenHoldersMap.keys.length.sub(lastProcessedIndex) : 0; iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray)); } } withdrawableDividends = withdrawableDividendOf(account); totalDividends = accumulativeDividendOf(account); lastClaimTime = lastClaimTimes[account]; nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0; secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0; } function getAccountAtIndex(uint256 index) public view returns ( address, int256, int256, uint256, uint256, uint256, uint256, uint256) { if(index >= tokenHoldersMap.size()) { return (0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0, 0, 0); } address account = tokenHoldersMap.getKeyAtIndex(index); return getAccount(account); } function canAutoClaim(uint256 lastClaimTime) private view returns (bool) { if(lastClaimTime > block.timestamp) { return false; } return block.timestamp.sub(lastClaimTime) >= claimWait; } function setBalance(address payable account, uint256 newBalance) external onlyOwner { if(excludedFromDividends[account]) { return; } if(newBalance >= minimumTokenBalanceForDividends) { _setBalance(account, newBalance); tokenHoldersMap.set(account, newBalance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } processAccount(account, true); } function process(uint256 gas) public onlyOwner returns (uint256, uint256, uint256) { uint256 numberOfTokenHolders = tokenHoldersMap.keys.length; if(numberOfTokenHolders == 0) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while(gasUsed < gas && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if(_lastProcessedIndex >= tokenHoldersMap.keys.length) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.keys[_lastProcessedIndex]; if(canAutoClaim(lastClaimTimes[account])) { if(processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if(gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); } function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if(amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlacklistedAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimCroOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"DividendTrackerChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTxChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"teamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardPoolFee","type":"uint256"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"teamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardPoolFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalFee","type":"uint256"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTxAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"MeerkatV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PresaleAddressAssigned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"USDCSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"SwapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_launchBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_launchStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxBuy","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"rewardPool","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSell","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"rewardPool","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxTransfer","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"rewardPool","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimCroOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract KronosDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"includeMeInDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"liquidityPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"meerkatV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"meerkatV2Router","outputs":[{"internalType":"contract IMeerkatV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPoolWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMeerkatRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"presaleAddress","type":"address"}],"name":"setPresaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_rewardPool","type":"uint256"}],"name":"setTaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_rewardPool","type":"uint256"}],"name":"setTaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_rewardPool","type":"uint256"}],"name":"setTaxTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMarketingWallet","type":"address"},{"internalType":"address payable","name":"newteamWallet","type":"address"},{"internalType":"address payable","name":"newRewardPoolWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526103e8620000156012600a62000f87565b62000025906305f5e10062000f9f565b6200003290600f62000f9f565b6200003e919062000fc1565b6012556103e86012600a62000054919062000f87565b62000064906305f5e10062000f9f565b6200007190600562000f9f565b6200007d919062000fc1565b601355612710620000916012600a62000f87565b620000a1906305f5e10062000f9f565b620000ae90601962000f9f565b620000ba919062000fc1565b601555620493e0601655601780546001600160a01b031990811673c21223249ca28397b4b6541dffaecc539bff0c5917909155601880548216735f5b8fa24953ad063840c3da1445042b34fb918717905560198054821673e2b97bc28609849c848dc1fe421858dcfc55378c179055601a805490911673a514a0c9eae1134706cdb5e2b93b839e6093bd431790556040805160a08082018352600280835260046020808501829052848601839052600160608087018290526080968701829052601b859055601c849055601d859055601e829055601f829055875195860188528486528583018490529685018490529584018690529290930184905290819055602182905560228190556023839055602483905560258190556026919091556027556028819055602955348015620001f157600080fd5b50604051806040016040528060068152602001654b726f6e6f7360d01b81525060405180604001604052806004815260200163244b524f60e01b815250600062000240620009a960201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516200029f90600490602085019062000dc0565b508051620002b590600590602084019062000dc0565b505050604051620002c69062000e4f565b604051809103906000f080158015620002e3573d6000803e3d6000fd5b50600c80546001600160a01b0319166001600160a01b03929092169182179055604051630f2d699f60e21b815273145677fc4d9b8f19b5d56d1820c48e0443049a306004820152633cb5a67c90602401600060405180830381600087803b1580156200034e57600080fd5b505af115801562000363573d6000803e3d6000fd5b5050600c54601754604051638aee812760e01b81526001600160a01b03918216600482015291169250638aee81279150602401600060405180830381600087803b158015620003b157600080fd5b505af1158015620003c6573d6000803e3d6000fd5b50505050600073145677fc4d9b8f19b5d56d1820c48e0443049a3090506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000424573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044a919062000fe4565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000498573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004be919062000fe4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200050c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000532919062000fe4565b600d80546001600160a01b0319166001600160a01b03858116919091179091558116608052905062000566816001620009ad565b600d54620005829033906001600160a01b031660001962000b16565b600d546200059e9030906001600160a01b031660001962000b16565b600160076000620005b76000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526007909352818320805485166001908117909155600c805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b1580156200064d57600080fd5b505af115801562000662573d6000803e3d6000fd5b5050600c5460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015620006ac57600080fd5b505af1158015620006c1573d6000803e3d6000fd5b5050600c5460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b5050600c546001600160a01b031691506331e79db090506200074c6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200078e57600080fd5b505af1158015620007a3573d6000803e3d6000fd5b5050600c5460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b158015620007ef57600080fd5b505af115801562000804573d6000803e3d6000fd5b505050506001600660006200081e62000c3e60201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790558582168152600893849052828120805486166001908117909155600c54831682528382208054871682179055600d549092168152828120805486168317905530815291822080549094168117909355620008ae6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790558582168152600993849052828120805486166001908117909155600c54831682528382208054871682179055600d5490921681528281208054861683179055308152918220805490941681179093556200093e6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620009a16200097d6000546001600160a01b031690565b6200098b6012600a62000f87565b6200099b906305f5e10062000f9f565b62000c4d565b505062001067565b3390565b6001600160a01b0382166000908152600b602052604090205460ff161515811515141562000a4a576040805162461bcd60e51b81526020600482015260248101919091527f4b726f6e6f733a204175746f6d61746564206d61726b6574206d616b6572207060448201527f61697220697320616c72656164792073657420746f20746861742076616c756560648201526084015b60405180910390fd5b6001600160a01b0382166000908152600b60205260409020805460ff1916821580159190911790915562000ada57600c5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000ac057600080fd5b505af115801562000ad5573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03831662000b7a5760405162461bcd60e51b8152602060048201526024808201527f43524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000a41565b6001600160a01b03821662000bdd5760405162461bcd60e51b815260206004820152602260248201527f43524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000a41565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031690565b6001600160a01b03821662000ca55760405162461bcd60e51b815260206004820152601f60248201527f43524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000a41565b62000cc18160035462000d5460201b62002e551790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462000cf691839062002e5562000d54821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000d489085815260200190565b60405180910390a35050565b60008062000d6383856200100f565b90508381101562000db75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000a41565b90505b92915050565b82805462000dce906200102a565b90600052602060002090601f01602090048101928262000df2576000855562000e3d565b82601f1062000e0d57805160ff191683800117855562000e3d565b8280016001018555821562000e3d579182015b8281111562000e3d57825182559160200191906001019062000e20565b5062000e4b92915062000e5d565b5090565b612825806200585983390190565b5b8082111562000e4b576000815560010162000e5e565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000ecb57816000190482111562000eaf5762000eaf62000e74565b8085161562000ebd57918102915b93841c939080029062000e8f565b509250929050565b60008262000ee45750600162000dba565b8162000ef35750600062000dba565b816001811462000f0c576002811462000f175762000f37565b600191505062000dba565b60ff84111562000f2b5762000f2b62000e74565b50506001821b62000dba565b5060208310610133831016604e8410600b841016171562000f5c575081810a62000dba565b62000f68838362000e8a565b806000190482111562000f7f5762000f7f62000e74565b029392505050565b600062000f9860ff84168362000ed3565b9392505050565b600081600019048311821515161562000fbc5762000fbc62000e74565b500290565b60008262000fdf57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000ff757600080fd5b81516001600160a01b038116811462000db757600080fd5b6000821982111562001025576200102562000e74565b500190565b600181811c908216806200103f57607f821691505b602082108114156200106157634e487b7160e01b600052602260045260246000fd5b50919050565b6080516147cf6200108a6000396000818161068601526121a101526147cf6000f3fe6080604052600436106103e85760003560e01c80636d7331ed11610208578063a8b9d24011610118578063c0246668116100ab578063d37b34d71161007a578063d37b34d714610bf5578063dd62ed3e14610c15578063ec28438a14610c5b578063ee24565014610c7b578063f2fde38b14610c9b57600080fd5b8063c024666814610b7f578063c0f306ef14610b9f578063d2d7ad8314610bbf578063d322157614610bd557600080fd5b8063ad56c13c116100e7578063ad56c13c14610aaa578063aee50b1e14610b0f578063b7677cb214610b2f578063bdb9f28d14610b5f57600080fd5b8063a8b9d24014610a3e578063a9059cbb14610a5e578063aa4bde2814610a7e578063abfa71e914610a9457600080fd5b806388bdd9be1161019b57806395d89b411161016a57806395d89b41146109ac5780639c1b8af5146109c1578063a25d11d5146109d7578063a457c2d7146109f7578063a4fbec3314610a1757600080fd5b806388bdd9be146109435780638c0b5e22146109635780638da5cb5b1461097957806395ccca7a1461099757600080fd5b806375cb1bd1116101d757806375cb1bd1146108c357806375f0a874146108e3578063781edb3c146109035780637d210f411461092357600080fd5b80636d7331ed1461083857806370a0823114610858578063715018a61461088e57806371ea980c146108a357600080fd5b806331e79db0116103035780634e71d92d116102965780635ebf4db9116102655780635ebf4db9146107ad5780636318be01146107cd57806364b0f653146107e35780636843cd84146107f857806369fc3a061461081857600080fd5b80634e71d92d1461074357806351bc3c85146107585780635960e46d1461076d578063599270441461078d57600080fd5b80633a1ce746116102d25780633a1ce746146106c85780633cb5a67c146106dd578063423ce9cc146106fd5780634597c5fe1461071c57600080fd5b806331e79db01461063f57806334cf1fea1461065f57806335c200d41461067457806339509351146106a857600080fd5b80631d31a7901161037b57806327a14fc21161034a57806327a14fc2146105ce5780632c1f5216146105ee57806330bb4cff1461060e578063313ce5671461062357600080fd5b80631d31a7901461051f5780631e3eed7c1461056e57806323b872dd1461058e57806323cc6601146105ae57600080fd5b80630bd05b69116103b75780630bd05b69146104835780631582358e1461049857806318160ddd146104d05780631cdd3be3146104ef57600080fd5b806301339c21146103f4578063064a59d01461040b57806306fdde0314610441578063095ea7b31461046357600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50610409610cbb565b005b34801561041757600080fd5b50600d5461042c90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561044d57600080fd5b50610456610d27565b604051610438919061403c565b34801561046f57600080fd5b5061042c61047e3660046140a6565b610db9565b34801561048f57600080fd5b50610409610dd0565b3480156104a457600080fd5b506017546104b8906001600160a01b031681565b6040516001600160a01b039091168152602001610438565b3480156104dc57600080fd5b506003545b604051908152602001610438565b3480156104fb57600080fd5b5061042c61050a3660046140d2565b600a6020526000908152604090205460ff1681565b34801561052b57600080fd5b50602554602654602754602854602954610546949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610438565b34801561057a57600080fd5b506104096105893660046140ef565b610e0f565b34801561059a57600080fd5b5061042c6105a936600461412a565b610f3a565b3480156105ba57600080fd5b506104096105c9366004614179565b610fa3565b3480156105da57600080fd5b506104096105e93660046141b2565b61106c565b3480156105fa57600080fd5b50600c546104b8906001600160a01b031681565b34801561061a57600080fd5b506104e16111dd565b34801561062f57600080fd5b5060405160128152602001610438565b34801561064b57600080fd5b5061040961065a3660046140d2565b611250565b34801561066b57600080fd5b5061040961131c565b34801561068057600080fd5b506104b87f000000000000000000000000000000000000000000000000000000000000000081565b3480156106b457600080fd5b5061042c6106c33660046140a6565b611359565b3480156106d457600080fd5b5061040961138f565b3480156106e957600080fd5b506104096106f83660046140d2565b611460565b34801561070957600080fd5b5060145461042c90610100900460ff1681565b34801561072857600080fd5b50601b54601c54601d54601e54601f54610546949392919085565b34801561074f57600080fd5b506104096115ca565b34801561076457600080fd5b5061040961163f565b34801561077957600080fd5b506104096107883660046141b2565b611673565b34801561079957600080fd5b506019546104b8906001600160a01b031681565b3480156107b957600080fd5b506104096107c83660046141b2565b61173f565b3480156107d957600080fd5b506104e160115481565b3480156107ef57600080fd5b506104e16117ca565b34801561080457600080fd5b506104e16108133660046140d2565b611814565b34801561082457600080fd5b506104096108333660046141cb565b611884565b34801561084457600080fd5b506104096108533660046140d2565b611942565b34801561086457600080fd5b506104e16108733660046140d2565b6001600160a01b031660009081526001602052604090205490565b34801561089a57600080fd5b50610409611a21565b3480156108af57600080fd5b50601a546104b8906001600160a01b031681565b3480156108cf57600080fd5b506104096108de3660046141e8565b611a95565b3480156108ef57600080fd5b506018546104b8906001600160a01b031681565b34801561090f57600080fd5b5061040961091e366004614179565b611d98565b34801561092f57600080fd5b50600d546104b8906001600160a01b031681565b34801561094f57600080fd5b5061040961095e3660046140d2565b611e59565b34801561096f57600080fd5b506104e160135481565b34801561098557600080fd5b506000546001600160a01b03166104b8565b3480156109a357600080fd5b50610409612266565b3480156109b857600080fd5b506104566122fb565b3480156109cd57600080fd5b506104e160165481565b3480156109e357600080fd5b506104096109f23660046140ef565b61230a565b348015610a0357600080fd5b5061042c610a123660046140a6565b6123d6565b348015610a2357600080fd5b50602054602154602254602354602454610546949392919085565b348015610a4a57600080fd5b506104e1610a593660046140d2565b612425565b348015610a6a57600080fd5b5061042c610a793660046140a6565b612458565b348015610a8a57600080fd5b506104e160125481565b348015610aa057600080fd5b506104e160105481565b348015610ab657600080fd5b50610aca610ac53660046140d2565b612465565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610438565b348015610b1b57600080fd5b50610409610b2a3660046141b2565b6124ff565b348015610b3b57600080fd5b5061042c610b4a3660046140d2565b600b6020526000908152604090205460ff1681565b348015610b6b57600080fd5b50610409610b7a3660046140d2565b6125d4565b348015610b8b57600080fd5b50610409610b9a366004614179565b6126ec565b348015610bab57600080fd5b50610409610bba3660046140d2565b6127ad565b348015610bcb57600080fd5b506104e160155481565b348015610be157600080fd5b50610409610bf0366004614179565b612872565b348015610c0157600080fd5b50610409610c103660046140d2565b6128f4565b348015610c2157600080fd5b506104e1610c30366004614233565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610c6757600080fd5b50610409610c763660046141b2565b612b3a565b348015610c8757600080fd5b50610409610c963660046140ef565b612c9d565b348015610ca757600080fd5b50610409610cb63660046140d2565b612d6b565b6000546001600160a01b03163314610cee5760405162461bcd60e51b8152600401610ce590614261565b60405180910390fd5b4260105543601155600d805460ff60a01b1916600160a01b179055600f805460ff191660011790556014805461ff001916610100179055565b606060048054610d3690614296565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6290614296565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b5050505050905090565b6000610dc6338484612ebb565b5060015b92915050565b6000546001600160a01b03163314610dfa5760405162461bcd60e51b8152600401610ce590614261565b600d805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610e395760405162461bcd60e51b8152600401610ce590614261565b6000818385610e48888a6142e7565b610e5291906142e7565b610e5c91906142e7565b610e6691906142e7565b90506014811115610e895760405162461bcd60e51b8152600401610ce5906142ff565b6040805160a08101825287815260208101879052808201869052606081018590526080018390526025879055602686905560278590556028849055602983905551672a3930b739b332b960c11b81526008015b60408051918290038220888352602083018890529082018690526060820185905260808201849052907f18313eafd26b263470e815300393e601ee24084135005dfe66a3bc4bbba795669060a00160405180910390a2505050505050565b6000610f47848484612fe0565b610f998433610f9485604051806060016040528060288152602001614772602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061373e565b612ebb565b5060019392505050565b6000546001600160a01b03163314610fcd5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b03821660009081526009602052604090205460ff161515811515141561100c5760405162461bcd60e51b8152600401610ce59061434b565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527f46a87ba9eb6bc0a74eae283c9908175809a666189b7de3c2f9df3fcbbe924d3591015b60405180910390a25050565b6000546001600160a01b031633146110965760405162461bcd60e51b8152600401610ce590614261565b6012548114156111045760405162461bcd60e51b815260206004820152603360248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d617857616c6c6574416044820152726d6f756e7420746f2073616d652076616c756560681b6064820152608401610ce5565b6103e86111136012600a614481565b611121906305f5e100614490565b61112b91906144af565b8110156111aa5760405162461bcd60e51b815260206004820152604160248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d617857616c6c65744160448201527f6d6f756e7420746f206c657373207468616e20302e3125206f6620737570706c6064820152607960f81b608482015260a401610ce5565b60125460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3601255565b600c54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124b91906144d1565b905090565b6000546001600160a01b0316331461127a5760405162461bcd60e51b8152600401610ce590614261565b600c5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b1580156112c157600080fd5b505af11580156112d5573d6000803e3d6000fd5b5050604051600181526001600160a01b03841692507fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa991506020015b60405180910390a250565b6000546001600160a01b031633146113465760405162461bcd60e51b8152600401610ce590614261565b600d805460ff60a01b1916905542600e55565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610dc6918590610f949086612e55565b6000546001600160a01b031633146113b95760405162461bcd60e51b8152600401610ce590614261565b4760006113ce6000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114611418576040519150601f19603f3d011682016040523d82523d6000602084013e61141d565b606091505b50509050801561145c576040518281527f7119601cabfe7d71a345076e0c5cdd24f8d5e021f3208294b317988bc692edcd906020015b60405180910390a15b5050565b6000546001600160a01b0316331461148a5760405162461bcd60e51b8152600401610ce590614261565b600d546001600160a01b03828116911614156114fc5760405162461bcd60e51b815260206004820152602b60248201527f4b726f6e6f733a2054686520726f7574657220616c726561647920686173207460448201526a686174206164647265737360a81b6064820152608401610ce5565b600d546040516001600160a01b03918216918316907f683c3b49bd4be33811cc81bd567058dd43bf6a6ec34076d5f9e0581f56758b1590600090a3600d80546001600160a01b0319166001600160a01b03838116918217909255600c54604051630f2d699f60e21b8152600481019290925290911690633cb5a67c90602401600060405180830381600087803b15801561159557600080fd5b505af11580156115a9573d6000803e3d6000fd5b5050600d546115c792503091506001600160a01b0316600019612ebb565b50565b600c5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af115801561161b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c791906144ea565b6000546001600160a01b031633146116695760405162461bcd60e51b8152600401610ce590614261565b611671613778565b565b6000546001600160a01b0316331461169d5760405162461bcd60e51b8152600401610ce590614261565b60165481141561170c5760405162461bcd60e51b815260206004820152603460248201527f4b726f6e6f733a2043616e6e6f742075706461746520676173466f7250726f63604482015273657373696e6720746f2073616d652076616c756560601b6064820152608401610ce5565b60165460405182907f79282993055b3a4cfa0a12ead12d58cc3aad216fcbbae5a73d942c1ee861fb9a90600090a3601655565b6000546001600160a01b031633146117695760405162461bcd60e51b8152600401610ce590614261565b600c5460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401600060405180830381600087803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b5050505050565b600c54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015611227573d6000803e3d6000fd5b600c546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611860573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dca91906144d1565b6000546001600160a01b031633146118ae5760405162461bcd60e51b8152600401610ce590614261565b60145460ff61010090910416151581151514156119285760405162461bcd60e51b815260206004820152603260248201527f73776170416e644c6971756966792073746174757320616c72656164792073656044820152717420746f206465736972652063686f69636560701b6064820152608401610ce5565b601480549115156101000261ff0019909216919091179055565b6000546001600160a01b0316331461196c5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b0381166000908152600a602052604090205460ff166119d45760405162461bcd60e51b815260206004820152601e60248201527f4b726f6e6f733a204163636f756e74206973206e6f7420626c636f6b656400006044820152606401610ce5565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055519091907f22dfccad3b8536e5d2741216ca2aa1324ca91414ac6daeb7ed374d9501997298908390a350565b6000546001600160a01b03163314611a4b5760405162461bcd60e51b8152600401610ce590614261565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611abf5760405162461bcd60e51b8152600401610ce590614261565b6018546001600160a01b03848116911614611bb3576001600160a01b038316611b3a5760405162461bcd60e51b815260206004820152602760248201527f4b726f6e6f733a20546865206d61726b6574696e6757616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610ce5565b6018546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4601880546001600160a01b0319166001600160a01b0385161790555b6019546001600160a01b03838116911614611c9d576001600160a01b038216611c295760405162461bcd60e51b815260206004820152602260248201527f4b726f6e6f733a20546865207465616d57616c6c65742063616e6e6f74206265604482015261020360f41b6064820152608401610ce5565b601954604051691d19585b55d85b1b195d60b21b81526001600160a01b0391821691841690600a01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4601980546001600160a01b0319166001600160a01b0384161790555b601a546001600160a01b03828116911614611d93576001600160a01b038216611d195760405162461bcd60e51b815260206004820152602860248201527f4b726f6e6f733a2054686520726577617264506f6f6c57616c6c65742063616e60448201526706e6f7420626520360c41b6064820152608401610ce5565b601a546040516f1c995dd85c99141bdbdb15d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4601a80546001600160a01b0319166001600160a01b0383161790555b505050565b6000546001600160a01b03163314611dc25760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b03821660009081526008602052604090205460ff1615158115151415611e015760405162461bcd60e51b8152600401610ce59061434b565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101611060565b6000546001600160a01b03163314611e835760405162461bcd60e51b8152600401610ce590614261565b600c546001600160a01b0382811691161415611eff5760405162461bcd60e51b815260206004820152603560248201527f4b726f6e6f733a20546865206469766964656e6420747261636b657220616c7260448201527465616479206861732074686174206164647265737360581b6064820152608401610ce5565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f709190614507565b6001600160a01b0316146120005760405162461bcd60e51b815260206004820152604b60248201527f4b726f6e6f733a20546865206e6577206469766964656e6420747261636b657260448201527f206d757374206265206f776e656420627920746865204b726f6e6f7320746f6b60648201526a195b8818dbdb9d1c9858dd60aa1b608482015260a401610ce5565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b15801561209b57600080fd5b505af11580156120af573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db06120d46000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b5050600d5460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b505060405163031e79db60e41b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152841692506331e79db09150602401600060405180830381600087803b1580156121ef57600080fd5b505af1158015612203573d6000803e3d6000fd5b5050600c546040516001600160a01b03918216935090851691507f43c6eb9010459f8dbe15160295e5e1477f0b15c2bf0d127bfccc6c67fca7f69090600090a3600c80546001600160a01b0319166001600160a01b039290921691909117905550565b600c5460405163c0f306ef60e01b81523360048201526001600160a01b039091169063c0f306ef90602401600060405180830381600087803b1580156122ab57600080fd5b505af11580156122bf573d6000803e3d6000fd5b5050604051600081523392507fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa9915060200160405180910390a2565b606060058054610d3690614296565b6000546001600160a01b031633146123345760405162461bcd60e51b8152600401610ce590614261565b6000818385612343888a6142e7565b61234d91906142e7565b61235791906142e7565b61236191906142e7565b905060148111156123845760405162461bcd60e51b8152600401610ce5906142ff565b6040805160a0810182528781526020810187905280820186905260608101859052608001839052601b879055601c869055601d859055601e849055601f839055516242757960e81b8152600301610edc565b6000610dc63384610f948560405180606001604052806025815260200161474d602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061373e565b600c546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611843565b6000610dc6338484612fe0565b600c5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f19060240161010060405180830381865afa1580156124c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e49190614524565b97509750975097509750975097509750919395975091939597565b6000546001600160a01b031633146125295760405162461bcd60e51b8152600401610ce590614261565b6015548114156125a15760405162461bcd60e51b815260206004820152603b60248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d696e696d756d546f6b60448201527f656e734265666f72655377617020746f2073616d652076616c756500000000006064820152608401610ce5565b60155460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3601555565b6000546001600160a01b031633146125fe5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b0381811660008181526007602052604090819020805460ff19166001179055600c54905163031e79db60e41b81526004810192909252909116906331e79db090602401600060405180830381600087803b15801561266257600080fd5b505af1158015612676573d6000803e3d6000fd5b505050506001600160a01b03811660008181526006602090815260408083208054600160ff1991821681179092556008845282852080548216831790556009909352818420805490931617909155517f3727916e5d01f0ec2bcea88f550181aee40774d9790b1f1240616a15005857999190a250565b6000546001600160a01b031633146127165760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b03821660009081526007602052604090205460ff16151581151514156127555760405162461bcd60e51b8152600401610ce59061434b565b6001600160a01b038216600081815260076020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611060565b6000546001600160a01b031633146127d75760405162461bcd60e51b8152600401610ce590614261565b600c5460405163c0f306ef60e01b81526001600160a01b0383811660048301529091169063c0f306ef90602401600060405180830381600087803b15801561281e57600080fd5b505af1158015612832573d6000803e3d6000fd5b5050604051600081526001600160a01b03841692507fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa99150602001611311565b6000546001600160a01b0316331461289c5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611060565b6000546001600160a01b0316331461291e5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b0381166000908152600a6020526040902054429060ff16156129945760405162461bcd60e51b815260206004820152602260248201527f4b726f6e6f733a204163636f756e7420697320616c726561647920626c6f636b604482015261195960f21b6064820152608401610ce5565b6001600160a01b0382166000908152600b602052604090205460ff16156129fd5760405162461bcd60e51b815260206004820152601d60248201527f4b726f6e6f733a2043616e6e6f7420626c61636b6c69737420706169720000006044820152606401610ce5565b600d546001600160a01b0383811691161415612a6b5760405162461bcd60e51b815260206004820152602760248201527f4b726f6e6f733a2043616e6e6f7420626c61636b6c69737420726f75746572206044820152666164647265737360c81b6064820152608401610ce5565b600f5460ff1615612ae75761a8c060105482612a87919061458e565b10612ae75760405162461bcd60e51b815260206004820152602a60248201527f4b726f6e6f733a2054696d6520746f20626c6f636b206163636f756e74732068604482015269185cc8195e1c1a5c995960b21b6064820152608401610ce5565b6001600160a01b0382166000818152600a6020526040808220805460ff1916600190811790915590519092917f22dfccad3b8536e5d2741216ca2aa1324ca91414ac6daeb7ed374d950199729891a35050565b6000546001600160a01b03163314612b645760405162461bcd60e51b8152600401610ce590614261565b601354811415612bce5760405162461bcd60e51b815260206004820152602f60248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d61785478416d6f756e60448201526e7420746f2073616d652076616c756560881b6064820152608401610ce5565b6103e8612bdd6012600a614481565b612beb906305f5e100614490565b612bf591906144af565b811015612c6a5760405162461bcd60e51b815260206004820152603d60248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d61785478416d6f756e60448201527f7420746f206c657373207468616e20302e3125206f6620737570706c790000006064820152608401610ce5565b60125460405182907fe3052f2f134f247948088ca6829f4168989b7313f1b54de88cc18178a249de4b90600090a3601355565b6000546001600160a01b03163314612cc75760405162461bcd60e51b8152600401610ce590614261565b6000818385612cd6888a6142e7565b612ce091906142e7565b612cea91906142e7565b612cf491906142e7565b90506014811115612d175760405162461bcd60e51b8152600401610ce5906142ff565b6040805160a08101825287815260208082018890528183018790526060820186905260809091018490528790556021869055602285905560238490556024839055516314d95b1b60e21b8152600401610edc565b6000546001600160a01b03163314612d955760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b038116612dfa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ce5565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080612e6283856142e7565b905083811015612eb45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ce5565b9392505050565b6001600160a01b038316612f1d5760405162461bcd60e51b8152602060048201526024808201527f43524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce5565b6001600160a01b038216612f7e5760405162461bcd60e51b815260206004820152602260248201527f43524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce5565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166130065760405162461bcd60e51b8152600401610ce5906145a5565b6001600160a01b03821661302c5760405162461bcd60e51b8152600401610ce5906145ea565b8061303d57611d9383836000613ab7565b6001600160a01b038084166000818152600b6020908152604080832054948716835280832054938352600690915290205460ff92831692918216911615801561309f57506001600160a01b03841660009081526006602052604090205460ff16155b1561338657600d54600160a01b900460ff1661310c5760405162461bcd60e51b815260206004820152602660248201527f4b726f6e6f733a2054726164696e672069732063757272656e746c792064697360448201526530b13632b21760d11b6064820152608401610ce5565b6001600160a01b0384166000908152600a602052604090205460ff16156131755760405162461bcd60e51b815260206004820152601a60248201527f4b726f6e6f733a204163636f756e7420697320626c6f636b65640000000000006044820152606401610ce5565b6001600160a01b0385166000908152600a602052604090205460ff16156131de5760405162461bcd60e51b815260206004820152601a60248201527f4b726f6e6f733a204163636f756e7420697320626c6f636b65640000000000006044820152606401610ce5565b6001600160a01b03841660009081526008602052604090205460ff1661329f5760125483613221866001600160a01b031660009081526001602052604090205490565b61322b91906142e7565b111561329f5760405162461bcd60e51b815260206004820152603b60248201527f4b726f6e6f733a2045787065637465642077616c6c657420616d6f756e74206560448201527f78636565647320746865206d617857616c6c6574416d6f756e742e00000000006064820152608401610ce5565b6001600160a01b0385166000908152600b602052604090205460ff16806132de57506001600160a01b0384166000908152600b602052604090205460ff165b15613386576001600160a01b03851660009081526009602052604090205460ff16158061332457506001600160a01b03841660009081526009602052604090205460ff16155b15613386576013548311156133865760405162461bcd60e51b815260206004820152602260248201527f4b726f6e6f733a20416d6f756e742065786365656473206d61785478416d6f756044820152611b9d60f21b6064820152608401610ce5565b6133908282613bc3565b60155430600090815260016020526040902054600d5491111590600160a01b900460ff1680156133bd5750805b80156133cc575060145460ff16155b80156133da57506000602f54115b80156133fe57506001600160a01b0385166000908152600b602052604090205460ff165b801561341857506018546001600160a01b03878116911614155b801561343257506018546001600160a01b03868116911614155b801561344c57506019546001600160a01b03878116911614155b801561346657506019546001600160a01b03868116911614155b80156134795750601454610100900460ff165b1561349e576014805460ff19166001179055613493613778565b6014805460ff191690555b60145460009060ff161580156134bd5750600d54600160a01b900460ff165b6001600160a01b03881660009081526007602052604090205490915060ff16806134ff57506001600160a01b03861660009081526007602052604090205460ff165b15613508575060005b80156135455760006064602f54876135209190614490565b61352a91906144af565b9050613536818761458e565b9550613543883083613ab7565b505b613550878787613ab7565b600c546001600160a01b031663e30443bc88613581816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156135c757600080fd5b505af19250505080156135d8575060015b50600c546001600160a01b031663e30443bc8761360a816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561365057600080fd5b505af1925050508015613661575060015b5060145460ff1661373557601654600c546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af19250505080156136d9575060408051601f3d908101601f191682019092526136d69181019061462d565b60015b6136e257613733565b60408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b50505050505050565b600081848411156137625760405162461bcd60e51b8152600401610ce5919061403c565b50600061376f848661458e565b95945050505050565b600d543060009081526002602090815260408083206001600160a01b0390941683529290522054600019146137c157600d546137c19030906001600160a01b0316600019612ebb565b30600090815260016020526040812054602f54602a549192479260029083906137ea9087614490565b6137f491906144af565b6137fe91906144af565b9050600061380c828661458e565b905061381781613cea565b6000613823854761458e565b905060006002602a5461383691906144af565b602f54613843919061458e565b90506000600282602a54856138589190614490565b61386291906144af565b61386c91906144af565b9050600082602b548561387f9190614490565b61388991906144af565b9050600083602c548661389c9190614490565b6138a691906144af565b9050600084602e54876138b99190614490565b6138c391906144af565b9050600081836138d386886142e7565b6138dd91906142e7565b6138e791906142e7565b6138f1908861458e565b90508315613935576018546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015613933573d6000803e3d6000fd5b505b8215613977576019546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015613975573d6000803e3d6000fd5b505b88156139c9576139878986613e44565b60408051898152602081018790529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8115613a0c576139d882613ef1565b6040518281527f18dc4e882f216aaedbdea3c2afca1d207744d2f22cad841aba3c8c6314bd38f79060200160405180910390a15b8015613aa457600c546040516000916001600160a01b03169083908381818185875af1925050503d8060008114613a5f576040519150601f19603f3d011682016040523d82523d6000602084013e613a64565b606091505b505090508015613aa2576040518281527fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9699060200160405180910390a15b505b505050602f969096555050505050505050565b6001600160a01b038316613add5760405162461bcd60e51b8152600401610ce5906145a5565b6001600160a01b038216613b035760405162461bcd60e51b8152600401610ce5906145ea565b613b4081604051806060016040528060268152602001614727602691396001600160a01b038616600090815260016020526040902054919061373e565b6001600160a01b038085166000908152600160205260408082209390935590841681522054613b6f9082612e55565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612fd39085815260200190565b6000602a819055602b819055602c819055602d819055602e558115613c0557601b54602a55601c54602b55601d54602c55601e54602d55601f54602e55613c4d565b8015613c2e57602054602a55602154602b55602254602c55602354602d55602454602e55613c4d565b602554602a55602654602b55602754602c55602854602d55602954602e555b602e54602d54602c54602b54602a54613c6691906142e7565b613c7091906142e7565b613c7a91906142e7565b613c8491906142e7565b602f819055602a54602b54602c54602d54602e54604080519586526020860194909452928401919091526060830152608082015260a08101919091527f24b7b85246369f5fb87526971064f357b39a0f399bca1c50e11af8c3c8f4bbd69060c001611453565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d1f57613d1f61465b565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9c9190614507565b81600181518110613daf57613daf61465b565b6001600160a01b039283166020918202929092010152600d54613dd59130911684612ebb565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613e0e9085906000908690309042906004016146b5565b600060405180830381600087803b158015613e2857600080fd5b505af1158015613e3c573d6000803e3d6000fd5b505050505050565b600d54613e5c9030906001600160a01b031684612ebb565b600d5460195460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613ecc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117c3919061462d565b6040805160028082526060820183526000926020830190803683375050600d54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7f9190614507565b81600081518110613f9257613f9261465b565b6001600160a01b039283166020918202929092010152601754825191169082906001908110613fc357613fc361465b565b6001600160a01b039283166020918202929092010152600d54601a5460405163b6f9de9560e01b81529183169263b6f9de9592869261400f9260009288929091169042906004016146f1565b6000604051808303818588803b15801561402857600080fd5b505af1158015613735573d6000803e3d6000fd5b600060208083528351808285015260005b818110156140695785810183015185820160400152820161404d565b8181111561407b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146115c757600080fd5b600080604083850312156140b957600080fd5b82356140c481614091565b946020939093013593505050565b6000602082840312156140e457600080fd5b8135612eb481614091565b600080600080600060a0868803121561410757600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060006060848603121561413f57600080fd5b833561414a81614091565b9250602084013561415a81614091565b929592945050506040919091013590565b80151581146115c757600080fd5b6000806040838503121561418c57600080fd5b823561419781614091565b915060208301356141a78161416b565b809150509250929050565b6000602082840312156141c457600080fd5b5035919050565b6000602082840312156141dd57600080fd5b8135612eb48161416b565b6000806000606084860312156141fd57600080fd5b833561420881614091565b9250602084013561421881614091565b9150604084013561422881614091565b809150509250925092565b6000806040838503121561424657600080fd5b823561425181614091565b915060208301356141a781614091565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806142aa57607f821691505b602082108114156142cb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156142fa576142fa6142d1565b500190565b6020808252602c908201527f4b726f6e6f733a2043616e6e6f742075706461746520746178657320746f206d60408201526b6f7265207468616e2032302560a01b606082015260800190565b60208082526032908201527f4b726f6e6f733a204163636f756e7420697320616c7265616479207468652076604082015271616c7565206f6620276578636c756465642760701b606082015260800190565b600181815b808511156143d85781600019048211156143be576143be6142d1565b808516156143cb57918102915b93841c93908002906143a2565b509250929050565b6000826143ef57506001610dca565b816143fc57506000610dca565b8160018114614412576002811461441c57614438565b6001915050610dca565b60ff84111561442d5761442d6142d1565b50506001821b610dca565b5060208310610133831016604e8410600b841016171561445b575081810a610dca565b614465838361439d565b8060001904821115614479576144796142d1565b029392505050565b6000612eb460ff8416836143e0565b60008160001904831182151516156144aa576144aa6142d1565b500290565b6000826144cc57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156144e357600080fd5b5051919050565b6000602082840312156144fc57600080fd5b8151612eb48161416b565b60006020828403121561451957600080fd5b8151612eb481614091565b600080600080600080600080610100898b03121561454157600080fd5b885161454c81614091565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b6000828210156145a0576145a06142d1565b500390565b60208082526025908201527f43524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f43524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008060006060848603121561464257600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156146aa5781516001600160a01b031687529582019590820190600101614685565b509495945050505050565b85815284602082015260a0604082015260006146d460a0830186614671565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600061470a6080830186614671565b6001600160a01b0394909416604083015250606001529291505056fe43524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636543524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f43524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c6286ff8df4e21e7c34925ed322c5b634811972ad73a99be433c4604272a0da664736f6c634300080c003360806040523480156200001157600080fd5b5060408051808201825260178082527f4b726f6e6f735f4469766964656e645f547261636b6572000000000000000000602080840182815285518087019096529285528401528151919291839183916200006e9160039162000106565b5080516200008490600490602084019062000106565b5050506000620000996200010260201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e1060135550683635c9adc5dea00000601455620001e9565b3390565b8280546200011490620001ac565b90600052602060002090601f01602090048101928262000138576000855562000183565b82601f106200015357805160ff191683800117855562000183565b8280016001018555821562000183579182015b828111156200018357825182559160200191906001019062000166565b506200019192915062000195565b5090565b5b8082111562000191576000815560010162000196565b600181811c90821680620001c157607f821691505b60208210811415620001e357634e487b7160e01b600052602260045260246000fd5b50919050565b61262c80620001f96000396000f3fe60806040526004361061024a5760003560e01c80637d210f4111610139578063bc4c4b37116100b6578063e7841ec01161007a578063e7841ec014610732578063e98030c714610747578063f2fde38b14610767578063f7c618c114610787578063fbcbc0f1146107a7578063ffb2c479146107c757600080fd5b8063bc4c4b3714610676578063be10b61414610696578063c0f306ef146106ac578063dd62ed3e146106cc578063e30443bc1461071257600080fd5b806395d89b41116100fd57806395d89b41146105cb578063a457c2d7146105e0578063a8b9d24014610600578063a9059cbb14610620578063aafd847a1461064057600080fd5b80637d210f411461051f57806385a6b3ae146105575780638aee81271461056d5780638da5cb5b1461058d57806391b89fba146105ab57600080fd5b8063313ce567116101c75780635183d6fd1161018b5780635183d6fd146104445780636a474002146104a95780636f2789ec146104be57806370a08231146104d4578063715018a61461050a57600080fd5b8063313ce5671461039857806331e79db0146103b457806339509351146103d45780633cb5a67c146103f45780634e7b827f1461041457600080fd5b806318160ddd1161020e57806318160ddd14610300578063226cfa3d1461031557806323b872dd1461034257806327ce0147146103625780633009a6091461038257600080fd5b806303c833021461025e57806306fdde0314610266578063095ea7b31461029157806309bbedde146102c1578063163c7cef146102e057600080fd5b3661025957610257610802565b005b600080fd5b610257610802565b34801561027257600080fd5b5061027b6108c8565b60405161028891906121c7565b60405180910390f35b34801561029d57600080fd5b506102b16102ac366004612231565b61095a565b6040519015158152602001610288565b3480156102cd57600080fd5b50600c545b604051908152602001610288565b3480156102ec57600080fd5b506102576102fb36600461225d565b610971565b34801561030c57600080fd5b506002546102d2565b34801561032157600080fd5b506102d2610330366004612276565b60126020526000908152604090205481565b34801561034e57600080fd5b506102b161035d366004612293565b610a3e565b34801561036e57600080fd5b506102d261037d366004612276565b610aa7565b34801561038e57600080fd5b506102d260105481565b3480156103a457600080fd5b5060405160128152602001610288565b3480156103c057600080fd5b506102576103cf366004612276565b610b03565b3480156103e057600080fd5b506102b16103ef366004612231565b610c2a565b34801561040057600080fd5b5061025761040f366004612276565b610c60565b34801561042057600080fd5b506102b161042f366004612276565b60116020526000908152604090205460ff1681565b34801561045057600080fd5b5061046461045f36600461225d565b610c96565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610288565b3480156104b557600080fd5b50610257610dea565b3480156104ca57600080fd5b506102d260135481565b3480156104e057600080fd5b506102d26104ef366004612276565b6001600160a01b031660009081526020819052604090205490565b34801561051657600080fd5b50610257610e1d565b34801561052b57600080fd5b5060095461053f906001600160a01b031681565b6040516001600160a01b039091168152602001610288565b34801561056357600080fd5b506102d260075481565b34801561057957600080fd5b50610257610588366004612276565b610e91565b34801561059957600080fd5b506005546001600160a01b031661053f565b3480156105b757600080fd5b506102d26105c6366004612276565b610ec4565b3480156105d757600080fd5b5061027b610ecf565b3480156105ec57600080fd5b506102b16105fb366004612231565b610ede565b34801561060c57600080fd5b506102d261061b366004612276565b610f2d565b34801561062c57600080fd5b506102b161063b366004612231565b610f59565b34801561064c57600080fd5b506102d261065b366004612276565b6001600160a01b03166000908152600b602052604090205490565b34801561068257600080fd5b506102b16106913660046122d4565b610f66565b3480156106a257600080fd5b506102d260145481565b3480156106b857600080fd5b506102576106c7366004612276565b611014565b3480156106d857600080fd5b506102d26106e7366004612312565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561071e57600080fd5b5061025761072d366004612231565b6110ac565b34801561073e57600080fd5b506010546102d2565b34801561075357600080fd5b5061025761076236600461225d565b61121a565b34801561077357600080fd5b50610257610782366004612276565b61138b565b34801561079357600080fd5b5060085461053f906001600160a01b031681565b3480156107b357600080fd5b506104646107c2366004612276565b611476565b3480156107d357600080fd5b506107e76107e236600461225d565b6115df565b60408051938452602084019290925290820152606001610288565b6005546001600160a01b031633146108355760405162461bcd60e51b815260040161082c90612340565b60405180910390fd5b600061084060025490565b1161084a57600080fd5b34156108c65761087d61085c60025490565b61086a34600160801b611724565b610874919061238b565b600654906117aa565b60065560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26007546108c290346117aa565b6007555b565b6060600380546108d7906123ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610903906123ad565b80156109505780601f1061092557610100808354040283529160200191610950565b820191906000526020600020905b81548152906001019060200180831161093357829003601f168201915b5050505050905090565b6000610967338484611809565b5060015b92915050565b6005546001600160a01b0316331461099b5760405162461bcd60e51b815260040161082c90612340565b806014541415610a395760405162461bcd60e51b815260206004820152605960248201527f4b726f6e6f735f4469766964656e645f547261636b65723a206d696e696d756d60448201527f546f6b656e42616c616e6365466f724469766964656e647320616c726561647960648201527f207468652076616c7565206f6620276e657756616c7565272e00000000000000608482015260a40161082c565b601455565b6000610a4b84848461192d565b610a9d8433610a98856040518060600160405280602881526020016125cf602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061198b565b611809565b5060019392505050565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b92610af992610af492610aee91610ae99190611724565b6119c5565b906119d5565b611a13565b61096b919061238b565b6005546001600160a01b03163314610b2d5760405162461bcd60e51b815260040161082c90612340565b6001600160a01b03811660009081526011602052604090205460ff1615610b5357600080fd5b6001600160a01b0381166000908152601160205260408120805460ff19166001179055610b81908290611a26565b60405163131836e760e21b8152600c60048201526001600160a01b038216602482015273e7bb54c5e2801def1ae710c01fdd6ccd804027df90634c60db9c9060440160006040518083038186803b158015610bdb57600080fd5b505af4158015610bef573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610967918590610a9890866117aa565b6005546001600160a01b03163314610c8a5760405162461bcd60e51b815260040161082c90612340565b610c9381611a85565b50565b600080600080600080600080600c73e7bb54c5e2801def1ae710c01fdd6ccd804027df63deb3d89690916040518263ffffffff1660e01b8152600401610cde91815260200190565b602060405180830381865af4158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f91906123e8565b8910610d44575060009650600019955085945086935083925082915081905080610ddf565b6040516368d54f3f60e11b8152600c6004820152602481018a905260009073e7bb54c5e2801def1ae710c01fdd6ccd804027df9063d1aa9e7e90604401602060405180830381865af4158015610d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc29190612401565b9050610dcd81611476565b98509850985098509850985098509850505b919395975091939597565b6005546001600160a01b03163314610e145760405162461bcd60e51b815260040161082c90612340565b610c9333611ad1565b6005546001600160a01b03163314610e475760405162461bcd60e51b815260040161082c90612340565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610ebb5760405162461bcd60e51b815260040161082c90612340565b610c9381611cae565b600061096b82610f2d565b6060600480546108d7906123ad565b60006109673384610a98856040518060600160405280602581526020016125aa602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061198b565b6001600160a01b0381166000908152600b602052604081205461096b90610f5384610aa7565b90611cfa565b600061096733848461192d565b6005546000906001600160a01b03163314610f935760405162461bcd60e51b815260040161082c90612340565b6000610f9e84611ad1565b9050801561100a576001600160a01b038416600081815260126020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610ff89085815260200190565b60405180910390a3600191505061096b565b5060009392505050565b6005546001600160a01b0316331461103e5760405162461bcd60e51b815260040161082c90612340565b6001600160a01b03811660009081526011602052604090205460ff1661106357600080fd5b6001600160a01b038116600081815260116020526040808220805460ff19169055517f40a78dcf8526b72f2eaf598af1c7e49c8d5fc577f6c8f1bed887f3e4dfa289329190a250565b6005546001600160a01b031633146110d65760405162461bcd60e51b815260040161082c90612340565b6001600160a01b03821660009081526011602052604090205460ff16156110fb575050565b601454811061118c5761110e8282611a26565b604051632f0ad01760e21b8152600c60048201526001600160a01b03831660248201526044810182905273e7bb54c5e2801def1ae710c01fdd6ccd804027df9063bc2b405c9060640160006040518083038186803b15801561116f57600080fd5b505af4158015611183573d6000803e3d6000fd5b5050505061120a565b611197826000611a26565b60405163131836e760e21b8152600c60048201526001600160a01b038316602482015273e7bb54c5e2801def1ae710c01fdd6ccd804027df90634c60db9c9060440160006040518083038186803b1580156111f157600080fd5b505af4158015611205573d6000803e3d6000fd5b505050505b611215826001610f66565b505050565b6005546001600160a01b031633146112445760405162461bcd60e51b815260040161082c90612340565b610e1081101580156112595750620151808111155b6112e05760405162461bcd60e51b815260206004820152604c60248201527f4b726f6e6f735f4469766964656e645f547261636b65723a20636c61696d576160448201527f6974206d757374206265207570646174656420746f206265747765656e20312060648201526b616e6420323420686f75727360a01b608482015260a40161082c565b6013548114156113585760405162461bcd60e51b815260206004820152603e60248201527f4b726f6e6f735f4469766964656e645f547261636b65723a2043616e6e6f742060448201527f75706461746520636c61696d5761697420746f2073616d652076616c75650000606482015260840161082c565b60135460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601355565b6005546001600160a01b031633146113b55760405162461bcd60e51b815260040161082c90612340565b6001600160a01b03811661141a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161082c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6040516317e142d160e01b8152600c60048201526001600160a01b0382166024820152819060009081908190819081908190819073e7bb54c5e2801def1ae710c01fdd6ccd804027df906317e142d190604401602060405180830381865af41580156114e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150a91906123e8565b965060001995506000871261156c5760105487111561153857601054611531908890611d3c565b955061156c565b601054600c546000911061154d57600061155c565b601054600c5461155c91611cfa565b905061156888826119d5565b9650505b61157588610f2d565b945061158088610aa7565b6001600160a01b0389166000908152601260205260409020549094509250826115aa5760006115b8565b6013546115b89084906117aa565b91504282116115c85760006115d2565b6115d28242611cfa565b9050919395975091939597565b600554600090819081906001600160a01b031633146116105760405162461bcd60e51b815260040161082c90612340565b600c54806116295750506010546000925082915061171d565b6010546000805a90506000805b898410801561164457508582105b1561170c57846116538161241e565b600c549096508610905061166657600094505b6000600c600001868154811061167e5761167e612439565b60009182526020808320909101546001600160a01b031680835260129091526040909120549091506116af90611d79565b156116d2576116bf816001610f66565b156116d257816116ce8161241e565b9250505b826116dc8161241e565b93505060005a905080851115611703576117006116f98683611cfa565b87906117aa565b95505b93506116369050565b601085905590975095509193505050505b9193909250565b6000826117335750600061096b565b600061173f838561244f565b90508261174c858361238b565b146117a35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161082c565b9392505050565b6000806117b7838561246e565b9050838110156117a35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161082c565b6001600160a01b03831661186b5760405162461bcd60e51b8152602060048201526024808201527f43524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161082c565b6001600160a01b0382166118cc5760405162461bcd60e51b815260206004820152602260248201527f43524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161082c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602d60248201527f4b726f6e6f735f4469766964656e645f547261636b65723a204e6f207472616e60448201526c1cd9995c9cc8185b1b1bddd959609a1b606482015260840161082c565b600081848411156119af5760405162461bcd60e51b815260040161082c91906121c7565b5060006119bc8486612486565b95945050505050565b6000818181121561096b57600080fd5b6000806119e2838561249d565b9050600083121580156119f55750838112155b80611a0a5750600083128015611a0a57508381125b6117a357600080fd5b600080821215611a2257600080fd5b5090565b6001600160a01b03821660009081526020819052604090205480821115611a65576000611a538383611cfa565b9050611a5f8482611da0565b50505050565b80821015611215576000611a798284611cfa565b9050611a5f8482611e04565b6005546001600160a01b03163314611aaf5760405162461bcd60e51b815260040161082c90612340565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600080611add83610f2d565b90508015611ca5576001600160a01b0383166000908152600b6020526040902054611b0890826117aa565b6001600160a01b0384166000818152600b6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d90611b579084815260200190565b60405180910390a2600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd69190612401565b6008546001600160a01b0390811691161415611c9b576000836001600160a01b031682610bb890604051600060405180830381858888f193505050503d8060008114611c3e576040519150601f19603f3d011682016040523d82523d6000602084013e611c43565b606091505b5050905080611c94576001600160a01b0384166000908152600b6020526040902054611c6f9083611cfa565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b6117a38382611e48565b50600092915050565b6005546001600160a01b03163314611cd85760405162461bcd60e51b815260040161082c90612340565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60006117a383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061198b565b600080611d4983856124de565b905060008312158015611d5c5750838113155b80611a0a5750600083128015611a0a57508381136117a357600080fd5b600042821115611d8b57506000919050565b601354611d984284611cfa565b101592915050565b611daa8282611fe4565b611de4611dc5610ae98360065461172490919063ffffffff16565b6001600160a01b0384166000908152600a602052604090205490611d3c565b6001600160a01b039092166000908152600a602052604090209190915550565b611e0e82826120c3565b611de4611e29610ae98360065461172490919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906119d5565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eda9190612401565b81600081518110611eed57611eed612439565b6001600160a01b039283166020918202929092010152600854825191169082906001908110611f1e57611f1e612439565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de95908590611f649060009086908a90429060040161251d565b6000604051808303818588803b158015611f7d57600080fd5b505af193505050508015611f8f575060015b611fdb576001600160a01b0384166000908152600b6020526040902054611fb69084611cfa565b6001600160a01b0385166000908152600b6020526040812091909155915061096b9050565b8291505061096b565b6001600160a01b03821661203a5760405162461bcd60e51b815260206004820152601f60248201527f43524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161082c565b60025461204790826117aa565b6002556001600160a01b03821660009081526020819052604090205461206d90826117aa565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b0382166121235760405162461bcd60e51b815260206004820152602160248201527f43524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161082c565b61216081604051806060016040528060228152602001612588602291396001600160a01b038516600090815260208190526040902054919061198b565b6001600160a01b0383166000908152602081905260409020556002546121869082611cfa565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016120b7565b600060208083528351808285015260005b818110156121f4578581018301518582016040015282016121d8565b81811115612206576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610c9357600080fd5b6000806040838503121561224457600080fd5b823561224f8161221c565b946020939093013593505050565b60006020828403121561226f57600080fd5b5035919050565b60006020828403121561228857600080fd5b81356117a38161221c565b6000806000606084860312156122a857600080fd5b83356122b38161221c565b925060208401356122c38161221c565b929592945050506040919091013590565b600080604083850312156122e757600080fd5b82356122f28161221c565b91506020830135801515811461230757600080fd5b809150509250929050565b6000806040838503121561232557600080fd5b82356123308161221c565b915060208301356123078161221c565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826123a857634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806123c157607f821691505b602082108114156123e257634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156123fa57600080fd5b5051919050565b60006020828403121561241357600080fd5b81516117a38161221c565b600060001982141561243257612432612375565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600081600019048311821515161561246957612469612375565b500290565b6000821982111561248157612481612375565b500190565b60008282101561249857612498612375565b500390565b600080821280156001600160ff1b03849003851316156124bf576124bf612375565b600160ff1b83900384128116156124d8576124d8612375565b50500190565b60008083128015600160ff1b8501841216156124fc576124fc612375565b6001600160ff1b038401831381161561251757612517612375565b50500390565b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156125675784516001600160a01b031683529383019391830191600101612542565b50506001600160a01b03969096166040850152505050606001529291505056fe43524332303a206275726e20616d6f756e7420657863656564732062616c616e636543524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f43524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220544bfc720ea377887eb09e962d4b060c1fc432fb058ca534700e2ac7cf917b4064736f6c634300080c0033
Deployed Bytecode
0x6080604052600436106103e85760003560e01c80636d7331ed11610208578063a8b9d24011610118578063c0246668116100ab578063d37b34d71161007a578063d37b34d714610bf5578063dd62ed3e14610c15578063ec28438a14610c5b578063ee24565014610c7b578063f2fde38b14610c9b57600080fd5b8063c024666814610b7f578063c0f306ef14610b9f578063d2d7ad8314610bbf578063d322157614610bd557600080fd5b8063ad56c13c116100e7578063ad56c13c14610aaa578063aee50b1e14610b0f578063b7677cb214610b2f578063bdb9f28d14610b5f57600080fd5b8063a8b9d24014610a3e578063a9059cbb14610a5e578063aa4bde2814610a7e578063abfa71e914610a9457600080fd5b806388bdd9be1161019b57806395d89b411161016a57806395d89b41146109ac5780639c1b8af5146109c1578063a25d11d5146109d7578063a457c2d7146109f7578063a4fbec3314610a1757600080fd5b806388bdd9be146109435780638c0b5e22146109635780638da5cb5b1461097957806395ccca7a1461099757600080fd5b806375cb1bd1116101d757806375cb1bd1146108c357806375f0a874146108e3578063781edb3c146109035780637d210f411461092357600080fd5b80636d7331ed1461083857806370a0823114610858578063715018a61461088e57806371ea980c146108a357600080fd5b806331e79db0116103035780634e71d92d116102965780635ebf4db9116102655780635ebf4db9146107ad5780636318be01146107cd57806364b0f653146107e35780636843cd84146107f857806369fc3a061461081857600080fd5b80634e71d92d1461074357806351bc3c85146107585780635960e46d1461076d578063599270441461078d57600080fd5b80633a1ce746116102d25780633a1ce746146106c85780633cb5a67c146106dd578063423ce9cc146106fd5780634597c5fe1461071c57600080fd5b806331e79db01461063f57806334cf1fea1461065f57806335c200d41461067457806339509351146106a857600080fd5b80631d31a7901161037b57806327a14fc21161034a57806327a14fc2146105ce5780632c1f5216146105ee57806330bb4cff1461060e578063313ce5671461062357600080fd5b80631d31a7901461051f5780631e3eed7c1461056e57806323b872dd1461058e57806323cc6601146105ae57600080fd5b80630bd05b69116103b75780630bd05b69146104835780631582358e1461049857806318160ddd146104d05780631cdd3be3146104ef57600080fd5b806301339c21146103f4578063064a59d01461040b57806306fdde0314610441578063095ea7b31461046357600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50610409610cbb565b005b34801561041757600080fd5b50600d5461042c90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561044d57600080fd5b50610456610d27565b604051610438919061403c565b34801561046f57600080fd5b5061042c61047e3660046140a6565b610db9565b34801561048f57600080fd5b50610409610dd0565b3480156104a457600080fd5b506017546104b8906001600160a01b031681565b6040516001600160a01b039091168152602001610438565b3480156104dc57600080fd5b506003545b604051908152602001610438565b3480156104fb57600080fd5b5061042c61050a3660046140d2565b600a6020526000908152604090205460ff1681565b34801561052b57600080fd5b50602554602654602754602854602954610546949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610438565b34801561057a57600080fd5b506104096105893660046140ef565b610e0f565b34801561059a57600080fd5b5061042c6105a936600461412a565b610f3a565b3480156105ba57600080fd5b506104096105c9366004614179565b610fa3565b3480156105da57600080fd5b506104096105e93660046141b2565b61106c565b3480156105fa57600080fd5b50600c546104b8906001600160a01b031681565b34801561061a57600080fd5b506104e16111dd565b34801561062f57600080fd5b5060405160128152602001610438565b34801561064b57600080fd5b5061040961065a3660046140d2565b611250565b34801561066b57600080fd5b5061040961131c565b34801561068057600080fd5b506104b87f000000000000000000000000884d1ecf63597b368e2c0d0aad9eb38908c4c32781565b3480156106b457600080fd5b5061042c6106c33660046140a6565b611359565b3480156106d457600080fd5b5061040961138f565b3480156106e957600080fd5b506104096106f83660046140d2565b611460565b34801561070957600080fd5b5060145461042c90610100900460ff1681565b34801561072857600080fd5b50601b54601c54601d54601e54601f54610546949392919085565b34801561074f57600080fd5b506104096115ca565b34801561076457600080fd5b5061040961163f565b34801561077957600080fd5b506104096107883660046141b2565b611673565b34801561079957600080fd5b506019546104b8906001600160a01b031681565b3480156107b957600080fd5b506104096107c83660046141b2565b61173f565b3480156107d957600080fd5b506104e160115481565b3480156107ef57600080fd5b506104e16117ca565b34801561080457600080fd5b506104e16108133660046140d2565b611814565b34801561082457600080fd5b506104096108333660046141cb565b611884565b34801561084457600080fd5b506104096108533660046140d2565b611942565b34801561086457600080fd5b506104e16108733660046140d2565b6001600160a01b031660009081526001602052604090205490565b34801561089a57600080fd5b50610409611a21565b3480156108af57600080fd5b50601a546104b8906001600160a01b031681565b3480156108cf57600080fd5b506104096108de3660046141e8565b611a95565b3480156108ef57600080fd5b506018546104b8906001600160a01b031681565b34801561090f57600080fd5b5061040961091e366004614179565b611d98565b34801561092f57600080fd5b50600d546104b8906001600160a01b031681565b34801561094f57600080fd5b5061040961095e3660046140d2565b611e59565b34801561096f57600080fd5b506104e160135481565b34801561098557600080fd5b506000546001600160a01b03166104b8565b3480156109a357600080fd5b50610409612266565b3480156109b857600080fd5b506104566122fb565b3480156109cd57600080fd5b506104e160165481565b3480156109e357600080fd5b506104096109f23660046140ef565b61230a565b348015610a0357600080fd5b5061042c610a123660046140a6565b6123d6565b348015610a2357600080fd5b50602054602154602254602354602454610546949392919085565b348015610a4a57600080fd5b506104e1610a593660046140d2565b612425565b348015610a6a57600080fd5b5061042c610a793660046140a6565b612458565b348015610a8a57600080fd5b506104e160125481565b348015610aa057600080fd5b506104e160105481565b348015610ab657600080fd5b50610aca610ac53660046140d2565b612465565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610438565b348015610b1b57600080fd5b50610409610b2a3660046141b2565b6124ff565b348015610b3b57600080fd5b5061042c610b4a3660046140d2565b600b6020526000908152604090205460ff1681565b348015610b6b57600080fd5b50610409610b7a3660046140d2565b6125d4565b348015610b8b57600080fd5b50610409610b9a366004614179565b6126ec565b348015610bab57600080fd5b50610409610bba3660046140d2565b6127ad565b348015610bcb57600080fd5b506104e160155481565b348015610be157600080fd5b50610409610bf0366004614179565b612872565b348015610c0157600080fd5b50610409610c103660046140d2565b6128f4565b348015610c2157600080fd5b506104e1610c30366004614233565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610c6757600080fd5b50610409610c763660046141b2565b612b3a565b348015610c8757600080fd5b50610409610c963660046140ef565b612c9d565b348015610ca757600080fd5b50610409610cb63660046140d2565b612d6b565b6000546001600160a01b03163314610cee5760405162461bcd60e51b8152600401610ce590614261565b60405180910390fd5b4260105543601155600d805460ff60a01b1916600160a01b179055600f805460ff191660011790556014805461ff001916610100179055565b606060048054610d3690614296565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6290614296565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b5050505050905090565b6000610dc6338484612ebb565b5060015b92915050565b6000546001600160a01b03163314610dfa5760405162461bcd60e51b8152600401610ce590614261565b600d805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610e395760405162461bcd60e51b8152600401610ce590614261565b6000818385610e48888a6142e7565b610e5291906142e7565b610e5c91906142e7565b610e6691906142e7565b90506014811115610e895760405162461bcd60e51b8152600401610ce5906142ff565b6040805160a08101825287815260208101879052808201869052606081018590526080018390526025879055602686905560278590556028849055602983905551672a3930b739b332b960c11b81526008015b60408051918290038220888352602083018890529082018690526060820185905260808201849052907f18313eafd26b263470e815300393e601ee24084135005dfe66a3bc4bbba795669060a00160405180910390a2505050505050565b6000610f47848484612fe0565b610f998433610f9485604051806060016040528060288152602001614772602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061373e565b612ebb565b5060019392505050565b6000546001600160a01b03163314610fcd5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b03821660009081526009602052604090205460ff161515811515141561100c5760405162461bcd60e51b8152600401610ce59061434b565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527f46a87ba9eb6bc0a74eae283c9908175809a666189b7de3c2f9df3fcbbe924d3591015b60405180910390a25050565b6000546001600160a01b031633146110965760405162461bcd60e51b8152600401610ce590614261565b6012548114156111045760405162461bcd60e51b815260206004820152603360248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d617857616c6c6574416044820152726d6f756e7420746f2073616d652076616c756560681b6064820152608401610ce5565b6103e86111136012600a614481565b611121906305f5e100614490565b61112b91906144af565b8110156111aa5760405162461bcd60e51b815260206004820152604160248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d617857616c6c65744160448201527f6d6f756e7420746f206c657373207468616e20302e3125206f6620737570706c6064820152607960f81b608482015260a401610ce5565b60125460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3601255565b600c54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124b91906144d1565b905090565b6000546001600160a01b0316331461127a5760405162461bcd60e51b8152600401610ce590614261565b600c5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b1580156112c157600080fd5b505af11580156112d5573d6000803e3d6000fd5b5050604051600181526001600160a01b03841692507fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa991506020015b60405180910390a250565b6000546001600160a01b031633146113465760405162461bcd60e51b8152600401610ce590614261565b600d805460ff60a01b1916905542600e55565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610dc6918590610f949086612e55565b6000546001600160a01b031633146113b95760405162461bcd60e51b8152600401610ce590614261565b4760006113ce6000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114611418576040519150601f19603f3d011682016040523d82523d6000602084013e61141d565b606091505b50509050801561145c576040518281527f7119601cabfe7d71a345076e0c5cdd24f8d5e021f3208294b317988bc692edcd906020015b60405180910390a15b5050565b6000546001600160a01b0316331461148a5760405162461bcd60e51b8152600401610ce590614261565b600d546001600160a01b03828116911614156114fc5760405162461bcd60e51b815260206004820152602b60248201527f4b726f6e6f733a2054686520726f7574657220616c726561647920686173207460448201526a686174206164647265737360a81b6064820152608401610ce5565b600d546040516001600160a01b03918216918316907f683c3b49bd4be33811cc81bd567058dd43bf6a6ec34076d5f9e0581f56758b1590600090a3600d80546001600160a01b0319166001600160a01b03838116918217909255600c54604051630f2d699f60e21b8152600481019290925290911690633cb5a67c90602401600060405180830381600087803b15801561159557600080fd5b505af11580156115a9573d6000803e3d6000fd5b5050600d546115c792503091506001600160a01b0316600019612ebb565b50565b600c5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af115801561161b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c791906144ea565b6000546001600160a01b031633146116695760405162461bcd60e51b8152600401610ce590614261565b611671613778565b565b6000546001600160a01b0316331461169d5760405162461bcd60e51b8152600401610ce590614261565b60165481141561170c5760405162461bcd60e51b815260206004820152603460248201527f4b726f6e6f733a2043616e6e6f742075706461746520676173466f7250726f63604482015273657373696e6720746f2073616d652076616c756560601b6064820152608401610ce5565b60165460405182907f79282993055b3a4cfa0a12ead12d58cc3aad216fcbbae5a73d942c1ee861fb9a90600090a3601655565b6000546001600160a01b031633146117695760405162461bcd60e51b8152600401610ce590614261565b600c5460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401600060405180830381600087803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b5050505050565b600c54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015611227573d6000803e3d6000fd5b600c546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611860573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dca91906144d1565b6000546001600160a01b031633146118ae5760405162461bcd60e51b8152600401610ce590614261565b60145460ff61010090910416151581151514156119285760405162461bcd60e51b815260206004820152603260248201527f73776170416e644c6971756966792073746174757320616c72656164792073656044820152717420746f206465736972652063686f69636560701b6064820152608401610ce5565b601480549115156101000261ff0019909216919091179055565b6000546001600160a01b0316331461196c5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b0381166000908152600a602052604090205460ff166119d45760405162461bcd60e51b815260206004820152601e60248201527f4b726f6e6f733a204163636f756e74206973206e6f7420626c636f6b656400006044820152606401610ce5565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055519091907f22dfccad3b8536e5d2741216ca2aa1324ca91414ac6daeb7ed374d9501997298908390a350565b6000546001600160a01b03163314611a4b5760405162461bcd60e51b8152600401610ce590614261565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611abf5760405162461bcd60e51b8152600401610ce590614261565b6018546001600160a01b03848116911614611bb3576001600160a01b038316611b3a5760405162461bcd60e51b815260206004820152602760248201527f4b726f6e6f733a20546865206d61726b6574696e6757616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610ce5565b6018546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4601880546001600160a01b0319166001600160a01b0385161790555b6019546001600160a01b03838116911614611c9d576001600160a01b038216611c295760405162461bcd60e51b815260206004820152602260248201527f4b726f6e6f733a20546865207465616d57616c6c65742063616e6e6f74206265604482015261020360f41b6064820152608401610ce5565b601954604051691d19585b55d85b1b195d60b21b81526001600160a01b0391821691841690600a01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4601980546001600160a01b0319166001600160a01b0384161790555b601a546001600160a01b03828116911614611d93576001600160a01b038216611d195760405162461bcd60e51b815260206004820152602860248201527f4b726f6e6f733a2054686520726577617264506f6f6c57616c6c65742063616e60448201526706e6f7420626520360c41b6064820152608401610ce5565b601a546040516f1c995dd85c99141bdbdb15d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4601a80546001600160a01b0319166001600160a01b0383161790555b505050565b6000546001600160a01b03163314611dc25760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b03821660009081526008602052604090205460ff1615158115151415611e015760405162461bcd60e51b8152600401610ce59061434b565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101611060565b6000546001600160a01b03163314611e835760405162461bcd60e51b8152600401610ce590614261565b600c546001600160a01b0382811691161415611eff5760405162461bcd60e51b815260206004820152603560248201527f4b726f6e6f733a20546865206469766964656e6420747261636b657220616c7260448201527465616479206861732074686174206164647265737360581b6064820152608401610ce5565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f709190614507565b6001600160a01b0316146120005760405162461bcd60e51b815260206004820152604b60248201527f4b726f6e6f733a20546865206e6577206469766964656e6420747261636b657260448201527f206d757374206265206f776e656420627920746865204b726f6e6f7320746f6b60648201526a195b8818dbdb9d1c9858dd60aa1b608482015260a401610ce5565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b15801561209b57600080fd5b505af11580156120af573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db06120d46000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b5050600d5460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b505060405163031e79db60e41b81526001600160a01b037f000000000000000000000000884d1ecf63597b368e2c0d0aad9eb38908c4c32781166004830152841692506331e79db09150602401600060405180830381600087803b1580156121ef57600080fd5b505af1158015612203573d6000803e3d6000fd5b5050600c546040516001600160a01b03918216935090851691507f43c6eb9010459f8dbe15160295e5e1477f0b15c2bf0d127bfccc6c67fca7f69090600090a3600c80546001600160a01b0319166001600160a01b039290921691909117905550565b600c5460405163c0f306ef60e01b81523360048201526001600160a01b039091169063c0f306ef90602401600060405180830381600087803b1580156122ab57600080fd5b505af11580156122bf573d6000803e3d6000fd5b5050604051600081523392507fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa9915060200160405180910390a2565b606060058054610d3690614296565b6000546001600160a01b031633146123345760405162461bcd60e51b8152600401610ce590614261565b6000818385612343888a6142e7565b61234d91906142e7565b61235791906142e7565b61236191906142e7565b905060148111156123845760405162461bcd60e51b8152600401610ce5906142ff565b6040805160a0810182528781526020810187905280820186905260608101859052608001839052601b879055601c869055601d859055601e849055601f839055516242757960e81b8152600301610edc565b6000610dc63384610f948560405180606001604052806025815260200161474d602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061373e565b600c546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611843565b6000610dc6338484612fe0565b600c5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f19060240161010060405180830381865afa1580156124c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e49190614524565b97509750975097509750975097509750919395975091939597565b6000546001600160a01b031633146125295760405162461bcd60e51b8152600401610ce590614261565b6015548114156125a15760405162461bcd60e51b815260206004820152603b60248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d696e696d756d546f6b60448201527f656e734265666f72655377617020746f2073616d652076616c756500000000006064820152608401610ce5565b60155460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3601555565b6000546001600160a01b031633146125fe5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b0381811660008181526007602052604090819020805460ff19166001179055600c54905163031e79db60e41b81526004810192909252909116906331e79db090602401600060405180830381600087803b15801561266257600080fd5b505af1158015612676573d6000803e3d6000fd5b505050506001600160a01b03811660008181526006602090815260408083208054600160ff1991821681179092556008845282852080548216831790556009909352818420805490931617909155517f3727916e5d01f0ec2bcea88f550181aee40774d9790b1f1240616a15005857999190a250565b6000546001600160a01b031633146127165760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b03821660009081526007602052604090205460ff16151581151514156127555760405162461bcd60e51b8152600401610ce59061434b565b6001600160a01b038216600081815260076020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611060565b6000546001600160a01b031633146127d75760405162461bcd60e51b8152600401610ce590614261565b600c5460405163c0f306ef60e01b81526001600160a01b0383811660048301529091169063c0f306ef90602401600060405180830381600087803b15801561281e57600080fd5b505af1158015612832573d6000803e3d6000fd5b5050604051600081526001600160a01b03841692507fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa99150602001611311565b6000546001600160a01b0316331461289c5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611060565b6000546001600160a01b0316331461291e5760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b0381166000908152600a6020526040902054429060ff16156129945760405162461bcd60e51b815260206004820152602260248201527f4b726f6e6f733a204163636f756e7420697320616c726561647920626c6f636b604482015261195960f21b6064820152608401610ce5565b6001600160a01b0382166000908152600b602052604090205460ff16156129fd5760405162461bcd60e51b815260206004820152601d60248201527f4b726f6e6f733a2043616e6e6f7420626c61636b6c69737420706169720000006044820152606401610ce5565b600d546001600160a01b0383811691161415612a6b5760405162461bcd60e51b815260206004820152602760248201527f4b726f6e6f733a2043616e6e6f7420626c61636b6c69737420726f75746572206044820152666164647265737360c81b6064820152608401610ce5565b600f5460ff1615612ae75761a8c060105482612a87919061458e565b10612ae75760405162461bcd60e51b815260206004820152602a60248201527f4b726f6e6f733a2054696d6520746f20626c6f636b206163636f756e74732068604482015269185cc8195e1c1a5c995960b21b6064820152608401610ce5565b6001600160a01b0382166000818152600a6020526040808220805460ff1916600190811790915590519092917f22dfccad3b8536e5d2741216ca2aa1324ca91414ac6daeb7ed374d950199729891a35050565b6000546001600160a01b03163314612b645760405162461bcd60e51b8152600401610ce590614261565b601354811415612bce5760405162461bcd60e51b815260206004820152602f60248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d61785478416d6f756e60448201526e7420746f2073616d652076616c756560881b6064820152608401610ce5565b6103e8612bdd6012600a614481565b612beb906305f5e100614490565b612bf591906144af565b811015612c6a5760405162461bcd60e51b815260206004820152603d60248201527f4b726f6e6f733a2043616e6e6f7420757064617465206d61785478416d6f756e60448201527f7420746f206c657373207468616e20302e3125206f6620737570706c790000006064820152608401610ce5565b60125460405182907fe3052f2f134f247948088ca6829f4168989b7313f1b54de88cc18178a249de4b90600090a3601355565b6000546001600160a01b03163314612cc75760405162461bcd60e51b8152600401610ce590614261565b6000818385612cd6888a6142e7565b612ce091906142e7565b612cea91906142e7565b612cf491906142e7565b90506014811115612d175760405162461bcd60e51b8152600401610ce5906142ff565b6040805160a08101825287815260208082018890528183018790526060820186905260809091018490528790556021869055602285905560238490556024839055516314d95b1b60e21b8152600401610edc565b6000546001600160a01b03163314612d955760405162461bcd60e51b8152600401610ce590614261565b6001600160a01b038116612dfa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ce5565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080612e6283856142e7565b905083811015612eb45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ce5565b9392505050565b6001600160a01b038316612f1d5760405162461bcd60e51b8152602060048201526024808201527f43524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce5565b6001600160a01b038216612f7e5760405162461bcd60e51b815260206004820152602260248201527f43524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce5565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166130065760405162461bcd60e51b8152600401610ce5906145a5565b6001600160a01b03821661302c5760405162461bcd60e51b8152600401610ce5906145ea565b8061303d57611d9383836000613ab7565b6001600160a01b038084166000818152600b6020908152604080832054948716835280832054938352600690915290205460ff92831692918216911615801561309f57506001600160a01b03841660009081526006602052604090205460ff16155b1561338657600d54600160a01b900460ff1661310c5760405162461bcd60e51b815260206004820152602660248201527f4b726f6e6f733a2054726164696e672069732063757272656e746c792064697360448201526530b13632b21760d11b6064820152608401610ce5565b6001600160a01b0384166000908152600a602052604090205460ff16156131755760405162461bcd60e51b815260206004820152601a60248201527f4b726f6e6f733a204163636f756e7420697320626c6f636b65640000000000006044820152606401610ce5565b6001600160a01b0385166000908152600a602052604090205460ff16156131de5760405162461bcd60e51b815260206004820152601a60248201527f4b726f6e6f733a204163636f756e7420697320626c6f636b65640000000000006044820152606401610ce5565b6001600160a01b03841660009081526008602052604090205460ff1661329f5760125483613221866001600160a01b031660009081526001602052604090205490565b61322b91906142e7565b111561329f5760405162461bcd60e51b815260206004820152603b60248201527f4b726f6e6f733a2045787065637465642077616c6c657420616d6f756e74206560448201527f78636565647320746865206d617857616c6c6574416d6f756e742e00000000006064820152608401610ce5565b6001600160a01b0385166000908152600b602052604090205460ff16806132de57506001600160a01b0384166000908152600b602052604090205460ff165b15613386576001600160a01b03851660009081526009602052604090205460ff16158061332457506001600160a01b03841660009081526009602052604090205460ff16155b15613386576013548311156133865760405162461bcd60e51b815260206004820152602260248201527f4b726f6e6f733a20416d6f756e742065786365656473206d61785478416d6f756044820152611b9d60f21b6064820152608401610ce5565b6133908282613bc3565b60155430600090815260016020526040902054600d5491111590600160a01b900460ff1680156133bd5750805b80156133cc575060145460ff16155b80156133da57506000602f54115b80156133fe57506001600160a01b0385166000908152600b602052604090205460ff165b801561341857506018546001600160a01b03878116911614155b801561343257506018546001600160a01b03868116911614155b801561344c57506019546001600160a01b03878116911614155b801561346657506019546001600160a01b03868116911614155b80156134795750601454610100900460ff165b1561349e576014805460ff19166001179055613493613778565b6014805460ff191690555b60145460009060ff161580156134bd5750600d54600160a01b900460ff165b6001600160a01b03881660009081526007602052604090205490915060ff16806134ff57506001600160a01b03861660009081526007602052604090205460ff165b15613508575060005b80156135455760006064602f54876135209190614490565b61352a91906144af565b9050613536818761458e565b9550613543883083613ab7565b505b613550878787613ab7565b600c546001600160a01b031663e30443bc88613581816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156135c757600080fd5b505af19250505080156135d8575060015b50600c546001600160a01b031663e30443bc8761360a816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561365057600080fd5b505af1925050508015613661575060015b5060145460ff1661373557601654600c546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af19250505080156136d9575060408051601f3d908101601f191682019092526136d69181019061462d565b60015b6136e257613733565b60408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b50505050505050565b600081848411156137625760405162461bcd60e51b8152600401610ce5919061403c565b50600061376f848661458e565b95945050505050565b600d543060009081526002602090815260408083206001600160a01b0390941683529290522054600019146137c157600d546137c19030906001600160a01b0316600019612ebb565b30600090815260016020526040812054602f54602a549192479260029083906137ea9087614490565b6137f491906144af565b6137fe91906144af565b9050600061380c828661458e565b905061381781613cea565b6000613823854761458e565b905060006002602a5461383691906144af565b602f54613843919061458e565b90506000600282602a54856138589190614490565b61386291906144af565b61386c91906144af565b9050600082602b548561387f9190614490565b61388991906144af565b9050600083602c548661389c9190614490565b6138a691906144af565b9050600084602e54876138b99190614490565b6138c391906144af565b9050600081836138d386886142e7565b6138dd91906142e7565b6138e791906142e7565b6138f1908861458e565b90508315613935576018546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015613933573d6000803e3d6000fd5b505b8215613977576019546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015613975573d6000803e3d6000fd5b505b88156139c9576139878986613e44565b60408051898152602081018790529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8115613a0c576139d882613ef1565b6040518281527f18dc4e882f216aaedbdea3c2afca1d207744d2f22cad841aba3c8c6314bd38f79060200160405180910390a15b8015613aa457600c546040516000916001600160a01b03169083908381818185875af1925050503d8060008114613a5f576040519150601f19603f3d011682016040523d82523d6000602084013e613a64565b606091505b505090508015613aa2576040518281527fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9699060200160405180910390a15b505b505050602f969096555050505050505050565b6001600160a01b038316613add5760405162461bcd60e51b8152600401610ce5906145a5565b6001600160a01b038216613b035760405162461bcd60e51b8152600401610ce5906145ea565b613b4081604051806060016040528060268152602001614727602691396001600160a01b038616600090815260016020526040902054919061373e565b6001600160a01b038085166000908152600160205260408082209390935590841681522054613b6f9082612e55565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612fd39085815260200190565b6000602a819055602b819055602c819055602d819055602e558115613c0557601b54602a55601c54602b55601d54602c55601e54602d55601f54602e55613c4d565b8015613c2e57602054602a55602154602b55602254602c55602354602d55602454602e55613c4d565b602554602a55602654602b55602754602c55602854602d55602954602e555b602e54602d54602c54602b54602a54613c6691906142e7565b613c7091906142e7565b613c7a91906142e7565b613c8491906142e7565b602f819055602a54602b54602c54602d54602e54604080519586526020860194909452928401919091526060830152608082015260a08101919091527f24b7b85246369f5fb87526971064f357b39a0f399bca1c50e11af8c3c8f4bbd69060c001611453565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d1f57613d1f61465b565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9c9190614507565b81600181518110613daf57613daf61465b565b6001600160a01b039283166020918202929092010152600d54613dd59130911684612ebb565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613e0e9085906000908690309042906004016146b5565b600060405180830381600087803b158015613e2857600080fd5b505af1158015613e3c573d6000803e3d6000fd5b505050505050565b600d54613e5c9030906001600160a01b031684612ebb565b600d5460195460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613ecc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117c3919061462d565b6040805160028082526060820183526000926020830190803683375050600d54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7f9190614507565b81600081518110613f9257613f9261465b565b6001600160a01b039283166020918202929092010152601754825191169082906001908110613fc357613fc361465b565b6001600160a01b039283166020918202929092010152600d54601a5460405163b6f9de9560e01b81529183169263b6f9de9592869261400f9260009288929091169042906004016146f1565b6000604051808303818588803b15801561402857600080fd5b505af1158015613735573d6000803e3d6000fd5b600060208083528351808285015260005b818110156140695785810183015185820160400152820161404d565b8181111561407b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146115c757600080fd5b600080604083850312156140b957600080fd5b82356140c481614091565b946020939093013593505050565b6000602082840312156140e457600080fd5b8135612eb481614091565b600080600080600060a0868803121561410757600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060006060848603121561413f57600080fd5b833561414a81614091565b9250602084013561415a81614091565b929592945050506040919091013590565b80151581146115c757600080fd5b6000806040838503121561418c57600080fd5b823561419781614091565b915060208301356141a78161416b565b809150509250929050565b6000602082840312156141c457600080fd5b5035919050565b6000602082840312156141dd57600080fd5b8135612eb48161416b565b6000806000606084860312156141fd57600080fd5b833561420881614091565b9250602084013561421881614091565b9150604084013561422881614091565b809150509250925092565b6000806040838503121561424657600080fd5b823561425181614091565b915060208301356141a781614091565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806142aa57607f821691505b602082108114156142cb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156142fa576142fa6142d1565b500190565b6020808252602c908201527f4b726f6e6f733a2043616e6e6f742075706461746520746178657320746f206d60408201526b6f7265207468616e2032302560a01b606082015260800190565b60208082526032908201527f4b726f6e6f733a204163636f756e7420697320616c7265616479207468652076604082015271616c7565206f6620276578636c756465642760701b606082015260800190565b600181815b808511156143d85781600019048211156143be576143be6142d1565b808516156143cb57918102915b93841c93908002906143a2565b509250929050565b6000826143ef57506001610dca565b816143fc57506000610dca565b8160018114614412576002811461441c57614438565b6001915050610dca565b60ff84111561442d5761442d6142d1565b50506001821b610dca565b5060208310610133831016604e8410600b841016171561445b575081810a610dca565b614465838361439d565b8060001904821115614479576144796142d1565b029392505050565b6000612eb460ff8416836143e0565b60008160001904831182151516156144aa576144aa6142d1565b500290565b6000826144cc57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156144e357600080fd5b5051919050565b6000602082840312156144fc57600080fd5b8151612eb48161416b565b60006020828403121561451957600080fd5b8151612eb481614091565b600080600080600080600080610100898b03121561454157600080fd5b885161454c81614091565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b6000828210156145a0576145a06142d1565b500390565b60208082526025908201527f43524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f43524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008060006060848603121561464257600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156146aa5781516001600160a01b031687529582019590820190600101614685565b509495945050505050565b85815284602082015260a0604082015260006146d460a0830186614671565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600061470a6080830186614671565b6001600160a01b0394909416604083015250606001529291505056fe43524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636543524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f43524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c6286ff8df4e21e7c34925ed322c5b634811972ad73a99be433c4604272a0da664736f6c634300080c0033
Deployed ByteCode Sourcemap
22925:23104:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29297:214;;;;;;;;;;;;;:::i;:::-;;23662:28;;;;;;;;;;-1:-1:-1;23662:28:0;;;;-1:-1:-1;;;23662:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;23662:28:0;;;;;;;;14828:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15652:154::-;;;;;;;;;;-1:-1:-1;15652:154:0;;;;;:::i;:::-;;:::i;29516:79::-;;;;;;;;;;;;;:::i;24232:73::-;;;;;;;;;;-1:-1:-1;24232:73:0;;;;-1:-1:-1;;;;;24232:73:0;;;;;;-1:-1:-1;;;;;1428:32:1;;;1410:51;;1398:2;1383:18;24232:73:0;1264:203:1;15113:99:0;;;;;;;;;;-1:-1:-1;15195:12:0;;15113:99;;;1618:25:1;;;1606:2;1591:18;15113:99:0;1472:177:1;23216:47:0;;;;;;;;;;-1:-1:-1;23216:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25026:36;;;;;;;;;;-1:-1:-1;25026:36:0;;;;;;;;;;;;;;;;;;;;;;2165:25:1;;;2221:2;2206:18;;2199:34;;;;2249:18;;;2242:34;;;;2307:2;2292:18;;2285:34;2350:3;2335:19;;2328:35;2152:3;2137:19;25026:36:0;1906:463:1;37562:489:0;;;;;;;;;;-1:-1:-1;37562:489:0;;;;;:::i;:::-;;:::i;15811:313::-;;;;;;;;;;-1:-1:-1;15811:313:0;;;;;:::i;:::-;;:::i;32258:302::-;;;;;;;;;;-1:-1:-1;32258:302:0;;;;;:::i;:::-;;:::i;34989:375::-;;;;;;;;;;-1:-1:-1;34989:375:0;;;;;:::i;:::-;;:::i;23319:44::-;;;;;;;;;;-1:-1:-1;23319:44:0;;;;-1:-1:-1;;;;;23319:44:0;;;38623:132;;;;;;;;;;;;;:::i;29201:91::-;;;;;;;;;;-1:-1:-1;29201:91:0;;23579:2;4377:36:1;;4365:2;4350:18;29201:91:0;4235:184:1;31419:174:0;;;;;;;;;;-1:-1:-1;31419:174:0;;;;;:::i;:::-;;:::i;29600:128::-;;;;;;;;;;;;;:::i;23412:38::-;;;;;;;;;;;;;;;16129:203;;;;;;;;;;-1:-1:-1;16129:203:0;;;;;:::i;:::-;;:::i;38383:222::-;;;;;;;;;;;;;:::i;34291:427::-;;;;;;;;;;-1:-1:-1;34291:427:0;;;;;:::i;:::-;;:::i;24078:33::-;;;;;;;;;;-1:-1:-1;24078:33:0;;;;;;;;;;;24743:150;;;;;;;;;;-1:-1:-1;24743:150:0;;;;;;;;;;;;;;;;;;38284:94;;;;;;;;;;;;;:::i;45949:77::-;;;;;;;;;;;;;:::i;34723:261::-;;;;;;;;;;-1:-1:-1;34723:261:0;;;;;:::i;:::-;;:::i;24415:88::-;;;;;;;;;;-1:-1:-1;24415:88:0;;;;-1:-1:-1;;;;;24415:88:0;;;36037:144;;;;;;;;;;-1:-1:-1;36037:144:0;;;;;:::i;:::-;;:::i;23805:33::-;;;;;;;;;;;;;;;;39274:132;;;;;;;;;;;;;:::i;38909:::-;;;;;;;;;;-1:-1:-1;38909:132:0;;;;;:::i;:::-;;:::i;38063:216::-;;;;;;;;;;-1:-1:-1;38063:216:0;;;;;:::i;:::-;;:::i;33157:220::-;;;;;;;;;;-1:-1:-1;33157:220:0;;;;;:::i;:::-;;:::i;15217:118::-;;;;;;;;;;-1:-1:-1;15217:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;15312:18:0;15291:7;15312:18;;;:9;:18;;;;;;;15217:118;14062:133;;;;;;;;;;;;;:::i;24510:94::-;;;;;;;;;;-1:-1:-1;24510:94:0;;;;-1:-1:-1;;;;;24510:94:0;;;33382:904;;;;;;;;;;-1:-1:-1;33382:904:0;;;;;:::i;:::-;;:::i;24318:93::-;;;;;;;;;;-1:-1:-1;24318:93:0;;;;-1:-1:-1;;;;;24318:93:0;;;31935:318;;;;;;;;;;-1:-1:-1;31935:318:0;;;;;:::i;:::-;;:::i;23367:41::-;;;;;;;;;;-1:-1:-1;23367:41:0;;;;-1:-1:-1;;;;;23367:41:0;;;29733:843;;;;;;;;;;-1:-1:-1;29733:843:0;;;;;:::i;:::-;;:::i;23949:52::-;;;;;;;;;;;;;;;;13878:70;;;;;;;;;;-1:-1:-1;13916:7:0;13937:6;-1:-1:-1;;;;;13937:6:0;13878:70;;31775:155;;;;;;;;;;;;;:::i;14924:95::-;;;;;;;;;;;;;:::i;24186:40::-;;;;;;;;;;;;;;;;36587:474;;;;;;;;;;-1:-1:-1;36587:474:0;;;;;:::i;:::-;;:::i;16337:254::-;;;;;;;;;;-1:-1:-1;16337:254:0;;;;;:::i;:::-;;:::i;24899:120::-;;;;;;;;;;-1:-1:-1;24899:120:0;;;;;;;;;;;;;;;;;;38760:144;;;;;;;;;;-1:-1:-1;38760:144:0;;;;;:::i;:::-;;:::i;15340:160::-;;;;;;;;;;-1:-1:-1;15340:160:0;;;;;:::i;:::-;;:::i;23848:57::-;;;;;;;;;;;;;;;;23765:36;;;;;;;;;;;;;;;;39046:223;;;;;;;;;;-1:-1:-1;39046:223:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;6043:32:1;;;6025:51;;6107:2;6092:18;;6085:34;;;;6135:18;;;6128:34;;;;6193:2;6178:18;;6171:34;;;;6236:3;6221:19;;6214:35;6063:3;6265:19;;6258:35;6324:3;6309:19;;6302:35;6368:3;6353:19;;6346:35;6012:3;5997:19;39046:223:0;5686:701:1;35728:304:0;;;;;;;;;;-1:-1:-1;35728:304:0;;;;;:::i;:::-;;:::i;23267:46::-;;;;;;;;;;-1:-1:-1;23267:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36186:393;;;;;;;;;;-1:-1:-1;36186:393:0;;;;;:::i;:::-;;:::i;31133:281::-;;;;;;;;;;-1:-1:-1;31133:281:0;;;;;:::i;:::-;;:::i;31598:172::-;;;;;;;;;;-1:-1:-1;31598:172:0;;;;;:::i;:::-;;:::i;24115:66::-;;;;;;;;;;;;;;;;30926:202;;;;;;;;;;-1:-1:-1;30926:202:0;;;;;:::i;:::-;;:::i;32568:584::-;;;;;;;;;;-1:-1:-1;32568:584:0;;;;;:::i;:::-;;:::i;15505:142::-;;;;;;;;;;-1:-1:-1;15505:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;15615:18:0;;;15594:7;15615:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15505:142;35369:351;;;;;;;;;;-1:-1:-1;35369:351:0;;;;;:::i;:::-;;:::i;37069:485::-;;;;;;;;;;-1:-1:-1;37069:485:0;;;;;:::i;:::-;;:::i;14200:223::-;;;;;;;;;;-1:-1:-1;14200:223:0;;;;;:::i;:::-;;:::i;29297:214::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;;;;;;;;;29363:15:::1;29339:21;:39:::0;29404:12:::1;29383:18;:33:::0;29421:16:::1;:23:::0;;-1:-1:-1;;;;29421:23:0::1;-1:-1:-1::0;;;29421:23:0::1;::::0;;29449:11:::1;:18:::0;;-1:-1:-1;;29449:18:0::1;29440:4;29449:18;::::0;;29421:16:::1;29478:28:::0;;-1:-1:-1;;29478:28:0::1;29421:23;29478:28;::::0;;29297:214::o;14828:91::-;14882:13;14909:5;14902:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14828:91;:::o;15652:154::-;15735:4;15746:39;383:10;15769:7;15778:6;15746:8;:39::i;:::-;-1:-1:-1;15797:4:0;15652:154;;;;;:::o;29516:79::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;29567:16:::1;:23:::0;;-1:-1:-1;;;;29567:23:0::1;-1:-1:-1::0;;;29567:23:0::1;::::0;;29516:79::o;37562:489::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;37710:16:::1;37774:11:::0;37763:8;37755:5;37729:23:::1;37742:10:::0;37729;:23:::1;:::i;:::-;:31;;;;:::i;:::-;:42;;;;:::i;:::-;:56;;;;:::i;:::-;37710:75;;37816:2;37804:8;:14;;37796:71;;;;-1:-1:-1::0;;;37796:71:0::1;;;;;;;:::i;:::-;37893:59;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;37878:12:::1;:74:::0;;;;;;;;;;;;;;;;;;;37968:75;-1:-1:-1;;;8411:23:1;;8459:1;8450:11;37968:75:0::1;;::::0;;;;;::::1;::::0;;2165:25:1;;;2221:2;2206:18;;2199:34;;;2249:18;;;2242:34;;;2307:2;2292:18;;2285:34;;;2350:3;2335:19;;2328:35;;;37968:75:0;::::1;::::0;2152:3:1;2137:19;37968:75:0::1;;;;;;;37699:352;37562:489:::0;;;;;:::o;15811:313::-;15930:4;15941:36;15951:6;15959:9;15970:6;15941:9;:36::i;:::-;15982:121;15991:6;383:10;16013:89;16051:6;16013:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16013:19:0;;;;;;:11;:19;;;;;;;;383:10;16013:33;;;;;;;;;;:37;:89::i;:::-;15982:8;:121::i;:::-;-1:-1:-1;16115:4:0;15811:313;;;;;:::o;32258:302::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32353:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;::::1;;:46;;::::0;::::1;;;;32345:109;;;;-1:-1:-1::0;;;32345:109:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32459:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;;;;:45;;-1:-1:-1;;32459:45:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32514:41;;154::1;;;32514::0::1;::::0;127:18:1;32514:41:0::1;;;;;;;;32258:302:::0;;:::o;34989:375::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;35079:15:::1;;35067:8;:27;;35059:91;;;::::0;-1:-1:-1;;;35059:91:0;;9093:2:1;35059:91:0::1;::::0;::::1;9075:21:1::0;9132:2;9112:18;;;9105:30;9171:34;9151:18;;;9144:62;-1:-1:-1;;;9222:18:1;;;9215:49;9281:19;;35059:91:0::1;8891:415:1::0;35059:91:0::1;35196:4;23640:13;23579:2;23640;:13;:::i;:::-;23625:29;::::0;:11:::1;:29;:::i;:::-;35181:19;;;;:::i;:::-;35169:8;:31;;35161:109;;;::::0;-1:-1:-1;;;35161:109:0;;11291:2:1;35161:109:0::1;::::0;::::1;11273:21:1::0;11330:2;11310:18;;;11303:30;11369:34;11349:18;;;11342:62;11440:34;11420:18;;;11413:62;-1:-1:-1;;;11491:19:1;;;11484:32;11533:19;;35161:109:0::1;11089:469:1::0;35161:109:0::1;35312:15;::::0;35280:48:::1;::::0;35302:8;;35280:48:::1;::::0;;;::::1;35333:15;:26:::0;34989:375::o;38623:132::-;38707:15;;:43;;;-1:-1:-1;;;38707:43:0;;;;38686:7;;-1:-1:-1;;;;;38707:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38700:50;;38623:132;:::o;31419:174::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;31490:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;31490:45:0;;-1:-1:-1;;;;;1428:32:1;;;31490:45:0::1;::::0;::::1;1410:51:1::0;31490:15:0;;::::1;::::0;:36:::1;::::0;1383:18:1;;31490:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31545:41:0::1;::::0;31581:4:::1;154:41:1::0;;-1:-1:-1;;;;;31545:41:0;::::1;::::0;-1:-1:-1;31545:41:0::1;::::0;-1:-1:-1;142:2:1;127:18;31545:41:0::1;;;;;;;;31419:174:::0;:::o;29600:128::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;29653:16:::1;:24:::0;;-1:-1:-1;;;;29653:24:0::1;::::0;;29708:15:::1;29682:23;:41:::0;29600:128::o;16129:203::-;383:10;16217:4;16260:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16260:34:0;;;;;;;;;;16217:4;;16228:83;;16251:7;;16260:50;;16299:10;16260:38;:50::i;38383:222::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;38458:21:::1;38441:14;38510:7;13916::::0;13937:6;-1:-1:-1;;;;;13937:6:0;;13878:70;38510:7:::1;-1:-1:-1::0;;;;;38502:21:0::1;38532:6;38502:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38484:59;;;38552:7;38548:53;;;38571:24;::::0;1618:25:1;;;38571:24:0::1;::::0;1606:2:1;1591:18;38571:24:0::1;;;;;;;;38548:53;38430:175;;38383:222::o:0;34291:427::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;34391:15:::1;::::0;-1:-1:-1;;;;;34369:38:0;;::::1;34391:15:::0;::::1;34369:38;;34361:94;;;::::0;-1:-1:-1;;;34361:94:0;;12164:2:1;34361:94:0::1;::::0;::::1;12146:21:1::0;12203:2;12183:18;;;12176:30;12242:34;12222:18;;;12215:62;-1:-1:-1;;;12293:18:1;;;12286:41;12344:19;;34361:94:0::1;11962:407:1::0;34361:94:0::1;34507:15;::::0;34465:59:::1;::::0;-1:-1:-1;;;;;34507:15:0;;::::1;::::0;34465:59;::::1;::::0;::::1;::::0;34507:15:::1;::::0;34465:59:::1;34529:15;:48:::0;;-1:-1:-1;;;;;;34529:48:0::1;-1:-1:-1::0;;;;;34529:48:0;;::::1;::::0;;::::1;::::0;;;34582:15:::1;::::0;:44:::1;::::0;-1:-1:-1;;;34582:44:0;;::::1;::::0;::::1;1410:51:1::0;;;;34582:15:0;;::::1;::::0;:32:::1;::::0;1383:18:1;;34582:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;34669:15:0::1;::::0;34637:68:::1;::::0;-1:-1:-1;34654:4:0::1;::::0;-1:-1:-1;;;;;;34669:15:0::1;-1:-1:-1::0;;34637:8:0::1;:68::i;:::-;34291:427:::0;:::o;38284:94::-;38315:15;;:58;;-1:-1:-1;;;38315:58:0;;38354:10;38315:58;;;12558:51:1;38315:15:0;12625:18:1;;;12618:50;-1:-1:-1;;;;;38315:15:0;;;;:30;;12531:18:1;;38315:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45949:77::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;46001:17:::1;:15;:17::i;:::-;45949:77::o:0;34723:261::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;34814:16:::1;;34802:8;:28;;34794:93;;;::::0;-1:-1:-1;;;34794:93:0;;13131:2:1;34794:93:0::1;::::0;::::1;13113:21:1::0;13170:2;13150:18;;;13143:30;13209:34;13189:18;;;13182:62;-1:-1:-1;;;13260:18:1;;;13253:50;13320:19;;34794:93:0::1;12929:416:1::0;34794:93:0::1;34930:16;::::0;34897:50:::1;::::0;34920:8;;34897:50:::1;::::0;;;::::1;34952:16;:27:::0;34723:261::o;36037:144::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;36123:15:::1;::::0;:53:::1;::::0;-1:-1:-1;;;36123:53:0;;::::1;::::0;::::1;1618:25:1::0;;;-1:-1:-1;;;;;36123:15:0;;::::1;::::0;:43:::1;::::0;1591:18:1;;36123:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36037:144:::0;:::o;39274:132::-;39360:15;;:41;;;-1:-1:-1;;;39360:41:0;;;;39339:7;;-1:-1:-1;;;;;39360:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;38909:132;39002:15;;:34;;-1:-1:-1;;;39002:34:0;;-1:-1:-1;;;;;1428:32:1;;;39002:34:0;;;1410:51:1;38981:7:0;;39002:15;;:25;;1383:18:1;;39002:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38063:216::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;38144:21:::1;::::0;::::1;;::::0;;::::1;;:31;;::::0;::::1;;;;38136:94;;;::::0;-1:-1:-1;;;38136:94:0;;13552:2:1;38136:94:0::1;::::0;::::1;13534:21:1::0;13591:2;13571:18;;;13564:30;13630:34;13610:18;;;13603:62;-1:-1:-1;;;13681:18:1;;;13674:48;13739:19;;38136:94:0::1;13350:414:1::0;38136:94:0::1;38241:21;:30:::0;;;::::1;;;;-1:-1:-1::0;;38241:30:0;;::::1;::::0;;;::::1;::::0;;38063:216::o;33157:220::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33234:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;::::1;;33226:66;;;::::0;-1:-1:-1;;;33226:66:0;;13971:2:1;33226:66:0::1;::::0;::::1;13953:21:1::0;14010:2;13990:18;;;13983:30;14049:32;14029:18;;;14022:60;14099:18;;33226:66:0::1;13769:354:1::0;33226:66:0::1;-1:-1:-1::0;;;;;33297:23:0;::::1;33323:5;33297:23:::0;;;:14:::1;:23;::::0;;;;;:31;;-1:-1:-1;;33297:31:0::1;::::0;;33338:34;33323:5;;33297:23;33338:34:::1;::::0;33323:5;;33338:34:::1;33157:220:::0;:::o;14062:133::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;14163:1:::1;14147:6:::0;;14126:40:::1;::::0;-1:-1:-1;;;;;14147:6:0;;::::1;::::0;14126:40:::1;::::0;14163:1;;14126:40:::1;14188:1;14171:19:::0;;-1:-1:-1;;;;;;14171:19:0::1;::::0;;14062:133::o;33382:904::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;33534:15:::1;::::0;-1:-1:-1;;;;;33534:37:0;;::::1;:15:::0;::::1;:37;33531:259;;-1:-1:-1::0;;;;;33587:32:0;::::1;33579:84;;;::::0;-1:-1:-1;;;33579:84:0;;14330:2:1;33579:84:0::1;::::0;::::1;14312:21:1::0;14369:2;14349:18;;;14342:30;14408:34;14388:18;;;14381:62;-1:-1:-1;;;14459:18:1;;;14452:37;14506:19;;33579:84:0::1;14128:403:1::0;33579:84:0::1;33726:15;::::0;33674:68:::1;::::0;-1:-1:-1;;;14738:30:1;;-1:-1:-1;;;;;33726:15:0;;::::1;::::0;33674:68;::::1;::::0;14793:2:1;14784:12;33674:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;33748:15;:36:::0;;-1:-1:-1;;;;;;33748:36:0::1;-1:-1:-1::0;;;;;33748:36:0;::::1;;::::0;;33531:259:::1;33797:10;::::0;-1:-1:-1;;;;;33797:27:0;;::::1;:10:::0;::::1;:27;33794:214;;-1:-1:-1::0;;;;;33840:27:0;::::1;33832:74;;;::::0;-1:-1:-1;;;33832:74:0;;15009:2:1;33832:74:0::1;::::0;::::1;14991:21:1::0;15048:2;15028:18;;;15021:30;15087:34;15067:18;;;15060:62;-1:-1:-1;;;15138:18:1;;;15131:32;15180:19;;33832:74:0::1;14807:398:1::0;33832:74:0::1;33959:10;::::0;33917:53:::1;::::0;-1:-1:-1;;;15412:25:1;;-1:-1:-1;;;;;33959:10:0;;::::1;::::0;33917:53;::::1;::::0;15462:2:1;15453:12;33917:53:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;33976:10;:26:::0;;-1:-1:-1;;;;;;33976:26:0::1;-1:-1:-1::0;;;;;33976:26:0;::::1;;::::0;;33794:214:::1;34015:16;::::0;-1:-1:-1;;;;;34015:39:0;;::::1;:16:::0;::::1;:39;34012:262;;-1:-1:-1::0;;;;;34070:27:0;::::1;34062:80;;;::::0;-1:-1:-1;;;34062:80:0;;15678:2:1;34062:80:0::1;::::0;::::1;15660:21:1::0;15717:2;15697:18;;;15690:30;15756:34;15736:18;;;15729:62;-1:-1:-1;;;15807:18:1;;;15800:38;15855:19;;34062:80:0::1;15476:404:1::0;34062:80:0::1;34207:16;::::0;34153:71:::1;::::0;-1:-1:-1;;;16087:31:1;;-1:-1:-1;;;;;34207:16:0;;::::1;::::0;34153:71;::::1;::::0;16143:2:1;16134:12;34153:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;34230:16;:38:::0;;-1:-1:-1;;;;;;34230:38:0::1;-1:-1:-1::0;;;;;34230:38:0;::::1;;::::0;;34012:262:::1;33382:904:::0;;;:::o;31935:318::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32034:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;::::1;;:50;;::::0;::::1;;;;32026:113;;;;-1:-1:-1::0;;;32026:113:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32144:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;32144:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32203:45;;154:41:1;;;32203:45:0::1;::::0;127:18:1;32203:45:0::1;14:187:1::0;29733:843:0;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;29838:15:::1;::::0;-1:-1:-1;;;;;29816:38:0;;::::1;29838:15:::0;::::1;29816:38;;29808:104;;;::::0;-1:-1:-1;;;29808:104:0;;16359:2:1;29808:104:0::1;::::0;::::1;16341:21:1::0;16398:2;16378:18;;;16371:30;16437:34;16417:18;;;16410:62;-1:-1:-1;;;16488:18:1;;;16481:51;16549:19;;29808:104:0::1;16157:417:1::0;29808:104:0::1;29917:40;29990:10;29917:85;;30053:4;-1:-1:-1::0;;;;;30015:43:0::1;:18;-1:-1:-1::0;;;;;30015:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30015:43:0::1;;30007:131;;;::::0;-1:-1:-1;;;30007:131:0;;17037:2:1;30007:131:0::1;::::0;::::1;17019:21:1::0;17076:2;17056:18;;;17049:30;17115:34;17095:18;;;17088:62;17186:34;17166:18;;;17159:62;-1:-1:-1;;;17237:19:1;;;17230:42;17289:19;;30007:131:0::1;16835:479:1::0;30007:131:0::1;30143:68;::::0;-1:-1:-1;;;30143:68:0;;-1:-1:-1;;;;;30143:39:0;::::1;:68;::::0;::::1;1410:51:1::0;;;30143:39:0;::::1;::::0;1383:18:1;;30143:68:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30216:54:0::1;::::0;-1:-1:-1;;;30216:54:0;;30264:4:::1;30216:54;::::0;::::1;1410:51:1::0;-1:-1:-1;;;;;30216:39:0;::::1;::::0;-1:-1:-1;30216:39:0::1;::::0;-1:-1:-1;1383:18:1;;30216:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30275:18;-1:-1:-1::0;;;;;30275:39:0::1;;30315:7;13916::::0;13937:6;-1:-1:-1;;;;;13937:6:0;;13878:70;30315:7:::1;30275:48;::::0;-1:-1:-1;;;;;;30275:48:0::1;::::0;;;;;;-1:-1:-1;;;;;1428:32:1;;;30275:48:0::1;::::0;::::1;1410:51:1::0;1383:18;;30275:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30376:15:0::1;::::0;30328:65:::1;::::0;-1:-1:-1;;;30328:65:0;;-1:-1:-1;;;;;30376:15:0;;::::1;30328:65;::::0;::::1;1410:51:1::0;30328:39:0;;::::1;::::0;-1:-1:-1;30328:39:0::1;::::0;-1:-1:-1;1383:18:1;;30328:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30398:63:0::1;::::0;-1:-1:-1;;;30398:63:0;;-1:-1:-1;;;;;30446:13:0::1;1428:32:1::0;;30398:63:0::1;::::0;::::1;1410:51:1::0;30398:39:0;::::1;::::0;-1:-1:-1;30398:39:0::1;::::0;-1:-1:-1;1383:18:1;;30398:63:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30513:15:0::1;::::0;30471:59:::1;::::0;-1:-1:-1;;;;;30513:15:0;;::::1;::::0;-1:-1:-1;30471:59:0;;::::1;::::0;-1:-1:-1;30471:59:0::1;::::0;30513:15:::1;::::0;30471:59:::1;30535:15;:36:::0;;-1:-1:-1;;;;;;30535:36:0::1;-1:-1:-1::0;;;;;30535:36:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;29733:843:0:o;31775:155::-;31821:15;;:46;;-1:-1:-1;;;31821:46:0;;31856:10;31821:46;;;1410:51:1;-1:-1:-1;;;;;31821:15:0;;;;:34;;1383:18:1;;31821:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31877:45:0;;31916:5;154:41:1;;31904:10:0;;-1:-1:-1;31877:45:0;;-1:-1:-1;142:2:1;127:18;31877:45:0;;;;;;;31775:155::o;14924:95::-;14980:13;15007:7;15000:14;;;;;:::i;36587:474::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;36730:16:::1;36794:11:::0;36783:8;36775:5;36749:23:::1;36762:10:::0;36749;:23:::1;:::i;:::-;:31;;;;:::i;:::-;:42;;;;:::i;:::-;:56;;;;:::i;:::-;36730:75;;36836:2;36824:8;:14;;36816:71;;;;-1:-1:-1::0;;;36816:71:0::1;;;;;;;:::i;:::-;36908:59;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;36898:7:::1;:69:::0;;;;;;;;;;;;;;;;;;;36983:70;-1:-1:-1;;;17521:18:1;;17564:1;17555:11;36983:70:0::1;17319:253:1::0;16337:254:0;16430:4;16441:129;383:10;16464:7;16473:96;16512:15;16473:96;;;;;;;;;;;;;;;;;383:10;16473:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16473:34:0;;;;;;;;;;;;:38;:96::i;38760:144::-;38852:15;;:47;;-1:-1:-1;;;38852:47:0;;-1:-1:-1;;;;;1428:32:1;;;38852:47:0;;;1410:51:1;38831:7:0;;38852:15;;:38;;1383:18:1;;38852:47:0;1264:203:1;15340:160:0;15426:4;15437:42;383:10;15461:9;15472:6;15437:9;:42::i;39046:223::-;39229:15;;:35;;-1:-1:-1;;;39229:35:0;;-1:-1:-1;;;;;1428:32:1;;;39229:35:0;;;1410:51:1;39126:7:0;;;;;;;;;;;;;;;;39229:15;;;:26;;1383:18:1;;39229:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39222:42;;;;;;;;;;;;;;;;39046:223;;;;;;;;;:::o;35728:304::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;35826:23:::1;;35814:8;:35;;35806:107;;;::::0;-1:-1:-1;;;35806:107:0;;18465:2:1;35806:107:0::1;::::0;::::1;18447:21:1::0;18504:2;18484:18;;;18477:30;18543:34;18523:18;;;18516:62;18614:29;18594:18;;;18587:57;18661:19;;35806:107:0::1;18263:423:1::0;35806:107:0::1;35964:23;::::0;35923:65:::1;::::0;35954:8;;35923:65:::1;::::0;;;::::1;35993:23;:34:::0;35728:304::o;36186:393::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36261:34:0;;::::1;;::::0;;;:18:::1;:34;::::0;;;;;;:41;;-1:-1:-1;;36261:41:0::1;36298:4;36261:41;::::0;;36307:15:::1;::::0;:52;;-1:-1:-1;;;36307:52:0;;::::1;::::0;::::1;1410:51:1::0;;;;36307:15:0;;::::1;::::0;:36:::1;::::0;1383:18:1;;36307:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;;36364:45:0;::::1;;::::0;;;:29:::1;:45;::::0;;;;;;;:52;;36412:4:::1;-1:-1:-1::0;;36364:52:0;;::::1;::::0;::::1;::::0;;;36421:29:::1;:45:::0;;;;;:52;;;::::1;::::0;::::1;::::0;;36478:25:::1;:41:::0;;;;;;:48;;;;::::1;;::::0;;;36536:38;::::1;::::0;36364:45;36536:38:::1;36186:393:::0;:::o;31133:281::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31222:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;:39;;::::0;::::1;;;;31214:102;;;;-1:-1:-1::0;;;31214:102:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31321:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;31321:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31369:40;;154:41:1;;;31369:40:0::1;::::0;127:18:1;31369:40:0::1;14:187:1::0;31598:172:0;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;31667:15:::1;::::0;:43:::1;::::0;-1:-1:-1;;;31667:43:0;;-1:-1:-1;;;;;1428:32:1;;;31667:43:0::1;::::0;::::1;1410:51:1::0;31667:15:0;;::::1;::::0;:34:::1;::::0;1383:18:1;;31667:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31720:42:0::1;::::0;31756:5:::1;154:41:1::0;;-1:-1:-1;;;;;31720:42:0;::::1;::::0;-1:-1:-1;31720:42:0::1;::::0;-1:-1:-1;142:2:1;127:18;31720:42:0::1;14:187:1::0;30926:202:0;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31015:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;31015:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31073:50;;154:41:1;;;31073:50:0::1;::::0;127:18:1;31073:50:0::1;14:187:1::0;32568:584:0;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32691:23:0;::::1;32635:24;32691:23:::0;;;:14:::1;:23;::::0;;;;;32662:15:::1;::::0;32691:23:::1;;32690:24;32682:71;;;::::0;-1:-1:-1;;;32682:71:0;;18893:2:1;32682:71:0::1;::::0;::::1;18875:21:1::0;18932:2;18912:18;;;18905:30;18971:34;18951:18;;;18944:62;-1:-1:-1;;;19022:18:1;;;19015:32;19064:19;;32682:71:0::1;18691:398:1::0;32682:71:0::1;-1:-1:-1::0;;;;;32767:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;;::::1;;32766:23;32758:65;;;::::0;-1:-1:-1;;;32758:65:0;;19296:2:1;32758:65:0::1;::::0;::::1;19278:21:1::0;19335:2;19315:18;;;19308:30;19374:31;19354:18;;;19347:59;19423:18;;32758:65:0::1;19094:353:1::0;32758:65:0::1;32855:15;::::0;-1:-1:-1;;;;;32836:35:0;;::::1;32855:15:::0;::::1;32836:35;;32828:87;;;::::0;-1:-1:-1;;;32828:87:0;;19654:2:1;32828:87:0::1;::::0;::::1;19636:21:1::0;19693:2;19673:18;;;19666:30;19732:34;19712:18;;;19705:62;-1:-1:-1;;;19783:18:1;;;19776:37;19830:19;;32828:87:0::1;19452:403:1::0;32828:87:0::1;32926:11;::::0;::::1;;32922:148;;;25115:5;32973:21;;32954:16;:40;;;;:::i;:::-;32953:64;32945:119;;;::::0;-1:-1:-1;;;32945:119:0;;20192:2:1;32945:119:0::1;::::0;::::1;20174:21:1::0;20231:2;20211:18;;;20204:30;20270:34;20250:18;;;20243:62;-1:-1:-1;;;20321:18:1;;;20314:40;20371:19;;32945:119:0::1;19990:406:1::0;32945:119:0::1;-1:-1:-1::0;;;;;33074:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;:30;;-1:-1:-1;;33074:30:0::1;33100:4;33074:30:::0;;::::1;::::0;;;33114:33;;33100:4;;33074:23;33114:33:::1;::::0;::::1;32630:522;32568:584:::0;:::o;35369:351::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;35455:11:::1;;35443:8;:23;;35435:83;;;::::0;-1:-1:-1;;;35435:83:0;;20603:2:1;35435:83:0::1;::::0;::::1;20585:21:1::0;20642:2;20622:18;;;20615:30;20681:34;20661:18;;;20654:62;-1:-1:-1;;;20732:18:1;;;20725:45;20787:19;;35435:83:0::1;20401:411:1::0;35435:83:0::1;35564:4;23640:13;23579:2;23640;:13;:::i;:::-;23625:29;::::0;:11:::1;:29;:::i;:::-;35549:19;;;;:::i;:::-;35537:8;:31;;35529:105;;;::::0;-1:-1:-1;;;35529:105:0;;21019:2:1;35529:105:0::1;::::0;::::1;21001:21:1::0;21058:2;21038:18;;;21031:30;21097:34;21077:18;;;21070:62;21168:31;21148:18;;;21141:59;21217:19;;35529:105:0::1;20817:425:1::0;35529:105:0::1;35672:15;::::0;35644:44:::1;::::0;35662:8;;35644:44:::1;::::0;;;::::1;35693:11;:22:::0;35369:351::o;37069:485::-;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;37213:16:::1;37277:11:::0;37266:8;37258:5;37232:23:::1;37245:10:::0;37232;:23:::1;:::i;:::-;:31;;;;:::i;:::-;:42;;;;:::i;:::-;:56;;;;:::i;:::-;37213:75;;37319:2;37307:8;:14;;37299:71;;;;-1:-1:-1::0;;;37299:71:0::1;;;;;;;:::i;:::-;37400:59;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;37389:70;;;;;;;;;;;;;;;;;;;37475:71;-1:-1:-1;;;21449:19:1;;21493:1;21484:11;37475:71:0::1;21247:254:1::0;14200:223:0;13987:6;;-1:-1:-1;;;;;13987:6:0;383:10;13987:22;13979:67;;;;-1:-1:-1;;;13979:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14283:22:0;::::1;14275:73;;;::::0;-1:-1:-1;;;14275:73:0;;21708:2:1;14275:73:0::1;::::0;::::1;21690:21:1::0;21747:2;21727:18;;;21720:30;21786:34;21766:18;;;21759:62;-1:-1:-1;;;21837:18:1;;;21830:36;21883:19;;14275:73:0::1;21506:402:1::0;14275:73:0::1;14379:6;::::0;;14358:38:::1;::::0;-1:-1:-1;;;;;14358:38:0;;::::1;::::0;14379:6;::::1;::::0;14358:38:::1;::::0;::::1;14401:6;:17:::0;;-1:-1:-1;;;;;;14401:17:0::1;-1:-1:-1::0;;;;;14401:17:0;;;::::1;::::0;;;::::1;::::0;;14200:223::o;9337:160::-;9395:7;;9421:5;9425:1;9421;:5;:::i;:::-;9409:17;;9444:1;9439;:6;;9431:46;;;;-1:-1:-1;;;9431:46:0;;22115:2:1;9431:46:0;;;22097:21:1;22154:2;22134:18;;;22127:30;22193:29;22173:18;;;22166:57;22240:18;;9431:46:0;21913:351:1;9431:46:0;9491:1;9337:160;-1:-1:-1;;;9337:160:0:o;17842:330::-;-1:-1:-1;;;;;17951:19:0;;17943:68;;;;-1:-1:-1;;;17943:68:0;;22471:2:1;17943:68:0;;;22453:21:1;22510:2;22490:18;;;22483:30;22549:34;22529:18;;;22522:62;-1:-1:-1;;;22600:18:1;;;22593:34;22644:19;;17943:68:0;22269:400:1;17943:68:0;-1:-1:-1;;;;;18024:21:0;;18016:68;;;;-1:-1:-1;;;18016:68:0;;22876:2:1;18016:68:0;;;22858:21:1;22915:2;22895:18;;;22888:30;22954:34;22934:18;;;22927:62;-1:-1:-1;;;23005:18:1;;;22998:32;23047:19;;18016:68:0;22674:398:1;18016:68:0;-1:-1:-1;;;;;18089:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18135:32;;1618:25:1;;;18135:32:0;;1591:18:1;18135:32:0;;;;;;;;17842:330;;;:::o;39421:2359::-;-1:-1:-1;;;;;39527:18:0;;39519:68;;;;-1:-1:-1;;;39519:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39600:16:0;;39592:64;;;;-1:-1:-1;;;39592:64:0;;;;;;;:::i;:::-;39666:11;39663:68;;39685:28;39701:4;39707:2;39711:1;39685:15;:28::i;39663:68::-;-1:-1:-1;;;;;39756:19:0;;;39737:16;39756:19;;;:13;:19;;;;;;;;;39798:17;;;;;;;;;39826:35;;;:29;:35;;;;;;39756:19;;;;;39798:17;;;;39826:35;39825:36;:74;;;;-1:-1:-1;;;;;;39866:33:0;;;;;;:29;:33;;;;;;;;39865:34;39825:74;39822:743;;;39915:16;;-1:-1:-1;;;39915:16:0;;;;39907:67;;;;-1:-1:-1;;;39907:67:0;;24089:2:1;39907:67:0;;;24071:21:1;24128:2;24108:18;;;24101:30;24167:34;24147:18;;;24140:62;-1:-1:-1;;;24218:18:1;;;24211:36;24264:19;;39907:67:0;23887:402:1;39907:67:0;-1:-1:-1;;;;;39989:18:0;;;;;;:14;:18;;;;;;;;39988:19;39980:58;;;;-1:-1:-1;;;39980:58:0;;24496:2:1;39980:58:0;;;24478:21:1;24535:2;24515:18;;;24508:30;24574:28;24554:18;;;24547:56;24620:18;;39980:58:0;24294:350:1;39980:58:0;-1:-1:-1;;;;;40053:20:0;;;;;;:14;:20;;;;;;;;40052:21;40044:60;;;;-1:-1:-1;;;40044:60:0;;24496:2:1;40044:60:0;;;24478:21:1;24535:2;24515:18;;;24508:30;24574:28;24554:18;;;24547:56;24620:18;;40044:60:0;24294:350:1;40044:60:0;-1:-1:-1;;;;;40117:33:0;;;;;;:29;:33;;;;;;;;40112:169;;40195:15;;40184:6;40168:13;40178:2;-1:-1:-1;;;;;15312:18:0;15291:7;15312:18;;;:9;:18;;;;;;;15217:118;40168:13;:22;;;;:::i;:::-;40167:43;;40159:115;;;;-1:-1:-1;;;40159:115:0;;24851:2:1;40159:115:0;;;24833:21:1;24890:2;24870:18;;;24863:30;24929:34;24909:18;;;24902:62;25000:29;24980:18;;;24973:57;25047:19;;40159:115:0;24649:423:1;40159:115:0;-1:-1:-1;;;;;40301:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;40324:17:0;;;;;;:13;:17;;;;;;;;40301:40;40297:263;;;-1:-1:-1;;;;;40367:31:0;;;;;;:25;:31;;;;;;;;40366:32;;:66;;-1:-1:-1;;;;;;40403:29:0;;;;;;:25;:29;;;;;;;;40402:30;40366:66;40362:183;;;40475:11;;40465:6;:21;;40457:68;;;;-1:-1:-1;;;40457:68:0;;25279:2:1;40457:68:0;;;25261:21:1;25318:2;25298:18;;;25291:30;25357:34;25337:18;;;25330:62;-1:-1:-1;;;25408:18:1;;;25401:32;25450:19;;40457:68:0;25077:398:1;40457:68:0;40571:37;40584:11;40597:10;40571:12;:37::i;:::-;40656:23;;40646:4;40613:12;15312:18;;;:9;:18;;;;;;40695:16;;-1:-1:-1;;40628:51:0;;-1:-1:-1;;;40695:16:0;;;;:31;;;;;40719:7;40695:31;:49;;;;-1:-1:-1;40735:9:0;;;;40734:10;40695:49;:70;;;;;40764:1;40752:9;;:13;40695:70;:95;;;;-1:-1:-1;;;;;;40773:17:0;;;;;;:13;:17;;;;;;;;40695:95;:126;;;;-1:-1:-1;40806:15:0;;-1:-1:-1;;;;;40798:23:0;;;40806:15;;40798:23;;40695:126;:151;;;;-1:-1:-1;40831:15:0;;-1:-1:-1;;;;;40825:21:0;;;40831:15;;40825:21;;40695:151;:177;;;;-1:-1:-1;40862:10:0;;-1:-1:-1;;;;;40854:18:0;;;40862:10;;40854:18;;40695:177;:197;;;;-1:-1:-1;40882:10:0;;-1:-1:-1;;;;;40876:16:0;;;40882:10;;40876:16;;40695:197;:235;;;;-1:-1:-1;40909:21:0;;;;;;;40695:235;40686:324;;;40942:9;:16;;-1:-1:-1;;40942:16:0;40954:4;40942:16;;;40964:17;:15;:17::i;:::-;40987:9;:17;;-1:-1:-1;;40987:17:0;;;40686:324;41032:9;;41016:12;;41032:9;;41031:10;:30;;;;-1:-1:-1;41045:16:0;;-1:-1:-1;;;41045:16:0;;;;41031:30;-1:-1:-1;;;;;41071:24:0;;;;;;:18;:24;;;;;;41016:45;;-1:-1:-1;41071:24:0;;;:50;;-1:-1:-1;;;;;;41099:22:0;;;;;;:18;:22;;;;;;;;41071:50;41068:81;;;-1:-1:-1;41138:5:0;41068:81;41157:7;41153:137;;;41172:11;41207:3;41195:9;;41186:6;:18;;;;:::i;:::-;:24;;;;:::i;:::-;41172:38;-1:-1:-1;41225:12:0;41172:38;41225:6;:12;:::i;:::-;41216:21;;41243:41;41259:4;41273;41280:3;41243:15;:41::i;:::-;41166:124;41153:137;41296:33;41312:4;41318:2;41322:6;41296:15;:33::i;:::-;41340:15;;-1:-1:-1;;;;;41340:15:0;:26;41375:4;41382:15;41375:4;-1:-1:-1;;;;;15312:18:0;15291:7;15312:18;;;:9;:18;;;;;;;15217:118;41382:15;41340:58;;-1:-1:-1;;;;;;41340:58:0;;;;;;;-1:-1:-1;;;;;25688:32:1;;;41340:58:0;;;25670:51:1;25737:18;;;25730:34;25643:18;;41340:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41336:74;41418:15;;-1:-1:-1;;;;;41418:15:0;:26;41453:2;41458:13;41453:2;-1:-1:-1;;;;;15312:18:0;15291:7;15312:18;;;:9;:18;;;;;;;15217:118;41458:13;41418:54;;-1:-1:-1;;;;;;41418:54:0;;;;;;;-1:-1:-1;;;;;25688:32:1;;;41418:54:0;;;25670:51:1;25737:18;;;25730:34;25643:18;;41418:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41414:70;41494:9;;;;41490:286;;41525:16;;41551:15;;:28;;-1:-1:-1;;;;;;41551:28:0;;;;;1618:25:1;;;-1:-1:-1;;;;;41551:15:0;;;;:23;;1591:18:1;;41551:28:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;41551:28:0;;;;;;;;-1:-1:-1;;41551:28:0;;;;;;;;;;;;:::i;:::-;;;41547:224;;;;;41665:86;;;26317:25:1;;;26373:2;26358:18;;26351:34;;;26401:18;;;26394:34;;;26459:2;26444:18;;26437:34;;;41741:9:0;;41730:4;;41665:86;;26304:3:1;26289:19;41665:86:0;;;;;;;41580:178;;;41547:224;41505:271;41490:286;39514:2266;;;;39421:2359;;;:::o;9634:171::-;9720:7;9750:12;9742:6;;;;9734:29;;;;-1:-1:-1;;;9734:29:0;;;;;;;;:::i;:::-;-1:-1:-1;9768:9:0;9780:5;9784:1;9780;:5;:::i;:::-;9768:17;9634:171;-1:-1:-1;;;;;9634:171:0:o;42838:1927::-;42920:15;;42905:4;15594:7;15615:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;42920:15:0;;;15615:27;;;;;;;-1:-1:-1;;42887:71:0;42884:171;;43007:15;;42975:68;;42992:4;;-1:-1:-1;;;;;43007:15:0;-1:-1:-1;;42975:8:0;:68::i;:::-;43111:4;43067:23;15312:18;;;:9;:18;;;;;;43200:9;;43260:13;;15312:18;;43150:21;;43288:1;;43200:9;;43242:31;;15312:18;43242:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;43216:73;-1:-1:-1;43294:20:0;43317:33;43216:73;43317:15;:33;:::i;:::-;43294:56;;43357:31;43375:12;43357:17;:31::i;:::-;43395:27;43425:41;43449:17;43425:21;:41;:::i;:::-;43395:71;;43471:19;43522:1;43506:13;;:17;;;;:::i;:::-;43493:9;;:31;;;;:::i;:::-;43471:53;;43529:26;43610:1;43596:11;43580:13;;43558:19;:35;;;;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;43529:82;;43616:26;43683:11;43667:13;;43645:19;:35;;;;:::i;:::-;:49;;;;:::i;:::-;43616:78;;43699:21;43756:11;43745:8;;43723:19;:30;;;;:::i;:::-;:44;;;;:::i;:::-;43699:68;;43778:27;43847:11;43830:14;;43808:19;:36;;;;:::i;:::-;:50;;;;:::i;:::-;43778:80;-1:-1:-1;43863:24:0;43778:80;43955:13;43913:39;43934:18;43913;:39;:::i;:::-;:55;;;;:::i;:::-;:77;;;;:::i;:::-;43890:101;;:19;:101;:::i;:::-;43863:128;-1:-1:-1;44007:22:0;;44004:78;;44038:15;;:44;;-1:-1:-1;;;;;44038:15:0;;;;:44;;;;;44063:18;;44038:15;:44;:15;:44;44063:18;44038:15;:44;;;;;;;;;;;;;;;;;;;;;44004:78;44096:17;;44093:63;;44122:10;;:34;;-1:-1:-1;;;;;44122:10:0;;;;:34;;;;;44142:13;;44122:10;:34;:10;:34;44142:13;44122:10;:34;;;;;;;;;;;;;;;;;;;;;44093:63;44166:19;;44163:162;;44193:50;44207:15;44224:18;44193:13;:50::i;:::-;44254:65;;;26684:25:1;;;26740:2;26725:18;;26718:34;;;26768:18;;;26761:34;;;44254:65:0;;26672:2:1;26657:18;44254:65:0;;;;;;;44163:162;44340:23;;44337:141;;44380:37;44397:19;44380:16;:37::i;:::-;44437:29;;1618:25:1;;;44437:29:0;;1606:2:1;1591:18;44437:29:0;;;;;;;44337:141;44493:20;;44490:241;;44564:15;;44556:58;;44531:20;;-1:-1:-1;;;;;44564:15:0;;44593:16;;44531:20;44556:58;44531:20;44556:58;44593:16;44564:15;44556:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44530:84;;;44632:15;44629:91;;;44673:31;;1618:25:1;;;44673:31:0;;1606:2:1;1591:18;44673:31:0;;;;;;;44629:91;44515:216;44490:241;-1:-1:-1;;;44735:9:0;:25;;;;-1:-1:-1;;;;;;;;42838:1927:0:o;16596:509::-;-1:-1:-1;;;;;16709:20:0;;16701:70;;;;-1:-1:-1;;;16701:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16784:23:0;;16776:71;;;;-1:-1:-1;;;16776:71:0;;;;;;;:::i;:::-;16924;16946:6;16924:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16924:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;16904:17:0;;;;;;;:9;:17;;;;;;:91;;;;17023:20;;;;;;;:32;;17048:6;17023:24;:32::i;:::-;-1:-1:-1;;;;;17000:20:0;;;;;;;:9;:20;;;;;;;:55;;;;17065:35;;;;;;;;;;17093:6;1618:25:1;;1606:2;1591:18;;1472:177;41783:1050:0;41869:1;41853:13;:17;;;41875:13;:17;;;41897:8;:12;;;41914:11;:15;;;41940:14;:18;41965:675;;;;42004:7;:17;41988:13;:33;42043:17;;42027:13;:33;42077:12;;42066:8;:23;42109:15;;42095:11;:29;42156:18;;42139:14;:35;41965:675;;;42193:10;42189:451;;;42227:8;:18;42211:13;:34;42267:18;;42251:13;:34;42302:13;;42291:8;:24;42335:16;;42321:11;:30;42383:19;;42366:14;:36;42189:451;;;42439:12;:22;42423:13;:38;42483:22;;42467:13;:38;42522:17;;42511:8;:28;42559:20;;42545:11;:34;42611:23;;42594:14;:40;42189:451;42713:14;;42699:11;;42688:8;;42672:13;;42656;;:29;;;;:::i;:::-;:40;;;;:::i;:::-;:54;;;;:::i;:::-;:71;;;;:::i;:::-;42644:9;:83;;;42749:13;;42764;;42779:8;;42789:11;;42802:14;;42737:91;;;27093:25:1;;;27149:2;27134:18;;27127:34;;;;27177:18;;;27170:34;;;;27235:2;27220:18;;27213:34;27278:3;27263:19;;27256:35;27322:3;27307:19;;27300:35;;;;42737:91:0;;27080:3:1;27065:19;42737:91:0;26806:535:1;44770:416:0;44855:16;;;44869:1;44855:16;;;;;;;;44831:21;;44855:16;;;;;;;;;;-1:-1:-1;44855:16:0;44831:40;;44894:4;44876;44881:1;44876:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44876:23:0;;;:7;;;;;;;;;;:23;;;;44914:15;;:22;;;-1:-1:-1;;;44914:22:0;;;;:15;;;;;:20;;:22;;;;;44876:7;;44914:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44904:4;44909:1;44904:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44904:32:0;;;:7;;;;;;;;;:32;44973:15;;44941:62;;44958:4;;44973:15;44991:11;44941:8;:62::i;:::-;45008:15;;:173;;-1:-1:-1;;;45008:173:0;;-1:-1:-1;;;;;45008:15:0;;;;:66;;:173;;45080:11;;45008:15;;45132:4;;45150;;45161:15;;45008:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44826:360;44770:416;:::o;45598:343::-;45706:15;;45674:62;;45691:4;;-1:-1:-1;;;;;45706:15:0;45724:11;45674:8;:62::i;:::-;45741:15;;45900:10;;45741:195;;-1:-1:-1;;;45741:195:0;;45804:4;45741:195;;;29012:34:1;29062:18;;;29055:34;;;45741:15:0;29105:18:1;;;29098:34;;;29148:18;;;29141:34;-1:-1:-1;;;;;45900:10:0;;;29191:19:1;;;29184:44;45916:15:0;29244:19:1;;;29237:35;45741:15:0;;;:31;;45780:9;;28946:19:1;;45741:195:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45194:399::-;45276:16;;;45290:1;45276:16;;;;;;;;45252:21;;45276:16;;;;;;;;-1:-1:-1;;45307:15:0;;:22;;;-1:-1:-1;;;45307:22:0;;;;45252:40;;-1:-1:-1;;;;;;45307:15:0;;;;:20;;-1:-1:-1;45307:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45297:4;45302:1;45297:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45297:32:0;;;:7;;;;;;;;;:32;45344:13;;45334:7;;45344:13;;;45334:4;;45344:13;;45334:7;;;;;;:::i;:::-;-1:-1:-1;;;;;45334:23:0;;;:7;;;;;;;;;:23;45370:15;;45524:16;;45370:208;;-1:-1:-1;;;45370:208:0;;:15;;;;:66;;45445:9;;45370:208;;:15;;45509:4;;45524:16;;;;45551:15;;45370:208;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;206:597:1;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;944:315;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1654:247::-;1713:6;1766:2;1754:9;1745:7;1741:23;1737:32;1734:52;;;1782:1;1779;1772:12;1734:52;1821:9;1808:23;1840:31;1865:5;1840:31;:::i;2374:454::-;2469:6;2477;2485;2493;2501;2554:3;2542:9;2533:7;2529:23;2525:33;2522:53;;;2571:1;2568;2561:12;2522:53;-1:-1:-1;;2594:23:1;;;2664:2;2649:18;;2636:32;;-1:-1:-1;2715:2:1;2700:18;;2687:32;;2766:2;2751:18;;2738:32;;-1:-1:-1;2817:3:1;2802:19;2789:33;;-1:-1:-1;2374:454:1;-1:-1:-1;2374:454:1:o;2833:456::-;2910:6;2918;2926;2979:2;2967:9;2958:7;2954:23;2950:32;2947:52;;;2995:1;2992;2985:12;2947:52;3034:9;3021:23;3053:31;3078:5;3053:31;:::i;:::-;3103:5;-1:-1:-1;3160:2:1;3145:18;;3132:32;3173:33;3132:32;3173:33;:::i;:::-;2833:456;;3225:7;;-1:-1:-1;;;3279:2:1;3264:18;;;;3251:32;;2833:456::o;3294:118::-;3380:5;3373:13;3366:21;3359:5;3356:32;3346:60;;3402:1;3399;3392:12;3417:382;3482:6;3490;3543:2;3531:9;3522:7;3518:23;3514:32;3511:52;;;3559:1;3556;3549:12;3511:52;3598:9;3585:23;3617:31;3642:5;3617:31;:::i;:::-;3667:5;-1:-1:-1;3724:2:1;3709:18;;3696:32;3737:30;3696:32;3737:30;:::i;:::-;3786:7;3776:17;;;3417:382;;;;;:::o;3804:180::-;3863:6;3916:2;3904:9;3895:7;3891:23;3887:32;3884:52;;;3932:1;3929;3922:12;3884:52;-1:-1:-1;3955:23:1;;3804:180;-1:-1:-1;3804:180:1:o;4648:241::-;4704:6;4757:2;4745:9;4736:7;4732:23;4728:32;4725:52;;;4773:1;4770;4763:12;4725:52;4812:9;4799:23;4831:28;4853:5;4831:28;:::i;4894:553::-;4995:6;5003;5011;5064:2;5052:9;5043:7;5039:23;5035:32;5032:52;;;5080:1;5077;5070:12;5032:52;5119:9;5106:23;5138:31;5163:5;5138:31;:::i;:::-;5188:5;-1:-1:-1;5245:2:1;5230:18;;5217:32;5258:33;5217:32;5258:33;:::i;:::-;5310:7;-1:-1:-1;5369:2:1;5354:18;;5341:32;5382:33;5341:32;5382:33;:::i;:::-;5434:7;5424:17;;;4894:553;;;;;:::o;6392:388::-;6460:6;6468;6521:2;6509:9;6500:7;6496:23;6492:32;6489:52;;;6537:1;6534;6527:12;6489:52;6576:9;6563:23;6595:31;6620:5;6595:31;:::i;:::-;6645:5;-1:-1:-1;6702:2:1;6687:18;;6674:32;6715:33;6674:32;6715:33;:::i;6785:356::-;6987:2;6969:21;;;7006:18;;;6999:30;7065:34;7060:2;7045:18;;7038:62;7132:2;7117:18;;6785:356::o;7146:380::-;7225:1;7221:12;;;;7268;;;7289:61;;7343:4;7335:6;7331:17;7321:27;;7289:61;7396:2;7388:6;7385:14;7365:18;7362:38;7359:161;;;7442:10;7437:3;7433:20;7430:1;7423:31;7477:4;7474:1;7467:15;7505:4;7502:1;7495:15;7359:161;;7146:380;;;:::o;7531:127::-;7592:10;7587:3;7583:20;7580:1;7573:31;7623:4;7620:1;7613:15;7647:4;7644:1;7637:15;7663:128;7703:3;7734:1;7730:6;7727:1;7724:13;7721:39;;;7740:18;;:::i;:::-;-1:-1:-1;7776:9:1;;7663:128::o;7796:408::-;7998:2;7980:21;;;8037:2;8017:18;;;8010:30;8076:34;8071:2;8056:18;;8049:62;-1:-1:-1;;;8142:2:1;8127:18;;8120:42;8194:3;8179:19;;7796:408::o;8472:414::-;8674:2;8656:21;;;8713:2;8693:18;;;8686:30;8752:34;8747:2;8732:18;;8725:62;-1:-1:-1;;;8818:2:1;8803:18;;8796:48;8876:3;8861:19;;8472:414::o;9311:422::-;9400:1;9443:5;9400:1;9457:270;9478:7;9468:8;9465:21;9457:270;;;9537:4;9533:1;9529:6;9525:17;9519:4;9516:27;9513:53;;;9546:18;;:::i;:::-;9596:7;9586:8;9582:22;9579:55;;;9616:16;;;;9579:55;9695:22;;;;9655:15;;;;9457:270;;;9461:3;9311:422;;;;;:::o;9738:806::-;9787:5;9817:8;9807:80;;-1:-1:-1;9858:1:1;9872:5;;9807:80;9906:4;9896:76;;-1:-1:-1;9943:1:1;9957:5;;9896:76;9988:4;10006:1;10001:59;;;;10074:1;10069:130;;;;9981:218;;10001:59;10031:1;10022:10;;10045:5;;;10069:130;10106:3;10096:8;10093:17;10090:43;;;10113:18;;:::i;:::-;-1:-1:-1;;10169:1:1;10155:16;;10184:5;;9981:218;;10283:2;10273:8;10270:16;10264:3;10258:4;10255:13;10251:36;10245:2;10235:8;10232:16;10227:2;10221:4;10218:12;10214:35;10211:77;10208:159;;;-1:-1:-1;10320:19:1;;;10352:5;;10208:159;10399:34;10424:8;10418:4;10399:34;:::i;:::-;10469:6;10465:1;10461:6;10457:19;10448:7;10445:32;10442:58;;;10480:18;;:::i;:::-;10518:20;;9738:806;-1:-1:-1;;;9738:806:1:o;10549:140::-;10607:5;10636:47;10677:4;10667:8;10663:19;10657:4;10636:47;:::i;10694:168::-;10734:7;10800:1;10796;10792:6;10788:14;10785:1;10782:21;10777:1;10770:9;10763:17;10759:45;10756:71;;;10807:18;;:::i;:::-;-1:-1:-1;10847:9:1;;10694:168::o;10867:217::-;10907:1;10933;10923:132;;10977:10;10972:3;10968:20;10965:1;10958:31;11012:4;11009:1;11002:15;11040:4;11037:1;11030:15;10923:132;-1:-1:-1;11069:9:1;;10867:217::o;11563:184::-;11633:6;11686:2;11674:9;11665:7;11661:23;11657:32;11654:52;;;11702:1;11699;11692:12;11654:52;-1:-1:-1;11725:16:1;;11563:184;-1:-1:-1;11563:184:1:o;12679:245::-;12746:6;12799:2;12787:9;12778:7;12774:23;12770:32;12767:52;;;12815:1;12812;12805:12;12767:52;12847:9;12841:16;12866:28;12888:5;12866:28;:::i;16579:251::-;16649:6;16702:2;16690:9;16681:7;16677:23;16673:32;16670:52;;;16718:1;16715;16708:12;16670:52;16750:9;16744:16;16769:31;16794:5;16769:31;:::i;17577:681::-;17708:6;17716;17724;17732;17740;17748;17756;17764;17817:3;17805:9;17796:7;17792:23;17788:33;17785:53;;;17834:1;17831;17824:12;17785:53;17866:9;17860:16;17885:31;17910:5;17885:31;:::i;:::-;17935:5;17925:15;;;17980:2;17969:9;17965:18;17959:25;17949:35;;18024:2;18013:9;18009:18;18003:25;17993:35;;18068:2;18057:9;18053:18;18047:25;18037:35;;18112:3;18101:9;18097:19;18091:26;18081:36;;18157:3;18146:9;18142:19;18136:26;18126:36;;18202:3;18191:9;18187:19;18181:26;18171:36;;18247:3;18236:9;18232:19;18226:26;18216:36;;17577:681;;;;;;;;;;;:::o;19860:125::-;19900:4;19928:1;19925;19922:8;19919:34;;;19933:18;;:::i;:::-;-1:-1:-1;19970:9:1;;19860:125::o;23077:401::-;23279:2;23261:21;;;23318:2;23298:18;;;23291:30;23357:34;23352:2;23337:18;;23330:62;-1:-1:-1;;;23423:2:1;23408:18;;23401:35;23468:3;23453:19;;23077:401::o;23483:399::-;23685:2;23667:21;;;23724:2;23704:18;;;23697:30;23763:34;23758:2;23743:18;;23736:62;-1:-1:-1;;;23829:2:1;23814:18;;23807:33;23872:3;23857:19;;23483:399::o;25775:306::-;25863:6;25871;25879;25932:2;25920:9;25911:7;25907:23;25903:32;25900:52;;;25948:1;25945;25938:12;25900:52;25977:9;25971:16;25961:26;;26027:2;26016:9;26012:18;26006:25;25996:35;;26071:2;26060:9;26056:18;26050:25;26040:35;;25775:306;;;;;:::o;27478:127::-;27539:10;27534:3;27530:20;27527:1;27520:31;27570:4;27567:1;27560:15;27594:4;27591:1;27584:15;27610:461;27663:3;27701:5;27695:12;27728:6;27723:3;27716:19;27754:4;27783:2;27778:3;27774:12;27767:19;;27820:2;27813:5;27809:14;27841:1;27851:195;27865:6;27862:1;27859:13;27851:195;;;27930:13;;-1:-1:-1;;;;;27926:39:1;27914:52;;27986:12;;;;28021:15;;;;27962:1;27880:9;27851:195;;;-1:-1:-1;28062:3:1;;27610:461;-1:-1:-1;;;;;27610:461:1:o;28076:582::-;28375:6;28364:9;28357:25;28418:6;28413:2;28402:9;28398:18;28391:34;28461:3;28456:2;28445:9;28441:18;28434:31;28338:4;28482:57;28534:3;28523:9;28519:19;28511:6;28482:57;:::i;:::-;-1:-1:-1;;;;;28575:32:1;;;;28570:2;28555:18;;28548:60;-1:-1:-1;28639:3:1;28624:19;28617:35;28474:65;28076:582;-1:-1:-1;;;28076:582:1:o;29283:518::-;29562:6;29551:9;29544:25;29605:3;29600:2;29589:9;29585:18;29578:31;29525:4;29626:57;29678:3;29667:9;29663:19;29655:6;29626:57;:::i;:::-;-1:-1:-1;;;;;29719:32:1;;;;29714:2;29699:18;;29692:60;-1:-1:-1;29783:2:1;29768:18;29761:34;29618:65;29283:518;-1:-1:-1;;29283:518:1:o
Swarm Source
ipfs://544bfc720ea377887eb09e962d4b060c1fc432fb058ca534700e2ac7cf917b40
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.