ERC-20
Overview
Max Total Supply
10,500,000 GLDN
Holders
69
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
72,457.9671250414 GLDNValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GoldenRetrieverV2
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-30 */ /* ██████ ██████ ██ ██████ ███████ ███ ██ ██████ ███████ ████████ ██████ ██ ███████ ██ ██ ███████ ██████ ██ ██ ██████ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ███ ██ ██ ██ ██ ██ █████ ██ ██ ██ ██████ █████ ██ ██████ ██ █████ ██ ██ █████ ██████ ██ ██ █████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██████ ███████ ██████ ███████ ██ ████ ██ ██ ███████ ██ ██ ██ ██ ███████ ████ ███████ ██ ██ ████ ███████ This is version 02 of Golden Retriever Token, Gold Retriever. Two things that have held true since the beginning of time. The first, dogs have given us unconditional love. The perfect example is The Golden Retriever. If you don’t believe in God go play with one and you will. The second is that Gold is the only real money. Put it on the blockchain it’s unstoppable. I have given you both. A token that Rewards in real gold and a token that harnesses the financial freedom of blockchain all while giving back to the beings that never stopped loving us, dogs. This contract will be locked for quite some time. Use it well and save your gold, you will need it as the fiat markets crumble which is NOW. The gold rewards you receive are redeemable for real physical gold. https://www.thegoldenretrievertoken.com https://t.me/GLDN_Retriever https://twitter.com/0xGoldRetriever */ // SPDX-License-Identifier: MIT 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 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 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 IDividendDistributor { function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; } contract DividendDistributor is IDividendDistributor { using SafeMath for uint256; address _token; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } //Mainnet IERC20 PAX = IERC20(0x45804880De22913dAFE09f4980848ECE6EcbAf78); //Testnet //IERC20 PAX = IERC20(0xaD6D458402F60fD3Bd25163575031ACDce07538D); //DAI 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 (address _router) { router = _router != address(0) ? IPancakeSwapRouter(_router) : IPancakeSwapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _token = msg.sender; } 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 rescueToken(address tokenAddress,address _receiver, uint256 tokens) external onlyToken returns (bool success){ return IERC20(tokenAddress).transfer(_receiver, tokens); } function deposit() external payable override onlyToken { uint256 balanceBefore = PAX.balanceOf(address(this)); address[] memory path = new address[](2); path[0] = router.WETH(); path[1] = address(PAX); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}( 0, path, address(this), block.timestamp ); uint256 amount = PAX.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); PAX.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 GoldenRetrieverV2 is ERC20Detailed, Ownable { using SafeMath for uint256; using SafeMathInt for int256; modifier validRecipient(address to) { require(to != address(0x0)); _; } uint256 public buyLiquidityFee = 0; uint256 public buyMarketingFee = 0; uint256 public buyRewardsFee = 0; uint256 public sellLiquidityFee = 40; uint256 public sellMarketingFee = 0; uint256 public sellRewardsFee = 40; uint256 public AmountLiquidityFee; uint256 public AmountMarketingFee; uint256 public AmountRewardsFee; uint256 public feeDenominator = 1000; address public _marketingWalletAddress = 0x76b61a1AFe8711F431d3d6F770E8fE7e7004E871; address private constant deadWallet = 0x000000000000000000000000000000000000dEaD; address private constant ZeroWallet = 0x0000000000000000000000000000000000000000; mapping(address => bool) public blacklist; mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public isTxLimitExempt; mapping (address => bool) public isWalletLimitExempt; mapping (address => bool) public automatedMarketMakerPairs; mapping(address => bool) public isDividendExempt; mapping (address => bool) private allowTransfer; uint256 public constant DECIMALS = 18; uint256 public _totalSupply = 10_500_000 * (10 ** DECIMALS); uint256 public swapTokensAtAmount = _totalSupply.mul(5).div(1e5); //0.05% uint256 public MaxWalletLimit = _totalSupply.mul(30).div(feeDenominator); //3% uint256 public MaxTxLimit = _totalSupply.mul(15).div(feeDenominator); //1.5% bool public EnableTransactionLimit = true; bool public checkWalletLimit = true; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; bool public _autoAddLiquidity = true; bool public _autoSwapBack = true; bool public ClaimableOnly = true; bool public initalDistribution; DividendDistributor distributor; address public GLDNRTVRDividendReceiver; uint256 distributorGas = 500000; address public pair; IPancakeSwapPair public pairContract; IPancakeSwapRouter public router; bool inSwap = false; modifier swapping() { inSwap = true; _; inSwap = false; } constructor() ERC20Detailed("Gold Retriever", "GLDN", uint8(DECIMALS)) Ownable() { router = IPancakeSwapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); pair = IPancakeSwapFactory(router.factory()).createPair( router.WETH(), address(this) ); _allowances[address(this)][address(router)] = uint256(-1); pairContract = IPancakeSwapPair(pair); automatedMarketMakerPairs[pair] = true; distributor = new DividendDistributor(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); GLDNRTVRDividendReceiver = address(distributor); isDividendExempt[owner()] = true; isDividendExempt[pair] = true; isDividendExempt[address(this)] = true; isDividendExempt[deadWallet] = true; isDividendExempt[ZeroWallet] = true; isWalletLimitExempt[owner()] = true; isWalletLimitExempt[pair] = true; isWalletLimitExempt[address(this)] = true; _isExcludedFromFees[owner()] = true; _isExcludedFromFees[address(this)] = true; isTxLimitExempt[owner()] = true; isTxLimitExempt[address(this)] = true; _balances[owner()] = _totalSupply; emit Transfer(address(0x0), owner(), _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 (_allowances[from][msg.sender] != uint256(-1)) { _allowances[from][msg.sender] = _allowances[from][ msg.sender ].sub(value, "Insufficient Allowance"); } _transferFrom(from, to, value); return true; } function _basicTransfer( address from, address to, uint256 amount ) internal returns (bool) { _balances[from] = _balances[from].sub(amount); _balances[to] = _balances[to].add(amount); return true; } function _transferFrom( address sender, address recipient, uint256 amount ) internal returns (bool) { require(!blacklist[sender] && !blacklist[recipient], "in_blacklist"); require(initalDistribution || allowTransfer[msg.sender] || isOwner() ,"Trade is Currently Paused!!"); if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient] && EnableTransactionLimit) { require(amount <= MaxTxLimit, "Transfer amount exceeds the maxTxAmount."); } if (inSwap) { return _basicTransfer(sender, recipient, amount); } if (shouldAddLiquidity()) { addLiquidity(); } if (shouldSwapBack()) { swapBack(); } _balances[sender] = _balances[sender].sub(amount); uint256 AmountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient].add(AmountReceived); if(checkWalletLimit && !isWalletLimitExempt[recipient]) { require(balanceOf(recipient).add(AmountReceived) <= MaxWalletLimit); } if(!isDividendExempt[sender]){ try distributor.setShare(sender, balanceOf(sender)) {} catch {} } if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, balanceOf(recipient)) {} catch {} } if(!ClaimableOnly) try distributor.process(distributorGas) {} catch {} emit Transfer(sender,recipient,AmountReceived); return true; } function takeFee( address sender, address recipient, uint256 amount ) internal returns (uint256) { uint256 feeAmount; uint LFEE; uint MFEE; uint RFEE; if(automatedMarketMakerPairs[sender]){ LFEE = amount.mul(buyLiquidityFee).div(feeDenominator); AmountLiquidityFee += LFEE; MFEE = amount.mul(buyMarketingFee).div(feeDenominator); AmountMarketingFee += MFEE; RFEE = amount.mul(buyRewardsFee).div(feeDenominator); AmountRewardsFee += RFEE; feeAmount = LFEE.add(MFEE).add(RFEE); } else if(automatedMarketMakerPairs[recipient]){ LFEE = amount.mul(sellLiquidityFee).div(feeDenominator); AmountLiquidityFee += LFEE; MFEE = amount.mul(sellMarketingFee).div(feeDenominator); AmountMarketingFee += MFEE; RFEE = amount.mul(sellRewardsFee).div(feeDenominator); AmountRewardsFee += RFEE; feeAmount = LFEE.add(MFEE).add(RFEE); } if(feeAmount > 0) { _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); } return amount.sub(feeAmount); } function manualSwap() public onlyOwner swapping { if(AmountLiquidityFee > 0) swapForLiquidity(AmountLiquidityFee); if(AmountMarketingFee > 0) swapForMarketing(AmountMarketingFee); if(AmountRewardsFee > 0) swapAndSendDivident(AmountRewardsFee); } function addLiquidity() internal swapping { if(AmountLiquidityFee > 0){ swapForLiquidity(AmountLiquidityFee); } if(AmountMarketingFee > 0){ swapForMarketing(AmountMarketingFee); } } function swapBack() internal swapping { if(AmountRewardsFee > 0){ swapAndSendDivident(AmountRewardsFee); } } function swapAndSendDivident(uint256 _tokens) private { uint initialBalance = address(this).balance; swapTokensForEth(_tokens); uint ReceivedBalance = address(this).balance.sub(initialBalance); AmountRewardsFee = AmountRewardsFee.sub(_tokens); try distributor.deposit { value: ReceivedBalance } () {} catch {} } function shouldTakeFee(address from, address to) internal view returns (bool) { if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){ return false; } else{ return (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]); } } function shouldAddLiquidity() internal view returns (bool) { uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; return _autoAddLiquidity && !inSwap && canSwap && !automatedMarketMakerPairs[msg.sender]; } function shouldSwapBack() internal view returns (bool) { return _autoSwapBack && !inSwap && !automatedMarketMakerPairs[msg.sender]; } function setAutoAddLiquidity(bool _flag) external onlyOwner { if(_flag) { _autoAddLiquidity = _flag; } else { _autoAddLiquidity = _flag; } } function setAutoSwapBack(bool _flag) external onlyOwner { if(_flag) { _autoSwapBack = _flag; } else { _autoSwapBack = _flag; } } function enableClaimableExempt(bool _status) public onlyOwner { ClaimableOnly = _status; } function allowance(address owner_, address spender) external view override returns (uint256) { return _allowances[owner_][spender]; } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 oldValue = _allowances[msg.sender][spender]; if (subtractedValue >= oldValue) { _allowances[msg.sender][spender] = 0; } else { _allowances[msg.sender][spender] = oldValue.sub( subtractedValue ); } emit Approval( msg.sender, spender, _allowances[msg.sender][spender] ); return true; } function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _allowances[msg.sender][spender] = _allowances[msg.sender][ spender ].add(addedValue); emit Approval( msg.sender, spender, _allowances[msg.sender][spender] ); return true; } function approve(address spender, uint256 value) external override returns (bool) { _approve(msg.sender,spender,value); return true; } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function checkFeeExempt(address _addr) external view returns (bool) { return _isExcludedFromFees[_addr]; } function enableDisableTxLimit(bool _status) public onlyOwner { EnableTransactionLimit = _status; } function enableDisableWalletLimit(bool _status) public onlyOwner { checkWalletLimit = _status; } function setWhitelistTransfer(address _adr, bool _status) public onlyOwner { allowTransfer[_adr] = _status; } function setInitialDistribution(bool _status) public onlyOwner{ require(initalDistribution != _status,"Not Changed!!"); initalDistribution = _status; } function setBuyFee( uint _newLp, uint _newMarketing, uint _newReward ) public onlyOwner { buyLiquidityFee = _newLp; buyMarketingFee = _newMarketing; buyRewardsFee = _newReward; } function setSellFee( uint _newLp, uint _newMarketing, uint _newReward ) public onlyOwner { sellLiquidityFee = _newLp; sellMarketingFee = _newMarketing; sellRewardsFee = _newReward; } function setIsDividendExempt(address holder, bool exempt) external onlyOwner { require(holder != address(this) && !automatedMarketMakerPairs[holder]); 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 clearStuckBalance(address _receiver) external onlyOwner { uint256 balance = address(this).balance; payable(_receiver).transfer(balance); } function rescueToken(address tokenAddress,address _receiver, uint256 tokens) external onlyOwner returns (bool success){ return IERC20(tokenAddress).transfer(_receiver, tokens); } function rescueDividentToken(address tokenAddress,address _receiver, uint256 tokens) external onlyOwner returns (bool success) { return distributor.rescueToken(tokenAddress, _receiver,tokens); } function setFeeReceivers(address _marketing) public onlyOwner { _marketingWalletAddress = _marketing; } function setDistributorSettings(uint256 gas) external onlyOwner { require(gas < 750000, "Gas must be lower than 750000"); distributorGas = gas; } function setMaxWalletLimit(uint _value) public onlyOwner { MaxWalletLimit = _value; } function setMaxTxLimit(uint _value) public onlyOwner { MaxTxLimit = _value; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(_balances[deadWallet]).sub(_balances[ZeroWallet]); } function isNotInSwap() external view returns (bool) { return !inSwap; } function manualSync() external { IPancakeSwapPair(pair).sync(); } function setLP(address _address) external onlyOwner { pairContract = IPancakeSwapPair(_address); pair = _address; } function setAutomaticPairMarket(address _addr,bool _status) public onlyOwner { if(_status) { require(!automatedMarketMakerPairs[_addr],"Pair Already Set!!"); } automatedMarketMakerPairs[_addr] = _status; isDividendExempt[_addr] = true; isWalletLimitExempt[_addr] = true; } function getLiquidityBacking(uint256 accuracy) public view returns (uint256) { uint256 liquidityBalance = _balances[pair]; return accuracy.mul(liquidityBalance.mul(2)).div(getCirculatingSupply()); } function setWhitelistFee(address _addr,bool _status) external onlyOwner { require(_isExcludedFromFees[_addr] != _status, "Error: Not changed"); _isExcludedFromFees[_addr] = _status; } function setEdTxLimit(address _addr,bool _status) external onlyOwner { isTxLimitExempt[_addr] = _status; } function setEdWalletLimit(address _addr,bool _status) external onlyOwner { isWalletLimitExempt[_addr] = _status; } function setBotBlacklist(address _botAddress, bool _flag) external onlyOwner { blacklist[_botAddress] = _flag; } function setMinSwapAmount(uint _value) external onlyOwner { swapTokensAtAmount = _value; } function totalSupply() external view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function isContract(address addr) internal view returns (bool) { uint size; assembly { size := extcodesize(addr) } return size > 0; } function swapForMarketing(uint _tokens) private { uint initalBalance = address(this).balance; swapTokensForEth(_tokens); uint recieveBalance = address(this).balance.sub(initalBalance); AmountMarketingFee = AmountMarketingFee.sub(_tokens); payable(_marketingWalletAddress).transfer(recieveBalance); } function swapForLiquidity(uint _tokens) private { uint half = AmountLiquidityFee.div(2); uint otherhalf = AmountLiquidityFee.sub(half); uint initalBalance = address(this).balance; swapTokensForEth(half); uint recieveBalance = address(this).balance.sub(initalBalance); AmountLiquidityFee = AmountLiquidityFee.sub(_tokens); addLiquidity(otherhalf,recieveBalance); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(router), tokenAmount); // add the liquidity router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tokenAmount); // make the swap router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } receive() external payable {} /* AirDrop begins*/ function airDrop(address[] calldata _adr, uint[] calldata _tokens) public onlyOwner { require(_adr.length == _tokens.length,"Length Mismatch!!"); uint Subtokens; address account = msg.sender; for(uint i=0; i < _tokens.length; i++){ Subtokens += _tokens[i]; } require(balanceOf(account) >= Subtokens,"ERROR: Insufficient Balance!!"); _balances[account] = _balances[account].sub(Subtokens); for (uint j=0; j < _adr.length; j++) { _balances[_adr[j]] = _balances[_adr[j]].add(_tokens[j]); emit Transfer(account,_adr[j],_tokens[j]); } } }
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":"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":"AmountLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ClaimableOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EnableTransactionLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GLDNRTVRDividendReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_autoAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_autoSwapBack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_adr","type":"address[]"},{"internalType":"uint256[]","name":"_tokens","type":"uint256[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableClaimableExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableDisableTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"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":[],"name":"initalDistribution","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueDividentToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IPancakeSwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardsFee","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":"setAutoSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAutomaticPairMarket","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":"_newLp","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"},{"internalType":"uint256","name":"_newReward","type":"uint256"}],"name":"setBuyFee","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":"_addr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setEdTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setEdWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setInitialDistribution","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":"uint256","name":"_value","type":"uint256"}],"name":"setMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMinSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLp","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"},{"internalType":"uint256","name":"_newReward","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setWhitelistFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setWhitelistTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600355600060045560006005556028600655600060075560286008556103e8600c557376b61a1afe8711f431d3d6f770e8fe7e7004e871600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a0a62a037a002601555620000c3620186a0620000af600560155462000dae60201b62003c391790919060201c565b62000e3960201b62003cbf1790919060201c565b601655620000fe600c54620000ea601e60155462000dae60201b62003c391790919060201c565b62000e3960201b62003cbf1790919060201c565b60175562000139600c5462000125600f60155462000dae60201b62003c391790919060201c565b62000e3960201b62003cbf1790919060201c565b6018556001601960006101000a81548160ff0219169083151502179055506001601960016101000a81548160ff0219169083151502179055506001601c60006101000a81548160ff0219169083151502179055506001601c60016101000a81548160ff0219169083151502179055506001601c60026101000a81548160ff0219169083151502179055506207a120601e556000602160146101000a81548160ff021916908315150217905550348015620001f257600080fd5b506040518060400160405280600e81526020017f476f6c64205265747269657665720000000000000000000000000000000000008152506040518060400160405280600481526020017f474c444e00000000000000000000000000000000000000000000000000000000815250601282600090805190602001906200027992919062000f80565b5081600190805190602001906200029292919062000f80565b5080600260006101000a81548160ff021916908360ff16021790555050505033600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620003b057600080fd5b505afa158015620003c5573d6000803e3d6000fd5b505050506040513d6020811015620003dc57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200047157600080fd5b505afa15801562000486573d6000803e3d6000fd5b505050506040513d60208110156200049d57600080fd5b8101908080519060200190929190505050306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200051957600080fd5b505af11580156200052e573d6000803e3d6000fd5b505050506040513d60208110156200054557600080fd5b8101908080519060200190929190505050601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160126000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550737a250d5630b4cf539739df2c5dacb4c659f2488d604051620007599062001017565b808273ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f08015801562000796573d6000803e3d6000fd5b50601c60046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601360006200085062000e8b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016011600062000a3b62000e8b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160116000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600062000b7462000e8b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600062000c3362000e8b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601554601a600062000cf362000e8b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000d4162000e8b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6015546040518082815260200191505060405180910390a362001044565b60008083141562000dc3576000905062000e33565b600082840290508284828162000dd557fe5b041462000e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620085c96021913960400191505060405180910390fd5b809150505b92915050565b600062000e8383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000eb560201b60201c565b905092915050565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808311829062000f65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000f2957808201518184015260208101905062000f0c565b50505050905090810190601f16801562000f575780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000f7257fe5b049050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000fb8576000855562001004565b82601f1062000fd357805160ff191683800117855562001004565b8280016001018555821562001004579182015b828111156200100357825182559160200191906001019062000fe6565b5b50905062001013919062001025565b5090565b611be480620069e583390190565b5b808211156200104057600081600090555060010162001026565b5090565b61599180620010546000396000f3fe6080604052600436106104615760003560e01c80637bce5a041161023f578063c867d60b11610139578063e5711e8b116100b6578063f708a64f1161007a578063f708a64f1461196d578063f8326795146119ca578063f872858a146119f5578063f887ea4014611a22578063f9f92be414611a6357610468565b8063e5711e8b146117d8578063ea8b2c4414611869578063f11a24d3146118c6578063f2fde38b146118f1578063f63743421461194257610468565b8063d7fa3f25116100fd578063d7fa3f251461163d578063dd62ed3e1461167a578063dde04b95146116ff578063e01bb6881461175c578063e2f45605146117ad57610468565b8063c867d60b146114b8578063cfbac92f1461151f578063cfe0e6191461155c578063d439979014611587578063d51ed1c8146115ee57610468565b806395d89b41116101c7578063b37f80f81161018b578063b37f80f814611391578063b46d8b85146113be578063b62496f5146113fb578063b677814c14611462578063bb8d51311461148d57610468565b806395d89b41146111a35780639d1944f514611233578063a457c2d71461126e578063a8aa1b31146112df578063a9059cbb1461132057610468565b8063852614851161020e57806385261485146110765780638b42507f146110a35780638da5cb5b1461110a5780638f32d59b1461114b578063921369131461117857610468565b80637bce5a0414610f805780637d87d0a914610fab5780637e504d5914610fec57806383b4ac681461104957610468565b80633eaaf86b1161035b57806366a16cad116102d8578063728d41c91161029c578063728d41c914610e8557806373824a9914610ec0578063753d02a114610eed578063764d72bf14610f0457806377a3b60914610f5557610468565b806366a16cad14610d525780636912652c14610daf57806370a0823114610ddc57806370ee739514610e41578063715018a614610e6e57610468565b806351bc3c851161031f57806351bc3c8514610b575780636140a51e14610b6e57806361c2059c14610bab57806364f5a5bb14610c3c57806365216a4114610c7757610468565b80633eaaf86b14610a065780634144d9e414610a315780634355855a14610a725780634bc6dd1814610ad95780634d709adf14610b1657610468565b80632563ae83116103e9578063313ce567116103ad578063313ce567146108a4578063320d4534146108d2578063334901911461090d57806337c9be8714610938578063395093511461099557610468565b80632563ae831461077b5780632b112e49146107b85780632d48e896146107e35780632e0f2625146108285780632f34d2821461085357610468565b806318160ddd1161043057806318160ddd146105f65780631d865c301461062157806323a2f1fc1461067057806323b872dd1461069b57806325519cf21461072c57610468565b806306fdde031461046d578063095ea7b3146104fd578063180b0d7e1461056e578063180fe7c91461059957610468565b3661046857005b600080fd5b34801561047957600080fd5b50610482611aca565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104c25780820151818401526020810190506104a7565b50505050905090810190601f1680156104ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561050957600080fd5b506105566004803603604081101561052057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b6c565b60405180821515815260200191505060405180910390f35b34801561057a57600080fd5b50610583611b83565b6040518082815260200191505060405180910390f35b3480156105a557600080fd5b506105f4600480360360408110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611b89565b005b34801561060257600080fd5b5061060b611bf5565b6040518082815260200191505060405180910390f35b34801561062d57600080fd5b5061066e6004803603606081101561064457600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611bff565b005b34801561067c57600080fd5b50610685611c2a565b6040518082815260200191505060405180910390f35b3480156106a757600080fd5b50610714600480360360608110156106be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c30565b60405180821515815260200191505060405180910390f35b34801561073857600080fd5b506107796004803603606081101561074f57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611e6f565b005b34801561078757600080fd5b506107b66004803603602081101561079e57600080fd5b81019080803515159060200190929190505050611e9a565b005b3480156107c457600080fd5b506107cd611ec8565b6040518082815260200191505060405180910390f35b3480156107ef57600080fd5b506108266004803603604081101561080657600080fd5b810190808035906020019092919080359060200190929190505050611f76565b005b34801561083457600080fd5b5061083d612020565b6040518082815260200191505060405180910390f35b34801561085f57600080fd5b506108a26004803603602081101561087657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612025565b005b3480156108b057600080fd5b506108b96120bb565b604051808260ff16815260200191505060405180910390f35b3480156108de57600080fd5b5061090b600480360360208110156108f557600080fd5b81019080803590602001909291905050506120d2565b005b34801561091957600080fd5b506109226120ed565b6040518082815260200191505060405180910390f35b34801561094457600080fd5b506109936004803603604081101561095b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506120f3565b005b3480156109a157600080fd5b506109ee600480360360408110156109b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061215f565b60405180821515815260200191505060405180910390f35b348015610a1257600080fd5b50610a1b61235b565b6040518082815260200191505060405180910390f35b348015610a3d57600080fd5b50610a46612361565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a7e57600080fd5b50610ac160048036036020811015610a9557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612387565b60405180821515815260200191505060405180910390f35b348015610ae557600080fd5b50610b1460048036036020811015610afc57600080fd5b810190808035151590602001909291905050506123a7565b005b348015610b2257600080fd5b50610b2b6123fb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b6357600080fd5b50610b6c612421565b005b348015610b7a57600080fd5b50610ba960048036036020811015610b9157600080fd5b810190808035151590602001909291905050506124af565b005b348015610bb757600080fd5b50610c2460048036036060811015610bce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124dd565b60405180821515815260200191505060405180910390f35b348015610c4857600080fd5b50610c7560048036036020811015610c5f57600080fd5b81019080803590602001909291905050506125e5565b005b348015610c8357600080fd5b50610d5060048036036040811015610c9a57600080fd5b8101908080359060200190640100000000811115610cb757600080fd5b820183602082011115610cc957600080fd5b80359060200191846020830284011164010000000083111715610ceb57600080fd5b909192939192939080359060200190640100000000811115610d0c57600080fd5b820183602082011115610d1e57600080fd5b80359060200191846020830284011164010000000083111715610d4057600080fd5b9091929391929390505050612600565b005b348015610d5e57600080fd5b50610dad60048036036040811015610d7557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612992565b005b348015610dbb57600080fd5b50610dc46129fe565b60405180821515815260200191505060405180910390f35b348015610de857600080fd5b50610e2b60048036036020811015610dff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a11565b6040518082815260200191505060405180910390f35b348015610e4d57600080fd5b50610e56612a5a565b60405180821515815260200191505060405180910390f35b348015610e7a57600080fd5b50610e83612a6d565b005b348015610e9157600080fd5b50610ebe60048036036020811015610ea857600080fd5b8101908080359060200190929190505050612b27565b005b348015610ecc57600080fd5b50610ed5612b42565b60405180821515815260200191505060405180910390f35b348015610ef957600080fd5b50610f02612b55565b005b348015610f1057600080fd5b50610f5360048036036020811015610f2757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bd9565b005b348015610f6157600080fd5b50610f6a612c3a565b6040518082815260200191505060405180910390f35b348015610f8c57600080fd5b50610f95612c40565b6040518082815260200191505060405180910390f35b348015610fb757600080fd5b50610fc0612c46565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ff857600080fd5b506110476004803603604081101561100f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612c6c565b005b34801561105557600080fd5b5061105e612cd8565b60405180821515815260200191505060405180910390f35b34801561108257600080fd5b5061108b612cf0565b60405180821515815260200191505060405180910390f35b3480156110af57600080fd5b506110f2600480360360208110156110c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d03565b60405180821515815260200191505060405180910390f35b34801561111657600080fd5b5061111f612d23565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561115757600080fd5b50611160612d4d565b60405180821515815260200191505060405180910390f35b34801561118457600080fd5b5061118d612da5565b6040518082815260200191505060405180910390f35b3480156111af57600080fd5b506111b8612dab565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156111f85780820151818401526020810190506111dd565b50505050905090810190601f1680156112255780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561123f57600080fd5b5061126c6004803603602081101561125657600080fd5b8101908080359060200190929190505050612e4d565b005b34801561127a57600080fd5b506112c76004803603604081101561129157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ee0565b60405180821515815260200191505060405180910390f35b3480156112eb57600080fd5b506112f4613170565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561132c57600080fd5b506113796004803603604081101561134357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613196565b60405180821515815260200191505060405180910390f35b34801561139d57600080fd5b506113a66131ea565b60405180821515815260200191505060405180910390f35b3480156113ca57600080fd5b506113f9600480360360208110156113e157600080fd5b810190808035151590602001909291905050506131fd565b005b34801561140757600080fd5b5061144a6004803603602081101561141e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132b4565b60405180821515815260200191505060405180910390f35b34801561146e57600080fd5b506114776132d4565b6040518082815260200191505060405180910390f35b34801561149957600080fd5b506114a26132da565b6040518082815260200191505060405180910390f35b3480156114c457600080fd5b50611507600480360360208110156114db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132e0565b60405180821515815260200191505060405180910390f35b34801561152b57600080fd5b5061155a6004803603602081101561154257600080fd5b81019080803515159060200190929190505050613300565b005b34801561156857600080fd5b50611571613354565b6040518082815260200191505060405180910390f35b34801561159357600080fd5b506115d6600480360360208110156115aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061335a565b60405180821515815260200191505060405180910390f35b3480156115fa57600080fd5b506116276004803603602081101561161157600080fd5b81019080803590602001909291905050506133b0565b6040518082815260200191505060405180910390f35b34801561164957600080fd5b506116786004803603602081101561166057600080fd5b8101908080351515906020019092919050505061345e565b005b34801561168657600080fd5b506116e96004803603604081101561169d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061348c565b6040518082815260200191505060405180910390f35b34801561170b57600080fd5b5061175a6004803603604081101561172257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613513565b005b34801561176857600080fd5b506117ab6004803603602081101561177f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613645565b005b3480156117b957600080fd5b506117c261369a565b6040518082815260200191505060405180910390f35b3480156117e457600080fd5b50611851600480360360608110156117fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506136a0565b60405180821515815260200191505060405180910390f35b34801561187557600080fd5b506118c46004803603604081101561188c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613768565b005b3480156118d257600080fd5b506118db61394b565b6040518082815260200191505060405180910390f35b3480156118fd57600080fd5b506119406004803603602081101561191457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613951565b005b34801561194e57600080fd5b5061195761396e565b6040518082815260200191505060405180910390f35b34801561197957600080fd5b506119c86004803603604081101561199057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613974565b005b3480156119d657600080fd5b506119df613bda565b6040518082815260200191505060405180910390f35b348015611a0157600080fd5b50611a0a613be0565b60405180821515815260200191505060405180910390f35b348015611a2e57600080fd5b50611a37613bf3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015611a6f57600080fd5b50611ab260048036036020811015611a8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c19565b60405180821515815260200191505060405180910390f35b606060008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b625780601f10611b3757610100808354040283529160200191611b62565b820191906000526020600020905b815481529060010190602001808311611b4557829003601f168201915b5050505050905090565b6000611b79338484613d09565b6001905092915050565b600c5481565b611b91612d4d565b611b9a57600080fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000601554905090565b611c07612d4d565b611c1057600080fd5b826006819055508160078190555080600881905550505050565b60185481565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c6d57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611e5757611dd6836040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f009092919063ffffffff16565b601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611e62858585613fc0565b5060019150509392505050565b611e77612d4d565b611e8057600080fd5b826003819055508160048190555080600581905550505050565b611ea2612d4d565b611eab57600080fd5b80601960016101000a81548160ff02191690831515021790555050565b6000611f71601a60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f63601a600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460155461483990919063ffffffff16565b61483990919063ffffffff16565b905090565b611f7e612d4d565b611f8757600080fd5b601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050505050565b601281565b61202d612d4d565b61203657600080fd5b80602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260009054906101000a900460ff16905090565b6120da612d4d565b6120e357600080fd5b8060168190555050565b60175481565b6120fb612d4d565b61210457600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006121f082601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60155481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60136020528060005260406000206000915054906101000a900460ff1681565b6123af612d4d565b6123b857600080fd5b80156123dd5780601c60016101000a81548160ff0219169083151502179055506123f8565b80601c60016101000a81548160ff0219169083151502179055505b50565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612429612d4d565b61243257600080fd5b6001602160146101000a81548160ff021916908315150217905550600060095411156124645761246360095461490b565b5b6000600a54111561247b5761247a600a5461498f565b5b6000600b54111561249257612491600b54614a3d565b5b6000602160146101000a81548160ff021916908315150217905550565b6124b7612d4d565b6124c057600080fd5b80601960006101000a81548160ff02191690831515021790555050565b60006124e7612d4d565b6124f057600080fd5b601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e5711e8b8585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156125a157600080fd5b505af11580156125b5573d6000803e3d6000fd5b505050506040513d60208110156125cb57600080fd5b810190808051906020019092919050505090509392505050565b6125ed612d4d565b6125f657600080fd5b8060188190555050565b612608612d4d565b61261157600080fd5b81819050848490501461268c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4c656e677468204d69736d61746368212100000000000000000000000000000081525060200191505060405180910390fd5b60008033905060005b848490508110156126c4578484828181106126ac57fe5b90506020020135830192508080600101915050612695565b50816126cf82612a11565b1015612743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4552524f523a20496e73756666696369656e742042616c616e6365212100000081525060200191505060405180910390fd5b61279582601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461483990919063ffffffff16565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b86869050811015612989576128728585838181106127f557fe5b90506020020135601a60008a8a8681811061280c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a600089898581811061288257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508686828181106128e957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87878581811061296057fe5b905060200201356040518082815260200191505060405180910390a380806001019150506127db565b50505050505050565b61299a612d4d565b6129a357600080fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601c60019054906101000a900460ff1681565b612a75612d4d565b612a7e57600080fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b612b2f612d4d565b612b3857600080fd5b8060178190555050565b601c60029054906101000a900460ff1681565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612bbf57600080fd5b505af1158015612bd3573d6000803e3d6000fd5b50505050565b612be1612d4d565b612bea57600080fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612c35573d6000803e3d6000fd5b505050565b60055481565b60045481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612c74612d4d565b612c7d57600080fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000602160149054906101000a900460ff1615905090565b601960009054906101000a900460ff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60075481565b606060018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e435780601f10612e1857610100808354040283529160200191612e43565b820191906000526020600020905b815481529060010190602001808311612e2657829003601f168201915b5050505050905090565b612e55612d4d565b612e5e57600080fd5b620b71b08110612ed6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f476173206d757374206265206c6f776572207468616e2037353030303000000081525060200191505060405180910390fd5b80601e8190555050565b600080601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808310612ff0576000601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613084565b613003838261483990919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131d357600080fd5b6131de338585613fc0565b50600191505092915050565b601c60039054906101000a900460ff1681565b613205612d4d565b61320e57600080fd5b801515601c60039054906101000a900460ff1615151415613297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4e6f74204368616e67656421210000000000000000000000000000000000000081525060200191505060405180910390fd5b80601c60036101000a81548160ff02191690831515021790555050565b60126020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60085481565b60116020528060005260406000206000915054906101000a900460ff1681565b613308612d4d565b61331157600080fd5b80156133365780601c60006101000a81548160ff021916908315150217905550613351565b80601c60006101000a81548160ff0219169083151502179055505b50565b600a5481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080601a6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050613456613422611ec8565b613448613439600285613c3990919063ffffffff16565b86613c3990919063ffffffff16565b613cbf90919063ffffffff16565b915050919050565b613466612d4d565b61346f57600080fd5b80601c60026101000a81548160ff02191690831515021790555050565b6000601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61351b612d4d565b61352457600080fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156135ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4572726f723a204e6f74206368616e676564000000000000000000000000000081525060200191505060405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61364d612d4d565b61365657600080fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60006136aa612d4d565b6136b357600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561372457600080fd5b505af1158015613738573d6000803e3d6000fd5b505050506040513d602081101561374e57600080fd5b810190808051906020019092919050505090509392505050565b613770612d4d565b61377957600080fd5b801561384057601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561383f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5061697220416c7265616479205365742121000000000000000000000000000081525060200191505060405180910390fd5b5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60035481565b613959612d4d565b61396257600080fd5b61396b81614b08565b50565b60065481565b61397c612d4d565b61398557600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613a0b5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613a1457600080fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015613b2257601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613b0557600080fd5b505af1158015613b19573d6000803e3d6000fd5b50505050613bd6565b601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683613b6a85612a11565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613bbd57600080fd5b505af1158015613bd1573d6000803e3d6000fd5b505050505b5050565b60095481565b601960019054906101000a900460ff1681565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b600080831415613c4c5760009050613cb9565b6000828402905082848281613c5d57fe5b0414613cb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159176021913960400191505060405180910390fd5b809150505b92915050565b6000613d0183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c02565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806159386024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806158cd6022913960400191505060405180910390fd5b80601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000838311158290613fad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f72578082015181840152602081019050613f57565b50505050905090810190601f168015613f9f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156140665750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6140d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e5f626c61636b6c697374000000000000000000000000000000000000000081525060200191505060405180910390fd5b601c60039054906101000a900460ff168061413c5750601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061414b575061414a612d4d565b5b6141bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f54726164652069732043757272656e746c79205061757365642121000000000081525060200191505060405180910390fd5b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156142615750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156142795750601960009054906101000a900460ff165b156142da576018548211156142d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806158ef6028913960400191505060405180910390fd5b5b602160149054906101000a900460ff1615614301576142fa848484614cc8565b9050614832565b614309614dff565b1561431757614316614ea6565b5b61431f614f0c565b1561432d5761432c614f92565b5b61437f82601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461483990919063ffffffff16565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006143ce8585614fe1565b6143d857826143e4565b6143e385858561513c565b5b905061443881601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601960019054906101000a900460ff1680156144e15750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561451057601754614504826144f687612a11565b61488390919063ffffffff16565b111561450f57600080fd5b5b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661461857601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96866145a988612a11565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156145fc57600080fd5b505af192505050801561460d575060015b61461657614617565b5b5b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661472057601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96856146b187612a11565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561470457600080fd5b505af1925050508015614715575060015b61471e5761471f565b5b5b601c60029054906101000a900460ff166147c757601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601e546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156147ab57600080fd5b505af19250505080156147bc575060015b6147c5576147c6565b5b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019150505b9392505050565b600061487b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f00565b905092915050565b600080828401905083811015614901576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006149236002600954613cbf90919063ffffffff16565b9050600061493c8260095461483990919063ffffffff16565b9050600047905061494c836154c3565b6000614961824761483990919063ffffffff16565b90506149788560095461483990919063ffffffff16565b6009819055506149888382615777565b5050505050565b600047905061499d826154c3565b60006149b2824761483990919063ffffffff16565b90506149c983600a5461483990919063ffffffff16565b600a81905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614a37573d6000803e3d6000fd5b50505050565b6000479050614a4b826154c3565b6000614a60824761483990919063ffffffff16565b9050614a7783600b5461483990919063ffffffff16565b600b81905550601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015614ae757600080fd5b505af193505050508015614af9575060015b614b0257614b03565b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614b4257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290614cae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614c73578082015181840152602081019050614c58565b50505050905090810190601f168015614ca05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614cba57fe5b049050809150509392505050565b6000614d1c82601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461483990919063ffffffff16565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614db182601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b600080614e0b30612a11565b905060006016548210159050601c60009054906101000a900460ff168015614e405750602160149054906101000a900460ff16155b8015614e495750805b8015614e9f5750601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9250505090565b6001602160146101000a81548160ff02191690831515021790555060006009541115614ed857614ed760095461490b565b5b6000600a541115614eef57614eee600a5461498f565b5b6000602160146101000a81548160ff021916908315150217905550565b6000601c60019054906101000a900460ff168015614f375750602160149054906101000a900460ff16155b8015614f8d5750601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905090565b6001602160146101000a81548160ff0219169083151502179055506000600b541115614fc457614fc3600b54614a3d565b5b6000602160146101000a81548160ff021916908315150217905550565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806150845750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156150925760009050615136565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806151335750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90505b92915050565b6000806000806000601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615615273576151bf600c546151b160035489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b9250826009600082825401925050819055506151fa600c546151ec60045489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b915081600a60008282540192505081905550615235600c5461522760055489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b905080600b6000828254019250508190555061526c8161525e848661488390919063ffffffff16565b61488390919063ffffffff16565b935061539f565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561539e576152ee600c546152e060065489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b925082600960008282540192505081905550615329600c5461531b60075489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b915081600a60008282540192505081905550615364600c5461535660085489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b905080600b6000828254019250508190555061539b8161538d848661488390919063ffffffff16565b61488390919063ffffffff16565b93505b5b60008411156154a3576153fa84601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35b6154b6848761483990919063ffffffff16565b9450505050509392505050565b6000600267ffffffffffffffff811180156154dd57600080fd5b5060405190808252806020026020018201604052801561550c5781602001602082028036833780820191505090505b509050308160008151811061551d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156155bf57600080fd5b505afa1580156155d3573d6000803e3d6000fd5b505050506040513d60208110156155e957600080fd5b81019080805190602001909291905050508160018151811061560757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061566e30602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613d09565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015615732578082015181840152602081019050615717565b505050509050019650505050505050600060405180830381600087803b15801561575b57600080fd5b505af115801561576f573d6000803e3d6000fd5b505050505050565b6157a430602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613d09565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806157f0612d23565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561587557600080fd5b505af1158015615889573d6000803e3d6000fd5b50505050506040513d60608110156158a057600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505056fe45524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220bf1f78f53fdc84cfac34c4e65f9914db463750c236725f62362a9712081d3c7364736f6c6343000706003360806040527345804880de22913dafe09f4980848ece6ecbaf78600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610e10600d55670de0b6b3a7640000600e5534801561008a57600080fd5b50604051611be4380380611be4833981810160405260208110156100ad57600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561010d57737a250d5630b4cf539739df2c5dacb4c659f2488d61010f565b805b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611a458061019f6000396000f3fe6080604052600436106100f35760003560e01c8063ce7c2ac21161008a578063efca2eed11610059578063efca2eed1461040d578063f0fc6bca14610438578063ffb2c4791461044f578063ffd49c841461048a576100f3565b8063ce7c2ac2146102d4578063d0e30db014610347578063e2d2e21914610351578063e5711e8b1461037c576100f3565b80632d48e896116100c65780632d48e8961461020e5780633a98ef39146102535780634fab0ae81461027e578063997664d7146102a9576100f3565b806311ce023d146100f857806314b6ca961461012357806326987b601461017e57806328fd3198146101a9575b600080fd5b34801561010457600080fd5b5061010d6104b5565b6040518082815260200191505060405180910390f35b34801561012f57600080fd5b5061017c6004803603604081101561014657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104bb565b005b34801561018a57600080fd5b5061019361077a565b6040518082815260200191505060405180910390f35b3480156101b557600080fd5b506101f8600480360360208110156101cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610780565b6040518082815260200191505060405180910390f35b34801561021a57600080fd5b506102516004803603604081101561023157600080fd5b81019080803590602001909291908035906020019092919050505061089a565b005b34801561025f57600080fd5b50610268610904565b6040518082815260200191505060405180910390f35b34801561028a57600080fd5b5061029361090a565b6040518082815260200191505060405180910390f35b3480156102b557600080fd5b506102be610910565b6040518082815260200191505060405180910390f35b3480156102e057600080fd5b50610323600480360360208110156102f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610916565b60405180848152602001838152602001828152602001935050505060405180910390f35b61034f610940565b005b34801561035d57600080fd5b50610366610e3b565b6040518082815260200191505060405180910390f35b34801561038857600080fd5b506103f56004803603606081101561039f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e41565b60405180821515815260200191505060405180910390f35b34801561041957600080fd5b50610422610f51565b6040518082815260200191505060405180910390f35b34801561044457600080fd5b5061044d610f57565b005b34801561045b57600080fd5b506104886004803603602081101561047257600080fd5b8101908080359060200190929190505050610f62565b005b34801561049657600080fd5b5061049f6110dc565b6040518082815260200191505060405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461051357600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154111561056857610567826110e2565b5b6000811180156105ba57506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156105cd576105c8826113a8565b61062f565b60008114801561061f57506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b1561062e5761062d82611457565b5b5b6106988161068a600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460075461163090919063ffffffff16565b61167a90919063ffffffff16565b60078190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610730600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611702565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600b5481565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156107d55760009050610895565b6000610822600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611702565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905080821161087d57600092505050610895565b610890818361163090919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f257600080fd5b81600d8190555080600e819055505050565b60075481565b600e5481565b60085481565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461099857600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610a2357600080fd5b505afa158015610a37573d6000803e3d6000fd5b505050506040513d6020811015610a4d57600080fd5b810190808051906020019092919050505090506000600267ffffffffffffffff81118015610a7a57600080fd5b50604051908082528060200260200182016040528015610aa95781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1457600080fd5b505afa158015610b28573d6000803e3d6000fd5b505050506040513d6020811015610b3e57600080fd5b810190808051906020019092919050505081600081518110610b5c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610bc657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b815260040180858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610cbe578082015181840152602081019050610ca3565b50505050905001955050505050506000604051808303818588803b158015610ce557600080fd5b505af1158015610cf9573d6000803e3d6000fd5b50505050506000610dd683600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d8d57600080fd5b505afa158015610da1573d6000803e3d6000fd5b505050506040513d6020811015610db757600080fd5b810190808051906020019092919050505061163090919063ffffffff16565b9050610ded8160085461167a90919063ffffffff16565b600881905550610e30610e1f600754610e1184600c5461173490919063ffffffff16565b6117ba90919063ffffffff16565b600a5461167a90919063ffffffff16565b600a81905550505050565b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e9c57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610f0d57600080fd5b505af1158015610f21573d6000803e3d6000fd5b505050506040513d6020811015610f3757600080fd5b810190808051906020019092919050505090509392505050565b60095481565b610f60336110e2565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fba57600080fd5b600060038054905090506000811415610fd357506110d9565b6000805a905060005b8483108015610fea57508381105b156110d45783600b5410611001576000600b819055505b6110436003600b548154811061101357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611804565b1561108b5761108a6003600b548154811061105a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110e2565b5b6110b06110a15a8461163090919063ffffffff16565b8461167a90919063ffffffff16565b92505a9150600b600081548092919060010191905055508080600101915050610fdc565b505050505b50565b600d5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415611132576113a5565b600061113d82610780565b905060008111156113a35761115d8160095461167a90919063ffffffff16565b600981905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111f657600080fd5b505af115801561120a573d6000803e3d6000fd5b505050506040513d602081101561122057600080fd5b81019080805190602001909291905050505042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112cb81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461167a90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061135c600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611702565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60036001600380549050038154811061146c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106114e357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546004600060036001600380549050038154811061158457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060038054806115f857fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061167283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611868565b905092915050565b6000808284019050838110156116f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061172d600c5461171f600a548561173490919063ffffffff16565b6117ba90919063ffffffff16565b9050919050565b60008083141561174757600090506117b4565b600082840290508284828161175857fe5b04146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806119ef6021913960400191505060405180910390fd5b809150505b92915050565b60006117fc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611928565b905092915050565b600042600d54600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011080156118615750600e5461185f83610780565b115b9050919050565b6000838311158290611915576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118da5780820151818401526020810190506118bf565b50505050905090810190601f1680156119075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561199957808201518184015260208101905061197e565b50505050905090810190601f1680156119c65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816119e057fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122085ee70eb04610da5f14b15a494ad5319fe7d6485122e44c4a16b7b197df5ae6e64736f6c63430007060033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77
Deployed Bytecode
0x6080604052600436106104615760003560e01c80637bce5a041161023f578063c867d60b11610139578063e5711e8b116100b6578063f708a64f1161007a578063f708a64f1461196d578063f8326795146119ca578063f872858a146119f5578063f887ea4014611a22578063f9f92be414611a6357610468565b8063e5711e8b146117d8578063ea8b2c4414611869578063f11a24d3146118c6578063f2fde38b146118f1578063f63743421461194257610468565b8063d7fa3f25116100fd578063d7fa3f251461163d578063dd62ed3e1461167a578063dde04b95146116ff578063e01bb6881461175c578063e2f45605146117ad57610468565b8063c867d60b146114b8578063cfbac92f1461151f578063cfe0e6191461155c578063d439979014611587578063d51ed1c8146115ee57610468565b806395d89b41116101c7578063b37f80f81161018b578063b37f80f814611391578063b46d8b85146113be578063b62496f5146113fb578063b677814c14611462578063bb8d51311461148d57610468565b806395d89b41146111a35780639d1944f514611233578063a457c2d71461126e578063a8aa1b31146112df578063a9059cbb1461132057610468565b8063852614851161020e57806385261485146110765780638b42507f146110a35780638da5cb5b1461110a5780638f32d59b1461114b578063921369131461117857610468565b80637bce5a0414610f805780637d87d0a914610fab5780637e504d5914610fec57806383b4ac681461104957610468565b80633eaaf86b1161035b57806366a16cad116102d8578063728d41c91161029c578063728d41c914610e8557806373824a9914610ec0578063753d02a114610eed578063764d72bf14610f0457806377a3b60914610f5557610468565b806366a16cad14610d525780636912652c14610daf57806370a0823114610ddc57806370ee739514610e41578063715018a614610e6e57610468565b806351bc3c851161031f57806351bc3c8514610b575780636140a51e14610b6e57806361c2059c14610bab57806364f5a5bb14610c3c57806365216a4114610c7757610468565b80633eaaf86b14610a065780634144d9e414610a315780634355855a14610a725780634bc6dd1814610ad95780634d709adf14610b1657610468565b80632563ae83116103e9578063313ce567116103ad578063313ce567146108a4578063320d4534146108d2578063334901911461090d57806337c9be8714610938578063395093511461099557610468565b80632563ae831461077b5780632b112e49146107b85780632d48e896146107e35780632e0f2625146108285780632f34d2821461085357610468565b806318160ddd1161043057806318160ddd146105f65780631d865c301461062157806323a2f1fc1461067057806323b872dd1461069b57806325519cf21461072c57610468565b806306fdde031461046d578063095ea7b3146104fd578063180b0d7e1461056e578063180fe7c91461059957610468565b3661046857005b600080fd5b34801561047957600080fd5b50610482611aca565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104c25780820151818401526020810190506104a7565b50505050905090810190601f1680156104ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561050957600080fd5b506105566004803603604081101561052057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b6c565b60405180821515815260200191505060405180910390f35b34801561057a57600080fd5b50610583611b83565b6040518082815260200191505060405180910390f35b3480156105a557600080fd5b506105f4600480360360408110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611b89565b005b34801561060257600080fd5b5061060b611bf5565b6040518082815260200191505060405180910390f35b34801561062d57600080fd5b5061066e6004803603606081101561064457600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611bff565b005b34801561067c57600080fd5b50610685611c2a565b6040518082815260200191505060405180910390f35b3480156106a757600080fd5b50610714600480360360608110156106be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c30565b60405180821515815260200191505060405180910390f35b34801561073857600080fd5b506107796004803603606081101561074f57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611e6f565b005b34801561078757600080fd5b506107b66004803603602081101561079e57600080fd5b81019080803515159060200190929190505050611e9a565b005b3480156107c457600080fd5b506107cd611ec8565b6040518082815260200191505060405180910390f35b3480156107ef57600080fd5b506108266004803603604081101561080657600080fd5b810190808035906020019092919080359060200190929190505050611f76565b005b34801561083457600080fd5b5061083d612020565b6040518082815260200191505060405180910390f35b34801561085f57600080fd5b506108a26004803603602081101561087657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612025565b005b3480156108b057600080fd5b506108b96120bb565b604051808260ff16815260200191505060405180910390f35b3480156108de57600080fd5b5061090b600480360360208110156108f557600080fd5b81019080803590602001909291905050506120d2565b005b34801561091957600080fd5b506109226120ed565b6040518082815260200191505060405180910390f35b34801561094457600080fd5b506109936004803603604081101561095b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506120f3565b005b3480156109a157600080fd5b506109ee600480360360408110156109b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061215f565b60405180821515815260200191505060405180910390f35b348015610a1257600080fd5b50610a1b61235b565b6040518082815260200191505060405180910390f35b348015610a3d57600080fd5b50610a46612361565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a7e57600080fd5b50610ac160048036036020811015610a9557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612387565b60405180821515815260200191505060405180910390f35b348015610ae557600080fd5b50610b1460048036036020811015610afc57600080fd5b810190808035151590602001909291905050506123a7565b005b348015610b2257600080fd5b50610b2b6123fb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b6357600080fd5b50610b6c612421565b005b348015610b7a57600080fd5b50610ba960048036036020811015610b9157600080fd5b810190808035151590602001909291905050506124af565b005b348015610bb757600080fd5b50610c2460048036036060811015610bce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124dd565b60405180821515815260200191505060405180910390f35b348015610c4857600080fd5b50610c7560048036036020811015610c5f57600080fd5b81019080803590602001909291905050506125e5565b005b348015610c8357600080fd5b50610d5060048036036040811015610c9a57600080fd5b8101908080359060200190640100000000811115610cb757600080fd5b820183602082011115610cc957600080fd5b80359060200191846020830284011164010000000083111715610ceb57600080fd5b909192939192939080359060200190640100000000811115610d0c57600080fd5b820183602082011115610d1e57600080fd5b80359060200191846020830284011164010000000083111715610d4057600080fd5b9091929391929390505050612600565b005b348015610d5e57600080fd5b50610dad60048036036040811015610d7557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612992565b005b348015610dbb57600080fd5b50610dc46129fe565b60405180821515815260200191505060405180910390f35b348015610de857600080fd5b50610e2b60048036036020811015610dff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a11565b6040518082815260200191505060405180910390f35b348015610e4d57600080fd5b50610e56612a5a565b60405180821515815260200191505060405180910390f35b348015610e7a57600080fd5b50610e83612a6d565b005b348015610e9157600080fd5b50610ebe60048036036020811015610ea857600080fd5b8101908080359060200190929190505050612b27565b005b348015610ecc57600080fd5b50610ed5612b42565b60405180821515815260200191505060405180910390f35b348015610ef957600080fd5b50610f02612b55565b005b348015610f1057600080fd5b50610f5360048036036020811015610f2757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bd9565b005b348015610f6157600080fd5b50610f6a612c3a565b6040518082815260200191505060405180910390f35b348015610f8c57600080fd5b50610f95612c40565b6040518082815260200191505060405180910390f35b348015610fb757600080fd5b50610fc0612c46565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ff857600080fd5b506110476004803603604081101561100f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612c6c565b005b34801561105557600080fd5b5061105e612cd8565b60405180821515815260200191505060405180910390f35b34801561108257600080fd5b5061108b612cf0565b60405180821515815260200191505060405180910390f35b3480156110af57600080fd5b506110f2600480360360208110156110c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d03565b60405180821515815260200191505060405180910390f35b34801561111657600080fd5b5061111f612d23565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561115757600080fd5b50611160612d4d565b60405180821515815260200191505060405180910390f35b34801561118457600080fd5b5061118d612da5565b6040518082815260200191505060405180910390f35b3480156111af57600080fd5b506111b8612dab565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156111f85780820151818401526020810190506111dd565b50505050905090810190601f1680156112255780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561123f57600080fd5b5061126c6004803603602081101561125657600080fd5b8101908080359060200190929190505050612e4d565b005b34801561127a57600080fd5b506112c76004803603604081101561129157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ee0565b60405180821515815260200191505060405180910390f35b3480156112eb57600080fd5b506112f4613170565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561132c57600080fd5b506113796004803603604081101561134357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613196565b60405180821515815260200191505060405180910390f35b34801561139d57600080fd5b506113a66131ea565b60405180821515815260200191505060405180910390f35b3480156113ca57600080fd5b506113f9600480360360208110156113e157600080fd5b810190808035151590602001909291905050506131fd565b005b34801561140757600080fd5b5061144a6004803603602081101561141e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132b4565b60405180821515815260200191505060405180910390f35b34801561146e57600080fd5b506114776132d4565b6040518082815260200191505060405180910390f35b34801561149957600080fd5b506114a26132da565b6040518082815260200191505060405180910390f35b3480156114c457600080fd5b50611507600480360360208110156114db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132e0565b60405180821515815260200191505060405180910390f35b34801561152b57600080fd5b5061155a6004803603602081101561154257600080fd5b81019080803515159060200190929190505050613300565b005b34801561156857600080fd5b50611571613354565b6040518082815260200191505060405180910390f35b34801561159357600080fd5b506115d6600480360360208110156115aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061335a565b60405180821515815260200191505060405180910390f35b3480156115fa57600080fd5b506116276004803603602081101561161157600080fd5b81019080803590602001909291905050506133b0565b6040518082815260200191505060405180910390f35b34801561164957600080fd5b506116786004803603602081101561166057600080fd5b8101908080351515906020019092919050505061345e565b005b34801561168657600080fd5b506116e96004803603604081101561169d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061348c565b6040518082815260200191505060405180910390f35b34801561170b57600080fd5b5061175a6004803603604081101561172257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613513565b005b34801561176857600080fd5b506117ab6004803603602081101561177f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613645565b005b3480156117b957600080fd5b506117c261369a565b6040518082815260200191505060405180910390f35b3480156117e457600080fd5b50611851600480360360608110156117fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506136a0565b60405180821515815260200191505060405180910390f35b34801561187557600080fd5b506118c46004803603604081101561188c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613768565b005b3480156118d257600080fd5b506118db61394b565b6040518082815260200191505060405180910390f35b3480156118fd57600080fd5b506119406004803603602081101561191457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613951565b005b34801561194e57600080fd5b5061195761396e565b6040518082815260200191505060405180910390f35b34801561197957600080fd5b506119c86004803603604081101561199057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613974565b005b3480156119d657600080fd5b506119df613bda565b6040518082815260200191505060405180910390f35b348015611a0157600080fd5b50611a0a613be0565b60405180821515815260200191505060405180910390f35b348015611a2e57600080fd5b50611a37613bf3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015611a6f57600080fd5b50611ab260048036036020811015611a8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c19565b60405180821515815260200191505060405180910390f35b606060008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b625780601f10611b3757610100808354040283529160200191611b62565b820191906000526020600020905b815481529060010190602001808311611b4557829003601f168201915b5050505050905090565b6000611b79338484613d09565b6001905092915050565b600c5481565b611b91612d4d565b611b9a57600080fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000601554905090565b611c07612d4d565b611c1057600080fd5b826006819055508160078190555080600881905550505050565b60185481565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c6d57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611e5757611dd6836040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f009092919063ffffffff16565b601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611e62858585613fc0565b5060019150509392505050565b611e77612d4d565b611e8057600080fd5b826003819055508160048190555080600581905550505050565b611ea2612d4d565b611eab57600080fd5b80601960016101000a81548160ff02191690831515021790555050565b6000611f71601a60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f63601a600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460155461483990919063ffffffff16565b61483990919063ffffffff16565b905090565b611f7e612d4d565b611f8757600080fd5b601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050505050565b601281565b61202d612d4d565b61203657600080fd5b80602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260009054906101000a900460ff16905090565b6120da612d4d565b6120e357600080fd5b8060168190555050565b60175481565b6120fb612d4d565b61210457600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006121f082601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60155481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60136020528060005260406000206000915054906101000a900460ff1681565b6123af612d4d565b6123b857600080fd5b80156123dd5780601c60016101000a81548160ff0219169083151502179055506123f8565b80601c60016101000a81548160ff0219169083151502179055505b50565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612429612d4d565b61243257600080fd5b6001602160146101000a81548160ff021916908315150217905550600060095411156124645761246360095461490b565b5b6000600a54111561247b5761247a600a5461498f565b5b6000600b54111561249257612491600b54614a3d565b5b6000602160146101000a81548160ff021916908315150217905550565b6124b7612d4d565b6124c057600080fd5b80601960006101000a81548160ff02191690831515021790555050565b60006124e7612d4d565b6124f057600080fd5b601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e5711e8b8585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156125a157600080fd5b505af11580156125b5573d6000803e3d6000fd5b505050506040513d60208110156125cb57600080fd5b810190808051906020019092919050505090509392505050565b6125ed612d4d565b6125f657600080fd5b8060188190555050565b612608612d4d565b61261157600080fd5b81819050848490501461268c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4c656e677468204d69736d61746368212100000000000000000000000000000081525060200191505060405180910390fd5b60008033905060005b848490508110156126c4578484828181106126ac57fe5b90506020020135830192508080600101915050612695565b50816126cf82612a11565b1015612743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4552524f523a20496e73756666696369656e742042616c616e6365212100000081525060200191505060405180910390fd5b61279582601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461483990919063ffffffff16565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b86869050811015612989576128728585838181106127f557fe5b90506020020135601a60008a8a8681811061280c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a600089898581811061288257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508686828181106128e957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87878581811061296057fe5b905060200201356040518082815260200191505060405180910390a380806001019150506127db565b50505050505050565b61299a612d4d565b6129a357600080fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601c60019054906101000a900460ff1681565b612a75612d4d565b612a7e57600080fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b612b2f612d4d565b612b3857600080fd5b8060178190555050565b601c60029054906101000a900460ff1681565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612bbf57600080fd5b505af1158015612bd3573d6000803e3d6000fd5b50505050565b612be1612d4d565b612bea57600080fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612c35573d6000803e3d6000fd5b505050565b60055481565b60045481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612c74612d4d565b612c7d57600080fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000602160149054906101000a900460ff1615905090565b601960009054906101000a900460ff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60075481565b606060018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e435780601f10612e1857610100808354040283529160200191612e43565b820191906000526020600020905b815481529060010190602001808311612e2657829003601f168201915b5050505050905090565b612e55612d4d565b612e5e57600080fd5b620b71b08110612ed6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f476173206d757374206265206c6f776572207468616e2037353030303000000081525060200191505060405180910390fd5b80601e8190555050565b600080601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808310612ff0576000601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613084565b613003838261483990919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131d357600080fd5b6131de338585613fc0565b50600191505092915050565b601c60039054906101000a900460ff1681565b613205612d4d565b61320e57600080fd5b801515601c60039054906101000a900460ff1615151415613297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4e6f74204368616e67656421210000000000000000000000000000000000000081525060200191505060405180910390fd5b80601c60036101000a81548160ff02191690831515021790555050565b60126020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60085481565b60116020528060005260406000206000915054906101000a900460ff1681565b613308612d4d565b61331157600080fd5b80156133365780601c60006101000a81548160ff021916908315150217905550613351565b80601c60006101000a81548160ff0219169083151502179055505b50565b600a5481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080601a6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050613456613422611ec8565b613448613439600285613c3990919063ffffffff16565b86613c3990919063ffffffff16565b613cbf90919063ffffffff16565b915050919050565b613466612d4d565b61346f57600080fd5b80601c60026101000a81548160ff02191690831515021790555050565b6000601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61351b612d4d565b61352457600080fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156135ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4572726f723a204e6f74206368616e676564000000000000000000000000000081525060200191505060405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61364d612d4d565b61365657600080fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60006136aa612d4d565b6136b357600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561372457600080fd5b505af1158015613738573d6000803e3d6000fd5b505050506040513d602081101561374e57600080fd5b810190808051906020019092919050505090509392505050565b613770612d4d565b61377957600080fd5b801561384057601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561383f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5061697220416c7265616479205365742121000000000000000000000000000081525060200191505060405180910390fd5b5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60035481565b613959612d4d565b61396257600080fd5b61396b81614b08565b50565b60065481565b61397c612d4d565b61398557600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613a0b5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613a1457600080fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015613b2257601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613b0557600080fd5b505af1158015613b19573d6000803e3d6000fd5b50505050613bd6565b601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683613b6a85612a11565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613bbd57600080fd5b505af1158015613bd1573d6000803e3d6000fd5b505050505b5050565b60095481565b601960019054906101000a900460ff1681565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b600080831415613c4c5760009050613cb9565b6000828402905082848281613c5d57fe5b0414613cb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159176021913960400191505060405180910390fd5b809150505b92915050565b6000613d0183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c02565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806159386024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806158cd6022913960400191505060405180910390fd5b80601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000838311158290613fad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f72578082015181840152602081019050613f57565b50505050905090810190601f168015613f9f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156140665750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6140d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e5f626c61636b6c697374000000000000000000000000000000000000000081525060200191505060405180910390fd5b601c60039054906101000a900460ff168061413c5750601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061414b575061414a612d4d565b5b6141bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f54726164652069732043757272656e746c79205061757365642121000000000081525060200191505060405180910390fd5b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156142615750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156142795750601960009054906101000a900460ff165b156142da576018548211156142d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806158ef6028913960400191505060405180910390fd5b5b602160149054906101000a900460ff1615614301576142fa848484614cc8565b9050614832565b614309614dff565b1561431757614316614ea6565b5b61431f614f0c565b1561432d5761432c614f92565b5b61437f82601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461483990919063ffffffff16565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006143ce8585614fe1565b6143d857826143e4565b6143e385858561513c565b5b905061443881601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601960019054906101000a900460ff1680156144e15750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561451057601754614504826144f687612a11565b61488390919063ffffffff16565b111561450f57600080fd5b5b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661461857601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96866145a988612a11565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156145fc57600080fd5b505af192505050801561460d575060015b61461657614617565b5b5b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661472057601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96856146b187612a11565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561470457600080fd5b505af1925050508015614715575060015b61471e5761471f565b5b5b601c60029054906101000a900460ff166147c757601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601e546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156147ab57600080fd5b505af19250505080156147bc575060015b6147c5576147c6565b5b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019150505b9392505050565b600061487b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f00565b905092915050565b600080828401905083811015614901576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006149236002600954613cbf90919063ffffffff16565b9050600061493c8260095461483990919063ffffffff16565b9050600047905061494c836154c3565b6000614961824761483990919063ffffffff16565b90506149788560095461483990919063ffffffff16565b6009819055506149888382615777565b5050505050565b600047905061499d826154c3565b60006149b2824761483990919063ffffffff16565b90506149c983600a5461483990919063ffffffff16565b600a81905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614a37573d6000803e3d6000fd5b50505050565b6000479050614a4b826154c3565b6000614a60824761483990919063ffffffff16565b9050614a7783600b5461483990919063ffffffff16565b600b81905550601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015614ae757600080fd5b505af193505050508015614af9575060015b614b0257614b03565b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614b4257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290614cae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614c73578082015181840152602081019050614c58565b50505050905090810190601f168015614ca05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614cba57fe5b049050809150509392505050565b6000614d1c82601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461483990919063ffffffff16565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614db182601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b600080614e0b30612a11565b905060006016548210159050601c60009054906101000a900460ff168015614e405750602160149054906101000a900460ff16155b8015614e495750805b8015614e9f5750601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9250505090565b6001602160146101000a81548160ff02191690831515021790555060006009541115614ed857614ed760095461490b565b5b6000600a541115614eef57614eee600a5461498f565b5b6000602160146101000a81548160ff021916908315150217905550565b6000601c60019054906101000a900460ff168015614f375750602160149054906101000a900460ff16155b8015614f8d5750601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905090565b6001602160146101000a81548160ff0219169083151502179055506000600b541115614fc457614fc3600b54614a3d565b5b6000602160146101000a81548160ff021916908315150217905550565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806150845750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156150925760009050615136565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806151335750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90505b92915050565b6000806000806000601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615615273576151bf600c546151b160035489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b9250826009600082825401925050819055506151fa600c546151ec60045489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b915081600a60008282540192505081905550615235600c5461522760055489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b905080600b6000828254019250508190555061526c8161525e848661488390919063ffffffff16565b61488390919063ffffffff16565b935061539f565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561539e576152ee600c546152e060065489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b925082600960008282540192505081905550615329600c5461531b60075489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b915081600a60008282540192505081905550615364600c5461535660085489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b905080600b6000828254019250508190555061539b8161538d848661488390919063ffffffff16565b61488390919063ffffffff16565b93505b5b60008411156154a3576153fa84601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35b6154b6848761483990919063ffffffff16565b9450505050509392505050565b6000600267ffffffffffffffff811180156154dd57600080fd5b5060405190808252806020026020018201604052801561550c5781602001602082028036833780820191505090505b509050308160008151811061551d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156155bf57600080fd5b505afa1580156155d3573d6000803e3d6000fd5b505050506040513d60208110156155e957600080fd5b81019080805190602001909291905050508160018151811061560757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061566e30602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613d09565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015615732578082015181840152602081019050615717565b505050509050019650505050505050600060405180830381600087803b15801561575b57600080fd5b505af115801561576f573d6000803e3d6000fd5b505050505050565b6157a430602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613d09565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806157f0612d23565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561587557600080fd5b505af1158015615889573d6000803e3d6000fd5b50505050506040513d60608110156158a057600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505056fe45524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220bf1f78f53fdc84cfac34c4e65f9914db463750c236725f62362a9712081d3c7364736f6c63430007060033
Deployed Bytecode Sourcemap
21547:19729:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21271:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32931:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22154:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37746:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38264:102;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34469:264;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23143:68;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25522:447;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34195:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33764:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36414:167;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35121:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22865:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36769:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21457:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38148:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23058:72;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38010:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32535:388;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22911:59;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22199:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22754:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31453:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23772:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29252:279;;;;;;;;;;;;;:::i;:::-;;33644:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35689:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36314:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40614:657;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33882:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23452:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38377:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23495:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20482:126;;;;;;;;;;;;;:::i;:::-;;36207:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23534:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36682:79;;;;;;;;;;;;;:::i;:::-;;35311:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21865:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21824:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23654:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37874:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36589:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23230:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22575:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20217:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20382:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21949:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21362:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36031:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31955:572;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23746:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25299:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23575:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34013:174;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22689:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22114:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21991:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22630:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31247:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22074:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33516:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37258:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31647:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31759:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37532:206;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35906:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22977:64;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35489:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36915:335;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21783:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20616:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21906:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34741:372;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22034:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23278:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23815:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22467:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21271:83;21308:13;21341:5;21334:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21271:83;:::o;32931:189::-;33034:4;33056:34;33065:10;33076:7;33084:5;33056:8;:34::i;:::-;33108:4;33101:11;;32931:189;;;;:::o;22154:36::-;;;;:::o;37746:120::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;37851:7:::1;37826:15;:22;37842:5;37826:22;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;37746:120:::0;;:::o;38264:102::-;38319:7;38346:12;;38339:19;;38264:102;:::o;34469:264::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;34638:6:::1;34619:16;:25;;;;34674:13;34655:16;:32;;;;34715:10;34698:14;:27;;;;34469:264:::0;;;:::o;23143:68::-;;;;:::o;25522:447::-;25665:4;25652:2;21750:3;21736:18;;:2;:18;;;;21728:27;;;;;;25737:2:::1;25696:11;:17;25708:4;25696:17;;;;;;;;;;;;;;;:29;25714:10;25696:29;;;;;;;;;;;;;;;;:44;25692:207;;25789:98;25855:5;25789:98;;;;;;;;;;;;;;;;::::0;:11:::1;:17;25801:4;25789:17;;;;;;;;;;;;;;;:61;25825:10;25789:61;;;;;;;;;;;;;;;;:65;;:98;;;;;:::i;:::-;25757:11;:17;25769:4;25757:17;;;;;;;;;;;;;;;:29;25775:10;25757:29;;;;;;;;;;;;;;;:130;;;;25692:207;25909:30;25923:4;25929:2;25933:5;25909:13;:30::i;:::-;;25957:4;25950:11;;25522:447:::0;;;;;;:::o;34195:266::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;34368:6:::1;34350:15;:24;;;;34403:13;34385:15;:31;;;;34443:10;34427:13;:26;;;;34195:266:::0;;;:::o;33764:110::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;33859:7:::1;33840:16;;:26;;;;;;;;;;;;;;;;;;33764:110:::0;:::o;36414:167::-;36467:7;36507:66;36551:9;:21;22416:42;36551:21;;;;;;;;;;;;;;;;36507:39;36524:9;:21;22329:42;36524:21;;;;;;;;;;;;;;;;36507:12;;:16;;:39;;;;:::i;:::-;:43;;:66;;;;:::i;:::-;36487:86;;36414:167;:::o;35121:182::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;35230:11:::1;;;;;;;;;;;:35;;;35266:10;35278:16;35230:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35121:182:::0;;:::o;22865:37::-;22900:2;22865:37;:::o;36769:138::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;36864:8:::1;36832:12;;:41;;;;;;;;;;;;;;;;;;36891:8;36884:4;;:15;;;;;;;;;;;;;;;;;;36769:138:::0;:::o;21457:83::-;21498:5;21523:9;;;;;;;;;;;21516:16;;21457:83;:::o;38148:104::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;38238:6:::1;38217:18;:27;;;;38148:104:::0;:::o;23058:72::-;;;;:::o;38010:130::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;38123:5:::1;38098:9;:22;38108:11;38098:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;38010:130:::0;;:::o;32535:388::-;32635:4;32692:72;32753:10;32692:11;:23;32704:10;32692:23;;;;;;;;;;;;;;;:56;32730:7;32692:56;;;;;;;;;;;;;;;;:60;;:72;;;;:::i;:::-;32657:11;:23;32669:10;32657:23;;;;;;;;;;;;;;;:32;32681:7;32657:32;;;;;;;;;;;;;;;:107;;;;32828:7;32780:113;;32803:10;32780:113;;;32850:11;:23;32862:10;32850:23;;;;;;;;;;;;;;;:32;32874:7;32850:32;;;;;;;;;;;;;;;;32780:113;;;;;;;;;;;;;;;;;;32911:4;32904:11;;32535:388;;;;:::o;22911:59::-;;;;:::o;22199:83::-;;;;;;;;;;;;;:::o;22754:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;31453:186::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;31523:5:::1;31520:112;;;31561:5;31545:13;;:21;;;;;;;;;;;;;;;;;;31520:112;;;31615:5;31599:13;;:21;;;;;;;;;;;;;;;;;;31520:112;31453:186:::0;:::o;23772:36::-;;;;;;;;;;;;;:::o;29252:279::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;23924:4:::1;23915:6;;:13;;;;;;;;;;;;;;;;;;29336:1:::2;29315:18;;:22;29312:63;;;29339:36;29356:18;;29339:16;:36::i;:::-;29312:63;29411:1;29390:18;;:22;29387:63;;;29414:36;29431:18;;29414:16;:36::i;:::-;29387:63;29483:1;29464:16;;:20;29461:62;;;29486:37;29506:16;;29486:19;:37::i;:::-;29461:62;23960:5:::1;23951:6;;:14;;;;;;;;;;;;;;;;;;29252:279::o:0;33644:112::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;33741:7:::1;33716:22;;:32;;;;;;;;;;;;;;;;;;33644:112:::0;:::o;35689:209::-;35803:12;20344:9;:7;:9::i;:::-;20336:18;;;;;;35835:11:::1;;;;;;;;;;;:23;;;35859:12;35873:9;35883:6;35835:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;35828:62;;35689:209:::0;;;;;:::o;36314:92::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;36391:6:::1;36378:10;:19;;;;36314:92:::0;:::o;40614:657::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;40732:7:::1;;:14;;40717:4;;:11;;:29;40709:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;40778:14;40803:15:::0;40821:10:::1;40803:28;;40846:6;40842:88;40860:7;;:14;;40856:1;:18;40842:88;;;40908:7;;40916:1;40908:10;;;;;;;;;;;;;40895:23;;;;40876:3;;;;;;;40842:88;;;;40970:9;40948:18;40958:7;40948:9;:18::i;:::-;:31;;40940:72;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41044:33;41067:9;41044;:18;41054:7;41044:18;;;;;;;;;;;;;;;;:22;;:33;;;;:::i;:::-;41023:9;:18;41033:7;41023:18;;;;;;;;;;;;;;;:54;;;;41093:6;41088:175;41107:4;;:11;;41103:1;:15;41088:175;;;41161:34;41184:7;;41192:1;41184:10;;;;;;;;;;;;;41161:9;:18;41171:4;;41176:1;41171:7;;;;;;;;;;;;;;;41161:18;;;;;;;;;;;;;;;;:22;;:34;;;;:::i;:::-;41140:9;:18;41150:4;;41155:1;41150:7;;;;;;;;;;;;;;;41140:18;;;;;;;;;;;;;;;:55;;;;41232:4;;41237:1;41232:7;;;;;;;;;;;;;;;41215:36;;41224:7;41215:36;;;41240:7;;41248:1;41240:10;;;;;;;;;;;;;41215:36;;;;;;;;;;;;;;;;;;41120:3;;;;;;;41088:175;;;;20365:1;;40614:657:::0;;;;:::o;33882:123::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;33990:7:::1;33968:13;:19;33982:4;33968:19;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33882:123:::0;;:::o;23452:36::-;;;;;;;;;;;;;:::o;38377:119::-;38443:7;38470:9;:18;38480:7;38470:18;;;;;;;;;;;;;;;;38463:25;;38377:119;;;:::o;23495:32::-;;;;;;;;;;;;;:::o;20482:126::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;20563:6:::1;;;;;;;;;;;20544:26;;;;;;;;;;;;20598:1;20581:6;;:19;;;;;;;;;;;;;;;;;;20482:126::o:0;36207:99::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;36292:6:::1;36275:14;:23;;;;36207:99:::0;:::o;23534:32::-;;;;;;;;;;;;;:::o;36682:79::-;36741:4;;;;;;;;;;;36724:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36682:79::o;35311:170::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;35387:15:::1;35405:21;35387:39;;35445:9;35437:27;;:36;35465:7;35437:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;20365:1;35311:170:::0;:::o;21865:32::-;;;;:::o;21824:34::-;;;;:::o;23654:39::-;;;;;;;;;;;;;:::o;37874:128::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;37987:7:::1;37958:19;:26;37978:5;37958:26;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;37874:128:::0;;:::o;36589:85::-;36635:4;36660:6;;;;;;;;;;;36659:7;36652:14;;36589:85;:::o;23230:41::-;;;;;;;;;;;;;:::o;22575:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;20217:79::-;20255:7;20282:6;;;;;;;;;;;20275:13;;20217:79;:::o;20382:92::-;20422:4;20460:6;;;;;;;;;;;20446:20;;:10;:20;;;20439:27;;20382:92;:::o;21949:35::-;;;;:::o;21362:87::-;21401:13;21434:7;21427:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21362:87;:::o;36031:168::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;36120:6:::1;36114:3;:12;36106:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;36188:3;36171:14;:20;;;;36031:168:::0;:::o;31955:572::-;32060:4;32082:16;32101:11;:23;32113:10;32101:23;;;;;;;;;;;;;;;:32;32125:7;32101:32;;;;;;;;;;;;;;;;32082:51;;32167:8;32148:15;:27;32144:225;;32227:1;32192:11;:23;32204:10;32192:23;;;;;;;;;;;;;;;:32;32216:7;32192:32;;;;;;;;;;;;;;;:36;;;;32144:225;;;32296:61;32327:15;32296:8;:12;;:61;;;;:::i;:::-;32261:11;:23;32273:10;32261:23;;;;;;;;;;;;;;;:32;32285:7;32261:32;;;;;;;;;;;;;;;:96;;;;32144:225;32432:7;32384:113;;32407:10;32384:113;;;32454:11;:23;32466:10;32454:23;;;;;;;;;;;;;;;:32;32478:7;32454:32;;;;;;;;;;;;;;;;32384:113;;;;;;;;;;;;;;;;;;32515:4;32508:11;;;31955:572;;;;:::o;23746:19::-;;;;;;;;;;;;;:::o;25299:215::-;25426:4;25404:2;21750:3;21736:18;;:2;:18;;;;21728:27;;;;;;25448:36:::1;25462:10;25474:2;25478:5;25448:13;:36::i;:::-;;25502:4;25495:11;;25299:215:::0;;;;;:::o;23575:30::-;;;;;;;;;;;;;:::o;34013:174::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;34116:7:::1;34094:29;;:18;;;;;;;;;;;:29;;;;34086:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34172:7;34151:18;;:28;;;;;;;;;;;;;;;;;;34013:174:::0;:::o;22689:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;22114:31::-;;;;:::o;21991:34::-;;;;:::o;22630:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;31247:198::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;31321:5:::1;31318:120;;;31363:5;31343:17;;:25;;;;;;;;;;;;;;;;;;31318:120;;;31421:5;31401:17;;:25;;;;;;;;;;;;;;;;;;31318:120;31247:198:::0;:::o;22074:33::-;;;;:::o;33516:120::-;33578:4;33602:19;:26;33622:5;33602:26;;;;;;;;;;;;;;;;;;;;;;;;;33595:33;;33516:120;;;:::o;37258:266::-;37353:7;37378:24;37405:9;:15;37415:4;;;;;;;;;;;37405:15;;;;;;;;;;;;;;;;37378:42;;37451:65;37493:22;:20;:22::i;:::-;37451:37;37464:23;37485:1;37464:16;:20;;:23;;;;:::i;:::-;37451:8;:12;;:37;;;;:::i;:::-;:41;;:65;;;;:::i;:::-;37431:85;;;37258:266;;;:::o;31647:104::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;31736:7:::1;31720:13;;:23;;;;;;;;;;;;;;;;;;31647:104:::0;:::o;31759:188::-;31879:7;31911:11;:19;31923:6;31911:19;;;;;;;;;;;;;;;:28;31931:7;31911:28;;;;;;;;;;;;;;;;31904:35;;31759:188;;;;:::o;37532:206::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;37653:7:::1;37623:37;;:19;:26;37643:5;37623:26;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;;37615:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;37723:7;37694:19;:26;37714:5;37694:26;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;37532:206:::0;;:::o;35906:117::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;36005:10:::1;35979:23;;:36;;;;;;;;;;;;;;;;;;35906:117:::0;:::o;22977:64::-;;;;:::o;35489:192::-;35594:12;20344:9;:7;:9::i;:::-;20336:18;;;;;;35632:12:::1;35625:29;;;35655:9;35666:6;35625:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;35618:55;;35489:192:::0;;;;;:::o;36915:335::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;37006:7:::1;37003:102;;;37039:25;:32;37065:5;37039:32;;;;;;;;;;;;;;;;;;;;;;;;;37038:33;37030:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;37003:102;37150:7;37115:25;:32;37141:5;37115:32;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;37194:4;37168:16;:23;37185:5;37168:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;37238:4;37209:19;:26;37229:5;37209:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;36915:335:::0;;:::o;21783:34::-;;;;:::o;20616:109::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;20689:28:::1;20708:8;20689:18;:28::i;:::-;20616:109:::0;:::o;21906:36::-;;;;:::o;34741:372::-;20344:9;:7;:9::i;:::-;20336:18;;;;;;34855:4:::1;34837:23;;:6;:23;;;;:61;;;;;34865:25;:33;34891:6;34865:33;;;;;;;;;;;;;;;;;;;;;;;;;34864:34;34837:61;34829:70;;;::::0;::::1;;34937:6;34910:16;:24;34927:6;34910:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;34960:6;34956:150;;;34983:11;;;;;;;;;;;:20;;;35004:6;35012:1;34983:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34956:150;;;35047:11;;;;;;;;;;;:20;;;35068:6;35076:17;35086:6;35076:9;:17::i;:::-;35047:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34956:150;34741:372:::0;;:::o;22034:33::-;;;;:::o;23278:35::-;;;;;;;;;;;;;:::o;23815:32::-;;;;;;;;;;;;;:::o;22467:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;4779:250::-;4837:7;4866:1;4861;:6;4857:47;;;4891:1;4884:8;;;;4857:47;4916:9;4932:1;4928;:5;4916:17;;4961:1;4956;4952;:5;;;;;;:10;4944:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5020:1;5013:8;;;4779:250;;;;;:::o;5037:132::-;5095:7;5122:39;5126:1;5129;5122:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5115:46;;5037:132;;;;:::o;33128:380::-;33281:1;33264:19;;:5;:19;;;;33256:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33362:1;33343:21;;:7;:21;;;;33335:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33446:6;33416:11;:18;33428:5;33416:18;;;;;;;;;;;;;;;:27;33435:7;33416:27;;;;;;;;;;;;;;;:36;;;;33484:7;33468:32;;33477:5;33468:32;;;33493:6;33468:32;;;;;;;;;;;;;;;;;;33128:380;;;:::o;4545:226::-;4665:7;4698:1;4693;:6;;4701:12;4685:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4725:9;4741:1;4737;:5;4725:17;;4762:1;4755:8;;;4545:226;;;;;:::o;26247:1628::-;26373:4;26401:9;:17;26411:6;26401:17;;;;;;;;;;;;;;;;;;;;;;;;;26400:18;:43;;;;;26423:9;:20;26433:9;26423:20;;;;;;;;;;;;;;;;;;;;;;;;;26422:21;26400:43;26392:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26481:18;;;;;;;;;;;:47;;;;26503:13;:25;26517:10;26503:25;;;;;;;;;;;;;;;;;;;;;;;;;26481:47;:60;;;;26532:9;:7;:9::i;:::-;26481:60;26473:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26590:15;:23;26606:6;26590:23;;;;;;;;;;;;;;;;;;;;;;;;;26589:24;:55;;;;;26618:15;:26;26634:9;26618:26;;;;;;;;;;;;;;;;;;;;;;;;;26617:27;26589:55;:81;;;;;26648:22;;;;;;;;;;;26589:81;26586:186;;;26705:10;;26695:6;:20;;26687:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26586:186;26790:6;;;;;;;;;;;26786:87;;;26820:41;26835:6;26843:9;26854:6;26820:14;:41::i;:::-;26813:48;;;;26786:87;26889:20;:18;:20::i;:::-;26885:67;;;26926:14;:12;:14::i;:::-;26885:67;26968:16;:14;:16::i;:::-;26964:59;;;27001:10;:8;:10::i;:::-;26964:59;27063:29;27085:6;27063:9;:17;27073:6;27063:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;27043:9;:17;27053:6;27043:17;;;;;;;;;;;;;;;:49;;;;27113:22;27138:32;27152:6;27160:9;27138:13;:32::i;:::-;:104;;27236:6;27138:104;;;27186:34;27194:6;27202:9;27213:6;27186:7;:34::i;:::-;27138:104;27113:129;;27278:40;27303:14;27278:9;:20;27288:9;27278:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;27255:9;:20;27265:9;27255:20;;;;;;;;;;;;;;;:63;;;;27334:16;;;;;;;;;;;:51;;;;;27355:19;:30;27375:9;27355:30;;;;;;;;;;;;;;;;;;;;;;;;;27354:31;27334:51;27331:150;;;27454:14;;27410:40;27435:14;27410:20;27420:9;27410;:20::i;:::-;:24;;:40;;;;:::i;:::-;:58;;27402:67;;;;;;27331:150;27497:16;:24;27514:6;27497:24;;;;;;;;;;;;;;;;;;;;;;;;;27493:96;;27528:11;;;;;;;;;;;:20;;;27549:6;27557:17;27567:6;27557:9;:17::i;:::-;27528:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27524:63;;;;;;27493:96;27603:16;:27;27620:9;27603:27;;;;;;;;;;;;;;;;;;;;;;;;;27599:105;;27637:11;;;;;;;;;;;:20;;;27658:9;27669:20;27679:9;27669;:20::i;:::-;27637:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27633:69;;;;;;27599:105;27720:13;;;;;;;;;;;27716:71;;27740:11;;;;;;;;;;;:19;;;27760:14;;27740:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27736:51;;;;;;27716:71;27820:9;27804:41;;27813:6;27804:41;;;27830:14;27804:41;;;;;;;;;;;;;;;;;;27863:4;27856:11;;;26247:1628;;;;;;:::o;4401:136::-;4459:7;4486:43;4490:1;4493;4486:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4479:50;;4401:136;;;;:::o;4212:181::-;4270:7;4290:9;4306:1;4302;:5;4290:17;;4331:1;4326;:6;;4318:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4384:1;4377:8;;;4212:181;;;;:::o;39034:431::-;39093:9;39105:25;39128:1;39105:18;;:22;;:25;;;;:::i;:::-;39093:37;;39141:14;39158:28;39181:4;39158:18;;:22;;:28;;;;:::i;:::-;39141:45;;39197:18;39218:21;39197:42;;39250:22;39267:4;39250:16;:22::i;:::-;39283:19;39305:40;39331:13;39305:21;:25;;:40;;;;:::i;:::-;39283:62;;39377:31;39400:7;39377:18;;:22;;:31;;;;:::i;:::-;39356:18;:52;;;;39419:38;39432:9;39442:14;39419:12;:38::i;:::-;39034:431;;;;;:::o;38677:349::-;38736:18;38757:21;38736:42;;38789:25;38806:7;38789:16;:25::i;:::-;38825:19;38847:40;38873:13;38847:21;:25;;:40;;;;:::i;:::-;38825:62;;38919:31;38942:7;38919:18;;:22;;:31;;;;:::i;:::-;38898:18;:52;;;;38969:23;;;;;;;;;;;38961:41;;:57;39003:14;38961:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38677:349;;;:::o;29959:363::-;30024:19;30046:21;30024:43;;30078:25;30095:7;30078:16;:25::i;:::-;30114:20;30137:41;30163:14;30137:21;:25;;:41;;;;:::i;:::-;30114:64;;30208:29;30229:7;30208:16;;:20;;:29;;;;:::i;:::-;30189:16;:48;;;;30252:11;;;;;;;;;;;:19;;;30281:15;30252:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30248:65;;;;;;29959:363;;;:::o;20733:187::-;20827:1;20807:22;;:8;:22;;;;20799:31;;;;;;20875:8;20846:38;;20867:6;;;;;;;;;;;20846:38;;;;;;;;;;;;20904:8;20895:6;;:17;;;;;;;;;;;;;;;;;;20733:187;:::o;5177:225::-;5297:7;5329:1;5325;:5;5332:12;5317:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5356:9;5372:1;5368;:5;;;;;;5356:17;;5393:1;5386:8;;;5177:225;;;;;:::o;25977:262::-;26095:4;26130:27;26150:6;26130:9;:15;26140:4;26130:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;26112:9;:15;26122:4;26112:15;;;;;;;;;;;;;;;:45;;;;26184:25;26202:6;26184:9;:13;26194:2;26184:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;26168:9;:13;26178:2;26168:13;;;;;;;;;;;;;;;:41;;;;26227:4;26220:11;;25977:262;;;;;:::o;30683:358::-;30736:4;30755:28;30786:24;30804:4;30786:9;:24::i;:::-;30755:55;;30821:12;30860:18;;30836:20;:42;;30821:57;;30911:17;;;;;;;;;;;:42;;;;;30947:6;;;;;;;;;;;30946:7;30911:42;:67;;;;;30971:7;30911:67;:122;;;;;30996:25;:37;31022:10;30996:37;;;;;;;;;;;;;;;;;;;;;;;;;30995:38;30911:122;30891:142;;;;30683:358;:::o;29539:254::-;23924:4;23915:6;;:13;;;;;;;;;;;;;;;;;;29618:1:::1;29597:18;;:22;29594:89;;;29635:36;29652:18;;29635:16;:36::i;:::-;29594:89;29719:1;29698:18;;:22;29695:89;;;29736:36;29753:18;;29736:16;:36::i;:::-;29695:89;23960:5:::0;23951:6;;:14;;;;;;;;;;;;;;;;;;29539:254::o;31049:188::-;31098:4;31136:13;;;;;;;;;;;:37;;;;;31167:6;;;;;;;;;;;31166:7;31136:37;:92;;;;;31191:25;:37;31217:10;31191:37;;;;;;;;;;;;;;;;;;;;;;;;;31190:38;31136:92;31115:113;;31049:188;:::o;29801:150::-;23924:4;23915:6;;:13;;;;;;;;;;;;;;;;;;29872:1:::1;29853:16;;:20;29850:88;;;29889:37;29909:16;;29889:19;:37::i;:::-;29850:88;23960:5:::0;23951:6;;:14;;;;;;;;;;;;;;;;;;29801:150::o;30330:345::-;30429:4;30454:19;:25;30474:4;30454:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;30483:19;:23;30503:2;30483:23;;;;;;;;;;;;;;;;;;;;;;;;;30454:52;30451:217;;;30529:5;30522:12;;;;30451:217;30591:25;:31;30617:4;30591:31;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;30626:25;:29;30652:2;30626:29;;;;;;;;;;;;;;;;;;;;;;;;;30591:64;30583:73;;30330:345;;;;;:::o;27883:1361::-;28004:7;28026:17;28054:9;28074;28094;28127:25;:33;28153:6;28127:33;;;;;;;;;;;;;;;;;;;;;;;;;28124:887;;;28185:47;28217:14;;28185:27;28196:15;;28185:6;:10;;:27;;;;:::i;:::-;:31;;:47;;;;:::i;:::-;28178:54;;28269:4;28247:18;;:26;;;;;;;;;;;28295:47;28327:14;;28295:27;28306:15;;28295:6;:10;;:27;;;;:::i;:::-;:31;;:47;;;;:::i;:::-;28288:54;;28379:4;28357:18;;:26;;;;;;;;;;;28405:45;28435:14;;28405:25;28416:13;;28405:6;:10;;:25;;;;:::i;:::-;:29;;:45;;;;:::i;:::-;28398:52;;28485:4;28465:16;;:24;;;;;;;;;;;28518;28537:4;28518:14;28527:4;28518;:8;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;28506:36;;28124:887;;;28572:25;:36;28598:9;28572:36;;;;;;;;;;;;;;;;;;;;;;;;;28569:442;;;28633:48;28666:14;;28633:28;28644:16;;28633:6;:10;;:28;;;;:::i;:::-;:32;;:48;;;;:::i;:::-;28626:55;;28718:4;28696:18;;:26;;;;;;;;;;;28744:48;28777:14;;28744:28;28755:16;;28744:6;:10;;:28;;;;:::i;:::-;:32;;:48;;;;:::i;:::-;28737:55;;28829:4;28807:18;;:26;;;;;;;;;;;28855:46;28886:14;;28855:26;28866:14;;28855:6;:10;;:26;;;;:::i;:::-;:30;;:46;;;;:::i;:::-;28848:53;;28936:4;28916:16;;:24;;;;;;;;;;;28969;28988:4;28969:14;28978:4;28969;:8;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;28957:36;;28569:442;28124:887;29038:1;29026:9;:13;29023:173;;;29083:39;29112:9;29083;:24;29101:4;29083:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;29056:9;:24;29074:4;29056:24;;;;;;;;;;;;;;;:66;;;;29167:4;29142:42;;29151:6;29142:42;;;29174:9;29142:42;;;;;;;;;;;;;;;;;;29023:173;29215:21;29226:9;29215:6;:10;;:21;;;;:::i;:::-;29208:28;;;;;;27883:1361;;;;;:::o;39976:564::-;40102:21;40140:1;40126:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40102:40;;40171:4;40153;40158:1;40153:7;;;;;;;;;;;;;:23;;;;;;;;;;;40197:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40187:4;40192:1;40187:7;;;;;;;;;;;;;:23;;;;;;;;;;;40223:53;40240:4;40255:6;;;;;;;;;;;40264:11;40223:8;:53::i;:::-;40315:6;;;;;;;;;;;:57;;;40387:11;40413:1;40457:4;40484;40504:15;40315:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39976:564;;:::o;39473:495::-;39621:53;39638:4;39653:6;;;;;;;;;;;39662:11;39621:8;:53::i;:::-;39715:6;;;;;;;;;;;:22;;;39745:9;39778:4;39798:11;39824:1;39867;39910:7;:5;:7::i;:::-;39932:15;39715:243;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39473:495;;:::o
Swarm Source
ipfs://85ee70eb04610da5f14b15a494ad5319fe7d6485122e44c4a16b7b197df5ae6e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.