Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
10,500,000 GLDN
Holders
715
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
$38,613.75
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
5.519173570770420192 GLDNValue
$0.02 ( ~5.92240400989644E-06 Eth) [0.0001%]Loading...
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 THE REAL 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
60806040526000600355600060045560006005556028600655600060075560286008556103e8600c557376b61a1afe8711f431d3d6f770e8fe7e7004e871600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a0a62a037a002601555620000c3620186a0620000af600560155462000dae60201b62003c391790919060201c565b62000e3960201b62003cbf1790919060201c565b601655620000fe600c54620000ea601e60155462000dae60201b62003c391790919060201c565b62000e3960201b62003cbf1790919060201c565b60175562000139600c5462000125600f60155462000dae60201b62003c391790919060201c565b62000e3960201b62003cbf1790919060201c565b6018556001601960006101000a81548160ff0219169083151502179055506001601960016101000a81548160ff0219169083151502179055506001601c60006101000a81548160ff0219169083151502179055506001601c60016101000a81548160ff0219169083151502179055506001601c60026101000a81548160ff0219169083151502179055506207a120601e556000602160146101000a81548160ff021916908315150217905550348015620001f257600080fd5b506040518060400160405280600e81526020017f476f6c64205265747269657665720000000000000000000000000000000000008152506040518060400160405280600481526020017f474c444e00000000000000000000000000000000000000000000000000000000815250601282600090805190602001906200027992919062000f80565b5081600190805190602001906200029292919062000f80565b5080600260006101000a81548160ff021916908360ff16021790555050505033600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620003b057600080fd5b505afa158015620003c5573d6000803e3d6000fd5b505050506040513d6020811015620003dc57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200047157600080fd5b505afa15801562000486573d6000803e3d6000fd5b505050506040513d60208110156200049d57600080fd5b8101908080519060200190929190505050306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200051957600080fd5b505af11580156200052e573d6000803e3d6000fd5b505050506040513d60208110156200054557600080fd5b8101908080519060200190929190505050601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160126000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550737a250d5630b4cf539739df2c5dacb4c659f2488d604051620007599062001017565b808273ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f08015801562000796573d6000803e3d6000fd5b50601c60046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601360006200085062000e8b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016011600062000a3b62000e8b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160116000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600062000b7462000e8b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600062000c3362000e8b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601554601a600062000cf362000e8b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000d4162000e8b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6015546040518082815260200191505060405180910390a362001044565b60008083141562000dc3576000905062000e33565b600082840290508284828162000dd557fe5b041462000e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620085c96021913960400191505060405180910390fd5b809150505b92915050565b600062000e8383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000eb560201b60201c565b905092915050565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808311829062000f65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000f2957808201518184015260208101905062000f0c565b50505050905090810190601f16801562000f575780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000f7257fe5b049050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000fb8576000855562001004565b82601f1062000fd357805160ff191683800117855562001004565b8280016001018555821562001004579182015b828111156200100357825182559160200191906001019062000fe6565b5b50905062001013919062001025565b5090565b611be480620069e583390190565b5b808211156200104057600081600090555060010162001026565b5090565b61599180620010546000396000f3fe6080604052600436106104615760003560e01c80637bce5a041161023f578063c867d60b11610139578063e5711e8b116100b6578063f708a64f1161007a578063f708a64f1461196d578063f8326795146119ca578063f872858a146119f5578063f887ea4014611a22578063f9f92be414611a6357610468565b8063e5711e8b146117d8578063ea8b2c4414611869578063f11a24d3146118c6578063f2fde38b146118f1578063f63743421461194257610468565b8063d7fa3f25116100fd578063d7fa3f251461163d578063dd62ed3e1461167a578063dde04b95146116ff578063e01bb6881461175c578063e2f45605146117ad57610468565b8063c867d60b146114b8578063cfbac92f1461151f578063cfe0e6191461155c578063d439979014611587578063d51ed1c8146115ee57610468565b806395d89b41116101c7578063b37f80f81161018b578063b37f80f814611391578063b46d8b85146113be578063b62496f5146113fb578063b677814c14611462578063bb8d51311461148d57610468565b806395d89b41146111a35780639d1944f514611233578063a457c2d71461126e578063a8aa1b31146112df578063a9059cbb1461132057610468565b8063852614851161020e57806385261485146110765780638b42507f146110a35780638da5cb5b1461110a5780638f32d59b1461114b578063921369131461117857610468565b80637bce5a0414610f805780637d87d0a914610fab5780637e504d5914610fec57806383b4ac681461104957610468565b80633eaaf86b1161035b57806366a16cad116102d8578063728d41c91161029c578063728d41c914610e8557806373824a9914610ec0578063753d02a114610eed578063764d72bf14610f0457806377a3b60914610f5557610468565b806366a16cad14610d525780636912652c14610daf57806370a0823114610ddc57806370ee739514610e41578063715018a614610e6e57610468565b806351bc3c851161031f57806351bc3c8514610b575780636140a51e14610b6e57806361c2059c14610bab57806364f5a5bb14610c3c57806365216a4114610c7757610468565b80633eaaf86b14610a065780634144d9e414610a315780634355855a14610a725780634bc6dd1814610ad95780634d709adf14610b1657610468565b80632563ae83116103e9578063313ce567116103ad578063313ce567146108a4578063320d4534146108d2578063334901911461090d57806337c9be8714610938578063395093511461099557610468565b80632563ae831461077b5780632b112e49146107b85780632d48e896146107e35780632e0f2625146108285780632f34d2821461085357610468565b806318160ddd1161043057806318160ddd146105f65780631d865c301461062157806323a2f1fc1461067057806323b872dd1461069b57806325519cf21461072c57610468565b806306fdde031461046d578063095ea7b3146104fd578063180b0d7e1461056e578063180fe7c91461059957610468565b3661046857005b600080fd5b34801561047957600080fd5b50610482611aca565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104c25780820151818401526020810190506104a7565b50505050905090810190601f1680156104ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561050957600080fd5b506105566004803603604081101561052057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b6c565b60405180821515815260200191505060405180910390f35b34801561057a57600080fd5b50610583611b83565b6040518082815260200191505060405180910390f35b3480156105a557600080fd5b506105f4600480360360408110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611b89565b005b34801561060257600080fd5b5061060b611bf5565b6040518082815260200191505060405180910390f35b34801561062d57600080fd5b5061066e6004803603606081101561064457600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611bff565b005b34801561067c57600080fd5b50610685611c2a565b6040518082815260200191505060405180910390f35b3480156106a757600080fd5b50610714600480360360608110156106be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c30565b60405180821515815260200191505060405180910390f35b34801561073857600080fd5b506107796004803603606081101561074f57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611e6f565b005b34801561078757600080fd5b506107b66004803603602081101561079e57600080fd5b81019080803515159060200190929190505050611e9a565b005b3480156107c457600080fd5b506107cd611ec8565b6040518082815260200191505060405180910390f35b3480156107ef57600080fd5b506108266004803603604081101561080657600080fd5b810190808035906020019092919080359060200190929190505050611f76565b005b34801561083457600080fd5b5061083d612020565b6040518082815260200191505060405180910390f35b34801561085f57600080fd5b506108a26004803603602081101561087657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612025565b005b3480156108b057600080fd5b506108b96120bb565b604051808260ff16815260200191505060405180910390f35b3480156108de57600080fd5b5061090b600480360360208110156108f557600080fd5b81019080803590602001909291905050506120d2565b005b34801561091957600080fd5b506109226120ed565b6040518082815260200191505060405180910390f35b34801561094457600080fd5b506109936004803603604081101561095b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506120f3565b005b3480156109a157600080fd5b506109ee600480360360408110156109b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061215f565b60405180821515815260200191505060405180910390f35b348015610a1257600080fd5b50610a1b61235b565b6040518082815260200191505060405180910390f35b348015610a3d57600080fd5b50610a46612361565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a7e57600080fd5b50610ac160048036036020811015610a9557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612387565b60405180821515815260200191505060405180910390f35b348015610ae557600080fd5b50610b1460048036036020811015610afc57600080fd5b810190808035151590602001909291905050506123a7565b005b348015610b2257600080fd5b50610b2b6123fb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b6357600080fd5b50610b6c612421565b005b348015610b7a57600080fd5b50610ba960048036036020811015610b9157600080fd5b810190808035151590602001909291905050506124af565b005b348015610bb757600080fd5b50610c2460048036036060811015610bce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124dd565b60405180821515815260200191505060405180910390f35b348015610c4857600080fd5b50610c7560048036036020811015610c5f57600080fd5b81019080803590602001909291905050506125e5565b005b348015610c8357600080fd5b50610d5060048036036040811015610c9a57600080fd5b8101908080359060200190640100000000811115610cb757600080fd5b820183602082011115610cc957600080fd5b80359060200191846020830284011164010000000083111715610ceb57600080fd5b909192939192939080359060200190640100000000811115610d0c57600080fd5b820183602082011115610d1e57600080fd5b80359060200191846020830284011164010000000083111715610d4057600080fd5b9091929391929390505050612600565b005b348015610d5e57600080fd5b50610dad60048036036040811015610d7557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612992565b005b348015610dbb57600080fd5b50610dc46129fe565b60405180821515815260200191505060405180910390f35b348015610de857600080fd5b50610e2b60048036036020811015610dff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a11565b6040518082815260200191505060405180910390f35b348015610e4d57600080fd5b50610e56612a5a565b60405180821515815260200191505060405180910390f35b348015610e7a57600080fd5b50610e83612a6d565b005b348015610e9157600080fd5b50610ebe60048036036020811015610ea857600080fd5b8101908080359060200190929190505050612b27565b005b348015610ecc57600080fd5b50610ed5612b42565b60405180821515815260200191505060405180910390f35b348015610ef957600080fd5b50610f02612b55565b005b348015610f1057600080fd5b50610f5360048036036020811015610f2757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bd9565b005b348015610f6157600080fd5b50610f6a612c3a565b6040518082815260200191505060405180910390f35b348015610f8c57600080fd5b50610f95612c40565b6040518082815260200191505060405180910390f35b348015610fb757600080fd5b50610fc0612c46565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ff857600080fd5b506110476004803603604081101561100f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612c6c565b005b34801561105557600080fd5b5061105e612cd8565b60405180821515815260200191505060405180910390f35b34801561108257600080fd5b5061108b612cf0565b60405180821515815260200191505060405180910390f35b3480156110af57600080fd5b506110f2600480360360208110156110c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d03565b60405180821515815260200191505060405180910390f35b34801561111657600080fd5b5061111f612d23565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561115757600080fd5b50611160612d4d565b60405180821515815260200191505060405180910390f35b34801561118457600080fd5b5061118d612da5565b6040518082815260200191505060405180910390f35b3480156111af57600080fd5b506111b8612dab565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156111f85780820151818401526020810190506111dd565b50505050905090810190601f1680156112255780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561123f57600080fd5b5061126c6004803603602081101561125657600080fd5b8101908080359060200190929190505050612e4d565b005b34801561127a57600080fd5b506112c76004803603604081101561129157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ee0565b60405180821515815260200191505060405180910390f35b3480156112eb57600080fd5b506112f4613170565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561132c57600080fd5b506113796004803603604081101561134357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613196565b60405180821515815260200191505060405180910390f35b34801561139d57600080fd5b506113a66131ea565b60405180821515815260200191505060405180910390f35b3480156113ca57600080fd5b506113f9600480360360208110156113e157600080fd5b810190808035151590602001909291905050506131fd565b005b34801561140757600080fd5b5061144a6004803603602081101561141e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132b4565b60405180821515815260200191505060405180910390f35b34801561146e57600080fd5b506114776132d4565b6040518082815260200191505060405180910390f35b34801561149957600080fd5b506114a26132da565b6040518082815260200191505060405180910390f35b3480156114c457600080fd5b50611507600480360360208110156114db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132e0565b60405180821515815260200191505060405180910390f35b34801561152b57600080fd5b5061155a6004803603602081101561154257600080fd5b81019080803515159060200190929190505050613300565b005b34801561156857600080fd5b50611571613354565b6040518082815260200191505060405180910390f35b34801561159357600080fd5b506115d6600480360360208110156115aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061335a565b60405180821515815260200191505060405180910390f35b3480156115fa57600080fd5b506116276004803603602081101561161157600080fd5b81019080803590602001909291905050506133b0565b6040518082815260200191505060405180910390f35b34801561164957600080fd5b506116786004803603602081101561166057600080fd5b8101908080351515906020019092919050505061345e565b005b34801561168657600080fd5b506116e96004803603604081101561169d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061348c565b6040518082815260200191505060405180910390f35b34801561170b57600080fd5b5061175a6004803603604081101561172257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613513565b005b34801561176857600080fd5b506117ab6004803603602081101561177f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613645565b005b3480156117b957600080fd5b506117c261369a565b6040518082815260200191505060405180910390f35b3480156117e457600080fd5b50611851600480360360608110156117fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506136a0565b60405180821515815260200191505060405180910390f35b34801561187557600080fd5b506118c46004803603604081101561188c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613768565b005b3480156118d257600080fd5b506118db61394b565b6040518082815260200191505060405180910390f35b3480156118fd57600080fd5b506119406004803603602081101561191457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613951565b005b34801561194e57600080fd5b5061195761396e565b6040518082815260200191505060405180910390f35b34801561197957600080fd5b506119c86004803603604081101561199057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613974565b005b3480156119d657600080fd5b506119df613bda565b6040518082815260200191505060405180910390f35b348015611a0157600080fd5b50611a0a613be0565b60405180821515815260200191505060405180910390f35b348015611a2e57600080fd5b50611a37613bf3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015611a6f57600080fd5b50611ab260048036036020811015611a8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c19565b60405180821515815260200191505060405180910390f35b606060008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b625780601f10611b3757610100808354040283529160200191611b62565b820191906000526020600020905b815481529060010190602001808311611b4557829003601f168201915b5050505050905090565b6000611b79338484613d09565b6001905092915050565b600c5481565b611b91612d4d565b611b9a57600080fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000601554905090565b611c07612d4d565b611c1057600080fd5b826006819055508160078190555080600881905550505050565b60185481565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c6d57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611e5757611dd6836040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f009092919063ffffffff16565b601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611e62858585613fc0565b5060019150509392505050565b611e77612d4d565b611e8057600080fd5b826003819055508160048190555080600581905550505050565b611ea2612d4d565b611eab57600080fd5b80601960016101000a81548160ff02191690831515021790555050565b6000611f71601a60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f63601a600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460155461483990919063ffffffff16565b61483990919063ffffffff16565b905090565b611f7e612d4d565b611f8757600080fd5b601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050505050565b601281565b61202d612d4d565b61203657600080fd5b80602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260009054906101000a900460ff16905090565b6120da612d4d565b6120e357600080fd5b8060168190555050565b60175481565b6120fb612d4d565b61210457600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006121f082601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60155481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60136020528060005260406000206000915054906101000a900460ff1681565b6123af612d4d565b6123b857600080fd5b80156123dd5780601c60016101000a81548160ff0219169083151502179055506123f8565b80601c60016101000a81548160ff0219169083151502179055505b50565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612429612d4d565b61243257600080fd5b6001602160146101000a81548160ff021916908315150217905550600060095411156124645761246360095461490b565b5b6000600a54111561247b5761247a600a5461498f565b5b6000600b54111561249257612491600b54614a3d565b5b6000602160146101000a81548160ff021916908315150217905550565b6124b7612d4d565b6124c057600080fd5b80601960006101000a81548160ff02191690831515021790555050565b60006124e7612d4d565b6124f057600080fd5b601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e5711e8b8585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156125a157600080fd5b505af11580156125b5573d6000803e3d6000fd5b505050506040513d60208110156125cb57600080fd5b810190808051906020019092919050505090509392505050565b6125ed612d4d565b6125f657600080fd5b8060188190555050565b612608612d4d565b61261157600080fd5b81819050848490501461268c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4c656e677468204d69736d61746368212100000000000000000000000000000081525060200191505060405180910390fd5b60008033905060005b848490508110156126c4578484828181106126ac57fe5b90506020020135830192508080600101915050612695565b50816126cf82612a11565b1015612743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4552524f523a20496e73756666696369656e742042616c616e6365212100000081525060200191505060405180910390fd5b61279582601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461483990919063ffffffff16565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b86869050811015612989576128728585838181106127f557fe5b90506020020135601a60008a8a8681811061280c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a600089898581811061288257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508686828181106128e957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87878581811061296057fe5b905060200201356040518082815260200191505060405180910390a380806001019150506127db565b50505050505050565b61299a612d4d565b6129a357600080fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601c60019054906101000a900460ff1681565b612a75612d4d565b612a7e57600080fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b612b2f612d4d565b612b3857600080fd5b8060178190555050565b601c60029054906101000a900460ff1681565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612bbf57600080fd5b505af1158015612bd3573d6000803e3d6000fd5b50505050565b612be1612d4d565b612bea57600080fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612c35573d6000803e3d6000fd5b505050565b60055481565b60045481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612c74612d4d565b612c7d57600080fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000602160149054906101000a900460ff1615905090565b601960009054906101000a900460ff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60075481565b606060018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e435780601f10612e1857610100808354040283529160200191612e43565b820191906000526020600020905b815481529060010190602001808311612e2657829003601f168201915b5050505050905090565b612e55612d4d565b612e5e57600080fd5b620b71b08110612ed6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f476173206d757374206265206c6f776572207468616e2037353030303000000081525060200191505060405180910390fd5b80601e8190555050565b600080601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808310612ff0576000601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613084565b613003838261483990919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131d357600080fd5b6131de338585613fc0565b50600191505092915050565b601c60039054906101000a900460ff1681565b613205612d4d565b61320e57600080fd5b801515601c60039054906101000a900460ff1615151415613297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4e6f74204368616e67656421210000000000000000000000000000000000000081525060200191505060405180910390fd5b80601c60036101000a81548160ff02191690831515021790555050565b60126020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60085481565b60116020528060005260406000206000915054906101000a900460ff1681565b613308612d4d565b61331157600080fd5b80156133365780601c60006101000a81548160ff021916908315150217905550613351565b80601c60006101000a81548160ff0219169083151502179055505b50565b600a5481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080601a6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050613456613422611ec8565b613448613439600285613c3990919063ffffffff16565b86613c3990919063ffffffff16565b613cbf90919063ffffffff16565b915050919050565b613466612d4d565b61346f57600080fd5b80601c60026101000a81548160ff02191690831515021790555050565b6000601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61351b612d4d565b61352457600080fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156135ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4572726f723a204e6f74206368616e676564000000000000000000000000000081525060200191505060405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61364d612d4d565b61365657600080fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60006136aa612d4d565b6136b357600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561372457600080fd5b505af1158015613738573d6000803e3d6000fd5b505050506040513d602081101561374e57600080fd5b810190808051906020019092919050505090509392505050565b613770612d4d565b61377957600080fd5b801561384057601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561383f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5061697220416c7265616479205365742121000000000000000000000000000081525060200191505060405180910390fd5b5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60035481565b613959612d4d565b61396257600080fd5b61396b81614b08565b50565b60065481565b61397c612d4d565b61398557600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613a0b5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613a1457600080fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015613b2257601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613b0557600080fd5b505af1158015613b19573d6000803e3d6000fd5b50505050613bd6565b601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683613b6a85612a11565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613bbd57600080fd5b505af1158015613bd1573d6000803e3d6000fd5b505050505b5050565b60095481565b601960019054906101000a900460ff1681565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b600080831415613c4c5760009050613cb9565b6000828402905082848281613c5d57fe5b0414613cb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159176021913960400191505060405180910390fd5b809150505b92915050565b6000613d0183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c02565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806159386024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806158cd6022913960400191505060405180910390fd5b80601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000838311158290613fad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f72578082015181840152602081019050613f57565b50505050905090810190601f168015613f9f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156140665750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6140d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e5f626c61636b6c697374000000000000000000000000000000000000000081525060200191505060405180910390fd5b601c60039054906101000a900460ff168061413c5750601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061414b575061414a612d4d565b5b6141bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f54726164652069732043757272656e746c79205061757365642121000000000081525060200191505060405180910390fd5b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156142615750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156142795750601960009054906101000a900460ff165b156142da576018548211156142d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806158ef6028913960400191505060405180910390fd5b5b602160149054906101000a900460ff1615614301576142fa848484614cc8565b9050614832565b614309614dff565b1561431757614316614ea6565b5b61431f614f0c565b1561432d5761432c614f92565b5b61437f82601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461483990919063ffffffff16565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006143ce8585614fe1565b6143d857826143e4565b6143e385858561513c565b5b905061443881601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601960019054906101000a900460ff1680156144e15750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561451057601754614504826144f687612a11565b61488390919063ffffffff16565b111561450f57600080fd5b5b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661461857601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96866145a988612a11565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156145fc57600080fd5b505af192505050801561460d575060015b61461657614617565b5b5b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661472057601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96856146b187612a11565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561470457600080fd5b505af1925050508015614715575060015b61471e5761471f565b5b5b601c60029054906101000a900460ff166147c757601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601e546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156147ab57600080fd5b505af19250505080156147bc575060015b6147c5576147c6565b5b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019150505b9392505050565b600061487b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f00565b905092915050565b600080828401905083811015614901576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006149236002600954613cbf90919063ffffffff16565b9050600061493c8260095461483990919063ffffffff16565b9050600047905061494c836154c3565b6000614961824761483990919063ffffffff16565b90506149788560095461483990919063ffffffff16565b6009819055506149888382615777565b5050505050565b600047905061499d826154c3565b60006149b2824761483990919063ffffffff16565b90506149c983600a5461483990919063ffffffff16565b600a81905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614a37573d6000803e3d6000fd5b50505050565b6000479050614a4b826154c3565b6000614a60824761483990919063ffffffff16565b9050614a7783600b5461483990919063ffffffff16565b600b81905550601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015614ae757600080fd5b505af193505050508015614af9575060015b614b0257614b03565b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614b4257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290614cae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614c73578082015181840152602081019050614c58565b50505050905090810190601f168015614ca05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614cba57fe5b049050809150509392505050565b6000614d1c82601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461483990919063ffffffff16565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614db182601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b600080614e0b30612a11565b905060006016548210159050601c60009054906101000a900460ff168015614e405750602160149054906101000a900460ff16155b8015614e495750805b8015614e9f5750601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9250505090565b6001602160146101000a81548160ff02191690831515021790555060006009541115614ed857614ed760095461490b565b5b6000600a541115614eef57614eee600a5461498f565b5b6000602160146101000a81548160ff021916908315150217905550565b6000601c60019054906101000a900460ff168015614f375750602160149054906101000a900460ff16155b8015614f8d5750601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905090565b6001602160146101000a81548160ff0219169083151502179055506000600b541115614fc457614fc3600b54614a3d565b5b6000602160146101000a81548160ff021916908315150217905550565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806150845750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156150925760009050615136565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806151335750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90505b92915050565b6000806000806000601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615615273576151bf600c546151b160035489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b9250826009600082825401925050819055506151fa600c546151ec60045489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b915081600a60008282540192505081905550615235600c5461522760055489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b905080600b6000828254019250508190555061526c8161525e848661488390919063ffffffff16565b61488390919063ffffffff16565b935061539f565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561539e576152ee600c546152e060065489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b925082600960008282540192505081905550615329600c5461531b60075489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b915081600a60008282540192505081905550615364600c5461535660085489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b905080600b6000828254019250508190555061539b8161538d848661488390919063ffffffff16565b61488390919063ffffffff16565b93505b5b60008411156154a3576153fa84601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35b6154b6848761483990919063ffffffff16565b9450505050509392505050565b6000600267ffffffffffffffff811180156154dd57600080fd5b5060405190808252806020026020018201604052801561550c5781602001602082028036833780820191505090505b509050308160008151811061551d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156155bf57600080fd5b505afa1580156155d3573d6000803e3d6000fd5b505050506040513d60208110156155e957600080fd5b81019080805190602001909291905050508160018151811061560757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061566e30602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613d09565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015615732578082015181840152602081019050615717565b505050509050019650505050505050600060405180830381600087803b15801561575b57600080fd5b505af115801561576f573d6000803e3d6000fd5b505050505050565b6157a430602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613d09565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806157f0612d23565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561587557600080fd5b505af1158015615889573d6000803e3d6000fd5b50505050506040513d60608110156158a057600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505056fe45524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a264697066735822122009f9ed15ed3cddd10bf8341ee74f666a15f38d63a976fe4fafe075252e966d7364736f6c6343000706003360806040527345804880de22913dafe09f4980848ece6ecbaf78600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610e10600d55670de0b6b3a7640000600e5534801561008a57600080fd5b50604051611be4380380611be4833981810160405260208110156100ad57600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561010d57737a250d5630b4cf539739df2c5dacb4c659f2488d61010f565b805b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611a458061019f6000396000f3fe6080604052600436106100f35760003560e01c8063ce7c2ac21161008a578063efca2eed11610059578063efca2eed1461040d578063f0fc6bca14610438578063ffb2c4791461044f578063ffd49c841461048a576100f3565b8063ce7c2ac2146102d4578063d0e30db014610347578063e2d2e21914610351578063e5711e8b1461037c576100f3565b80632d48e896116100c65780632d48e8961461020e5780633a98ef39146102535780634fab0ae81461027e578063997664d7146102a9576100f3565b806311ce023d146100f857806314b6ca961461012357806326987b601461017e57806328fd3198146101a9575b600080fd5b34801561010457600080fd5b5061010d6104b5565b6040518082815260200191505060405180910390f35b34801561012f57600080fd5b5061017c6004803603604081101561014657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104bb565b005b34801561018a57600080fd5b5061019361077a565b6040518082815260200191505060405180910390f35b3480156101b557600080fd5b506101f8600480360360208110156101cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610780565b6040518082815260200191505060405180910390f35b34801561021a57600080fd5b506102516004803603604081101561023157600080fd5b81019080803590602001909291908035906020019092919050505061089a565b005b34801561025f57600080fd5b50610268610904565b6040518082815260200191505060405180910390f35b34801561028a57600080fd5b5061029361090a565b6040518082815260200191505060405180910390f35b3480156102b557600080fd5b506102be610910565b6040518082815260200191505060405180910390f35b3480156102e057600080fd5b50610323600480360360208110156102f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610916565b60405180848152602001838152602001828152602001935050505060405180910390f35b61034f610940565b005b34801561035d57600080fd5b50610366610e3b565b6040518082815260200191505060405180910390f35b34801561038857600080fd5b506103f56004803603606081101561039f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e41565b60405180821515815260200191505060405180910390f35b34801561041957600080fd5b50610422610f51565b6040518082815260200191505060405180910390f35b34801561044457600080fd5b5061044d610f57565b005b34801561045b57600080fd5b506104886004803603602081101561047257600080fd5b8101908080359060200190929190505050610f62565b005b34801561049657600080fd5b5061049f6110dc565b6040518082815260200191505060405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461051357600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154111561056857610567826110e2565b5b6000811180156105ba57506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156105cd576105c8826113a8565b61062f565b60008114801561061f57506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b1561062e5761062d82611457565b5b5b6106988161068a600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460075461163090919063ffffffff16565b61167a90919063ffffffff16565b60078190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610730600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611702565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600b5481565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156107d55760009050610895565b6000610822600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611702565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905080821161087d57600092505050610895565b610890818361163090919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f257600080fd5b81600d8190555080600e819055505050565b60075481565b600e5481565b60085481565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461099857600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610a2357600080fd5b505afa158015610a37573d6000803e3d6000fd5b505050506040513d6020811015610a4d57600080fd5b810190808051906020019092919050505090506000600267ffffffffffffffff81118015610a7a57600080fd5b50604051908082528060200260200182016040528015610aa95781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1457600080fd5b505afa158015610b28573d6000803e3d6000fd5b505050506040513d6020811015610b3e57600080fd5b810190808051906020019092919050505081600081518110610b5c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610bc657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b815260040180858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610cbe578082015181840152602081019050610ca3565b50505050905001955050505050506000604051808303818588803b158015610ce557600080fd5b505af1158015610cf9573d6000803e3d6000fd5b50505050506000610dd683600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d8d57600080fd5b505afa158015610da1573d6000803e3d6000fd5b505050506040513d6020811015610db757600080fd5b810190808051906020019092919050505061163090919063ffffffff16565b9050610ded8160085461167a90919063ffffffff16565b600881905550610e30610e1f600754610e1184600c5461173490919063ffffffff16565b6117ba90919063ffffffff16565b600a5461167a90919063ffffffff16565b600a81905550505050565b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e9c57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610f0d57600080fd5b505af1158015610f21573d6000803e3d6000fd5b505050506040513d6020811015610f3757600080fd5b810190808051906020019092919050505090509392505050565b60095481565b610f60336110e2565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fba57600080fd5b600060038054905090506000811415610fd357506110d9565b6000805a905060005b8483108015610fea57508381105b156110d45783600b5410611001576000600b819055505b6110436003600b548154811061101357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611804565b1561108b5761108a6003600b548154811061105a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110e2565b5b6110b06110a15a8461163090919063ffffffff16565b8461167a90919063ffffffff16565b92505a9150600b600081548092919060010191905055508080600101915050610fdc565b505050505b50565b600d5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415611132576113a5565b600061113d82610780565b905060008111156113a35761115d8160095461167a90919063ffffffff16565b600981905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111f657600080fd5b505af115801561120a573d6000803e3d6000fd5b505050506040513d602081101561122057600080fd5b81019080805190602001909291905050505042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112cb81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461167a90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061135c600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611702565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60036001600380549050038154811061146c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106114e357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546004600060036001600380549050038154811061158457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060038054806115f857fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061167283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611868565b905092915050565b6000808284019050838110156116f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061172d600c5461171f600a548561173490919063ffffffff16565b6117ba90919063ffffffff16565b9050919050565b60008083141561174757600090506117b4565b600082840290508284828161175857fe5b04146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806119ef6021913960400191505060405180910390fd5b809150505b92915050565b60006117fc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611928565b905092915050565b600042600d54600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011080156118615750600e5461185f83610780565b115b9050919050565b6000838311158290611915576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118da5780820151818401526020810190506118bf565b50505050905090810190601f1680156119075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561199957808201518184015260208101905061197e565b50505050905090810190601f1680156119c65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816119e057fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212203ac42a39b5f10c2724891956c9e0944aec8649c65cccff94a628b609011885dc64736f6c63430007060033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77
Deployed Bytecode
0x6080604052600436106104615760003560e01c80637bce5a041161023f578063c867d60b11610139578063e5711e8b116100b6578063f708a64f1161007a578063f708a64f1461196d578063f8326795146119ca578063f872858a146119f5578063f887ea4014611a22578063f9f92be414611a6357610468565b8063e5711e8b146117d8578063ea8b2c4414611869578063f11a24d3146118c6578063f2fde38b146118f1578063f63743421461194257610468565b8063d7fa3f25116100fd578063d7fa3f251461163d578063dd62ed3e1461167a578063dde04b95146116ff578063e01bb6881461175c578063e2f45605146117ad57610468565b8063c867d60b146114b8578063cfbac92f1461151f578063cfe0e6191461155c578063d439979014611587578063d51ed1c8146115ee57610468565b806395d89b41116101c7578063b37f80f81161018b578063b37f80f814611391578063b46d8b85146113be578063b62496f5146113fb578063b677814c14611462578063bb8d51311461148d57610468565b806395d89b41146111a35780639d1944f514611233578063a457c2d71461126e578063a8aa1b31146112df578063a9059cbb1461132057610468565b8063852614851161020e57806385261485146110765780638b42507f146110a35780638da5cb5b1461110a5780638f32d59b1461114b578063921369131461117857610468565b80637bce5a0414610f805780637d87d0a914610fab5780637e504d5914610fec57806383b4ac681461104957610468565b80633eaaf86b1161035b57806366a16cad116102d8578063728d41c91161029c578063728d41c914610e8557806373824a9914610ec0578063753d02a114610eed578063764d72bf14610f0457806377a3b60914610f5557610468565b806366a16cad14610d525780636912652c14610daf57806370a0823114610ddc57806370ee739514610e41578063715018a614610e6e57610468565b806351bc3c851161031f57806351bc3c8514610b575780636140a51e14610b6e57806361c2059c14610bab57806364f5a5bb14610c3c57806365216a4114610c7757610468565b80633eaaf86b14610a065780634144d9e414610a315780634355855a14610a725780634bc6dd1814610ad95780634d709adf14610b1657610468565b80632563ae83116103e9578063313ce567116103ad578063313ce567146108a4578063320d4534146108d2578063334901911461090d57806337c9be8714610938578063395093511461099557610468565b80632563ae831461077b5780632b112e49146107b85780632d48e896146107e35780632e0f2625146108285780632f34d2821461085357610468565b806318160ddd1161043057806318160ddd146105f65780631d865c301461062157806323a2f1fc1461067057806323b872dd1461069b57806325519cf21461072c57610468565b806306fdde031461046d578063095ea7b3146104fd578063180b0d7e1461056e578063180fe7c91461059957610468565b3661046857005b600080fd5b34801561047957600080fd5b50610482611aca565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104c25780820151818401526020810190506104a7565b50505050905090810190601f1680156104ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561050957600080fd5b506105566004803603604081101561052057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b6c565b60405180821515815260200191505060405180910390f35b34801561057a57600080fd5b50610583611b83565b6040518082815260200191505060405180910390f35b3480156105a557600080fd5b506105f4600480360360408110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611b89565b005b34801561060257600080fd5b5061060b611bf5565b6040518082815260200191505060405180910390f35b34801561062d57600080fd5b5061066e6004803603606081101561064457600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611bff565b005b34801561067c57600080fd5b50610685611c2a565b6040518082815260200191505060405180910390f35b3480156106a757600080fd5b50610714600480360360608110156106be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c30565b60405180821515815260200191505060405180910390f35b34801561073857600080fd5b506107796004803603606081101561074f57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611e6f565b005b34801561078757600080fd5b506107b66004803603602081101561079e57600080fd5b81019080803515159060200190929190505050611e9a565b005b3480156107c457600080fd5b506107cd611ec8565b6040518082815260200191505060405180910390f35b3480156107ef57600080fd5b506108266004803603604081101561080657600080fd5b810190808035906020019092919080359060200190929190505050611f76565b005b34801561083457600080fd5b5061083d612020565b6040518082815260200191505060405180910390f35b34801561085f57600080fd5b506108a26004803603602081101561087657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612025565b005b3480156108b057600080fd5b506108b96120bb565b604051808260ff16815260200191505060405180910390f35b3480156108de57600080fd5b5061090b600480360360208110156108f557600080fd5b81019080803590602001909291905050506120d2565b005b34801561091957600080fd5b506109226120ed565b6040518082815260200191505060405180910390f35b34801561094457600080fd5b506109936004803603604081101561095b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506120f3565b005b3480156109a157600080fd5b506109ee600480360360408110156109b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061215f565b60405180821515815260200191505060405180910390f35b348015610a1257600080fd5b50610a1b61235b565b6040518082815260200191505060405180910390f35b348015610a3d57600080fd5b50610a46612361565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a7e57600080fd5b50610ac160048036036020811015610a9557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612387565b60405180821515815260200191505060405180910390f35b348015610ae557600080fd5b50610b1460048036036020811015610afc57600080fd5b810190808035151590602001909291905050506123a7565b005b348015610b2257600080fd5b50610b2b6123fb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b6357600080fd5b50610b6c612421565b005b348015610b7a57600080fd5b50610ba960048036036020811015610b9157600080fd5b810190808035151590602001909291905050506124af565b005b348015610bb757600080fd5b50610c2460048036036060811015610bce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124dd565b60405180821515815260200191505060405180910390f35b348015610c4857600080fd5b50610c7560048036036020811015610c5f57600080fd5b81019080803590602001909291905050506125e5565b005b348015610c8357600080fd5b50610d5060048036036040811015610c9a57600080fd5b8101908080359060200190640100000000811115610cb757600080fd5b820183602082011115610cc957600080fd5b80359060200191846020830284011164010000000083111715610ceb57600080fd5b909192939192939080359060200190640100000000811115610d0c57600080fd5b820183602082011115610d1e57600080fd5b80359060200191846020830284011164010000000083111715610d4057600080fd5b9091929391929390505050612600565b005b348015610d5e57600080fd5b50610dad60048036036040811015610d7557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612992565b005b348015610dbb57600080fd5b50610dc46129fe565b60405180821515815260200191505060405180910390f35b348015610de857600080fd5b50610e2b60048036036020811015610dff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a11565b6040518082815260200191505060405180910390f35b348015610e4d57600080fd5b50610e56612a5a565b60405180821515815260200191505060405180910390f35b348015610e7a57600080fd5b50610e83612a6d565b005b348015610e9157600080fd5b50610ebe60048036036020811015610ea857600080fd5b8101908080359060200190929190505050612b27565b005b348015610ecc57600080fd5b50610ed5612b42565b60405180821515815260200191505060405180910390f35b348015610ef957600080fd5b50610f02612b55565b005b348015610f1057600080fd5b50610f5360048036036020811015610f2757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bd9565b005b348015610f6157600080fd5b50610f6a612c3a565b6040518082815260200191505060405180910390f35b348015610f8c57600080fd5b50610f95612c40565b6040518082815260200191505060405180910390f35b348015610fb757600080fd5b50610fc0612c46565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ff857600080fd5b506110476004803603604081101561100f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612c6c565b005b34801561105557600080fd5b5061105e612cd8565b60405180821515815260200191505060405180910390f35b34801561108257600080fd5b5061108b612cf0565b60405180821515815260200191505060405180910390f35b3480156110af57600080fd5b506110f2600480360360208110156110c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d03565b60405180821515815260200191505060405180910390f35b34801561111657600080fd5b5061111f612d23565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561115757600080fd5b50611160612d4d565b60405180821515815260200191505060405180910390f35b34801561118457600080fd5b5061118d612da5565b6040518082815260200191505060405180910390f35b3480156111af57600080fd5b506111b8612dab565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156111f85780820151818401526020810190506111dd565b50505050905090810190601f1680156112255780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561123f57600080fd5b5061126c6004803603602081101561125657600080fd5b8101908080359060200190929190505050612e4d565b005b34801561127a57600080fd5b506112c76004803603604081101561129157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ee0565b60405180821515815260200191505060405180910390f35b3480156112eb57600080fd5b506112f4613170565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561132c57600080fd5b506113796004803603604081101561134357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613196565b60405180821515815260200191505060405180910390f35b34801561139d57600080fd5b506113a66131ea565b60405180821515815260200191505060405180910390f35b3480156113ca57600080fd5b506113f9600480360360208110156113e157600080fd5b810190808035151590602001909291905050506131fd565b005b34801561140757600080fd5b5061144a6004803603602081101561141e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132b4565b60405180821515815260200191505060405180910390f35b34801561146e57600080fd5b506114776132d4565b6040518082815260200191505060405180910390f35b34801561149957600080fd5b506114a26132da565b6040518082815260200191505060405180910390f35b3480156114c457600080fd5b50611507600480360360208110156114db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132e0565b60405180821515815260200191505060405180910390f35b34801561152b57600080fd5b5061155a6004803603602081101561154257600080fd5b81019080803515159060200190929190505050613300565b005b34801561156857600080fd5b50611571613354565b6040518082815260200191505060405180910390f35b34801561159357600080fd5b506115d6600480360360208110156115aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061335a565b60405180821515815260200191505060405180910390f35b3480156115fa57600080fd5b506116276004803603602081101561161157600080fd5b81019080803590602001909291905050506133b0565b6040518082815260200191505060405180910390f35b34801561164957600080fd5b506116786004803603602081101561166057600080fd5b8101908080351515906020019092919050505061345e565b005b34801561168657600080fd5b506116e96004803603604081101561169d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061348c565b6040518082815260200191505060405180910390f35b34801561170b57600080fd5b5061175a6004803603604081101561172257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613513565b005b34801561176857600080fd5b506117ab6004803603602081101561177f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613645565b005b3480156117b957600080fd5b506117c261369a565b6040518082815260200191505060405180910390f35b3480156117e457600080fd5b50611851600480360360608110156117fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506136a0565b60405180821515815260200191505060405180910390f35b34801561187557600080fd5b506118c46004803603604081101561188c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613768565b005b3480156118d257600080fd5b506118db61394b565b6040518082815260200191505060405180910390f35b3480156118fd57600080fd5b506119406004803603602081101561191457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613951565b005b34801561194e57600080fd5b5061195761396e565b6040518082815260200191505060405180910390f35b34801561197957600080fd5b506119c86004803603604081101561199057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613974565b005b3480156119d657600080fd5b506119df613bda565b6040518082815260200191505060405180910390f35b348015611a0157600080fd5b50611a0a613be0565b60405180821515815260200191505060405180910390f35b348015611a2e57600080fd5b50611a37613bf3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015611a6f57600080fd5b50611ab260048036036020811015611a8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c19565b60405180821515815260200191505060405180910390f35b606060008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b625780601f10611b3757610100808354040283529160200191611b62565b820191906000526020600020905b815481529060010190602001808311611b4557829003601f168201915b5050505050905090565b6000611b79338484613d09565b6001905092915050565b600c5481565b611b91612d4d565b611b9a57600080fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000601554905090565b611c07612d4d565b611c1057600080fd5b826006819055508160078190555080600881905550505050565b60185481565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c6d57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611e5757611dd6836040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f009092919063ffffffff16565b601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611e62858585613fc0565b5060019150509392505050565b611e77612d4d565b611e8057600080fd5b826003819055508160048190555080600581905550505050565b611ea2612d4d565b611eab57600080fd5b80601960016101000a81548160ff02191690831515021790555050565b6000611f71601a60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f63601a600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460155461483990919063ffffffff16565b61483990919063ffffffff16565b905090565b611f7e612d4d565b611f8757600080fd5b601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050505050565b601281565b61202d612d4d565b61203657600080fd5b80602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260009054906101000a900460ff16905090565b6120da612d4d565b6120e357600080fd5b8060168190555050565b60175481565b6120fb612d4d565b61210457600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006121f082601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60155481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60136020528060005260406000206000915054906101000a900460ff1681565b6123af612d4d565b6123b857600080fd5b80156123dd5780601c60016101000a81548160ff0219169083151502179055506123f8565b80601c60016101000a81548160ff0219169083151502179055505b50565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612429612d4d565b61243257600080fd5b6001602160146101000a81548160ff021916908315150217905550600060095411156124645761246360095461490b565b5b6000600a54111561247b5761247a600a5461498f565b5b6000600b54111561249257612491600b54614a3d565b5b6000602160146101000a81548160ff021916908315150217905550565b6124b7612d4d565b6124c057600080fd5b80601960006101000a81548160ff02191690831515021790555050565b60006124e7612d4d565b6124f057600080fd5b601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e5711e8b8585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156125a157600080fd5b505af11580156125b5573d6000803e3d6000fd5b505050506040513d60208110156125cb57600080fd5b810190808051906020019092919050505090509392505050565b6125ed612d4d565b6125f657600080fd5b8060188190555050565b612608612d4d565b61261157600080fd5b81819050848490501461268c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4c656e677468204d69736d61746368212100000000000000000000000000000081525060200191505060405180910390fd5b60008033905060005b848490508110156126c4578484828181106126ac57fe5b90506020020135830192508080600101915050612695565b50816126cf82612a11565b1015612743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4552524f523a20496e73756666696369656e742042616c616e6365212100000081525060200191505060405180910390fd5b61279582601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461483990919063ffffffff16565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b86869050811015612989576128728585838181106127f557fe5b90506020020135601a60008a8a8681811061280c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a600089898581811061288257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508686828181106128e957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87878581811061296057fe5b905060200201356040518082815260200191505060405180910390a380806001019150506127db565b50505050505050565b61299a612d4d565b6129a357600080fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601c60019054906101000a900460ff1681565b612a75612d4d565b612a7e57600080fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b612b2f612d4d565b612b3857600080fd5b8060178190555050565b601c60029054906101000a900460ff1681565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612bbf57600080fd5b505af1158015612bd3573d6000803e3d6000fd5b50505050565b612be1612d4d565b612bea57600080fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612c35573d6000803e3d6000fd5b505050565b60055481565b60045481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612c74612d4d565b612c7d57600080fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000602160149054906101000a900460ff1615905090565b601960009054906101000a900460ff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60075481565b606060018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e435780601f10612e1857610100808354040283529160200191612e43565b820191906000526020600020905b815481529060010190602001808311612e2657829003601f168201915b5050505050905090565b612e55612d4d565b612e5e57600080fd5b620b71b08110612ed6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f476173206d757374206265206c6f776572207468616e2037353030303000000081525060200191505060405180910390fd5b80601e8190555050565b600080601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808310612ff0576000601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613084565b613003838261483990919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131d357600080fd5b6131de338585613fc0565b50600191505092915050565b601c60039054906101000a900460ff1681565b613205612d4d565b61320e57600080fd5b801515601c60039054906101000a900460ff1615151415613297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4e6f74204368616e67656421210000000000000000000000000000000000000081525060200191505060405180910390fd5b80601c60036101000a81548160ff02191690831515021790555050565b60126020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60085481565b60116020528060005260406000206000915054906101000a900460ff1681565b613308612d4d565b61331157600080fd5b80156133365780601c60006101000a81548160ff021916908315150217905550613351565b80601c60006101000a81548160ff0219169083151502179055505b50565b600a5481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080601a6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050613456613422611ec8565b613448613439600285613c3990919063ffffffff16565b86613c3990919063ffffffff16565b613cbf90919063ffffffff16565b915050919050565b613466612d4d565b61346f57600080fd5b80601c60026101000a81548160ff02191690831515021790555050565b6000601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61351b612d4d565b61352457600080fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156135ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4572726f723a204e6f74206368616e676564000000000000000000000000000081525060200191505060405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61364d612d4d565b61365657600080fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60006136aa612d4d565b6136b357600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561372457600080fd5b505af1158015613738573d6000803e3d6000fd5b505050506040513d602081101561374e57600080fd5b810190808051906020019092919050505090509392505050565b613770612d4d565b61377957600080fd5b801561384057601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561383f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5061697220416c7265616479205365742121000000000000000000000000000081525060200191505060405180910390fd5b5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60035481565b613959612d4d565b61396257600080fd5b61396b81614b08565b50565b60065481565b61397c612d4d565b61398557600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613a0b5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613a1457600080fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015613b2257601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613b0557600080fd5b505af1158015613b19573d6000803e3d6000fd5b50505050613bd6565b601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683613b6a85612a11565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613bbd57600080fd5b505af1158015613bd1573d6000803e3d6000fd5b505050505b5050565b60095481565b601960019054906101000a900460ff1681565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b600080831415613c4c5760009050613cb9565b6000828402905082848281613c5d57fe5b0414613cb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159176021913960400191505060405180910390fd5b809150505b92915050565b6000613d0183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c02565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806159386024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806158cd6022913960400191505060405180910390fd5b80601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000838311158290613fad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f72578082015181840152602081019050613f57565b50505050905090810190601f168015613f9f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156140665750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6140d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e5f626c61636b6c697374000000000000000000000000000000000000000081525060200191505060405180910390fd5b601c60039054906101000a900460ff168061413c5750601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061414b575061414a612d4d565b5b6141bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f54726164652069732043757272656e746c79205061757365642121000000000081525060200191505060405180910390fd5b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156142615750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156142795750601960009054906101000a900460ff165b156142da576018548211156142d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806158ef6028913960400191505060405180910390fd5b5b602160149054906101000a900460ff1615614301576142fa848484614cc8565b9050614832565b614309614dff565b1561431757614316614ea6565b5b61431f614f0c565b1561432d5761432c614f92565b5b61437f82601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461483990919063ffffffff16565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006143ce8585614fe1565b6143d857826143e4565b6143e385858561513c565b5b905061443881601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601960019054906101000a900460ff1680156144e15750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561451057601754614504826144f687612a11565b61488390919063ffffffff16565b111561450f57600080fd5b5b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661461857601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96866145a988612a11565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156145fc57600080fd5b505af192505050801561460d575060015b61461657614617565b5b5b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661472057601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96856146b187612a11565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561470457600080fd5b505af1925050508015614715575060015b61471e5761471f565b5b5b601c60029054906101000a900460ff166147c757601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601e546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156147ab57600080fd5b505af19250505080156147bc575060015b6147c5576147c6565b5b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019150505b9392505050565b600061487b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f00565b905092915050565b600080828401905083811015614901576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006149236002600954613cbf90919063ffffffff16565b9050600061493c8260095461483990919063ffffffff16565b9050600047905061494c836154c3565b6000614961824761483990919063ffffffff16565b90506149788560095461483990919063ffffffff16565b6009819055506149888382615777565b5050505050565b600047905061499d826154c3565b60006149b2824761483990919063ffffffff16565b90506149c983600a5461483990919063ffffffff16565b600a81905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614a37573d6000803e3d6000fd5b50505050565b6000479050614a4b826154c3565b6000614a60824761483990919063ffffffff16565b9050614a7783600b5461483990919063ffffffff16565b600b81905550601c60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015614ae757600080fd5b505af193505050508015614af9575060015b614b0257614b03565b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614b4257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290614cae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614c73578082015181840152602081019050614c58565b50505050905090810190601f168015614ca05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614cba57fe5b049050809150509392505050565b6000614d1c82601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461483990919063ffffffff16565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614db182601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b600080614e0b30612a11565b905060006016548210159050601c60009054906101000a900460ff168015614e405750602160149054906101000a900460ff16155b8015614e495750805b8015614e9f5750601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9250505090565b6001602160146101000a81548160ff02191690831515021790555060006009541115614ed857614ed760095461490b565b5b6000600a541115614eef57614eee600a5461498f565b5b6000602160146101000a81548160ff021916908315150217905550565b6000601c60019054906101000a900460ff168015614f375750602160149054906101000a900460ff16155b8015614f8d5750601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905090565b6001602160146101000a81548160ff0219169083151502179055506000600b541115614fc457614fc3600b54614a3d565b5b6000602160146101000a81548160ff021916908315150217905550565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806150845750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156150925760009050615136565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806151335750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90505b92915050565b6000806000806000601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615615273576151bf600c546151b160035489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b9250826009600082825401925050819055506151fa600c546151ec60045489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b915081600a60008282540192505081905550615235600c5461522760055489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b905080600b6000828254019250508190555061526c8161525e848661488390919063ffffffff16565b61488390919063ffffffff16565b935061539f565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561539e576152ee600c546152e060065489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b925082600960008282540192505081905550615329600c5461531b60075489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b915081600a60008282540192505081905550615364600c5461535660085489613c3990919063ffffffff16565b613cbf90919063ffffffff16565b905080600b6000828254019250508190555061539b8161538d848661488390919063ffffffff16565b61488390919063ffffffff16565b93505b5b60008411156154a3576153fa84601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461488390919063ffffffff16565b601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35b6154b6848761483990919063ffffffff16565b9450505050509392505050565b6000600267ffffffffffffffff811180156154dd57600080fd5b5060405190808252806020026020018201604052801561550c5781602001602082028036833780820191505090505b509050308160008151811061551d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156155bf57600080fd5b505afa1580156155d3573d6000803e3d6000fd5b505050506040513d60208110156155e957600080fd5b81019080805190602001909291905050508160018151811061560757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061566e30602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613d09565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015615732578082015181840152602081019050615717565b505050509050019650505050505050600060405180830381600087803b15801561575b57600080fd5b505af115801561576f573d6000803e3d6000fd5b505050505050565b6157a430602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613d09565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806157f0612d23565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561587557600080fd5b505af1158015615889573d6000803e3d6000fd5b50505050506040513d60608110156158a057600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505056fe45524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a264697066735822122009f9ed15ed3cddd10bf8341ee74f666a15f38d63a976fe4fafe075252e966d7364736f6c63430007060033
Deployed Bytecode Sourcemap
21548:19729:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21272:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32932:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22155:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37747:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38265:102;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34470:264;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23144:68;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25523:447;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34196:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33765:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36415:167;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35122:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22866:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36770:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21458:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38149:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23059:72;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38011:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32536:388;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22912:59;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22200:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22755:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31454:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23773:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29253:279;;;;;;;;;;;;;:::i;:::-;;33645:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35690:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36315:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40615:657;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33883:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23453:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38378:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23496:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20483:126;;;;;;;;;;;;;:::i;:::-;;36208:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23535:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36683:79;;;;;;;;;;;;;:::i;:::-;;35312:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21866:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21825:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23655:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37875:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36590:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23231:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22576:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20218:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20383:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21950:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21363:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36032:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31956:572;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23747:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25300:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23576:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34014:174;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22690:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22115:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21992:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22631:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31248:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22075:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33517:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37259:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31648:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31760:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37533:206;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35907:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22978:64;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35490:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36916:335;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21784:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20617:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21907:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34742:372;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22035:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23279:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23816:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22468:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21272:83;21309:13;21342:5;21335:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21272:83;:::o;32932:189::-;33035:4;33057:34;33066:10;33077:7;33085:5;33057:8;:34::i;:::-;33109:4;33102:11;;32932:189;;;;:::o;22155:36::-;;;;:::o;37747:120::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;37852:7:::1;37827:15;:22;37843:5;37827:22;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;37747:120:::0;;:::o;38265:102::-;38320:7;38347:12;;38340:19;;38265:102;:::o;34470:264::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;34639:6:::1;34620:16;:25;;;;34675:13;34656:16;:32;;;;34716:10;34699:14;:27;;;;34470:264:::0;;;:::o;23144:68::-;;;;:::o;25523:447::-;25666:4;25653:2;21751:3;21737:18;;:2;:18;;;;21729:27;;;;;;25738:2:::1;25697:11;:17;25709:4;25697:17;;;;;;;;;;;;;;;:29;25715:10;25697:29;;;;;;;;;;;;;;;;:44;25693:207;;25790:98;25856:5;25790:98;;;;;;;;;;;;;;;;::::0;:11:::1;:17;25802:4;25790:17;;;;;;;;;;;;;;;:61;25826:10;25790:61;;;;;;;;;;;;;;;;:65;;:98;;;;;:::i;:::-;25758:11;:17;25770:4;25758:17;;;;;;;;;;;;;;;:29;25776:10;25758:29;;;;;;;;;;;;;;;:130;;;;25693:207;25910:30;25924:4;25930:2;25934:5;25910:13;:30::i;:::-;;25958:4;25951:11;;25523:447:::0;;;;;;:::o;34196:266::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;34369:6:::1;34351:15;:24;;;;34404:13;34386:15;:31;;;;34444:10;34428:13;:26;;;;34196:266:::0;;;:::o;33765:110::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;33860:7:::1;33841:16;;:26;;;;;;;;;;;;;;;;;;33765:110:::0;:::o;36415:167::-;36468:7;36508:66;36552:9;:21;22417:42;36552:21;;;;;;;;;;;;;;;;36508:39;36525:9;:21;22330:42;36525:21;;;;;;;;;;;;;;;;36508:12;;:16;;:39;;;;:::i;:::-;:43;;:66;;;;:::i;:::-;36488:86;;36415:167;:::o;35122:182::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;35231:11:::1;;;;;;;;;;;:35;;;35267:10;35279:16;35231:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35122:182:::0;;:::o;22866:37::-;22901:2;22866:37;:::o;36770:138::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;36865:8:::1;36833:12;;:41;;;;;;;;;;;;;;;;;;36892:8;36885:4;;:15;;;;;;;;;;;;;;;;;;36770:138:::0;:::o;21458:83::-;21499:5;21524:9;;;;;;;;;;;21517:16;;21458:83;:::o;38149:104::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;38239:6:::1;38218:18;:27;;;;38149:104:::0;:::o;23059:72::-;;;;:::o;38011:130::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;38124:5:::1;38099:9;:22;38109:11;38099:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;38011:130:::0;;:::o;32536:388::-;32636:4;32693:72;32754:10;32693:11;:23;32705:10;32693:23;;;;;;;;;;;;;;;:56;32731:7;32693:56;;;;;;;;;;;;;;;;:60;;:72;;;;:::i;:::-;32658:11;:23;32670:10;32658:23;;;;;;;;;;;;;;;:32;32682:7;32658:32;;;;;;;;;;;;;;;:107;;;;32829:7;32781:113;;32804:10;32781:113;;;32851:11;:23;32863:10;32851:23;;;;;;;;;;;;;;;:32;32875:7;32851:32;;;;;;;;;;;;;;;;32781:113;;;;;;;;;;;;;;;;;;32912:4;32905:11;;32536:388;;;;:::o;22912:59::-;;;;:::o;22200:83::-;;;;;;;;;;;;;:::o;22755:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;31454:186::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;31524:5:::1;31521:112;;;31562:5;31546:13;;:21;;;;;;;;;;;;;;;;;;31521:112;;;31616:5;31600:13;;:21;;;;;;;;;;;;;;;;;;31521:112;31454:186:::0;:::o;23773:36::-;;;;;;;;;;;;;:::o;29253:279::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;23925:4:::1;23916:6;;:13;;;;;;;;;;;;;;;;;;29337:1:::2;29316:18;;:22;29313:63;;;29340:36;29357:18;;29340:16;:36::i;:::-;29313:63;29412:1;29391:18;;:22;29388:63;;;29415:36;29432:18;;29415:16;:36::i;:::-;29388:63;29484:1;29465:16;;:20;29462:62;;;29487:37;29507:16;;29487:19;:37::i;:::-;29462:62;23961:5:::1;23952:6;;:14;;;;;;;;;;;;;;;;;;29253:279::o:0;33645:112::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;33742:7:::1;33717:22;;:32;;;;;;;;;;;;;;;;;;33645:112:::0;:::o;35690:209::-;35804:12;20345:9;:7;:9::i;:::-;20337:18;;;;;;35836:11:::1;;;;;;;;;;;:23;;;35860:12;35874:9;35884:6;35836:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;35829:62;;35690:209:::0;;;;;:::o;36315:92::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;36392:6:::1;36379:10;:19;;;;36315:92:::0;:::o;40615:657::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;40733:7:::1;;:14;;40718:4;;:11;;:29;40710:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;40779:14;40804:15:::0;40822:10:::1;40804:28;;40847:6;40843:88;40861:7;;:14;;40857:1;:18;40843:88;;;40909:7;;40917:1;40909:10;;;;;;;;;;;;;40896:23;;;;40877:3;;;;;;;40843:88;;;;40971:9;40949:18;40959:7;40949:9;:18::i;:::-;:31;;40941:72;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41045:33;41068:9;41045;:18;41055:7;41045:18;;;;;;;;;;;;;;;;:22;;:33;;;;:::i;:::-;41024:9;:18;41034:7;41024:18;;;;;;;;;;;;;;;:54;;;;41094:6;41089:175;41108:4;;:11;;41104:1;:15;41089:175;;;41162:34;41185:7;;41193:1;41185:10;;;;;;;;;;;;;41162:9;:18;41172:4;;41177:1;41172:7;;;;;;;;;;;;;;;41162:18;;;;;;;;;;;;;;;;:22;;:34;;;;:::i;:::-;41141:9;:18;41151:4;;41156:1;41151:7;;;;;;;;;;;;;;;41141:18;;;;;;;;;;;;;;;:55;;;;41233:4;;41238:1;41233:7;;;;;;;;;;;;;;;41216:36;;41225:7;41216:36;;;41241:7;;41249:1;41241:10;;;;;;;;;;;;;41216:36;;;;;;;;;;;;;;;;;;41121:3;;;;;;;41089:175;;;;20366:1;;40615:657:::0;;;;:::o;33883:123::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;33991:7:::1;33969:13;:19;33983:4;33969:19;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33883:123:::0;;:::o;23453:36::-;;;;;;;;;;;;;:::o;38378:119::-;38444:7;38471:9;:18;38481:7;38471:18;;;;;;;;;;;;;;;;38464:25;;38378:119;;;:::o;23496:32::-;;;;;;;;;;;;;:::o;20483:126::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;20564:6:::1;;;;;;;;;;;20545:26;;;;;;;;;;;;20599:1;20582:6;;:19;;;;;;;;;;;;;;;;;;20483:126::o:0;36208:99::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;36293:6:::1;36276:14;:23;;;;36208:99:::0;:::o;23535:32::-;;;;;;;;;;;;;:::o;36683:79::-;36742:4;;;;;;;;;;;36725:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36683:79::o;35312:170::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;35388:15:::1;35406:21;35388:39;;35446:9;35438:27;;:36;35466:7;35438:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;20366:1;35312:170:::0;:::o;21866:32::-;;;;:::o;21825:34::-;;;;:::o;23655:39::-;;;;;;;;;;;;;:::o;37875:128::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;37988:7:::1;37959:19;:26;37979:5;37959:26;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;37875:128:::0;;:::o;36590:85::-;36636:4;36661:6;;;;;;;;;;;36660:7;36653:14;;36590:85;:::o;23231:41::-;;;;;;;;;;;;;:::o;22576:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;20218:79::-;20256:7;20283:6;;;;;;;;;;;20276:13;;20218:79;:::o;20383:92::-;20423:4;20461:6;;;;;;;;;;;20447:20;;:10;:20;;;20440:27;;20383:92;:::o;21950:35::-;;;;:::o;21363:87::-;21402:13;21435:7;21428:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21363:87;:::o;36032:168::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;36121:6:::1;36115:3;:12;36107:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;36189:3;36172:14;:20;;;;36032:168:::0;:::o;31956:572::-;32061:4;32083:16;32102:11;:23;32114:10;32102:23;;;;;;;;;;;;;;;:32;32126:7;32102:32;;;;;;;;;;;;;;;;32083:51;;32168:8;32149:15;:27;32145:225;;32228:1;32193:11;:23;32205:10;32193:23;;;;;;;;;;;;;;;:32;32217:7;32193:32;;;;;;;;;;;;;;;:36;;;;32145:225;;;32297:61;32328:15;32297:8;:12;;:61;;;;:::i;:::-;32262:11;:23;32274:10;32262:23;;;;;;;;;;;;;;;:32;32286:7;32262:32;;;;;;;;;;;;;;;:96;;;;32145:225;32433:7;32385:113;;32408:10;32385:113;;;32455:11;:23;32467:10;32455:23;;;;;;;;;;;;;;;:32;32479:7;32455:32;;;;;;;;;;;;;;;;32385:113;;;;;;;;;;;;;;;;;;32516:4;32509:11;;;31956:572;;;;:::o;23747:19::-;;;;;;;;;;;;;:::o;25300:215::-;25427:4;25405:2;21751:3;21737:18;;:2;:18;;;;21729:27;;;;;;25449:36:::1;25463:10;25475:2;25479:5;25449:13;:36::i;:::-;;25503:4;25496:11;;25300:215:::0;;;;;:::o;23576:30::-;;;;;;;;;;;;;:::o;34014:174::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;34117:7:::1;34095:29;;:18;;;;;;;;;;;:29;;;;34087:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34173:7;34152:18;;:28;;;;;;;;;;;;;;;;;;34014:174:::0;:::o;22690:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;22115:31::-;;;;:::o;21992:34::-;;;;:::o;22631:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;31248:198::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;31322:5:::1;31319:120;;;31364:5;31344:17;;:25;;;;;;;;;;;;;;;;;;31319:120;;;31422:5;31402:17;;:25;;;;;;;;;;;;;;;;;;31319:120;31248:198:::0;:::o;22075:33::-;;;;:::o;33517:120::-;33579:4;33603:19;:26;33623:5;33603:26;;;;;;;;;;;;;;;;;;;;;;;;;33596:33;;33517:120;;;:::o;37259:266::-;37354:7;37379:24;37406:9;:15;37416:4;;;;;;;;;;;37406:15;;;;;;;;;;;;;;;;37379:42;;37452:65;37494:22;:20;:22::i;:::-;37452:37;37465:23;37486:1;37465:16;:20;;:23;;;;:::i;:::-;37452:8;:12;;:37;;;;:::i;:::-;:41;;:65;;;;:::i;:::-;37432:85;;;37259:266;;;:::o;31648:104::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;31737:7:::1;31721:13;;:23;;;;;;;;;;;;;;;;;;31648:104:::0;:::o;31760:188::-;31880:7;31912:11;:19;31924:6;31912:19;;;;;;;;;;;;;;;:28;31932:7;31912:28;;;;;;;;;;;;;;;;31905:35;;31760:188;;;;:::o;37533:206::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;37654:7:::1;37624:37;;:19;:26;37644:5;37624:26;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;;37616:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;37724:7;37695:19;:26;37715:5;37695:26;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;37533:206:::0;;:::o;35907:117::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;36006:10:::1;35980:23;;:36;;;;;;;;;;;;;;;;;;35907:117:::0;:::o;22978:64::-;;;;:::o;35490:192::-;35595:12;20345:9;:7;:9::i;:::-;20337:18;;;;;;35633:12:::1;35626:29;;;35656:9;35667:6;35626:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;35619:55;;35490:192:::0;;;;;:::o;36916:335::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;37007:7:::1;37004:102;;;37040:25;:32;37066:5;37040:32;;;;;;;;;;;;;;;;;;;;;;;;;37039:33;37031:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;37004:102;37151:7;37116:25;:32;37142:5;37116:32;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;37195:4;37169:16;:23;37186:5;37169:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;37239:4;37210:19;:26;37230:5;37210:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;36916:335:::0;;:::o;21784:34::-;;;;:::o;20617:109::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;20690:28:::1;20709:8;20690:18;:28::i;:::-;20617:109:::0;:::o;21907:36::-;;;;:::o;34742:372::-;20345:9;:7;:9::i;:::-;20337:18;;;;;;34856:4:::1;34838:23;;:6;:23;;;;:61;;;;;34866:25;:33;34892:6;34866:33;;;;;;;;;;;;;;;;;;;;;;;;;34865:34;34838:61;34830:70;;;::::0;::::1;;34938:6;34911:16;:24;34928:6;34911:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;34961:6;34957:150;;;34984:11;;;;;;;;;;;:20;;;35005:6;35013:1;34984:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34957:150;;;35048:11;;;;;;;;;;;:20;;;35069:6;35077:17;35087:6;35077:9;:17::i;:::-;35048:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34957:150;34742:372:::0;;:::o;22035:33::-;;;;:::o;23279:35::-;;;;;;;;;;;;;:::o;23816:32::-;;;;;;;;;;;;;:::o;22468:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;4780:250::-;4838:7;4867:1;4862;:6;4858:47;;;4892:1;4885:8;;;;4858:47;4917:9;4933:1;4929;:5;4917:17;;4962:1;4957;4953;:5;;;;;;:10;4945:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5021:1;5014:8;;;4780:250;;;;;:::o;5038:132::-;5096:7;5123:39;5127:1;5130;5123:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5116:46;;5038:132;;;;:::o;33129:380::-;33282:1;33265:19;;:5;:19;;;;33257:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33363:1;33344:21;;:7;:21;;;;33336:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33447:6;33417:11;:18;33429:5;33417:18;;;;;;;;;;;;;;;:27;33436:7;33417:27;;;;;;;;;;;;;;;:36;;;;33485:7;33469:32;;33478:5;33469:32;;;33494:6;33469:32;;;;;;;;;;;;;;;;;;33129:380;;;:::o;4546:226::-;4666:7;4699:1;4694;:6;;4702:12;4686:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4726:9;4742:1;4738;:5;4726:17;;4763:1;4756:8;;;4546:226;;;;;:::o;26248:1628::-;26374:4;26402:9;:17;26412:6;26402:17;;;;;;;;;;;;;;;;;;;;;;;;;26401:18;:43;;;;;26424:9;:20;26434:9;26424:20;;;;;;;;;;;;;;;;;;;;;;;;;26423:21;26401:43;26393:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26482:18;;;;;;;;;;;:47;;;;26504:13;:25;26518:10;26504:25;;;;;;;;;;;;;;;;;;;;;;;;;26482:47;:60;;;;26533:9;:7;:9::i;:::-;26482:60;26474:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26591:15;:23;26607:6;26591:23;;;;;;;;;;;;;;;;;;;;;;;;;26590:24;:55;;;;;26619:15;:26;26635:9;26619:26;;;;;;;;;;;;;;;;;;;;;;;;;26618:27;26590:55;:81;;;;;26649:22;;;;;;;;;;;26590:81;26587:186;;;26706:10;;26696:6;:20;;26688:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26587:186;26791:6;;;;;;;;;;;26787:87;;;26821:41;26836:6;26844:9;26855:6;26821:14;:41::i;:::-;26814:48;;;;26787:87;26890:20;:18;:20::i;:::-;26886:67;;;26927:14;:12;:14::i;:::-;26886:67;26969:16;:14;:16::i;:::-;26965:59;;;27002:10;:8;:10::i;:::-;26965:59;27064:29;27086:6;27064:9;:17;27074:6;27064:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;27044:9;:17;27054:6;27044:17;;;;;;;;;;;;;;;:49;;;;27114:22;27139:32;27153:6;27161:9;27139:13;:32::i;:::-;:104;;27237:6;27139:104;;;27187:34;27195:6;27203:9;27214:6;27187:7;:34::i;:::-;27139:104;27114:129;;27279:40;27304:14;27279:9;:20;27289:9;27279:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;27256:9;:20;27266:9;27256:20;;;;;;;;;;;;;;;:63;;;;27335:16;;;;;;;;;;;:51;;;;;27356:19;:30;27376:9;27356:30;;;;;;;;;;;;;;;;;;;;;;;;;27355:31;27335:51;27332:150;;;27455:14;;27411:40;27436:14;27411:20;27421:9;27411;:20::i;:::-;:24;;:40;;;;:::i;:::-;:58;;27403:67;;;;;;27332:150;27498:16;:24;27515:6;27498:24;;;;;;;;;;;;;;;;;;;;;;;;;27494:96;;27529:11;;;;;;;;;;;:20;;;27550:6;27558:17;27568:6;27558:9;:17::i;:::-;27529:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27525:63;;;;;;27494:96;27604:16;:27;27621:9;27604:27;;;;;;;;;;;;;;;;;;;;;;;;;27600:105;;27638:11;;;;;;;;;;;:20;;;27659:9;27670:20;27680:9;27670;:20::i;:::-;27638:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27634:69;;;;;;27600:105;27721:13;;;;;;;;;;;27717:71;;27741:11;;;;;;;;;;;:19;;;27761:14;;27741:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27737:51;;;;;;27717:71;27821:9;27805:41;;27814:6;27805:41;;;27831:14;27805:41;;;;;;;;;;;;;;;;;;27864:4;27857:11;;;26248:1628;;;;;;:::o;4402:136::-;4460:7;4487:43;4491:1;4494;4487:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4480:50;;4402:136;;;;:::o;4213:181::-;4271:7;4291:9;4307:1;4303;:5;4291:17;;4332:1;4327;:6;;4319:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4385:1;4378:8;;;4213:181;;;;:::o;39035:431::-;39094:9;39106:25;39129:1;39106:18;;:22;;:25;;;;:::i;:::-;39094:37;;39142:14;39159:28;39182:4;39159:18;;:22;;:28;;;;:::i;:::-;39142:45;;39198:18;39219:21;39198:42;;39251:22;39268:4;39251:16;:22::i;:::-;39284:19;39306:40;39332:13;39306:21;:25;;:40;;;;:::i;:::-;39284:62;;39378:31;39401:7;39378:18;;:22;;:31;;;;:::i;:::-;39357:18;:52;;;;39420:38;39433:9;39443:14;39420:12;:38::i;:::-;39035:431;;;;;:::o;38678:349::-;38737:18;38758:21;38737:42;;38790:25;38807:7;38790:16;:25::i;:::-;38826:19;38848:40;38874:13;38848:21;:25;;:40;;;;:::i;:::-;38826:62;;38920:31;38943:7;38920:18;;:22;;:31;;;;:::i;:::-;38899:18;:52;;;;38970:23;;;;;;;;;;;38962:41;;:57;39004:14;38962:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38678:349;;;:::o;29960:363::-;30025:19;30047:21;30025:43;;30079:25;30096:7;30079:16;:25::i;:::-;30115:20;30138:41;30164:14;30138:21;:25;;:41;;;;:::i;:::-;30115:64;;30209:29;30230:7;30209:16;;:20;;:29;;;;:::i;:::-;30190:16;:48;;;;30253:11;;;;;;;;;;;:19;;;30282:15;30253:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30249:65;;;;;;29960:363;;;:::o;20734:187::-;20828:1;20808:22;;:8;:22;;;;20800:31;;;;;;20876:8;20847:38;;20868:6;;;;;;;;;;;20847:38;;;;;;;;;;;;20905:8;20896:6;;:17;;;;;;;;;;;;;;;;;;20734:187;:::o;5178:225::-;5298:7;5330:1;5326;:5;5333:12;5318:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5357:9;5373:1;5369;:5;;;;;;5357:17;;5394:1;5387:8;;;5178:225;;;;;:::o;25978:262::-;26096:4;26131:27;26151:6;26131:9;:15;26141:4;26131:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;26113:9;:15;26123:4;26113:15;;;;;;;;;;;;;;;:45;;;;26185:25;26203:6;26185:9;:13;26195:2;26185:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;26169:9;:13;26179:2;26169:13;;;;;;;;;;;;;;;:41;;;;26228:4;26221:11;;25978:262;;;;;:::o;30684:358::-;30737:4;30756:28;30787:24;30805:4;30787:9;:24::i;:::-;30756:55;;30822:12;30861:18;;30837:20;:42;;30822:57;;30912:17;;;;;;;;;;;:42;;;;;30948:6;;;;;;;;;;;30947:7;30912:42;:67;;;;;30972:7;30912:67;:122;;;;;30997:25;:37;31023:10;30997:37;;;;;;;;;;;;;;;;;;;;;;;;;30996:38;30912:122;30892:142;;;;30684:358;:::o;29540:254::-;23925:4;23916:6;;:13;;;;;;;;;;;;;;;;;;29619:1:::1;29598:18;;:22;29595:89;;;29636:36;29653:18;;29636:16;:36::i;:::-;29595:89;29720:1;29699:18;;:22;29696:89;;;29737:36;29754:18;;29737:16;:36::i;:::-;29696:89;23961:5:::0;23952:6;;:14;;;;;;;;;;;;;;;;;;29540:254::o;31050:188::-;31099:4;31137:13;;;;;;;;;;;:37;;;;;31168:6;;;;;;;;;;;31167:7;31137:37;:92;;;;;31192:25;:37;31218:10;31192:37;;;;;;;;;;;;;;;;;;;;;;;;;31191:38;31137:92;31116:113;;31050:188;:::o;29802:150::-;23925:4;23916:6;;:13;;;;;;;;;;;;;;;;;;29873:1:::1;29854:16;;:20;29851:88;;;29890:37;29910:16;;29890:19;:37::i;:::-;29851:88;23961:5:::0;23952:6;;:14;;;;;;;;;;;;;;;;;;29802:150::o;30331:345::-;30430:4;30455:19;:25;30475:4;30455:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;30484:19;:23;30504:2;30484:23;;;;;;;;;;;;;;;;;;;;;;;;;30455:52;30452:217;;;30530:5;30523:12;;;;30452:217;30592:25;:31;30618:4;30592:31;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;30627:25;:29;30653:2;30627:29;;;;;;;;;;;;;;;;;;;;;;;;;30592:64;30584:73;;30331:345;;;;;:::o;27884:1361::-;28005:7;28027:17;28055:9;28075;28095;28128:25;:33;28154:6;28128:33;;;;;;;;;;;;;;;;;;;;;;;;;28125:887;;;28186:47;28218:14;;28186:27;28197:15;;28186:6;:10;;:27;;;;:::i;:::-;:31;;:47;;;;:::i;:::-;28179:54;;28270:4;28248:18;;:26;;;;;;;;;;;28296:47;28328:14;;28296:27;28307:15;;28296:6;:10;;:27;;;;:::i;:::-;:31;;:47;;;;:::i;:::-;28289:54;;28380:4;28358:18;;:26;;;;;;;;;;;28406:45;28436:14;;28406:25;28417:13;;28406:6;:10;;:25;;;;:::i;:::-;:29;;:45;;;;:::i;:::-;28399:52;;28486:4;28466:16;;:24;;;;;;;;;;;28519;28538:4;28519:14;28528:4;28519;:8;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;28507:36;;28125:887;;;28573:25;:36;28599:9;28573:36;;;;;;;;;;;;;;;;;;;;;;;;;28570:442;;;28634:48;28667:14;;28634:28;28645:16;;28634:6;:10;;:28;;;;:::i;:::-;:32;;:48;;;;:::i;:::-;28627:55;;28719:4;28697:18;;:26;;;;;;;;;;;28745:48;28778:14;;28745:28;28756:16;;28745:6;:10;;:28;;;;:::i;:::-;:32;;:48;;;;:::i;:::-;28738:55;;28830:4;28808:18;;:26;;;;;;;;;;;28856:46;28887:14;;28856:26;28867:14;;28856:6;:10;;:26;;;;:::i;:::-;:30;;:46;;;;:::i;:::-;28849:53;;28937:4;28917:16;;:24;;;;;;;;;;;28970;28989:4;28970:14;28979:4;28970;:8;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;28958:36;;28570:442;28125:887;29039:1;29027:9;:13;29024:173;;;29084:39;29113:9;29084;:24;29102:4;29084:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;29057:9;:24;29075:4;29057:24;;;;;;;;;;;;;;;:66;;;;29168:4;29143:42;;29152:6;29143:42;;;29175:9;29143:42;;;;;;;;;;;;;;;;;;29024:173;29216:21;29227:9;29216:6;:10;;:21;;;;:::i;:::-;29209:28;;;;;;27884:1361;;;;;:::o;39977:564::-;40103:21;40141:1;40127:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40103:40;;40172:4;40154;40159:1;40154:7;;;;;;;;;;;;;:23;;;;;;;;;;;40198:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40188:4;40193:1;40188:7;;;;;;;;;;;;;:23;;;;;;;;;;;40224:53;40241:4;40256:6;;;;;;;;;;;40265:11;40224:8;:53::i;:::-;40316:6;;;;;;;;;;;:57;;;40388:11;40414:1;40458:4;40485;40505:15;40316:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39977:564;;:::o;39474:495::-;39622:53;39639:4;39654:6;;;;;;;;;;;39663:11;39622:8;:53::i;:::-;39716:6;;;;;;;;;;;:22;;;39746:9;39779:4;39799:11;39825:1;39868;39911:7;:5;:7::i;:::-;39933:15;39716:243;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39474:495;;:::o
Swarm Source
ipfs://3ac42a39b5f10c2724891956c9e0944aec8649c65cccff94a628b609011885dc
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.