ETH Price: $2,519.59 (+3.11%)

Token

SAITAMA2.0 (SAITAMA2.0)
 

Overview

Max Total Supply

100,000,000,000 SAITAMA2.0

Holders

7

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,740,735,691.360127263369745768 SAITAMA2.0

Value
$0.00
0x7d317ae1781de1d022c07e073043bf506b4bc6a1
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SAITAMA

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-19
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.13;

interface IERC20 {
	function totalSupply() external view returns (uint256);

	function balanceOf(address account) external view returns (uint256);

	function transfer(address recipient, uint256 amount)
	external
	returns (bool);

	function allowance(address owner, address spender)
	external
	view
	returns (uint256);

	function approve(address spender, uint256 amount) external returns (bool);

	function transferFrom(
		address sender,
		address recipient,
		uint256 amount
	) external returns (bool);

	event Transfer(address indexed from, address indexed to, uint256 value);

	event Approval(
		address indexed owner,
		address indexed spender,
		uint256 value
	);
}

interface IFactory {
	function createPair(address tokenA, address tokenB)
	external
	returns (address pair);

	function getPair(address tokenA, address tokenB)
	external
	view
	returns (address pair);
}

interface IRouter {
	function factory() external pure returns (address);

	function WETH() external pure returns (address);

	function addLiquidityETH(
		address token,
		uint256 amountTokenDesired,
		uint256 amountTokenMin,
		uint256 amountETHMin,
		address to,
		uint256 deadline
	)
	external
	payable
	returns (
		uint256 amountToken,
		uint256 amountETH,
		uint256 liquidity
	);

	function swapExactETHForTokensSupportingFeeOnTransferTokens(
		uint256 amountOutMin,
		address[] calldata path,
		address to,
		uint256 deadline
	) external payable;

	function swapExactTokensForETHSupportingFeeOnTransferTokens(
		uint256 amountIn,
		uint256 amountOutMin,
		address[] calldata path,
		address to,
		uint256 deadline
	) external;
}

library SafeMath {

	function add(uint256 a, uint256 b) internal pure returns (uint256) {
		uint256 c = a + b;
		require(c >= a, "SafeMath: addition overflow");

		return c;
	}

	function sub(uint256 a, uint256 b) internal pure returns (uint256) {
		return sub(a, b, "SafeMath: subtraction overflow");
	}

	function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b <= a, errorMessage);
		uint256 c = a - b;

		return c;
	}

	function mul(uint256 a, uint256 b) internal pure returns (uint256) {
		// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
		// benefit is lost if 'b' is also tested.
		// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
		if (a == 0) {
			return 0;
		}

		uint256 c = a * b;
		require(c / a == b, "SafeMath: multiplication overflow");

		return c;
	}

	function div(uint256 a, uint256 b) internal pure returns (uint256) {
		return div(a, b, "SafeMath: division by zero");
	}

	function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b > 0, errorMessage);
		uint256 c = a / b;
		// assert(a == b * c + a % b); // There is no case in which this doesn't hold

		return c;
	}

	function mod(uint256 a, uint256 b) internal pure returns (uint256) {
		return mod(a, b, "SafeMath: modulo by zero");
	}

	function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b != 0, errorMessage);
		return a % b;
	}
}

library Address {
	function isContract(address account) internal view returns (bool) {
		uint256 size;
		assembly {
			size := extcodesize(account)
		}
		return size > 0;
	}

	function sendValue(address payable recipient, uint256 amount) internal {
		require(
			address(this).balance >= amount,
			"Address: insufficient balance"
		);

		(bool success, ) = recipient.call{value: amount}("");
		require(
			success,
			"Address: unable to send value, recipient may have reverted"
		);
	}

	function functionCall(address target, bytes memory data)
	internal
	returns (bytes memory)
	{
		return functionCall(target, data, "Address: low-level call failed");
	}

	function functionCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		return functionCallWithValue(target, data, 0, errorMessage);
	}

	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value
	) internal returns (bytes memory) {
		return
		functionCallWithValue(
			target,
			data,
			value,
			"Address: low-level call with value failed"
		);
	}

	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(
			address(this).balance >= value,
			"Address: insufficient balance for call"
		);
		require(isContract(target), "Address: call to non-contract");

		(bool success, bytes memory returndata) = target.call{value: value}(
		data
		);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function functionStaticCall(address target, bytes memory data)
	internal
	view
	returns (bytes memory)
	{
		return
		functionStaticCall(
			target,
			data,
			"Address: low-level static call failed"
		);
	}

	function functionStaticCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal view returns (bytes memory) {
		require(isContract(target), "Address: static call to non-contract");

		(bool success, bytes memory returndata) = target.staticcall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function functionDelegateCall(address target, bytes memory data)
	internal
	returns (bytes memory)
	{
		return
		functionDelegateCall(
			target,
			data,
			"Address: low-level delegate call failed"
		);
	}

	function functionDelegateCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(isContract(target), "Address: delegate call to non-contract");

		(bool success, bytes memory returndata) = target.delegatecall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function _verifyCallResult(
		bool success,
		bytes memory returndata,
		string memory errorMessage
	) private pure returns (bytes memory) {
		if (success) {
			return returndata;
		} else {
			if (returndata.length > 0) {
				assembly {
					let returndata_size := mload(returndata)
					revert(add(32, returndata), returndata_size)
				}
			} else {
				revert(errorMessage);
			}
		}
	}
}

abstract contract Context {
		function _msgSender() internal view virtual returns (address) {
		return msg.sender;
	}

	function _msgData() internal view virtual returns (bytes calldata) {
		this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
		return msg.data;
	}
}

contract Ownable is Context {
	address private _owner;

	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

	constructor () {
		address msgSender = _msgSender();
		_owner = msgSender;
		emit OwnershipTransferred(address(0), msgSender);
	}

	function owner() public view returns (address) {
		return _owner;
	}

	modifier onlyOwner() {
		require(_owner == _msgSender(), "Ownable: caller is not the owner");
		_;
	}

	function renounceOwnership() public virtual onlyOwner {
		emit OwnershipTransferred(_owner, address(0));
		_owner = address(0);
	}

	function transferOwnership(address newOwner) public virtual onlyOwner {
		require(newOwner != address(0), "Ownable: new owner is the zero address");
		emit OwnershipTransferred(_owner, newOwner);
		_owner = newOwner;
	}
}

