Contract
0xc294ab598ab67610f3a0775f21db5d34f51043b8
1
Contract Overview
[ Download CSV Export ]
Latest 23 internal transactions
[ Download CSV Export ]
Contract Source Code Verified (Exact Match)
Contract Name:
SHARK
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at FtmScan.com on 2023-05-26 */ //SPDX-License-Identifier: UNDEFINED pragma solidity 0.8.17; library SafeMath { function tryAdd( uint256 a, uint256 b ) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } 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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } interface IERC20 { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); } //IDEXFactory interface to create token pool pair address interface IDEXFactory { function createPair( address tokenA, address tokenB ) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } //IDEXRouter interface to integrate Tarder Joe(liquidity pool) router interface IDEXRouter { 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 amountAVAXMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountAVAX, uint liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactTokensForTokens( 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; function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); } interface IDEXPair{ function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function sync() external; } //////// intefaces of stable usd token mint function \\\\\\\\ interface Istable is IERC20 { function mint( uint amount ) external returns(bool); } interface IPrinter { function setShare(address shareholder, uint256 amount) external; function deposit(bool _usdTokenLiquidity, uint _liquidityPercentage) external payable returns(uint) ; function avaxSwap(address _tokenAdd, uint tokenAmount) external returns(uint); function shareHolderBal(address _tokenAdd, address shareHolder) external view returns(uint); function claimPrintReflaction(address _tokenAdd, address _sender) external; function printBal() external view returns(uint); } contract Printer is IPrinter { ///////// using libraries \\\\\\\\\ using SafeMath for uint256; address _callerToken; // authority contract which can regulate this address public printTokenAddress; // printing token address address public nativeCoin; // native Wrraped coin address address routerAddress; //dex router address //////////////// contract instances \\\\\\\\\\\\\\\\\\ IERC20 printToken; Istable liquidityAddingToken; IDEXRouter router; mapping (address => mapping(address => uint256)) shareholderClaims; // USd reward claiming mapping uint256 public totalRewardReflaction; // total printing token amount of Usd uint256 public totalRewardDistributed; // to be shown in UI uint256 public totalPayableReward; // total claimable reward amount modifier onlyToken() { require(msg.sender == _callerToken); _; } constructor (address _routerAdd, address _printToken, address _nativeCoin) { require(_routerAdd != address(0), "invalid router address"); require(_printToken != address(0), "invalid pegToken Address"); require(_nativeCoin != address(0), "invalid nativeCoin address"); routerAddress = _routerAdd; router = IDEXRouter(_routerAdd); printTokenAddress = _printToken; printToken = IERC20(_printToken); nativeCoin = _nativeCoin; _callerToken = msg.sender; } receive() external payable { } function surplasBal() external view returns(uint){ return (totalRewardReflaction.sub(totalRewardDistributed)).sub(totalPayableReward); } function printBal() external view returns(uint){ return printToken.balanceOf(address(this)); } function setPrintToken(address _printToken) external onlyToken { require(_printToken != address(0), "invalid printer addiing address"); printTokenAddress = _printToken; printToken = IERC20( _printToken); } event HolderRewardAdded(address _shareHolder, uint _amount); function setShare(address shareholder, uint256 amount) external override onlyToken { shareholderClaims[printTokenAddress][shareholder] = shareholderClaims[printTokenAddress][shareholder].add(amount); totalPayableReward = totalPayableReward.add(amount); emit HolderRewardAdded(shareholder, amount); } function shareHolderBal(address _tokenAdd, address shareHolder) external view override returns(uint){ return shareholderClaims[_tokenAdd][shareHolder]; } event swapPrintedToken(uint _printAmount); function deposit(bool _usdTokenLiquidity, uint _liquidityPercentage) external payable override onlyToken returns(uint){ uint liquidityAmount; uint256 balanceBefore = printToken.balanceOf(address(this)); address[] memory path = new address[](2); path[0] = nativeCoin; path[1] = printTokenAddress; router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}( 0, path, address(this), block.timestamp ); uint256 amount = (printToken.balanceOf(address(this))) - balanceBefore; emit swapPrintedToken(amount); if(_usdTokenLiquidity == true){ liquidityAmount = (amount.mul(_liquidityPercentage)).div(1000); printToken.transfer(_callerToken, liquidityAmount); } totalRewardReflaction = totalRewardReflaction.add(amount.sub(liquidityAmount)); return liquidityAmount; } function avaxSwap(address _tokenAdd, uint tokenAmount) external onlyToken returns(uint){ IERC20(_tokenAdd).approve(routerAddress, tokenAmount); uint256 initialSwapBal = (_callerToken).balance; address[] memory path = new address[](2); path[0] = _tokenAdd; path[1] = nativeCoin; router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, _callerToken, block.timestamp ); uint256 swapAmount = (_callerToken.balance).sub(initialSwapBal); return swapAmount; } function withdrawToken(address _tokenAdd, address receiver, uint amount) external onlyToken{ require(receiver != address(0)); totalRewardDistributed = totalRewardDistributed.add(amount); totalPayableReward = totalPayableReward.sub(amount); IERC20(_tokenAdd).transfer(receiver, amount); } event TransferPrint(address from, address to, uint amount); function claimPrintReflaction(address _tokenAdd, address _sender) external onlyToken{ require(shareholderClaims[_tokenAdd][_sender] >0, "insufficinet balances"); uint amount = shareholderClaims[_tokenAdd][_sender]; shareholderClaims[_tokenAdd][_sender] = 0; totalRewardDistributed = totalRewardDistributed.add(amount); totalPayableReward = totalPayableReward.sub(amount); printToken.transfer( _sender, amount) ; emit TransferPrint(address(this), _sender, amount); } } contract SHARK is IERC20 { ///////////////////// math library \\\\\\\\\\\\\\\\\\\\\\\ using SafeMath for uint; address public Owner; ///////////////////// ERC20 token's meta data \\\\\\\\\\\\\\\\\\\\\\\ string constant _name = "Shark"; string constant _symbol = "SRK"; uint8 constant _decimals = 18; uint constant maxSupply = 1000000000*(10**_decimals); // 1 bilion hardcoded; uint public totalSupply = (maxSupply.mul(80)).div(100); // initial supply 0.9 bilion //////////////// events \\\\\\\\\\\\\\\\\\\\ ///////////////////////////////////////trading mode \\\\\\\\\\\\\\\\\\\\\\\\\\\\ bool public printingMode = true; bool public nativeReflaction = true; bool public printTokenLiquidity = true; bool public antibotMode = false; bool public transferTax = true; uint public mode = 2; ////////////////////////////////// additional token info \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ address nativeCoin; address public printToken = 0x04068DA6C83AFCFA0e13ba15A6696662335D5B75; address selfliquidityTokenAdd; address usdLiquidityTokenAdd; address public tfusdAdd ; //token unique variables(fee calculating variables) uint constant _taxCalcDenominator = 1000; // fee calculation denominator by 1000 //taxes on buy uint buyMarketingFee = 20; uint buyTreseryFee = 10; uint buyReflactionFee = 10; uint buyPrintFee = 60; //taxes on sell uint sellMarketingFee = 30; uint sellTreseryFee = 20; uint sellReflactionFee = 10; uint sellPrintFee = 40; uint tokenLiquidity = 500; uint constant maxTotalFee = 200; // tax cant exceed over 20% (except antibot mode) uint public buyTaxFee = buyMarketingFee + buyTreseryFee + buyReflactionFee + buyPrintFee; uint public sellTaxFee = sellMarketingFee + sellPrintFee + sellReflactionFee + sellTreseryFee; //additional Fee uint contractReflactionPortion = 900; uint gurdianLpRewardFee = 10; //1% of token liquidity; uint basicModeTaxDenominator = 10000000; // 0.00001% tax will be deducted at basicMode uint largeSellFee = 30; // large amount of sell 0.1% of totalSupply uint mediumSellFee = 30; // medium amount of sell 0.05% of totalSupply uint HFTFee = 30; //High frequency trade fee (if anyone trade within short time period below 24 hours) uint quickSellFee = 20; //quick sell like if anyone sell within a week uint antibotFee = 500; // storing on buy swaping tax amount to swap later on sell uint public reserveMarketingCollection; uint reserveTreseryCollection; uint reservePrintingCollection; //thresholds uint public LPDriverThreshold = (maxSupply.mul(10)).div(_taxCalcDenominator); // 1% of totalSupply uint MaxWalletAmount = (maxSupply.mul(10)).div(_taxCalcDenominator); uint MaxTxAmount = (MaxWalletAmount.mul(200)).div(_taxCalcDenominator); uint largeSellAmountThreshold = maxSupply.div(1000); // 0.1% of totalSupply uint mediumSellAmountThreshold = maxSupply.div(2000); // 0.05% of totalsupply uint HFTTimingThreshold = 1*60*60; // 1 hour uint quickSellTimingThreshold = 7*24*60*60; // in a week; uint boosterThreshold = 1000000*(10**_decimals); // peg booster threshold //price goes up variables uint pegBoostingRate = 250; uint appreciateRate = 250; uint public reserveBooster; //struct for contract internal functions struct Share { uint256 lastRewardPercantage; uint256 totalUSDTRewards; uint256 totalNativeRewards; } struct vestingInfo { bool isvesting; uint periodThresHold; uint amountThresHold; } struct balanceInfo { uint256 balance; uint256 updatedAt; uint256 lastSellAt; } mapping(address => balanceInfo) _balances; mapping(address => mapping(address => uint256)) _allowances; // token internal mapping mapping(address => bool) public isWhitelisted; mapping(address => vestingInfo) public isAddedVesting; mapping(address => bool) public isFeeExempt; mapping(address => bool) public isGurdian; mapping(address => bool) public isManager; mapping(address => bool) isExcludeReWard; mapping(address => bool) public isMaxExempt; //reflaction related mapping mapping(address => uint256) private holderByIndex; mapping(address => uint256) private shareHolderClaims; mapping(address => Share) public Shares; address[] tokenHolders; uint NumberOfGurdian; uint constant MaxNumberOfGurdian = 20; //tax fee receiver address marketingFeeReceiver = 0xE938F2776dC76f3cD70e17c62f5Cd0Bb3dAD9f23; address treseryFeeReceiver = 0xE938F2776dC76f3cD70e17c62f5Cd0Bb3dAD9f23; Printer printer; address public printerAddress; //dex variables address public routerAddress; IDEXRouter router; IDEXPair lTank; address public tAddress; bool swapEnabled = true; bool inSwap; modifier swaping() { inSwap = true; _; inSwap = false; } modifier onlyOwner() { require(msg.sender == Owner, "only owner can call the function"); _; } modifier onlyManager() { require(msg.sender == Owner || isManager[msg.sender] == true, "caller isnt gurdian nor Owner"); _; } modifier onlyValidSender(address sender, address receipient, uint amount){ if(isAddedVesting[sender].isvesting == true && receipient == tAddress){ if(_balances[sender].lastSellAt != 0){ require((block.timestamp).sub(_balances[sender].lastSellAt) >= isAddedVesting[sender].periodThresHold , "sender is added to vesting mode , cant transfer before the period is completed"); } require(amount <= (amount.mul(isAddedVesting[sender].amountThresHold)).div(_taxCalcDenominator), "sender is added to vesting mode , cant sell more than 10% of balance amount"); } if(mode == 0 && !antibotMode || mode == 1 && !antibotMode){ require(isWhitelisted[receipient] == true, "only whitelisted can tx"); require(isWhitelisted[sender] == true, "only whitelist mode can tx"); } _; } modifier printPaymentFirst() { if (msg.sender != address(this)) { uint amount = printer.shareHolderBal(printToken, msg.sender); if ( amount > 0) { Shares[msg.sender].totalUSDTRewards = 0; try printer.claimPrintReflaction(printToken, msg.sender) {} catch {} } } _; } modifier lpdriver(bool permission){ if(_balances[address(this)].balance > LPDriverThreshold && mode != 3 && permission == true){ _lpDriver(); } _; } constructor(address _routerAddress) { Owner = msg.sender; routerAddress = _routerAddress; router = IDEXRouter(routerAddress); nativeCoin = router.WETH(); tAddress = IDEXFactory(router.factory()).createPair(router.WETH(), address(this)); lTank = IDEXPair(tAddress); printer = new Printer(routerAddress, printToken, router.WETH()); printerAddress = address(printer); tokenHolders.push(msg.sender); _allowances[address(this)][address(router)] = maxSupply; approve(routerAddress, maxSupply); _balances[msg.sender].balance = totalSupply; } receive() external payable { } ////////////// standard function of IERC20Metadata and IER20 interface \\\\\\\\\\\\\\\\\\\\ function name() external pure override returns (string memory) { return _name; } function symbol() external pure override returns (string memory) { return _symbol; } function decimals() external pure override returns (uint8) { return _decimals; } function balanceOf( address account ) public view override returns (uint256) { return _balances[account].balance; } function approve( address spender, uint256 amount ) public override printPaymentFirst lpdriver(true) returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function allowance( address holder, address spender ) external view override returns (uint256) { return _allowances[holder][spender]; } function transfer( address to, uint256 amount ) external override onlyValidSender(msg.sender, to, amount) returns (bool) { return _transfer(msg.sender, to, amount); } function transferFrom( address from, address to, uint256 amount ) external override onlyValidSender(from, to, amount) returns (bool) { return _transfer(from, to, amount); } function _basicTransfer(address sender, address to, uint amount) internal returns(bool){ if(_balances[to].balance == 0 && to != tAddress && to != address(this)) { _addTokenHolder(to); } _balances[to].balance = (_balances[to].balance).add(amount); require(isMaxExempt[to] ? true : _balances[to].balance <= MaxWalletAmount, "Max wallet amount exceed"); _balances[to].updatedAt = block.timestamp; _balances[sender].updatedAt = block.timestamp; emit Transfer(sender, to, amount); return true; } function _transfer( address from, address to, uint256 amount ) internal printPaymentFirst lpdriver(from != tAddress && to != tAddress) returns (bool) { require(from != address(0), "invalid sender"); require(to != address(0), "invalid receiver"); require(isMaxExempt[from] ? true : amount <= MaxTxAmount, "Max Tx Amount Exceed"); require(_balances[from].balance >= amount, "insufficient amount"); uint feeAmount; bool W2W = from != tAddress && to != tAddress; if(_allowances[from][routerAddress] > 0 && from != address(this)){ _allowances[from][routerAddress] = (_allowances[from][routerAddress]).sub(amount); } _balances[from].balance = (_balances[from].balance).sub(amount); bool isTransferTax = W2W && transferTax == true && mode != 3 && isFeeExempt[from] == false && _balances[address(this)].balance < LPDriverThreshold; bool isTakeFee = shouldTakeFee(from, to) && mode != 3 && W2W == false ; if(isTakeFee || isTransferTax){ feeAmount = takeFee(from, to, amount, W2W); if(to == tAddress || W2W){ uint totalSwapToken = reserveMarketingCollection + reserveTreseryCollection + reservePrintingCollection; if(shouldSwapBack(totalSwapToken)){ swapBack(); } _balances[from].lastSellAt = block.timestamp; }} if( mode == 1 || mode == 2 || mode == 0 || W2W){ _basicTransfer(from, to, amount.sub(feeAmount)); } if(mode == 3 && from == tAddress){ _basicTransfer(from, to, amount.sub(feeAmount)); bpFixing(amount, feeAmount); } if(mode == 3 && to == tAddress){ spFixing(from, amount, feeAmount); } return true; } function takeFee(address sender, address receipient, uint _amount, bool isTransfer) private returns(uint){ uint feeAmount; uint nativeReflactionAmount; uint contractAmount; uint printingAmount; uint marketingAmount; uint treseryAmount; uint antibotTaxAmount; uint amount = _amount; address from = sender; if(mode == 0){ feeAmount = amount.div(basicModeTaxDenominator); reserveMarketingCollection += feeAmount; contractAmount = contractAmount.add(feeAmount); } if(mode == 2 || mode == 3){ if(sender == tAddress || isTransfer){ feeAmount = (amount.mul(buyTaxFee)).div(_taxCalcDenominator); nativeReflactionAmount = nativeReflaction ? (amount.mul(buyReflactionFee)).div(_taxCalcDenominator) : 0; printingAmount = printingMode ? (amount.mul(buyPrintFee)).div(_taxCalcDenominator) : 0; treseryAmount = (amount.mul(buyTreseryFee)).div(_taxCalcDenominator); marketingAmount = feeAmount.sub(nativeReflactionAmount + printingAmount + treseryAmount); reserveMarketingCollection += marketingAmount; reserveTreseryCollection += treseryAmount; reservePrintingCollection += printingAmount; contractAmount = marketingAmount + treseryAmount + printingAmount; } if(receipient == tAddress && sender != address(this)){ feeAmount = (amount.mul(sellTaxFee)).div(_taxCalcDenominator); nativeReflactionAmount = nativeReflaction ? (amount.mul(sellReflactionFee)).div(_taxCalcDenominator) : 0; printingAmount = printingMode ? (amount.mul(sellPrintFee)).div(_taxCalcDenominator) : 0; treseryAmount = (amount.mul(sellTreseryFee)).div(_taxCalcDenominator); reserveTreseryCollection += treseryAmount; reservePrintingCollection += printingAmount; uint largeAmountTax = amount >= largeSellAmountThreshold ? (amount.mul(largeSellFee)).div(_taxCalcDenominator) : 0; uint mediumAmountTax = amount >= mediumSellAmountThreshold ? (amount.mul(mediumSellFee)).div(_taxCalcDenominator) : 0; uint HFTaxAmount = (block.timestamp).sub(_balances[from].updatedAt) <= HFTTimingThreshold ? (amount.mul(HFTFee)).div(_taxCalcDenominator) : (block.timestamp).sub(_balances[from].updatedAt) <= quickSellTimingThreshold ? (amount.mul(quickSellFee)).div(_taxCalcDenominator) : 0; { feeAmount = feeAmount + largeAmountTax + mediumAmountTax + HFTaxAmount; marketingAmount = feeAmount.sub( printingAmount + treseryAmount + largeAmountTax + mediumAmountTax + HFTaxAmount); reserveMarketingCollection = reserveMarketingCollection.add(marketingAmount); contractAmount = contractAmount.add(feeAmount.sub(nativeReflactionAmount)); } }} if(antibotMode == true && mode != 2){ require(sender == tAddress || receipient == tAddress); if(isWhitelisted[from] == false || isWhitelisted[receipient] == false){ antibotTaxAmount = (amount.mul(antibotFee)).div(_taxCalcDenominator); if(antibotTaxAmount > feeAmount){ uint antibotMarketingAmount = antibotTaxAmount.sub(feeAmount); feeAmount = feeAmount.add(antibotMarketingAmount); reserveMarketingCollection = reserveMarketingCollection.add(antibotMarketingAmount); contractAmount = contractAmount.add(antibotMarketingAmount); } } } if(nativeReflaction == true && nativeReflactionAmount > 0){ _dToken(nativeReflactionAmount, 1); } if(contractAmount > 0){ _basicTransfer(sender, address(this), contractAmount); } return feeAmount; } //reward distribute events event DistributeRewards(uint totalRewardAmount); function _dToken(uint _totalAmount, uint num) internal { //1 for native token 2 for print token uint totalHoldedTokens = totalSupply.sub(_balances[tAddress].balance); uint totalDistributed; uint contractReflaction = (_totalAmount.mul(contractReflactionPortion)).div(_taxCalcDenominator); uint distributeAmount = _totalAmount.sub(contractReflaction); for (uint i = 0; i < tokenHolders.length; i++) { uint256 rewardAmount ; if(isExcludeReWard[tokenHolders[i]] == false){ uint holderPercantage = ((_balances[tokenHolders[i]].balance).mul(1000)).div(totalHoldedTokens); Shares[tokenHolders[i]].lastRewardPercantage = holderPercantage; rewardAmount = ((_balances[tokenHolders[i]].balance).mul(distributeAmount)).div(totalHoldedTokens); if (num == 1) { Shares[tokenHolders[i]].totalNativeRewards = Shares[ tokenHolders[i] ].totalNativeRewards.add(rewardAmount); _balances[tokenHolders[i]].balance = (_balances[tokenHolders[i]].balance).add(rewardAmount); totalDistributed = totalDistributed.add(rewardAmount); } if (num == 2) { Shares[tokenHolders[i]].totalUSDTRewards = Shares[ tokenHolders[i] ].totalUSDTRewards.add(rewardAmount); try printer.setShare(tokenHolders[i], rewardAmount) {} catch {} totalDistributed = totalDistributed.add(rewardAmount); }}} uint contractAmount = contractReflaction.add(distributeAmount.sub(totalDistributed)); if(num == 1){ Shares[address(this)].totalNativeRewards = Shares[ address(this) ].totalNativeRewards.add(contractAmount); _balances[address(this)].balance = (_balances[address(this)].balance).add(contractAmount); } if(num ==2){ Shares[address(this)].totalUSDTRewards = Shares[ address(this) ].totalUSDTRewards.add(contractAmount); try printer.withdrawToken(printToken, address(this), contractAmount) {} catch {} } emit DistributeRewards(_totalAmount); } event DistributeSwapBack(uint Reflaction_Print, uint WAVAX_liquidity, uint WAVAX_marketing ); function swapBack() public swaping { uint totalAmountToSwap = reserveMarketingCollection + reserveTreseryCollection + reservePrintingCollection; if(totalAmountToSwap > 0){ require(_balances[address(this)].balance >= totalAmountToSwap, "insufficient contract balance to swap"); uint256 printingAmount; uint256 treseryAmount; uint256 marketingAmount; uint256 usdTokenLiquidity; uint totalAmount = reserveMarketingCollection.add(reserveTreseryCollection); if(printingMode == true){ totalAmount = totalAmount.add(reservePrintingCollection); } uint256 initialSwapBal = (address(this)).balance; address[] memory path = new address[](2); path[0] = address(this); path[1] = nativeCoin; router.swapExactTokensForETHSupportingFeeOnTransferTokens( totalAmount, 0, path, address(this), block.timestamp ); uint256 swapAmount = ((address(this)).balance).sub(initialSwapBal); if(reserveTreseryCollection > 0){ treseryAmount = (swapAmount.mul(reserveTreseryCollection)).div(totalAmount); payable(treseryFeeReceiver).transfer(treseryAmount); reserveTreseryCollection = 0; } if(printingMode == true){ printingAmount = (swapAmount.mul(reservePrintingCollection)).div(totalAmount); } if(printingAmount > 0 && printingMode == true){ usdTokenLiquidity = printer.deposit{value: printingAmount}(printTokenLiquidity, tokenLiquidity) ; uint surplasPrintBal = printer.surplasBal(); _dToken(surplasPrintBal, 2); reservePrintingCollection = 0; } if(usdTokenLiquidity > 0 && printTokenLiquidity == true){ Istable(tfusdAdd).mint(usdTokenLiquidity); IERC20(printToken).approve(routerAddress, usdTokenLiquidity); IERC20(tfusdAdd).approve(routerAddress, usdTokenLiquidity); router.addLiquidity( printToken, tfusdAdd, usdTokenLiquidity, usdTokenLiquidity, 0, 0, Owner, block.timestamp ); } marketingAmount = swapAmount.sub(treseryAmount + printingAmount); reserveMarketingCollection = 0; payable(marketingFeeReceiver).transfer(marketingAmount); emit DistributeSwapBack( printingAmount, treseryAmount, marketingAmount); } } function _lpDriver() private { uint gurdianReward; uint256 lpDriverAmount; uint256 lpDriverAvax; lpDriverAmount = LPDriverThreshold.div(2); lpDriverAvax = LPDriverThreshold.sub(lpDriverAmount); _balances[printerAddress].balance = (_balances[printerAddress].balance).add(lpDriverAvax); _balances[address(this)].balance = (_balances[address(this)].balance).sub(lpDriverAvax); uint liquidityAvaxAmount = printer.avaxSwap(address(this), lpDriverAvax); (, , uint nativeLiquidity) = router.addLiquidityETH{value:liquidityAvaxAmount}( address(this), lpDriverAmount, 0, 0, address(this), block.timestamp ); if(isGurdian[msg.sender] == true){ gurdianReward = (nativeLiquidity.mul(gurdianLpRewardFee)).div(_taxCalcDenominator); IERC20(selfliquidityTokenAdd).transfer(msg.sender, gurdianReward); } } function selfLpDriver() external { require(isGurdian[msg.sender] == true|| isManager[msg.sender] == true || msg.sender == Owner); require(_balances[address(this)].balance > LPDriverThreshold && mode != 3); _lpDriver(); } event Ladder(uint reserve0, uint reserve1 , uint amountWithouFee, uint expectedPairAmount, uint initialPairBalance, uint appreciationAmount, uint calculativeToken); function bpFixing( uint amount, uint feeAmount) private { uint mintAmount; uint contractAmount; uint newAmount; uint appreciationAmount; uint expectedPairAmount; uint amountWithoutFee = amount.sub(feeAmount); address tokenA = lTank.token0(); (uint reserve0, uint reserve1, ) = lTank.getReserves(); uint initialPairBalance = _balances[tAddress].balance; if(tokenA == address(this)){ uint amountIn = router.getAmountIn(amount, reserve1, reserve0); uint tokenPrice = (reserve1.mul(10**_decimals)).div(reserve0); newAmount = ((10**_decimals).mul(reserve1.add(amountIn))).div(tokenPrice); }else{ uint amountIn = router.getAmountIn(amount, reserve0, reserve1); uint tokenPrice = (reserve0.mul(10**_decimals)).div(reserve1); newAmount = ((10**_decimals).mul(reserve0.add(amountIn))).div(tokenPrice); } if(appreciateRate > 0 && pegBoostingRate > 0){ appreciationAmount = (amountWithoutFee.mul(appreciateRate)).div(_taxCalcDenominator); uint boostingAmount = (amountWithoutFee.mul(pegBoostingRate)).div(_taxCalcDenominator); reserveBooster = reserveBooster.add(boostingAmount); } expectedPairAmount = newAmount.sub(appreciationAmount); if(reserveBooster >= boosterThreshold){ expectedPairAmount = expectedPairAmount.sub(boosterThreshold); reserveBooster = reserveBooster.sub(boosterThreshold); } if(expectedPairAmount > initialPairBalance){ uint supplyAmount = expectedPairAmount.sub(initialPairBalance); uint swapRequiredToken = reserveMarketingCollection + reserveTreseryCollection + reservePrintingCollection; require(_balances[address(this)].balance >= swapRequiredToken, "contract is imbalanced"); uint contractReserveBal = (_balances[address(this)].balance).sub(swapRequiredToken); if(contractReserveBal >= supplyAmount){ _balances[address(this)].balance = (_balances[address(this)].balance).sub(supplyAmount); _balances[tAddress].balance = (_balances[tAddress].balance).add(supplyAmount); emit Transfer(address(this), tAddress, supplyAmount); }else{ if(contractReserveBal > 0){ _balances[address(this)].balance = (_balances[address(this)].balance).sub(contractReserveBal); _balances[tAddress].balance = (_balances[tAddress].balance).add(contractReserveBal); emit Transfer(address(this), tAddress, contractReserveBal); } if(totalSupply != maxSupply){ mintAmount = supplyAmount.sub(contractReserveBal); if(totalSupply.add(mintAmount) > maxSupply){ mintAmount = maxSupply.sub(totalSupply); mode = 2; } totalSupply = totalSupply.add(mintAmount); _balances[tAddress].balance = (_balances[tAddress].balance).add(mintAmount); }else{ mode = 2; } } }else{ contractAmount = contractAmount.add(initialPairBalance.sub(expectedPairAmount)); _balances[tAddress].balance = (_balances[tAddress].balance).sub(contractAmount); _balances[address(this)].balance = (_balances[address(this)].balance).add(contractAmount); emit Transfer(tAddress, address(this), contractAmount); } { uint _mintAmount = mintAmount; emit Ladder( reserve0, reserve1, amountWithoutFee, expectedPairAmount, initialPairBalance, appreciationAmount, _mintAmount ); } } function spFixing(address sender, uint amount, uint feeAmount) private { uint contractAmount; uint newAmount; uint tokenPrice; uint appreciationAmount; uint amountWithoutFee = amount.sub(feeAmount); address tokenA = lTank.token0(); (uint reserve0, uint reserve1, ) = lTank.getReserves(); uint initialpairBalance = _balances[tAddress].balance; uint expectedPairAmount; if(tokenA == address(this)){ uint amountOut = router.getAmountOut(amount, reserve0, reserve1); tokenPrice = (reserve1.mul(10**_decimals)).div(reserve0); newAmount = ((10**_decimals).mul(reserve1.sub(amountOut))).div(tokenPrice); }else{ uint amountOut = router.getAmountOut(amount, reserve1, reserve0); tokenPrice = (reserve0.mul(10**_decimals)).div(reserve1); newAmount = ((10**_decimals).mul(reserve0.sub(amountOut))).div(tokenPrice); } if(appreciateRate > 0 && pegBoostingRate > 0){ appreciationAmount = (amountWithoutFee.mul(appreciateRate)).div(_taxCalcDenominator); uint boostingAmount = (amountWithoutFee.mul(pegBoostingRate)).div(_taxCalcDenominator); reserveBooster = reserveBooster.add(boostingAmount); } expectedPairAmount = newAmount.add(appreciationAmount); if(reserveBooster >= boosterThreshold){ expectedPairAmount = expectedPairAmount.sub(boosterThreshold); reserveBooster = reserveBooster.sub(boosterThreshold); } uint expectedDiff = initialpairBalance.sub(expectedPairAmount); _balances[tAddress].balance = expectedPairAmount.sub(amount); contractAmount = amountWithoutFee.add(expectedDiff); lTank.sync(); //force reserve to fix peg _balances[tAddress].balance = expectedPairAmount; if(contractAmount > 0){ _balances[address(this)].balance = (_balances[address(this)].balance).add(contractAmount); emit Transfer(tAddress, address(this), contractAmount); } { uint _contractAmount = contractAmount; emit Transfer(sender, tAddress, amountWithoutFee); emit Ladder(reserve0, reserve1, amountWithoutFee, expectedPairAmount, initialpairBalance, appreciationAmount, _contractAmount); } } ///////// state Update functions \\\\\\\\\\\ //----------------------------------------------------------------------------------------------------------------------------------- function shouldSwapBack(uint256 _amount) private view returns (bool) { return msg.sender != tAddress && !inSwap && swapEnabled && _balances[address(this)].balance >= _amount; } function shouldTakeFee(address sender, address receiver) private view returns (bool) { bool permission = !isFeeExempt[sender]; if(sender == tAddress && isFeeExempt[receiver]){ permission = false; } return permission; } function _addTokenHolder(address _holder) private { holderByIndex[_holder] = tokenHolders.length; tokenHolders.push(_holder); } function updateFeeExempt(address[] calldata addressArray, bool exempt ) external onlyManager{ for(uint i = 0 ; i < addressArray.length ; i++){ require(addressArray[i] != address(0), "invalid address"); isFeeExempt[addressArray[i]] = exempt; } } function updatePegBooster(uint _pegBoosterrate, uint appreciationAmount, uint _boosterThreshold, uint _driverFee) external onlyManager{ pegBoostingRate = _pegBoosterrate; appreciateRate = appreciationAmount; boosterThreshold = _boosterThreshold; LPDriverThreshold = (maxSupply.mul(_driverFee)).div(_taxCalcDenominator); } function updateWhitelisted(address[] calldata _holders, bool position) external onlyManager { for(uint i =0 ; i < _holders.length; i++){ require(_holders[i] != address(0), "invalid Address"); isWhitelisted[_holders[i]] = position; } } function updateVesting(address[] calldata addressArray, bool _switch, uint[] calldata periodArray, uint[] calldata amountArray ) external onlyManager{ require(addressArray.length == periodArray.length, "invalid Vesting periods"); require(addressArray.length == amountArray.length, "invalid Vesting amounts"); for(uint i = 0; i < addressArray.length ; i++){ if(addressArray[i] != address(0)){ if(_switch == true){ isAddedVesting[addressArray[i]].isvesting = true; isAddedVesting[addressArray[i]].periodThresHold = periodArray[i]; isAddedVesting[addressArray[i]].amountThresHold = amountArray[i].mul(10); }else{ isAddedVesting[addressArray[i]].isvesting =false; } }} } function updateManager(address _add, bool position) external onlyOwner{ require(_add != address(0)); isManager[_add] = position; } function upgradeGurdian(address[] calldata addressArray, bool rank) external onlyManager{ if(rank == true) { require((NumberOfGurdian + addressArray.length) <= MaxNumberOfGurdian, "max number of gurdian exceed"); }else{ require(NumberOfGurdian >= addressArray.length, "no gurdian to remove"); } for(uint i = 0; i < addressArray.length ; i++){ if(addressArray[i] != address(0)){ isGurdian[addressArray[i]] = rank; rank == true ? NumberOfGurdian.add(1) : NumberOfGurdian.sub(1); }} } function updateMaxExempt(address[] calldata addressArray, bool option) external onlyManager{ for(uint i = 0 ; i < addressArray.length ; i++){ if(addressArray[i] != address(0)){ isMaxExempt[addressArray[i]] = option; }} } function updateRewardExempt(address[] calldata addressArray, bool option) external onlyManager{ for(uint i = 0 ; i < addressArray.length ; i++){ if(addressArray[i] != address(0)){ isExcludeReWard[addressArray[i]] = option; } } } function claimReward(address _tokenAdd) external { require(printer.shareHolderBal(_tokenAdd, msg.sender) > 0 , "insufficient balance"); try printer.claimPrintReflaction(_tokenAdd, msg.sender) {} catch {} } function updatePeriodThreshold( uint _hftPeriod, uint _quickSellPeriod ) external onlyManager{ HFTTimingThreshold = _hftPeriod; quickSellTimingThreshold = _quickSellPeriod; } function updateMax( uint _maxTx, uint _maxWallet ) external onlyManager returns(bool){ MaxWalletAmount = _maxWallet.mul(10**_decimals); MaxTxAmount = _maxTx.mul(10**_decimals); require(MaxWalletAmount > MaxTxAmount, "Max tx exceed maxWallet"); return true; } function switchAntibot(uint _antibotFee)external onlyManager{ require(mode == 0 || mode == 1); antibotMode = true; antibotFee = _antibotFee; } function switchMode( bool _prinitingSwitch, bool _nativeReflactionSwitch, bool _tokenLiquiditySwitch, bool _transferSwitch, uint _mode, bool _payit )external onlyManager{ if(_payit == true && reservePrintingCollection > 0 && shouldSwapBack(reservePrintingCollection + reserveMarketingCollection + reserveTreseryCollection)){ swapBack(); } printingMode = _prinitingSwitch; nativeReflaction = _nativeReflactionSwitch; printTokenLiquidity = _tokenLiquiditySwitch; antibotMode = false; transferTax = _transferSwitch; mode = _mode; } function updateBuyandSellTax( uint marketingFee, uint treseryFee, uint printTokenFee, uint reflactionFee, bool _option // true for buy and false for sell ) external onlyManager { uint totalTax = marketingFee + treseryFee + printTokenFee + reflactionFee; require(totalTax.add(HFTFee.add(largeSellFee)) <= maxTotalFee); require(totalTax.add(HFTFee.add(mediumSellFee)) <= maxTotalFee); require(totalTax.add(quickSellFee.add(mediumSellFee)) <= maxTotalFee); require(totalTax.add(quickSellFee.add(largeSellFee)) <= maxTotalFee); require(totalTax <= maxTotalFee, "total tax exceed the max total tax"); if(_option == true){ buyMarketingFee = marketingFee.mul(10); buyTreseryFee = treseryFee.mul(10); buyReflactionFee = reflactionFee.mul(10); buyPrintFee = printTokenFee.mul(10); buyTaxFee = totalTax.mul(10); }else{ sellMarketingFee = marketingFee.mul(10); sellTreseryFee = treseryFee.mul(10); sellReflactionFee = reflactionFee.mul(10); sellPrintFee = printTokenFee.mul(10); sellTaxFee = totalTax.mul(10); } } function sell(uint amount) external returns(uint){ uint avaxAmount; uint feeAmount; if(shouldTakeFee(msg.sender, tAddress)){ feeAmount = takeFee(msg.sender, tAddress, amount, false); } uint amountToSell = amount.sub(feeAmount); _balances[msg.sender].balance = (_balances[msg.sender].balance).sub(amount); _basicTransfer(msg.sender, address(this), amount.sub(feeAmount)); uint256 initialSwapBal = (msg.sender).balance; address[] memory path = new address[](2); path[0] = address(this); path[1] = nativeCoin; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSell, 0, path, msg.sender, block.timestamp ); avaxAmount = ((msg.sender).balance).sub(initialSwapBal); return avaxAmount; } function updateAdditionalTax( uint _hftTax, uint _quickSellTax, uint _mediumSellTax, uint _largerSellTax ) external onlyManager { require(sellTaxFee.add(_hftTax.add(_largerSellTax)) <= maxTotalFee); require(sellTaxFee.add(_hftTax.add(_mediumSellTax)) <= maxTotalFee); require(sellTaxFee.add(_quickSellTax.add(_mediumSellTax)) <= maxTotalFee); require(sellTaxFee.add(_quickSellTax.add(_largerSellTax)) <= maxTotalFee); largeSellFee = _largerSellTax; HFTFee = _hftTax; mediumSellFee = _mediumSellTax; quickSellFee = _quickSellTax; } function setRouter(address _routerAdd) external onlyManager { routerAddress = _routerAdd; router = IDEXRouter(_routerAdd); nativeCoin = router.WETH(); tAddress = IDEXFactory(router.factory()).createPair(nativeCoin, address(this)); isFeeExempt[routerAddress] = true; isFeeExempt[tAddress] = true; } function updateFeeReceiver(address _marketFeeReceiver, address _treseryFeeReceiver) external onlyManager{ require(_marketFeeReceiver != address(0) || _treseryFeeReceiver != address(0)); marketingFeeReceiver = _marketFeeReceiver; treseryFeeReceiver = _treseryFeeReceiver; } function transferOwnership(address _newOwner) external onlyOwner returns(bool){ require(_newOwner != address(0), "invalid address"); Owner = _newOwner; return true; } function Sweep(address _receiver, uint amount) external onlyManager { uint256 balance = address(this).balance; require(balance >= amount, "insufficient balance"); payable(_receiver).transfer(amount); } function sweepToken(address _tokenAdd, address _receiver, uint amount) external onlyManager{ require(_receiver != address(0)); uint tokenBalance = IERC20(_tokenAdd).balanceOf(address(this)); require(tokenBalance >= amount, "insufficient balance"); IERC20(_tokenAdd).transfer(_receiver, amount); } function upgradeTokenAddress(address _tokenLiquidityAdd,address _tfusd, address _printToken, uint _liquidityPercantage) external onlyManager{ if(_tokenLiquidityAdd != address(0)){ selfliquidityTokenAdd = _tokenLiquidityAdd; } if(_tfusd != address(0)){ tfusdAdd = _tfusd; tokenLiquidity = _liquidityPercantage; } if(_printToken != address(0)){ try printer.setPrintToken(_printToken) {} catch {} printToken = _printToken; } } function airdropToken(address _tokenAdd, address[] calldata receiverArray, uint[] calldata receiverAmount) external onlyManager{ require(receiverArray.length == receiverAmount.length, "totalNumber of address and totalNumber of value doesnt match"); for(uint i = 0; i < receiverArray.length; i++){ address receipient = receiverArray[i]; uint amount = receiverAmount[i]; uint senderBal = IERC20(_tokenAdd).balanceOf(msg.sender); require(senderBal >= amount, "insufficient balances for airdrop"); IERC20(_tokenAdd).transferFrom(msg.sender, receipient, amount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"}],"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":false,"internalType":"uint256","name":"totalRewardAmount","type":"uint256"}],"name":"DistributeRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"Reflaction_Print","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"WAVAX_liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"WAVAX_marketing","type":"uint256"}],"name":"DistributeSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reserve0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserve1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWithouFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expectedPairAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"initialPairBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"appreciationAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"calculativeToken","type":"uint256"}],"name":"Ladder","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":"LPDriverThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"Shares","outputs":[{"internalType":"uint256","name":"lastRewardPercantage","type":"uint256"},{"internalType":"uint256","name":"totalUSDTRewards","type":"uint256"},{"internalType":"uint256","name":"totalNativeRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAdd","type":"address"},{"internalType":"address[]","name":"receiverArray","type":"address[]"},{"internalType":"uint256[]","name":"receiverAmount","type":"uint256[]"}],"name":"airdropToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antibotMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAdd","type":"address"}],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAddedVesting","outputs":[{"internalType":"bool","name":"isvesting","type":"bool"},{"internalType":"uint256","name":"periodThresHold","type":"uint256"},{"internalType":"uint256","name":"amountThresHold","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isGurdian","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"nativeReflaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"printToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"printTokenLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"printerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"printingMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveBooster","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveMarketingCollection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"selfLpDriver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_routerAdd","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAdd","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sweepToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_antibotFee","type":"uint256"}],"name":"switchAntibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_prinitingSwitch","type":"bool"},{"internalType":"bool","name":"_nativeReflactionSwitch","type":"bool"},{"internalType":"bool","name":"_tokenLiquiditySwitch","type":"bool"},{"internalType":"bool","name":"_transferSwitch","type":"bool"},{"internalType":"uint256","name":"_mode","type":"uint256"},{"internalType":"bool","name":"_payit","type":"bool"}],"name":"switchMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tfusdAdd","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":"to","type":"address"},{"internalType":"uint256","name":"amount","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":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hftTax","type":"uint256"},{"internalType":"uint256","name":"_quickSellTax","type":"uint256"},{"internalType":"uint256","name":"_mediumSellTax","type":"uint256"},{"internalType":"uint256","name":"_largerSellTax","type":"uint256"}],"name":"updateAdditionalTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"treseryFee","type":"uint256"},{"internalType":"uint256","name":"printTokenFee","type":"uint256"},{"internalType":"uint256","name":"reflactionFee","type":"uint256"},{"internalType":"bool","name":"_option","type":"bool"}],"name":"updateBuyandSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"updateFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketFeeReceiver","type":"address"},{"internalType":"address","name":"_treseryFeeReceiver","type":"address"}],"name":"updateFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"bool","name":"position","type":"bool"}],"name":"updateManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"bool","name":"option","type":"bool"}],"name":"updateMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pegBoosterrate","type":"uint256"},{"internalType":"uint256","name":"appreciationAmount","type":"uint256"},{"internalType":"uint256","name":"_boosterThreshold","type":"uint256"},{"internalType":"uint256","name":"_driverFee","type":"uint256"}],"name":"updatePegBooster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hftPeriod","type":"uint256"},{"internalType":"uint256","name":"_quickSellPeriod","type":"uint256"}],"name":"updatePeriodThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"bool","name":"option","type":"bool"}],"name":"updateRewardExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"bool","name":"_switch","type":"bool"},{"internalType":"uint256[]","name":"periodArray","type":"uint256[]"},{"internalType":"uint256[]","name":"amountArray","type":"uint256[]"}],"name":"updateVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_holders","type":"address[]"},{"internalType":"bool","name":"position","type":"bool"}],"name":"updateWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"bool","name":"rank","type":"bool"}],"name":"upgradeGurdian","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenLiquidityAdd","type":"address"},{"internalType":"address","name":"_tfusd","type":"address"},{"internalType":"address","name":"_printToken","type":"address"},{"internalType":"uint256","name":"_liquidityPercantage","type":"uint256"}],"name":"upgradeTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526200005660646200004260506200001e6012600a62000de2565b6200002e90633b9aca0062000df3565b620006a760201b620031b01790919060201c565b6200073e60201b620032391790919060201c565b6001556002805464010001010164ffffffffff19909116178155600355600580546001600160a01b0319167304068da6c83afcfa0e13ba15a6696662335d5b7517905560146009819055600a808055600b819055603c600c819055601e600d55600e839055600f82905560286010556101f460115591620000d990829062000e0d565b620000e5919062000e0d565b620000f1919062000e0d565b601255600e54600f54601054600d546200010c919062000e0d565b62000118919062000e0d565b62000124919062000e0d565b601355610384601455600a60155562989680601655601e601755601e601855601e6019556014601a556101f4601b55620001706103e862000042600a6012600a6200001e919062000de2565b601f556200018d6103e862000042600a6200001e60128262000de2565b602055620001b46103e86200004260c8602054620006a760201b620031b01790919060201c565b602155620001dc6103e8620001cc6012600a62000de2565b6200004290633b9aca0062000df3565b602255620001f46107d0620001cc6012600a62000de2565b602355610e1060245562093a80602555620002126012600a62000de2565b6200022190620f424062000df3565b60265560fa6027819055602855603880546001600160a01b031990811673e938f2776dc76f3cd70e17c62f5cd0bb3dad9f23908117909255603980549091169091179055603f805460ff60a01b1916600160a01b1790553480156200028557600080fd5b50604051620080af380380620080af833981016040819052620002a89162000e23565b600080546001600160a01b03199081163317909155603c80546001600160a01b0384169083168117909155603d80549092168117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa1580156200031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000341919062000e23565b600480546001600160a01b0319166001600160a01b03928316178155603d546040805163c45a015560e01b81529051919093169263c45a015592818101926020929091908290030181865afa1580156200039f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c5919062000e23565b6001600160a01b031663c9c65396603d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000427573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044d919062000e23565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156200049a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c0919062000e23565b603f80546001600160a01b039283166001600160a01b03199182168117909255603e80549091169091179055603c54600554603d54604080516315ab88c960e31b815290519385169492831693919092169163ad5c46489160048083019260209291908290030181865afa1580156200053d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000563919062000e23565b604051620005719062000cc1565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015620005ae573d6000803e3d6000fd5b50603a80546001600160a01b03929092166001600160a01b03199283168117909155603b805483169091179055603680546001810182556000919091527f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b801805490911633179055620006246012600a62000de2565b6200063490633b9aca0062000df3565b306000908152602b60209081526040808320603d546001600160a01b039081168552925290912091909155603c546200068c9116620006766012600a62000de2565b6200068690633b9aca0062000df3565b6200079d565b5050600154336000908152602a602052604090205562000ef4565b600082600003620006bb5750600062000738565b6000620006c9838562000df3565b905082620006d8858362000e4e565b14620007355760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b6000808211620007915760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f00000000000060448201526064016200072c565b62000735828462000e4e565b6000333014620008ab57603a5460055460405163575c802560e01b81526001600160a01b039182166004820152336024820152600092919091169063575c802590604401602060405180830381865afa158015620007ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000825919062000e71565b90508015620008a9573360008181526035602052604080822060010191909155603a546005549151632ee920ad60e21b81526001600160a01b0392831660048201526024810193909352169063bba482b490604401600060405180830381600087803b1580156200089557600080fd5b505af1925050508015620008a7575060015b505b505b601f54306000908152602a6020526040902054600191108015620008d25750600354600314155b8015620008e157506001811515145b15620008f157620008f162000956565b336000818152602b602090815260408083206001600160a01b03891680855290835292819020879055518681529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6000806000620009786002601f546200073e60201b620032391790919060201c565b91506200099682601f5462000bfe60201b620032911790919060201c565b603b546001600160a01b03166000908152602a6020908152604090912054919250620009ce91908390620032ed62000c5e821b17901c565b603b546001600160a01b03166000908152602a60209081526040808320939093553082529190205462000a0c9183906200329162000bfe821b17901c565b306000818152602a602052604080822093909355603a5492516370d64f1760e01b8152600481019290925260248201849052916001600160a01b0316906370d64f17906044016020604051808303816000875af115801562000a72573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a98919062000e71565b603d5460405163f305d71960e01b81523060048201819052602482018790526000604483018190526064830181905260848301919091524260a48301529293506001600160a01b039091169063f305d71990849060c40160606040518083038185885af115801562000b0e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062000b35919062000e8b565b336000908152602f602052604090205490935060ff161515600103915062000bf790505762000b7c6103e86200004260155484620006a760201b620031b01790919060201c565b60065460405163a9059cbb60e01b8152336004820152602481018390529196506001600160a01b03169063a9059cbb906044016020604051808303816000875af115801562000bcf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bf5919062000eba565b505b5050505050565b60008282111562000c525760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060448201526064016200072c565b62000735828462000ede565b60008062000c6d838562000e0d565b905083811015620007355760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200072c565b6112088062006ea783390190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000d2657816000190482111562000d0a5762000d0a62000ccf565b8085161562000d1857918102915b93841c939080029062000cea565b509250929050565b60008262000d3f5750600162000738565b8162000d4e5750600062000738565b816001811462000d67576002811462000d725762000d92565b600191505062000738565b60ff84111562000d865762000d8662000ccf565b50506001821b62000738565b5060208310610133831016604e8410600b841016171562000db7575081810a62000738565b62000dc3838362000ce5565b806000190482111562000dda5762000dda62000ccf565b029392505050565b60006200073560ff84168362000d2e565b808202811582820484141762000738576200073862000ccf565b8082018082111562000738576200073862000ccf565b60006020828403121562000e3657600080fd5b81516001600160a01b03811681146200073557600080fd5b60008262000e6c57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000e8457600080fd5b5051919050565b60008060006060848603121562000ea157600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121562000ecd57600080fd5b815180151581146200073557600080fd5b8181038181111562000738576200073862000ccf565b615fa38062000f046000396000f3fe6080604052600436106102a55760003560e01c80638124f7ac116101615780638124f7ac146106e9578063827e32781461070a57806383e4f7931461072a5780638921da141461074a57806389cb56141461075f578063941fa5cd146107bc578063943a4db5146107d257806395d89b41146107e8578063a37912c214610814578063a54cfa0914610834578063a9059cbb14610854578063ab02a6e614610874578063ab22460614610893578063b4a99a4e146108b3578063bacedb48146108d3578063c0d78655146108f3578063c50b6cdc14610913578063ca9bcf6614610933578063d279c1911461094d578063da2f01ae1461096d578063dd62ed3e1461098d578063e4849b32146109ad578063e9cc4edd146109cd578063f27f25d1146109ed578063f2fde38b14610a0d578063f3ae241514610a2d578063f831747814610a5d578063f8a25a9414610a7d578063f916668114610a9357600080fd5b806306fdde03146102b1578063095ea7b3146102f157806311eede301461032157806312c126b41461034157806318160ddd1461036357806318ad5be3146103875780631b23f762146103a757806323b872dd146103f2578063295a521214610412578063313ce567146104285780633268cc56146104445780633a35ae2d146104715780633af32abf146104915780633f4218e0146104c15780633fa5f56b146104f157806355fbf8da14610511578063580081c4146105275780635a3cc40a146105475780635ab517ba146105675780635f940ef41461059757806363aedb38146105b857806364aff9ec146105d85780636ac5eeee146105f85780636f370ee51461060d57806370a082311461062d5780637515cd66146106635780637a8e043e146106835780637e8516c1146106a3578063807fb8c5146106b957600080fd5b366102ac57005b600080fd5b3480156102bd57600080fd5b50604080518082019091526005815264536861726b60d81b60208201525b6040516102e891906154f3565b60405180910390f35b3480156102fd57600080fd5b5061031161030c366004615556565b610ab3565b60405190151581526020016102e8565b34801561032d57600080fd5b506002546103119062010000900460ff1681565b34801561034d57600080fd5b5061036161035c366004615582565b610c5e565b005b34801561036f57600080fd5b5061037960015481565b6040519081526020016102e8565b34801561039357600080fd5b506103616103a2366004615614565b610d06565b3480156103b357600080fd5b506103e36103c236600461566a565b60356020526000908152604090208054600182015460029092015490919083565b6040516102e893929190615687565b3480156103fe57600080fd5b5061031161040d36600461569d565b610dfe565b34801561041e57600080fd5b5061037960035481565b34801561043457600080fd5b50604051601281526020016102e8565b34801561045057600080fd5b50603c54610464906001600160a01b031681565b6040516102e891906156de565b34801561047d57600080fd5b5061036161048c3660046156f2565b610fdd565b34801561049d57600080fd5b506103116104ac36600461566a565b602c6020526000908152604090205460ff1681565b3480156104cd57600080fd5b506103116104dc36600461566a565b602e6020526000908152604090205460ff1681565b3480156104fd57600080fd5b5061036161050c366004615720565b611045565b34801561051d57600080fd5b50610379601f5481565b34801561053357600080fd5b50603f54610464906001600160a01b031681565b34801561055357600080fd5b50610361610562366004615614565b6110d0565b34801561057357600080fd5b5061031161058236600461566a565b602f6020526000908152604090205460ff1681565b3480156105a357600080fd5b50600254610311906301000000900460ff1681565b3480156105c457600080fd5b506103616105d3366004615752565b6111c2565b3480156105e457600080fd5b506103616105f336600461569d565b61142f565b34801561060457600080fd5b50610361611595565b34801561061957600080fd5b506103616106283660046157d4565b611c12565b34801561063957600080fd5b5061037961064836600461566a565b6001600160a01b03166000908152602a602052604090205490565b34801561066f57600080fd5b5061036161067e366004615614565b611cff565b34801561068f57600080fd5b5061036161069e36600461584d565b611e08565b3480156106af57600080fd5b50610379601c5481565b3480156106c557600080fd5b506103116106d436600461566a565b60326020526000908152604090205460ff1681565b3480156106f557600080fd5b5060025461031190600160201b900460ff1681565b34801561071657600080fd5b50610361610725366004615720565b611e5c565b34801561073657600080fd5b50610361610745366004615614565b611f2a565b34801561075657600080fd5b50610361612055565b34801561076b57600080fd5b5061079f61077a36600461566a565b602d6020526000908152604090208054600182015460029092015460ff909116919083565b6040805193151584526020840192909252908201526060016102e8565b3480156107c857600080fd5b5061037960125481565b3480156107de57600080fd5b5061037960295481565b3480156107f457600080fd5b5060408051808201909152600381526253524b60e81b60208201526102db565b34801561082057600080fd5b5061036161082f36600461586f565b6120e0565b34801561084057600080fd5b5061036161084f3660046158c0565b612212565b34801561086057600080fd5b5061031161086f366004615556565b6124da565b34801561088057600080fd5b5060025461031190610100900460ff1681565b34801561089f57600080fd5b506103616108ae366004615556565b6126aa565b3480156108bf57600080fd5b50600054610464906001600160a01b031681565b3480156108df57600080fd5b506103616108ee36600461596e565b61274a565b3480156108ff57600080fd5b5061036161090e36600461566a565b6127c5565b34801561091f57600080fd5b50600854610464906001600160a01b031681565b34801561093f57600080fd5b506002546103119060ff1681565b34801561095957600080fd5b5061036161096836600461566a565b6129e4565b34801561097957600080fd5b50610361610988366004615614565b612ad7565b34801561099957600080fd5b506103796109a8366004615582565b612cab565b3480156109b957600080fd5b506103796109c836600461596e565b612cd8565b3480156109d957600080fd5b506103116109e836600461584d565b612e59565b3480156109f957600080fd5b50603b54610464906001600160a01b031681565b348015610a1957600080fd5b50610311610a2836600461566a565b612f2a565b348015610a3957600080fd5b50610311610a4836600461566a565b60306020526000908152604090205460ff1681565b348015610a6957600080fd5b50600554610464906001600160a01b031681565b348015610a8957600080fd5b5061037960135481565b348015610a9f57600080fd5b50610361610aae366004615987565b612f9f565b6000333014610bb757603a5460055460405163575c802560e01b81526000926001600160a01b039081169263575c802592610af6929091169033906004016159d4565b602060405180830381865afa158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3791906159ee565b90508015610bb5573360008181526035602052604080822060010191909155603a546005549151632ee920ad60e21b81526001600160a01b039182169363bba482b493610b889316916004016159d4565b600060405180830381600087803b158015610ba257600080fd5b505af1925050508015610bb3575060015b505b505b601f54306000908152602a6020526040902054600191108015610bdd5750600354600314155b8015610beb57506001811515145b15610bf857610bf861334a565b336000818152602b602090815260408083206001600160a01b03891680855290835292819020879055518681529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060019392505050565b6000546001600160a01b0316331480610c8b57503360009081526030602052604090205460ff1615156001145b610cb05760405162461bcd60e51b8152600401610ca790615a07565b60405180910390fd5b6001600160a01b038216151580610ccf57506001600160a01b03811615155b610cd857600080fd5b603880546001600160a01b039384166001600160a01b03199182161790915560398054929093169116179055565b6000546001600160a01b0316331480610d3357503360009081526030602052604090205460ff1615156001145b610d4f5760405162461bcd60e51b8152600401610ca790615a07565b60005b82811015610df8576000848483818110610d6e57610d6e615a3e565b9050602002016020810190610d83919061566a565b6001600160a01b031614610de6578160316000868685818110610da857610da8615a3e565b9050602002016020810190610dbd919061566a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b80610df081615a6a565b915050610d52565b50505050565b6001600160a01b0383166000908152602d602052604081205484908490849060ff1615156001148015610e3e5750603f546001600160a01b038381169116145b15610f0c576001600160a01b0383166000908152602a602052604090206002015415610eb8576001600160a01b0383166000908152602d6020908152604080832060010154602a90925290912060020154610e9a904290613291565b1015610eb85760405162461bcd60e51b8152600401610ca790615a83565b6001600160a01b0383166000908152602d6020526040902060020154610eed906103e890610ee79084906131b0565b90613239565b811115610f0c5760405162461bcd60e51b8152600401610ca790615af7565b600354158015610f2657506002546301000000900460ff16155b80610f4857506003546001148015610f4857506002546301000000900460ff16155b15610fc7576001600160a01b0382166000908152602c602052604090205460ff161515600114610f8a5760405162461bcd60e51b8152600401610ca790615b68565b6001600160a01b0383166000908152602c602052604090205460ff161515600114610fc75760405162461bcd60e51b8152600401610ca790615b99565b610fd28787876135a0565b979650505050505050565b6000546001600160a01b031633146110075760405162461bcd60e51b8152600401610ca790615bcd565b6001600160a01b03821661101a57600080fd5b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6000546001600160a01b031633148061107257503360009081526030602052604090205460ff1615156001145b61108e5760405162461bcd60e51b8152600401610ca790615a07565b6027849055602883905560268290556110c76103e8610ee7836110b36012600a615ce6565b6110c190633b9aca00615cf5565b906131b0565b601f5550505050565b6000546001600160a01b03163314806110fd57503360009081526030602052604090205460ff1615156001145b6111195760405162461bcd60e51b8152600401610ca790615a07565b60005b82811015610df857600084848381811061113857611138615a3e565b905060200201602081019061114d919061566a565b6001600160a01b0316146111b057816032600086868581811061117257611172615a3e565b9050602002016020810190611187919061566a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b806111ba81615a6a565b91505061111c565b6000546001600160a01b03163314806111ef57503360009081526030602052604090205460ff1615156001145b61120b5760405162461bcd60e51b8152600401610ca790615a07565b82811461127f5760405162461bcd60e51b815260206004820152603c60248201527f746f74616c4e756d626572206f66206164647265737320616e6420746f74616c60448201527b09ceadac4cae440decc40ecc2d8eaca40c8decae6dce840dac2e8c6d60231b6064820152608401610ca7565b60005b8381101561142757600085858381811061129e5761129e615a3e565b90506020020160208101906112b3919061566a565b905060008484848181106112c9576112c9615a3e565b9050602002013590506000886001600160a01b03166370a08231336040518263ffffffff1660e01b815260040161130091906156de565b602060405180830381865afa15801561131d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134191906159ee565b90508181101561139d5760405162461bcd60e51b815260206004820152602160248201527f696e73756666696369656e742062616c616e63657320666f722061697264726f6044820152600760fc1b6064820152608401610ca7565b6040516323b872dd60e01b81526001600160a01b038a16906323b872dd906113cd90339087908790600401615d0c565b6020604051808303816000875af11580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190615d30565b50505050808061141f90615a6a565b915050611282565b505050505050565b6000546001600160a01b031633148061145c57503360009081526030602052604090205460ff1615156001145b6114785760405162461bcd60e51b8152600401610ca790615a07565b6001600160a01b03821661148b57600080fd5b6040516370a0823160e01b81526000906001600160a01b038516906370a08231906114ba9030906004016156de565b602060405180830381865afa1580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb91906159ee565b90508181101561151d5760405162461bcd60e51b8152600401610ca790615d4d565b60405163a9059cbb60e01b81526001600160a01b0385169063a9059cbb9061154b9086908690600401615d7b565b6020604051808303816000875af115801561156a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158e9190615d30565b5050505050565b603f805460ff60a81b1916600160a81b179055601e54601d54601c54600092916115be91615d94565b6115c89190615d94565b90508015611c0257306000908152602a602052604090205481111561163d5760405162461bcd60e51b815260206004820152602560248201527f696e73756666696369656e7420636f6e74726163742062616c616e636520746f604482015264020737761760dc1b6064820152608401610ca7565b600080600080600061165c601d54601c546132ed90919063ffffffff16565b60025490915060ff16151560010361167f57601e5461167c9082906132ed565b90505b604080516002808252606082018352303192600092919060208301908036833701905050905030816000815181106116b9576116b9615a3e565b6001600160a01b0392831660209182029290920101526004548251911690829060019081106116ea576116ea615a3e565b6001600160a01b039283166020918202929092010152603d5460405163791ac94760e01b815291169063791ac94790611730908690600090869030904290600401615da7565b600060405180830381600087803b15801561174a57600080fd5b505af115801561175e573d6000803e3d6000fd5b5060009250611771915050303184613291565b601d54909150156117d75761179584610ee7601d54846131b090919063ffffffff16565b6039546040519198506001600160a01b03169088156108fc029089906000818181858888f193505050501580156117d0573d6000803e3d6000fd5b506000601d555b60025460ff161515600103611802576117ff84610ee7601e54846131b090919063ffffffff16565b97505b600088118015611819575060025460ff1615156001145b1561193357603a5460025460115460405163b3950de160e01b81526201000090920460ff161515600483015260248201526001600160a01b039091169063b3950de1908a9060440160206040518083038185885af115801561187f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118a491906159ee565b94506000603a60009054906101000a90046001600160a01b03166001600160a01b031663343eef8a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f91906159ee565b905061192c816002613b61565b506000601e555b600085118015611950575060025462010000900460ff1615156001145b15611b685760085460405163140e25ad60e31b8152600481018790526001600160a01b039091169063a0712d68906024016020604051808303816000875af11580156119a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c49190615d30565b50600554603c5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926119fb929116908990600401615d7b565b6020604051808303816000875af1158015611a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3e9190615d30565b50600854603c5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611a75929116908990600401615d7b565b6020604051808303816000875af1158015611a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab89190615d30565b50603d546005546008546000805460405162e8e33760e81b81526001600160a01b0394851660048201529284166024840152604483018a9052606483018a90526084830182905260a4830191909152821660c48201524260e482015291169063e8e3370090610104016060604051808303816000875af1158015611b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b649190615e18565b5050505b611b7c611b758989615d94565b8290613291565b6000601c8190556038546040519298506001600160a01b03169188156108fc0291899190818181858888f19350505050158015611bbd573d6000803e3d6000fd5b507fc98bb4c53c3b1f5514c4553d74d38d2d82c1b86feba8be3ac18930f2e020675b888888604051611bf193929190615687565b60405180910390a150505050505050505b50603f805460ff60a81b19169055565b6000546001600160a01b0316331480611c3f57503360009081526030602052604090205460ff1615156001145b611c5b5760405162461bcd60e51b8152600401610ca790615a07565b6001811515148015611c6f57506000601e54115b8015611c9b5750611c9b601d54601c54601e54611c8c9190615d94565b611c969190615d94565b61407d565b15611ca857611ca8611595565b5060028054921515600160201b0264ffff0000001994151562010000029490941664ffffff0000199515156101000261ff00199715159790971661ffff199094169390931795909517939093161717909155600355565b6000546001600160a01b0316331480611d2c57503360009081526030602052604090205460ff1615156001145b611d485760405162461bcd60e51b8152600401610ca790615a07565b60005b82811015610df8576000848483818110611d6757611d67615a3e565b9050602002016020810190611d7c919061566a565b6001600160a01b031603611da25760405162461bcd60e51b8152600401610ca790615e46565b81602e6000868685818110611db957611db9615a3e565b9050602002016020810190611dce919061566a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611e0081615a6a565b915050611d4b565b6000546001600160a01b0316331480611e3557503360009081526030602052604090205460ff1615156001145b611e515760405162461bcd60e51b8152600401610ca790615a07565b602491909155602555565b6000546001600160a01b0316331480611e8957503360009081526030602052604090205460ff1615156001145b611ea55760405162461bcd60e51b8152600401610ca790615a07565b60c8611ebd611eb486846132ed565b601354906132ed565b1115611ec857600080fd5b60c8611ed7611eb486856132ed565b1115611ee257600080fd5b60c8611ef1611eb485856132ed565b1115611efc57600080fd5b60c8611f0b611eb485846132ed565b1115611f1657600080fd5b601755601992909255601891909155601a55565b6000546001600160a01b0316331480611f5757503360009081526030602052604090205460ff1615156001145b611f735760405162461bcd60e51b8152600401610ca790615a07565b60005b82811015610df8576000848483818110611f9257611f92615a3e565b9050602002016020810190611fa7919061566a565b6001600160a01b031603611fef5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964204164647265737360881b6044820152606401610ca7565b81602c600086868581811061200657612006615a3e565b905060200201602081019061201b919061566a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061204d81615a6a565b915050611f76565b336000908152602f602052604090205460ff1615156001148061208c57503360009081526030602052604090205460ff1615156001145b806120a157506000546001600160a01b031633145b6120aa57600080fd5b601f54306000908152602a60205260409020541180156120cd5750600354600314155b6120d657600080fd5b6120de61334a565b565b6000546001600160a01b031633148061210d57503360009081526030602052604090205460ff1615156001145b6121295760405162461bcd60e51b8152600401610ca790615a07565b6001600160a01b0384161561215457600680546001600160a01b0319166001600160a01b0386161790555b6001600160a01b0383161561218457600880546001600160a01b0319166001600160a01b03851617905560118190555b6001600160a01b03821615610df857603a54604051633972f57160e11b81526001600160a01b03909116906372e5eae2906121c39085906004016156de565b600060405180830381600087803b1580156121dd57600080fd5b505af19250505080156121ee575060015b50600580546001600160a01b0384166001600160a01b031990911617905550505050565b6000546001600160a01b031633148061223f57503360009081526030602052604090205460ff1615156001145b61225b5760405162461bcd60e51b8152600401610ca790615a07565b8583146122a45760405162461bcd60e51b8152602060048201526017602482015276696e76616c69642056657374696e6720706572696f647360481b6044820152606401610ca7565b8581146122ed5760405162461bcd60e51b8152602060048201526017602482015276696e76616c69642056657374696e6720616d6f756e747360481b6044820152606401610ca7565b60005b868110156124d057600088888381811061230c5761230c615a3e565b9050602002016020810190612321919061566a565b6001600160a01b0316146124be57851515600103612468576001602d60008a8a8581811061235157612351615a3e565b9050602002016020810190612366919061566a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558484828181106123a0576123a0615a3e565b90506020020135602d60008a8a858181106123bd576123bd615a3e565b90506020020160208101906123d2919061566a565b6001600160a01b0316815260208101919091526040016000206001015561241b600a84848481811061240657612406615a3e565b905060200201356131b090919063ffffffff16565b602d60008a8a8581811061243157612431615a3e565b9050602002016020810190612446919061566a565b6001600160a01b031681526020810191909152604001600020600201556124be565b6000602d60008a8a8581811061248057612480615a3e565b9050602002016020810190612495919061566a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b806124c881615a6a565b9150506122f0565b5050505050505050565b336000818152602d60205260408120549091908490849060ff16151560011480156125125750603f546001600160a01b038381169116145b156125da576001600160a01b0383166000908152602a60205260409020600201541561258c576001600160a01b0383166000908152602d6020908152604080832060010154602a9092529091206002015461256e904290613291565b101561258c5760405162461bcd60e51b8152600401610ca790615a83565b6001600160a01b0383166000908152602d60205260409020600201546125bb906103e890610ee79084906131b0565b8111156125da5760405162461bcd60e51b8152600401610ca790615af7565b6003541580156125f457506002546301000000900460ff16155b806126165750600354600114801561261657506002546301000000900460ff16155b15612695576001600160a01b0382166000908152602c602052604090205460ff1615156001146126585760405162461bcd60e51b8152600401610ca790615b68565b6001600160a01b0383166000908152602c602052604090205460ff1615156001146126955760405162461bcd60e51b8152600401610ca790615b99565b6126a03387876135a0565b9695505050505050565b6000546001600160a01b03163314806126d757503360009081526030602052604090205460ff1615156001145b6126f35760405162461bcd60e51b8152600401610ca790615a07565b47818110156127145760405162461bcd60e51b8152600401610ca790615d4d565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015610df8573d6000803e3d6000fd5b6000546001600160a01b031633148061277757503360009081526030602052604090205460ff1615156001145b6127935760405162461bcd60e51b8152600401610ca790615a07565b60035415806127a457506003546001145b6127ad57600080fd5b6002805463ff00000019166301000000179055601b55565b6000546001600160a01b03163314806127f257503360009081526030602052604090205460ff1615156001145b61280e5760405162461bcd60e51b8152600401610ca790615a07565b603c80546001600160a01b0383166001600160a01b03199182168117909255603d805490911682179055604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa158015612873573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128979190615e6f565b600480546001600160a01b0319166001600160a01b03928316178155603d546040805163c45a015560e01b81529051919093169263c45a015592818101926020929091908290030181865afa1580156128f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129189190615e6f565b600480546040516364e329cb60e11b81526001600160a01b039384169363c9c653969361294b93909116913091016159d4565b6020604051808303816000875af115801561296a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298e9190615e6f565b603f80546001600160a01b0319166001600160a01b03928316178155603c5482166000908152602e6020526040808220805460ff1990811660019081179092559354909416825290208054909116909117905550565b603a5460405163575c802560e01b81526000916001600160a01b03169063575c802590612a1790859033906004016159d4565b602060405180830381865afa158015612a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5891906159ee565b11612a755760405162461bcd60e51b8152600401610ca790615d4d565b603a54604051632ee920ad60e21b81526001600160a01b039091169063bba482b490612aa790849033906004016159d4565b600060405180830381600087803b158015612ac157600080fd5b505af1925050508015612ad2575060015b505b50565b6000546001600160a01b0316331480612b0457503360009081526030602052604090205460ff1615156001145b612b205760405162461bcd60e51b8152600401610ca790615a07565b801515600103612b8d57603754601490612b3b908490615d94565b1115612b885760405162461bcd60e51b815260206004820152601c60248201527b1b585e081b9d5b58995c881bd98819dd5c991a585b88195e18d9595960221b6044820152606401610ca7565b612bd6565b603754821115612bd65760405162461bcd60e51b81526020600482015260146024820152736e6f206775726469616e20746f2072656d6f766560601b6044820152606401610ca7565b60005b82811015610df8576000848483818110612bf557612bf5615a3e565b9050602002016020810190612c0a919061566a565b6001600160a01b031614612c995781602f6000868685818110612c2f57612c2f615a3e565b9050602002016020810190612c44919061566a565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055811515600114612c8957603754612c84906001613291565b612c97565b603754612c979060016132ed565b505b80612ca381615a6a565b915050612bd9565b6001600160a01b038083166000908152602b60209081526040808320938516835292905220545b92915050565b603f5460009081908190612cf69033906001600160a01b03166140d7565b15612d1857603f54612d159033906001600160a01b0316866000614133565b90505b6000612d248583613291565b336000908152602a6020526040902054909150612d419086613291565b336000818152602a6020526040902091909155612d689030612d638886613291565b6146af565b5060408051600280825260608201835233319260009291906020830190803683370190505090503081600081518110612da357612da3615a3e565b6001600160a01b039283166020918202929092010152600454825191169082906001908110612dd457612dd4615a3e565b6001600160a01b039283166020918202929092010152603d5460405163791ac94760e01b815291169063791ac94790612e1a908690600090869033904290600401615da7565b600060405180830381600087803b158015612e3457600080fd5b505af1158015612e48573d6000803e3d6000fd5b50610fd29250503331905083613291565b600080546001600160a01b0316331480612e8757503360009081526030602052604090205460ff1615156001145b612ea35760405162461bcd60e51b8152600401610ca790615a07565b612eb9612eb26012600a615ce6565b83906131b0565b602055612ed2612ecb6012600a615ce6565b84906131b0565b602181905560205411612f215760405162461bcd60e51b815260206004820152601760248201527613585e081d1e08195e18d95959081b585e15d85b1b195d604a1b6044820152606401610ca7565b50600192915050565b600080546001600160a01b03163314612f555760405162461bcd60e51b8152600401610ca790615bcd565b6001600160a01b038216612f7b5760405162461bcd60e51b8152600401610ca790615e46565b50600080546001600160a01b0319166001600160a01b03831617905560015b919050565b6000546001600160a01b0316331480612fcc57503360009081526030602052604090205460ff1615156001145b612fe85760405162461bcd60e51b8152600401610ca790615a07565b60008284612ff68789615d94565b6130009190615d94565b61300a9190615d94565b905060c861302f6130286017546019546132ed90919063ffffffff16565b83906132ed565b111561303a57600080fd5b60c86130566130286018546019546132ed90919063ffffffff16565b111561306157600080fd5b60c861307d613028601854601a546132ed90919063ffffffff16565b111561308857600080fd5b60c86130a4613028601754601a546132ed90919063ffffffff16565b11156130af57600080fd5b60c881111561310b5760405162461bcd60e51b815260206004820152602260248201527f746f74616c207461782065786365656420746865206d617820746f74616c20746044820152610c2f60f31b6064820152608401610ca7565b8115156001036131625761312086600a6131b0565b60095561312e85600a6131b0565b600a90815561313e9084906131b0565b600b5561314c84600a6131b0565b600c5561315a81600a6131b0565b601255611427565b61316d86600a6131b0565b600d5561317b85600a6131b0565b600e5561318983600a6131b0565b600f5561319784600a6131b0565b6010556131a581600a6131b0565b601355505050505050565b6000826000036131c257506000612cd2565b60006131ce8385615cf5565b9050826131db8583615e8c565b146132325760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ca7565b9392505050565b60008082116132875760405162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b6044820152606401610ca7565b6132328284615e8c565b6000828211156132e35760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610ca7565b6132328284615eae565b6000806132fa8385615d94565b9050838110156132325760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b6044820152606401610ca7565b60008060006133656002601f5461323990919063ffffffff16565b601f549092506133759083613291565b603b546001600160a01b03166000908152602a602052604090205490915061339d90826132ed565b603b546001600160a01b03166000908152602a60205260408082209290925530815220546133cb9082613291565b306000818152602a602052604080822093909355603a5492516370d64f1760e01b815290926001600160a01b0316916370d64f179161340f91908690600401615d7b565b6020604051808303816000875af115801561342e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345291906159ee565b603d5460405163f305d71960e01b81523060048201819052602482018790526000604483018190526064830181905260848301919091524260a48301529293506001600160a01b039091169063f305d71990849060c40160606040518083038185885af11580156134c7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134ec9190615e18565b336000908152602f602052604090205490935060ff161515600103915061158e90505761352a6103e8610ee7601554846131b090919063ffffffff16565b60065460405163a9059cbb60e01b81529196506001600160a01b03169063a9059cbb9061355d9033908990600401615d7b565b6020604051808303816000875af115801561357c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114279190615d30565b60003330146136a457603a5460055460405163575c802560e01b81526000926001600160a01b039081169263575c8025926135e3929091169033906004016159d4565b602060405180830381865afa158015613600573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061362491906159ee565b905080156136a2573360008181526035602052604080822060010191909155603a546005549151632ee920ad60e21b81526001600160a01b039182169363bba482b4936136759316916004016159d4565b600060405180830381600087803b15801561368f57600080fd5b505af19250505080156136a0575060015b505b505b603f546001600160a01b038581169116148015906136d05750603f546001600160a01b03848116911614155b601f54306000908152602a60205260409020541180156136f35750600354600314155b801561370157506001811515145b1561370e5761370e61334a565b6001600160a01b0385166137555760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b6044820152606401610ca7565b6001600160a01b03841661379e5760405162461bcd60e51b815260206004820152601060248201526f34b73b30b634b2103932b1b2b4bb32b960811b6044820152606401610ca7565b6001600160a01b03851660009081526032602052604090205460ff166137c9576021548311156137cc565b60015b61380f5760405162461bcd60e51b815260206004820152601460248201527313585e08151e08105b5bdd5b9d08115e18d9595960621b6044820152606401610ca7565b6001600160a01b0385166000908152602a602052604090205483111561386d5760405162461bcd60e51b81526020600482015260136024820152721a5b9cdd59999a58da595b9d08185b5bdd5b9d606a1b6044820152606401610ca7565b603f5460009081906001600160a01b0388811691161480159061389e5750603f546001600160a01b03878116911614155b6001600160a01b038089166000908152602b60209081526040808320603c5490941683529290522054909150158015906138e157506001600160a01b0387163014155b15613943576001600160a01b038088166000908152602b60209081526040808320603c54909416835292905220546139199086613291565b6001600160a01b038089166000908152602b60209081526040808320603c54909416835292905220555b6001600160a01b0387166000908152602a60205260409020546139669086613291565b6001600160a01b0388166000908152602a602052604081209190915581801561399d5750600254600160201b900460ff1615156001145b80156139ac5750600354600314155b80156139d157506001600160a01b0388166000908152602e602052604090205460ff16155b80156139ed5750601f54306000908152602a6020526040902054105b905060006139fb89896140d7565b8015613a0a5750600354600314155b8015613a14575082155b90508080613a1f5750815b15613aa957613a3089898986614133565b603f549094506001600160a01b0389811691161480613a4c5750825b15613aa9576000601e54601d54601c54613a669190615d94565b613a709190615d94565b9050613a7b8161407d565b15613a8857613a88611595565b506001600160a01b0389166000908152602a60205260409020426002909101555b60035460011480613abc57506003546002145b80613ac75750600354155b80613acf5750825b15613ae557613ae38989612d638a88613291565b505b6003546003148015613b045750603f546001600160a01b038a81169116145b15613b2357613b188989612d638a88613291565b50613b23878561486c565b6003546003148015613b425750603f546001600160a01b038981169116145b15613b5257613b52898886614fc0565b50600198975050505050505050565b603f546001600160a01b03166000908152602a6020526040812054600154613b8891613291565b9050600080613ba86103e8610ee7601454886131b090919063ffffffff16565b90506000613bb68683613291565b905060005b603654811015613f295760006031600060368481548110613bde57613bde615a3e565b60009182526020808320909101546001600160a01b0316835282019290925260400181205460ff1615159003613f16576000613c5c87610ee76103e8602a600060368981548110613c3157613c31615a3e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054906131b0565b9050806035600060368681548110613c7657613c76615a3e565b60009182526020808320909101546001600160a01b0316835282019290925260400181209190915560368054613cc3928a92610ee7928992602a9290918a908110613c3157613c31615a3e565b915087600103613de957613d16826035600060368781548110613ce857613ce8615a3e565b60009182526020808320909101546001600160a01b03168352820192909252604001902060020154906132ed565b6035600060368681548110613d2d57613d2d615a3e565b60009182526020808320909101546001600160a01b0316835282019290925260400181206002019190915560368054613da0928592602a9288908110613d7557613d75615a3e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054906132ed565b602a600060368681548110613db757613db7615a3e565b60009182526020808320909101546001600160a01b03168352820192909252604001902055613de686836132ed565b95505b87600203613f1457613e3a826035600060368781548110613e0c57613e0c615a3e565b60009182526020808320909101546001600160a01b03168352820192909252604001902060010154906132ed565b6035600060368681548110613e5157613e51615a3e565b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902060010191909155603a546036805491909216916314b6ca969186908110613ea357613ea3615a3e565b6000918252602090912001546040516001600160e01b031960e084901b168152613edb916001600160a01b0316908690600401615d7b565b600060405180830381600087803b158015613ef557600080fd5b505af1925050508015613f06575060015b50613f1186836132ed565b95505b505b5080613f2181615a6a565b915050613bbb565b506000613f40613f398386613291565b84906132ed565b905085600103613fa15730600090815260356020526040902060020154613f6790826132ed565b30600090815260356020908152604080832060020193909355602a90522054613f9090826132ed565b306000908152602a60205260409020555b856002036140415730600090815260356020526040902060010154613fc690826132ed565b306000818152603560205260409081902060010192909255603a5460055492516301e3366760e01b81526001600160a01b03918216936301e336679361401493909116918690600401615d0c565b600060405180830381600087803b15801561402e57600080fd5b505af192505050801561403f575060015b505b6040518781527fb9d196a585c1a894f648393ec7d52cc59ff6d94191579d073ba32b0a74d7f7a69060200160405180910390a150505050505050565b603f546000906001600160a01b031633148015906140a55750603f54600160a81b900460ff16155b80156140ba5750603f54600160a01b900460ff165b8015612cd2575050306000908152602a6020526040902054101590565b6001600160a01b038083166000818152602e6020526040812054603f54919360ff9091161592911614801561412457506001600160a01b0383166000908152602e602052604090205460ff165b15613232575060009392505050565b60008060008060008060008060008a905060008d905060035460000361418857601654614161908390613239565b985088601c60008282546141759190615d94565b909155506141859050878a6132ed565b96505b6003546002148061419b57506003546003145b1561456157603f546001600160a01b038f8116911614806141b957508a5b156142de576141d96103e8610ee7601254856131b090919063ffffffff16565b600254909950610100900460ff166141f257600061420d565b61420d6103e8610ee7600b54856131b090919063ffffffff16565b60025490985060ff1661422157600061423c565b61423c6103e8610ee7600c54856131b090919063ffffffff16565b95506142596103e8610ee7600a54856131b090919063ffffffff16565b935061427a84614269888b615d94565b6142739190615d94565b8a90613291565b945084601c600082825461428e9190615d94565b9250508190555083601d60008282546142a79190615d94565b9250508190555085601e60008282546142c09190615d94565b909155508690506142d18587615d94565b6142db9190615d94565b96505b603f546001600160a01b038e8116911614801561430457506001600160a01b038e163014155b15614561576143246103e8610ee7601354856131b090919063ffffffff16565b600254909950610100900460ff1661433d576000614358565b6143586103e8610ee7600f54856131b090919063ffffffff16565b60025490985060ff1661436c576000614387565b6143876103e8610ee7601054856131b090919063ffffffff16565b95506143a46103e8610ee7600e54856131b090919063ffffffff16565b935083601d60008282546143b89190615d94565b9250508190555085601e60008282546143d19190615d94565b90915550506022546000908310156143ea576000614405565b6144056103e8610ee7601754866131b090919063ffffffff16565b9050600060235484101561441a576000614435565b6144356103e8610ee7601854876131b090919063ffffffff16565b6024546001600160a01b0385166000908152602a602052604081206001015492935091614463904290613291565b11156144c0576025546001600160a01b0385166000908152602a6020526040902060010154614493904290613291565b11156144a05760006144db565b6144bb6103e8610ee7601a54886131b090919063ffffffff16565b6144db565b6144db6103e8610ee7601954886131b090919063ffffffff16565b905080826144e9858f615d94565b6144f39190615d94565b6144fd9190615d94565b9b5061453481838561450f8b8e615d94565b6145199190615d94565b6145239190615d94565b61452d9190615d94565b8d90613291565b601c5490985061454490896132ed565b601c5561455b6145548d8d613291565b8b906132ed565b99505050505b6002546301000000900460ff16151560011480156145825750600354600214155b1561465d57603f546001600160a01b038f8116911614806145b05750603f546001600160a01b038e81169116145b6145b957600080fd5b6001600160a01b0381166000908152602c602052604090205460ff1615806145fa57506001600160a01b038d166000908152602c602052604090205460ff16155b1561465d5761461a6103e8610ee7601b54856131b090919063ffffffff16565b92508883111561465d576000614630848b613291565b905061463c8a826132ed565b601c54909a5061464c90826132ed565b601c5561465988826132ed565b9750505b60025460ff610100909104161515600114801561467a5750600088115b1561468a5761468a886001613b61565b861561469d5761469b8e30896146af565b505b50969c9b505050505050505050505050565b6001600160a01b0382166000908152602a60205260408120541580156146e35750603f546001600160a01b03848116911614155b80156146f857506001600160a01b0383163014155b1561475a57603680546001600160a01b0385166000818152603360205260408120839055600183018455929092527f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b80180546001600160a01b03191690911790555b6001600160a01b0383166000908152602a602052604090205461477d90836132ed565b6001600160a01b0384166000908152602a602090815260408083209390935560329052205460ff166147ce57602080546001600160a01b0385166000908152602a90925260409091205411156147d1565b60015b6148185760405162461bcd60e51b815260206004820152601860248201527713585e081dd85b1b195d08185b5bdd5b9d08195e18d9595960421b6044820152606401610ca7565b6001600160a01b038084166000818152602a60205260408082204260019182018190559489168084529282902001939093559151909190600080516020615f4e83398151915290610c4c9086815260200190565b6000808080808061487d8888613291565b90506000603e60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148f89190615e6f565b9050600080603e60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015614950573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149749190615ed8565b50603f546001600160a01b039081166000908152602a60205260409020546001600160701b039384169550919092169250903090851603614a7d576000603d60009054906101000a90046001600160a01b03166001600160a01b03166385f8c2598e85876040518463ffffffff1660e01b81526004016149f693929190615687565b602060405180830381865afa158015614a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a3791906159ee565b90506000614a5585610ee7614a4e6012600a615ce6565b87906131b0565b9050614a7481610ee7614a6887866132ed565b6110c16012600a615ce6565b99505050614b3b565b6000603d60009054906101000a90046001600160a01b03166001600160a01b03166385f8c2598e86866040518463ffffffff1660e01b8152600401614ac493929190615687565b602060405180830381865afa158015614ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b0591906159ee565b90506000614b2384610ee7614b1c6012600a615ce6565b88906131b0565b9050614b3681610ee7614a6888866132ed565b995050505b6000602854118015614b4f57506000602754115b15614ba357614b6f6103e8610ee7602854886131b090919063ffffffff16565b96506000614b8e6103e8610ee7602754896131b090919063ffffffff16565b602954909150614b9e90826132ed565b602955505b614bad8888613291565b955060265460295410614be557602654614bc8908790613291565b9550614be160265460295461329190919063ffffffff16565b6029555b80861115614eb5576000614bf98783613291565b90506000601e54601d54601c54614c109190615d94565b614c1a9190615d94565b306000908152602a6020526040902054909150811115614c755760405162461bcd60e51b815260206004820152601660248201527518dbdb9d1c9858dd081a5cc81a5b58985b185b98d95960521b6044820152606401610ca7565b306000908152602a6020526040812054614c8f9083613291565b9050828110614d2f57306000908152602a6020526040902054614cb29084613291565b306000908152602a602052604080822092909255603f546001600160a01b031681522054614ce090846132ed565b603f80546001600160a01b039081166000908152602a602090815260409182902094909455915491518681529116913091600080516020615f4e833981519152910160405180910390a3614ead565b8015614dc857306000908152602a6020526040902054614d4f9082613291565b306000908152602a602052604080822092909255603f546001600160a01b031681522054614d7d90826132ed565b603f80546001600160a01b039081166000908152602a602090815260409182902094909455915491518481529116913091600080516020615f4e833981519152910160405180910390a35b614dd46012600a615ce6565b614de290633b9aca00615cf5565b60015414614ea757614df48382613291565b9c50614e026012600a615ce6565b614e1090633b9aca00615cf5565b600154614e1d908f6132ed565b1115614e5257600154614e4a90614e366012600a615ce6565b614e4490633b9aca00615cf5565b90613291565b60026003559c505b600154614e5f908e6132ed565b600155603f546001600160a01b03166000908152602a6020526040902054614e87908e6132ed565b603f546001600160a01b03166000908152602a6020526040902055614ead565b60026003555b505050614f6b565b614ec9614ec28288613291565b8a906132ed565b603f546001600160a01b03166000908152602a6020526040902054909950614ef1908a613291565b603f546001600160a01b03166000908152602a6020526040808220929092553081522054614f1f908a6132ed565b306000818152602a60205260409081902092909255603f54915190916001600160a01b031690600080516020615f4e83398151915290614f62908d815260200190565b60405180910390a35b6040518a907f9b0cc008a443ad5d27f5ccc0cb8f206f8a51bfd2a7f4a9ac3313b41747f4624790614fa990869086908a908c9088908f908990615f1d565b60405180910390a150505050505050505050505050565b600080808080614fd08787613291565b90506000603e60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015615027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061504b9190615e6f565b9050600080603e60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156150a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150c79190615ed8565b50603f546001600160a01b039081166000908152602a60205260408120546001600160701b03948516965092909316935090919030908616036151bc576000603d60009054906101000a90046001600160a01b03166001600160a01b031663054d50d48e87876040518463ffffffff1660e01b815260040161514b93929190615687565b602060405180830381865afa158015615168573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061518c91906159ee565b90506151a185610ee7614a4e6012600a615ce6565b98506151b489610ee7614a688785613291565b995050615270565b6000603d60009054906101000a90046001600160a01b03166001600160a01b031663054d50d48e86886040518463ffffffff1660e01b815260040161520393929190615687565b602060405180830381865afa158015615220573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061524491906159ee565b905061525984610ee7614b1c6012600a615ce6565b985061526c89610ee7614a688885613291565b9950505b600060285411801561528457506000602754115b156152d8576152a46103e8610ee7602854896131b090919063ffffffff16565b965060006152c36103e8610ee76027548a6131b090919063ffffffff16565b6029549091506152d390826132ed565b602955505b6152e289886132ed565b90506026546029541061531a576026546152fd908290613291565b905061531660265460295461329190919063ffffffff16565b6029555b60006153268383613291565b9050615332828e613291565b603f546001600160a01b03166000908152602a602052604090205561535787826132ed565b9a50603e60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156153a957600080fd5b505af11580156153bd573d6000803e3d6000fd5b5050603f546001600160a01b03166000908152602a6020526040902084905550508a1561544a57306000908152602a60205260409020546153fe908c6132ed565b306000818152602a60205260409081902092909255603f54915190916001600160a01b031690600080516020615f4e83398151915290615441908f815260200190565b60405180910390a35b60008b9050603f60009054906101000a90046001600160a01b03166001600160a01b03168f6001600160a01b0316600080516020615f4e8339815191528a60405161549791815260200190565b60405180910390a37f9b0cc008a443ad5d27f5ccc0cb8f206f8a51bfd2a7f4a9ac3313b41747f4624786868a86888e876040516154da9796959493929190615f1d565b60405180910390a1505050505050505050505050505050565b600060208083528351808285015260005b8181101561552057858101830151858201604001528201615504565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612ad457600080fd5b6000806040838503121561556957600080fd5b823561557481615541565b946020939093013593505050565b6000806040838503121561559557600080fd5b82356155a081615541565b915060208301356155b081615541565b809150509250929050565b60008083601f8401126155cd57600080fd5b5081356001600160401b038111156155e457600080fd5b6020830191508360208260051b85010111156155ff57600080fd5b9250929050565b8015158114612ad457600080fd5b60008060006040848603121561562957600080fd5b83356001600160401b0381111561563f57600080fd5b61564b868287016155bb565b909450925050602084013561565f81615606565b809150509250925092565b60006020828403121561567c57600080fd5b813561323281615541565b9283526020830191909152604082015260600190565b6000806000606084860312156156b257600080fd5b83356156bd81615541565b925060208401356156cd81615541565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b6000806040838503121561570557600080fd5b823561571081615541565b915060208301356155b081615606565b6000806000806080858703121561573657600080fd5b5050823594602084013594506040840135936060013592509050565b60008060008060006060868803121561576a57600080fd5b853561577581615541565b945060208601356001600160401b038082111561579157600080fd5b61579d89838a016155bb565b909650945060408801359150808211156157b657600080fd5b506157c3888289016155bb565b969995985093965092949392505050565b60008060008060008060c087890312156157ed57600080fd5b86356157f881615606565b9550602087013561580881615606565b9450604087013561581881615606565b9350606087013561582881615606565b92506080870135915060a087013561583f81615606565b809150509295509295509295565b6000806040838503121561586057600080fd5b50508035926020909101359150565b6000806000806080858703121561588557600080fd5b843561589081615541565b935060208501356158a081615541565b925060408501356158b081615541565b9396929550929360600135925050565b60008060008060008060006080888a0312156158db57600080fd5b87356001600160401b03808211156158f257600080fd5b6158fe8b838c016155bb565b909950975060208a0135915061591382615606565b9095506040890135908082111561592957600080fd5b6159358b838c016155bb565b909650945060608a013591508082111561594e57600080fd5b5061595b8a828b016155bb565b989b979a50959850939692959293505050565b60006020828403121561598057600080fd5b5035919050565b600080600080600060a0868803121561599f57600080fd5b8535945060208601359350604086013592506060860135915060808601356159c681615606565b809150509295509295909350565b6001600160a01b0392831681529116602082015260400190565b600060208284031215615a0057600080fd5b5051919050565b6020808252601d908201527f63616c6c65722069736e74206775726469616e206e6f72204f776e6572000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201615a7c57615a7c615a54565b5060010190565b6020808252604e908201527f73656e64657220697320616464656420746f2076657374696e67206d6f64652060408201527f2c2063616e74207472616e73666572206265666f72652074686520706572696f60608201526d19081a5cc818dbdb5c1b195d195960921b608082015260a00190565b6020808252604b908201527f73656e64657220697320616464656420746f2076657374696e67206d6f64652060408201527f2c2063616e742073656c6c206d6f7265207468616e20313025206f662062616c60608201526a185b98d948185b5bdd5b9d60aa1b608082015260a00190565b6020808252601790820152760dedcd8f240eed0d2e8cad8d2e6e8cac840c6c2dc40e8f604b1b604082015260600190565b6020808252601a90820152790dedcd8f240eed0d2e8cad8d2e6e840dadec8ca40c6c2dc40e8f60331b604082015260600190565b6020808252818101527f6f6e6c79206f776e65722063616e2063616c6c207468652066756e6374696f6e604082015260600190565b600181815b80851115615c3d578160001904821115615c2357615c23615a54565b80851615615c3057918102915b93841c9390800290615c07565b509250929050565b600082615c5457506001612cd2565b81615c6157506000612cd2565b8160018114615c775760028114615c8157615c9d565b6001915050612cd2565b60ff841115615c9257615c92615a54565b50506001821b612cd2565b5060208310610133831016604e8410600b8410161715615cc0575081810a612cd2565b615cca8383615c02565b8060001904821115615cde57615cde615a54565b029392505050565b600061323260ff841683615c45565b8082028115828204841417612cd257612cd2615a54565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215615d4257600080fd5b815161323281615606565b602080825260149082015273696e73756666696369656e742062616c616e636560601b604082015260600190565b6001600160a01b03929092168252602082015260400190565b80820180821115612cd257612cd2615a54565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015615df75784516001600160a01b031683529383019391830191600101615dd2565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215615e2d57600080fd5b8351925060208401519150604084015190509250925092565b6020808252600f908201526e696e76616c6964206164647265737360881b604082015260600190565b600060208284031215615e8157600080fd5b815161323281615541565b600082615ea957634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115612cd257612cd2615a54565b80516001600160701b0381168114612f9a57600080fd5b600080600060608486031215615eed57600080fd5b615ef684615ec1565b9250615f0460208501615ec1565b9150604084015163ffffffff8116811461565f57600080fd5b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e0019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203d127d3585a15a193bc28374e307ac312f4f47575bf9aaae793227aa7ab397a564736f6c6343000811003360806040523480156200001157600080fd5b5060405162001208380380620012088339810160408190526200003491620001c3565b6001600160a01b038316620000905760405162461bcd60e51b815260206004820152601660248201527f696e76616c696420726f7574657220616464726573730000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038216620000e85760405162461bcd60e51b815260206004820152601860248201527f696e76616c696420706567546f6b656e20416464726573730000000000000000604482015260640162000087565b6001600160a01b038116620001405760405162461bcd60e51b815260206004820152601a60248201527f696e76616c6964206e6174697665436f696e2061646472657373000000000000604482015260640162000087565b600380546001600160a01b039485166001600160a01b03199182168117909255600680548216909217909155600180549385169382168417905560048054821690931790925560028054919093169082161790915560008054909116331790556200020d565b80516001600160a01b0381168114620001be57600080fd5b919050565b600080600060608486031215620001d957600080fd5b620001e484620001a6565b9250620001f460208501620001a6565b91506200020460408501620001a6565b90509250925092565b610feb806200021d6000396000f3fe6080604052600436106100b15760003560e01c806301e33667146100bd57806314b6ca96146100df578063167b78cd146100ff57806330188ee814610135578063343eef8a146101595780634d5c5cef1461016e578063575c80251461018357806370d64f17146101a357806372e5eae2146101c357806390a889b7146101e3578063b3950de114610203578063bba482b414610216578063e6c6b0f614610236578063f675ebdd1461024c57600080fd5b366100b857005b600080fd5b3480156100c957600080fd5b506100dd6100d8366004610d2f565b610262565b005b3480156100eb57600080fd5b506100dd6100fa366004610d6b565b610323565b34801561010b57600080fd5b5060025461011f906001600160a01b031681565b60405161012c9190610d95565b60405180910390f35b34801561014157600080fd5b5061014b60095481565b60405190815260200161012c565b34801561016557600080fd5b5061014b6103e4565b34801561017a57600080fd5b5061014b61040e565b34801561018f57600080fd5b5061014b61019e366004610da9565b610481565b3480156101af57600080fd5b5061014b6101be366004610d6b565b6104ae565b3480156101cf57600080fd5b506100dd6101de366004610ddc565b610656565b3480156101ef57600080fd5b5060015461011f906001600160a01b031681565b61014b610211366004610e08565b6106f4565b34801561022257600080fd5b506100dd610231366004610da9565b6109e9565b34801561024257600080fd5b5061014b60085481565b34801561025857600080fd5b5061014b600a5481565b6000546001600160a01b0316331461027957600080fd5b6001600160a01b03821661028c57600080fd5b6009546102999082610b79565b600955600a546102a99082610bdd565b600a5560405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906102da9085908590600401610e26565b6020604051808303816000875af11580156102f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031d9190610e3f565b50505050565b6000546001600160a01b0316331461033a57600080fd5b6001546001600160a01b0390811660009081526007602090815260408083209386168352929052205461036d9082610b79565b6001546001600160a01b03908116600090815260076020908152604080832093871683529290522055600a546103a39082610b79565b600a556040517fd9d52af7867c8282cb7d91b0c2868ffa9977a15158e1c3221ef446c837cb4be7906103d89084908490610e26565b60405180910390a15050565b6000610409600a54610403600954600854610bdd90919063ffffffff16565b90610bdd565b905090565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a082319161044091309101610d95565b602060405180830381865afa15801561045d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104099190610e5c565b6001600160a01b038083166000908152600760209081526040808320938516835292905220545b92915050565b600080546001600160a01b031633146104c657600080fd5b60035460405163095ea7b360e01b81526001600160a01b038581169263095ea7b3926104fa92909116908690600401610e26565b6020604051808303816000875af1158015610519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053d9190610e3f565b50600080546040805160028082526060820183526001600160a01b039093163193929091602083019080368337019050509050848160008151811061058457610584610e75565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106105b5576105b5610e75565b6001600160a01b0392831660209182029290920101526006546000805460405163791ac94760e01b81529284169363791ac94793610600938a93909288929116904290600401610ecf565b600060405180830381600087803b15801561061a57600080fd5b505af115801561062e573d6000803e3d6000fd5b50506000805490925061064c91506001600160a01b03163184610bdd565b9695505050505050565b6000546001600160a01b0316331461066d57600080fd5b6001600160a01b0381166106c85760405162461bcd60e51b815260206004820181905260248201527f696e76616c696420207072696e7465722061646469696e67206164647265737360448201526064015b60405180910390fd5b600180546001600160a01b039092166001600160a01b0319928316811790915560048054909216179055565b600080546001600160a01b0316331461070c57600080fd5b600480546040516370a0823160e01b815260009283926001600160a01b0316916370a082319161073e91309101610d95565b602060405180830381865afa15801561075b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077f9190610e5c565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b0316918391506000906107c5576107c5610e75565b6001600160a01b03928316602091820292909201015260018054835192169183919081106107f5576107f5610e75565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de9590349061083b90600090869030904290600401610f0b565b6000604051808303818588803b15801561085457600080fd5b505af1158015610868573d6000803e3d6000fd5b5050600480546040516370a0823160e01b8152600095508794506001600160a01b0390911692506370a08231916108a191309101610d95565b602060405180830381865afa1580156108be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e29190610e5c565b6108ec9190610f56565b90507ffd518100ba709c72e02205703a0c599e318336c967e5d254d16754b221acd1818160405161091f91815260200190565b60405180910390a18615156001036109c5576109476103e86109418389610c39565b90610cbb565b6004805460005460405163a9059cbb60e01b81529397506001600160a01b039182169363a9059cbb936109809390921691899101610e26565b6020604051808303816000875af115801561099f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c39190610e3f565b505b6109db6109d28286610bdd565b60085490610b79565b600855509195945050505050565b6000546001600160a01b03163314610a0057600080fd5b6001600160a01b03808316600090815260076020908152604080832093851683529290522054610a6a5760405162461bcd60e51b8152602060048201526015602482015274696e737566666963696e65742062616c616e63657360581b60448201526064016106bf565b6001600160a01b03828116600090815260076020908152604080832093851683529290529081208054919055600954610aa39082610b79565b600955600a54610ab39082610bdd565b600a556004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91610ae7918691869101610e26565b6020604051808303816000875af1158015610b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2a9190610e3f565b50604080513081526001600160a01b03841660208201529081018290527fed796ee78ff544a644a61ebe44847a2df6de9bd938486286253b8a0f9866620a9060600160405180910390a1505050565b600080610b868385610f69565b905083811015610bd65760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b60448201526064016106bf565b9392505050565b600082821115610c2f5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060448201526064016106bf565b610bd68284610f56565b600082600003610c4b575060006104a8565b6000610c578385610f7c565b905082610c648583610f93565b14610bd65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106bf565b6000808211610d095760405162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b60448201526064016106bf565b610bd68284610f93565b80356001600160a01b0381168114610d2a57600080fd5b919050565b600080600060608486031215610d4457600080fd5b610d4d84610d13565b9250610d5b60208501610d13565b9150604084013590509250925092565b60008060408385031215610d7e57600080fd5b610d8783610d13565b946020939093013593505050565b6001600160a01b0391909116815260200190565b60008060408385031215610dbc57600080fd5b610dc583610d13565b9150610dd360208401610d13565b90509250929050565b600060208284031215610dee57600080fd5b610bd682610d13565b8015158114610e0557600080fd5b50565b60008060408385031215610e1b57600080fd5b8235610d8781610df7565b6001600160a01b03929092168252602082015260400190565b600060208284031215610e5157600080fd5b8151610bd681610df7565b600060208284031215610e6e57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015610ec45781516001600160a01b031687529582019590820190600101610e9f565b509495945050505050565b85815284602082015260a060408201526000610eee60a0830186610e8b565b6001600160a01b0394909416606083015250608001529392505050565b848152608060208201526000610f246080830186610e8b565b6001600160a01b03949094166040830152506060015292915050565b634e487b7160e01b600052601160045260246000fd5b818103818111156104a8576104a8610f40565b808201808211156104a8576104a8610f40565b80820281158282048414176104a8576104a8610f40565b600082610fb057634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212205468fbc48cf8fbe5eabc749bbbc7ae7ba922a07a8923b6b3b6d1b871a4f07d3b64736f6c6343000811003300000000000000000000000031f63a33141ffee63d4b26755430a390acdd8a4d
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000031f63a33141ffee63d4b26755430a390acdd8a4d
-----Decoded View---------------
Arg [0] : _routerAddress (address): 0x31f63a33141ffee63d4b26755430a390acdd8a4d
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000031f63a33141ffee63d4b26755430a390acdd8a4d
Deployed ByteCode Sourcemap
12267:41201:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20156:94;;;;;;;;;;-1:-1:-1;20237:5:0;;;;;;;;;;;;-1:-1:-1;;;20237:5:0;;;;20156:94;;;;;;;:::i;:::-;;;;;;;;20628:274;;;;;;;;;;-1:-1:-1;20628:274:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;20628:274:0;1023:187:1;13017:38:0;;;;;;;;;;-1:-1:-1;13017:38:0;;;;;;;;;;;51128:304;;;;;;;;;;-1:-1:-1;51128:304:0;;;;;:::i;:::-;;:::i;:::-;;12697:54;;;;;;;;;;;;;;;;;;;1754:25:1;;;1742:2;1727:18;12697:54:0;1608:177:1;45798:291:0;;;;;;;;;;-1:-1:-1;45798:291:0;;;;;:::i;:::-;;:::i;16879:39::-;;;;;;;;;;-1:-1:-1;16879:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21315:218::-;;;;;;;;;;-1:-1:-1;21315:218:0;;;;;:::i;:::-;;:::i;13137:20::-;;;;;;;;;;;;;;;;20364:94;;;;;;;;;;-1:-1:-1;20364:94:0;;12604:2;4035:36:1;;4023:2;4008:18;20364:94:0;3893:184:1;17322:28:0;;;;;;;;;;-1:-1:-1;17322:28:0;;;;-1:-1:-1;;;;;17322:28:0;;;;;;;;;;:::i;44757:154::-;;;;;;;;;;-1:-1:-1;44757:154:0;;;;;:::i;:::-;;:::i;16372:45::-;;;;;;;;;;-1:-1:-1;16372:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16484:43;;;;;;;;;;-1:-1:-1;16484:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;43152:362;;;;;;;;;;-1:-1:-1;43152:362:0;;;;;:::i;:::-;;:::i;15024:76::-;;;;;;;;;;;;;;;;17403:23;;;;;;;;;;-1:-1:-1;17403:23:0;;;;-1:-1:-1;;;;;17403:23:0;;;45521:269;;;;;;;;;;-1:-1:-1;45521:269:0;;;;;:::i;:::-;;:::i;16534:41::-;;;;;;;;;;-1:-1:-1;16534:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13062:31;;;;;;;;;;-1:-1:-1;13062:31:0;;;;;;;;;;;52789:672;;;;;;;;;;-1:-1:-1;52789:672:0;;;;;:::i;:::-;;:::i;51897:338::-;;;;;;;;;;-1:-1:-1;51897:338:0;;;;;:::i;:::-;;:::i;30822:2755::-;;;;;;;;;;;;;:::i;47109:730::-;;;;;;;;;;-1:-1:-1;47109:730:0;;;;;:::i;:::-;;:::i;20468:144::-;;;;;;;;;;-1:-1:-1;20468:144:0;;;;;:::i;:::-;-1:-1:-1;;;;;20578:18:0;20551:7;20578:18;;;:9;:18;;;;;:26;;20468:144;42839:305;;;;;;;;;;-1:-1:-1;42839:305:0;;;;;:::i;:::-;;:::i;46357:230::-;;;;;;;;;;-1:-1:-1;46357:230:0;;;;;:::i;:::-;;:::i;14878:39::-;;;;;;;;;;;;;;;;16679:43;;;;;;;;;;-1:-1:-1;16679:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13100:30;;;;;;;;;;-1:-1:-1;13100:30:0;;;;-1:-1:-1;;;13100:30:0;;;;;;50106:642;;;;;;;;;;-1:-1:-1;50106:642:0;;;;;:::i;:::-;;:::i;43526:286::-;;;;;;;;;;-1:-1:-1;43526:286:0;;;;;:::i;:::-;;:::i;34689:252::-;;;;;;;;;;;;;:::i;16424:53::-;;;;;;;;;;-1:-1:-1;16424:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7311:14:1;;7304:22;7286:41;;7358:2;7343:18;;7336:34;;;;7386:18;;;7379:34;7274:2;7259:18;16424:53:0;7090:329:1;14039:88:0;;;;;;;;;;;;;;;;15751:26;;;;;;;;;;;;;;;;20258:98;;;;;;;;;;-1:-1:-1;20341:7:0;;;;;;;;;;;;-1:-1:-1;;;20341:7:0;;;;20258:98;;52243:536;;;;;;;;;;-1:-1:-1;52243:536:0;;;;;:::i;:::-;;:::i;43820:929::-;;;;;;;;;;-1:-1:-1;43820:929:0;;;;;:::i;:::-;;:::i;21090:207::-;;;;;;;;;;-1:-1:-1;21090:207:0;;;;;:::i;:::-;;:::i;12975:35::-;;;;;;;;;;-1:-1:-1;12975:35:0;;;;;;;;;;;51656:233;;;;;;;;;;-1:-1:-1;51656:233:0;;;;;:::i;:::-;;:::i;12397:20::-;;;;;;;;;;-1:-1:-1;12397:20:0;;;;-1:-1:-1;;;;;12397:20:0;;;46927:174;;;;;;;;;;-1:-1:-1;46927:174:0;;;;;:::i;:::-;;:::i;50762:356::-;;;;;;;;;;-1:-1:-1;50762:356:0;;;;;:::i;:::-;;:::i;13440:23::-;;;;;;;;;;-1:-1:-1;13440:23:0;;;;-1:-1:-1;;;;;13440:23:0;;;12937:31;;;;;;;;;;-1:-1:-1;12937:31:0;;;;;;;;46104:238;;;;;;;;;;-1:-1:-1;46104:238:0;;;;;:::i;:::-;;:::i;44919:590::-;;;;;;;;;;-1:-1:-1;44919:590:0;;;;;:::i;:::-;;:::i;20910:172::-;;;;;;;;;;-1:-1:-1;20910:172:0;;;;;:::i;:::-;;:::i;49163:935::-;;;;;;;;;;-1:-1:-1;49163:935:0;;;;;:::i;:::-;;:::i;46595:322::-;;;;;;;;;;-1:-1:-1;46595:322:0;;;;;:::i;:::-;;:::i;17259:29::-;;;;;;;;;;-1:-1:-1;17259:29:0;;;;-1:-1:-1;;;;;17259:29:0;;;51440:198;;;;;;;;;;-1:-1:-1;51440:198:0;;;;;:::i;:::-;;:::i;16582:42::-;;;;;;;;;;-1:-1:-1;16582:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13290:70;;;;;;;;;;-1:-1:-1;13290:70:0;;;;-1:-1:-1;;;;;13290:70:0;;;14134:93;;;;;;;;;;;;;;;;47849:1294;;;;;;;;;;-1:-1:-1;47849:1294:0;;;;;:::i;:::-;;:::i;20628:274::-;20761:4;18786:10;18808:4;18786:27;18782:329;;18844:7;;18867:10;;18844:46;;-1:-1:-1;;;18844:46:0;;18830:11;;-1:-1:-1;;;;;18844:7:0;;;;:22;;:46;;18867:10;;;;18879;;18844:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18830:60;-1:-1:-1;18910:10:0;;18905:195;;18948:10;18979:1;18941:18;;;:6;:18;;;;;;:35;;:39;;;;19003:7;;19032:10;;19003:52;;-1:-1:-1;;;19003:52:0;;-1:-1:-1;;;;;19003:7:0;;;;:28;;:52;;19032:10;;19003:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18999:68;;18815:296;18782:329;19221:17:::1;::::0;19204:4:::1;19186:24;::::0;;;:9:::1;:24;::::0;;;;:32;20746:4:::1;::::0;-1:-1:-1;19186:65:0;::::1;;;;19242:4;;19250:1;19242:9;;19186:65;:87;;;;-1:-1:-1::0;19269:4:0::1;19255:18:::0;::::1;;;19186:87;19183:129;;;19289:11;:9;:11::i;:::-;20790:10:::2;20778:23;::::0;;;:11:::2;:23;::::0;;;;;;;-1:-1:-1;;;;;20778:32:0;::::2;::::0;;;;;;;;;;:41;;;20835:37;1754:25:1;;;20778:32:0;;20790:10;20835:37:::2;::::0;1727:18:1;20835:37:0::2;;;;;;;;-1:-1:-1::0;20890:4:0::2;::::0;20628:274;-1:-1:-1;;;20628:274:0:o;51128:304::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;51251:32:0;::::1;::::0;::::1;::::0;:69:::1;;-1:-1:-1::0;;;;;;51287:33:0;::::1;::::0;::::1;51251:69;51243:78;;;::::0;::::1;;51332:20;:41:::0;;-1:-1:-1;;;;;51332:41:0;;::::1;-1:-1:-1::0;;;;;;51332:41:0;;::::1;;::::0;;;51384:18:::1;:40:::0;;;;;::::1;::::0;::::1;;::::0;;51128:304::o;45798:291::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;45908:6:::1;45904:177;45921:23:::0;;::::1;45904:177;;;45996:1;45969:12:::0;;45982:1;45969:15;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45969:29:0::1;;45966:104;;46048:6;46013:15;:32;46029:12;;46042:1;46029:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46013:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;46013:32:0;:41;;-1:-1:-1;;46013:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45966:104:::1;45947:3:::0;::::1;::::0;::::1;:::i;:::-;;;;45904:177;;;;45798:291:::0;;;:::o;21315:218::-;-1:-1:-1;;;;;17915:22:0;;21474:4;17915:22;;;:14;:22;;;;;:32;21447:4;;21453:2;;21457:6;;17915:32;;:40;;:32;:40;:66;;;;-1:-1:-1;17973:8:0;;-1:-1:-1;;;;;17959:22:0;;;17973:8;;17959:22;17915:66;17912:545;;;-1:-1:-1;;;;;18000:17:0;;;;;;:9;:17;;;;;:28;;;:33;17997:256;;-1:-1:-1;;;;;18115:22:0;;;;;;:14;:22;;;;;;;;:38;;;18082:9;:17;;;;;;:28;;;18060:51;;18061:15;;18060:21;:51::i;:::-;:93;;18052:185;;;;-1:-1:-1;;;18052:185:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18300:22:0;;;;;;:14;:22;;;;;:38;;;18288:77;;13567:4;;18289:50;;:6;;:10;:50::i;:::-;18288:56;;:77::i;:::-;18278:6;:87;;18270:175;;;;-1:-1:-1;;;18270:175:0;;;;;;;:::i;:::-;18471:4;;:9;:25;;;;-1:-1:-1;18485:11:0;;;;;;;18484:12;18471:25;:54;;;;18500:4;;18508:1;18500:9;:25;;;;-1:-1:-1;18514:11:0;;;;;;;18513:12;18500:25;18468:237;;;-1:-1:-1;;;;;18549:25:0;;;;;;:13;:25;;;;;;;;:33;;:25;:33;18541:69;;;;-1:-1:-1;;;18541:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18633:21:0;;;;;;:13;:21;;;;;;;;:29;;:21;:29;18625:68;;;;-1:-1:-1;;;18625:68:0;;;;;;;:::i;:::-;21498:27:::1;21508:4;21514:2;21518:6;21498:9;:27::i;:::-;21491:34:::0;21315:218;-1:-1:-1;;;;;;;21315:218:0:o;44757:154::-;17602:5;;-1:-1:-1;;;;;17602:5:0;17588:10;:19;17580:64;;;;-1:-1:-1;;;17580:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44846:18:0;::::1;44838:27;;;::::0;::::1;;-1:-1:-1::0;;;;;44876:15:0;;;::::1;;::::0;;;:9:::1;:15;::::0;;;;:27;;-1:-1:-1;;44876:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44757:154::o;43152:362::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;43297:15:::1;:33:::0;;;43341:14:::1;:35:::0;;;43387:16:::1;:36:::0;;;43454:52:::1;13567:4;43455:25;43469:10:::0;12653:13:::1;12604:2;12653;:13;:::i;:::-;12641:26;::::0;:10:::1;:26;:::i;:::-;43455:13:::0;::::1;:25::i;43454:52::-;43434:17;:72:::0;-1:-1:-1;;;;43152:362:0:o;45521:269::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;45627:6:::1;45623:160;45640:23:::0;;::::1;45623:160;;;45716:1;45689:12:::0;;45702:1;45689:15;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45689:29:0::1;;45686:96;;45764:6;45733:11;:28;45745:12;;45758:1;45745:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45733:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;45733:28:0;:37;;-1:-1:-1;;45733:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45686:96:::1;45666:3:::0;::::1;::::0;::::1;:::i;:::-;;;;45623:160;;52789:672:::0;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;52935:45;;::::1;52927:118;;;::::0;-1:-1:-1;;;52927:118:0;;15012:2:1;52927:118:0::1;::::0;::::1;14994:21:1::0;15051:2;15031:18;;;15024:30;15090:34;15070:18;;;15063:62;-1:-1:-1;;;15141:18:1;;;15134:58;15209:19;;52927:118:0::1;14810:424:1::0;52927:118:0::1;53060:6;53056:398;53072:24:::0;;::::1;53056:398;;;53117:18;53138:13;;53152:1;53138:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;53117:37;;53169:11;53183:14;;53198:1;53183:17;;;;;;;:::i;:::-;;;;;;;53169:31;;53215:14;53239:9;-1:-1:-1::0;;;;;53232:27:0::1;;53260:10;53232:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53215:56;;53307:6;53294:9;:19;;53286:65;;;::::0;-1:-1:-1;;;53286:65:0;;15441:2:1;53286:65:0::1;::::0;::::1;15423:21:1::0;15480:2;15460:18;;;15453:30;15519:34;15499:18;;;15492:62;-1:-1:-1;;;15570:18:1;;;15563:31;15611:19;;53286:65:0::1;15239:397:1::0;53286:65:0::1;53366:62;::::0;-1:-1:-1;;;53366:62:0;;-1:-1:-1;;;;;53366:30:0;::::1;::::0;::::1;::::0;:62:::1;::::0;53397:10:::1;::::0;53409;;53421:6;;53366:62:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53102:352;;;53098:3;;;;;:::i;:::-;;;;53056:398;;;;52789:672:::0;;;;;:::o;51897:338::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52007:23:0;::::1;51999:32;;;::::0;::::1;;52062:42;::::0;-1:-1:-1;;;52062:42:0;;52042:17:::1;::::0;-1:-1:-1;;;;;52062:27:0;::::1;::::0;::::1;::::0;:42:::1;::::0;52098:4:::1;::::0;52062:42:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52042:62;;52140:6;52124:12;:22;;52116:55;;;;-1:-1:-1::0;;;52116:55:0::1;;;;;;;:::i;:::-;52182:45;::::0;-1:-1:-1;;;52182:45:0;;-1:-1:-1;;;;;52182:26:0;::::1;::::0;::::1;::::0;:45:::1;::::0;52209:9;;52220:6;;52182:45:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51988:247;51897:338:::0;;;:::o;30822:2755::-;17505:6;:13;;-1:-1:-1;;;;17505:13:0;-1:-1:-1;;;17505:13:0;;;30949:25:::1;::::0;30922:24:::1;::::0;30893:26:::1;::::0;17505:13;;30949:25;30893:53:::1;::::0;::::1;:::i;:::-;:81;;;;:::i;:::-;30868:106:::0;-1:-1:-1;30988:21:0;;30985:2585:::1;;31050:4;31032:24;::::0;;;:9:::1;:24;::::0;;;;:32;:53;-1:-1:-1;31032:53:0::1;31024:103;;;::::0;-1:-1:-1;;;31024:103:0;;17231:2:1;31024:103:0::1;::::0;::::1;17213:21:1::0;17270:2;17250:18;;;17243:30;17309:34;17289:18;;;17282:62;-1:-1:-1;;;17360:18:1;;;17353:35;17405:19;;31024:103:0::1;17029:401:1::0;31024:103:0::1;31150:22;31189:21:::0;31227:23:::1;31267:25:::0;31306:16:::1;31325:56;31356:24;;31325:26;;:30;;:56;;;;:::i;:::-;31395:12;::::0;31306:75;;-1:-1:-1;31395:12:0::1;;:20;;:12:::0;:20;31392:107:::1;;31461:25;::::0;31445:42:::1;::::0;:11;;:15:::1;:42::i;:::-;31431:56;;31392:107;31604:16;::::0;;31618:1:::1;31604:16:::0;;;;;::::1;::::0;;31545:4:::1;31536:23;::::0;31511:22:::1;::::0;31604:16;31618:1;31604:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;31604:16:0::1;31580:40;;31649:4;31631;31636:1;31631:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31631:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;31675:10:::1;::::0;31665:7;;31675:10;::::1;::::0;31665:4;;31675:10;;31665:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;31665:20:0;;::::1;:7;::::0;;::::1;::::0;;;;;:20;31707:6:::1;::::0;:187:::1;::::0;-1:-1:-1;;;31707:187:0;;:6;::::1;::::0;:57:::1;::::0;:187:::1;::::0;31779:11;;31707:6:::1;::::0;31821:4;;31848::::1;::::0;31868:15:::1;::::0;31707:187:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;31905:18:0::1;::::0;-1:-1:-1;31926:45:0::1;::::0;-1:-1:-1;;31936:4:0::1;31927:23;31956:14:::0;31926:29:::1;:45::i;:::-;31989:24;::::0;31905:66;;-1:-1:-1;31989:28:0;31986:242:::1;;32048:59;32095:11;32049:40;32064:24;;32049:10;:14;;:40;;;;:::i;32048:59::-;32130:18;::::0;32122:51:::1;::::0;32032:75;;-1:-1:-1;;;;;;32130:18:0::1;::::0;32122:51;::::1;;;::::0;32032:75;;32130:18:::1;32122:51:::0;32130:18;32122:51;32032:75;32130:18;32122:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;32215:1:0::1;32188:24;:28:::0;31986:242:::1;32251:12;::::0;::::1;;:20;;:12:::0;:20;32248:124:::1;;32300:60;32348:11;32301:41;32316:25;;32301:10;:14;;:41;;;;:::i;32300:60::-;32283:77;;32248:124;32415:1;32398:14;:18;:42;;;;-1:-1:-1::0;32420:12:0::1;::::0;::::1;;:20;;:12:::0;:20:::1;32398:42;32395:315;;;32478:7;::::0;32517:19:::1;::::0;32538:14:::1;::::0;32478:75:::1;::::0;-1:-1:-1;;;32478:75:0;;32517:19;;;::::1;;;18745:14:1::0;18738:22;32478:75:0::1;::::0;::::1;18720:41:1::0;18777:18;;;18770:34;-1:-1:-1;;;;;32478:7:0;;::::1;::::0;:15:::1;::::0;32501:14;;18693:18:1;;32478:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32458:95;;32569:20;32592:7;;;;;;;;;-1:-1:-1::0;;;;;32592:7:0::1;-1:-1:-1::0;;;;;32592:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32569:43;;32627:27;32635:15;32652:1;32627:7;:27::i;:::-;-1:-1:-1::0;32697:1:0::1;32669:25;:29:::0;32395:315:::1;32745:1;32725:17;:21;:52;;;;-1:-1:-1::0;32750:19:0::1;::::0;;;::::1;;;:27;;32773:4;32750:27;32725:52;32722:547;;;32801:8;::::0;32793:41:::1;::::0;-1:-1:-1;;;32793:41:0;;::::1;::::0;::::1;1754:25:1::0;;;-1:-1:-1;;;;;32801:8:0;;::::1;::::0;32793:22:::1;::::0;1727:18:1;;32793:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;32856:10:0::1;::::0;32876:13:::1;::::0;32849:60:::1;::::0;-1:-1:-1;;;32849:60:0;;-1:-1:-1;;;;;32856:10:0;;::::1;::::0;32849:26:::1;::::0;:60:::1;::::0;32876:13;::::1;::::0;32891:17;;32849:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;32931:8:0::1;::::0;32949:13:::1;::::0;32924:58:::1;::::0;-1:-1:-1;;;32924:58:0;;-1:-1:-1;;;;;32931:8:0;;::::1;::::0;32924:24:::1;::::0;:58:::1;::::0;32949:13;::::1;::::0;32964:17;;32924:58:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;32997:6:0::1;::::0;33035:10:::1;::::0;33064:8:::1;::::0;32997:6:::1;33203:5:::0;;32997:260:::1;::::0;-1:-1:-1;;;32997:260:0;;-1:-1:-1;;;;;33035:10:0;;::::1;32997:260;::::0;::::1;19212:34:1::0;33064:8:0;;::::1;19262:18:1::0;;;19255:43;19314:18;;;19307:34;;;19357:18;;;19350:34;;;19400:19;;;19393:35;;;19444:19;;;19437:35;;;;33203:5:0;::::1;19488:19:1::0;;;19481:44;33227:15:0::1;19541:19:1::0;;;19534:35;32997:6:0;::::1;::::0;:19:::1;::::0;19146::1;;32997:260:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32722:547;33311:46;33326:30;33342:14:::0;33326:13;:30:::1;:::i;:::-;33311:10:::0;;:14:::1;:46::i;:::-;33397:1;33368:26;:30:::0;;;33417:20:::1;::::0;33409:55:::1;::::0;33293:64;;-1:-1:-1;;;;;;33417:20:0::1;::::0;33409:55;::::1;;;::::0;33293:64;;33409:55;;33397:1;33409:55;33293:64;33417:20;33409:55;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;33489:67;33509:14;33525:13;33540:15;33489:67;;;;;;;;:::i;:::-;;;;;;;;31010:2560;;;;;;;;30985:2585;-1:-1:-1::0;17523:6:0;:14;;-1:-1:-1;;;;17523:14:0;;;30822:2755::o;47109:730::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;47379:4:::1;47369:14:::0;::::1;;;:47:::0;::::1;;;;47415:1;47387:25;;:29;47369:47;:149;;;;;47421:97;47493:24;;47464:26;;47436:25;;:54;;;;:::i;:::-;:81;;;;:::i;:::-;47421:14;:97::i;:::-;47366:193;;;47534:10;:8;:10::i;:::-;-1:-1:-1::0;47576:12:0::1;:31:::0;;47771:29;::::1;;-1:-1:-1::0;;;47771:29:0::1;-1:-1:-1::0;;47679:43:0;::::1;;::::0;::::1;47771:29:::0;;;;-1:-1:-1;;47622:42:0;::::1;;47576:31;47622:42;-1:-1:-1::0;;47576:31:0;::::1;;47622:42:::0;;;;-1:-1:-1;;47622:42:0;;;;;;;;;;::::1;47771:29:::0;;;;;::::1;::::0;;;47737:11:::1;47815:12:::0;47109:730::o;42839:305::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;42946:6:::1;42942:185;42959:23:::0;;::::1;42942:185;;;43040:1;43013:12:::0;;43026:1;43013:15;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43013:29:0::1;::::0;43005:57:::1;;;;-1:-1:-1::0;;;43005:57:0::1;;;;;;;:::i;:::-;43109:6;43078:11;:28;43090:12;;43103:1;43090:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43078:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43078:28:0;:37;;-1:-1:-1;;43078:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42985:3;::::1;::::0;::::1;:::i;:::-;;;;42942:185;;46357:230:::0;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;46494:18:::1;:31:::0;;;;46536:24:::1;:43:::0;46357:230::o;50106:642::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;13976:3:::1;50293:43;50308:27;:7:::0;50320:14;50308:11:::1;:27::i;:::-;50293:10;::::0;;:14:::1;:43::i;:::-;:58;;50285:67;;;::::0;::::1;;13976:3;50370:43;50385:27;:7:::0;50397:14;50385:11:::1;:27::i;50370:43::-;:58;;50362:67;;;::::0;::::1;;13976:3;50447:49;50462:33;:13:::0;50480:14;50462:17:::1;:33::i;50447:49::-;:64;;50439:73;;;::::0;::::1;;13976:3;50530:49;50545:33;:13:::0;50563:14;50545:17:::1;:33::i;50530:49::-;:64;;50522:73;;;::::0;::::1;;50607:12;:29:::0;50646:6:::1;:16:::0;;;;50672:13:::1;:30:::0;;;;50712:12:::1;:28:::0;50106:642::o;43526:286::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;43634:6:::1;43630:173;43646:19:::0;;::::1;43630:173;;;43717:1;43694:8:::0;;43703:1;43694:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43694:25:0::1;::::0;43686:53:::1;;;::::0;-1:-1:-1;;;43686:53:0;;20437:2:1;43686:53:0::1;::::0;::::1;20419:21:1::0;20476:2;20456:18;;;20449:30;-1:-1:-1;;;20495:18:1;;;20488:45;20550:18;;43686:53:0::1;20235:339:1::0;43686:53:0::1;43783:8;43754:13;:26;43768:8;;43777:1;43768:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43754:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43754:26:0;:37;;-1:-1:-1;;43754:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43667:3;::::1;::::0;::::1;:::i;:::-;;;;43630:173;;34689:252:::0;34751:10;34741:21;;;;:9;:21;;;;;;;;:29;;:21;:29;;:61;;-1:-1:-1;34783:10:0;34773:21;;;;:9;:21;;;;;;;;:29;;:21;:29;34741:61;:84;;;-1:-1:-1;34820:5:0;;-1:-1:-1;;;;;34820:5:0;34806:10;:19;34741:84;34733:93;;;;;;34880:17;;34863:4;34845:24;;;;:9;:24;;;;;:32;:52;:65;;;;;34901:4;;34909:1;34901:9;;34845:65;34837:74;;;;;;34922:11;:9;:11::i;:::-;34689:252::o;52243:536::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52396:32:0;::::1;::::0;52393:103:::1;;52443:21;:42:::0;;-1:-1:-1;;;;;;52443:42:0::1;-1:-1:-1::0;;;;;52443:42:0;::::1;;::::0;;52393:103:::1;-1:-1:-1::0;;;;;52508:20:0;::::1;::::0;52505:117:::1;;52543:8;:17:::0;;-1:-1:-1;;;;;;52543:17:0::1;-1:-1:-1::0;;;;;52543:17:0;::::1;;::::0;;52574:14:::1;:37:::0;;;52505:117:::1;-1:-1:-1::0;;;;;52634:25:0;::::1;::::0;52631:139:::1;;52677:7;::::0;:34:::1;::::0;-1:-1:-1;;;52677:34:0;;-1:-1:-1;;;;;52677:7:0;;::::1;::::0;:21:::1;::::0;:34:::1;::::0;52699:11;;52677:34:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;52673:50:::0;52735:10:::1;:24:::0;;-1:-1:-1;;;;;52735:24:0;::::1;-1:-1:-1::0;;;;;;52735:24:0;;::::1;;::::0;;52243:536;;;;:::o;43820:929::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;43992:41;;::::1;43984:77;;;::::0;-1:-1:-1;;;43984:77:0;;20781:2:1;43984:77:0::1;::::0;::::1;20763:21:1::0;20820:2;20800:18;;;20793:30;-1:-1:-1;;;20839:18:1;;;20832:53;20902:18;;43984:77:0::1;20579:347:1::0;43984:77:0::1;44084:41:::0;;::::1;44076:77;;;::::0;-1:-1:-1;;;44076:77:0;;21133:2:1;44076:77:0::1;::::0;::::1;21115:21:1::0;21172:2;21152:18;;;21145:30;-1:-1:-1;;;21191:18:1;;;21184:53;21254:18;;44076:77:0::1;20931:347:1::0;44076:77:0::1;44190:6;44186:554;44202:23:::0;;::::1;44186:554;;;44285:1;44258:12:::0;;44271:1;44258:15;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44258:29:0::1;;44255:484;;44314:15:::0;::::1;;44325:4;44314:15:::0;44311:411:::1;;44401:4;44357:14;:31;44372:12;;44385:1;44372:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44357:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44357:31:0;:48;;-1:-1:-1;;44357:48:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44482:11;;44494:1;44482:14;;::::1;;;;;:::i;:::-;;;;;;;44432;:31;44447:12;;44460:1;44447:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44432:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44432:31:0;:47:::1;;:64:::0;44573:22:::1;44592:2;44573:11:::0;;44585:1;44573:14;;::::1;;;;;:::i;:::-;;;;;;;:18;;:22;;;;:::i;:::-;44523:14;:31;44538:12;;44551:1;44538:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44523:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44523:31:0;:47:::1;;:72:::0;44311:411:::1;;;44693:5;44650:14;:31;44665:12;;44678:1;44665:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44650:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44650:31:0;:48;;-1:-1:-1;;44650:48:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44311:411:::1;44228:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44186:554;;;;43820:929:::0;;;;;;;:::o;21090:207::-;21195:10;21230:4;17915:22;;;:14;:22;;;;;:32;21230:4;;21195:10;21207:2;;21211:6;;17915:32;;:40;;:32;:40;:66;;;;-1:-1:-1;17973:8:0;;-1:-1:-1;;;;;17959:22:0;;;17973:8;;17959:22;17915:66;17912:545;;;-1:-1:-1;;;;;18000:17:0;;;;;;:9;:17;;;;;:28;;;:33;17997:256;;-1:-1:-1;;;;;18115:22:0;;;;;;:14;:22;;;;;;;;:38;;;18082:9;:17;;;;;;:28;;;18060:51;;18061:15;;18060:21;:51::i;:::-;:93;;18052:185;;;;-1:-1:-1;;;18052:185:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18300:22:0;;;;;;:14;:22;;;;;:38;;;18288:77;;13567:4;;18289:50;;:6;;:10;:50::i;18288:77::-;18278:6;:87;;18270:175;;;;-1:-1:-1;;;18270:175:0;;;;;;;:::i;:::-;18471:4;;:9;:25;;;;-1:-1:-1;18485:11:0;;;;;;;18484:12;18471:25;:54;;;;18500:4;;18508:1;18500:9;:25;;;;-1:-1:-1;18514:11:0;;;;;;;18513:12;18500:25;18468:237;;;-1:-1:-1;;;;;18549:25:0;;;;;;:13;:25;;;;;;;;:33;;:25;:33;18541:69;;;;-1:-1:-1;;;18541:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18633:21:0;;;;;;:13;:21;;;;;;;;:29;;:21;:29;18625:68;;;;-1:-1:-1;;;18625:68:0;;;;;;;:::i;:::-;21256:33:::1;21266:10;21278:2;21282:6;21256:9;:33::i;:::-;21249:40:::0;21090:207;-1:-1:-1;;;;;;21090:207:0:o;51656:233::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;51753:21:::1;51793:17:::0;;::::1;;51785:50;;;;-1:-1:-1::0;;;51785:50:0::1;;;;;;;:::i;:::-;51846:35;::::0;-1:-1:-1;;;;;51846:27:0;::::1;::::0;:35;::::1;;;::::0;51874:6;;51846:35:::1;::::0;;;51874:6;51846:27;:35;::::1;;;;;;;;;;;;;::::0;::::1;;;;46927:174:::0;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;47006:4:::1;::::0;:9;;:22:::1;;;47019:4;;47027:1;47019:9;47006:22;46998:31;;;::::0;::::1;;47040:11;:18:::0;;-1:-1:-1;;47040:18:0::1;::::0;::::1;::::0;;47069:10:::1;:24:::0;46927:174::o;50762:356::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;50833:13:::1;:26:::0;;-1:-1:-1;;;;;50833:26:0;::::1;-1:-1:-1::0;;;;;;50833:26:0;;::::1;::::0;::::1;::::0;;;50870:6:::1;:31:::0;;;;::::1;::::0;::::1;::::0;;50925:13:::1;::::0;;-1:-1:-1;;;50925:13:0;;;;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;50833:26;50925:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50912:10;:26:::0;;-1:-1:-1;;;;;;50912:26:0::1;-1:-1:-1::0;;;;;50912:26:0;;::::1;;::::0;;50972:6:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;50972:16:0;;;;:6;;;::::1;::::0;:14:::1;::::0;:16;;::::1;::::0;::::1;::::0;;;;;;;;;:6;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51001:10;::::0;;50960:67:::1;::::0;-1:-1:-1;;;50960:67:0;;-1:-1:-1;;;;;50960:40:0;;::::1;::::0;::::1;::::0;:67:::1;::::0;51001:10;;::::1;::::0;51021:4:::1;::::0;50960:67:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50949:8;:78:::0;;-1:-1:-1;;;;;;50949:78:0::1;-1:-1:-1::0;;;;;50949:78:0;;::::1;;::::0;;51050:13:::1;::::0;;::::1;-1:-1:-1::0;51038:26:0;;;:11:::1;:26;::::0;;;;;:33;;-1:-1:-1;;51038:33:0;;::::1;-1:-1:-1::0;51038:33:0;;::::1;::::0;;;51094:8;;;;::::1;51082:21:::0;;;;:28;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;50762:356:0:o;46104:238::-;46177:7;;:45;;-1:-1:-1;;;46177:45:0;;46225:1;;-1:-1:-1;;;;;46177:7:0;;:22;;:45;;46200:9;;46211:10;;46177:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;46169:83;;;;-1:-1:-1;;;46169:83:0;;;;;;;:::i;:::-;46272:7;;:51;;-1:-1:-1;;;46272:51:0;;-1:-1:-1;;;;;46272:7:0;;;;:28;;:51;;46301:9;;46312:10;;46272:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46268:67;;46104:238;:::o;44919:590::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;45019:12;::::1;;45027:4;45019:12:::0;45016:237:::1;;45053:15;::::0;17024:2:::1;::::0;45053:37:::1;::::0;45071:12;;45053:37:::1;:::i;:::-;45052:61;;45044:102;;;::::0;-1:-1:-1;;;45044:102:0;;21741:2:1;45044:102:0::1;::::0;::::1;21723:21:1::0;21780:2;21760:18;;;21753:30;-1:-1:-1;;;21799:18:1;;;21792:58;21867:18;;45044:102:0::1;21539:352:1::0;45044:102:0::1;45016:237;;;45180:15;::::0;:38;-1:-1:-1;45180:38:0::1;45172:71;;;::::0;-1:-1:-1;;;45172:71:0;;22098:2:1;45172:71:0::1;::::0;::::1;22080:21:1::0;22137:2;22117:18;;;22110:30;-1:-1:-1;;;22156:18:1;;;22149:50;22216:18;;45172:71:0::1;21896:344:1::0;45172:71:0::1;45265:6;45261:239;45277:23:::0;;::::1;45261:239;;;45353:1;45326:12:::0;;45339:1;45326:15;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45326:29:0::1;;45323:176;;45403:4;45374:9;:26;45384:12;;45397:1;45384:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45374:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;45374:26:0;:33;;-1:-1:-1;;45374:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45425:12;::::1;;-1:-1:-1::0;45425:12:0::1;:62;;45465:15;::::0;:22:::1;::::0;45485:1:::1;45465:19;:22::i;:::-;45425:62;;;45440:15;::::0;:22:::1;::::0;45460:1:::1;45440:19;:22::i;:::-;45425:62;45323:176;45303:3:::0;::::1;::::0;::::1;:::i;:::-;;;;45261:239;;20910:172:::0;-1:-1:-1;;;;;21046:19:0;;;21019:7;21046:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;20910:172;;;;;:::o;49163:935::-;49303:8;;49207:4;;;;;;49277:35;;49291:10;;-1:-1:-1;;;;;49303:8:0;49277:13;:35::i;:::-;49274:121;;;49359:8;;49339:44;;49347:10;;-1:-1:-1;;;;;49359:8:0;49369:6;49359:8;49339:7;:44::i;:::-;49327:56;;49274:121;49405:17;49425:21;:6;49436:9;49425:10;:21::i;:::-;49500:10;49490:21;;;;:9;:21;;;;;:29;49405:41;;-1:-1:-1;49489:43:0;;49525:6;49489:35;:43::i;:::-;49467:10;49457:21;;;;:9;:21;;;;;:75;;;;49543:64;;49578:4;49585:21;:6;49596:9;49585:10;:21::i;:::-;49543:14;:64::i;:::-;-1:-1:-1;49708:16:0;;;49722:1;49708:16;;;;;;;;49644:10;49643:20;;49618:22;;49708:16;49722:1;49708:16;;;;;;;;;;-1:-1:-1;49708:16:0;49684:40;;49753:4;49735;49740:1;49735:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49735:23:0;;;:7;;;;;;;;;:23;49779:10;;49769:7;;49779:10;;;49769:4;;49779:10;;49769:7;;;;;;:::i;:::-;-1:-1:-1;;;;;49769:20:0;;;:7;;;;;;;;;:20;49811:6;;:185;;-1:-1:-1;;;49811:185:0;;:6;;;:57;;:185;;49883:12;;49811:6;;49926:4;;49945:10;;49970:15;;49811:185;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50020:42:0;;-1:-1:-1;;50022:10:0;50021:20;;-1:-1:-1;50047:14:0;50020:26;:42::i;46595:322::-;46698:4;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;46732:29:::1;46747:13;12604:2;46747;:13;:::i;:::-;46732:10:::0;;:14:::1;:29::i;:::-;46714:15;:47:::0;46786:25:::1;46797:13;12604:2;46797;:13;:::i;:::-;46786:6:::0;;:10:::1;:25::i;:::-;46772:11;:39:::0;;;46830:15:::1;::::0;:29:::1;46822:65;;;::::0;-1:-1:-1;;;46822:65:0;;22447:2:1;46822:65:0::1;::::0;::::1;22429:21:1::0;22486:2;22466:18;;;22459:30;-1:-1:-1;;;22505:18:1;;;22498:53;22568:18;;46822:65:0::1;22245:347:1::0;46822:65:0::1;-1:-1:-1::0;46905:4:0::1;46595:322:::0;;;;:::o;51440:198::-;51513:4;17602:5;;-1:-1:-1;;;;;17602:5:0;17588:10;:19;17580:64;;;;-1:-1:-1;;;17580:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51537:23:0;::::1;51529:51;;;;-1:-1:-1::0;;;51529:51:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;51591:5:0::1;:17:::0;;-1:-1:-1;;;;;;51591:17:0::1;-1:-1:-1::0;;;;;51591:17:0;::::1;;::::0;;-1:-1:-1;17655:1:0::1;51440:198:::0;;;:::o;47849:1294::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;48089:13:::1;48149::::0;48133;48105:25:::1;48120:10:::0;48105:12;:25:::1;:::i;:::-;:41;;;;:::i;:::-;:57;;;;:::i;:::-;48089:73;;13976:3;48181:38;48194:24;48205:12;;48194:6;;:10;;:24;;;;:::i;:::-;48181:8:::0;;:12:::1;:38::i;:::-;:53;;48173:62;;;::::0;::::1;;13976:3;48254:39;48267:25;48278:13;;48267:6;;:10;;:25;;;;:::i;48254:39::-;:54;;48246:63;;;::::0;::::1;;13976:3;48328:45;48341:31;48358:13;;48341:12;;:16;;:31;;;;:::i;48328:45::-;:60;;48320:69;;;::::0;::::1;;13976:3;48408:44;48421:30;48438:12;;48421;;:16;;:30;;;;:::i;48408:44::-;:59;;48400:68;;;::::0;::::1;;13976:3;48487:8;:23;;48479:70;;;::::0;-1:-1:-1;;;48479:70:0;;22799:2:1;48479:70:0::1;::::0;::::1;22781:21:1::0;22838:2;22818:18;;;22811:30;22877:34;22857:18;;;22850:62;-1:-1:-1;;;22928:18:1;;;22921:32;22970:19;;48479:70:0::1;22597:398:1::0;48479:70:0::1;48563:15:::0;::::1;;48574:4;48563:15:::0;48560:567:::1;;48613:20;:12:::0;48630:2:::1;48613:16;:20::i;:::-;48595:15;:38:::0;48665:18:::1;:10:::0;48680:2:::1;48665:14;:18::i;:::-;48649:13;:34:::0;;;48718:21:::1;::::0;:13;;:17:::1;:21::i;:::-;48699:16;:40:::0;48769:21:::1;:13:::0;48787:2:::1;48769:17;:21::i;:::-;48755:11;:35:::0;48818:16:::1;:8:::0;48831:2:::1;48818:12;:16::i;:::-;48806:9;:28:::0;48560:567:::1;;;48886:20;:12:::0;48903:2:::1;48886:16;:20::i;:::-;48867:16;:39:::0;48940:18:::1;:10:::0;48955:2:::1;48940:14;:18::i;:::-;48923:14;:35:::0;48995:21:::1;:13:::0;49013:2:::1;48995:17;:21::i;:::-;48975:17;:41:::0;49048:21:::1;:13:::0;49066:2:::1;49048:17;:21::i;:::-;49033:12;:36:::0;49099:16:::1;:8:::0;49112:2:::1;49099:12;:16::i;:::-;49086:10;:29:::0;48078:1065:::1;47849:1294:::0;;;;;:::o;1473:220::-;1531:7;1555:1;1560;1555:6;1551:20;;-1:-1:-1;1570:1:0;1563:8;;1551:20;1582:9;1594:5;1598:1;1594;:5;:::i;:::-;1582:17;-1:-1:-1;1627:1:0;1618:5;1622:1;1582:17;1618:5;:::i;:::-;:10;1610:56;;;;-1:-1:-1;;;1610:56:0;;23424:2:1;1610:56:0;;;23406:21:1;23463:2;23443:18;;;23436:30;23502:34;23482:18;;;23475:62;-1:-1:-1;;;23553:18:1;;;23546:31;23594:19;;1610:56:0;23222:397:1;1610:56:0;1684:1;1473:220;-1:-1:-1;;;1473:220:0:o;1701:153::-;1759:7;1791:1;1787;:5;1779:44;;;;-1:-1:-1;;;1779:44:0;;23826:2:1;1779:44:0;;;23808:21:1;23865:2;23845:18;;;23838:30;-1:-1:-1;;;23884:18:1;;;23877:56;23950:18;;1779:44:0;23624:350:1;1779:44:0;1841:5;1845:1;1841;:5;:::i;1307:158::-;1365:7;1398:1;1393;:6;;1385:49;;;;-1:-1:-1;;;1385:49:0;;24181:2:1;1385:49:0;;;24163:21:1;24220:2;24200:18;;;24193:30;24259:32;24239:18;;;24232:60;24309:18;;1385:49:0;23979:354:1;1385:49:0;1452:5;1456:1;1452;:5;:::i;1120:179::-;1178:7;;1210:5;1214:1;1210;:5;:::i;:::-;1198:17;;1239:1;1234;:6;;1226:46;;;;-1:-1:-1;;;1226:46:0;;24673:2:1;1226:46:0;;;24655:21:1;24712:2;24692:18;;;24685:30;-1:-1:-1;;;24731:18:1;;;24724:57;24798:18;;1226:46:0;24471:351:1;33585:1096:0;33629:18;33662:22;33699:20;33751:24;33773:1;33751:17;;:21;;:24;;;;:::i;:::-;33805:17;;33734:41;;-1:-1:-1;33805:37:0;;33734:41;33805:21;:37::i;:::-;33904:14;;-1:-1:-1;;;;;33904:14:0;33894:25;;;;:9;:25;;;;;:33;33790:52;;-1:-1:-1;33893:53:0;;33790:52;33893:39;:53::i;:::-;33867:14;;-1:-1:-1;;;;;33867:14:0;33857:25;;;;:9;:25;;;;;;:89;;;;34015:4;33997:24;;;:32;33996:52;;34035:12;33996:38;:52::i;:::-;33979:4;33961:24;;;;:9;:24;;;;;;:87;;;;34091:7;;:45;;-1:-1:-1;;;34091:45:0;;33961:24;;-1:-1:-1;;;;;34091:7:0;;:16;;:45;;33979:4;34123:12;;34091:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34180:6;;:235;;-1:-1:-1;;;34180:235:0;;34256:4;34180:235;;;25168:34:1;;;25218:18;;;25211:34;;;34156:20:0;25261:18:1;;;25254:34;;;25304:18;;;25297:34;;;25347:19;;;25340:44;;;;34385:15:0;25400:19:1;;;25393:35;34063:73:0;;-1:-1:-1;;;;;;34180:6:0;;;;:22;;34063:73;;25102:19:1;;34180:235:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34441:10;34431:21;;;;:9;:21;;;;;;34151:264;;-1:-1:-1;34431:21:0;;:29;;:21;:29;;-1:-1:-1;34428:224:0;;-1:-1:-1;34428:224:0;34492:66;13567:4;34493:39;34513:18;;34493:15;:19;;:39;;;;:::i;34492:66::-;34580:21;;34573:65;;-1:-1:-1;;;34573:65:0;;34476:82;;-1:-1:-1;;;;;;34580:21:0;;34573:38;;:65;;34612:10;;34476:82;;34573:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22156:1951::-;22333:4;18786:10;18808:4;18786:27;18782:329;;18844:7;;18867:10;;18844:46;;-1:-1:-1;;;18844:46:0;;18830:11;;-1:-1:-1;;;;;18844:7:0;;;;:22;;:46;;18867:10;;;;18879;;18844:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18830:60;-1:-1:-1;18910:10:0;;18905:195;;18948:10;18979:1;18941:18;;;:6;:18;;;;;;:35;;:39;;;;19003:7;;19032:10;;19003:52;;-1:-1:-1;;;19003:52:0;;-1:-1:-1;;;;;19003:7:0;;;;:28;;:52;;19032:10;;19003:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18999:68;;18815:296;18782:329;22296:8:::1;::::0;-1:-1:-1;;;;;22288:16:0;;::::1;22296:8:::0;::::1;22288:16;::::0;::::1;::::0;:34:::1;;-1:-1:-1::0;22314:8:0::1;::::0;-1:-1:-1;;;;;22308:14:0;;::::1;22314:8:::0;::::1;22308:14;;22288:34;19221:17;::::0;19204:4:::1;19186:24;::::0;;;:9:::1;:24;::::0;;;;:32;:52:::1;:65:::0;::::1;;;;19242:4;;19250:1;19242:9;;19186:65;:87;;;;-1:-1:-1::0;19269:4:0::1;19255:18:::0;::::1;;;19186:87;19183:129;;;19289:11;:9;:11::i;:::-;-1:-1:-1::0;;;;;22358:18:0;::::2;22350:45;;;::::0;-1:-1:-1;;;22350:45:0;;25641:2:1;22350:45:0::2;::::0;::::2;25623:21:1::0;25680:2;25660:18;;;25653:30;-1:-1:-1;;;25699:18:1;;;25692:44;25753:18;;22350:45:0::2;25439:338:1::0;22350:45:0::2;-1:-1:-1::0;;;;;22414:16:0;::::2;22406:45;;;::::0;-1:-1:-1;;;22406:45:0;;25984:2:1;22406:45:0::2;::::0;::::2;25966:21:1::0;26023:2;26003:18;;;25996:30;-1:-1:-1;;;26042:18:1;;;26035:46;26098:18;;22406:45:0::2;25782:340:1::0;22406:45:0::2;-1:-1:-1::0;;;;;22470:17:0;::::2;;::::0;;;:11:::2;:17;::::0;;;;;::::2;;:48;;22507:11;;22497:6;:21;;22470:48;;;22490:4;22470:48;22462:81;;;::::0;-1:-1:-1;;;22462:81:0;;26329:2:1;22462:81:0::2;::::0;::::2;26311:21:1::0;26368:2;26348:18;;;26341:30;-1:-1:-1;;;26387:18:1;;;26380:50;26447:18;;22462:81:0::2;26127:344:1::0;22462:81:0::2;-1:-1:-1::0;;;;;22562:15:0;::::2;;::::0;;;:9:::2;:15;::::0;;;;:23;:33;-1:-1:-1;22562:33:0::2;22554:65;;;::::0;-1:-1:-1;;;22554:65:0;;26678:2:1;22554:65:0::2;::::0;::::2;26660:21:1::0;26717:2;26697:18;;;26690:30;-1:-1:-1;;;26736:18:1;;;26729:49;26795:18;;22554:65:0::2;26476:343:1::0;22554:65:0::2;22674:8;::::0;22630:14:::2;::::0;;;-1:-1:-1;;;;;22666:16:0;;::::2;22674:8:::0;::::2;22666:16;::::0;::::2;::::0;:34:::2;;-1:-1:-1::0;22692:8:0::2;::::0;-1:-1:-1;;;;;22686:14:0;;::::2;22692:8:::0;::::2;22686:14;;22666:34;-1:-1:-1::0;;;;;22714:17:0;;::::2;22749:1;22714:17:::0;;;:11:::2;:17;::::0;;;;;;;22732:13:::2;::::0;;;::::2;22714:32:::0;;;;;;;22655:45;;-1:-1:-1;22714:36:0;;;;:61:::2;;-1:-1:-1::0;;;;;;22754:21:0;::::2;22770:4;22754:21;;22714:61;22711:173;;;-1:-1:-1::0;;;;;22827:17:0;;::::2;;::::0;;;:11:::2;:17;::::0;;;;;;;22845:13:::2;::::0;;;::::2;22827:32:::0;;;;;;;22826:46:::2;::::0;22865:6;22826:38:::2;:46::i;:::-;-1:-1:-1::0;;;;;22791:17:0;;::::2;;::::0;;;:11:::2;:17;::::0;;;;;;;22809:13:::2;::::0;;;::::2;22791:32:::0;;;;;;:81;22711:173:::2;-1:-1:-1::0;;;;;22926:15:0;::::2;;::::0;;;:9:::2;:15;::::0;;;;:23;22925:37:::2;::::0;22955:6;22925:29:::2;:37::i;:::-;-1:-1:-1::0;;;;;22899:15:0;::::2;;::::0;;;:9:::2;:15;::::0;;;;:63;;;;23015:3;:26;::::2;;;-1:-1:-1::0;23022:11:0::2;::::0;-1:-1:-1;;;23022:11:0;::::2;;;:19;;23037:4;23022:19;23015:26;:39;;;;;23045:4;;23053:1;23045:9;;23015:39;:69;;;;-1:-1:-1::0;;;;;;23058:17:0;::::2;;::::0;;;:11:::2;:17;::::0;;;;;::::2;;:26;23015:69;:125;;;;-1:-1:-1::0;23123:17:0::2;::::0;23106:4:::2;23088:24;::::0;;;:9:::2;:24;::::0;;;;:32;:52:::2;23015:125;22994:146;;23151:14;23168:23;23182:4;23188:2;23168:13;:23::i;:::-;:36;;;;;23195:4;;23203:1;23195:9;;23168:36;:52;;;;-1:-1:-1::0;23208:12:0;::::2;23168:52;23151:69;;23247:9;:26;;;;23260:13;23247:26;23244:421;;;23300:30;23308:4;23314:2;23318:6;23326:3;23300:7;:30::i;:::-;23353:8;::::0;23288:42;;-1:-1:-1;;;;;;23347:14:0;;::::2;23353:8:::0;::::2;23347:14;::::0;:21:::2;;;23365:3;23347:21;23344:320;;;23384:19;23462:25;;23435:24;;23406:26;;:53;;;;:::i;:::-;:81;;;;:::i;:::-;23384:103;;23505:30;23520:14;23505;:30::i;:::-;23502:79;;;23555:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;;23595:15:0;::::2;;::::0;;;:9:::2;:15;::::0;;;;23624::::2;23595:26;::::0;;::::2;:44:::0;23344:320:::2;23683:4;;23691:1;23683:9;:22;;;;23696:4;;23704:1;23696:9;23683:22;:35;;;-1:-1:-1::0;23709:4:0::2;::::0;:9;23683:35:::2;:42;;;;23722:3;23683:42;23679:119;;;23739:47;23754:4:::0;23760:2;23764:21:::2;:6:::0;23775:9;23764:10:::2;:21::i;23739:47::-;;23679:119;23813:4;;23821:1;23813:9;:29;;;;-1:-1:-1::0;23834:8:0::2;::::0;-1:-1:-1;;;;;23826:16:0;;::::2;23834:8:::0;::::2;23826:16;23813:29;23810:159;;;23862:47;23877:4:::0;23883:2;23887:21:::2;:6:::0;23898:9;23887:10:::2;:21::i;23862:47::-;;23928:27;23937:6;23945:9;23928:8;:27::i;:::-;23984:4;;23992:1;23984:9;:27;;;;-1:-1:-1::0;24003:8:0::2;::::0;-1:-1:-1;;;;;23997:14:0;;::::2;24003:8:::0;::::2;23997:14;23984:27;23981:95;;;24031:33;24040:4;24046:6;24054:9;24031:8;:33::i;:::-;-1:-1:-1::0;24095:4:0::2;::::0;22156:1951;-1:-1:-1;;;;;;;;22156:1951:0:o;28320:2378::-;28485:8;;-1:-1:-1;;;;;28485:8:0;28434:22;28475:19;;;:9;:19;;;;;:27;28485:8;28459:11;:44;;:15;:44::i;:::-;28434:69;;28513:21;28544:23;28570:70;13567:4;28571:43;28588:25;;28571:12;:16;;:43;;;;:::i;28570:70::-;28544:96;-1:-1:-1;28650:21:0;28674:36;:12;28544:96;28674:16;:36::i;:::-;28650:60;;28726:6;28721:1195;28742:12;:19;28738:23;;28721:1195;;;28783:20;28820:15;:32;28836:12;28849:1;28836:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28836:15:0;28820:32;;;;;;;;;;;;;;;:41;;;;28817:1098;;28879:21;28903:71;28956:17;28904:46;28945:4;28905:9;:26;28915:12;28928:1;28915:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28915:15:0;28905:26;;;;;;;;;;;;:34;;28904:40;:46::i;28903:71::-;28879:95;;29036:16;28989:6;:23;28996:12;29009:1;28996:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28996:15:0;28989:23;;;;;;;;;;;;:63;;;;29094:12;:15;;29082:83;;29147:17;;29083:58;;29124:16;;29084:9;;28996:15;;29107:1;;29094:15;;;;;;:::i;29082:83::-;29067:98;;29185:3;29192:1;29185:8;29181:376;;29259:100;29346:12;29259:6;:63;29288:12;29301:1;29288:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29288:15:0;29259:63;;;;;;;;;;;;:82;;;;:86;:100::i;:::-;29214:6;:23;29221:12;29234:1;29221:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29221:15:0;29214:23;;;;;;;;;;;;:42;;:145;;;;29426:12;:15;;29415:54;;29456:12;;29416:9;;29439:1;;29426:15;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29426:15:0;29416:26;;;;;;;;;;;;:34;;29415:40;:54::i;:::-;29378:9;:26;29388:12;29401:1;29388:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29388:15:0;29378:26;;;;;;;;;;;;:91;29507:34;:16;29528:12;29507:20;:34::i;:::-;29488:53;;29181:376;29575:3;29582:1;29575:8;29571:343;;29647:98;29732:12;29647:6;:63;29676:12;29689:1;29676:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29676:15:0;29647:63;;;;;;;;;;;;29676:15;29647:80;;;:84;:98::i;:::-;29604:6;:23;29611:12;29624:1;29611:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29611:15:0;;;29604:23;;;;;;;;;;;;;;;29611:15;29604:40;:141;;;;29768:7;;29785:12;:15;;29768:7;;;;;:16;;29798:1;;29785:15;;;;;;:::i;:::-;;;;;;;;;;;29768:47;;-1:-1:-1;;;;;;29768:47:0;;;;;;;;;-1:-1:-1;;;;;29785:15:0;;29802:12;;29768:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29764:63;29864:34;:16;29885:12;29864:20;:34::i;:::-;29845:53;;29571:343;28862:1053;28817:1098;-1:-1:-1;28763:3:0;;;;:::i;:::-;;;;28721:1195;;;-1:-1:-1;29926:19:0;29948:62;29971:38;:16;29992;29971:20;:38::i;:::-;29948:18;;:22;:62::i;:::-;29926:84;;30027:3;30034:1;30027:8;30024:299;;30134:4;30097:61;;;;:6;:61;;;;;:80;;;:100;;30182:14;30097:84;:100::i;:::-;30069:4;30054:21;;;;:6;:21;;;;;;;;:40;;:143;;;;30252:9;:24;;;:32;30251:54;;30290:14;30251:38;:54::i;:::-;30233:4;30215:24;;;;:9;:24;;;;;:90;30024:299;30340:3;30346:1;30340:7;30337:297;;30444:4;30407:61;;;;:6;:61;;;;;:78;;;:98;;30490:14;30407:82;:98::i;:::-;30381:4;30366:21;;;;:6;:21;;;;;;;:38;;:139;;;;30543:7;;30565:10;;30543:64;;-1:-1:-1;;;30543:64:0;;-1:-1:-1;;;;;30543:7:0;;;;:21;;:64;;30565:10;;;;30592:14;;30543:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30539:80;;30659:31;;1754:25:1;;;30659:31:0;;1742:2:1;1727:18;30659:31:0;;;;;;;28375:2323;;;;;28320:2378;;:::o;42166:217::-;42267:8;;42229:4;;-1:-1:-1;;;;;42267:8:0;42253:10;:22;;;;:42;;-1:-1:-1;42289:6:0;;-1:-1:-1;;;42289:6:0;;;;42288:7;42253:42;:66;;;;-1:-1:-1;42308:11:0;;-1:-1:-1;;;42308:11:0;;;;42253:66;:122;;;;-1:-1:-1;;42350:4:0;42332:24;;;;:9;:24;;;;;:32;-1:-1:-1;42332:43:0;;42166:217::o;42393:276::-;-1:-1:-1;;;;;42509:19:0;;;42472:4;42509:19;;;:11;:19;;;;;;42553:8;;42472:4;;42509:19;;;;42508:20;;42553:8;;42543:18;:43;;;;-1:-1:-1;;;;;;42565:21:0;;;;;;:11;:21;;;;;;;;42543:43;42540:94;;;-1:-1:-1;42616:5:0;;42393:276;-1:-1:-1;;;42393:276:0:o;24117:4103::-;24217:4;24241:14;24266:27;24304:19;24334;24364:20;24395:18;24424:21;24456:11;24470:7;24456:21;;24488:12;24503:6;24488:21;;24523:4;;24531:1;24523:9;24520:214;;24575:23;;24564:35;;:6;;:10;:35::i;:::-;24552:47;;24648:9;24618:26;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;24693:29:0;;-1:-1:-1;24693:14:0;24712:9;24693:18;:29::i;:::-;24676:46;;24520:214;24747:4;;24755:1;24747:9;:22;;;;24760:4;;24768:1;24760:9;24747:22;24744:2428;;;24794:8;;-1:-1:-1;;;;;24784:18:0;;;24794:8;;24784:18;;:32;;;24806:10;24784:32;24781:797;;;24844:48;13567:4;24845:21;24856:9;;24845:6;:10;;:21;;;;:::i;24844:48::-;24932:16;;24832:60;;-1:-1:-1;24932:16:0;;;;;:78;;25009:1;24932:78;;;24951:55;13567:4;24952:28;24963:16;;24952:6;:10;;:28;;;;:::i;24951:55::-;25042:12;;24907:103;;-1:-1:-1;25042:12:0;;:69;;25110:1;25042:69;;;25057:50;13567:4;25058:23;25069:11;;25058:6;:10;;:23;;;;:::i;25057:50::-;25025:86;;25142:52;13567:4;25143:25;25154:13;;25143:6;:10;;:25;;;;:::i;25142:52::-;25126:68;-1:-1:-1;25228:70:0;25126:68;25242:39;25267:14;25242:22;:39;:::i;:::-;:55;;;;:::i;:::-;25228:9;;:13;:70::i;:::-;25209:89;;25343:15;25313:26;;:45;;;;;;;:::i;:::-;;;;;;;;25401:13;25373:24;;:41;;;;;;;:::i;:::-;;;;;;;;25458:14;25429:25;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;25538:14:0;;-1:-1:-1;25504:31:0;25522:13;25504:15;:31;:::i;:::-;:48;;;;:::i;:::-;25487:65;;24781:797;25615:8;;-1:-1:-1;;;;;25601:22:0;;;25615:8;;25601:22;:49;;;;-1:-1:-1;;;;;;25627:23:0;;25645:4;25627:23;;25601:49;25598:1573;;;25678:49;13567:4;25679:22;25690:10;;25679:6;:10;;:22;;;;:::i;25678:49::-;25767:16;;25666:61;;-1:-1:-1;25767:16:0;;;;;:79;;25845:1;25767:79;;;25786:56;13567:4;25787:29;25798:17;;25787:6;:10;;:29;;;;:::i;25786:56::-;25878:12;;25742:104;;-1:-1:-1;25878:12:0;;:70;;25947:1;25878:70;;;25893:51;13567:4;25894:24;25905:12;;25894:6;:10;;:24;;;;:::i;25893:51::-;25861:87;;25979:53;13567:4;25980:26;25991:14;;25980:6;:10;;:26;;;;:::i;25979:53::-;25963:69;;26075:13;26047:24;;:41;;;;;;;:::i;:::-;;;;;;;;26132:14;26103:25;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;;26207:24:0;;26175:19;;26197:34;;;:92;;26288:1;26197:92;;;26234:51;13567:4;26235:24;26246:12;;26235:6;:10;;:24;;;;:::i;26234:51::-;26175:114;;26304:20;26337:25;;26327:6;:35;;:94;;26420:1;26327:94;;;26365:52;13567:4;26366:25;26377:13;;26366:6;:10;;:25;;;;:::i;26365:52::-;26507:18;;-1:-1:-1;;;;;26477:15:0;;26436:16;26477:15;;;:9;:15;;;;;:25;;;26304:117;;-1:-1:-1;26436:16:0;26455:48;;26456:15;;26455:21;:48::i;:::-;:70;;:267;;26640:24;;-1:-1:-1;;;;;26610:15:0;;;;;;:9;:15;;;;;:25;;;26588:48;;26589:15;;26588:21;:48::i;:::-;:76;;:134;;26721:1;26455:267;;26588:134;26667:51;13567:4;26668:24;26679:12;;26668:6;:10;;:24;;;;:::i;26667:51::-;26455:267;;;26528:45;13567:4;26529:18;26540:6;;26529;:10;;:18;;;;:::i;26528:45::-;26436:286;-1:-1:-1;26436:286:0;26807:15;26778:26;26790:14;26778:9;:26;:::i;:::-;:44;;;;:::i;:::-;:58;;;;:::i;:::-;26766:70;-1:-1:-1;26869:95:0;26952:11;26934:15;26917:14;26884:30;26901:13;26884:14;:30;:::i;:::-;:47;;;;:::i;:::-;:65;;;;:::i;:::-;:79;;;;:::i;:::-;26869:9;;:13;:95::i;:::-;27008:26;;26851:113;;-1:-1:-1;27008:47:0;;26851:113;27008:30;:47::i;:::-;26979:26;:76;27087:57;27106:37;:9;27120:22;27106:13;:37::i;:::-;27087:14;;:18;:57::i;:::-;27070:74;;25651:1520;;;25598:1573;27191:11;;;;;;;:19;;27206:4;27191:19;:32;;;;;27214:4;;27222:1;27214:9;;27191:32;27188:753;;;27257:8;;-1:-1:-1;;;;;27247:18:0;;;27257:8;;27247:18;;:44;;-1:-1:-1;27283:8:0;;-1:-1:-1;;;;;27269:22:0;;;27283:8;;27269:22;27247:44;27239:53;;;;;;-1:-1:-1;;;;;27314:19:0;;;;;;:13;:19;;;;;;;;:28;;:66;;-1:-1:-1;;;;;;27346:25:0;;;;;;:13;:25;;;;;;;;:34;27314:66;27311:619;;;27423:49;13567:4;27424:22;27435:10;;27424:6;:10;;:22;;;;:::i;27423:49::-;27404:68;;27517:9;27498:16;:28;27495:416;;;27554:27;27584:31;:16;27605:9;27584:20;:31::i;:::-;27554:61;-1:-1:-1;27654:37:0;:9;27554:61;27654:13;:37::i;:::-;27747:26;;27642:49;;-1:-1:-1;27747:54:0;;27778:22;27747:30;:54::i;:::-;27718:26;:83;27845:42;:14;27864:22;27845:18;:42::i;:::-;27828:59;;27527:384;27495:416;27958:16;;;;;;;;:24;;:16;:24;:54;;;;;28011:1;27986:22;:26;27958:54;27955:119;;;28028:34;28036:22;28060:1;28028:7;:34::i;:::-;28089:18;;28086:98;;28119:53;28134:6;28150:4;28157:14;28119;:53::i;:::-;;28086:98;-1:-1:-1;28203:9:0;;24117:4103;-1:-1:-1;;;;;;;;;;;;24117:4103:0:o;21545:590::-;-1:-1:-1;;;;;21646:13:0;;21627:4;21646:13;;;:9;:13;;;;;:21;:26;:44;;;;-1:-1:-1;21682:8:0;;-1:-1:-1;;;;;21676:14:0;;;21682:8;;21676:14;;21646:44;:67;;;;-1:-1:-1;;;;;;21694:19:0;;21708:4;21694:19;;21646:67;21643:127;;;42763:12;:19;;-1:-1:-1;;;;;42738:22:0;;;;;;:13;:22;;;;;:44;;;42793:26;;;;;;;;;;;;;-1:-1:-1;;;;;;42793:26:0;;;;;;21737:19;-1:-1:-1;;;;;21805:13:0;;;;;;:9;:13;;;;;:21;21804:35;;21832:6;21804:27;:35::i;:::-;-1:-1:-1;;;;;21780:13:0;;;;;;:9;:13;;;;;;;;:59;;;;21858:11;:15;;;;;;:65;;21908:15;;;-1:-1:-1;;;;;21883:13:0;;;;;;:9;:13;;;;;;;:21;:40;;21858:65;;;21876:4;21858:65;21850:102;;;;-1:-1:-1;;;21850:102:0;;27026:2:1;21850:102:0;;;27008:21:1;27065:2;27045:18;;;27038:30;-1:-1:-1;;;27084:18:1;;;27077:54;27148:18;;21850:102:0;26824:348:1;21850:102:0;-1:-1:-1;;;;;21963:13:0;;;;;;;:9;:13;;;;;;21989:15;21963:23;;;;:41;;;22015:17;;;;;;;;;;:27;:45;;;;22077:28;;21963:13;;22015:17;-1:-1:-1;;;;;;;;;;;22077:28:0;;;22098:6;1754:25:1;;1742:2;1727:18;;1608:177;35127:4118:0;35197:15;;;;;;35385:21;:6;35396:9;35385:10;:21::i;:::-;35361:45;;35420:14;35437:5;;;;;;;;;-1:-1:-1;;;;;35437:5:0;-1:-1:-1;;;;;35437:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35420:31;;35467:13;35482;35501:5;;;;;;;;;-1:-1:-1;;;;;35501:5:0;-1:-1:-1;;;;;35501:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;35571:8:0;;-1:-1:-1;;;;;35571:8:0;;;35535:23;35561:19;;;:9;:19;;;;;:27;-1:-1:-1;;;;;35466:54:0;;;;-1:-1:-1;35466:54:0;;;;;-1:-1:-1;35561:27:0;35624:4;35606:23;;;;35603:577;;35649:13;35665:6;;;;;;;;;-1:-1:-1;;;;;35665:6:0;-1:-1:-1;;;;;35665:18:0;;35684:6;35692:8;35702;35665:46;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35649:62;-1:-1:-1;35730:15:0;35748:43;35782:8;35749:27;35762:13;12604:2;35762;:13;:::i;:::-;35749:8;;:12;:27::i;35748:43::-;35730:61;-1:-1:-1;35822:61:0;35730;35823:43;35843:22;:8;35856;35843:12;:22::i;:::-;35824:13;12604:2;35824;:13;:::i;35822:61::-;35810:73;;35630:277;;35603:577;;;35930:13;35946:6;;;;;;;;;-1:-1:-1;;;;;35946:6:0;-1:-1:-1;;;;;35946:18:0;;35965:6;35973:8;35983;35946:46;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35930:62;-1:-1:-1;36011:15:0;36029:43;36063:8;36030:27;36043:13;12604:2;36043;:13;:::i;:::-;36030:8;;:12;:27::i;36029:43::-;36011:61;-1:-1:-1;36103:61:0;36011;36104:43;36124:22;:8;36137;36124:12;:22::i;36103:61::-;36091:73;;35911:269;;35603:577;36221:1;36204:14;;:18;:41;;;;;36244:1;36226:15;;:19;36204:41;36201:323;;;36282:63;13567:4;36283:36;36304:14;;36283:16;:20;;:36;;;;:::i;36282:63::-;36261:84;;36360:19;36382:64;13567:4;36383:37;36404:15;;36383:16;:20;;:37;;;;:::i;36382:64::-;36478:14;;36360:86;;-1:-1:-1;36478:34:0;;36360:86;36478:18;:34::i;:::-;36461:14;:51;-1:-1:-1;36201:323:0;36555:33;:9;36569:18;36555:13;:33::i;:::-;36534:54;;36620:16;;36602:14;;:34;36599:194;;36696:16;;36673:40;;:18;;:22;:40::i;:::-;36652:61;;36745:36;36764:16;;36745:14;;:18;;:36;;;;:::i;:::-;36728:14;:53;36599:194;36837:18;36816;:39;36813:2199;;;36871:17;36891:42;:18;36914;36891:22;:42::i;:::-;36871:62;;36948:22;37029:25;;37002:24;;36973:26;;:53;;;;:::i;:::-;:81;;;;:::i;:::-;37095:4;37077:24;;;;:9;:24;;;;;:32;36948:106;;-1:-1:-1;37077:53:0;-1:-1:-1;37077:53:0;37069:88;;;;-1:-1:-1;;;37069:88:0;;28016:2:1;37069:88:0;;;27998:21:1;28055:2;28035:18;;;28028:30;-1:-1:-1;;;28074:18:1;;;28067:52;28136:18;;37069:88:0;27814:346:1;37069:88:0;37217:4;37172:23;37199:24;;;:9;:24;;;;;:32;37198:57;;37237:17;37198:38;:57::i;:::-;37172:83;;37299:12;37277:18;:34;37274:1340;;37389:4;37371:24;;;;:9;:24;;;;;:32;37370:52;;37409:12;37370:38;:52::i;:::-;37353:4;37335:24;;;;:9;:24;;;;;;:87;;;;37486:8;;-1:-1:-1;;;;;37486:8:0;37476:19;;;:27;37475:47;;37509:12;37475:33;:47::i;:::-;37455:8;;;-1:-1:-1;;;;;37455:8:0;;;37445:19;;;;:9;:19;;;;;;;;;:77;;;;37574:8;;37550:47;;1754:25:1;;;37574:8:0;;;37567:4;;-1:-1:-1;;;;;;;;;;;37550:47:0;1727:18:1;37550:47:0;;;;;;;37274:1340;;;37670:22;;37667:368;;37775:4;37757:24;;;;:9;:24;;;;;:32;37756:58;;37795:18;37756:38;:58::i;:::-;37739:4;37721:24;;;;:9;:24;;;;;;:93;;;;37883:8;;-1:-1:-1;;;;;37883:8:0;37873:19;;;:27;37872:53;;37906:18;37872:33;:53::i;:::-;37852:8;;;-1:-1:-1;;;;;37852:8:0;;;37842:19;;;;:9;:19;;;;;;;;;:83;;;;37982:8;;37958:53;;1754:25:1;;;37982:8:0;;;37975:4;;-1:-1:-1;;;;;;;;;;;37958:53:0;1727:18:1;37958:53:0;;;;;;;37667:368;12653:13;12604:2;12653;:13;:::i;:::-;12641:26;;:10;:26;:::i;:::-;38058:11;;:24;38055:538;;38120:36;:12;38137:18;38120:16;:36::i;:::-;38107:49;-1:-1:-1;12653:13:0;12604:2;12653;:13;:::i;:::-;12641:26;;:10;:26;:::i;:::-;38182:11;;:27;;38198:10;38182:15;:27::i;:::-;:39;38179:168;;;38276:11;;38262:26;;12653:13;12604:2;12653;:13;:::i;:::-;12641:26;;:10;:26;:::i;:::-;38262:13;;:26::i;:::-;38322:1;38315:4;:8;38249:39;-1:-1:-1;38179:168:0;38383:11;;:27;;38399:10;38383:15;:27::i;:::-;38369:11;:41;38474:8;;-1:-1:-1;;;;;38474:8:0;38464:19;;;;:9;:19;;;;;:27;38463:45;;38497:10;38463:33;:45::i;:::-;38443:8;;-1:-1:-1;;;;;38443:8:0;38433:19;;;;:9;:19;;;;;:75;38055:538;;;38568:1;38561:4;:8;38055:538;36856:1788;;;36813:2199;;;38677:62;38696:42;:18;38719;38696:22;:42::i;:::-;38677:14;;:18;:62::i;:::-;38792:8;;-1:-1:-1;;;;;38792:8:0;38782:19;;;;:9;:19;;;;;:27;38660:79;;-1:-1:-1;38781:49:0;;38660:79;38781:33;:49::i;:::-;38761:8;;-1:-1:-1;;;;;38761:8:0;38751:19;;;;:9;:19;;;;;;:79;;;;38896:4;38878:24;;;:32;38877:54;;38916:14;38877:38;:54::i;:::-;38860:4;38842:24;;;;:9;:24;;;;;;;:89;;;;38960:8;;38951:49;;38860:4;;-1:-1:-1;;;;;38960:8:0;;-1:-1:-1;;;;;;;;;;;38951:49:0;;;38985:14;1754:25:1;;1742:2;1727:18;;1608:177;38951:49:0;;;;;;;;36813:2199;39095:120;;39065:10;;39095:120;;;;39103:8;;39113;;39123:16;;39141:18;;39161;;39182;;39065:10;;39095:120;:::i;:::-;;;;;;;;39031:195;35183:4062;;;;;;;;;;35127:4118;;:::o;39253:2660::-;39338:19;;;;;39489:21;:6;39500:9;39489:10;:21::i;:::-;39465:45;;39525:14;39542:5;;;;;;;;;-1:-1:-1;;;;;39542:5:0;-1:-1:-1;;;;;39542:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39525:31;;39572:13;39587;39606:5;;;;;;;;;-1:-1:-1;;;;;39606:5:0;-1:-1:-1;;;;;39606:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;39675:8:0;;-1:-1:-1;;;;;39675:8:0;;;39639:23;39665:19;;;:9;:19;;;;;:27;-1:-1:-1;;;;;39571:54:0;;;;-1:-1:-1;39571:54:0;;;;;-1:-1:-1;39665:27:0;;39639:23;39767:4;39749:23;;;;39746:572;;39792:15;39810:6;;;;;;;;;-1:-1:-1;;;;;39810:6:0;-1:-1:-1;;;;;39810:19:0;;39830:6;39838:8;39848;39810:47;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39792:65;-1:-1:-1;39889:43:0;39923:8;39890:27;39903:13;12604:2;39903;:13;:::i;39889:43::-;39876:56;-1:-1:-1;39963:62:0;39876:56;39964:44;39984:23;:8;39997:9;39984:12;:23::i;39963:62::-;39951:74;;39773:268;39746:572;;;40063:14;40080:6;;;;;;;;;-1:-1:-1;;;;;40080:6:0;-1:-1:-1;;;;;40080:19:0;;40100:6;40108:8;40118;40080:47;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40063:64;-1:-1:-1;40158:43:0;40192:8;40159:27;40172:13;12604:2;40172;:13;:::i;40158:43::-;40145:56;-1:-1:-1;40231:62:0;40145:56;40232:44;40252:23;:8;40265:9;40252:12;:23::i;40231:62::-;40219:74;;40045:273;39746:572;40366:1;40349:14;;:18;:41;;;;;40389:1;40371:15;;:19;40349:41;40346:353;;;40435:63;13567:4;40436:36;40457:14;;40436:16;:20;;:36;;;;:::i;40435:63::-;40414:84;;40521:19;40543:64;13567:4;40544:37;40565:15;;40544:16;:20;;:37;;;;:::i;40543:64::-;40646:14;;40521:86;;-1:-1:-1;40646:34:0;;40521:86;40646:18;:34::i;:::-;40629:14;:51;-1:-1:-1;40346:353:0;40737:33;:9;40751:18;40737:13;:33::i;:::-;40716:54;;40806:16;;40788:14;;:34;40785:217;;40889:16;;40866:40;;:18;;:22;:40::i;:::-;40845:61;;40946:36;40965:16;;40946:14;;:18;;:36;;;;:::i;:::-;40929:14;:53;40785:217;41044:18;41065:42;:18;41088;41065:22;:42::i;:::-;41044:63;-1:-1:-1;41155:30:0;:18;41178:6;41155:22;:30::i;:::-;41135:8;;-1:-1:-1;;;;;41135:8:0;41125:19;;;;:9;:19;;;;;:60;41217:34;:16;41238:12;41217:20;:34::i;:::-;41200:51;;41266:5;;;;;;;;;-1:-1:-1;;;;;41266:5:0;-1:-1:-1;;;;;41266:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41330:8:0;;-1:-1:-1;;;;;41330:8:0;41320:19;;;;:9;:19;;;;;:48;;;-1:-1:-1;;41388:18:0;;41385:211;;41476:4;41458:24;;;;:9;:24;;;;;:32;41457:54;;41496:14;41457:38;:54::i;:::-;41440:4;41422:24;;;;:9;:24;;;;;;;:89;;;;41540:8;;41531:49;;41440:4;;-1:-1:-1;;;;;41540:8:0;;-1:-1:-1;;;;;;;;;;;41531:49:0;;;41565:14;1754:25:1;;1742:2;1727:18;;1608:177;41531:49:0;;;;;;;;41385:211;41627:20;41650:14;41627:37;;41703:8;;;;;;;;;-1:-1:-1;;;;;41703:8:0;-1:-1:-1;;;;;41686:44:0;41695:6;-1:-1:-1;;;;;41686:44:0;-1:-1:-1;;;;;;;;;;;41713:16:0;41686:44;;;;1754:25:1;;1742:2;1727:18;;1608:177;41686:44:0;;;;;;;;41752:123;41759:8;41769;41780:16;41798:18;41818;41839;41859:15;41752:123;;;;;;;;;;;;:::i;:::-;;;;;;;;41610:282;39324:2589;;;;;;;;;;;39253:2660;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:388::-;1283:6;1291;1344:2;1332:9;1323:7;1319:23;1315:32;1312:52;;;1360:1;1357;1350:12;1312:52;1399:9;1386:23;1418:31;1443:5;1418:31;:::i;:::-;1468:5;-1:-1:-1;1525:2:1;1510:18;;1497:32;1538:33;1497:32;1538:33;:::i;:::-;1590:7;1580:17;;;1215:388;;;;;:::o;1790:367::-;1853:8;1863:6;1917:3;1910:4;1902:6;1898:17;1894:27;1884:55;;1935:1;1932;1925:12;1884:55;-1:-1:-1;1958:20:1;;-1:-1:-1;;;;;1990:30:1;;1987:50;;;2033:1;2030;2023:12;1987:50;2070:4;2062:6;2058:17;2046:29;;2130:3;2123:4;2113:6;2110:1;2106:14;2098:6;2094:27;2090:38;2087:47;2084:67;;;2147:1;2144;2137:12;2084:67;1790:367;;;;;:::o;2162:118::-;2248:5;2241:13;2234:21;2227:5;2224:32;2214:60;;2270:1;2267;2260:12;2285:566;2377:6;2385;2393;2446:2;2434:9;2425:7;2421:23;2417:32;2414:52;;;2462:1;2459;2452:12;2414:52;2502:9;2489:23;-1:-1:-1;;;;;2527:6:1;2524:30;2521:50;;;2567:1;2564;2557:12;2521:50;2606:70;2668:7;2659:6;2648:9;2644:22;2606:70;:::i;:::-;2695:8;;-1:-1:-1;2580:96:1;-1:-1:-1;;2780:2:1;2765:18;;2752:32;2793:28;2752:32;2793:28;:::i;:::-;2840:5;2830:15;;;2285:566;;;;;:::o;2856:247::-;2915:6;2968:2;2956:9;2947:7;2943:23;2939:32;2936:52;;;2984:1;2981;2974:12;2936:52;3023:9;3010:23;3042:31;3067:5;3042:31;:::i;3108:319::-;3310:25;;;3366:2;3351:18;;3344:34;;;;3409:2;3394:18;;3387:34;3298:2;3283:18;;3108:319::o;3432:456::-;3509:6;3517;3525;3578:2;3566:9;3557:7;3553:23;3549:32;3546:52;;;3594:1;3591;3584:12;3546:52;3633:9;3620:23;3652:31;3677:5;3652:31;:::i;:::-;3702:5;-1:-1:-1;3759:2:1;3744:18;;3731:32;3772:33;3731:32;3772:33;:::i;:::-;3432:456;;3824:7;;-1:-1:-1;;;3878:2:1;3863:18;;;;3850:32;;3432:456::o;4082:203::-;-1:-1:-1;;;;;4246:32:1;;;;4228:51;;4216:2;4201:18;;4082:203::o;4290:382::-;4355:6;4363;4416:2;4404:9;4395:7;4391:23;4387:32;4384:52;;;4432:1;4429;4422:12;4384:52;4471:9;4458:23;4490:31;4515:5;4490:31;:::i;:::-;4540:5;-1:-1:-1;4597:2:1;4582:18;;4569:32;4610:30;4569:32;4610:30;:::i;4677:385::-;4763:6;4771;4779;4787;4840:3;4828:9;4819:7;4815:23;4811:33;4808:53;;;4857:1;4854;4847:12;4808:53;-1:-1:-1;;4880:23:1;;;4950:2;4935:18;;4922:32;;-1:-1:-1;5001:2:1;4986:18;;4973:32;;5052:2;5037:18;5024:32;;-1:-1:-1;4677:385:1;-1:-1:-1;4677:385:1:o;5067:908::-;5198:6;5206;5214;5222;5230;5283:2;5271:9;5262:7;5258:23;5254:32;5251:52;;;5299:1;5296;5289:12;5251:52;5338:9;5325:23;5357:31;5382:5;5357:31;:::i;:::-;5407:5;-1:-1:-1;5463:2:1;5448:18;;5435:32;-1:-1:-1;;;;;5516:14:1;;;5513:34;;;5543:1;5540;5533:12;5513:34;5582:70;5644:7;5635:6;5624:9;5620:22;5582:70;:::i;:::-;5671:8;;-1:-1:-1;5556:96:1;-1:-1:-1;5759:2:1;5744:18;;5731:32;;-1:-1:-1;5775:16:1;;;5772:36;;;5804:1;5801;5794:12;5772:36;;5843:72;5907:7;5896:8;5885:9;5881:24;5843:72;:::i;:::-;5067:908;;;;-1:-1:-1;5067:908:1;;-1:-1:-1;5934:8:1;;5817:98;5067:908;-1:-1:-1;;;5067:908:1:o;5980:852::-;6069:6;6077;6085;6093;6101;6109;6162:3;6150:9;6141:7;6137:23;6133:33;6130:53;;;6179:1;6176;6169:12;6130:53;6218:9;6205:23;6237:28;6259:5;6237:28;:::i;:::-;6284:5;-1:-1:-1;6341:2:1;6326:18;;6313:32;6354:30;6313:32;6354:30;:::i;:::-;6403:7;-1:-1:-1;6462:2:1;6447:18;;6434:32;6475:30;6434:32;6475:30;:::i;:::-;6524:7;-1:-1:-1;6583:2:1;6568:18;;6555:32;6596:30;6555:32;6596:30;:::i;:::-;6645:7;-1:-1:-1;6699:3:1;6684:19;;6671:33;;-1:-1:-1;6756:3:1;6741:19;;6728:33;6770:30;6728:33;6770:30;:::i;:::-;6819:7;6809:17;;;5980:852;;;;;;;;:::o;6837:248::-;6905:6;6913;6966:2;6954:9;6945:7;6941:23;6937:32;6934:52;;;6982:1;6979;6972:12;6934:52;-1:-1:-1;;7005:23:1;;;7075:2;7060:18;;;7047:32;;-1:-1:-1;6837:248:1:o;7424:598::-;7510:6;7518;7526;7534;7587:3;7575:9;7566:7;7562:23;7558:33;7555:53;;;7604:1;7601;7594:12;7555:53;7643:9;7630:23;7662:31;7687:5;7662:31;:::i;:::-;7712:5;-1:-1:-1;7769:2:1;7754:18;;7741:32;7782:33;7741:32;7782:33;:::i;:::-;7834:7;-1:-1:-1;7893:2:1;7878:18;;7865:32;7906:33;7865:32;7906:33;:::i;:::-;7424:598;;;;-1:-1:-1;7958:7:1;;8012:2;7997:18;7984:32;;-1:-1:-1;;7424:598:1:o;8027:1218::-;8191:6;8199;8207;8215;8223;8231;8239;8292:3;8280:9;8271:7;8267:23;8263:33;8260:53;;;8309:1;8306;8299:12;8260:53;8349:9;8336:23;-1:-1:-1;;;;;8419:2:1;8411:6;8408:14;8405:34;;;8435:1;8432;8425:12;8405:34;8474:70;8536:7;8527:6;8516:9;8512:22;8474:70;:::i;:::-;8563:8;;-1:-1:-1;8448:96:1;-1:-1:-1;8648:2:1;8633:18;;8620:32;;-1:-1:-1;8661:28:1;8620:32;8661:28;:::i;:::-;8708:5;;-1:-1:-1;8766:2:1;8751:18;;8738:32;;8782:16;;;8779:36;;;8811:1;8808;8801:12;8779:36;8850:72;8914:7;8903:8;8892:9;8888:24;8850:72;:::i;:::-;8941:8;;-1:-1:-1;8824:98:1;-1:-1:-1;9029:2:1;9014:18;;9001:32;;-1:-1:-1;9045:16:1;;;9042:36;;;9074:1;9071;9064:12;9042:36;;9113:72;9177:7;9166:8;9155:9;9151:24;9113:72;:::i;:::-;8027:1218;;;;-1:-1:-1;8027:1218:1;;-1:-1:-1;8027:1218:1;;;;9087:98;;-1:-1:-1;;;8027:1218:1:o;9250:180::-;9309:6;9362:2;9350:9;9341:7;9337:23;9333:32;9330:52;;;9378:1;9375;9368:12;9330:52;-1:-1:-1;9401:23:1;;9250:180;-1:-1:-1;9250:180:1:o;9435:515::-;9527:6;9535;9543;9551;9559;9612:3;9600:9;9591:7;9587:23;9583:33;9580:53;;;9629:1;9626;9619:12;9580:53;9665:9;9652:23;9642:33;;9722:2;9711:9;9707:18;9694:32;9684:42;;9773:2;9762:9;9758:18;9745:32;9735:42;;9824:2;9813:9;9809:18;9796:32;9786:42;;9878:3;9867:9;9863:19;9850:33;9892:28;9914:5;9892:28;:::i;:::-;9939:5;9929:15;;;9435:515;;;;;;;;:::o;9955:304::-;-1:-1:-1;;;;;10185:15:1;;;10167:34;;10237:15;;10232:2;10217:18;;10210:43;10117:2;10102:18;;9955:304::o;10264:184::-;10334:6;10387:2;10375:9;10366:7;10362:23;10358:32;10355:52;;;10403:1;10400;10393:12;10355:52;-1:-1:-1;10426:16:1;;10264:184;-1:-1:-1;10264:184:1:o;10453:353::-;10655:2;10637:21;;;10694:2;10674:18;;;10667:30;10733:31;10728:2;10713:18;;10706:59;10797:2;10782:18;;10453:353::o;10811:127::-;10872:10;10867:3;10863:20;10860:1;10853:31;10903:4;10900:1;10893:15;10927:4;10924:1;10917:15;10943:127;11004:10;10999:3;10995:20;10992:1;10985:31;11035:4;11032:1;11025:15;11059:4;11056:1;11049:15;11075:135;11114:3;11135:17;;;11132:43;;11155:18;;:::i;:::-;-1:-1:-1;11202:1:1;11191:13;;11075:135::o;11215:482::-;11417:2;11399:21;;;11456:2;11436:18;;;11429:30;11495:34;11490:2;11475:18;;11468:62;11566:34;11561:2;11546:18;;11539:62;-1:-1:-1;;;11632:3:1;11617:19;;11610:45;11687:3;11672:19;;11215:482::o;11702:479::-;11904:2;11886:21;;;11943:2;11923:18;;;11916:30;11982:34;11977:2;11962:18;;11955:62;12053:34;12048:2;12033:18;;12026:62;-1:-1:-1;;;12119:3:1;12104:19;;12097:42;12171:3;12156:19;;11702:479::o;12186:347::-;12388:2;12370:21;;;12427:2;12407:18;;;12400:30;-1:-1:-1;;;12461:2:1;12446:18;;12439:53;12524:2;12509:18;;12186:347::o;12538:350::-;12740:2;12722:21;;;12779:2;12759:18;;;12752:30;-1:-1:-1;;;12813:2:1;12798:18;;12791:56;12879:2;12864:18;;12538:350::o;12893:356::-;13095:2;13077:21;;;13114:18;;;13107:30;13173:34;13168:2;13153:18;;13146:62;13240:2;13225:18;;12893:356::o;13254:422::-;13343:1;13386:5;13343:1;13400:270;13421:7;13411:8;13408:21;13400:270;;;13480:4;13476:1;13472:6;13468:17;13462:4;13459:27;13456:53;;;13489:18;;:::i;:::-;13539:7;13529:8;13525:22;13522:55;;;13559:16;;;;13522:55;13638:22;;;;13598:15;;;;13400:270;;;13404:3;13254:422;;;;;:::o;13681:806::-;13730:5;13760:8;13750:80;;-1:-1:-1;13801:1:1;13815:5;;13750:80;13849:4;13839:76;;-1:-1:-1;13886:1:1;13900:5;;13839:76;13931:4;13949:1;13944:59;;;;14017:1;14012:130;;;;13924:218;;13944:59;13974:1;13965:10;;13988:5;;;14012:130;14049:3;14039:8;14036:17;14033:43;;;14056:18;;:::i;:::-;-1:-1:-1;;14112:1:1;14098:16;;14127:5;;13924:218;;14226:2;14216:8;14213:16;14207:3;14201:4;14198:13;14194:36;14188:2;14178:8;14175:16;14170:2;14164:4;14161:12;14157:35;14154:77;14151:159;;;-1:-1:-1;14263:19:1;;;14295:5;;14151:159;14342:34;14367:8;14361:4;14342:34;:::i;:::-;14412:6;14408:1;14404:6;14400:19;14391:7;14388:32;14385:58;;;14423:18;;:::i;:::-;14461:20;;13681:806;-1:-1:-1;;;13681:806:1:o;14492:140::-;14550:5;14579:47;14620:4;14610:8;14606:19;14600:4;14579:47;:::i;14637:168::-;14710:9;;;14741;;14758:15;;;14752:22;;14738:37;14728:71;;14779:18;;:::i;15641:375::-;-1:-1:-1;;;;;15899:15:1;;;15881:34;;15951:15;;;;15946:2;15931:18;;15924:43;15998:2;15983:18;;15976:34;;;;15831:2;15816:18;;15641:375::o;16021:245::-;16088:6;16141:2;16129:9;16120:7;16116:23;16112:32;16109:52;;;16157:1;16154;16147:12;16109:52;16189:9;16183:16;16208:28;16230:5;16208:28;:::i;16271:344::-;16473:2;16455:21;;;16512:2;16492:18;;;16485:30;-1:-1:-1;;;16546:2:1;16531:18;;16524:50;16606:2;16591:18;;16271:344::o;16620:274::-;-1:-1:-1;;;;;16812:32:1;;;;16794:51;;16876:2;16861:18;;16854:34;16782:2;16767:18;;16620:274::o;16899:125::-;16964:9;;;16985:10;;;16982:36;;;16998:18;;:::i;17567:980::-;17829:4;17877:3;17866:9;17862:19;17908:6;17897:9;17890:25;17934:2;17972:6;17967:2;17956:9;17952:18;17945:34;18015:3;18010:2;17999:9;17995:18;17988:31;18039:6;18074;18068:13;18105:6;18097;18090:22;18143:3;18132:9;18128:19;18121:26;;18182:2;18174:6;18170:15;18156:29;;18203:1;18213:195;18227:6;18224:1;18221:13;18213:195;;;18292:13;;-1:-1:-1;;;;;18288:39:1;18276:52;;18383:15;;;;18348:12;;;;18324:1;18242:9;18213:195;;;-1:-1:-1;;;;;;;18464:32:1;;;;18459:2;18444:18;;18437:60;-1:-1:-1;;;18528:3:1;18513:19;18506:35;18425:3;17567:980;-1:-1:-1;;;17567:980:1:o;19580:306::-;19668:6;19676;19684;19737:2;19725:9;19716:7;19712:23;19708:32;19705:52;;;19753:1;19750;19743:12;19705:52;19782:9;19776:16;19766:26;;19832:2;19821:9;19817:18;19811:25;19801:35;;19876:2;19865:9;19861:18;19855:25;19845:35;;19580:306;;;;;:::o;19891:339::-;20093:2;20075:21;;;20132:2;20112:18;;;20105:30;-1:-1:-1;;;20166:2:1;20151:18;;20144:45;20221:2;20206:18;;19891:339::o;21283:251::-;21353:6;21406:2;21394:9;21385:7;21381:23;21377:32;21374:52;;;21422:1;21419;21412:12;21374:52;21454:9;21448:16;21473:31;21498:5;21473:31;:::i;23000:217::-;23040:1;23066;23056:132;;23110:10;23105:3;23101:20;23098:1;23091:31;23145:4;23142:1;23135:15;23173:4;23170:1;23163:15;23056:132;-1:-1:-1;23202:9:1;;23000:217::o;24338:128::-;24405:9;;;24426:11;;;24423:37;;;24440:18;;:::i;27177:177::-;27256:13;;-1:-1:-1;;;;;27298:31:1;;27288:42;;27278:70;;27344:1;27341;27334:12;27359:450;27446:6;27454;27462;27515:2;27503:9;27494:7;27490:23;27486:32;27483:52;;;27531:1;27528;27521:12;27483:52;27554:40;27584:9;27554:40;:::i;:::-;27544:50;;27613:49;27658:2;27647:9;27643:18;27613:49;:::i;:::-;27603:59;;27705:2;27694:9;27690:18;27684:25;27749:10;27742:5;27738:22;27731:5;27728:33;27718:61;;27775:1;27772;27765:12;28165:607;28480:25;;;28536:2;28521:18;;28514:34;;;;28579:2;28564:18;;28557:34;;;;28622:2;28607:18;;28600:34;;;;28665:3;28650:19;;28643:35;28709:3;28694:19;;28687:35;28753:3;28738:19;;28731:35;28467:3;28452:19;;28165:607::o
Swarm Source
ipfs://5468fbc48cf8fbe5eabc749bbbc7ae7ba922a07a8923b6b3b6d1b871a4f07d3b
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.