Token Cromarket Token
Overview CRC20
Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
44,848,185.84456 CM
Holders:
564 addresses
Contract:
Decimals:
5
Balance
51,046.94568 CMValue
$0.00
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CromarketToken
Compiler Version
v0.7.4+commit.3f05b770
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-04-09 */ // SPDX-License-Identifier: Unlicensed /** * _____ _ _ * / ____| | | | | * | | _ __ ___ _ __ ___ __ _ _ __| | _____| |_ __ _ _ __ _ __ * | | | '__/ _ \| '_ ` _ \ / _` | '__| |/ / _ \ __| / _` | '_ \| '_ \ * | |____| | | (_) | | | | | | (_| | | | < __/ |_ | (_| | |_) | |_) | * \_____|_| \___/|_| |_| |_|\__,_|_| |_|\_\___|\__(_)__,_| .__/| .__/ * | | | | * |_| |_| * Name: Cromarket Token * Website : cromarket.app * Whitepaper : cromarket.app/cm * Twitter : twitter.com/cromarketapp * Telegram : t.me/cromarket * * Dual rewards system: auto-stacking + USDC rewards * Auto-liquidity, auto-burn * * Based on Eversafu fork */ pragma solidity ^0.7.4; 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; 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) { require(b != -1 || a != MIN_INT256); 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; } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } interface IPancakeSwapPair { 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 IPancakeSwapRouter{ 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); 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 IPancakeSwapFactory { 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 IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IDividendDistributor { function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; function setToken(address _addr) external; } contract DividendDistributor is IDividendDistributor { using SafeMath for uint256; address public _token; address _reward_token = 0xc21223249CA28397B4B6541dfFaEcC539BfF0c59; address _router = 0x145677FC4d9b8F19B5D56d1820c48e0443049a30; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } IERC20 BUSD = IERC20(_reward_token); IPancakeSwapRouter router; address[] shareholders; mapping (address => uint256) shareholderIndexes; mapping (address => uint256) shareholderClaims; mapping (address => Share) public shares; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public currentIndex; uint256 public dividendsPerShareAccuracyFactor = 10 ** 36; uint256 public minPeriod = 1 hours; uint256 public minDistribution = 1 * (10 ** 18); bool initialized; modifier initialization() { require(!initialized); _; initialized = true; } modifier onlyToken() { require(msg.sender == _token); _; } constructor () { router = IPancakeSwapRouter(_router); _token = address(0x0); } function setToken(address _addr) external override initialization { _token = _addr; } function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken { minPeriod = _minPeriod; minDistribution = _minDistribution; } function setShare(address shareholder, uint256 amount) external override onlyToken { if(shares[shareholder].amount > 0){ distributeDividend(shareholder); } if(amount > 0 && shares[shareholder].amount == 0){ addShareholder(shareholder); }else if(amount == 0 && shares[shareholder].amount > 0){ removeShareholder(shareholder); } totalShares = totalShares.sub(shares[shareholder].amount).add(amount); shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } function deposit() external payable override onlyToken { uint256 balanceBefore = BUSD.balanceOf(address(this)); address[] memory path = new address[](2); path[0] = router.WETH(); path[1] = address(BUSD); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}( 0, path, address(this), block.timestamp ); uint256 amount = BUSD.balanceOf(address(this)).sub(balanceBefore); totalDividends = totalDividends.add(amount); dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)); } function process(uint256 gas) external override onlyToken { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; while(gasUsed < gas && iterations < shareholderCount) { if(currentIndex >= shareholderCount){ currentIndex = 0; } if(shouldDistribute(shareholders[currentIndex])){ distributeDividend(shareholders[currentIndex]); } gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } } function shouldDistribute(address shareholder) internal view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution; } function distributeDividend(address shareholder) internal { if(shares[shareholder].amount == 0){ return; } uint256 amount = getUnpaidEarnings(shareholder); if(amount > 0){ totalDistributed = totalDistributed.add(amount); BUSD.transfer(shareholder, amount); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } } function claimDividend() external { distributeDividend(msg.sender); } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if(shares[shareholder].amount == 0){ return 0; } uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; } return shareholderTotalDividends.sub(shareholderTotalExcluded); } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor); } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1]; shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder]; shareholders.pop(); } } contract Ownable { address private _owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { _owner = msg.sender; } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(isOwner()); _; } function isOwner() public view returns (bool) { return msg.sender == _owner; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(_owner); _owner = address(0); } function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } abstract contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; constructor( string memory name_, string memory symbol_, uint8 decimals_ ) { _name = name_; _symbol = symbol_; _decimals = decimals_; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } } contract CromarketToken is ERC20Detailed, Ownable { using SafeMath for uint256; using SafeMathInt for int256; event LogRebase(uint256 indexed epoch, uint256 totalSupply); IPancakeSwapPair public pairContract; mapping(address => bool) _isFeeExempt; modifier validRecipient(address to) { require(to != address(0x0)); _; } uint256 public constant DECIMALS = 5; uint256 public constant MAX_UINT256 = ~uint256(0); uint8 public constant RATE_DECIMALS = 7; uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 325 * 10**3 * 10**DECIMALS; uint256 public liquidityFee = 20; uint256 public treasuryFee = 25; uint256 public safuDividendFee = 70; uint256 public sellFee = 20; uint256 public autofirePitFee = 25; uint256 public totalFee = liquidityFee.add(treasuryFee).add(safuDividendFee).add( autofirePitFee ); uint256 public feeDenominator = 1000; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; address public autoLiquidityReceiver; address public treasuryReceiver; IDividendDistributor distributor; address public safuDividendReceiver; uint256 distributorGas = 500000; address public autofirePit; bool public swapEnabled = true; IPancakeSwapRouter public router; address public pair; bool inSwap = false; modifier swapping() { inSwap = true; _; inSwap = false; } uint256 private constant TOTAL_GONS = MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY); uint256 private constant MAX_SUPPLY = 325 * 10**7 * 10**DECIMALS; bool public _autoRebase; bool public _autoAddLiquidity; uint256 public _initRebaseStartTime; uint256 public _lastRebasedTime; uint256 public _lastAddLiquidityTime; uint256 public _totalSupply; uint256 private _gonsPerFragment; mapping(address => uint256) private _gonBalances; mapping(address => mapping(address => uint256)) private _allowedFragments; mapping(address => bool) public blacklist; mapping(address => bool) public isDividendExempt; constructor() ERC20Detailed("Cromarket Token", "CM", uint8(DECIMALS)) Ownable() { router = IPancakeSwapRouter(0x145677FC4d9b8F19B5D56d1820c48e0443049a30); pair = IPancakeSwapFactory(router.factory()).createPair( router.WETH(), address(this) ); autoLiquidityReceiver = 0x3D44cC778f3BE74c9EFC816D4f4079Bce6DA5834; treasuryReceiver = 0x8b812820B123e77e25682DABfaf386876C3a5656; autofirePit = 0x000000000000000000000000000000000000dEaD; safuDividendReceiver = 0x7137c3B6c0E131a538D6Ce4e317BEe8964eB7903; _allowedFragments[address(this)][address(router)] = uint256(-1); pairContract = IPancakeSwapPair(pair); distributor = IDividendDistributor(safuDividendReceiver); distributor.setToken(address(this)); isDividendExempt[msg.sender] = true; isDividendExempt[pair] = true; isDividendExempt[address(this)] = true; isDividendExempt[DEAD] = true; _totalSupply = INITIAL_FRAGMENTS_SUPPLY; _gonBalances[treasuryReceiver] = TOTAL_GONS; _gonsPerFragment = TOTAL_GONS.div(_totalSupply); _initRebaseStartTime = block.timestamp; _lastRebasedTime = block.timestamp; _autoRebase = false; _autoAddLiquidity = true; _isFeeExempt[treasuryReceiver] = true; _isFeeExempt[address(this)] = true; _transferOwnership(treasuryReceiver); emit Transfer(address(0x0), treasuryReceiver, _totalSupply); } function rebase() internal { if ( inSwap ) return; uint256 rebaseRate; uint256 deltaTimeFromInit = block.timestamp - _initRebaseStartTime; uint256 deltaTime = block.timestamp - _lastRebasedTime; uint256 times = deltaTime.div(15 minutes); uint256 epoch = times.mul(15); if (deltaTimeFromInit < (365 days)) { rebaseRate = 2355; } else if (deltaTimeFromInit >= (365 days)) { rebaseRate = 211; } else if (deltaTimeFromInit >= ((15 * 365 days) / 10)) { rebaseRate = 14; } else if (deltaTimeFromInit >= (7 * 365 days)) { rebaseRate = 2; } for (uint256 i = 0; i < times; i++) { _totalSupply = _totalSupply .mul((10**RATE_DECIMALS).add(rebaseRate)) .div(10**RATE_DECIMALS); } _gonsPerFragment = TOTAL_GONS.div(_totalSupply); _lastRebasedTime = _lastRebasedTime.add(times.mul(15 minutes)); pairContract.sync(); emit LogRebase(epoch, _totalSupply); } function transfer(address to, uint256 value) external override validRecipient(to) returns (bool) { _transferFrom(msg.sender, to, value); return true; } function transferFrom( address from, address to, uint256 value ) external override validRecipient(to) returns (bool) { if (_allowedFragments[from][msg.sender] != uint256(-1)) { _allowedFragments[from][msg.sender] = _allowedFragments[from][ msg.sender ].sub(value, "Insufficient Allowance"); } _transferFrom(from, to, value); return true; } function _basicTransfer( address from, address to, uint256 amount ) internal returns (bool) { uint256 gonAmount = amount.mul(_gonsPerFragment); _gonBalances[from] = _gonBalances[from].sub(gonAmount); _gonBalances[to] = _gonBalances[to].add(gonAmount); return true; } function _transferFrom( address sender, address recipient, uint256 amount ) internal returns (bool) { require(!blacklist[sender] && !blacklist[recipient], "in_blacklist"); if (inSwap) { return _basicTransfer(sender, recipient, amount); } if (shouldRebase()) { rebase(); } if (shouldAddLiquidity()) { addLiquidity(); } if (shouldSwapBack()) { swapBack(); } uint256 gonAmount = amount.mul(_gonsPerFragment); _gonBalances[sender] = _gonBalances[sender].sub(gonAmount); uint256 gonAmountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, gonAmount) : gonAmount; _gonBalances[recipient] = _gonBalances[recipient].add( gonAmountReceived ); if(!isDividendExempt[sender]){ try distributor.setShare(sender, balanceOf(sender)) {} catch {} } if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, balanceOf(recipient)) {} catch {} } try distributor.process(distributorGas) {} catch {} emit Transfer( sender, recipient, gonAmountReceived.div(_gonsPerFragment) ); return true; } function takeFee( address sender, address recipient, uint256 gonAmount ) internal returns (uint256) { uint256 _totalFee = totalFee; uint256 _treasuryFee = treasuryFee; if (recipient == pair) { _totalFee = totalFee.add(sellFee); _treasuryFee = treasuryFee.add(sellFee); } uint256 feeAmount = gonAmount.div(feeDenominator).mul(_totalFee); _gonBalances[autofirePit] = _gonBalances[autofirePit].add( gonAmount.div(feeDenominator).mul(autofirePitFee) ); _gonBalances[address(this)] = _gonBalances[address(this)].add( gonAmount.div(feeDenominator).mul(_treasuryFee.add(safuDividendFee)) ); _gonBalances[autoLiquidityReceiver] = _gonBalances[autoLiquidityReceiver].add( gonAmount.div(feeDenominator).mul(liquidityFee) ); emit Transfer(sender, address(this), feeAmount.div(_gonsPerFragment)); return gonAmount.sub(feeAmount); } function addLiquidity() internal swapping { uint256 autoLiquidityAmount = _gonBalances[autoLiquidityReceiver].div( _gonsPerFragment ); _gonBalances[address(this)] = _gonBalances[address(this)].add( _gonBalances[autoLiquidityReceiver] ); _gonBalances[autoLiquidityReceiver] = 0; uint256 amountToLiquify = autoLiquidityAmount.div(2); uint256 amountToSwap = autoLiquidityAmount.sub(amountToLiquify); if( amountToSwap == 0 ) { return; } address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); uint256 balanceBefore = address(this).balance; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETHLiquidity = address(this).balance.sub(balanceBefore); if (amountToLiquify > 0&&amountETHLiquidity > 0) { router.addLiquidityETH{value: amountETHLiquidity}( address(this), amountToLiquify, 0, 0, autoLiquidityReceiver, block.timestamp ); } _lastAddLiquidityTime = block.timestamp; } function swapBack() internal swapping { uint256 amountToSwap = _gonBalances[address(this)].div(_gonsPerFragment); if( amountToSwap == 0) { return; } uint256 balanceBefore = address(this).balance; address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETHToTreasuryAndSIF = address(this).balance.sub( balanceBefore ); (bool success, ) = payable(treasuryReceiver).call{ value: amountETHToTreasuryAndSIF.mul(treasuryFee).div( treasuryFee.add(safuDividendFee) ), gas: 30000 }(""); try distributor.deposit { value: amountETHToTreasuryAndSIF.mul(safuDividendFee).div(treasuryFee.add(safuDividendFee)) } () {} catch {} } function withdrawAllToTreasury() external swapping onlyOwner { uint256 amountToSwap = _gonBalances[address(this)].div(_gonsPerFragment); require( amountToSwap > 0,"There is no Cromarket Token deposited in token contract"); address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, treasuryReceiver, block.timestamp ); } function shouldTakeFee(address from, address to) internal view returns (bool) { return (pair == from || pair == to) && !_isFeeExempt[from]; } function shouldRebase() internal view returns (bool) { return _autoRebase && (_totalSupply < MAX_SUPPLY) && msg.sender != pair && !inSwap && block.timestamp >= (_lastRebasedTime + 15 minutes); } function shouldAddLiquidity() internal view returns (bool) { return _autoAddLiquidity && !inSwap && msg.sender != pair && block.timestamp >= (_lastAddLiquidityTime + 2 days); } function shouldSwapBack() internal view returns (bool) { return !inSwap && msg.sender != pair ; } function setAutoRebase(bool _flag) external onlyOwner { if (_flag) { _autoRebase = _flag; _lastRebasedTime = block.timestamp; } else { _autoRebase = _flag; } } function setAutoAddLiquidity(bool _flag) external onlyOwner { if(_flag) { _autoAddLiquidity = _flag; _lastAddLiquidityTime = block.timestamp; } else { _autoAddLiquidity = _flag; } } function allowance(address owner_, address spender) external view override returns (uint256) { return _allowedFragments[owner_][spender]; } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 oldValue = _allowedFragments[msg.sender][spender]; if (subtractedValue >= oldValue) { _allowedFragments[msg.sender][spender] = 0; } else { _allowedFragments[msg.sender][spender] = oldValue.sub( subtractedValue ); } emit Approval( msg.sender, spender, _allowedFragments[msg.sender][spender] ); return true; } function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][ spender ].add(addedValue); emit Approval( msg.sender, spender, _allowedFragments[msg.sender][spender] ); return true; } function approve(address spender, uint256 value) external override returns (bool) { _allowedFragments[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } function checkFeeExempt(address _addr) external view returns (bool) { return _isFeeExempt[_addr]; } function setIsDividendExempt(address holder, bool exempt) external onlyOwner { require(holder != address(this) && holder != pair); isDividendExempt[holder] = exempt; if (exempt) { distributor.setShare(holder, 0); } else { distributor.setShare(holder, balanceOf(holder)); } } function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external onlyOwner { distributor.setDistributionCriteria(_minPeriod, _minDistribution); } function setDistributorSettings(uint256 gas) external onlyOwner { require(gas < 750000, "Gas must be lower than 750000"); distributorGas = gas; } function getCirculatingSupply() public view returns (uint256) { return (TOTAL_GONS.sub(_gonBalances[DEAD]).sub(_gonBalances[ZERO])).div( _gonsPerFragment ); } function isNotInSwap() external view returns (bool) { return !inSwap; } function manualSync() external { IPancakeSwapPair(pair).sync(); } function setFeeReceivers( address _autoLiquidityReceiver, address _treasuryReceiver, address _autofirePit ) external onlyOwner { autoLiquidityReceiver = _autoLiquidityReceiver; treasuryReceiver = _treasuryReceiver; autofirePit = _autofirePit; } function getLiquidityBacking(uint256 accuracy) public view returns (uint256) { uint256 liquidityBalance = _gonBalances[pair].div(_gonsPerFragment); return accuracy.mul(liquidityBalance.mul(2)).div(getCirculatingSupply()); } function setWhitelist(address _addr) external onlyOwner { _isFeeExempt[_addr] = true; } function setBotBlacklist(address _botAddress, bool _flag) external onlyOwner { require(isContract(_botAddress), "only contract address, not allowed externally owned account"); blacklist[_botAddress] = _flag; } function setLP(address _address) external onlyOwner { pairContract = IPancakeSwapPair(_address); } function totalSupply() external view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _gonBalances[account].div(_gonsPerFragment); } function isContract(address addr) internal view returns (bool) { uint size; assembly { size := extcodesize(addr) } return size > 0; } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_UINT256","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RATE_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_autoAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_autoRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_initRebaseStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastAddLiquidityTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastRebasedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autofirePit","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autofirePitFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNotInSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairContract","outputs":[{"internalType":"contract IPancakeSwapPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IPancakeSwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safuDividendFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safuDividendReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setAutoAddLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setAutoRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_botAddress","type":"address"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setBotBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_treasuryReceiver","type":"address"},{"internalType":"address","name":"_autofirePit","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAllToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052601460055560196006556046600755601460085560196009556200005d60095462000049600754620000496006546005546200055460201b620019031790919060201c565b6200055460201b620019031790919060201c565b600a556103e8600b55600c80546001600160a01b031990811661dead17909155600d805490911690556207a1206012556013805460ff60a01b19908116600160a01b17909155601580549091169055348015620000b957600080fd5b50604080518082018252600f81526e21b937b6b0b935b2ba102a37b5b2b760891b602080830191825283518085019094526002845261434d60f01b9084015281519192916005916200010f916000919062000722565b5081516200012590600190602085019062000722565b506002805460ff191660ff9290921691909117610100600160a81b031916610100330217905550506014805473145677fc4d9b8f19b5d56d1820c48e0443049a306001600160a01b031990911617908190556040805163c45a015560e01b815290516001600160a01b039092169163c45a015591600480820192602092909190829003018186803b158015620001ba57600080fd5b505afa158015620001cf573d6000803e3d6000fd5b505050506040513d6020811015620001e657600080fd5b5051601454604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693169163ad5c4648916004808301926020929190829003018186803b1580156200023557600080fd5b505afa1580156200024a573d6000803e3d6000fd5b505050506040513d60208110156200026157600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b158015620002b157600080fd5b505af1158015620002c6573d6000803e3d6000fd5b505050506040513d6020811015620002dd57600080fd5b5051601580546001600160a01b039283166001600160a01b0319918216178255600e80548216733d44cc778f3be74c9efc816d4f4079bce6da5834179055600f80548216738b812820b123e77e25682dabfaf386876c3a565617905560138054821661dead179055601180548216737137c3b6c0e131a538d6ce4e317bee8964eb7903178155306000818152601c6020908152604080832060145489168452909152808220600019905594546003805486169188169190911790559154601080549094169086161792839055835163144fa6d760e01b815260048101919091529251919093169263144fa6d7926024808201939182900301818387803b158015620003e757600080fd5b505af1158015620003fc573d6000803e3d6000fd5b5050336000908152601e602090815260408083208054600160ff1991821681179092556015546001600160a01b03908116865283862080548316841790553086528386208054831684179055600c54811686528386208054909216909217905564079126a5006019908155600f549091168452601b835292206325878aff19908190559154620004999450919250620005b6811b6200195d17901c565b601a554260168190556017556015805461ffff60a81b1916600160b01b179055600f80546001600160a01b03908116600090815260046020526040808220805460ff1990811660019081179092553084529190922080549091169091179055905462000506911662000600565b600f5460195460408051918252516001600160a01b03909216916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a3620007ce565b600082820183811015620005af576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000620005af83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200067b60201b60201c565b6001600160a01b0381166200061457600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836200070b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620006cf578181015183820152602001620006b5565b50505050905090810190601f168015620006fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200071857fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200075a5760008555620007a5565b82601f106200077557805160ff1916838001178555620007a5565b82800160010185558215620007a5579182015b82811115620007a557825182559160200191906001019062000788565b50620007b3929150620007b7565b5090565b5b80821115620007b35760008155600101620007b8565b612b8d80620007de6000396000f3fe60806040526004361061036f5760003560e01c806383b4ac68116101c6578063bd595581116100f7578063dcb1aad211610095578063f2fde38b1161006f578063f2fde38b14610ad1578063f708a64f14610b04578063f887ea4014610b3f578063f9f92be414610b5457610376565b8063dcb1aad214610a55578063dd62ed3e14610a6a578063e15beb8014610aa557610376565b8063cfbac92f116100d1578063cfbac92f14610987578063d4399790146109b3578063d51ed1c8146109e6578063d7c0103214610a1057610376565b8063bd59558114610948578063ca33e64c1461095d578063cc32d1761461097257610376565b80639b87676c11610164578063a457c2d71161013e578063a457c2d7146108ac578063a8aa1b31146108e5578063a9059cbb146108fa578063afb9cf6d1461093357610376565b80639b87676c146108585780639d1944f51461086d578063a44f2b0e1461089757610376565b80638f32d59b116101a05780638f32d59b1461080457806395d89b411461081957806398118cb41461082e5780639b2912cc1461084357610376565b806383b4ac68146107a7578063854cff2f146107bc5780638da5cb5b146107ef57610376565b806333a581d2116102a05780635a604c521161023e57806370a082311161021857806370a0823114610735578063715018a614610768578063753d02a11461077d5780637d17757e1461079257610376565b80635a604c52146106f65780636912652c1461070b5780636ddd17131461072057610376565b80633eaaf86b1161027a5780633eaaf86b146106845780634355855a146106995780634d709adf146106cc578063514c3f4d146106e157610376565b806333a581d2146105fb57806337c9be8714610610578063395093511461064b57610376565b80632b112e491161030d5780632e0f2625116102e75780632e0f2625146105735780632f34d28214610588578063313ce567146105bb57806332b75683146105e657610376565b80632b112e49146105175780632b14ca561461052c5780632d48e8961461054157610376565b8063180b0d7e11610349578063180b0d7e1461048357806318160ddd146104aa5780631df4ccfc146104bf57806323b872dd146104d457610376565b806306fdde031461037b57806308b1fd8f14610405578063095ea7b31461043657610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610b87565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103ca5781810151838201526020016103b2565b50505050905090810190601f1680156103f75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041157600080fd5b5061041a610c1d565b604080516001600160a01b039092168252519081900360200190f35b34801561044257600080fd5b5061046f6004803603604081101561045957600080fd5b506001600160a01b038135169060200135610c2c565b604080519115158252519081900360200190f35b34801561048f57600080fd5b50610498610c93565b60408051918252519081900360200190f35b3480156104b657600080fd5b50610498610c99565b3480156104cb57600080fd5b50610498610c9f565b3480156104e057600080fd5b5061046f600480360360608110156104f757600080fd5b506001600160a01b03813581169160208101359091169060400135610ca5565b34801561052357600080fd5b50610498610d7f565b34801561053857600080fd5b50610498610dd9565b34801561054d57600080fd5b506105716004803603604081101561056457600080fd5b5080359060200135610ddf565b005b34801561057f57600080fd5b50610498610e60565b34801561059457600080fd5b50610571600480360360208110156105ab57600080fd5b50356001600160a01b0316610e65565b3480156105c757600080fd5b506105d0610e98565b6040805160ff9092168252519081900360200190f35b3480156105f257600080fd5b50610498610ea1565b34801561060757600080fd5b50610498610ea7565b34801561061c57600080fd5b506105716004803603604081101561063357600080fd5b506001600160a01b0381351690602001351515610ead565b34801561065757600080fd5b5061046f6004803603604081101561066e57600080fd5b506001600160a01b038135169060200135610f2d565b34801561069057600080fd5b50610498610fc0565b3480156106a557600080fd5b5061046f600480360360208110156106bc57600080fd5b50356001600160a01b0316610fc6565b3480156106d857600080fd5b5061041a610fdb565b3480156106ed57600080fd5b50610498610fea565b34801561070257600080fd5b506105d0610ff0565b34801561071757600080fd5b5061046f610ff5565b34801561072c57600080fd5b5061046f611005565b34801561074157600080fd5b506104986004803603602081101561075857600080fd5b50356001600160a01b0316611015565b34801561077457600080fd5b5061057161103d565b34801561078957600080fd5b5061057161109d565b34801561079e57600080fd5b5061041a611107565b3480156107b357600080fd5b5061046f611116565b3480156107c857600080fd5b50610571600480360360208110156107df57600080fd5b50356001600160a01b0316611127565b3480156107fb57600080fd5b5061041a61115c565b34801561081057600080fd5b5061046f611170565b34801561082557600080fd5b50610390611186565b34801561083a57600080fd5b506104986111e6565b34801561084f57600080fd5b506104986111ec565b34801561086457600080fd5b506104986111f2565b34801561087957600080fd5b506105716004803603602081101561089057600080fd5b50356111f8565b3480156108a357600080fd5b5061041a611265565b3480156108b857600080fd5b5061046f600480360360408110156108cf57600080fd5b506001600160a01b038135169060200135611274565b3480156108f157600080fd5b5061041a61135d565b34801561090657600080fd5b5061046f6004803603604081101561091d57600080fd5b506001600160a01b03813516906020013561136c565b34801561093f57600080fd5b5061046f611398565b34801561095457600080fd5b506105716113a8565b34801561096957600080fd5b5061041a6115d5565b34801561097e57600080fd5b506104986115e4565b34801561099357600080fd5b50610571600480360360208110156109aa57600080fd5b503515156115ea565b3480156109bf57600080fd5b5061046f600480360360208110156109d657600080fd5b50356001600160a01b031661163c565b3480156109f257600080fd5b5061049860048036036020811015610a0957600080fd5b503561165a565b348015610a1c57600080fd5b5061057160048036036060811015610a3357600080fd5b506001600160a01b0381358116916020810135821691604090910135166116ae565b348015610a6157600080fd5b506104986116fe565b348015610a7657600080fd5b5061049860048036036040811015610a8d57600080fd5b506001600160a01b0381358116916020013516611704565b348015610ab157600080fd5b5061057160048036036020811015610ac857600080fd5b5035151561172f565b348015610add57600080fd5b5061057160048036036020811015610af457600080fd5b50356001600160a01b0316611782565b348015610b1057600080fd5b5061057160048036036040811015610b2757600080fd5b506001600160a01b038135169060200135151561179c565b348015610b4b57600080fd5b5061041a6118df565b348015610b6057600080fd5b5061046f60048036036020811015610b7757600080fd5b50356001600160a01b03166118ee565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c135780601f10610be857610100808354040283529160200191610c13565b820191906000526020600020905b815481529060010190602001808311610bf657829003601f168201915b5050505050905090565b600f546001600160a01b031681565b336000818152601c602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b600b5481565b60195490565b600a5481565b6000826001600160a01b038116610cbb57600080fd5b6001600160a01b0385166000908152601c6020908152604080832033845290915290205460001914610d68576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601c82528381203382529091529190912054610d4391859061199f565b6001600160a01b0386166000908152601c602090815260408083203384529091529020555b610d73858585611a36565b50600195945050505050565b601a54600d546001600160a01b039081166000908152601b602052604080822054600c5490931682528120549092610dd4929091610dce9190610dc8906325878aff1990611dc0565b90611dc0565b9061195d565b905090565b60085481565b610de7611170565b610df057600080fd5b601054604080516316a4744b60e11b8152600481018590526024810184905290516001600160a01b0390921691632d48e8969160448082019260009290919082900301818387803b158015610e4457600080fd5b505af1158015610e58573d6000803e3d6000fd5b505050505050565b600581565b610e6d611170565b610e7657600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60025460ff1690565b60175481565b60001981565b610eb5611170565b610ebe57600080fd5b610ec782611e02565b610f025760405162461bcd60e51b815260040180806020018281038252603b815260200180612ac5603b913960400191505060405180910390fd5b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b336000908152601c602090815260408083206001600160a01b0386168452909152812054610f5b9083611903565b336000818152601c602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60195481565b601e6020526000908152604090205460ff1681565b6003546001600160a01b031681565b60075481565b600781565b601554600160b01b900460ff1681565b601354600160a01b900460ff1681565b601a546001600160a01b0382166000908152601b60205260408120549091610c8d919061195d565b611045611170565b61104e57600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b601560009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110ed57600080fd5b505af1158015611101573d6000803e3d6000fd5b50505050565b6011546001600160a01b031681565b601554600160a01b900460ff161590565b61112f611170565b61113857600080fd5b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b0316331490565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c135780601f10610be857610100808354040283529160200191610c13565b60055481565b60185481565b60165481565b611200611170565b61120957600080fd5b620b71b08110611260576040805162461bcd60e51b815260206004820152601d60248201527f476173206d757374206265206c6f776572207468616e20373530303030000000604482015290519081900360640190fd5b601255565b6013546001600160a01b031681565b336000908152601c602090815260408083206001600160a01b03861684529091528120548083106112c857336000908152601c602090815260408083206001600160a01b03881684529091528120556112f7565b6112d28184611dc0565b336000908152601c602090815260408083206001600160a01b03891684529091529020555b336000818152601c602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6015546001600160a01b031681565b6000826001600160a01b03811661138257600080fd5b61138d338585611a36565b506001949350505050565b601554600160a81b900460ff1681565b6015805460ff60a01b1916600160a01b1790556113c3611170565b6113cc57600080fd5b601a54306000908152601b602052604081205490916113eb919061195d565b90506000811161142c5760405162461bcd60e51b8152600401808060200182810382526037815260200180612b216037913960400191505060405180910390fd5b6040805160028082526060808301845292602083019080368337019050509050308160008151811061145a57fe5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156114ae57600080fd5b505afa1580156114c2573d6000803e3d6000fd5b505050506040513d60208110156114d857600080fd5b50518151829060019081106114e957fe5b6001600160a01b03928316602091820292909201810191909152601454600f5460405163791ac94760e01b81526004810187815260006024830181905292861660648301819052426084840181905260a060448501908152895160a48601528951969098169763791ac947978b978b969495939460c4019187810191028083838b5b8381101561158357818101518382015260200161156b565b505050509050019650505050505050600060405180830381600087803b1580156115ac57600080fd5b505af11580156115c0573d6000803e3d6000fd5b50506015805460ff60a01b1916905550505050565b600e546001600160a01b031681565b60065481565b6115f2611170565b6115fb57600080fd5b8015611621576015805460ff60b01b1916600160b01b8315150217905542601855611639565b6015805460ff60b01b1916600160b01b831515021790555b50565b6001600160a01b031660009081526004602052604090205460ff1690565b601a546015546001600160a01b03166000908152601b6020526040812054909182916116859161195d565b90506116a7611692610d7f565b610dce6116a0846002611e08565b8690611e08565b9392505050565b6116b6611170565b6116bf57600080fd5b600e80546001600160a01b039485166001600160a01b031991821617909155600f80549385169382169390931790925560138054919093169116179055565b60095481565b6001600160a01b039182166000908152601c6020908152604080832093909416825291909152205490565b611737611170565b61174057600080fd5b8015611766576015805460ff60a81b1916600160a81b8315150217905542601755611639565b60158054821515600160a81b0260ff60a81b1990911617905550565b61178a611170565b61179357600080fd5b61163981611e61565b6117a4611170565b6117ad57600080fd5b6001600160a01b03821630148015906117d457506015546001600160a01b03838116911614155b6117dd57600080fd5b6001600160a01b0382166000908152601e60205260409020805460ff1916821580159190911790915561187a5760105460408051630a5b654b60e11b81526001600160a01b03858116600483015260006024830181905292519316926314b6ca969260448084019391929182900301818387803b15801561185d57600080fd5b505af1158015611871573d6000803e3d6000fd5b505050506118db565b6010546001600160a01b03166314b6ca968361189581611015565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610e4457600080fd5b5050565b6014546001600160a01b031681565b601d6020526000908152604090205460ff1681565b6000828201838110156116a7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006116a783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611edb565b60008184841115611a2e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119f35781810151838201526020016119db565b50505050905090810190601f168015611a205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0383166000908152601d602052604081205460ff16158015611a7857506001600160a01b0383166000908152601d602052604090205460ff16155b611ab8576040805162461bcd60e51b815260206004820152600c60248201526b1a5b97d89b1858dadb1a5cdd60a21b604482015290519081900360640190fd5b601554600160a01b900460ff1615611adc57611ad5848484611f40565b90506116a7565b611ae4611fd2565b15611af157611af1612038565b611af96121d1565b15611b0657611b06612224565b611b0e612561565b15611b1b57611b1b61258c565b6000611b32601a5484611e0890919063ffffffff16565b6001600160a01b0386166000908152601b6020526040902054909150611b589082611dc0565b6001600160a01b0386166000908152601b6020526040812091909155611b7e86866128a8565b611b885781611b93565b611b938686846128fc565b6001600160a01b0386166000908152601b6020526040902054909150611bb99082611903565b6001600160a01b038087166000908152601b60209081526040808320949094559189168152601e909152205460ff16611c60576010546001600160a01b03166314b6ca9687611c0781611015565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611c4d57600080fd5b505af1925050508015611c5e575060015b505b6001600160a01b0385166000908152601e602052604090205460ff16611cf4576010546001600160a01b03166314b6ca9686611c9b81611015565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611ce157600080fd5b505af1925050508015611cf2575060015b505b601054601254604080516001624d3b8760e01b031981526004810192909252516001600160a01b039092169163ffb2c4799160248082019260009290919082900301818387803b158015611d4757600080fd5b505af1925050508015611d58575060015b50846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611da3601a548561195d90919063ffffffff16565b60408051918252519081900360200190a350600195945050505050565b60006116a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061199f565b3b151590565b600082611e1757506000610c8d565b82820282848281611e2457fe5b04146116a75760405162461bcd60e51b8152600401808060200182810382526021815260200180612b006021913960400191505060405180910390fd5b6001600160a01b038116611e7457600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60008183611f2a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156119f35781810151838201526020016119db565b506000838581611f3657fe5b0495945050505050565b600080611f58601a5484611e0890919063ffffffff16565b6001600160a01b0386166000908152601b6020526040902054909150611f7e9082611dc0565b6001600160a01b038087166000908152601b60205260408082209390935590861681522054611fad9082611903565b6001600160a01b0385166000908152601b602052604090205550600190509392505050565b601554600090600160a81b900460ff168015611ff6575060195466012795f58d5000115b801561200d57506015546001600160a01b03163314155b80156120235750601554600160a01b900460ff16155b8015610dd45750506017546103840142101590565b601554600160a01b900460ff161561204f576121cf565b601654601754600091429081039190038261206c8261038461195d565b9050600061207b82600f611e08565b90506301e133808410156120935761093394506120cb565b6301e1338084106120a75760d394506120cb565b6302d1cd4084106120bb57600e94506120cb565b630d28688084106120cb57600294505b60005b828110156120fe576120f362989680610dce6120ea828a611903565b60195490611e08565b6019556001016120ce565b50601954612112906325878aff199061195d565b601a5561212d61212483610384611e08565b60175490611903565b6017556003546040805160016209351760e01b0319815290516001600160a01b039092169163fff6cae99160048082019260009290919082900301818387803b15801561217957600080fd5b505af115801561218d573d6000803e3d6000fd5b505060195460408051918252518493507f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f292509081900360200190a250505050505b565b601554600090600160b01b900460ff1680156121f75750601554600160a01b900460ff16155b801561220e57506015546001600160a01b03163314155b8015610dd45750506018546202a3000142101590565b6015805460ff60a01b1916600160a01b179055601a54600e546001600160a01b03166000908152601b60205260408120549091612261919061195d565b600e546001600160a01b03166000908152601b6020526040808220543083529120549192506122909190611903565b306000908152601b602052604080822092909255600e546001600160a01b031681529081208190556122c382600261195d565b905060006122d18383611dc0565b9050806122e057505050612552565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061230e57fe5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561236257600080fd5b505afa158015612376573d6000803e3d6000fd5b505050506040513d602081101561238c57600080fd5b505181518290600190811061239d57fe5b6001600160a01b0392831660209182029290920181019190915260145460405163791ac94760e01b8152600481018681526000602483018190523060648401819052426084850181905260a060448601908152895160a487015289514799979097169763791ac947978c9795968c9690939260c49091019187820191028083838b5b8381101561243757818101518382015260200161241f565b505050509050019650505050505050600060405180830381600087803b15801561246057600080fd5b505af1158015612474573d6000803e3d6000fd5b50505050600061248d8247611dc090919063ffffffff16565b905060008511801561249f5750600081115b1561254757601454600e546040805163f305d71960e01b81523060048201526024810189905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b15801561251957600080fd5b505af115801561252d573d6000803e3d6000fd5b50505050506040513d606081101561254457600080fd5b50505b505042601855505050505b6015805460ff60a01b19169055565b601554600090600160a01b900460ff16158015610dd45750506015546001600160a01b031633141590565b6015805460ff60a01b1916600160a01b179055601a54306000908152601b602052604081205490916125be919061195d565b9050806125cb5750612552565b6040805160028082526060808301845247939092919060208301908036833701905050905030816000815181106125fe57fe5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561265257600080fd5b505afa158015612666573d6000803e3d6000fd5b505050506040513d602081101561267c57600080fd5b505181518290600190811061268d57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601460009054906101000a90046001600160a01b03166001600160a01b031663791ac9478460008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561274757818101518382015260200161272f565b505050509050019650505050505050600060405180830381600087803b15801561277057600080fd5b505af1158015612784573d6000803e3d6000fd5b50505050600061279d8347611dc090919063ffffffff16565b600f546007546006549293506000926001600160a01b03909216916127d4916127c69190611903565b600654610dce908690611e08565b60405161753091906000818181858888f193505050503d8060008114612816576040519150601f19603f3d011682016040523d82523d6000602084013e61281b565b606091505b50506010546007546006549293506001600160a01b039091169163d0e30db0916128569161284891611903565b600754610dce908790611e08565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561288157600080fd5b505af193505050508015612893575060015b5050505050506015805460ff60a01b19169055565b6015546000906001600160a01b03848116911614806128d457506015546001600160a01b038381169116145b80156116a7575050506001600160a01b031660009081526004602052604090205460ff161590565b600a5460065460155460009291906001600160a01b038681169116141561294857600854600a5461292c91611903565b915061294560085460065461190390919063ffffffff16565b90505b600061296983612963600b548861195d90919063ffffffff16565b90611e08565b90506129aa612989600954612963600b548961195d90919063ffffffff16565b6013546001600160a01b03166000908152601b602052604090205490611903565b6013546001600160a01b03166000908152601b60205260409020556007546129ff906129e9906129db908590611903565b600b5461296390899061195d565b306000908152601b602052604090205490611903565b306000908152601b6020526040902055600554600b54612a4991612a289161296390899061195d565b600e546001600160a01b03166000908152601b602052604090205490611903565b600e546001600160a01b039081166000908152601b6020526040902091909155601a5430918916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a9e90859061195d565b60408051918252519081900360200190a3612ab98582611dc0565b97965050505050505056fe6f6e6c7920636f6e747261637420616464726573732c206e6f7420616c6c6f7765642065787465726e616c6c79206f776e6564206163636f756e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775468657265206973206e6f2043726f6d61726b657420546f6b656e206465706f736974656420696e20746f6b656e20636f6e7472616374a2646970667358221220e9eac1905e34d948a92f80e43c8372f86dab39e298b571d9056f5a3d04d7204d64736f6c63430007040033
Deployed Bytecode
0x60806040526004361061036f5760003560e01c806383b4ac68116101c6578063bd595581116100f7578063dcb1aad211610095578063f2fde38b1161006f578063f2fde38b14610ad1578063f708a64f14610b04578063f887ea4014610b3f578063f9f92be414610b5457610376565b8063dcb1aad214610a55578063dd62ed3e14610a6a578063e15beb8014610aa557610376565b8063cfbac92f116100d1578063cfbac92f14610987578063d4399790146109b3578063d51ed1c8146109e6578063d7c0103214610a1057610376565b8063bd59558114610948578063ca33e64c1461095d578063cc32d1761461097257610376565b80639b87676c11610164578063a457c2d71161013e578063a457c2d7146108ac578063a8aa1b31146108e5578063a9059cbb146108fa578063afb9cf6d1461093357610376565b80639b87676c146108585780639d1944f51461086d578063a44f2b0e1461089757610376565b80638f32d59b116101a05780638f32d59b1461080457806395d89b411461081957806398118cb41461082e5780639b2912cc1461084357610376565b806383b4ac68146107a7578063854cff2f146107bc5780638da5cb5b146107ef57610376565b806333a581d2116102a05780635a604c521161023e57806370a082311161021857806370a0823114610735578063715018a614610768578063753d02a11461077d5780637d17757e1461079257610376565b80635a604c52146106f65780636912652c1461070b5780636ddd17131461072057610376565b80633eaaf86b1161027a5780633eaaf86b146106845780634355855a146106995780634d709adf146106cc578063514c3f4d146106e157610376565b806333a581d2146105fb57806337c9be8714610610578063395093511461064b57610376565b80632b112e491161030d5780632e0f2625116102e75780632e0f2625146105735780632f34d28214610588578063313ce567146105bb57806332b75683146105e657610376565b80632b112e49146105175780632b14ca561461052c5780632d48e8961461054157610376565b8063180b0d7e11610349578063180b0d7e1461048357806318160ddd146104aa5780631df4ccfc146104bf57806323b872dd146104d457610376565b806306fdde031461037b57806308b1fd8f14610405578063095ea7b31461043657610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610b87565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103ca5781810151838201526020016103b2565b50505050905090810190601f1680156103f75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041157600080fd5b5061041a610c1d565b604080516001600160a01b039092168252519081900360200190f35b34801561044257600080fd5b5061046f6004803603604081101561045957600080fd5b506001600160a01b038135169060200135610c2c565b604080519115158252519081900360200190f35b34801561048f57600080fd5b50610498610c93565b60408051918252519081900360200190f35b3480156104b657600080fd5b50610498610c99565b3480156104cb57600080fd5b50610498610c9f565b3480156104e057600080fd5b5061046f600480360360608110156104f757600080fd5b506001600160a01b03813581169160208101359091169060400135610ca5565b34801561052357600080fd5b50610498610d7f565b34801561053857600080fd5b50610498610dd9565b34801561054d57600080fd5b506105716004803603604081101561056457600080fd5b5080359060200135610ddf565b005b34801561057f57600080fd5b50610498610e60565b34801561059457600080fd5b50610571600480360360208110156105ab57600080fd5b50356001600160a01b0316610e65565b3480156105c757600080fd5b506105d0610e98565b6040805160ff9092168252519081900360200190f35b3480156105f257600080fd5b50610498610ea1565b34801561060757600080fd5b50610498610ea7565b34801561061c57600080fd5b506105716004803603604081101561063357600080fd5b506001600160a01b0381351690602001351515610ead565b34801561065757600080fd5b5061046f6004803603604081101561066e57600080fd5b506001600160a01b038135169060200135610f2d565b34801561069057600080fd5b50610498610fc0565b3480156106a557600080fd5b5061046f600480360360208110156106bc57600080fd5b50356001600160a01b0316610fc6565b3480156106d857600080fd5b5061041a610fdb565b3480156106ed57600080fd5b50610498610fea565b34801561070257600080fd5b506105d0610ff0565b34801561071757600080fd5b5061046f610ff5565b34801561072c57600080fd5b5061046f611005565b34801561074157600080fd5b506104986004803603602081101561075857600080fd5b50356001600160a01b0316611015565b34801561077457600080fd5b5061057161103d565b34801561078957600080fd5b5061057161109d565b34801561079e57600080fd5b5061041a611107565b3480156107b357600080fd5b5061046f611116565b3480156107c857600080fd5b50610571600480360360208110156107df57600080fd5b50356001600160a01b0316611127565b3480156107fb57600080fd5b5061041a61115c565b34801561081057600080fd5b5061046f611170565b34801561082557600080fd5b50610390611186565b34801561083a57600080fd5b506104986111e6565b34801561084f57600080fd5b506104986111ec565b34801561086457600080fd5b506104986111f2565b34801561087957600080fd5b506105716004803603602081101561089057600080fd5b50356111f8565b3480156108a357600080fd5b5061041a611265565b3480156108b857600080fd5b5061046f600480360360408110156108cf57600080fd5b506001600160a01b038135169060200135611274565b3480156108f157600080fd5b5061041a61135d565b34801561090657600080fd5b5061046f6004803603604081101561091d57600080fd5b506001600160a01b03813516906020013561136c565b34801561093f57600080fd5b5061046f611398565b34801561095457600080fd5b506105716113a8565b34801561096957600080fd5b5061041a6115d5565b34801561097e57600080fd5b506104986115e4565b34801561099357600080fd5b50610571600480360360208110156109aa57600080fd5b503515156115ea565b3480156109bf57600080fd5b5061046f600480360360208110156109d657600080fd5b50356001600160a01b031661163c565b3480156109f257600080fd5b5061049860048036036020811015610a0957600080fd5b503561165a565b348015610a1c57600080fd5b5061057160048036036060811015610a3357600080fd5b506001600160a01b0381358116916020810135821691604090910135166116ae565b348015610a6157600080fd5b506104986116fe565b348015610a7657600080fd5b5061049860048036036040811015610a8d57600080fd5b506001600160a01b0381358116916020013516611704565b348015610ab157600080fd5b5061057160048036036020811015610ac857600080fd5b5035151561172f565b348015610add57600080fd5b5061057160048036036020811015610af457600080fd5b50356001600160a01b0316611782565b348015610b1057600080fd5b5061057160048036036040811015610b2757600080fd5b506001600160a01b038135169060200135151561179c565b348015610b4b57600080fd5b5061041a6118df565b348015610b6057600080fd5b5061046f60048036036020811015610b7757600080fd5b50356001600160a01b03166118ee565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c135780601f10610be857610100808354040283529160200191610c13565b820191906000526020600020905b815481529060010190602001808311610bf657829003601f168201915b5050505050905090565b600f546001600160a01b031681565b336000818152601c602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b600b5481565b60195490565b600a5481565b6000826001600160a01b038116610cbb57600080fd5b6001600160a01b0385166000908152601c6020908152604080832033845290915290205460001914610d68576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601c82528381203382529091529190912054610d4391859061199f565b6001600160a01b0386166000908152601c602090815260408083203384529091529020555b610d73858585611a36565b50600195945050505050565b601a54600d546001600160a01b039081166000908152601b602052604080822054600c5490931682528120549092610dd4929091610dce9190610dc8906325878aff1990611dc0565b90611dc0565b9061195d565b905090565b60085481565b610de7611170565b610df057600080fd5b601054604080516316a4744b60e11b8152600481018590526024810184905290516001600160a01b0390921691632d48e8969160448082019260009290919082900301818387803b158015610e4457600080fd5b505af1158015610e58573d6000803e3d6000fd5b505050505050565b600581565b610e6d611170565b610e7657600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60025460ff1690565b60175481565b60001981565b610eb5611170565b610ebe57600080fd5b610ec782611e02565b610f025760405162461bcd60e51b815260040180806020018281038252603b815260200180612ac5603b913960400191505060405180910390fd5b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b336000908152601c602090815260408083206001600160a01b0386168452909152812054610f5b9083611903565b336000818152601c602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60195481565b601e6020526000908152604090205460ff1681565b6003546001600160a01b031681565b60075481565b600781565b601554600160b01b900460ff1681565b601354600160a01b900460ff1681565b601a546001600160a01b0382166000908152601b60205260408120549091610c8d919061195d565b611045611170565b61104e57600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b601560009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110ed57600080fd5b505af1158015611101573d6000803e3d6000fd5b50505050565b6011546001600160a01b031681565b601554600160a01b900460ff161590565b61112f611170565b61113857600080fd5b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b0316331490565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c135780601f10610be857610100808354040283529160200191610c13565b60055481565b60185481565b60165481565b611200611170565b61120957600080fd5b620b71b08110611260576040805162461bcd60e51b815260206004820152601d60248201527f476173206d757374206265206c6f776572207468616e20373530303030000000604482015290519081900360640190fd5b601255565b6013546001600160a01b031681565b336000908152601c602090815260408083206001600160a01b03861684529091528120548083106112c857336000908152601c602090815260408083206001600160a01b03881684529091528120556112f7565b6112d28184611dc0565b336000908152601c602090815260408083206001600160a01b03891684529091529020555b336000818152601c602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6015546001600160a01b031681565b6000826001600160a01b03811661138257600080fd5b61138d338585611a36565b506001949350505050565b601554600160a81b900460ff1681565b6015805460ff60a01b1916600160a01b1790556113c3611170565b6113cc57600080fd5b601a54306000908152601b602052604081205490916113eb919061195d565b90506000811161142c5760405162461bcd60e51b8152600401808060200182810382526037815260200180612b216037913960400191505060405180910390fd5b6040805160028082526060808301845292602083019080368337019050509050308160008151811061145a57fe5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156114ae57600080fd5b505afa1580156114c2573d6000803e3d6000fd5b505050506040513d60208110156114d857600080fd5b50518151829060019081106114e957fe5b6001600160a01b03928316602091820292909201810191909152601454600f5460405163791ac94760e01b81526004810187815260006024830181905292861660648301819052426084840181905260a060448501908152895160a48601528951969098169763791ac947978b978b969495939460c4019187810191028083838b5b8381101561158357818101518382015260200161156b565b505050509050019650505050505050600060405180830381600087803b1580156115ac57600080fd5b505af11580156115c0573d6000803e3d6000fd5b50506015805460ff60a01b1916905550505050565b600e546001600160a01b031681565b60065481565b6115f2611170565b6115fb57600080fd5b8015611621576015805460ff60b01b1916600160b01b8315150217905542601855611639565b6015805460ff60b01b1916600160b01b831515021790555b50565b6001600160a01b031660009081526004602052604090205460ff1690565b601a546015546001600160a01b03166000908152601b6020526040812054909182916116859161195d565b90506116a7611692610d7f565b610dce6116a0846002611e08565b8690611e08565b9392505050565b6116b6611170565b6116bf57600080fd5b600e80546001600160a01b039485166001600160a01b031991821617909155600f80549385169382169390931790925560138054919093169116179055565b60095481565b6001600160a01b039182166000908152601c6020908152604080832093909416825291909152205490565b611737611170565b61174057600080fd5b8015611766576015805460ff60a81b1916600160a81b8315150217905542601755611639565b60158054821515600160a81b0260ff60a81b1990911617905550565b61178a611170565b61179357600080fd5b61163981611e61565b6117a4611170565b6117ad57600080fd5b6001600160a01b03821630148015906117d457506015546001600160a01b03838116911614155b6117dd57600080fd5b6001600160a01b0382166000908152601e60205260409020805460ff1916821580159190911790915561187a5760105460408051630a5b654b60e11b81526001600160a01b03858116600483015260006024830181905292519316926314b6ca969260448084019391929182900301818387803b15801561185d57600080fd5b505af1158015611871573d6000803e3d6000fd5b505050506118db565b6010546001600160a01b03166314b6ca968361189581611015565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610e4457600080fd5b5050565b6014546001600160a01b031681565b601d6020526000908152604090205460ff1681565b6000828201838110156116a7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006116a783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611edb565b60008184841115611a2e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119f35781810151838201526020016119db565b50505050905090810190601f168015611a205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0383166000908152601d602052604081205460ff16158015611a7857506001600160a01b0383166000908152601d602052604090205460ff16155b611ab8576040805162461bcd60e51b815260206004820152600c60248201526b1a5b97d89b1858dadb1a5cdd60a21b604482015290519081900360640190fd5b601554600160a01b900460ff1615611adc57611ad5848484611f40565b90506116a7565b611ae4611fd2565b15611af157611af1612038565b611af96121d1565b15611b0657611b06612224565b611b0e612561565b15611b1b57611b1b61258c565b6000611b32601a5484611e0890919063ffffffff16565b6001600160a01b0386166000908152601b6020526040902054909150611b589082611dc0565b6001600160a01b0386166000908152601b6020526040812091909155611b7e86866128a8565b611b885781611b93565b611b938686846128fc565b6001600160a01b0386166000908152601b6020526040902054909150611bb99082611903565b6001600160a01b038087166000908152601b60209081526040808320949094559189168152601e909152205460ff16611c60576010546001600160a01b03166314b6ca9687611c0781611015565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611c4d57600080fd5b505af1925050508015611c5e575060015b505b6001600160a01b0385166000908152601e602052604090205460ff16611cf4576010546001600160a01b03166314b6ca9686611c9b81611015565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611ce157600080fd5b505af1925050508015611cf2575060015b505b601054601254604080516001624d3b8760e01b031981526004810192909252516001600160a01b039092169163ffb2c4799160248082019260009290919082900301818387803b158015611d4757600080fd5b505af1925050508015611d58575060015b50846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611da3601a548561195d90919063ffffffff16565b60408051918252519081900360200190a350600195945050505050565b60006116a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061199f565b3b151590565b600082611e1757506000610c8d565b82820282848281611e2457fe5b04146116a75760405162461bcd60e51b8152600401808060200182810382526021815260200180612b006021913960400191505060405180910390fd5b6001600160a01b038116611e7457600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60008183611f2a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156119f35781810151838201526020016119db565b506000838581611f3657fe5b0495945050505050565b600080611f58601a5484611e0890919063ffffffff16565b6001600160a01b0386166000908152601b6020526040902054909150611f7e9082611dc0565b6001600160a01b038087166000908152601b60205260408082209390935590861681522054611fad9082611903565b6001600160a01b0385166000908152601b602052604090205550600190509392505050565b601554600090600160a81b900460ff168015611ff6575060195466012795f58d5000115b801561200d57506015546001600160a01b03163314155b80156120235750601554600160a01b900460ff16155b8015610dd45750506017546103840142101590565b601554600160a01b900460ff161561204f576121cf565b601654601754600091429081039190038261206c8261038461195d565b9050600061207b82600f611e08565b90506301e133808410156120935761093394506120cb565b6301e1338084106120a75760d394506120cb565b6302d1cd4084106120bb57600e94506120cb565b630d28688084106120cb57600294505b60005b828110156120fe576120f362989680610dce6120ea828a611903565b60195490611e08565b6019556001016120ce565b50601954612112906325878aff199061195d565b601a5561212d61212483610384611e08565b60175490611903565b6017556003546040805160016209351760e01b0319815290516001600160a01b039092169163fff6cae99160048082019260009290919082900301818387803b15801561217957600080fd5b505af115801561218d573d6000803e3d6000fd5b505060195460408051918252518493507f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f292509081900360200190a250505050505b565b601554600090600160b01b900460ff1680156121f75750601554600160a01b900460ff16155b801561220e57506015546001600160a01b03163314155b8015610dd45750506018546202a3000142101590565b6015805460ff60a01b1916600160a01b179055601a54600e546001600160a01b03166000908152601b60205260408120549091612261919061195d565b600e546001600160a01b03166000908152601b6020526040808220543083529120549192506122909190611903565b306000908152601b602052604080822092909255600e546001600160a01b031681529081208190556122c382600261195d565b905060006122d18383611dc0565b9050806122e057505050612552565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061230e57fe5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561236257600080fd5b505afa158015612376573d6000803e3d6000fd5b505050506040513d602081101561238c57600080fd5b505181518290600190811061239d57fe5b6001600160a01b0392831660209182029290920181019190915260145460405163791ac94760e01b8152600481018681526000602483018190523060648401819052426084850181905260a060448601908152895160a487015289514799979097169763791ac947978c9795968c9690939260c49091019187820191028083838b5b8381101561243757818101518382015260200161241f565b505050509050019650505050505050600060405180830381600087803b15801561246057600080fd5b505af1158015612474573d6000803e3d6000fd5b50505050600061248d8247611dc090919063ffffffff16565b905060008511801561249f5750600081115b1561254757601454600e546040805163f305d71960e01b81523060048201526024810189905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b15801561251957600080fd5b505af115801561252d573d6000803e3d6000fd5b50505050506040513d606081101561254457600080fd5b50505b505042601855505050505b6015805460ff60a01b19169055565b601554600090600160a01b900460ff16158015610dd45750506015546001600160a01b031633141590565b6015805460ff60a01b1916600160a01b179055601a54306000908152601b602052604081205490916125be919061195d565b9050806125cb5750612552565b6040805160028082526060808301845247939092919060208301908036833701905050905030816000815181106125fe57fe5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561265257600080fd5b505afa158015612666573d6000803e3d6000fd5b505050506040513d602081101561267c57600080fd5b505181518290600190811061268d57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601460009054906101000a90046001600160a01b03166001600160a01b031663791ac9478460008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561274757818101518382015260200161272f565b505050509050019650505050505050600060405180830381600087803b15801561277057600080fd5b505af1158015612784573d6000803e3d6000fd5b50505050600061279d8347611dc090919063ffffffff16565b600f546007546006549293506000926001600160a01b03909216916127d4916127c69190611903565b600654610dce908690611e08565b60405161753091906000818181858888f193505050503d8060008114612816576040519150601f19603f3d011682016040523d82523d6000602084013e61281b565b606091505b50506010546007546006549293506001600160a01b039091169163d0e30db0916128569161284891611903565b600754610dce908790611e08565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561288157600080fd5b505af193505050508015612893575060015b5050505050506015805460ff60a01b19169055565b6015546000906001600160a01b03848116911614806128d457506015546001600160a01b038381169116145b80156116a7575050506001600160a01b031660009081526004602052604090205460ff161590565b600a5460065460155460009291906001600160a01b038681169116141561294857600854600a5461292c91611903565b915061294560085460065461190390919063ffffffff16565b90505b600061296983612963600b548861195d90919063ffffffff16565b90611e08565b90506129aa612989600954612963600b548961195d90919063ffffffff16565b6013546001600160a01b03166000908152601b602052604090205490611903565b6013546001600160a01b03166000908152601b60205260409020556007546129ff906129e9906129db908590611903565b600b5461296390899061195d565b306000908152601b602052604090205490611903565b306000908152601b6020526040902055600554600b54612a4991612a289161296390899061195d565b600e546001600160a01b03166000908152601b602052604090205490611903565b600e546001600160a01b039081166000908152601b6020526040902091909155601a5430918916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a9e90859061195d565b60408051918252519081900360200190a3612ab98582611dc0565b97965050505050505056fe6f6e6c7920636f6e747261637420616464726573732c206e6f7420616c6c6f7765642065787465726e616c6c79206f776e6564206163636f756e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775468657265206973206e6f2043726f6d61726b657420546f6b656e206465706f736974656420696e20746f6b656e20636f6e7472616374a2646970667358221220e9eac1905e34d948a92f80e43c8372f86dab39e298b571d9056f5a3d04d7204d64736f6c63430007040033
Deployed ByteCode Sourcemap
19695:16985:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19419:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20858:31;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;20858:31:0;;;;;;;;;;;;;;33658:241;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33658:241:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20640:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;36213:102;;;;;;;;;;;;;:::i;20516:117::-;;;;;;;;;;;;;:::i;24838:453::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24838:453:0;;;;;;;;;;;;;;;;;:::i;34754:203::-;;;;;;;;;;;;;:::i;20441:27::-;;;;;;;;;;;;;:::i;34388:182::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34388:182:0;;;;;;;:::i;:::-;;20083:36;;;;;;;;;;;;;:::i;36093:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36093:112:0;-1:-1:-1;;;;;36093:112:0;;:::i;19605:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21566:31;;;;;;;;;;;;;:::i;20126:49::-;;;;;;;;;;;;;:::i;35853:232::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35853:232:0;;;;;;;;;;:::i;33256:394::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33256:394:0;;;;;;;;:::i;21647:27::-;;;;;;;;;;;;;:::i;21905:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21905:48:0;-1:-1:-1;;;;;21905:48:0;;:::i;19892:36::-;;;;;;;;;;;;;:::i;20399:35::-;;;;;;;;;;;;;:::i;20182:39::-;;;;;;;;;;;;;:::i;21488:29::-;;;;;;;;;;;;;:::i;21052:30::-;;;;;;;;;;;;;:::i;36323:144::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36323:144:0;-1:-1:-1;;;;;36323:144:0;;:::i;18630:126::-;;;;;;;;;;;;;:::i;35058:79::-;;;;;;;;;;;;;:::i;20937:35::-;;;;;;;;;;;;;:::i;34965:85::-;;;;;;;;;;;;;:::i;35744:101::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35744:101:0;-1:-1:-1;;;;;35744:101:0;;:::i;18365:79::-;;;;;;;;;;;;;:::i;18530:92::-;;;;;;;;;;;;;:::i;19510:87::-;;;;;;;;;;;;;:::i;20322:32::-;;;;;;;;;;;;;:::i;21604:36::-;;;;;;;;;;;;;:::i;21524:35::-;;;;;;;;;;;;;:::i;34578:168::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34578:168:0;;:::i;21019:26::-;;;;;;;;;;;;;:::i;32660:588::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32660:588:0;;;;;;;;:::i;21130:19::-;;;;;;;;;;;;;:::i;24631:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24631:199:0;;;;;;;;:::i;21458:23::-;;;;;;;;;;;;;:::i;30563:570::-;;;;;;;;;;;;;:::i;20815:36::-;;;;;;;;;;;;;:::i;20361:31::-;;;;;;;;;;;;;:::i;32214:252::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32214:252:0;;;;:::i;33907:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33907:113:0;-1:-1:-1;;;;;33907:113:0;;:::i;35461:275::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35461:275:0;;:::i;35145:308::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35145:308:0;;;;;;;;;;;;;;;;;;;:::i;20475:34::-;;;;;;;;;;;;;:::i;32474:178::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32474:178:0;;;;;;;;;;:::i;31976:230::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31976:230:0;;;;:::i;18764:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18764:109:0;-1:-1:-1;;;;;18764:109:0;;:::i;34028:352::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34028:352:0;;;;;;;;;;:::i;21089:32::-;;;;;;;;;;;;;:::i;21857:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21857:41:0;-1:-1:-1;;;;;21857:41:0;;:::i;19419:83::-;19489:5;19482:12;;;;;;;;-1:-1:-1;;19482:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19456:13;;19482:12;;19489:5;;19482:12;;19489:5;19482:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19419:83;:::o;20858:31::-;;;-1:-1:-1;;;;;20858:31:0;;:::o;33658:241::-;33789:10;33749:4;33771:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;33771:38:0;;;;;;;;;;;:46;;;33833:36;;;;;;;33749:4;;33771:38;;33789:10;;33833:36;;;;;;;;-1:-1:-1;33887:4:0;33658:241;;;;;:::o;20640:36::-;;;;:::o;36213:102::-;36295:12;;36213:102;:::o;20516:117::-;;;;:::o;24838:453::-;24981:4;24968:2;-1:-1:-1;;;;;20036:18:0;;20028:27;;;;;;-1:-1:-1;;;;;25004:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;25028:10:::1;25004:35:::0;;;;;;;;-1:-1:-1;;25004:50:0::1;25000:221;;25109:100;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;25109:100:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;25109:23:0;::::1;-1:-1:-1::0;25109:23:0;;;:17:::1;:23:::0;;;;;25147:10:::1;25109:63:::0;;;;;;;;;;:100:::1;::::0;25177:5;;25109:67:::1;:100::i;:::-;-1:-1:-1::0;;;;;25071:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;25095:10:::1;25071:35:::0;;;;;;;:138;25000:221:::1;25231:30;25245:4;25251:2;25255:5;25231:13;:30::i;:::-;-1:-1:-1::0;25279:4:0::1;::::0;24838:453;-1:-1:-1;;;;;24838:453:0:o;34754:203::-;34922:16;;34896:4;;-1:-1:-1;;;;;34896:4:0;;;34807:7;34883:18;;;:12;:18;;;;;;;34872:4;;;;;34859:18;;;;;34807:7;;34843:106;;34922:16;;34844:58;;34883:18;34844:34;;-1:-1:-1;;21322:54:0;34844:14;:34::i;:::-;:38;;:58::i;:::-;34843:64;;:106::i;:::-;34827:122;;34754:203;:::o;20441:27::-;;;;:::o;34388:182::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;34497:11:::1;::::0;:65:::1;::::0;;-1:-1:-1;;;34497:65:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;34497:11:0;;::::1;::::0;:35:::1;::::0;:65;;;;;:11:::1;::::0;:65;;;;;;;;:11;;:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34388:182:::0;;:::o;20083:36::-;20118:1;20083:36;:::o;36093:112::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;36156:12:::1;:41:::0;;-1:-1:-1;;;;;;36156:41:0::1;-1:-1:-1::0;;;;;36156:41:0;;;::::1;::::0;;;::::1;::::0;;36093:112::o;19605:83::-;19671:9;;;;19605:83;:::o;21566:31::-;;;;:::o;20126:49::-;-1:-1:-1;;20126:49:0;:::o;35853:232::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;35949:23:::1;35960:11;35949:10;:23::i;:::-;35941:95;;;;-1:-1:-1::0;;;35941:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;36047:22:0;;;::::1;;::::0;;;:9:::1;:22;::::0;;;;:30;;-1:-1:-1;;36047:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35853:232::o;33256:394::-;33429:10;33348:4;33411:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;33411:58:0;;;;;;;;;;:74;;33474:10;33411:62;:74::i;:::-;33388:10;33370:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;33370:38:0;;;;;;;;;;;;:115;;;33501:119;;;;;;33370:38;;33501:119;;;;;;;;;;;-1:-1:-1;33638:4:0;33256:394;;;;:::o;21647:27::-;;;;:::o;21905:48::-;;;;;;;;;;;;;;;:::o;19892:36::-;;;-1:-1:-1;;;;;19892:36:0;;:::o;20399:35::-;;;;:::o;20182:39::-;20220:1;20182:39;:::o;21488:29::-;;;-1:-1:-1;;;21488:29:0;;;;;:::o;21052:30::-;;;-1:-1:-1;;;21052:30:0;;;;;:::o;36323:144::-;36442:16;;-1:-1:-1;;;;;36416:21:0;;36389:7;36416:21;;;:12;:21;;;;;;36389:7;;36416:43;;:21;:25;:43::i;18630:126::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;18711:6:::1;::::0;18692:26:::1;::::0;18711:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;18711:6:0::1;::::0;18692:26:::1;::::0;;;::::1;18729:6;:19:::0;;-1:-1:-1;;;;;;18729:19:0::1;::::0;;18630:126::o;35058:79::-;35117:4;;;;;;;;;-1:-1:-1;;;;;35117:4:0;-1:-1:-1;;;;;35100:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35058:79::o;20937:35::-;;;-1:-1:-1;;;;;20937:35:0;;:::o;34965:85::-;35036:6;;-1:-1:-1;;;35036:6:0;;;;35035:7;;34965:85::o;35744:101::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;-1:-1:-1;;;;;35811:19:0::1;;::::0;;;:12:::1;:19;::::0;;;;:26;;-1:-1:-1;;35811:26:0::1;35833:4;35811:26;::::0;;35744:101::o;18365:79::-;18430:6;;;;;-1:-1:-1;;;;;18430:6:0;;18365:79::o;18530:92::-;18608:6;;;;;-1:-1:-1;;;;;18608:6:0;18594:10;:20;;18530:92::o;19510:87::-;19582:7;19575:14;;;;;;;;-1:-1:-1;;19575:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19549:13;;19575:14;;19582:7;;19575:14;;19582:7;19575:14;;;;;;;;;;;;;;;;;;;;;;;;20322:32;;;;:::o;21604:36::-;;;;:::o;21524:35::-;;;;:::o;34578:168::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;34667:6:::1;34661:3;:12;34653:54;;;::::0;;-1:-1:-1;;;34653:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;34718:14;:20:::0;34578:168::o;21019:26::-;;;-1:-1:-1;;;;;21019:26:0;;:::o;32660:588::-;32816:10;32757:4;32798:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;32798:38:0;;;;;;;;;;32851:27;;;32847:237;;32913:10;32936:1;32895:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;32895:38:0;;;;;;;;;:42;32847:237;;;33011:61;:8;33042:15;33011:12;:61::i;:::-;32988:10;32970:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;32970:38:0;;;;;;;;;:102;32847:237;33122:10;33169:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;33099:119:0;;33169:38;;;;;;;;;;;33099:119;;;;;;;;;33122:10;33099:119;;;;;;;;;;;-1:-1:-1;33236:4:0;;32660:588;-1:-1:-1;;;32660:588:0:o;21130:19::-;;;-1:-1:-1;;;;;21130:19:0;;:::o;24631:199::-;24742:4;24724:2;-1:-1:-1;;;;;20036:18:0;;20028:27;;;;;;24764:36:::1;24778:10;24790:2;24794:5;24764:13;:36::i;:::-;-1:-1:-1::0;24818:4:0::1;::::0;24631:199;-1:-1:-1;;;;24631:199:0:o;21458:23::-;;;-1:-1:-1;;;21458:23:0;;;;;:::o;30563:570::-;21213:6;:13;;-1:-1:-1;;;;21213:13:0;-1:-1:-1;;;21213:13:0;;;18492:9:::1;:7;:9::i;:::-;18484:18;;;::::0;::::1;;30692:16:::2;::::0;30681:4:::2;30637:20;30660:27:::0;;;:12:::2;:27;::::0;;;;;30637:20;;30660:49:::2;::::0;:27;:31:::2;:49::i;:::-;30637:72;;30744:1;30729:12;:16;30720:84;;;;-1:-1:-1::0;;;30720:84:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30839:16;::::0;;30853:1:::2;30839:16:::0;;;30815:21:::2;30839:16:::0;;::::2;::::0;;30815:21;30839:16:::2;::::0;::::2;::::0;;::::2;::::0;::::2;;::::0;-1:-1:-1;30839:16:0::2;30815:40;;30884:4;30866;30871:1;30866:7;;;;;;;;-1:-1:-1::0;;;;;30866:23:0;;::::2;:7;::::0;;::::2;::::0;;;;;;:23;;;;30910:6:::2;::::0;:13:::2;::::0;;-1:-1:-1;;;30910:13:0;;;;:6;;;::::2;::::0;:11:::2;::::0;:13:::2;::::0;;::::2;::::0;30866:7;;30910:13;;;;;:6;:13;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;30910:13:0;30900:7;;:4;;30905:1:::2;::::0;30900:7;::::2;;;;;-1:-1:-1::0;;;;;30900:23:0;;::::2;:7;::::0;;::::2;::::0;;;;;;:23;;;;30934:6:::2;::::0;31068:16:::2;::::0;30934:191:::2;::::0;-1:-1:-1;;;30934:191:0;;::::2;::::0;::::2;::::0;;;:6:::2;:191:::0;;;;;;31068:16;;::::2;30934:191:::0;;;;;;31099:15:::2;30934:191:::0;;;;;;;;;;;;;;;;;;;;;:6;;;::::2;::::0;:57:::2;::::0;31006:12;;31049:4;;31068:16;;31099:15;;30934:191;;;;;::::2;::::0;::::2;::::0;;;:6;:191:::2;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;21249:6:0;:14;;-1:-1:-1;;;;21249:14:0;;;-1:-1:-1;;;;30563:570:0:o;20815:36::-;;;-1:-1:-1;;;;;20815:36:0;;:::o;20361:31::-;;;;:::o;32214:252::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;32288:5:::1;32285:174;;;32310:17;:25:::0;;-1:-1:-1;;;;32310:25:0::1;-1:-1:-1::0;;;32310:25:0;::::1;;;;::::0;;32374:15:::1;32350:21;:39:::0;32285:174:::1;;;32422:17;:25:::0;;-1:-1:-1;;;;32422:25:0::1;-1:-1:-1::0;;;32422:25:0;::::1;;;;::::0;;32285:174:::1;32214:252:::0;:::o;33907:113::-;-1:-1:-1;;;;;33993:19:0;33969:4;33993:19;;;:12;:19;;;;;;;;;33907:113::o;35461:275::-;35619:16;;35609:4;;-1:-1:-1;;;;;35609:4:0;35544:7;35596:18;;;:12;:18;;;;;;35544:7;;;;35596:40;;:22;:40::i;:::-;35569:67;;35663:65;35705:22;:20;:22::i;:::-;35663:37;35676:23;:16;35697:1;35676:20;:23::i;:::-;35663:8;;:12;:37::i;:65::-;35647:81;35461:275;-1:-1:-1;;;35461:275:0:o;35145:308::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;35315:21:::1;:46:::0;;-1:-1:-1;;;;;35315:46:0;;::::1;-1:-1:-1::0;;;;;;35315:46:0;;::::1;;::::0;;;35372:16:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;35419:11:::1;:26:::0;;;;;::::1;::::0;::::1;;::::0;;35145:308::o;20475:34::-;;;;:::o;32474:178::-;-1:-1:-1;;;;;32610:25:0;;;32578:7;32610:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;32474:178::o;31976:230::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;32045:5:::1;32041:158;;;32067:11;:19:::0;;-1:-1:-1;;;;32067:19:0::1;-1:-1:-1::0;;;32067:19:0;::::1;;;;::::0;;32120:15:::1;32101:16;:34:::0;32041:158:::1;;;32168:11;:19:::0;;;::::1;;-1:-1:-1::0;;;32168:19:0::1;-1:-1:-1::0;;;;32168:19:0;;::::1;;::::0;;31976:230;:::o;18764:109::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;18837:28:::1;18856:8;18837:18;:28::i;34028:352::-:0;18492:9;:7;:9::i;:::-;18484:18;;;;;;-1:-1:-1;;;;;34124:23:0;::::1;34142:4;34124:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;34161:4:0::1;::::0;-1:-1:-1;;;;;34151:14:0;;::::1;34161:4:::0;::::1;34151:14;;34124:41;34116:50;;;::::0;::::1;;-1:-1:-1::0;;;;;34177:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;34177:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;34223:150:::1;;34250:11;::::0;:31:::1;::::0;;-1:-1:-1;;;34250:31:0;;-1:-1:-1;;;;;34250:31:0;;::::1;;::::0;::::1;::::0;:11:::1;:31:::0;;;;;;;;:11;::::1;::::0;:20:::1;::::0;:31;;;;;:11;;:31;;;;;;:11;;:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34223:150;;;34314:11;::::0;-1:-1:-1;;;;;34314:11:0::1;:20;34335:6:::0;34343:17:::1;34335:6:::0;34343:9:::1;:17::i;:::-;34314:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;34314:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;34223:150;34028:352:::0;;:::o;21089:32::-;;;-1:-1:-1;;;;;21089:32:0;;:::o;21857:41::-;;;;;;;;;;;;;;;:::o;2007:181::-;2065:7;2097:5;;;2121:6;;;;2113:46;;;;;-1:-1:-1;;;2113:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2832:132;2890:7;2917:39;2921:1;2924;2917:39;;;;;;;;;;;;;;;;;:3;:39::i;2340:226::-;2460:7;2496:12;2488:6;;;;2480:29;;;;-1:-1:-1;;;2480:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2532:5:0;;;2340:226::o;25646:1357::-;-1:-1:-1;;;;;25800:17:0;;25772:4;25800:17;;;:9;:17;;;;;;;;25799:18;:43;;;;-1:-1:-1;;;;;;25822:20:0;;;;;;:9;:20;;;;;;;;25821:21;25799:43;25791:68;;;;;-1:-1:-1;;;25791:68:0;;;;;;;;;;;;-1:-1:-1;;;25791:68:0;;;;;;;;;;;;;;;25876:6;;-1:-1:-1;;;25876:6:0;;;;25872:87;;;25906:41;25921:6;25929:9;25940:6;25906:14;:41::i;:::-;25899:48;;;;25872:87;25973:14;:12;:14::i;:::-;25969:55;;;26004:8;:6;:8::i;:::-;26040:20;:18;:20::i;:::-;26036:67;;;26077:14;:12;:14::i;:::-;26119:16;:14;:16::i;:::-;26115:59;;;26152:10;:8;:10::i;:::-;26186:17;26206:28;26217:16;;26206:6;:10;;:28;;;;:::i;:::-;-1:-1:-1;;;;;26268:20:0;;;;;;:12;:20;;;;;;26186:48;;-1:-1:-1;26268:35:0;;26186:48;26268:24;:35::i;:::-;-1:-1:-1;;;;;26245:20:0;;;;;;:12;:20;;;;;:58;;;;26342:32;26258:6;26364:9;26342:13;:32::i;:::-;:102;;26435:9;26342:102;;;26386:37;26394:6;26402:9;26413;26386:7;:37::i;:::-;-1:-1:-1;;;;;26481:23:0;;;;;;:12;:23;;;;;;26314:130;;-1:-1:-1;26481:70:0;;26314:130;26481:27;:70::i;:::-;-1:-1:-1;;;;;26455:23:0;;;;;;;:12;:23;;;;;;;;:96;;;;26568:24;;;;;:16;:24;;;;;;;26564:96;;26599:11;;-1:-1:-1;;;;;26599:11:0;:20;26620:6;26628:17;26620:6;26628:9;:17::i;:::-;26599:47;;;;;;;;;;;;;-1:-1:-1;;;;;26599:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26595:63;;-1:-1:-1;;;;;26674:27:0;;;;;;:16;:27;;;;;;;;26670:105;;26708:11;;-1:-1:-1;;;;;26708:11:0;:20;26729:9;26740:20;26729:9;26740;:20::i;:::-;26708:53;;;;;;;;;;;;;-1:-1:-1;;;;;26708:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26704:69;;26791:11;;26811:14;;26791:35;;;-1:-1:-1;;;;;;26791:35:0;;;;;;;;;;-1:-1:-1;;;;;26791:11:0;;;;:19;;:35;;;;;:11;;:35;;;;;;;;:11;;:35;;;;;;;;;;;;;;;;;;;;;;;;;26787:51;26899:9;-1:-1:-1;;;;;26855:118:0;26878:6;-1:-1:-1;;;;;26855:118:0;;26923:39;26945:16;;26923:17;:21;;:39;;;;:::i;:::-;26855:118;;;;;;;;;;;;;;;-1:-1:-1;26991:4:0;;25646:1357;-1:-1:-1;;;;;25646:1357:0:o;2196:136::-;2254:7;2281:43;2285:1;2288;2281:43;;;;;;;;;;;;;;;;;:3;:43::i;36475:165::-;36588:17;36624:8;;;36475:165::o;2574:250::-;2632:7;2656:6;2652:47;;-1:-1:-1;2686:1:0;2679:8;;2652:47;2723:5;;;2727:1;2723;:5;:1;2747:5;;;;;:10;2739:56;;;;-1:-1:-1;;;2739:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18881:187;-1:-1:-1;;;;;18955:22:0;;18947:31;;;;;;19015:6;;18994:38;;-1:-1:-1;;;;;18994:38:0;;;;19015:6;;;;;18994:38;;;;;19043:6;:17;;-1:-1:-1;;;;;19043:17:0;;;;;-1:-1:-1;;;;;;19043:17:0;;;;;;;;;18881:187::o;2972:225::-;3092:7;3127:12;3120:5;3112:28;;;;-1:-1:-1;;;3112:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3151:9;3167:1;3163;:5;;;;;;;2972:225;-1:-1:-1;;;;;2972:225:0:o;25299:339::-;25417:4;25434:17;25454:28;25465:16;;25454:6;:10;;:28;;;;:::i;:::-;-1:-1:-1;;;;;25514:18:0;;;;;;:12;:18;;;;;;25434:48;;-1:-1:-1;25514:33:0;;25434:48;25514:22;:33::i;:::-;-1:-1:-1;;;;;25493:18:0;;;;;;;:12;:18;;;;;;:54;;;;25577:16;;;;;;;:31;;25598:9;25577:20;:31::i;:::-;-1:-1:-1;;;;;25558:16:0;;;;;;:12;:16;;;;;:50;-1:-1:-1;25626:4:0;;-1:-1:-1;25299:339:0;;;;;:::o;31342:254::-;31422:11;;31389:4;;-1:-1:-1;;;31422:11:0;;;;:51;;;;-1:-1:-1;31447:12:0;;21423:26;-1:-1:-1;31422:51:0;:82;;;;-1:-1:-1;31500:4:0;;-1:-1:-1;;;;;31500:4:0;31486:10;:18;;31422:82;:103;;;;-1:-1:-1;31519:6:0;;-1:-1:-1;;;31519:6:0;;;;31518:7;31422:103;:166;;;;-1:-1:-1;;31558:16:0;;31577:10;31558:29;31538:15;:50;;;31342:254::o;23522:1101::-;23567:6;;-1:-1:-1;;;23567:6:0;;;;23562:21;;;23576:7;;23562:21;23668:20;;23737:16;;23593:18;;23650:15;:38;;;;23719:34;;23593:18;23780:25;23719:34;23794:10;23780:13;:25::i;:::-;23764:41;-1:-1:-1;23816:13:0;23832;23764:41;23842:2;23832:9;:13::i;:::-;23816:29;;23883:8;23862:17;:30;23858:351;;;23922:4;23909:17;;23858:351;;;23970:8;23948:17;:31;23944:265;;24009:3;23996:16;;23944:265;;;24056:20;24034:17;:43;24030:179;;24107:2;24094:15;;24030:179;;;24153:12;24131:17;:35;24127:82;;24196:1;24183:14;;24127:82;24226:9;24221:182;24245:5;24241:1;:9;24221:182;;;24287:104;24373:17;24287:67;24318:35;24373:17;24342:10;24318:23;:35::i;:::-;24287:12;;;:30;:67::i;:104::-;24272:12;:119;24252:3;;24221:182;;;-1:-1:-1;24449:12:0;;24434:28;;-1:-1:-1;;21322:54:0;24434:14;:28::i;:::-;24415:16;:47;24492:43;24513:21;:5;24523:10;24513:9;:21::i;:::-;24492:16;;;:20;:43::i;:::-;24473:16;:62;24548:12;;:19;;;-1:-1:-1;;;;;;24548:19:0;;;;-1:-1:-1;;;;;24548:12:0;;;;:17;;:19;;;;;:12;;:19;;;;;;;;:12;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24602:12:0;;24585:30;;;;;;;24595:5;;-1:-1:-1;24585:30:0;;-1:-1:-1;24585:30:0;;;;;;;;23522:1101;;;;;;:::o;31604:226::-;31690:17;;31657:4;;-1:-1:-1;;;31690:17:0;;;;:37;;;;-1:-1:-1;31721:6:0;;-1:-1:-1;;;31721:6:0;;;;31720:7;31690:37;:68;;;;-1:-1:-1;31754:4:0;;-1:-1:-1;;;;;31754:4:0;31740:10;:18;;31690:68;:132;;;;-1:-1:-1;;31791:21:0;;31815:6;31791:30;31771:15;:51;;;31604:226::o;28066:1405::-;21213:6;:13;;-1:-1:-1;;;;21213:13:0;-1:-1:-1;;;21213:13:0;;;28203:16:::1;::::0;28162:21:::1;::::0;-1:-1:-1;;;;;28162:21:0::1;21213:13:::0;28149:35;;;:12:::1;:35;::::0;;;;;21213:13;;28149:81:::1;::::0;:35;:39:::1;:81::i;:::-;28330:21;::::0;-1:-1:-1;;;;;28330:21:0::1;28317:35;::::0;;;:12:::1;:35;::::0;;;;;;28292:4:::1;28271:27:::0;;;;;28119:111;;-1:-1:-1;28271:92:0::1;::::0;:27;:31:::1;:92::i;:::-;28262:4;28241:27;::::0;;;:12:::1;:27;::::0;;;;;:122;;;;28387:21:::1;::::0;-1:-1:-1;;;;;28387:21:0::1;28374:35:::0;;;;;:39;;;28450:26:::1;:19:::0;28474:1:::1;28450:23;:26::i;:::-;28424:52:::0;-1:-1:-1;28487:20:0::1;28510:40;:19:::0;28424:52;28510:23:::1;:40::i;:::-;28487:63:::0;-1:-1:-1;28567:17:0;28563:57:::1;;28602:7;;;;;28563:57;28654:16;::::0;;28668:1:::1;28654:16:::0;;;28630:21:::1;28654:16:::0;;::::1;::::0;;28630:21;28654:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28654:16:0::1;28630:40;;28699:4;28681;28686:1;28681:7;;;;;;;;-1:-1:-1::0;;;;;28681:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28725:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;28725:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;28681:7;;28725:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;28725:13:0;28715:7;;:4;;28720:1:::1;::::0;28715:7;::::1;;;;;-1:-1:-1::0;;;;;28715:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28811:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;28811:188:0;;::::1;::::0;::::1;::::0;;;28751:21:::1;28811:188:::0;;;;;;28953:4:::1;28811:188:::0;;;;;;28973:15:::1;28811:188:::0;;;;;;;;;;;;;;;;;;;;;28775:21:::1;::::0;28811:6;;;::::1;::::0;:57:::1;::::0;28883:12;;28751:21;;28926:4;;28811:188;;;;;;;;;;::::1;::::0;::::1;::::0;;;28751:21;28811:188:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29012:26;29041:40;29067:13;29041:21;:25;;:40;;;;:::i;:::-;29012:69;;29116:1;29098:15;:19;:43;;;;;29140:1;29119:18;:22;29098:43;29094:320;;;29158:6;::::0;29332:21:::1;::::0;29158:244:::1;::::0;;-1:-1:-1;;;29158:244:0;;29234:4:::1;29158:244;::::0;::::1;::::0;;;;;;;:6:::1;:244:::0;;;;;;;;;;-1:-1:-1;;;;;29332:21:0;;::::1;29158:244:::0;;;;29372:15:::1;29158:244:::0;;;;;;:6;;;::::1;::::0;:22:::1;::::0;29188:18;;29158:244;;;;;::::1;::::0;;;;;;;;;29188:18;29158:6;:244;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;29094:320:0::1;-1:-1:-1::0;;29448:15:0::1;29424:21;:39:::0;-1:-1:-1;;;;21237:1:0::1;21249:6:::0;:14;;-1:-1:-1;;;;21249:14:0;;;28066:1405::o;31838:130::-;31921:6;;31887:4;;-1:-1:-1;;;31921:6:0;;;;31920:7;:38;;;;-1:-1:-1;;31954:4:0;;-1:-1:-1;;;;;31954:4:0;31940:10;:18;;;31838:130::o;29479:1076::-;21213:6;:13;;-1:-1:-1;;;;21213:13:0;-1:-1:-1;;;21213:13:0;;;29585:16:::1;::::0;29574:4:::1;21213:13:::0;29553:27;;;:12:::1;:27;::::0;;;;;21213:13;;29553:49:::1;::::0;:27;:31:::1;:49::i;:::-;29530:72:::0;-1:-1:-1;29619:17:0;29615:56:::1;;29653:7;;;29615:56;29763:16;::::0;;29777:1:::1;29763:16:::0;;;29739:21:::1;29763:16:::0;;::::1;::::0;;29707:21:::1;::::0;29739;;29763:16;29777:1;29763:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;29763:16:0::1;29739:40;;29808:4;29790;29795:1;29790:7;;;;;;;;-1:-1:-1::0;;;;;29790:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;29834:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;29834:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;29790:7;;29834:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29834:13:0;29824:7;;:4;;29829:1:::1;::::0;29824:7;::::1;;;;;;;;;;:23;-1:-1:-1::0;;;;;29824:23:0::1;;;-1:-1:-1::0;;;;;29824:23:0::1;;;::::0;::::1;29862:6;;;;;;;;;-1:-1:-1::0;;;;;29862:6:0::1;-1:-1:-1::0;;;;;29862:57:0::1;;29934:12;29961:1;29977:4;30004;30024:15;29862:188;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;29862:188:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30063:33;30099:64;30139:13;30099:21;:25;;:64;;;;:::i;:::-;30203:16;::::0;30320:15:::1;::::0;30304:11:::1;::::0;30063:100;;-1:-1:-1;30177:12:0::1;::::0;-1:-1:-1;;;;;30203:16:0;;::::1;::::0;30243:104:::1;::::0;30304:32:::1;::::0;:11;:15:::1;:32::i;:::-;30273:11;::::0;30243:42:::1;::::0;:25;;:29:::1;:42::i;:104::-;30195:188;::::0;30363:5:::1;::::0;30195:188;::::1;::::0;;;;;30363:5;30195:188:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;30400:11:0::1;::::0;30505:15:::1;::::0;30489:11:::1;::::0;30176:207;;-1:-1:-1;;;;;;30400:11:0;;::::1;::::0;:19:::1;::::0;30438:84:::1;::::0;30489:32:::1;::::0;:15:::1;:32::i;:::-;30468:15;::::0;30438:46:::1;::::0;:25;;:29:::1;:46::i;:84::-;30400:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;30396:152:::0;21237:1:::1;;;;;21249:6:::0;:14;;-1:-1:-1;;;;21249:14:0;;;29479:1076::o;31141:193::-;31267:4;;31228;;-1:-1:-1;;;;;31267:12:0;;;:4;;:12;;:26;;-1:-1:-1;31283:4:0;;-1:-1:-1;;;;;31283:10:0;;;:4;;:10;31267:26;31266:60;;;;-1:-1:-1;;;;;;;;31308:18:0;;;;;:12;:18;;;;;;;;31307:19;;31141:193::o;27011:1047::-;27175:8;;27217:11;;27258:4;;27135:7;;27175:8;27217:11;-1:-1:-1;;;;;27245:17:0;;;27258:4;;27245:17;27241:137;;;27304:7;;27291:8;;:21;;:12;:21::i;:::-;27279:33;;27342:24;27358:7;;27342:11;;:15;;:24;;;;:::i;:::-;27327:39;;27241:137;27390:17;27410:44;27444:9;27410:29;27424:14;;27410:9;:13;;:29;;;;:::i;:::-;:33;;:44::i;:::-;27390:64;;27495:104;27539:49;27573:14;;27539:29;27553:14;;27539:9;:13;;:29;;;;:::i;:49::-;27508:11;;-1:-1:-1;;;;;27508:11:0;27495:25;;;;:12;:25;;;;;;;:29;:104::i;:::-;27480:11;;-1:-1:-1;;;;;27480:11:0;27467:25;;;;:12;:25;;;;;:132;27737:15;;27640:125;;27686:68;;27720:33;;:12;;:16;:33::i;:::-;27700:14;;27686:29;;:9;;:13;:29::i;:68::-;27661:4;27640:27;;;;:12;:27;;;;;;;:31;:125::i;:::-;27631:4;27610:27;;;;:12;:27;;;;;:155;27902:12;;27882:14;;27814:112;;27868:47;;:29;;:9;;:13;:29::i;:47::-;27827:21;;-1:-1:-1;;;;;27827:21:0;27814:35;;;;:12;:35;;;;;;;:39;:112::i;:::-;27789:21;;-1:-1:-1;;;;;27789:21:0;;;27776:35;;;;:12;:35;;;;;:150;;;;27990:16;;27969:4;;27944:64;;;;;27976:31;;:9;;:13;:31::i;:::-;27944:64;;;;;;;;;;;;;;;28026:24;:9;28040;28026:13;:24::i;:::-;28019:31;27011:1047;-1:-1:-1;;;;;;;27011:1047:0:o
Swarm Source
ipfs://e9eac1905e34d948a92f80e43c8372f86dab39e298b571d9056f5a3d04d7204d