contract SAITAMA is IERC20, Ownable {
	using Address for address;
    using SafeMath for uint256;

	IRouter public uniswapV2Router;
	address public immutable uniswapV2Pair;

	string private constant _name =  "SAITAMA2.0";
	string private constant _symbol = "SAITAMA2.0";
	uint8 private constant _decimals = 18;

	mapping (address => uint256) private _rOwned;
	mapping (address => uint256) private _tOwned;
	mapping (address => mapping (address => uint256)) private _allowances;

	uint256 private constant MAX = ~uint256(0);
	uint256 private constant _tTotal = 100000000000 * 10**18;
	uint256 private _rTotal = (MAX - (MAX % _tTotal));
	uint256 private _tFeeTotal;

	bool public isTradingEnabled;

	// max wallet is 3.0% of initialSupply
	uint256 public maxWalletAmount = _tTotal * 300 / 10000;

    // max tx is 0.33% of initialSupply
	uint256 public maxTxAmount = _tTotal ;

	bool private _swapping;

    // max wallet is 0.025% of initialSupply
	uint256 public minimumTokensBeforeSwap = _tTotal * 250 / 1000000;

    address private dead = 0x000000000000000000000000000000000000dEaD;

	address public liquidityWallet;
    address public marketingWallet;
	address public buyBackWallet;
	address public devWallet;

	struct CustomTaxPeriod {
		bytes23 periodName;
		uint8 blocksInPeriod;
		uint256 timeInPeriod;
		uint8 liquidityFeeOnBuy;
		uint8 liquidityFeeOnSell;
		uint8 marketingFeeOnBuy;
		uint8 marketingFeeOnSell;
        uint8 devFeeOnBuy;
		uint8 devFeeOnSell;
		uint8 buyBackFeeOnBuy;
		uint8 buyBackFeeOnSell;
		uint8 holdersFeeOnBuy;
		uint8 holdersFeeOnSell;
	}

	// Base taxes
	CustomTaxPeriod private _base = CustomTaxPeriod('base',0,0,1,1,3,3,2,2,2,2,2,2);

    uint256 private constant _blockedTimeLimit = 259200;
    uint256 private _launchBlockNumber;
    uint256 private _launchTimestamp;
    mapping (address => bool) private _isBlocked;
	mapping (address => bool) private _isExcludedFromFee;
	mapping (address => bool) private _isExcludedFromMaxWalletLimit;
	mapping (address => bool) private _isExcludedFromMaxTransactionLimit;
	mapping (address => bool) public automatedMarketMakerPairs;
    mapping (address => bool) private _isExcludedFromDividends;
	mapping (address => bool) private _isAllowedToTradeWhenDisabled;
    address[] private _excludedFromDividends;

	uint8 private _liquidityFee;
	uint8 private _marketingFee;
    uint8 private _devFee;
	uint8 private _buyBackFee;
	uint8 private _holdersFee;
	uint8 private _totalFee;

	event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value);
	event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded);
    event BlockedAccountChange(address indexed holder, bool indexed status);
	event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress);
	event WalletChange(string indexed indentifier, address indexed newWallet, address indexed oldWallet);
	event FeeChange(string indexed identifier, uint8 liquidityFee, uint8 marketingFee, uint8 devFee, uint8 buyBackFee, uint8 holdersFee);
	event CustomTaxPeriodChange(uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period);
	event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
	event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
    event ExcludeFromDividendsChange(address indexed account, bool isExcluded);
	event ExcludeFromFeesChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
	event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue);
	event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity);
	event ClaimETHOverflow(uint256 amount);
	event FeesApplied(uint8 liquidityFee, uint8 marketingFee, uint8 devFee, uint8 buyBackFee, uint8 holdersFee, uint8 totalFee);

	constructor() {
		liquidityWallet = owner();
		marketingWallet = owner();
		buyBackWallet = owner();
        devWallet = owner();

		IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
		address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair(
			address(this),
			_uniswapV2Router.WETH()
		);
        uniswapV2Router = _uniswapV2Router;
		uniswapV2Pair = _uniswapV2Pair;
		_setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFee[owner()] = true;
		_isExcludedFromFee[address(this)] = true;

        excludeFromDividends(address(this), true);
		excludeFromDividends(address(dead), true);
		excludeFromDividends(address(_uniswapV2Router), true);

		_isAllowedToTradeWhenDisabled[owner()] = true;
		_isAllowedToTradeWhenDisabled[address(this)] = true;

		_isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
		_isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
		_isExcludedFromMaxWalletLimit[address(this)] = true;
		_isExcludedFromMaxWalletLimit[owner()] = true;

        _isExcludedFromMaxTransactionLimit[address(this)] = true;
		_isExcludedFromMaxTransactionLimit[address(dead)] = true;
		_isExcludedFromMaxTransactionLimit[owner()] = true;

		_rOwned[owner()] = _rTotal;
		emit Transfer(address(0), owner(), _tTotal);
	}

	receive() external payable {}

	// Setters
	function transfer(address recipient, uint256 amount) external override returns (bool) {
		_transfer(_msgSender(), recipient, amount);
		return true;
	}
	function approve(address spender, uint256 amount) public override returns (bool) {
		_approve(_msgSender(), spender, amount);
		return true;
	}
	function transferFrom( address sender,address recipient,uint256 amount) external override returns (bool) {
		_transfer(sender, recipient, amount);
		_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount,"ERC20: transfer amount exceeds allowance"));
		return true;
	}
	function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool){
		_approve(_msgSender(),spender,_allowances[_msgSender()][spender].add(addedValue));
		return true;
	}
	function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
		_approve(_msgSender(),spender,_allowances[_msgSender()][spender].sub(subtractedValue,"ERC20: decreased allowance below zero"));
		return true;
	}
	function _approve(address owner,address spender,uint256 amount) private {
		require(owner != address(0), "ERC20: approve from the zero address");
		require(spender != address(0), "ERC20: approve to the zero address");
		_allowances[owner][spender] = amount;
		emit Approval(owner, spender, amount);
	}
	function activateTrading() external onlyOwner {
		isTradingEnabled = true;
        if (_launchTimestamp == 0) {
			_launchTimestamp = block.timestamp;
			_launchBlockNumber = block.number;
		}
	}
	function deactivateTrading() external onlyOwner {
		isTradingEnabled = false;
	}
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
		require(automatedMarketMakerPairs[pair] != value, "SAITAMA2.0: Automated market maker pair is already set to that value");
		automatedMarketMakerPairs[pair] = value;
		emit AutomatedMarketMakerPairChange(pair, value);
	}
    function blockAccount(address account) external onlyOwner {
		require(!_isBlocked[account], "SAITAMA2.0: Account is already blocked");
		require((block.timestamp - _launchTimestamp) < _blockedTimeLimit, "SAITAMA2.0: Time to block accounts has expired");
		_isBlocked[account] = true;
		emit BlockedAccountChange(account, true);
	}
	function unblockAccount(address account) external onlyOwner {
		require(_isBlocked[account], "SAITAMA2.0: Account is not blcoked");
		_isBlocked[account] = false;
		emit BlockedAccountChange(account, false);
	}
	function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
		_isAllowedToTradeWhenDisabled[account] = allowed;
		emit AllowedWhenTradingDisabledChange(account, allowed);
	}
	function excludeFromFees(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromFee[account] != excluded, "Infinite Tsukiyomi: Account is already the value of 'excluded'");
		_isExcludedFromFee[account] = excluded;
		emit ExcludeFromFeesChange(account, excluded);
	}
    function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxWalletLimit[account] != excluded, "Infinite Tsukiyomi: Account is already the value of 'excluded'");
		_isExcludedFromMaxWalletLimit[account] = excluded;
		emit ExcludeFromMaxWalletChange(account, excluded);
	}
	function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxTransactionLimit[account] != excluded, "Infinite Tsukiyomi: Account is already the value of 'excluded'");
		_isExcludedFromMaxTransactionLimit[account] = excluded;
		emit ExcludeFromMaxTransferChange(account, excluded);
	}
	function setWallets(address newLiquidityWallet, address newMarketingWallet, address newDevWallet, address newBuyBackWallet) external onlyOwner {
		if(liquidityWallet != newLiquidityWallet) {
            require(newLiquidityWallet != address(0), "Infinite Tsukiyomi: The liquidityWallet cannot be 0");
			emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet);
			liquidityWallet = newLiquidityWallet;
		}
        if(marketingWallet != newMarketingWallet) {
            require(newMarketingWallet != address(0), "Infinite Tsukiyomi: The marketingWallet cannot be 0");
			emit WalletChange('marketingWallet', newMarketingWallet, marketingWallet);
			marketingWallet = newMarketingWallet;
		}
		if(devWallet != newDevWallet) {
            require(newDevWallet != address(0), "Infinite Tsukiyomi: The devWallet cannot be 0");
			emit WalletChange('devWallet', newDevWallet, devWallet);
			devWallet = newDevWallet;
		}
		if(buyBackWallet != newBuyBackWallet) {
            require(newBuyBackWallet != address(0), "Infinite Tsukiyomi: The buyBackWallet cannot be 0");
			emit WalletChange('buyBackWallet', newBuyBackWallet, buyBackWallet);
			buyBackWallet = newBuyBackWallet;
		}
	}
    // Base fees
	function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy,  uint8 _marketingFeeOnBuy, uint8 _devFeeOnBuy,  uint8 _buyBackFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner {
		_setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _marketingFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _holdersFeeOnBuy);
		emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _marketingFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _holdersFeeOnBuy);
	}
	function setBaseFeesOnSell(uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _devFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _holdersFeeOnSell) external onlyOwner {
		_setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _marketingFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _holdersFeeOnSell);
		emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _marketingFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _holdersFeeOnSell);
	}
	function setMaxWalletAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxWalletAmount, "Infinite Tsukiyomi: Cannot update maxWalletAmount to same value");
		emit MaxWalletAmountChange(newValue, maxWalletAmount);
		maxWalletAmount = newValue;
	}
	function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxTxAmount, "Infinite Tsukiyomi: Cannot update maxTxAmount to same value");
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
	}
	function excludeFromDividends(address account, bool excluded) public onlyOwner {
		require(_isExcludedFromDividends[account] != excluded, "Infinite Tsukiyomi: Account is already the value of 'excluded'");
		if(excluded) {
			if(_rOwned[account] > 0) {
				_tOwned[account] = tokenFromReflection(_rOwned[account]);
			}
			_isExcludedFromDividends[account] = excluded;
			_excludedFromDividends.push(account);
		} else {
			for (uint256 i = 0; i < _excludedFromDividends.length; i++) {
				if (_excludedFromDividends[i] == account) {
					_excludedFromDividends[i] = _excludedFromDividends[_excludedFromDividends.length - 1];
					_tOwned[account] = 0;
					_isExcludedFromDividends[account] = false;
					_excludedFromDividends.pop();
					break;
				}
			}
		}
		emit ExcludeFromDividendsChange(account, excluded);
	}
	function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
		require(newValue != minimumTokensBeforeSwap, "Infinite Tsukiyomi: Cannot update minimumTokensBeforeSwap to same value");
		emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
		minimumTokensBeforeSwap = newValue;
	}
	function claimETHOverflow() external onlyOwner {
		require(address(this).balance > 0, "Infinite Tsukiyomi: Cannot send more than contract balance");
        uint256 amount = address(this).balance;
		(bool success,) = address(owner()).call{value : amount}("");
		if (success){
			emit ClaimETHOverflow(amount);
		}
	}

	// Getters
	function name() external view returns (string memory) {
		return _name;
	}
	function symbol() external view returns (string memory) {
		return _symbol;
	}
	function decimals() external view virtual returns (uint8) {
		return _decimals;
	}
	function totalSupply() external view override returns (uint256) {
		return _tTotal;
	}
	function balanceOf(address account) public view override returns (uint256) {
		if (_isExcludedFromDividends[account]) return _tOwned[account];
		return tokenFromReflection(_rOwned[account]);
	}
	function totalFees() external view returns (uint256) {
		return _tFeeTotal;
	}
	function allowance(address owner, address spender) external view override returns (uint256) {
		return _allowances[owner][spender];
	}
    function getBaseBuyFees() external view returns (uint8, uint8, uint8, uint8, uint8){
		return (_base.liquidityFeeOnBuy, _base.marketingFeeOnBuy, _base.devFeeOnBuy, _base.buyBackFeeOnBuy, _base.holdersFeeOnBuy);
	}
	function getBaseSellFees() external view returns (uint8, uint8, uint8, uint8, uint8){
		return (_base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.devFeeOnSell, _base.buyBackFeeOnSell, _base.holdersFeeOnSell);
	}
	function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
		require(rAmount <= _rTotal, "Infinite Tsukiyomi: Amount must be less than total reflections");
		uint256 currentRate =  _getRate();
		return rAmount / currentRate;
	}
	function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) {
		require(tAmount <= _tTotal, "Infinite Tsukiyomi: Amount must be less than supply");
		uint256 currentRate = _getRate();
		uint256 rAmount  = tAmount * currentRate;
		if (!deductTransferFee) {
			return rAmount;
		}
		else {
			uint256 rTotalFee  = tAmount * _totalFee / 100 * currentRate;
			uint256 rTransferAmount = rAmount - rTotalFee;
			return rTransferAmount;
		}
	}

	// Main
	function _transfer(
	address from,
	address to,
	uint256 amount
	) internal {
		require(from != address(0), "ERC20: transfer from the zero address");
		require(to != address(0), "ERC20: transfer to the zero address");
		require(amount > 0, "Transfer amount must be greater than zero");
		require(amount <= balanceOf(from), "Infinite Tsukiyomi: Cannot transfer more than balance");

		bool isBuyFromLp = automatedMarketMakerPairs[from];
		bool isSelltoLp = automatedMarketMakerPairs[to];

		if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) {
			require(isTradingEnabled, "Infinite Tsukiyomi: Trading is currently disabled.");
            require(!_isBlocked[to], "Infinite Tsukiyomi: Account is blocked");
			require(!_isBlocked[from], "Infinite Tsukiyomi: Account is blocked");
            if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) {
                require(amount <= maxTxAmount, "Infinite Tsukiyomi: Transfer amount exceeds the maxTxAmount.");
            }
			if (!_isExcludedFromMaxWalletLimit[to]) {
				require((balanceOf(to) + amount) <= maxWalletAmount, "Infinite Tsukiyomi: Expected wallet amount exceeds the maxWalletAmount.");
			}
		}

		_adjustTaxes(isBuyFromLp, isSelltoLp);
		bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

		if (
			isTradingEnabled &&
			canSwap &&
			!_swapping &&
			_totalFee > 0 &&
			automatedMarketMakerPairs[to]
		) {
			_swapping = true;
			_swapAndLiquify();
			_swapping = false;
		}

		bool takeFee = !_swapping && isTradingEnabled;

		if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
			takeFee = false;
		}
		_tokenTransfer(from, to, amount, takeFee);
	}
	function _tokenTransfer(address sender,address recipient, uint256 tAmount, bool takeFee) private {
		(uint256 tTransferAmount,uint256 tFee, uint256 tOther) = _getTValues(tAmount, takeFee);
		(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rOther) = _getRValues(tAmount, tFee, tOther, _getRate());

		if (_isExcludedFromDividends[sender]) {
			_tOwned[sender] = _tOwned[sender] - tAmount;
		}
		if (_isExcludedFromDividends[recipient]) {
			_tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
		}
		_rOwned[sender] = _rOwned[sender] - rAmount;
		_rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
		_takeContractFees(rOther, tOther);
		_reflectFee(rFee, tFee);
		emit Transfer(sender, recipient, tTransferAmount);
	}
	function _reflectFee(uint256 rFee, uint256 tFee) private {
		_rTotal -= rFee;
		_tFeeTotal += tFee;
	}
	function _getTValues(uint256 tAmount, bool takeFee) private view returns (uint256,uint256,uint256){
		if (!takeFee) {
			return (tAmount, 0, 0);
		}
		else {
			uint256 tFee = tAmount * _holdersFee / 100;
			uint256 tOther = tAmount * (_liquidityFee + _devFee + _marketingFee + _buyBackFee) / 100;
			uint256 tTransferAmount = tAmount - (tFee + tOther);
			return (tTransferAmount, tFee, tOther);
		}
	}
	function _getRValues(
		uint256 tAmount,
		uint256 tFee,
		uint256 tOther,
		uint256 currentRate
		) private pure returns ( uint256, uint256, uint256, uint256) {
		uint256 rAmount = tAmount * currentRate;
		uint256 rFee = tFee * currentRate;
		uint256 rOther = tOther * currentRate;
		uint256 rTransferAmount = rAmount - (rFee + rOther);
		return (rAmount, rTransferAmount, rFee, rOther);
	}
	function _getRate() private view returns (uint256) {
		(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
		return rSupply.div(tSupply);
	}
	function _getCurrentSupply() private view returns (uint256, uint256) {
		uint256 rSupply = _rTotal;
		uint256 tSupply = _tTotal;
		for (uint256 i = 0; i < _excludedFromDividends.length; i++) {
			if (
				_rOwned[_excludedFromDividends[i]] > rSupply ||
				_tOwned[_excludedFromDividends[i]] > tSupply
			) return (_rTotal, _tTotal);
			rSupply = rSupply - _rOwned[_excludedFromDividends[i]];
			tSupply = tSupply - _tOwned[_excludedFromDividends[i]];
		}
		if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
		return (rSupply, tSupply);
	}
	function _takeContractFees(uint256 rOther, uint256 tOther) private {
		if (_isExcludedFromDividends[address(this)]) {
			_tOwned[address(this)] += tOther;
		}
		_rOwned[address(this)] += rOther;
	}
	function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private {
		_liquidityFee = 0;
		_devFee = 0;
		_marketingFee = 0;
		_buyBackFee = 0;
		_holdersFee = 0;

		if (isBuyFromLp) {
            if ((block.number - _launchBlockNumber) <= 5) {
				_liquidityFee = 100;
			} else {
                _liquidityFee = _base.liquidityFeeOnBuy;
                _devFee = _base.devFeeOnBuy;
                _marketingFee = _base.marketingFeeOnBuy;
                _buyBackFee = _base.buyBackFeeOnBuy;
                _holdersFee = _base.holdersFeeOnBuy;
            }
		}
		if (isSelltoLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
			_devFee = _base.devFeeOnSell;
			_marketingFee = _base.marketingFeeOnSell;
			_buyBackFee = _base.buyBackFeeOnSell;
			_holdersFee = _base.holdersFeeOnSell;

            if (block.timestamp - _launchTimestamp <= 259200) {
                _liquidityFee = 2;
                _devFee = 3;
                _marketingFee = 10;
                _buyBackFee = 8;
                _holdersFee = 2;
            }
		}
		_totalFee = _liquidityFee + _marketingFee + _devFee + _buyBackFee + _holdersFee;
		emit FeesApplied(_liquidityFee, _marketingFee, _devFee, _buyBackFee, _holdersFee, _totalFee);
	}
	function _setCustomSellTaxPeriod(CustomTaxPeriod storage map,
		uint8 _liquidityFeeOnSell,
		uint8 _marketingFeeOnSell,
        uint8 _devFeeOnSell,
		uint8 _buyBackFeeOnSell,
		uint8 _holdersFeeOnSell
	) private {
		if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
			emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, 'liquidityFeeOnSell', map.periodName);
			map.liquidityFeeOnSell = _liquidityFeeOnSell;
		}
		if (map.marketingFeeOnSell != _marketingFeeOnSell) {
			emit CustomTaxPeriodChange(_marketingFeeOnSell, map.marketingFeeOnSell, 'marketingFeeOnSell', map.periodName);
			map.marketingFeeOnSell = _marketingFeeOnSell;
		}
        if (map.devFeeOnSell != _devFeeOnSell) {
			emit CustomTaxPeriodChange(_devFeeOnSell, map.devFeeOnSell, 'devFeeOnSell', map.periodName);
			map.devFeeOnSell = _devFeeOnSell;
		}
		if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
			emit CustomTaxPeriodChange(_buyBackFeeOnSell, map.buyBackFeeOnSell, 'buyBackFeeOnSell', map.periodName);
			map.buyBackFeeOnSell = _buyBackFeeOnSell;
		}
		if (map.holdersFeeOnSell != _holdersFeeOnSell) {
			emit CustomTaxPeriodChange(_holdersFeeOnSell, map.holdersFeeOnSell, 'holdersFeeOnSell', map.periodName);
			map.holdersFeeOnSell = _holdersFeeOnSell;
		}
	}
	function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map,
		uint8 _liquidityFeeOnBuy,
		uint8 _marketingFeeOnBuy,
        uint8 _devFeeOnBuy,
		uint8 _buyBackFeeOnBuy,
		uint8 _holdersFeeOnBuy
	) private {
		if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
			emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, 'liquidityFeeOnBuy', map.periodName);
			map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
		}
		if (map.marketingFeeOnBuy != _marketingFeeOnBuy) {
			emit CustomTaxPeriodChange(_marketingFeeOnBuy, map.marketingFeeOnBuy, 'marketingFeeOnBuy', map.periodName);
			map.marketingFeeOnBuy = _marketingFeeOnBuy;
		}
        if (map.devFeeOnBuy != _devFeeOnBuy) {
			emit CustomTaxPeriodChange(_devFeeOnBuy, map.devFeeOnBuy, 'devFeeOnBuy', map.periodName);
			map.devFeeOnBuy = _devFeeOnBuy;
		}
		if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
			emit CustomTaxPeriodChange(_buyBackFeeOnBuy, map.buyBackFeeOnBuy, 'buyBackFeeOnBuy', map.periodName);
			map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
		}
		if (map.holdersFeeOnBuy != _holdersFeeOnBuy) {
			emit CustomTaxPeriodChange(_holdersFeeOnBuy, map.holdersFeeOnBuy, 'holdersFeeOnBuy', map.periodName);
			map.holdersFeeOnBuy = _holdersFeeOnBuy;
		}
	}
	function _swapAndLiquify() private {
		uint256 contractBalance = balanceOf(address(this));
		uint256 initialETHBalance = address(this).balance;

		uint8 totalFeePrior = _totalFee;
        uint8 liquidityFeePrior = _liquidityFee;
        uint8 marketingFeePrior = _marketingFee;
        uint8 devFeePrior = _devFee;
        uint8 buyBackFeePrior  = _buyBackFee;
		uint8 holdersFeePrior = _holdersFee;

		uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2;
		uint256 amountToSwapForETH = contractBalance - amountToLiquify;

		_swapTokensForETH(amountToSwapForETH);

		uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
		uint256 totalETHFee = totalFeePrior - (liquidityFeePrior / 2) - (holdersFeePrior);
		uint256 amountETHLiquidity = ETHBalanceAfterSwap * liquidityFeePrior / totalETHFee / 2;
		uint256 amountETHDev = ETHBalanceAfterSwap * devFeePrior / totalETHFee;
		uint256 amountETHBuyBack = ETHBalanceAfterSwap * buyBackFeePrior / totalETHFee;
		uint256 amountETHMarketing = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHDev + amountETHBuyBack);

		payable(marketingWallet).transfer(amountETHMarketing);
		payable(devWallet).transfer(amountETHDev);
		payable(buyBackWallet).transfer(amountETHBuyBack);

		if (amountToLiquify > 0) {
			_addLiquidity(amountToLiquify, amountETHLiquidity);
			emit SwapAndLiquify(amountToSwapForETH, amountETHLiquidity, amountToLiquify);
		}
		_totalFee = totalFeePrior;
        _liquidityFee = liquidityFeePrior;
        _marketingFee = marketingFeePrior;
        _devFee = devFeePrior;
        _buyBackFee = buyBackFeePrior;
		_holdersFee = holdersFeePrior;
	}
	function _swapTokensForETH(uint256 tokenAmount) private {
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = uniswapV2Router.WETH();
		_approve(address(this), address(uniswapV2Router), tokenAmount);
		uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
		tokenAmount,
		0, // accept any amount of ETH
		path,
		address(this),
		block.timestamp
		);
	}
	function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
		_approve(address(this), address(uniswapV2Router), tokenAmount);
		uniswapV2Router.addLiquidityETH{value: ethAmount}(
		address(this),
		tokenAmount,
		0, // slippage is unavoidable
		0, // slippage is unavoidable
		liquidityWallet,
		block.timestamp
		);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"devFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"devFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newDevWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526200001f6c01431e0fae6d7217caa000000060001962000d6d565b6200002d9060001962000d9a565b6005556127106200004e6c01431e0fae6d7217caa000000061012c62000db4565b6200005a919062000dd6565b6008556c01431e0fae6d7217caa0000000600955620f42406c01431e0fae6d7217caa000000060fa6200008e919062000db4565b6200009a919062000dd6565b600b55600c80546001600160a01b03191661dead179055604080516101a081018252636261736560e01b81526000602082018190529181018290526001606082018190526080820152600360a0820181905260c0820152600260e08201819052610100820181905261012082018190526101408201819052610160820181905261018090910152601180546001600160c01b031916636261736560981b1790556012556013805469020202020202030301016001600160501b03199091161790553480156200016857600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060008054600d80546001600160a01b039092166001600160a01b03199283168117909155600e8054831682179055600f8054831682179055601080549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000241573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000267919062000ded565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002db919062000ded565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000ded565b600180546001600160a01b0319166001600160a01b03858116919091178255821660805290915062000383908290620005fb565b6001601760006200039c6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553080825260179093522080549092166001908117909255620003ea91620006f9565b600c5462000403906001600160a01b03166001620006f9565b62000410826001620006f9565b6001601c6000620004296000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252601c855283822080548716600190811790915587841683526018958690528483208054881682179055805490931682528382208054871684179055815291822080549094168117909355620004b86000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601993849052828120805486166001908117909155600c54909216815291822080549094168117909355620005266000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600554906002906200056b6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620005986000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6c01431e0fae6d7217caa0000000604051620005eb91815260200190565b60405180910390a3505062000eb8565b6001600160a01b0382166000908152601a602052604090205481151560ff909116151503620006a55760405162461bcd60e51b8152602060048201526044602482018190527f53414954414d41322e303a204175746f6d61746564206d61726b6574206d616b908201527f6572207061697220697320616c72656164792073657420746f20746861742076606482015263616c756560e01b608482015260a4015b60405180910390fd5b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6000546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200069c565b6001600160a01b0382166000908152601b602052604090205481151560ff909116151503620007ed5760405162461bcd60e51b815260206004820152603e60248201527f496e66696e697465205473756b69796f6d693a204163636f756e74206973206160448201527f6c7265616479207468652076616c7565206f6620276578636c7564656427000060648201526084016200069c565b8015620008ba576001600160a01b0382166000908152600260205260409020541562000851576001600160a01b038216600090815260026020526040902054620008379062000a3b565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601b60205260408120805460ff1916841515179055601d805460018101825591527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055620009f1565b60005b601d54811015620009ef57826001600160a01b0316601d8281548110620008e857620008e862000e18565b6000918252602090912001546001600160a01b031603620009da57601d8054620009159060019062000d9a565b8154811062000928576200092862000e18565b600091825260209091200154601d80546001600160a01b03909216918390811062000957576200095762000e18565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601b90925220805460ff19169055601d805480620009b257620009b262000e2e565b600082815260209020810160001990810180546001600160a01b0319169055019055620009ef565b80620009e68162000e44565b915050620008bd565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa98260405162000a2f911515815260200190565b60405180910390a25050565b600060055482111562000ab75760405162461bcd60e51b815260206004820152603e60248201527f496e66696e697465205473756b69796f6d693a20416d6f756e74206d7573742060448201527f6265206c657373207468616e20746f74616c207265666c656374696f6e73000060648201526084016200069c565b600062000ac362000ad8565b905062000ad1818462000dd6565b9392505050565b6000808062000ae662000b0b565b9150915062000b04818362000cd160201b62001e331790919060201c565b9250505090565b60055460009081906c01431e0fae6d7217caa0000000825b601d5481101562000c88578260026000601d848154811062000b495762000b4962000e18565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000bb857508160036000601d848154811062000b915762000b9162000e18565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000bd9575050600554936c01431e0fae6d7217caa00000009350915050565b60026000601d838154811062000bf35762000bf362000e18565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000c24908462000d9a565b925060036000601d838154811062000c405762000c4062000e18565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000c71908362000d9a565b91508062000c7f8162000e44565b91505062000b23565b506c01431e0fae6d7217caa000000060055462000ca6919062000dd6565b82101562000cc8575050600554926c01431e0fae6d7217caa000000092509050565b90939092509050565b600062000ad183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000d1b60201b60201c565b6000818362000d3f5760405162461bcd60e51b81526004016200069c919062000e60565b50600062000d4e848662000dd6565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b60008262000d7f5762000d7f62000d57565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000daf5762000daf62000d84565b500390565b600081600019048311821515161562000dd15762000dd162000d84565b500290565b60008262000de85762000de862000d57565b500490565b60006020828403121562000e0057600080fd5b81516001600160a01b038116811462000ad157600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006001820162000e595762000e5962000d84565b5060010190565b600060208083528351808285015260005b8181101562000e8f5785810183015185820160400152820162000e71565b8181111562000ea2576000604083870101525b50601f01601f1916929092016040019392505050565b608051613e7c62000ed460003960006104e60152613e7c6000f3fe6080604052600436106102815760003560e01c8063781edb3c1161014f578063aa4bde28116100c1578063d2d7ad831161007a578063d2d7ad83146107dd578063d3221576146107f3578063d469801614610813578063dd62ed3e14610833578063f2fde38b14610879578063fe0175351461089957600080fd5b8063aa4bde28146106c6578063aee50b1e146106dc578063b1ba39ea146106fc578063b62496f51461071c578063c02466681461074c578063cd43e2281461076c57600080fd5b80638da5cb5b116101135780638da5cb5b146106285780638ea5220f1461064657806395d89b41146102de5780639fad968314610666578063a457c2d714610686578063a9059cbb146106a657600080fd5b8063781edb3c146105925780637c0a893d146105b257806383672f3e146105d2578063880bcbc1146105f25780638c0b5e221461061257600080fd5b806327a14fc2116101f357806349bd5a5e116101ac57806349bd5a5e146104d45780634d78fdc61461050857806366164f6f1461052857806370a082311461053d578063715018a61461055d57806375f0a8741461057257600080fd5b806327a14fc2146104235780632d83811914610443578063313ce5671461046357806334cf1fea1461047f57806339509351146104945780634549b039146104b457600080fd5b806313114a9d1161024557806313114a9d1461034c5780631694505e1461036b57806318160ddd146103a35780631cd348c0146103c35780631e293c10146103e357806323b872dd1461040357600080fd5b80630483f7a01461028d578063064a59d0146102af57806306fdde03146102de578063095ea7b3146103175780630bd05b691461033757600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a8366004613876565b6108df565b005b3480156102bb57600080fd5b506007546102c99060ff1681565b60405190151581526020015b60405180910390f35b3480156102ea57600080fd5b50604080518082018252600a815269053414954414d41322e360b41b602082015290516102d591906138ab565b34801561032357600080fd5b506102c9610332366004613900565b610b86565b34801561034357600080fd5b506102ad610b9d565b34801561035857600080fd5b506006545b6040519081526020016102d5565b34801561037757600080fd5b5060015461038b906001600160a01b031681565b6040516001600160a01b0390911681526020016102d5565b3480156103af57600080fd5b506c01431e0fae6d7217caa000000061035d565b3480156103cf57600080fd5b50600f5461038b906001600160a01b031681565b3480156103ef57600080fd5b506102ad6103fe36600461392c565b610be9565b34801561040f57600080fd5b506102c961041e366004613945565b610cbd565b34801561042f57600080fd5b506102ad61043e36600461392c565b610d26565b34801561044f57600080fd5b5061035d61045e36600461392c565b610dfa565b34801561046f57600080fd5b50604051601281526020016102d5565b34801561048b57600080fd5b506102ad610e91565b3480156104a057600080fd5b506102c96104af366004613900565b610ec7565b3480156104c057600080fd5b5061035d6104cf366004613986565b610efd565b3480156104e057600080fd5b5061038b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561051457600080fd5b506102ad6105233660046139a9565b610fed565b34801561053457600080fd5b506102ad6110d7565b34801561054957600080fd5b5061035d6105583660046139a9565b61121e565b34801561056957600080fd5b506102ad61127d565b34801561057e57600080fd5b50600e5461038b906001600160a01b031681565b34801561059e57600080fd5b506102ad6105ad366004613876565b6112f1565b3480156105be57600080fd5b506102ad6105cd3660046139a9565b6113b3565b3480156105de57600080fd5b506102ad6105ed3660046139c6565b61151d565b3480156105fe57600080fd5b506102ad61060d366004613876565b6118f5565b34801561061e57600080fd5b5061035d60095481565b34801561063457600080fd5b506000546001600160a01b031661038b565b34801561065257600080fd5b5060105461038b906001600160a01b031681565b34801561067257600080fd5b506102ad610681366004613a33565b6119b7565b34801561069257600080fd5b506102c96106a1366004613900565b611a6e565b3480156106b257600080fd5b506102c96106c1366004613900565b611abd565b3480156106d257600080fd5b5061035d60085481565b3480156106e857600080fd5b506102ad6106f736600461392c565b611aca565b34801561070857600080fd5b506102ad610717366004613a33565b611bae565b34801561072857600080fd5b506102c96107373660046139a9565b601a6020526000908152604090205460ff1681565b34801561075857600080fd5b506102ad610767366004613876565b611c05565b34801561077857600080fd5b5060135460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102d5565b3480156107e957600080fd5b5061035d600b5481565b3480156107ff57600080fd5b506102ad61080e366004613876565b611cc7565b34801561081f57600080fd5b50600d5461038b906001600160a01b031681565b34801561083f57600080fd5b5061035d61084e366004613a98565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561088557600080fd5b506102ad6108943660046139a9565b611d49565b3480156108a557600080fd5b5060135460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166107a9565b6000546001600160a01b031633146109125760405162461bcd60e51b815260040161090990613ad1565b60405180910390fd5b6001600160a01b0382166000908152601b602052604090205481151560ff9091161515036109525760405162461bcd60e51b815260040161090990613b06565b8015610a1a576001600160a01b038216600090815260026020526040902054156109b2576001600160a01b03821660009081526002602052604090205461099890610dfa565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601b60205260408120805460ff1916841515179055601d805460018101825591527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055610b3d565b60005b601d54811015610b3b57826001600160a01b0316601d8281548110610a4457610a44613b63565b6000918252602090912001546001600160a01b031603610b2957601d8054610a6e90600190613b8f565b81548110610a7e57610a7e613b63565b600091825260209091200154601d80546001600160a01b039092169183908110610aaa57610aaa613b63565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601b90925220805460ff19169055601d805480610b0257610b02613ba6565b600082815260209020810160001990810180546001600160a01b0319169055019055610b3b565b80610b3381613bbc565b915050610a1d565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610b7a911515815260200190565b60405180910390a25050565b6000610b93338484611e75565b5060015b92915050565b6000546001600160a01b03163314610bc75760405162461bcd60e51b815260040161090990613ad1565b6007805460ff19166001179055601554600003610be75742601555436014555b565b6000546001600160a01b03163314610c135760405162461bcd60e51b815260040161090990613ad1565b6009548103610c8a5760405162461bcd60e51b815260206004820152603b60248201527f496e66696e697465205473756b69796f6d693a2043616e6e6f7420757064617460448201527f65206d61785478416d6f756e7420746f2073616d652076616c756500000000006064820152608401610909565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610cca848484611f99565b610d1c8433610d1785604051806060016040528060288152602001613dda602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919061250a565b611e75565b5060019392505050565b6000546001600160a01b03163314610d505760405162461bcd60e51b815260040161090990613ad1565b6008548103610dc75760405162461bcd60e51b815260206004820152603f60248201527f496e66696e697465205473756b69796f6d693a2043616e6e6f7420757064617460448201527f65206d617857616c6c6574416d6f756e7420746f2073616d652076616c7565006064820152608401610909565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000600554821115610e745760405162461bcd60e51b815260206004820152603e60248201527f496e66696e697465205473756b69796f6d693a20416d6f756e74206d7573742060448201527f6265206c657373207468616e20746f74616c207265666c656374696f6e7300006064820152608401610909565b6000610e7e612544565b9050610e8a8184613beb565b9392505050565b6000546001600160a01b03163314610ebb5760405162461bcd60e51b815260040161090990613ad1565b6007805460ff19169055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b93918590610d179086612567565b60006c01431e0fae6d7217caa0000000831115610f785760405162461bcd60e51b815260206004820152603360248201527f496e66696e697465205473756b69796f6d693a20416d6f756e74206d757374206044820152726265206c657373207468616e20737570706c7960681b6064820152608401610909565b6000610f82612544565b90506000610f908286613bff565b905083610fa0579150610b979050565b601e546000908390606490610fbf90600160281b900460ff1689613bff565b610fc99190613beb565b610fd39190613bff565b90506000610fe18284613b8f565b9450610b979350505050565b6000546001600160a01b031633146110175760405162461bcd60e51b815260040161090990613ad1565b6001600160a01b03811660009081526016602052604090205460ff1661108a5760405162461bcd60e51b815260206004820152602260248201527f53414954414d41322e303a204163636f756e74206973206e6f7420626c636f6b604482015261195960f21b6064820152608401610909565b6001600160a01b038116600081815260166020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146111015760405162461bcd60e51b815260040161090990613ad1565b600047116111775760405162461bcd60e51b815260206004820152603a60248201527f496e66696e697465205473756b69796f6d693a2043616e6e6f742073656e642060448201527f6d6f7265207468616e20636f6e74726163742062616c616e63650000000000006064820152608401610909565b47600061118c6000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d80600081146111d6576040519150601f19603f3d011682016040523d82523d6000602084013e6111db565b606091505b50509050801561121a576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6001600160a01b0381166000908152601b602052604081205460ff161561125b57506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610b9790610dfa565b6000546001600160a01b031633146112a75760405162461bcd60e51b815260040161090990613ad1565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461131b5760405162461bcd60e51b815260040161090990613ad1565b6001600160a01b03821660009081526018602052604090205481151560ff90911615150361135b5760405162461bcd60e51b815260040161090990613b06565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610b7a565b6000546001600160a01b031633146113dd5760405162461bcd60e51b815260040161090990613ad1565b6001600160a01b03811660009081526016602052604090205460ff16156114555760405162461bcd60e51b815260206004820152602660248201527f53414954414d41322e303a204163636f756e7420697320616c726561647920626044820152651b1bd8dad95960d21b6064820152608401610909565b6203f480601554426114679190613b8f565b106114cb5760405162461bcd60e51b815260206004820152602e60248201527f53414954414d41322e303a2054696d6520746f20626c6f636b206163636f756e60448201526d1d1cc81a185cc8195e1c1a5c995960921b6064820152608401610909565b6001600160a01b038116600081815260166020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146115475760405162461bcd60e51b815260040161090990613ad1565b600d546001600160a01b03858116911614611635576001600160a01b0384166115ce5760405162461bcd60e51b815260206004820152603360248201527f496e66696e697465205473756b69796f6d693a20546865206c6971756964697460448201527207957616c6c65742063616e6e6f74206265203606c1b6064820152608401610909565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f0160405190819003812090600080516020613dba83398151915290600090a4600d80546001600160a01b0319166001600160a01b0386161790555b600e546001600160a01b03848116911614611723576001600160a01b0383166116bc5760405162461bcd60e51b815260206004820152603360248201527f496e66696e697465205473756b69796f6d693a20546865206d61726b6574696e60448201527206757616c6c65742063616e6e6f74206265203606c1b6064820152608401610909565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f0160405190819003812090600080516020613dba83398151915290600090a4600e80546001600160a01b0319166001600160a01b0385161790555b6010546001600160a01b03838116911614611805576001600160a01b0382166117a45760405162461bcd60e51b815260206004820152602d60248201527f496e66696e697465205473756b69796f6d693a205468652064657657616c6c6560448201526c0742063616e6e6f74206265203609c1b6064820152608401610909565b6010546040516819195d95d85b1b195d60ba1b81526001600160a01b039182169184169060090160405190819003812090600080516020613dba83398151915290600090a4601080546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b038281169116146118ef576001600160a01b03811661188a5760405162461bcd60e51b815260206004820152603160248201527f496e66696e697465205473756b69796f6d693a20546865206275794261636b576044820152700616c6c65742063616e6e6f74206265203607c1b6064820152608401610909565b600f546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d0160405190819003812090600080516020613dba83398151915290600090a4600f80546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b0316331461191f5760405162461bcd60e51b815260040161090990613ad1565b6001600160a01b03821660009081526019602052604090205481151560ff90911615150361195f5760405162461bcd60e51b815260040161090990613b06565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610b7a565b6000546001600160a01b031633146119e15760405162461bcd60e51b815260040161090990613ad1565b6119f0601186868686866125c6565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610b933384610d1785604051806060016040528060258152602001613e22602591393360009081526004602090815260408083206001600160a01b038d168452909152902054919061250a565b6000610b93338484611f99565b6000546001600160a01b03163314611af45760405162461bcd60e51b815260040161090990613ad1565b600b548103611b7b5760405162461bcd60e51b815260206004820152604760248201527f496e66696e697465205473756b69796f6d693a2043616e6e6f7420757064617460448201527f65206d696e696d756d546f6b656e734265666f72655377617020746f2073616d606482015266652076616c756560c81b608482015260a401610909565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611bd85760405162461bcd60e51b815260040161090990613ad1565b611be7601186868686866128aa565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611a09565b6000546001600160a01b03163314611c2f5760405162461bcd60e51b815260040161090990613ad1565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503611c6f5760405162461bcd60e51b815260040161090990613b06565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610b7a565b6000546001600160a01b03163314611cf15760405162461bcd60e51b815260040161090990613ad1565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610b7a565b6000546001600160a01b03163314611d735760405162461bcd60e51b815260040161090990613ad1565b6001600160a01b038116611dd85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610909565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e8a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612baa565b6001600160a01b038316611ed75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610909565b6001600160a01b038216611f385760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610909565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ffd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610909565b6001600160a01b03821661205f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610909565b600081116120c15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610909565b6120ca8361121e565b8111156121375760405162461bcd60e51b815260206004820152603560248201527f496e66696e697465205473756b69796f6d693a2043616e6e6f74207472616e73604482015274666572206d6f7265207468616e2062616c616e636560581b6064820152608401610909565b6001600160a01b038084166000818152601a6020908152604080832054948716835280832054938352601c90915290205460ff92831692918216911615801561219957506001600160a01b0384166000908152601c602052604090205460ff16155b156123f75760075460ff1661220b5760405162461bcd60e51b815260206004820152603260248201527f496e66696e697465205473756b69796f6d693a2054726164696e6720697320636044820152713ab93932b73a363c903234b9b0b13632b21760711b6064820152608401610909565b6001600160a01b03841660009081526016602052604090205460ff16156122445760405162461bcd60e51b815260040161090990613c1e565b6001600160a01b03851660009081526016602052604090205460ff161561227d5760405162461bcd60e51b815260040161090990613c1e565b6001600160a01b03841660009081526019602052604090205460ff161580156122bf57506001600160a01b03851660009081526019602052604090205460ff16155b1561233c5760095483111561233c5760405162461bcd60e51b815260206004820152603c60248201527f496e66696e697465205473756b69796f6d693a205472616e7366657220616d6f60448201527f756e74206578636565647320746865206d61785478416d6f756e742e000000006064820152608401610909565b6001600160a01b03841660009081526018602052604090205460ff166123f757600854836123698661121e565b6123739190613c64565b11156123f75760405162461bcd60e51b815260206004820152604760248201527f496e66696e697465205473756b69796f6d693a2045787065637465642077616c60448201527f6c657420616d6f756e74206578636565647320746865206d617857616c6c657460648201526620b6b7bab73a1760c91b608482015260a401610909565b6124018282612bd8565b6000600b5461240f3061121e565b600754911115915060ff1680156124235750805b80156124325750600a5460ff16155b80156124495750601e54600160281b900460ff1615155b801561246d57506001600160a01b0385166000908152601a602052604090205460ff165b1561249257600a805460ff19166001179055612487612e21565b600a805460ff191690555b600a5460009060ff161580156124aa575060075460ff165b6001600160a01b03881660009081526017602052604090205490915060ff16806124ec57506001600160a01b03861660009081526017602052604090205460ff165b156124f5575060005b61250187878784613113565b50505050505050565b6000818484111561252e5760405162461bcd60e51b815260040161090991906138ab565b50600061253b8486613b8f565b95945050505050565b60008060006125516132e4565b90925090506125608282611e33565b9250505090565b6000806125748385613c64565b905083811015610e8a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610909565b600286015460ff86811691161461264757604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613e028339815191529161262d9160481b90613c7c565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff8581166201000090920416146126db57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613e02833981519152916126ba9160481b90613c7c565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b909204161461276e576040516a6465764665654f6e42757960a81b8152600b0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613e028339815191529161274a9160481b90613c7c565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614612807576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613e02833981519152916127e19160481b90613c7c565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b90920416146128a2576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613e028339815191529161287a9160481b90613c7c565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff868116610100909204161461293b57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613e028339815191529161291c9160481b90613c7c565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff858116630100000090920416146129d457604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613e02833981519152916129b19160481b90613c7c565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612a69576040516b19195d91995953db94d95b1b60a21b8152600c0160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613e0283398151915291612a449160481b90613c7c565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612b04576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613e0283398151915291612add9160481b90613c7c565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b90920416146128a2576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613e0283398151915291612b789160481b90613c7c565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b60008183612bcb5760405162461bcd60e51b815260040161090991906138ab565b50600061253b8486613beb565b601e805464ffffffffff191690558115612c8a57600560145443612bfc9190613b8f565b11612c1357601e805460ff19166064179055612c8a565b601354601e805460ff80841662ff00ff1990921691909117600160201b8085048316620100009081029290921763ff00ff00191661010092860484169290920263ff000000191691909117600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8015612d3257601354601e805461010080840460ff90811662ff00ff1990931692909217600160281b8504831662010000021763ff00ff001916630100000080860484169290920263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790556015546203f48090612d179042613b8f565b11612d3257601e805464ffffffffff1916640208030a021790555b601e5460ff600160201b820481169163010000008104821691620100008204811691612d6691610100820481169116613c93565b612d709190613c93565b612d7a9190613c93565b612d849190613c93565b601e805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001611211565b6000612e2c3061121e565b601e54909150479060ff600160281b820481169181811691610100820481169162010000810482169163010000008204811691600160201b9004166000600287612e76888c613bff565b612e809190613beb565b612e8a9190613beb565b90506000612e98828b613b8f565b9050612ea381613491565b6000612eaf8a47613b8f565b9050600084612ebf60028b613cb8565b612ec9908c613cda565b612ed39190613cda565b60ff16905060006002828b60ff1685612eec9190613bff565b612ef69190613beb565b612f009190613beb565b9050600082612f1260ff8b1686613bff565b612f1c9190613beb565b9050600083612f2e60ff8b1687613bff565b612f389190613beb565b9050600081612f478486613c64565b612f519190613c64565b612f5b9087613b8f565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612f96573d6000803e3d6000fd5b506010546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015612fd1573d6000803e3d6000fd5b50600f546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561300c573d6000803e3d6000fd5b50871561305f5761301d88856135e3565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8d601e60056101000a81548160ff021916908360ff1602179055508c601e60006101000a81548160ff021916908360ff1602179055508b601e60016101000a81548160ff021916908360ff1602179055508a601e60026101000a81548160ff021916908360ff16021790555089601e60036101000a81548160ff021916908360ff16021790555088601e60046101000a81548160ff021916908360ff16021790555050505050505050505050505050505050565b60008060006131228585613697565b92509250925060008060008061314189878761313c612544565b613761565b6001600160a01b038f166000908152601b60205260409020549397509195509350915060ff16156131aa576001600160a01b038b16600090815260036020526040902054613190908a90613b8f565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a166000908152601b602052604090205460ff1615613209576001600160a01b038a166000908152600360205260409020546131ef908890613c64565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b1660009081526002602052604090205461322d908590613b8f565b6001600160a01b03808d1660009081526002602052604080822093909355908c168152205461325d908490613c64565b6001600160a01b038b1660009081526002602052604090205561328081866137b9565b61328a828761381e565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040516132cf91815260200190565b60405180910390a35050505050505050505050565b60055460009081906c01431e0fae6d7217caa0000000825b601d5481101561344b578260026000601d848154811061331e5761331e613b63565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061338957508160036000601d848154811061336257613362613b63565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156133a9575050600554936c01431e0fae6d7217caa00000009350915050565b60026000601d83815481106133c0576133c0613b63565b60009182526020808320909101546001600160a01b031683528201929092526040019020546133ef9084613b8f565b925060036000601d838154811061340857613408613b63565b60009182526020808320909101546001600160a01b031683528201929092526040019020546134379083613b8f565b91508061344381613bbc565b9150506132fc565b506c01431e0fae6d7217caa00000006005546134679190613beb565b821015613488575050600554926c01431e0fae6d7217caa000000092509050565b90939092509050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106134c6576134c6613b63565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561351f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135439190613cfd565b8160018151811061355657613556613b63565b6001600160a01b03928316602091820292909201015260015461357c9130911684611e75565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906135b5908590600090869030904290600401613d1a565b600060405180830381600087803b1580156135cf57600080fd5b505af11580156128a2573d6000803e3d6000fd5b6001546135fb9030906001600160a01b031684611e75565b600154600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561366b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136909190613d8b565b5050505050565b6000806000836136af5750839150600090508061375a565b601e546000906064906136cc90600160201b900460ff1688613bff565b6136d69190613beb565b601e5490915060009060649060ff6301000000820481169161010081048216916137099162010000810482169116613c93565b6137139190613c93565b61371d9190613c93565b61372a9060ff1689613bff565b6137349190613beb565b905060006137428284613c64565b61374c9089613b8f565b9550919350915061375a9050565b9250925092565b600080808080613771868a613bff565b9050600061377f878a613bff565b9050600061378d888a613bff565b9050600061379b8284613c64565b6137a59085613b8f565b939c939b5091995097509095505050505050565b306000908152601b602052604090205460ff16156137f65730600090815260036020526040812080548392906137f0908490613c64565b90915550505b3060009081526002602052604081208054849290613815908490613c64565b90915550505050565b81600560008282546138309190613b8f565b9250508190555080600660008282546138159190613c64565b6001600160a01b038116811461385e57600080fd5b50565b8035801515811461387157600080fd5b919050565b6000806040838503121561388957600080fd5b823561389481613849565b91506138a260208401613861565b90509250929050565b600060208083528351808285015260005b818110156138d8578581018301518582016040015282016138bc565b818111156138ea576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561391357600080fd5b823561391e81613849565b946020939093013593505050565b60006020828403121561393e57600080fd5b5035919050565b60008060006060848603121561395a57600080fd5b833561396581613849565b9250602084013561397581613849565b929592945050506040919091013590565b6000806040838503121561399957600080fd5b823591506138a260208401613861565b6000602082840312156139bb57600080fd5b8135610e8a81613849565b600080600080608085870312156139dc57600080fd5b84356139e781613849565b935060208501356139f781613849565b92506040850135613a0781613849565b91506060850135613a1781613849565b939692955090935050565b803560ff8116811461387157600080fd5b600080600080600060a08688031215613a4b57600080fd5b613a5486613a22565b9450613a6260208701613a22565b9350613a7060408701613a22565b9250613a7e60608701613a22565b9150613a8c60808701613a22565b90509295509295909350565b60008060408385031215613aab57600080fd5b8235613ab681613849565b91506020830135613ac681613849565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603e908201527f496e66696e697465205473756b69796f6d693a204163636f756e74206973206160408201527f6c7265616479207468652076616c7565206f6620276578636c75646564270000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613ba157613ba1613b79565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201613bce57613bce613b79565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613bfa57613bfa613bd5565b500490565b6000816000190483118215151615613c1957613c19613b79565b500290565b60208082526026908201527f496e66696e697465205473756b69796f6d693a204163636f756e7420697320626040820152651b1bd8dad95960d21b606082015260800190565b60008219821115613c7757613c77613b79565b500190565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff03821115613cb057613cb0613b79565b019392505050565b600060ff831680613ccb57613ccb613bd5565b8060ff84160491505092915050565b600060ff821660ff841680821015613cf457613cf4613b79565b90039392505050565b600060208284031215613d0f57600080fd5b8151610e8a81613849565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613d6a5784516001600160a01b031683529383019391830191600101613d45565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613da057600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220630c10e51b2f6f1ea742fd9672621ce4d576528879d8f33440a69684a6d528c164736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106102815760003560e01c8063781edb3c1161014f578063aa4bde28116100c1578063d2d7ad831161007a578063d2d7ad83146107dd578063d3221576146107f3578063d469801614610813578063dd62ed3e14610833578063f2fde38b14610879578063fe0175351461089957600080fd5b8063aa4bde28146106c6578063aee50b1e146106dc578063b1ba39ea146106fc578063b62496f51461071c578063c02466681461074c578063cd43e2281461076c57600080fd5b80638da5cb5b116101135780638da5cb5b146106285780638ea5220f1461064657806395d89b41146102de5780639fad968314610666578063a457c2d714610686578063a9059cbb146106a657600080fd5b8063781edb3c146105925780637c0a893d146105b257806383672f3e146105d2578063880bcbc1146105f25780638c0b5e221461061257600080fd5b806327a14fc2116101f357806349bd5a5e116101ac57806349bd5a5e146104d45780634d78fdc61461050857806366164f6f1461052857806370a082311461053d578063715018a61461055d57806375f0a8741461057257600080fd5b806327a14fc2146104235780632d83811914610443578063313ce5671461046357806334cf1fea1461047f57806339509351146104945780634549b039146104b457600080fd5b806313114a9d1161024557806313114a9d1461034c5780631694505e1461036b57806318160ddd146103a35780631cd348c0146103c35780631e293c10146103e357806323b872dd1461040357600080fd5b80630483f7a01461028d578063064a59d0146102af57806306fdde03146102de578063095ea7b3146103175780630bd05b691461033757600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a8366004613876565b6108df565b005b3480156102bb57600080fd5b506007546102c99060ff1681565b60405190151581526020015b60405180910390f35b3480156102ea57600080fd5b50604080518082018252600a815269053414954414d41322e360b41b602082015290516102d591906138ab565b34801561032357600080fd5b506102c9610332366004613900565b610b86565b34801561034357600080fd5b506102ad610b9d565b34801561035857600080fd5b506006545b6040519081526020016102d5565b34801561037757600080fd5b5060015461038b906001600160a01b031681565b6040516001600160a01b0390911681526020016102d5565b3480156103af57600080fd5b506c01431e0fae6d7217caa000000061035d565b3480156103cf57600080fd5b50600f5461038b906001600160a01b031681565b3480156103ef57600080fd5b506102ad6103fe36600461392c565b610be9565b34801561040f57600080fd5b506102c961041e366004613945565b610cbd565b34801561042f57600080fd5b506102ad61043e36600461392c565b610d26565b34801561044f57600080fd5b5061035d61045e36600461392c565b610dfa565b34801561046f57600080fd5b50604051601281526020016102d5565b34801561048b57600080fd5b506102ad610e91565b3480156104a057600080fd5b506102c96104af366004613900565b610ec7565b3480156104c057600080fd5b5061035d6104cf366004613986565b610efd565b3480156104e057600080fd5b5061038b7f000000000000000000000000d9ee0f9bfd6e37a05ab95200320fd072e1da6c4c81565b34801561051457600080fd5b506102ad6105233660046139a9565b610fed565b34801561053457600080fd5b506102ad6110d7565b34801561054957600080fd5b5061035d6105583660046139a9565b61121e565b34801561056957600080fd5b506102ad61127d565b34801561057e57600080fd5b50600e5461038b906001600160a01b031681565b34801561059e57600080fd5b506102ad6105ad366004613876565b6112f1565b3480156105be57600080fd5b506102ad6105cd3660046139a9565b6113b3565b3480156105de57600080fd5b506102ad6105ed3660046139c6565b61151d565b3480156105fe57600080fd5b506102ad61060d366004613876565b6118f5565b34801561061e57600080fd5b5061035d60095481565b34801561063457600080fd5b506000546001600160a01b031661038b565b34801561065257600080fd5b5060105461038b906001600160a01b031681565b34801561067257600080fd5b506102ad610681366004613a33565b6119b7565b34801561069257600080fd5b506102c96106a1366004613900565b611a6e565b3480156106b257600080fd5b506102c96106c1366004613900565b611abd565b3480156106d257600080fd5b5061035d60085481565b3480156106e857600080fd5b506102ad6106f736600461392c565b611aca565b34801561070857600080fd5b506102ad610717366004613a33565b611bae565b34801561072857600080fd5b506102c96107373660046139a9565b601a6020526000908152604090205460ff1681565b34801561075857600080fd5b506102ad610767366004613876565b611c05565b34801561077857600080fd5b5060135460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102d5565b3480156107e957600080fd5b5061035d600b5481565b3480156107ff57600080fd5b506102ad61080e366004613876565b611cc7565b34801561081f57600080fd5b50600d5461038b906001600160a01b031681565b34801561083f57600080fd5b5061035d61084e366004613a98565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561088557600080fd5b506102ad6108943660046139a9565b611d49565b3480156108a557600080fd5b5060135460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166107a9565b6000546001600160a01b031633146109125760405162461bcd60e51b815260040161090990613ad1565b60405180910390fd5b6001600160a01b0382166000908152601b602052604090205481151560ff9091161515036109525760405162461bcd60e51b815260040161090990613b06565b8015610a1a576001600160a01b038216600090815260026020526040902054156109b2576001600160a01b03821660009081526002602052604090205461099890610dfa565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601b60205260408120805460ff1916841515179055601d805460018101825591527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055610b3d565b60005b601d54811015610b3b57826001600160a01b0316601d8281548110610a4457610a44613b63565b6000918252602090912001546001600160a01b031603610b2957601d8054610a6e90600190613b8f565b81548110610a7e57610a7e613b63565b600091825260209091200154601d80546001600160a01b039092169183908110610aaa57610aaa613b63565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601b90925220805460ff19169055601d805480610b0257610b02613ba6565b600082815260209020810160001990810180546001600160a01b0319169055019055610b3b565b80610b3381613bbc565b915050610a1d565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610b7a911515815260200190565b60405180910390a25050565b6000610b93338484611e75565b5060015b92915050565b6000546001600160a01b03163314610bc75760405162461bcd60e51b815260040161090990613ad1565b6007805460ff19166001179055601554600003610be75742601555436014555b565b6000546001600160a01b03163314610c135760405162461bcd60e51b815260040161090990613ad1565b6009548103610c8a5760405162461bcd60e51b815260206004820152603b60248201527f496e66696e697465205473756b69796f6d693a2043616e6e6f7420757064617460448201527f65206d61785478416d6f756e7420746f2073616d652076616c756500000000006064820152608401610909565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610cca848484611f99565b610d1c8433610d1785604051806060016040528060288152602001613dda602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919061250a565b611e75565b5060019392505050565b6000546001600160a01b03163314610d505760405162461bcd60e51b815260040161090990613ad1565b6008548103610dc75760405162461bcd60e51b815260206004820152603f60248201527f496e66696e697465205473756b69796f6d693a2043616e6e6f7420757064617460448201527f65206d617857616c6c6574416d6f756e7420746f2073616d652076616c7565006064820152608401610909565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000600554821115610e745760405162461bcd60e51b815260206004820152603e60248201527f496e66696e697465205473756b69796f6d693a20416d6f756e74206d7573742060448201527f6265206c657373207468616e20746f74616c207265666c656374696f6e7300006064820152608401610909565b6000610e7e612544565b9050610e8a8184613beb565b9392505050565b6000546001600160a01b03163314610ebb5760405162461bcd60e51b815260040161090990613ad1565b6007805460ff19169055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b93918590610d179086612567565b60006c01431e0fae6d7217caa0000000831115610f785760405162461bcd60e51b815260206004820152603360248201527f496e66696e697465205473756b69796f6d693a20416d6f756e74206d757374206044820152726265206c657373207468616e20737570706c7960681b6064820152608401610909565b6000610f82612544565b90506000610f908286613bff565b905083610fa0579150610b979050565b601e546000908390606490610fbf90600160281b900460ff1689613bff565b610fc99190613beb565b610fd39190613bff565b90506000610fe18284613b8f565b9450610b979350505050565b6000546001600160a01b031633146110175760405162461bcd60e51b815260040161090990613ad1565b6001600160a01b03811660009081526016602052604090205460ff1661108a5760405162461bcd60e51b815260206004820152602260248201527f53414954414d41322e303a204163636f756e74206973206e6f7420626c636f6b604482015261195960f21b6064820152608401610909565b6001600160a01b038116600081815260166020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146111015760405162461bcd60e51b815260040161090990613ad1565b600047116111775760405162461bcd60e51b815260206004820152603a60248201527f496e66696e697465205473756b69796f6d693a2043616e6e6f742073656e642060448201527f6d6f7265207468616e20636f6e74726163742062616c616e63650000000000006064820152608401610909565b47600061118c6000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d80600081146111d6576040519150601f19603f3d011682016040523d82523d6000602084013e6111db565b606091505b50509050801561121a576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6001600160a01b0381166000908152601b602052604081205460ff161561125b57506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610b9790610dfa565b6000546001600160a01b031633146112a75760405162461bcd60e51b815260040161090990613ad1565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461131b5760405162461bcd60e51b815260040161090990613ad1565b6001600160a01b03821660009081526018602052604090205481151560ff90911615150361135b5760405162461bcd60e51b815260040161090990613b06565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610b7a565b6000546001600160a01b031633146113dd5760405162461bcd60e51b815260040161090990613ad1565b6001600160a01b03811660009081526016602052604090205460ff16156114555760405162461bcd60e51b815260206004820152602660248201527f53414954414d41322e303a204163636f756e7420697320616c726561647920626044820152651b1bd8dad95960d21b6064820152608401610909565b6203f480601554426114679190613b8f565b106114cb5760405162461bcd60e51b815260206004820152602e60248201527f53414954414d41322e303a2054696d6520746f20626c6f636b206163636f756e60448201526d1d1cc81a185cc8195e1c1a5c995960921b6064820152608401610909565b6001600160a01b038116600081815260166020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146115475760405162461bcd60e51b815260040161090990613ad1565b600d546001600160a01b03858116911614611635576001600160a01b0384166115ce5760405162461bcd60e51b815260206004820152603360248201527f496e66696e697465205473756b69796f6d693a20546865206c6971756964697460448201527207957616c6c65742063616e6e6f74206265203606c1b6064820152608401610909565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f0160405190819003812090600080516020613dba83398151915290600090a4600d80546001600160a01b0319166001600160a01b0386161790555b600e546001600160a01b03848116911614611723576001600160a01b0383166116bc5760405162461bcd60e51b815260206004820152603360248201527f496e66696e697465205473756b69796f6d693a20546865206d61726b6574696e60448201527206757616c6c65742063616e6e6f74206265203606c1b6064820152608401610909565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f0160405190819003812090600080516020613dba83398151915290600090a4600e80546001600160a01b0319166001600160a01b0385161790555b6010546001600160a01b03838116911614611805576001600160a01b0382166117a45760405162461bcd60e51b815260206004820152602d60248201527f496e66696e697465205473756b69796f6d693a205468652064657657616c6c6560448201526c0742063616e6e6f74206265203609c1b6064820152608401610909565b6010546040516819195d95d85b1b195d60ba1b81526001600160a01b039182169184169060090160405190819003812090600080516020613dba83398151915290600090a4601080546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b038281169116146118ef576001600160a01b03811661188a5760405162461bcd60e51b815260206004820152603160248201527f496e66696e697465205473756b69796f6d693a20546865206275794261636b576044820152700616c6c65742063616e6e6f74206265203607c1b6064820152608401610909565b600f546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d0160405190819003812090600080516020613dba83398151915290600090a4600f80546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b0316331461191f5760405162461bcd60e51b815260040161090990613ad1565b6001600160a01b03821660009081526019602052604090205481151560ff90911615150361195f5760405162461bcd60e51b815260040161090990613b06565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610b7a565b6000546001600160a01b031633146119e15760405162461bcd60e51b815260040161090990613ad1565b6119f0601186868686866125c6565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610b933384610d1785604051806060016040528060258152602001613e22602591393360009081526004602090815260408083206001600160a01b038d168452909152902054919061250a565b6000610b93338484611f99565b6000546001600160a01b03163314611af45760405162461bcd60e51b815260040161090990613ad1565b600b548103611b7b5760405162461bcd60e51b815260206004820152604760248201527f496e66696e697465205473756b69796f6d693a2043616e6e6f7420757064617460448201527f65206d696e696d756d546f6b656e734265666f72655377617020746f2073616d606482015266652076616c756560c81b608482015260a401610909565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611bd85760405162461bcd60e51b815260040161090990613ad1565b611be7601186868686866128aa565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611a09565b6000546001600160a01b03163314611c2f5760405162461bcd60e51b815260040161090990613ad1565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503611c6f5760405162461bcd60e51b815260040161090990613b06565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610b7a565b6000546001600160a01b03163314611cf15760405162461bcd60e51b815260040161090990613ad1565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610b7a565b6000546001600160a01b03163314611d735760405162461bcd60e51b815260040161090990613ad1565b6001600160a01b038116611dd85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610909565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e8a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612baa565b6001600160a01b038316611ed75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610909565b6001600160a01b038216611f385760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610909565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ffd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610909565b6001600160a01b03821661205f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610909565b600081116120c15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610909565b6120ca8361121e565b8111156121375760405162461bcd60e51b815260206004820152603560248201527f496e66696e697465205473756b69796f6d693a2043616e6e6f74207472616e73604482015274666572206d6f7265207468616e2062616c616e636560581b6064820152608401610909565b6001600160a01b038084166000818152601a6020908152604080832054948716835280832054938352601c90915290205460ff92831692918216911615801561219957506001600160a01b0384166000908152601c602052604090205460ff16155b156123f75760075460ff1661220b5760405162461bcd60e51b815260206004820152603260248201527f496e66696e697465205473756b69796f6d693a2054726164696e6720697320636044820152713ab93932b73a363c903234b9b0b13632b21760711b6064820152608401610909565b6001600160a01b03841660009081526016602052604090205460ff16156122445760405162461bcd60e51b815260040161090990613c1e565b6001600160a01b03851660009081526016602052604090205460ff161561227d5760405162461bcd60e51b815260040161090990613c1e565b6001600160a01b03841660009081526019602052604090205460ff161580156122bf57506001600160a01b03851660009081526019602052604090205460ff16155b1561233c5760095483111561233c5760405162461bcd60e51b815260206004820152603c60248201527f496e66696e697465205473756b69796f6d693a205472616e7366657220616d6f60448201527f756e74206578636565647320746865206d61785478416d6f756e742e000000006064820152608401610909565b6001600160a01b03841660009081526018602052604090205460ff166123f757600854836123698661121e565b6123739190613c64565b11156123f75760405162461bcd60e51b815260206004820152604760248201527f496e66696e697465205473756b69796f6d693a2045787065637465642077616c60448201527f6c657420616d6f756e74206578636565647320746865206d617857616c6c657460648201526620b6b7bab73a1760c91b608482015260a401610909565b6124018282612bd8565b6000600b5461240f3061121e565b600754911115915060ff1680156124235750805b80156124325750600a5460ff16155b80156124495750601e54600160281b900460ff1615155b801561246d57506001600160a01b0385166000908152601a602052604090205460ff165b1561249257600a805460ff19166001179055612487612e21565b600a805460ff191690555b600a5460009060ff161580156124aa575060075460ff165b6001600160a01b03881660009081526017602052604090205490915060ff16806124ec57506001600160a01b03861660009081526017602052604090205460ff165b156124f5575060005b61250187878784613113565b50505050505050565b6000818484111561252e5760405162461bcd60e51b815260040161090991906138ab565b50600061253b8486613b8f565b95945050505050565b60008060006125516132e4565b90925090506125608282611e33565b9250505090565b6000806125748385613c64565b905083811015610e8a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610909565b600286015460ff86811691161461264757604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613e028339815191529161262d9160481b90613c7c565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff8581166201000090920416146126db57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613e02833981519152916126ba9160481b90613c7c565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b909204161461276e576040516a6465764665654f6e42757960a81b8152600b0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613e028339815191529161274a9160481b90613c7c565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614612807576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613e02833981519152916127e19160481b90613c7c565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b90920416146128a2576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613e028339815191529161287a9160481b90613c7c565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff868116610100909204161461293b57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613e028339815191529161291c9160481b90613c7c565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff858116630100000090920416146129d457604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613e02833981519152916129b19160481b90613c7c565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612a69576040516b19195d91995953db94d95b1b60a21b8152600c0160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613e0283398151915291612a449160481b90613c7c565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612b04576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613e0283398151915291612add9160481b90613c7c565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b90920416146128a2576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613e0283398151915291612b789160481b90613c7c565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b60008183612bcb5760405162461bcd60e51b815260040161090991906138ab565b50600061253b8486613beb565b601e805464ffffffffff191690558115612c8a57600560145443612bfc9190613b8f565b11612c1357601e805460ff19166064179055612c8a565b601354601e805460ff80841662ff00ff1990921691909117600160201b8085048316620100009081029290921763ff00ff00191661010092860484169290920263ff000000191691909117600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8015612d3257601354601e805461010080840460ff90811662ff00ff1990931692909217600160281b8504831662010000021763ff00ff001916630100000080860484169290920263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790556015546203f48090612d179042613b8f565b11612d3257601e805464ffffffffff1916640208030a021790555b601e5460ff600160201b820481169163010000008104821691620100008204811691612d6691610100820481169116613c93565b612d709190613c93565b612d7a9190613c93565b612d849190613c93565b601e805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001611211565b6000612e2c3061121e565b601e54909150479060ff600160281b820481169181811691610100820481169162010000810482169163010000008204811691600160201b9004166000600287612e76888c613bff565b612e809190613beb565b612e8a9190613beb565b90506000612e98828b613b8f565b9050612ea381613491565b6000612eaf8a47613b8f565b9050600084612ebf60028b613cb8565b612ec9908c613cda565b612ed39190613cda565b60ff16905060006002828b60ff1685612eec9190613bff565b612ef69190613beb565b612f009190613beb565b9050600082612f1260ff8b1686613bff565b612f1c9190613beb565b9050600083612f2e60ff8b1687613bff565b612f389190613beb565b9050600081612f478486613c64565b612f519190613c64565b612f5b9087613b8f565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612f96573d6000803e3d6000fd5b506010546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015612fd1573d6000803e3d6000fd5b50600f546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561300c573d6000803e3d6000fd5b50871561305f5761301d88856135e3565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8d601e60056101000a81548160ff021916908360ff1602179055508c601e60006101000a81548160ff021916908360ff1602179055508b601e60016101000a81548160ff021916908360ff1602179055508a601e60026101000a81548160ff021916908360ff16021790555089601e60036101000a81548160ff021916908360ff16021790555088601e60046101000a81548160ff021916908360ff16021790555050505050505050505050505050505050565b60008060006131228585613697565b92509250925060008060008061314189878761313c612544565b613761565b6001600160a01b038f166000908152601b60205260409020549397509195509350915060ff16156131aa576001600160a01b038b16600090815260036020526040902054613190908a90613b8f565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a166000908152601b602052604090205460ff1615613209576001600160a01b038a166000908152600360205260409020546131ef908890613c64565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b1660009081526002602052604090205461322d908590613b8f565b6001600160a01b03808d1660009081526002602052604080822093909355908c168152205461325d908490613c64565b6001600160a01b038b1660009081526002602052604090205561328081866137b9565b61328a828761381e565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040516132cf91815260200190565b60405180910390a35050505050505050505050565b60055460009081906c01431e0fae6d7217caa0000000825b601d5481101561344b578260026000601d848154811061331e5761331e613b63565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061338957508160036000601d848154811061336257613362613b63565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156133a9575050600554936c01431e0fae6d7217caa00000009350915050565b60026000601d83815481106133c0576133c0613b63565b60009182526020808320909101546001600160a01b031683528201929092526040019020546133ef9084613b8f565b925060036000601d838154811061340857613408613b63565b60009182526020808320909101546001600160a01b031683528201929092526040019020546134379083613b8f565b91508061344381613bbc565b9150506132fc565b506c01431e0fae6d7217caa00000006005546134679190613beb565b821015613488575050600554926c01431e0fae6d7217caa000000092509050565b90939092509050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106134c6576134c6613b63565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561351f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135439190613cfd565b8160018151811061355657613556613b63565b6001600160a01b03928316602091820292909201015260015461357c9130911684611e75565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906135b5908590600090869030904290600401613d1a565b600060405180830381600087803b1580156135cf57600080fd5b505af11580156128a2573d6000803e3d6000fd5b6001546135fb9030906001600160a01b031684611e75565b600154600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561366b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136909190613d8b565b5050505050565b6000806000836136af5750839150600090508061375a565b601e546000906064906136cc90600160201b900460ff1688613bff565b6136d69190613beb565b601e5490915060009060649060ff6301000000820481169161010081048216916137099162010000810482169116613c93565b6137139190613c93565b61371d9190613c93565b61372a9060ff1689613bff565b6137349190613beb565b905060006137428284613c64565b61374c9089613b8f565b9550919350915061375a9050565b9250925092565b600080808080613771868a613bff565b9050600061377f878a613bff565b9050600061378d888a613bff565b9050600061379b8284613c64565b6137a59085613b8f565b939c939b5091995097509095505050505050565b306000908152601b602052604090205460ff16156137f65730600090815260036020526040812080548392906137f0908490613c64565b90915550505b3060009081526002602052604081208054849290613815908490613c64565b90915550505050565b81600560008282546138309190613b8f565b9250508190555080600660008282546138159190613c64565b6001600160a01b038116811461385e57600080fd5b50565b8035801515811461387157600080fd5b919050565b6000806040838503121561388957600080fd5b823561389481613849565b91506138a260208401613861565b90509250929050565b600060208083528351808285015260005b818110156138d8578581018301518582016040015282016138bc565b818111156138ea576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561391357600080fd5b823561391e81613849565b946020939093013593505050565b60006020828403121561393e57600080fd5b5035919050565b60008060006060848603121561395a57600080fd5b833561396581613849565b9250602084013561397581613849565b929592945050506040919091013590565b6000806040838503121561399957600080fd5b823591506138a260208401613861565b6000602082840312156139bb57600080fd5b8135610e8a81613849565b600080600080608085870312156139dc57600080fd5b84356139e781613849565b935060208501356139f781613849565b92506040850135613a0781613849565b91506060850135613a1781613849565b939692955090935050565b803560ff8116811461387157600080fd5b600080600080600060a08688031215613a4b57600080fd5b613a5486613a22565b9450613a6260208701613a22565b9350613a7060408701613a22565b9250613a7e60608701613a22565b9150613a8c60808701613a22565b90509295509295909350565b60008060408385031215613aab57600080fd5b8235613ab681613849565b91506020830135613ac681613849565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603e908201527f496e66696e697465205473756b69796f6d693a204163636f756e74206973206160408201527f6c7265616479207468652076616c7565206f6620276578636c75646564270000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613ba157613ba1613b79565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201613bce57613bce613b79565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613bfa57613bfa613bd5565b500490565b6000816000190483118215151615613c1957613c19613b79565b500290565b60208082526026908201527f496e66696e697465205473756b69796f6d693a204163636f756e7420697320626040820152651b1bd8dad95960d21b606082015260800190565b60008219821115613c7757613c77613b79565b500190565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff03821115613cb057613cb0613b79565b019392505050565b600060ff831680613ccb57613ccb613bd5565b8060ff84160491505092915050565b600060ff821660ff841680821015613cf457613cf4613b79565b90039392505050565b600060208284031215613d0f57600080fd5b8151610e8a81613849565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613d6a5784516001600160a01b031683529383019391830191600101613d45565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613da057600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220630c10e51b2f6f1ea742fd9672621ce4d576528879d8f33440a69684a6d528c164736f6c634300080d0033

Deployed Bytecode Sourcemap

7734:25925:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19562:838;;;;;;;;;;-1:-1:-1;19562:838:0;;;;;:::i;:::-;;:::i;:::-;;8420:28;;;;;;;;;;-1:-1:-1;8420:28:0;;;;;;;;;;;800:14:1;;793:22;775:41;;763:2;748:18;8420:28:0;;;;;;;;21063:76;;;;;;;;;;-1:-1:-1;21129:5:0;;;;;;;;;;;-1:-1:-1;;;21129:5:0;;;;21063:76;;;;21129:5;21063:76;:::i;13359:146::-;;;;;;;;;;-1:-1:-1;13359:146:0;;;;;:::i;:::-;;:::i;14573:201::-;;;;;;;;;;;;;:::i;21602:80::-;;;;;;;;;;-1:-1:-1;21667:10:0;;21602:80;;;1895:25:1;;;1883:2;1868:18;21602:80:0;1749:177:1;7838:30:0;;;;;;;;;;-1:-1:-1;7838:30:0;;;;-1:-1:-1;;;;;7838:30:0;;;;;;-1:-1:-1;;;;;2110:32:1;;;2092:51;;2080:2;2065:18;7838:30:0;1931:218:1;21312:88:0;;;;;;;;;;-1:-1:-1;8310:21:0;21312:88;;8928:28;;;;;;;;;;-1:-1:-1;8928:28:0;;;;-1:-1:-1;;;;;8928:28:0;;;19286:273;;;;;;;;;;-1:-1:-1;19286:273:0;;;;;:::i;:::-;;:::i;13508:292::-;;;;;;;;;;-1:-1:-1;13508:292:0;;;;;:::i;:::-;;:::i;19016:267::-;;;;;;;;;;-1:-1:-1;19016:267:0;;;;;:::i;:::-;;:::i;22269:249::-;;;;;;;;;;-1:-1:-1;22269:249:0;;;;;:::i;:::-;;:::i;21225:84::-;;;;;;;;;;-1:-1:-1;21225:84:0;;8050:2;3150:36:1;;3138:2;3123:18;21225:84:0;3008:184:1;14777:82:0;;;;;;;;;;;;;:::i;13803:202::-;;;;;;;;;;-1:-1:-1;13803:202:0;;;;;:::i;:::-;;:::i;22521:490::-;;;;;;;;;;-1:-1:-1;22521:490:0;;;;;:::i;:::-;;:::i;7872:38::-;;;;;;;;;;;;;;;15509:214;;;;;;;;;;-1:-1:-1;15509:214:0;;;;;:::i;:::-;;:::i;20722:323::-;;;;;;;;;;;;;:::i;21403:196::-;;;;;;;;;;-1:-1:-1;21403:196:0;;;;;:::i;:::-;;:::i;7366:133::-;;;;;;;;;;;;;:::i;8894:30::-;;;;;;;;;;-1:-1:-1;8894:30:0;;;;-1:-1:-1;;;;;8894:30:0;;;16230:330;;;;;;;;;;-1:-1:-1;16230:330:0;;;;;:::i;:::-;;:::i;15171:335::-;;;;;;;;;;-1:-1:-1;15171:335:0;;;;;:::i;:::-;;:::i;16913:1218::-;;;;;;;;;;-1:-1:-1;16913:1218:0;;;;;:::i;:::-;;:::i;16563:347::-;;;;;;;;;;-1:-1:-1;16563:347:0;;;;;:::i;:::-;;:::i;8596:36::-;;;;;;;;;;;;;;;;7182:70;;;;;;;;;;-1:-1:-1;7220:7:0;7241:6;-1:-1:-1;;;;;7241:6:0;7182:70;;8960:24;;;;;;;;;;-1:-1:-1;8960:24:0;;;;-1:-1:-1;;;;;8960:24:0;;;18152:421;;;;;;;;;;-1:-1:-1;18152:421:0;;;;;:::i;:::-;;:::i;14008:253::-;;;;;;;;;;-1:-1:-1;14008:253:0;;;;;:::i;:::-;;:::i;13202:154::-;;;;;;;;;;-1:-1:-1;13202:154:0;;;;;:::i;:::-;;:::i;8495:54::-;;;;;;;;;;;;;;;;20403:316;;;;;;;;;;-1:-1:-1;20403:316:0;;;;;:::i;:::-;;:::i;18576:437::-;;;;;;;;;;-1:-1:-1;18576:437:0;;;;;:::i;:::-;;:::i;9852:58::-;;;;;;;;;;-1:-1:-1;9852:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15931:293;;;;;;;;;;-1:-1:-1;15931:293:0;;;;;:::i;:::-;;:::i;21827:215::-;;;;;;;;;;-1:-1:-1;21923:23:0;;;;;;;21948;;;;;;-1:-1:-1;;;21973:17:0;;;;;-1:-1:-1;;;21992:21:0;;;;;-1:-1:-1;;;22015:21:0;;;;21827:215;;;;5277:4:1;5265:17;;;5247:36;;5319:17;;;5314:2;5299:18;;5292:45;5373:17;;;5353:18;;;5346:45;;;;5427:17;;5422:2;5407:18;;5400:45;5482:17;;;5476:3;5461:19;;5454:46;5234:3;5219:19;21827:215:0;5008:498:1;8713:64:0;;;;;;;;;;;;;;;;15726:202;;;;;;;;;;-1:-1:-1;15726:202:0;;;;;:::i;:::-;;:::i;8857:30::-;;;;;;;;;;-1:-1:-1;8857:30:0;;;;-1:-1:-1;;;;;8857:30:0;;;21685:136;;;;;;;;;;-1:-1:-1;21685:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;21789:18:0;;;21768:7;21789:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21685:136;7504:223;;;;;;;;;;-1:-1:-1;7504:223:0;;;;;:::i;:::-;;:::i;22045:221::-;;;;;;;;;;-1:-1:-1;22142:24:0;;;;;;;;;22168;;;;;;-1:-1:-1;;;22194:18:0;;;;;-1:-1:-1;;;22214:22:0;;;;;-1:-1:-1;;;22238:22:0;;;;22045:221;;19562:838;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;19654:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;19646:120:::1;;;;-1:-1:-1::0;;;19646:120:0::1;;;;;;;:::i;:::-;19774:8;19771:570;;;-1:-1:-1::0;;;;;19793:16:0;::::1;19812:1;19793:16:::0;;;:7:::1;:16;::::0;;;;;:20;19790:95:::1;;-1:-1:-1::0;;;;;19861:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;19841:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;19822:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;19790:95:::1;-1:-1:-1::0;;;;;19890:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;19890:44:0::1;::::0;::::1;;;::::0;;19940:22:::1;:36:::0;;-1:-1:-1;19940:36:0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;19940:36:0::1;::::0;;::::1;::::0;;19771:570:::1;;;19999:9;19994:342;20018:22;:29:::0;20014:33;::::1;19994:342;;;20094:7;-1:-1:-1::0;;;;;20065:36:0::1;:22;20088:1;20065:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;20065:25:0::1;:36:::0;20061:269:::1;;20139:22;20162:29:::0;;:33:::1;::::0;20194:1:::1;::::0;20162:33:::1;:::i;:::-;20139:57;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;20111:22:::1;:25:::0;;-1:-1:-1;;;;;20139:57:0;;::::1;::::0;20134:1;;20111:25;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:85:::0;;-1:-1:-1;;;;;;20111:85:0::1;-1:-1:-1::0;;;;;20111:85:0;;::::1;;::::0;;20204:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;20232:24:::1;:33:::0;;;;:41;;-1:-1:-1;;20232:41:0::1;::::0;;20281:22:::1;:28:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20281:28:0;;;;;-1:-1:-1;;;;;;20281:28:0::1;::::0;;;;;20317:5:::1;;20061:269;20049:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19994:342;;;;19771:570;20377:7;-1:-1:-1::0;;;;;20350:45:0::1;;20386:8;20350:45;;;;800:14:1::0;793:22;775:41;;763:2;748:18;;635:187;20350:45:0::1;;;;;;;;19562:838:::0;;:::o;13359:146::-;13434:4;13445:39;6648:10;13468:7;13477:6;13445:8;:39::i;:::-;-1:-1:-1;13496:4:0;13359:146;;;;;:::o;14573:201::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14624:16:::1;:23:::0;;-1:-1:-1;;14624:23:0::1;14643:4;14624:23;::::0;;14662:16:::1;::::0;14624::::1;14662:21:::0;14658:112:::1;;14710:15;14691:16;:34:::0;14752:12:::1;14731:18;:33:::0;14658:112:::1;14573:201::o:0;19286:273::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19381:11:::1;;19369:8;:23:::0;19361:95:::1;;;::::0;-1:-1:-1;;;19361:95:0;;7564:2:1;19361:95:0::1;::::0;::::1;7546:21:1::0;7603:2;7583:18;;;7576:30;7642:34;7622:18;;;7615:62;7713:29;7693:18;;;7686:57;7760:19;;19361:95:0::1;7362:423:1::0;19361:95:0::1;19509:11;::::0;19472:49:::1;::::0;19499:8;;19472:49:::1;::::0;;;::::1;19532:11;:22:::0;19286:273::o;13508:292::-;13607:4;13618:36;13628:6;13636:9;13647:6;13618:9;:36::i;:::-;13659:120;13668:6;6648:10;13690:88;13728:6;13690:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13690:19:0;;;;;;:11;:19;;;;;;;;6648:10;13690:33;;;;;;;;;;:37;:88::i;:::-;13659:8;:120::i;:::-;-1:-1:-1;13791:4:0;13508:292;;;;;:::o;19016:267::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19106:15:::1;;19094:8;:27:::0;19086:103:::1;;;::::0;-1:-1:-1;;;19086:103:0;;7992:2:1;19086:103:0::1;::::0;::::1;7974:21:1::0;8031:2;8011:18;;;8004:30;8070:34;8050:18;;;8043:62;8141:33;8121:18;;;8114:61;8192:19;;19086:103:0::1;7790:427:1::0;19086:103:0::1;19231:15;::::0;19199:48:::1;::::0;19221:8;;19199:48:::1;::::0;;;::::1;19252:15;:26:::0;19016:267::o;22269:249::-;22335:7;22368;;22357;:18;;22349:93;;;;-1:-1:-1;;;22349:93:0;;8424:2:1;22349:93:0;;;8406:21:1;8463:2;8443:18;;;8436:30;8502:34;8482:18;;;8475:62;8573:32;8553:18;;;8546:60;8623:19;;22349:93:0;8222:426:1;22349:93:0;22447:19;22470:10;:8;:10::i;:::-;22447:33;-1:-1:-1;22492:21:0;22447:33;22492:7;:21;:::i;:::-;22485:28;22269:249;-1:-1:-1;;;22269:249:0:o;14777:82::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14830:16:::1;:24:::0;;-1:-1:-1;;14830:24:0::1;::::0;;14777:82::o;13803:202::-;6648:10;13893:4;13933:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13933:34:0;;;;;;;;;;13893:4;;13903:81;;13925:7;;13933:50;;13972:10;13933:38;:50::i;22521:490::-;22614:7;8310:21;22636:7;:18;;22628:82;;;;-1:-1:-1;;;22628:82:0;;9112:2:1;22628:82:0;;;9094:21:1;9151:2;9131:18;;;9124:30;9190:34;9170:18;;;9163:62;-1:-1:-1;;;9241:18:1;;;9234:49;9300:19;;22628:82:0;8910:415:1;22628:82:0;22715:19;22737:10;:8;:10::i;:::-;22715:32;-1:-1:-1;22752:15:0;22771:21;22715:32;22771:7;:21;:::i;:::-;22752:40;;22802:17;22797:210;;22834:7;-1:-1:-1;22827:14:0;;-1:-1:-1;22827:14:0;22797:210;22893:9;;22862:17;;22911:11;;22905:3;;22883:19;;-1:-1:-1;;;22893:9:0;;;;22883:7;:19;:::i;:::-;:25;;;;:::i;:::-;:39;;;;:::i;:::-;22862:60;-1:-1:-1;22928:23:0;22954:19;22862:60;22954:7;:19;:::i;:::-;22928:45;-1:-1:-1;22979:22:0;;-1:-1:-1;;;;22979:22:0;15509:214;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15582:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;15574:66;;;::::0;-1:-1:-1;;;15574:66:0;;9705:2:1;15574:66:0::1;::::0;::::1;9687:21:1::0;9744:2;9724:18;;;9717:30;9783:34;9763:18;;;9756:62;-1:-1:-1;;;9834:18:1;;;9827:32;9876:19;;15574:66:0::1;9503:398:1::0;15574:66:0::1;-1:-1:-1::0;;;;;15645:19:0;::::1;15667:5;15645:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;15645:27:0::1;::::0;;15682:36;15667:5;;15645:19;15682:36:::1;::::0;15667:5;;15682:36:::1;15509:214:::0;:::o;20722:323::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;20806:1:::1;20782:21;:25;20774:96;;;::::0;-1:-1:-1;;;20774:96:0;;10108:2:1;20774:96:0::1;::::0;::::1;10090:21:1::0;10147:2;10127:18;;;10120:30;10186:34;10166:18;;;10159:62;10257:28;10237:18;;;10230:56;10303:19;;20774:96:0::1;9906:422:1::0;20774:96:0::1;20898:21;20881:14;20950:7;7220::::0;7241:6;-1:-1:-1;;;;;7241:6:0;;7182:70;20950:7:::1;-1:-1:-1::0;;;;;20942:21:0::1;20972:6;20942:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20924:59;;;20992:7;20988:53;;;21011:24;::::0;1895:25:1;;;21011:24:0::1;::::0;1883:2:1;1868:18;21011:24:0::1;;;;;;;;20988:53;20769:276;;20722:323::o:0;21403:196::-;-1:-1:-1;;;;;21487:33:0;;21469:7;21487:33;;;:24;:33;;;;;;;;21483:62;;;-1:-1:-1;;;;;;21529:16:0;;;;;:7;:16;;;;;;;21403:196::o;21483:62::-;-1:-1:-1;;;;;21577:16:0;;;;;;:7;:16;;;;;;21557:37;;:19;:37::i;7366:133::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;7467:1:::1;7451:6:::0;;7430:40:::1;::::0;-1:-1:-1;;;;;7451:6:0;;::::1;::::0;7430:40:::1;::::0;7467:1;;7430:40:::1;7492:1;7475:19:::0;;-1:-1:-1;;;;;;7475:19:0::1;::::0;;7366:133::o;16230:330::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16329:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;16321:125:::1;;;;-1:-1:-1::0;;;16321:125:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16451:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;16451:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16510:45;;775:41:1;;;16510:45:0::1;::::0;748:18:1;16510:45:0::1;635:187:1::0;15171:335:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15243:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;15242:20;15234:71;;;::::0;-1:-1:-1;;;15234:71:0;;10745:2:1;15234:71:0::1;::::0;::::1;10727:21:1::0;10784:2;10764:18;;;10757:30;10823:34;10803:18;;;10796:62;-1:-1:-1;;;10874:18:1;;;10867:36;10920:19;;15234:71:0::1;10543:402:1::0;15234:71:0::1;9516:6;15337:16;;15319:15;:34;;;;:::i;:::-;15318:56;15310:115;;;::::0;-1:-1:-1;;;15310:115:0;;11152:2:1;15310:115:0::1;::::0;::::1;11134:21:1::0;11191:2;11171:18;;;11164:30;11230:34;11210:18;;;11203:62;-1:-1:-1;;;11281:18:1;;;11274:44;11335:19;;15310:115:0::1;10950:410:1::0;15310:115:0::1;-1:-1:-1::0;;;;;15430:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;15430:26:0::1;15452:4;15430:26:::0;;::::1;::::0;;;15466:35;;15452:4;;15430:19;15466:35:::1;::::0;::::1;15171:335:::0;:::o;16913:1218::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;17064:15:::1;::::0;-1:-1:-1;;;;;17064:37:0;;::::1;:15:::0;::::1;:37;17061:280;;-1:-1:-1::0;;;;;17126:32:0;::::1;17118:96;;;::::0;-1:-1:-1;;;17118:96:0;;11567:2:1;17118:96:0::1;::::0;::::1;11549:21:1::0;11606:2;11586:18;;;11579:30;11645:34;11625:18;;;11618:62;-1:-1:-1;;;11696:18:1;;;11689:49;11755:19;;17118:96:0::1;11365:415:1::0;17118:96:0::1;17277:15;::::0;17225:68:::1;::::0;-1:-1:-1;;;11987:30:1;;-1:-1:-1;;;;;17277:15:0;;::::1;::::0;17225:68;::::1;::::0;12042:2:1;12033:12;17225:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;17225:68:0;;;::::1;17299:15;:36:::0;;-1:-1:-1;;;;;;17299:36:0::1;-1:-1:-1::0;;;;;17299:36:0;::::1;;::::0;;17061:280:::1;17354:15;::::0;-1:-1:-1;;;;;17354:37:0;;::::1;:15:::0;::::1;:37;17351:280;;-1:-1:-1::0;;;;;17416:32:0;::::1;17408:96;;;::::0;-1:-1:-1;;;17408:96:0;;12258:2:1;17408:96:0::1;::::0;::::1;12240:21:1::0;12297:2;12277:18;;;12270:30;12336:34;12316:18;;;12309:62;-1:-1:-1;;;12387:18:1;;;12380:49;12446:19;;17408:96:0::1;12056:415:1::0;17408:96:0::1;17567:15;::::0;17515:68:::1;::::0;-1:-1:-1;;;12678:30:1;;-1:-1:-1;;;;;17567:15:0;;::::1;::::0;17515:68;::::1;::::0;12733:2:1;12724:12;17515:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;17515:68:0;;;::::1;17589:15;:36:::0;;-1:-1:-1;;;;;;17589:36:0::1;-1:-1:-1::0;;;;;17589:36:0;::::1;;::::0;;17351:280:::1;17638:9;::::0;-1:-1:-1;;;;;17638:25:0;;::::1;:9:::0;::::1;:25;17635:226;;-1:-1:-1::0;;;;;17688:26:0;::::1;17680:84;;;::::0;-1:-1:-1;;;17680:84:0;;12949:2:1;17680:84:0::1;::::0;::::1;12931:21:1::0;12988:2;12968:18;;;12961:30;13027:34;13007:18;;;13000:62;-1:-1:-1;;;13078:18:1;;;13071:43;13131:19;;17680:84:0::1;12747:409:1::0;17680:84:0::1;17815:9;::::0;17775:50:::1;::::0;-1:-1:-1;;;13363:24:1;;-1:-1:-1;;;;;17815:9:0;;::::1;::::0;17775:50;::::1;::::0;13412:1:1;13403:11;17775:50:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;17775:50:0;;;::::1;17831:9;:24:::0;;-1:-1:-1;;;;;;17831:24:0::1;-1:-1:-1::0;;;;;17831:24:0;::::1;;::::0;;17635:226:::1;17868:13;::::0;-1:-1:-1;;;;;17868:33:0;;::::1;:13:::0;::::1;:33;17865:262;;-1:-1:-1::0;;;;;17926:30:0;::::1;17918:92;;;::::0;-1:-1:-1;;;17918:92:0;;13627:2:1;17918:92:0::1;::::0;::::1;13609:21:1::0;13666:2;13646:18;;;13639:30;13705:34;13685:18;;;13678:62;-1:-1:-1;;;13756:18:1;;;13749:47;13813:19;;17918:92:0::1;13425:413:1::0;17918:92:0::1;18069:13;::::0;18021:62:::1;::::0;-1:-1:-1;;;14045:28:1;;-1:-1:-1;;;;;18069:13:0;;::::1;::::0;18021:62;::::1;::::0;14098:2:1;14089:12;18021:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;18021:62:0;;;::::1;18089:13;:32:::0;;-1:-1:-1;;;;;;18089:32:0::1;-1:-1:-1::0;;;;;18089:32:0;::::1;;::::0;;17865:262:::1;16913:1218:::0;;;;:::o;16563:347::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16667:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;16659:130:::1;;;;-1:-1:-1::0;;;16659:130:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16794:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;16794:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16858:47;;775:41:1;;;16858:47:0::1;::::0;748:18:1;16858:47:0::1;635:187:1::0;18152:421:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18324:119:::1;18347:5;18354:18;18374;18394:12;18408:16;18426;18324:22;:119::i;:::-;18453:115;::::0;-1:-1:-1;;;14314:27:1;;14366:2;14357:12;18453:115:0::1;;::::0;;;;;::::1;::::0;;5277:4:1;5265:17;;;5247:36;;5319:17;;;5314:2;5299:18;;5292:45;5373:17;;;5353:18;;;5346:45;5427:17;;;5422:2;5407:18;;5400:45;5482:17;;5476:3;5461:19;;5454:46;18453:115:0;;;;::::1;::::0;;;;;5234:3:1;18453:115:0;;::::1;18152:421:::0;;;;;:::o;14008:253::-;14103:4;14114:126;6648:10;14136:7;14144:95;14183:15;14144:95;;;;;;;;;;;;;;;;;6648:10;14144:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14144:34:0;;;;;;;;;;;;:38;:95::i;13202:154::-;13282:4;13293:42;6648:10;13317:9;13328:6;13293:9;:42::i;20403:316::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;20501:23:::1;;20489:8;:35:::0;20481:119:::1;;;::::0;-1:-1:-1;;;20481:119:0;;14582:2:1;20481:119:0::1;::::0;::::1;14564:21:1::0;14621:2;14601:18;;;14594:30;14660:34;14640:18;;;14633:62;14731:34;14711:18;;;14704:62;-1:-1:-1;;;14782:19:1;;;14775:38;14830:19;;20481:119:0::1;14380:475:1::0;20481:119:0::1;20651:23;::::0;20610:65:::1;::::0;20641:8;;20610:65:::1;::::0;;;::::1;20680:23;:34:::0;20403:316::o;18576:437::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18752:125:::1;18776:5;18783:19;18804;18825:13;18840:17;18859;18752:23;:125::i;:::-;18887:121;::::0;-1:-1:-1;;;15062:28:1;;15115:2;15106:12;18887:121:0::1;14860:264:1::0;15931:293:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16020:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;16012:114:::1;;;;-1:-1:-1::0;;;16012:114:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16131:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;16131:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16179:40;;775:41:1;;;16179:40:0::1;::::0;748:18:1;16179:40:0::1;635:187:1::0;15726:202:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15815:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;15815:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15873:50;;775:41:1;;;15873:50:0::1;::::0;748:18:1;15873:50:0::1;635:187:1::0;7504:223:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7587:22:0;::::1;7579:73;;;::::0;-1:-1:-1;;;7579:73:0;;15331:2:1;7579:73:0::1;::::0;::::1;15313:21:1::0;15370:2;15350:18;;;15343:30;15409:34;15389:18;;;15382:62;-1:-1:-1;;;15460:18:1;;;15453:36;15506:19;;7579:73:0::1;15129:402:1::0;7579:73:0::1;7683:6;::::0;;7662:38:::1;::::0;-1:-1:-1;;;;;7662:38:0;;::::1;::::0;7683:6;::::1;::::0;7662:38:::1;::::0;::::1;7705:6;:17:::0;;-1:-1:-1;;;;;;7705:17:0::1;-1:-1:-1::0;;;;;7705:17:0;;;::::1;::::0;;;::::1;::::0;;7504:223::o;2663:123::-;2721:7;2742:39;2746:1;2749;2742:39;;;;;;;;;;;;;;;;;:3;:39::i;14264:306::-;-1:-1:-1;;;;;14349:19:0;;14341:68;;;;-1:-1:-1;;;14341:68:0;;15738:2:1;14341:68:0;;;15720:21:1;15777:2;15757:18;;;15750:30;15816:34;15796:18;;;15789:62;-1:-1:-1;;;15867:18:1;;;15860:34;15911:19;;14341:68:0;15536:400:1;14341:68:0;-1:-1:-1;;;;;14422:21:0;;14414:68;;;;-1:-1:-1;;;14414:68:0;;16143:2:1;14414:68:0;;;16125:21:1;16182:2;16162:18;;;16155:30;16221:34;16201:18;;;16194:62;-1:-1:-1;;;16272:18:1;;;16265:32;16314:19;;14414:68:0;15941:398:1;14414:68:0;-1:-1:-1;;;;;14487:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14533:32;;1895:25:1;;;14533:32:0;;1868:18:1;14533:32:0;;;;;;;14264:306;;;:::o;23026:1753::-;-1:-1:-1;;;;;23119:18:0;;23111:68;;;;-1:-1:-1;;;23111:68:0;;16546:2:1;23111:68:0;;;16528:21:1;16585:2;16565:18;;;16558:30;16624:34;16604:18;;;16597:62;-1:-1:-1;;;16675:18:1;;;16668:35;16720:19;;23111:68:0;16344:401:1;23111:68:0;-1:-1:-1;;;;;23192:16:0;;23184:64;;;;-1:-1:-1;;;23184:64:0;;16952:2:1;23184:64:0;;;16934:21:1;16991:2;16971:18;;;16964:30;17030:34;17010:18;;;17003:62;-1:-1:-1;;;17081:18:1;;;17074:33;17124:19;;23184:64:0;16750:399:1;23184:64:0;23270:1;23261:6;:10;23253:64;;;;-1:-1:-1;;;23253:64:0;;17356:2:1;23253:64:0;;;17338:21:1;17395:2;17375:18;;;17368:30;17434:34;17414:18;;;17407:62;-1:-1:-1;;;17485:18:1;;;17478:39;17534:19;;23253:64:0;17154:405:1;23253:64:0;23340:15;23350:4;23340:9;:15::i;:::-;23330:6;:25;;23322:91;;;;-1:-1:-1;;;23322:91:0;;17766:2:1;23322:91:0;;;17748:21:1;17805:2;17785:18;;;17778:30;17844:34;17824:18;;;17817:62;-1:-1:-1;;;17895:18:1;;;17888:51;17956:19;;23322:91:0;17564:417:1;23322:91:0;-1:-1:-1;;;;;23439:31:0;;;23420:16;23439:31;;;:25;:31;;;;;;;;;23493:29;;;;;;;;;23533:35;;;:29;:35;;;;;;23439:31;;;;;23493:29;;;;23533:35;23532:36;:74;;;;-1:-1:-1;;;;;;23573:33:0;;;;;;:29;:33;;;;;;;;23572:34;23532:74;23529:744;;;23622:16;;;;23614:79;;;;-1:-1:-1;;;23614:79:0;;18188:2:1;23614:79:0;;;18170:21:1;18227:2;18207:18;;;18200:30;18266:34;18246:18;;;18239:62;-1:-1:-1;;;18317:18:1;;;18310:48;18375:19;;23614:79:0;17986:414:1;23614:79:0;-1:-1:-1;;;;;23717:14:0;;;;;;:10;:14;;;;;;;;23716:15;23708:66;;;;-1:-1:-1;;;23708:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23789:16:0;;;;;;:10;:16;;;;;;;;23788:17;23780:68;;;;-1:-1:-1;;;23780:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23868:38:0;;;;;;:34;:38;;;;;;;;23867:39;:84;;;;-1:-1:-1;;;;;;23911:40:0;;;;;;:34;:40;;;;;;;;23910:41;23867:84;23863:219;;;23990:11;;23980:6;:21;;23972:94;;;;-1:-1:-1;;;23972:94:0;;19014:2:1;23972:94:0;;;18996:21:1;19053:2;19033:18;;;19026:30;19092:34;19072:18;;;19065:62;19163:30;19143:18;;;19136:58;19211:19;;23972:94:0;18812:424:1;23972:94:0;-1:-1:-1;;;;;24092:33:0;;;;;;:29;:33;;;;;;;;24087:181;;24170:15;;24159:6;24143:13;24153:2;24143:9;:13::i;:::-;:22;;;;:::i;:::-;24142:43;;24134:127;;;;-1:-1:-1;;;24134:127:0;;19576:2:1;24134:127:0;;;19558:21:1;19615:2;19595:18;;;19588:30;19654:34;19634:18;;;19627:62;19725:34;19705:18;;;19698:62;-1:-1:-1;;;19776:19:1;;;19769:38;19824:19;;24134:127:0;19374:475:1;24134:127:0;24279:37;24292:11;24305:10;24279:12;:37::i;:::-;24321:12;24364:23;;24336:24;24354:4;24336:9;:24::i;:::-;24403:16;;24336:51;-1:-1:-1;24336:51:0;;-1:-1:-1;24403:16:0;;:31;;;;;24427:7;24403:31;:49;;;;-1:-1:-1;24443:9:0;;;;24442:10;24403:49;:70;;;;-1:-1:-1;24460:9:0;;-1:-1:-1;;;24460:9:0;;;;:13;;24403:70;:107;;;;-1:-1:-1;;;;;;24481:29:0;;;;;;:25;:29;;;;;;;;24403:107;24394:196;;;24522:9;:16;;-1:-1:-1;;24522:16:0;24534:4;24522:16;;;24544:17;:15;:17::i;:::-;24567:9;:17;;-1:-1:-1;;24567:17:0;;;24394:196;24612:9;;24596:12;;24612:9;;24611:10;:30;;;;-1:-1:-1;24625:16:0;;;;24611:30;-1:-1:-1;;;;;24651:24:0;;;;;;:18;:24;;;;;;24596:45;;-1:-1:-1;24651:24:0;;;:50;;-1:-1:-1;;;;;;24679:22:0;;;;;;:18;:22;;;;;;;;24651:50;24648:81;;;-1:-1:-1;24718:5:0;24648:81;24733:41;24748:4;24754:2;24758:6;24766:7;24733:14;:41::i;:::-;23106:1673;;;;23026:1753;;;:::o;2071:171::-;2157:7;2187:12;2179:6;;;;2171:29;;;;-1:-1:-1;;;2171:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2205:9:0;2217:5;2221:1;2217;:5;:::i;:::-;2205:17;2071:171;-1:-1:-1;;;;;2071:171:0:o;26476:149::-;26518:7;26533:15;26550;26569:19;:17;:19::i;:::-;26532:56;;-1:-1:-1;26532:56:0;-1:-1:-1;26600:20:0;26532:56;;26600:11;:20::i;:::-;26593:27;;;;26476:149;:::o;1774:160::-;1832:7;;1858:5;1862:1;1858;:5;:::i;:::-;1846:17;;1881:1;1876;:6;;1868:46;;;;-1:-1:-1;;;1868:46:0;;20056:2:1;1868:46:0;;;20038:21:1;20095:2;20075:18;;;20068:30;20134:29;20114:18;;;20107:57;20181:18;;1868:46:0;19854:351:1;29957:1249:0;30179:21;;;;:43;;;;:21;;:43;30175:215;;30235:101;;-1:-1:-1;;;20412:32:1;;20469:2;20460:12;30235:101:0;;;;;;;;30277:21;;;;30321:14;;30235:101;;30277:21;;;;;30235:101;;;;-1:-1:-1;;;;;;;;;;;30235:101:0;;;30321:14;;;30235:101;:::i;:::-;;;;;;;;30342:21;;;:42;;-1:-1:-1;;30342:42:0;;;;;;;30175:215;30398:21;;;;:43;;;;:21;;;;;:43;30394:215;;30454:101;;-1:-1:-1;;;20899:32:1;;20956:2;20947:12;30454:101:0;;;;;;;;30496:21;;;;30540:14;;30454:101;;30496:21;;;;;;;;30454:101;;;;-1:-1:-1;;;;;;;;;;;30454:101:0;;;30540:14;;;30454:101;:::i;:::-;;;;;;;;30561:21;;;:42;;-1:-1:-1;;30561:42:0;;;;;;;;;30394:215;30623:15;;;;:31;;;;-1:-1:-1;;;30623:15:0;;;;:31;30619:173;;30667:83;;-1:-1:-1;;;21172:26:1;;21223:2;21214:12;30667:83:0;;;;;;;;30703:15;;;;30735:14;;30667:83;;30703:15;-1:-1:-1;;;30703:15:0;;;;;;30667:83;;;;-1:-1:-1;;;;;;;;;;;30667:83:0;;;30735:14;;;30667:83;:::i;:::-;;;;;;;;30756:15;;;:30;;-1:-1:-1;;30756:30:0;-1:-1:-1;;;30756:30:0;;;;;;;30619:173;30800:19;;;;:39;;;;-1:-1:-1;;;30800:19:0;;;;:39;30796:201;;30852:95;;-1:-1:-1;;;21439:30:1;;21494:2;21485:12;30852:95:0;;;;;;;;30892:19;;;;30932:14;;30852:95;;30892:19;-1:-1:-1;;;30892:19:0;;;;;;30852:95;;;;-1:-1:-1;;;;;;;;;;;30852:95:0;;;30932:14;;;30852:95;:::i;:::-;;;;;;;;30953:19;;;:38;;-1:-1:-1;;30953:38:0;-1:-1:-1;;;30953:38:0;;;;;;;30796:201;31005:19;;;;:39;;;;-1:-1:-1;;;31005:19:0;;;;:39;31001:201;;31057:95;;-1:-1:-1;;;21710:30:1;;21765:2;21756:12;31057:95:0;;;;;;;;31097:19;;;;31137:14;;31057:95;;31097:19;-1:-1:-1;;;31097:19:0;;;;;;31057:95;;;;-1:-1:-1;;;;;;;;;;;31057:95:0;;;31137:14;;;31057:95;:::i;:::-;;;;;;;;31158:19;;;:38;;-1:-1:-1;;31158:38:0;-1:-1:-1;;;31158:38:0;;;;;;;31001:201;29957:1249;;;;;;:::o;28664:1290::-;28892:22;;;;:45;;;;:22;;;;;:45;28888:222;;28950:104;;-1:-1:-1;;;21981:33:1;;22039:2;22030:12;28950:104:0;;;;;;;;28993:22;;;;29039:14;;28950:104;;28993:22;;;;;;;;28950:104;;;;-1:-1:-1;;;;;;;;;;;28950:104:0;;;29039:14;;;28950:104;:::i;:::-;;;;;;;;29060:22;;;:44;;-1:-1:-1;;29060:44:0;;;;;;;;;28888:222;29118:22;;;;:45;;;;:22;;;;;:45;29114:222;;29176:104;;-1:-1:-1;;;22255:33:1;;22313:2;22304:12;29176:104:0;;;;;;;;29219:22;;;;29265:14;;29176:104;;29219:22;;;;;;;;29176:104;;;;-1:-1:-1;;;;;;;;;;;29176:104:0;;;29265:14;;;29176:104;:::i;:::-;;;;;;;;29286:22;;;:44;;-1:-1:-1;;29286:44:0;;;;;;;;;29114:222;29350:16;;;;:33;;;;-1:-1:-1;;;29350:16:0;;;;:33;29346:180;;29396:86;;-1:-1:-1;;;22529:27:1;;22581:2;22572:12;29396:86:0;;;;;;;;29433:16;;;;29467:14;;29396:86;;29433:16;-1:-1:-1;;;29433:16:0;;;;;;29396:86;;;;-1:-1:-1;;;;;;;;;;;29396:86:0;;;29467:14;;;29396:86;:::i;:::-;;;;;;;;29488:16;;;:32;;-1:-1:-1;;29488:32:0;-1:-1:-1;;;29488:32:0;;;;;;;29346:180;29534:20;;;;:41;;;;-1:-1:-1;;;29534:20:0;;;;:41;29530:208;;29588:98;;-1:-1:-1;;;22797:31:1;;22853:2;22844:12;29588:98:0;;;;;;;;29629:20;;;;29671:14;;29588:98;;29629:20;-1:-1:-1;;;29629:20:0;;;;;;29588:98;;;;-1:-1:-1;;;;;;;;;;;29588:98:0;;;29671:14;;;29588:98;:::i;:::-;;;;;;;;29692:20;;;:40;;-1:-1:-1;;29692:40:0;-1:-1:-1;;;29692:40:0;;;;;;;29530:208;29746:20;;;;:41;;;;-1:-1:-1;;;29746:20:0;;;;:41;29742:208;;29800:98;;-1:-1:-1;;;23069:31:1;;23125:2;23116:12;29800:98:0;;;;;;;;29841:20;;;;29883:14;;29800:98;;29841:20;-1:-1:-1;;;29841:20:0;;;;;;29800:98;;;;-1:-1:-1;;;;;;;;;;;29800:98:0;;;29883:14;;;29800:98;:::i;:::-;;;;;;;;29904:20;;;:40;;;;;-1:-1:-1;;;29904:40:0;-1:-1:-1;;29904:40:0;;;;;;28664:1290;;;;;;:::o;2791:251::-;2877:7;2906:12;2899:5;2891:28;;;;-1:-1:-1;;;2891:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2924:9:0;2936:5;2940:1;2936;:5;:::i;27398:1263::-;27468:13;:17;;-1:-1:-1;;27548:15:0;;;27570:408;;;;27645:1;27622:18;;27607:12;:33;;;;:::i;:::-;27606:40;27602:371;;27655:13;:19;;-1:-1:-1;;27655:19:0;27671:3;27655:19;;;27602:371;;;27722:23;;27706:13;:39;;27722:23;;;;-1:-1:-1;;27764:27:0;;;;;;;-1:-1:-1;;;27774:17:0;;;;;27764:27;;;;;;;;-1:-1:-1;;27868:35:0;27722:23;27826;;;;;27810:39;;;;-1:-1:-1;;27868:35:0;;;;;-1:-1:-1;;;27882:21:0;;;;27868:35;;;-1:-1:-1;;27922:35:0;-1:-1:-1;;;27936:21:0;;;;;;;27922:35;;;;;;;27602:371;27986:10;27982:494;;;28029:24;;28013:13;:40;;28029:24;;;;;;;;-1:-1:-1;;28059:28:0;;;;;;;-1:-1:-1;;;28069:18:0;;;;28059:28;;;-1:-1:-1;;28139:36:0;28109:24;;;;;;28093:40;;;;-1:-1:-1;;28139:36:0;;-1:-1:-1;;;28153:22:0;;;;28139:36;;;;;-1:-1:-1;;28181:36:0;-1:-1:-1;;;28195:22:0;;;;-1:-1:-1;;;28181:36:0;;;;;;;28256:16;;28276:6;;28238:34;;:15;:34;:::i;:::-;:44;28234:237;;28303:13;:17;;-1:-1:-1;;28440:15:0;;;;;28234:237;28548:11;;;-1:-1:-1;;;28548:11:0;;;;;28534;;;;;;28524:7;;;;;;28492:29;;28548:11;28508:13;;;;;28492;:29;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:67;;;;:::i;:::-;28480:9;:79;;-1:-1:-1;;28480:79:0;;-1:-1:-1;;;28480:79:0;;;;;;;;;;;;;28569:87;;;28581:13;;;;;;;;;;23634:34:1;;28480:79:0;28596:13;;;;23699:2:1;23684:18;;23677:43;28611:7:0;;;;;23736:18:1;;;23729:43;;;;28620:11:0;;;;;23803:2:1;23788:18;;23781:43;-1:-1:-1;;;28633:11:0;;;;23855:3:1;23840:19;;23833:44;28646:9:0;;;;;;23908:3:1;23893:19;;23886:44;28569:87:0;;23598:3:1;23583:19;28569:87:0;23348:588:1;31209:1685:0;31249:23;31275:24;31293:4;31275:9;:24::i;:::-;31382:9;;31249:50;;-1:-1:-1;31332:21:0;;31382:9;-1:-1:-1;;;31382:9:0;;;;;31428:13;;;;31382:9;31478:13;;;;;31522:7;;;;;;31565:11;;;;;;-1:-1:-1;;;31605:11:0;;;31304:25;31522:7;31382:9;31649:31;31428:13;31249:50;31649:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;31623:73;-1:-1:-1;31701:26:0;31730:33;31623:73;31730:15;:33;:::i;:::-;31701:62;;31770:37;31788:18;31770:17;:37::i;:::-;31814:27;31844:41;31868:17;31844:21;:41;:::i;:::-;31814:71;-1:-1:-1;31890:19:0;31955:15;31929:21;31949:1;31929:17;:21;:::i;:::-;31912:39;;:13;:39;:::i;:::-;:59;;;;:::i;:::-;31890:81;;;;31976:26;32061:1;32047:11;32027:17;32005:39;;:19;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:57;;;;:::i;:::-;31976:86;-1:-1:-1;32067:20:0;32126:11;32090:33;;;;:19;:33;:::i;:::-;:47;;;;:::i;:::-;32067:70;-1:-1:-1;32142:24:0;32209:11;32169:37;;;;:19;:37;:::i;:::-;:51;;;;:::i;:::-;32142:78;-1:-1:-1;32225:26:0;32142:78;32277:33;32298:12;32277:18;:33;:::i;:::-;:52;;;;:::i;:::-;32254:76;;:19;:76;:::i;:::-;32345:15;;32337:53;;32225:105;;-1:-1:-1;;;;;;32345:15:0;;32337:53;;;;;32225:105;;32345:15;32337:53;32345:15;32337:53;32225:105;32345:15;32337:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32403:9:0;;32395:41;;-1:-1:-1;;;;;32403:9:0;;;;32395:41;;;;;32423:12;;32403:9;32395:41;32403:9;32395:41;32423:12;32403:9;32395:41;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32449:13:0;;32441:49;;-1:-1:-1;;;;;32449:13:0;;;;32441:49;;;;;32473:16;;32449:13;32441:49;32449:13;32441:49;32473:16;32449:13;32441:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32501:19:0;;32497:169;;32528:50;32542:15;32559:18;32528:13;:50::i;:::-;32589:71;;;24513:25:1;;;24569:2;24554:18;;24547:34;;;24597:18;;;24590:34;;;32589:71:0;;24501:2:1;24486:18;32589:71:0;;;;;;;32497:169;32682:13;32670:9;;:25;;;;;;;;;;;;;;;;;;32722:17;32706:13;;:33;;;;;;;;;;;;;;;;;;32766:17;32750:13;;:33;;;;;;;;;;;;;;;;;;32804:11;32794:7;;:21;;;;;;;;;;;;;;;;;;32840:15;32826:11;;:29;;;;;;;;;;;;;;;;;;32874:15;32860:11;;:29;;;;;;;;;;;;;;;;;;31244:1650;;;;;;;;;;;;;;;;31209:1685::o;24782:762::-;24885:23;24909:12;24923:14;24941:29;24953:7;24962;24941:11;:29::i;:::-;24884:86;;;;;;24976:15;24993:23;25018:12;25032:14;25050:46;25062:7;25071:4;25077:6;25085:10;:8;:10::i;:::-;25050:11;:46::i;:::-;-1:-1:-1;;;;;25107:32:0;;;;;;:24;:32;;;;;;24975:121;;-1:-1:-1;24975:121:0;;-1:-1:-1;24975:121:0;-1:-1:-1;24975:121:0;-1:-1:-1;25107:32:0;;25103:93;;;-1:-1:-1;;;;;25165:15:0;;;;;;:7;:15;;;;;;:25;;25183:7;;25165:25;:::i;:::-;-1:-1:-1;;;;;25147:15:0;;;;;;:7;:15;;;;;:43;25103:93;-1:-1:-1;;;;;25204:35:0;;;;;;:24;:35;;;;;;;;25200:110;;;-1:-1:-1;;;;;25268:18:0;;;;;;:7;:18;;;;;;:36;;25289:15;;25268:36;:::i;:::-;-1:-1:-1;;;;;25247:18:0;;;;;;:7;:18;;;;;:57;25200:110;-1:-1:-1;;;;;25332:15:0;;;;;;:7;:15;;;;;;:25;;25350:7;;25332:25;:::i;:::-;-1:-1:-1;;;;;25314:15:0;;;;;;;:7;:15;;;;;;:43;;;;25383:18;;;;;;;:36;;25404:15;;25383:36;:::i;:::-;-1:-1:-1;;;;;25362:18:0;;;;;;:7;:18;;;;;:57;25424:33;25442:6;25450;25424:17;:33::i;:::-;25462:23;25474:4;25480;25462:11;:23::i;:::-;25512:9;-1:-1:-1;;;;;25495:44:0;25504:6;-1:-1:-1;;;;;25495:44:0;;25523:15;25495:44;;;;1895:25:1;;1883:2;1868:18;;1749:177;25495:44:0;;;;;;;;24879:665;;;;;;;24782:762;;;;:::o;26628:562::-;26720:7;;26679;;;;8310:21;26679:7;26762:331;26786:22;:29;26782:33;;26762:331;;;26875:7;26838;:34;26846:22;26869:1;26846:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26846:25:0;26838:34;;;;;;;;;;;;;:44;;:97;;;26928:7;26891;:34;26899:22;26922:1;26899:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26899:25:0;26891:34;;;;;;;;;;;;;:44;26838:97;26828:139;;;-1:-1:-1;;26950:7:0;;;8310:21;;-1:-1:-1;26628:562:0;-1:-1:-1;;26628:562:0:o;26828:139::-;26993:7;:34;27001:22;27024:1;27001:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27001:25:0;26993:34;;;;;;;;;;;;;26983:44;;:7;:44;:::i;:::-;26973:54;;27053:7;:34;27061:22;27084:1;27061:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27061:25:0;27053:34;;;;;;;;;;;;;27043:44;;:7;:44;:::i;:::-;27033:54;-1:-1:-1;26817:3:0;;;;:::i;:::-;;;;26762:331;;;;8310:21;27111:7;;:17;;;;:::i;:::-;27101:7;:27;27097:58;;;-1:-1:-1;;27138:7:0;;;8310:21;;-1:-1:-1;26628:562:0;-1:-1:-1;26628:562:0:o;27097:58::-;27168:7;;27177;;-1:-1:-1;26628:562:0;-1:-1:-1;26628:562:0:o;32897:411::-;32982:16;;;32996:1;32982:16;;;;;;;;32958:21;;32982:16;;;;;;;;;;-1:-1:-1;32982:16:0;32958:40;;33021:4;33003;33008:1;33003:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33003:23:0;;;:7;;;;;;;;;;:23;;;;33041:15;;:22;;;-1:-1:-1;;;33041:22:0;;;;:15;;;;;:20;;:22;;;;;33003:7;;33041:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33031:4;33036:1;33031:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33031:32:0;;;:7;;;;;;;;;:32;33100:15;;33068:62;;33085:4;;33100:15;33118:11;33068:8;:62::i;:::-;33135:15;;:168;;-1:-1:-1;;;33135:168:0;;-1:-1:-1;;;;;33135:15:0;;;;:66;;:168;;33206:11;;33135:15;;33256:4;;33273;;33283:15;;33135:168;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33311:345;33419:15;;33387:62;;33404:4;;-1:-1:-1;;;;;33419:15:0;33437:11;33387:8;:62::i;:::-;33454:15;;33608;;33454:194;;-1:-1:-1;;;33454:194:0;;33516:4;33454:194;;;26349:34:1;26399:18;;;26392:34;;;33454:15:0;26442:18:1;;;26435:34;;;26485:18;;;26478:34;-1:-1:-1;;;;;33608:15:0;;;26528:19:1;;;26521:44;33628:15:0;26581:19:1;;;26574:35;33454:15:0;;;:31;;33493:9;;26283:19:1;;33454:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33311:345;;:::o;25655:413::-;25729:7;25737;25745;25763;25758:306;;-1:-1:-1;25786:7:0;;-1:-1:-1;25795:1:0;;-1:-1:-1;25795:1:0;25778:22;;25758:306;25846:11;;25821:12;;25860:3;;25836:21;;-1:-1:-1;;;25846:11:0;;;;25836:7;:21;:::i;:::-;:27;;;;:::i;:::-;25939:11;;25821:42;;-1:-1:-1;25869:14:0;;25954:3;;25939:11;;;;;;;;25923:13;;;;;25897:23;;25913:7;;;;;;25897:13;:23;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;25886:65;;;;:7;:65;:::i;:::-;:71;;;;:::i;:::-;25869:88;-1:-1:-1;25963:23:0;26000:13;25869:88;26000:4;:13;:::i;:::-;25989:25;;:7;:25;:::i;:::-;25963:51;-1:-1:-1;26045:4:0;;-1:-1:-1;26051:6:0;-1:-1:-1;26020:38:0;;-1:-1:-1;26020:38:0;25758:306;25655:413;;;;;:::o;26071:402::-;26200:7;;;;;26259:21;26269:11;26259:7;:21;:::i;:::-;26241:39;-1:-1:-1;26285:12:0;26300:18;26307:11;26300:4;:18;:::i;:::-;26285:33;-1:-1:-1;26323:14:0;26340:20;26349:11;26340:6;:20;:::i;:::-;26323:37;-1:-1:-1;26365:23:0;26402:13;26323:37;26402:4;:13;:::i;:::-;26391:25;;:7;:25;:::i;:::-;26429:7;;;;-1:-1:-1;26455:4:0;;-1:-1:-1;26455:4:0;-1:-1:-1;26071:402:0;;-1:-1:-1;;;;;;26071:402:0:o;27193:202::-;27302:4;27269:39;;;;:24;:39;;;;;;;;27265:89;;;27332:4;27316:22;;;;:7;:22;;;;;:32;;27342:6;;27316:22;:32;;27342:6;;27316:32;:::i;:::-;;;;-1:-1:-1;;27265:89:0;27374:4;27358:22;;;;:7;:22;;;;;:32;;27384:6;;27358:22;:32;;27384:6;;27358:32;:::i;:::-;;;;-1:-1:-1;;;;27193:202:0:o;25547:105::-;25620:4;25609:7;;:15;;;;;;;:::i;:::-;;;;;;;;25643:4;25629:10;;:18;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:160::-;215:20;;271:13;;264:21;254:32;;244:60;;300:1;297;290:12;244:60;150:160;;;:::o;315:315::-;380:6;388;441:2;429:9;420:7;416:23;412:32;409:52;;;457:1;454;447:12;409:52;496:9;483:23;515:31;540:5;515:31;:::i;:::-;565:5;-1:-1:-1;589:35:1;620:2;605:18;;589:35;:::i;:::-;579:45;;315:315;;;;;:::o;827:597::-;939:4;968:2;997;986:9;979:21;1029:6;1023:13;1072:6;1067:2;1056:9;1052:18;1045:34;1097:1;1107:140;1121:6;1118:1;1115:13;1107:140;;;1216:14;;;1212:23;;1206:30;1182:17;;;1201:2;1178:26;1171:66;1136:10;;1107:140;;;1265:6;1262:1;1259:13;1256:91;;;1335:1;1330:2;1321:6;1310:9;1306:22;1302:31;1295:42;1256:91;-1:-1:-1;1408:2:1;1387:15;-1:-1:-1;;1383:29:1;1368:45;;;;1415:2;1364:54;;827:597;-1:-1:-1;;;827:597:1:o;1429:315::-;1497:6;1505;1558:2;1546:9;1537:7;1533:23;1529:32;1526:52;;;1574:1;1571;1564:12;1526:52;1613:9;1600:23;1632:31;1657:5;1632:31;:::i;:::-;1682:5;1734:2;1719:18;;;;1706:32;;-1:-1:-1;;;1429:315:1:o;2362:180::-;2421:6;2474:2;2462:9;2453:7;2449:23;2445:32;2442:52;;;2490:1;2487;2480:12;2442:52;-1:-1:-1;2513:23:1;;2362:180;-1:-1:-1;2362:180:1:o;2547:456::-;2624:6;2632;2640;2693:2;2681:9;2672:7;2668:23;2664:32;2661:52;;;2709:1;2706;2699:12;2661:52;2748:9;2735:23;2767:31;2792:5;2767:31;:::i;:::-;2817:5;-1:-1:-1;2874:2:1;2859:18;;2846:32;2887:33;2846:32;2887:33;:::i;:::-;2547:456;;2939:7;;-1:-1:-1;;;2993:2:1;2978:18;;;;2965:32;;2547:456::o;3197:248::-;3262:6;3270;3323:2;3311:9;3302:7;3298:23;3294:32;3291:52;;;3339:1;3336;3329:12;3291:52;3375:9;3362:23;3352:33;;3404:35;3435:2;3424:9;3420:18;3404:35;:::i;3450:247::-;3509:6;3562:2;3550:9;3541:7;3537:23;3533:32;3530:52;;;3578:1;3575;3568:12;3530:52;3617:9;3604:23;3636:31;3661:5;3636:31;:::i;3702:671::-;3788:6;3796;3804;3812;3865:3;3853:9;3844:7;3840:23;3836:33;3833:53;;;3882:1;3879;3872:12;3833:53;3921:9;3908:23;3940:31;3965:5;3940:31;:::i;:::-;3990:5;-1:-1:-1;4047:2:1;4032:18;;4019:32;4060:33;4019:32;4060:33;:::i;:::-;4112:7;-1:-1:-1;4171:2:1;4156:18;;4143:32;4184:33;4143:32;4184:33;:::i;:::-;4236:7;-1:-1:-1;4295:2:1;4280:18;;4267:32;4308:33;4267:32;4308:33;:::i;:::-;3702:671;;;;-1:-1:-1;3702:671:1;;-1:-1:-1;;3702:671:1:o;4378:156::-;4444:20;;4504:4;4493:16;;4483:27;;4473:55;;4524:1;4521;4514:12;4539:464;4624:6;4632;4640;4648;4656;4709:3;4697:9;4688:7;4684:23;4680:33;4677:53;;;4726:1;4723;4716:12;4677:53;4749:27;4766:9;4749:27;:::i;:::-;4739:37;;4795:36;4827:2;4816:9;4812:18;4795:36;:::i;:::-;4785:46;;4850:36;4882:2;4871:9;4867:18;4850:36;:::i;:::-;4840:46;;4905:36;4937:2;4926:9;4922:18;4905:36;:::i;:::-;4895:46;;4960:37;4992:3;4981:9;4977:19;4960:37;:::i;:::-;4950:47;;4539:464;;;;;;;;:::o;5511:388::-;5579:6;5587;5640:2;5628:9;5619:7;5615:23;5611:32;5608:52;;;5656:1;5653;5646:12;5608:52;5695:9;5682:23;5714:31;5739:5;5714:31;:::i;:::-;5764:5;-1:-1:-1;5821:2:1;5806:18;;5793:32;5834:33;5793:32;5834:33;:::i;:::-;5886:7;5876:17;;;5511:388;;;;;:::o;5904:356::-;6106:2;6088:21;;;6125:18;;;6118:30;6184:34;6179:2;6164:18;;6157:62;6251:2;6236:18;;5904:356::o;6265:426::-;6467:2;6449:21;;;6506:2;6486:18;;;6479:30;6545:34;6540:2;6525:18;;6518:62;6616:32;6611:2;6596:18;;6589:60;6681:3;6666:19;;6265:426::o;6696:127::-;6757:10;6752:3;6748:20;6745:1;6738:31;6788:4;6785:1;6778:15;6812:4;6809:1;6802:15;6828:127;6889:10;6884:3;6880:20;6877:1;6870:31;6920:4;6917:1;6910:15;6944:4;6941:1;6934:15;6960:125;7000:4;7028:1;7025;7022:8;7019:34;;;7033:18;;:::i;:::-;-1:-1:-1;7070:9:1;;6960:125::o;7090:127::-;7151:10;7146:3;7142:20;7139:1;7132:31;7182:4;7179:1;7172:15;7206:4;7203:1;7196:15;7222:135;7261:3;7282:17;;;7279:43;;7302:18;;:::i;:::-;-1:-1:-1;7349:1:1;7338:13;;7222:135::o;8653:127::-;8714:10;8709:3;8705:20;8702:1;8695:31;8745:4;8742:1;8735:15;8769:4;8766:1;8759:15;8785:120;8825:1;8851;8841:35;;8856:18;;:::i;:::-;-1:-1:-1;8890:9:1;;8785:120::o;9330:168::-;9370:7;9436:1;9432;9428:6;9424:14;9421:1;9418:21;9413:1;9406:9;9399:17;9395:45;9392:71;;;9443:18;;:::i;:::-;-1:-1:-1;9483:9:1;;9330:168::o;18405:402::-;18607:2;18589:21;;;18646:2;18626:18;;;18619:30;18685:34;18680:2;18665:18;;18658:62;-1:-1:-1;;;18751:2:1;18736:18;;18729:36;18797:3;18782:19;;18405:402::o;19241:128::-;19281:3;19312:1;19308:6;19305:1;19302:13;19299:39;;;19318:18;;:::i;:::-;-1:-1:-1;19354:9:1;;19241:128::o;20483:209::-;-1:-1:-1;;20647:38:1;;;;20629:57;;20617:2;20602:18;;20483:209::o;23139:204::-;23177:3;23213:4;23210:1;23206:12;23245:4;23242:1;23238:12;23280:3;23274:4;23270:14;23265:3;23262:23;23259:49;;;23288:18;;:::i;:::-;23324:13;;23139:204;-1:-1:-1;;;23139:204:1:o;23941:165::-;23979:1;24013:4;24010:1;24006:12;24037:3;24027:37;;24044:18;;:::i;:::-;24096:3;24089:4;24086:1;24082:12;24078:22;24073:27;;;23941:165;;;;:::o;24111:195::-;24149:4;24186;24183:1;24179:12;24218:4;24215:1;24211:12;24243:3;24238;24235:12;24232:38;;;24250:18;;:::i;:::-;24287:13;;;24111:195;-1:-1:-1;;;24111:195:1:o;24767:251::-;24837:6;24890:2;24878:9;24869:7;24865:23;24861:32;24858:52;;;24906:1;24903;24896:12;24858:52;24938:9;24932:16;24957:31;24982:5;24957:31;:::i;25023:980::-;25285:4;25333:3;25322:9;25318:19;25364:6;25353:9;25346:25;25390:2;25428:6;25423:2;25412:9;25408:18;25401:34;25471:3;25466:2;25455:9;25451:18;25444:31;25495:6;25530;25524:13;25561:6;25553;25546:22;25599:3;25588:9;25584:19;25577:26;;25638:2;25630:6;25626:15;25612:29;;25659:1;25669:195;25683:6;25680:1;25677:13;25669:195;;;25748:13;;-1:-1:-1;;;;;25744:39:1;25732:52;;25839:15;;;;25804:12;;;;25780:1;25698:9;25669:195;;;-1:-1:-1;;;;;;;25920:32:1;;;;25915:2;25900:18;;25893:60;-1:-1:-1;;;25984:3:1;25969:19;25962:35;25881:3;25023:980;-1:-1:-1;;;25023:980:1:o;26620:306::-;26708:6;26716;26724;26777:2;26765:9;26756:7;26752:23;26748:32;26745:52;;;26793:1;26790;26783:12;26745:52;26822:9;26816:16;26806:26;;26872:2;26861:9;26857:18;26851:25;26841:35;;26916:2;26905:9;26901:18;26895:25;26885:35;;26620:306;;;;;:::o

Swarm Source

ipfs://630c10e51b2f6f1ea742fd9672621ce4d576528879d8f33440a69684a6d528c1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.