ERC-20
Real Estate
Overview
Max Total Supply
1,000,000,000,000 REIT
Holders
83 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
302,203,829.538278097544352785 REITValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
REIToken
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-10 */ // 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; } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } interface DividendPayingTokenInterface { function dividendOf(address _owner) external view returns(uint256); function distributeDividends() external payable; function withdrawDividend() external; event DividendsDistributed( address indexed from, uint256 weiAmount ); event DividendWithdrawn( address indexed to, uint256 weiAmount ); } interface DividendPayingTokenOptionalInterface { function withdrawableDividendOf(address _owner) external view returns(uint256); function withdrawnDividendOf(address _owner) external view returns(uint256); function accumulativeDividendOf(address _owner) external view returns(uint256); } library Address { function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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 ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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 SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } library IterableMapping { struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) public view returns (int) { if(!map.inserted[key]) { return -1; } return int(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint index) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint) { return map.keys.length; } function set(Map storage map, address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } 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 ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual 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) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract DividendPayingToken is ERC20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 constant internal magnitude = 2**128; uint256 internal magnifiedDividendPerShare; uint256 public totalDividendsDistributed; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {} receive() external payable { distributeDividends(); } function distributeDividends() public override onlyOwner payable { require(totalSupply() > 0); if (msg.value > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add((msg.value).mul(magnitude) / totalSupply()); emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed = totalDividendsDistributed.add(msg.value); } } function withdrawDividend() public virtual override { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend); emit DividendWithdrawn(user, _withdrawableDividend); (bool success,) = user.call{value: _withdrawableDividend, gas: 3000}(""); if(!success) { withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend); return 0; } return _withdrawableDividend; } return 0; } function dividendOf(address _owner) public view override returns(uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view override returns(uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view override returns(uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view override returns(uint256) { return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe() .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude; } function _transfer(address from, address to, uint256 value) internal virtual override { require(false); int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe(); magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection); magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection); } function _mint(address account, uint256 value) internal override { super._mint(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() ); } function _burn(address account, uint256 value) internal override { super._burn(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() ); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if(newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if(newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } } contract REIToken is ERC20, Ownable { IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "REIToken"; string private constant _symbol = "REIT"; uint8 private constant _decimals = 18; REITDividendTracker public dividendTracker; bool public isTradingEnabled; uint256 private _launchBlockNumber; uint256 private _launchTimestamp; uint256 private constant _blockedTimeLimit = 172800; address public USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7; // initialSupply uint256 constant initialSupply = 1000000000000 * (10**18); // max wallet is 1% of initialSupply uint256 public maxWalletAmount = initialSupply * 100 / 10000; // max buy is 0.5%, max sell is 0.3% of initialSupply uint256 public maxTxBuyAmount = initialSupply * 500 / 100000; uint256 public maxTxSellAmount = initialSupply * 300 / 100000; bool private _swapping; uint256 public minimumTokensBeforeSwap = 15000000 * (10**18); address public liquidityWallet; address public marketingWallet; address public treasuryWallet; address public capitalWallet; struct CustomTaxPeriod { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; uint8 marketingFeeOnBuy; uint8 marketingFeeOnSell; uint8 treasuryFeeOnBuy; uint8 treasuryFeeOnSell; uint8 capitalFeeOnBuy; uint8 capitalFeeOnSell; uint8 holdersFeeOnBuy; uint8 holdersFeeOnSell; } // Base taxes CustomTaxPeriod private _base = CustomTaxPeriod('default',0,0,1,1,3,3,2,2,3,3,1,1); 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 _feeOnSelectedWalletTransfers; mapping (address => bool) private _isAllowedToTradeWhenDisabled; uint8 private _liquidityFee; uint8 private _marketingFee; uint8 private _treasuryFee; uint8 private _capitalFee; 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 walletIdentifier, address indexed newWallet, address indexed oldWallet); event FeeChange(string indexed identifier, uint8 liquidityFee, uint8 marketingFee, uint8 treasuryFee, uint8 capitalFee, 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 MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded); event ExcludeFromMaxTransactionChange(address indexed account, bool isExcluded); event FeeOnSelectedWalletTransfersChange(address indexed account, bool newValue); event DividendsSent(uint256 tokensSwapped); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity); event ClaimETHOverflow(uint256 amount); event FeesApplied(uint8 liquidityFee, uint8 marketingFee, uint8 treasuryFee, uint8 capitalFee, uint8 holdersFee, uint8 totalFee); constructor() ERC20(_name, _symbol) { liquidityWallet = owner(); marketingWallet = owner(); treasuryWallet = owner(); capitalWallet = owner(); dividendTracker = new REITDividendTracker(); IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Mainnet address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[address(dividendTracker)] = true; dividendTracker.excludeFromDividends(address(dividendTracker)); dividendTracker.excludeFromDividends(address(this)); dividendTracker.excludeFromDividends(address(0x000000000000000000000000000000000000dEaD)); dividendTracker.excludeFromDividends(owner()); dividendTracker.excludeFromDividends(address(_uniswapV2Router)); _isAllowedToTradeWhenDisabled[owner()] = true; _isAllowedToTradeWhenDisabled[address(this)] = true; _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(dividendTracker)] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxTransactionLimit[owner()] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxTransactionLimit[address(dividendTracker)] = true; _mint(owner(), initialSupply); } receive() external payable {} // Setters 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, "REIT: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; if(value) { dividendTracker.excludeFromDividends(pair); } emit AutomatedMarketMakerPairChange(pair, value); } function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner { _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function blockAccount(address account) external onlyOwner { require(!_isBlocked[account], "REIT: Account is already blocked"); require((block.timestamp - _launchTimestamp) < _blockedTimeLimit, "REIT: Time to block accounts has expired"); _isBlocked[account] = true; emit BlockedAccountChange(account, true); } function unblockAccount(address account) external onlyOwner { require(_isBlocked[account], "REIT: Account is not blcoked"); _isBlocked[account] = false; emit BlockedAccountChange(account, false); } function setUSDTAddress(address newUSDTAddress) external onlyOwner { require(newUSDTAddress != USDT, "REIT: The USDT address is already the value of newUSDTAddress"); USDT = newUSDTAddress; } function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner { require(_feeOnSelectedWalletTransfers[account] != value, "REIT: The selected wallet is already set to the value "); _feeOnSelectedWalletTransfers[account] = value; emit FeeOnSelectedWalletTransfersChange(account, value); } function excludeFromFees(address account, bool excluded) external onlyOwner { require(_isExcludedFromFee[account] != excluded, "REIT: Account is already the value of 'excluded'"); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function excludeFromDividends(address account) external onlyOwner { dividendTracker.excludeFromDividends(account); } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxWalletLimit[account] != excluded, "REIT: 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, "REIT: Account is already the value of 'excluded'"); _isExcludedFromMaxTransactionLimit[account] = excluded; emit ExcludeFromMaxTransactionChange(account, excluded); } function setWallets(address newLiquidityWallet, address newMarketingWallet, address newTreasuryWallet, address newCapitalWallet) external onlyOwner { if(liquidityWallet != newLiquidityWallet) { require(newLiquidityWallet != address(0), "REIT: The liquidityWallet cannot be 0"); emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet); liquidityWallet = newLiquidityWallet; } if(marketingWallet != newMarketingWallet) { require(newMarketingWallet != address(0), "REIT: The marketingWallet cannot be 0"); emit WalletChange('marketingWallet', newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } if(treasuryWallet != newTreasuryWallet) { require(newTreasuryWallet != address(0), "REIT: The treasuryWallet cannot be 0"); emit WalletChange('treasuryWallet', newTreasuryWallet, treasuryWallet); treasuryWallet = newTreasuryWallet; } if(capitalWallet != newCapitalWallet) { require(newCapitalWallet != address(0), "REIT: The capitalWallet cannot be 0"); emit WalletChange('capitalWallet', newCapitalWallet, capitalWallet); capitalWallet = newCapitalWallet; } } // Base Fees function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _treasuryFeeOnBuy, uint8 _capitalFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner { _setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _marketingFeeOnBuy, _treasuryFeeOnBuy, _capitalFeeOnBuy, _holdersFeeOnBuy); emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _marketingFeeOnBuy, _treasuryFeeOnBuy, _capitalFeeOnBuy, _holdersFeeOnBuy); } function setBaseFeesOnSell(uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _treasuryFeeOnSell, uint8 _capitalFeeOnSell, uint8 _holdersFeeOnSell) external onlyOwner { _setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _marketingFeeOnSell, _treasuryFeeOnSell, _capitalFeeOnSell, _holdersFeeOnSell); emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _marketingFeeOnSell, _treasuryFeeOnSell, _capitalFeeOnSell, _holdersFeeOnSell); } function setUniswapRouter(address newAddress) external onlyOwner { require(newAddress != address(uniswapV2Router), "REIT: The router already has that address"); emit UniswapV2RouterChange(newAddress, address(uniswapV2Router)); uniswapV2Router = IRouter(newAddress); } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require(newValue != maxWalletAmount, "REIT: Cannot update maxWalletAmount to same value"); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function setMaxTransactionAmount(bool isSell, uint256 newValue) external onlyOwner { if(isSell) { require(newValue != maxTxSellAmount, "REIT: Cannot update maxTxSellAmount to same value"); emit MaxWalletAmountChange(newValue, maxTxSellAmount); maxTxSellAmount = newValue; } else { require(newValue != maxTxBuyAmount, "REIT: Cannot update maxTxBuyAmount to same value"); emit MaxWalletAmountChange(newValue, maxTxBuyAmount); maxTxBuyAmount = newValue; } } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require(newValue != minimumTokensBeforeSwap, "REIT: Cannot update minimumTokensBeforeSwap to same value"); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function claim() external { dividendTracker.processAccount(payable(msg.sender), false); } function claimETHOverflow() external onlyOwner { uint256 amount = address(this).balance; (bool success,) = address(owner()).call{value : amount}(""); if (success){ emit ClaimETHOverflow(amount); } } // Getters function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function getNumberOfDividendTokenHolders() external view returns(uint256) { return dividendTracker.getNumberOfTokenHolders(); } function getBaseBuyFees() external view returns (uint8, uint8, uint8, uint8, uint8){ return (_base.liquidityFeeOnBuy, _base.marketingFeeOnBuy, _base.treasuryFeeOnBuy, _base.capitalFeeOnBuy, _base.holdersFeeOnBuy); } function getBaseSellFees() external view returns (uint8, uint8, uint8, uint8, uint8){ return (_base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.treasuryFeeOnSell, _base.capitalFeeOnSell, _base.holdersFeeOnSell); } // Main function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) { require(isTradingEnabled, "REIT: Trading is currently disabled."); require(!_isBlocked[to], "REIT: Account is blocked"); require(!_isBlocked[from], "REIT: Account is blocked"); if (!_isExcludedFromMaxWalletLimit[to]) { require((balanceOf(to) + amount) <= maxWalletAmount, "REIT: Expected wallet amount exceeds the maxWalletAmount."); } if (!_isExcludedFromMaxTransactionLimit[to]) { require(amount <= maxTxBuyAmount, "REIT: Transfer amount exceeds the maxTxBuyAmount."); } if (!_isExcludedFromMaxTransactionLimit[from]) { require(amount <= maxTxSellAmount, "REIT: Transfer amount exceeds the maxTxSellAmount."); } } _adjustTaxes(automatedMarketMakerPairs[from], automatedMarketMakerPairs[to], from, to); 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; } if (takeFee && _totalFee > 0) { uint256 fee = amount * _totalFee / 100; amount = amount - fee; super._transfer(from, address(this), fee); } super._transfer(from, to, amount); try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {} try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {} } function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp, address from, address to) private { _liquidityFee = 0; _marketingFee = 0; _treasuryFee = 0; _capitalFee = 0; _holdersFee = 0; if (isBuyFromLp) { if ((block.number - _launchBlockNumber) <= 5) { _liquidityFee = 100; } else { _liquidityFee = _base.liquidityFeeOnBuy; _marketingFee = _base.marketingFeeOnBuy; _treasuryFee = _base.treasuryFeeOnBuy; _capitalFee = _base.capitalFeeOnBuy; _holdersFee = _base.holdersFeeOnBuy; } } if (isSelltoLp) { _liquidityFee = _base.liquidityFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _treasuryFee = _base.treasuryFeeOnSell; _capitalFee = _base.capitalFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) { _liquidityFee = _base.liquidityFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _treasuryFee = _base.treasuryFeeOnSell; _capitalFee = _base.capitalFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } _totalFee = _liquidityFee + _marketingFee + _treasuryFee + _capitalFee + _holdersFee; emit FeesApplied(_liquidityFee, _marketingFee, _treasuryFee, _capitalFee, _holdersFee, _totalFee); } function _setCustomSellTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _treasuryFeeOnSell, uint8 _capitalFeeOnSell, 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.treasuryFeeOnSell != _treasuryFeeOnSell) { emit CustomTaxPeriodChange(_treasuryFeeOnSell, map.treasuryFeeOnSell, 'treasuryFeeOnSell', map.periodName); map.treasuryFeeOnSell = _treasuryFeeOnSell; } if (map.capitalFeeOnSell != _capitalFeeOnSell) { emit CustomTaxPeriodChange(_capitalFeeOnSell, map.capitalFeeOnSell, 'capitalFeeOnSell', map.periodName); map.capitalFeeOnSell = _capitalFeeOnSell; } 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 _treasuryFeeOnBuy, uint8 _capitalFeeOnBuy, 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.treasuryFeeOnBuy != _treasuryFeeOnBuy) { emit CustomTaxPeriodChange(_treasuryFeeOnBuy, map.treasuryFeeOnBuy, 'treasuryFeeOnBuy', map.periodName); map.treasuryFeeOnBuy = _treasuryFeeOnBuy; } if (map.capitalFeeOnBuy != _capitalFeeOnBuy) { emit CustomTaxPeriodChange(_capitalFeeOnBuy, map.capitalFeeOnBuy, 'capitalFeeOnBuy', map.periodName); map.capitalFeeOnBuy = _capitalFeeOnBuy; } 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; uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2; uint256 amountToSwap = contractBalance - amountToLiquify; _swapTokensForETH(amountToSwap); uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance; uint256 totalETHFee = _totalFee - (_liquidityFee / 2); uint256 amountETHLiquidity = ETHBalanceAfterSwap * _liquidityFee / totalETHFee / 2; uint256 amountETHMarketing = ETHBalanceAfterSwap * _marketingFee / totalETHFee; uint256 amountETHTreasury = ETHBalanceAfterSwap * _treasuryFee / totalETHFee; uint256 amountETHCapital = ETHBalanceAfterSwap * _capitalFee / totalETHFee; uint256 amountETHHolders = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHMarketing + amountETHTreasury + amountETHCapital); payable(treasuryWallet).transfer(amountETHTreasury); _swapETHForCustomToken(amountETHMarketing, USDT, marketingWallet); _swapETHForCustomToken(amountETHCapital, USDT, capitalWallet); if (amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountETHLiquidity); emit SwapAndLiquify(amountToSwap, amountETHLiquidity, amountToLiquify); } (bool dividendSuccess,) = address(dividendTracker).call{value: amountETHHolders}(""); if(dividendSuccess) { emit DividendsSent(amountETHHolders); } _totalFee = totalFeePrior; } function _swapETHForCustomToken(uint256 ethAmount, address token, address wallet) private { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = token; uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : ethAmount}( 0, // accept any amount of ETH path, address(wallet), block.timestamp ); } 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 REITDividendTracker is DividendPayingToken { using SafeMath for uint256; using SafeMathInt for int256; using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; uint256 public lastProcessedIndex; mapping (address => bool) public excludedFromDividends; mapping (address => uint256) public lastClaimTimes; uint256 public claimWait; uint256 public minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim(address indexed account, uint256 amount, bool indexed automatic); constructor() DividendPayingToken("REIT_Dividend_Tracker", "REIT_Dividend_Tracker") { claimWait = 3600; minimumTokenBalanceForDividends = 0 * (10**18); } function _transfer(address, address, uint256) internal pure override { require(false, "REIT_Dividend_Tracker: No transfers allowed"); } function excludeFromDividends(address account) external onlyOwner { require(!excludedFromDividends[account]); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function setTokenBalanceForDividends(uint256 newValue) external onlyOwner { require(minimumTokenBalanceForDividends != newValue, "REIT_Dividend_Tracker: minimumTokenBalanceForDividends already the value of 'newValue'."); minimumTokenBalanceForDividends = newValue; } function getNumberOfTokenHolders() external view returns(uint256) { return tokenHoldersMap.keys.length; } function setBalance(address payable account, uint256 newBalance) external onlyOwner { if(excludedFromDividends[account]) { return; } if(newBalance >= minimumTokenBalanceForDividends) { _setBalance(account, newBalance); tokenHoldersMap.set(account, newBalance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } processAccount(account, true); } function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if(amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","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":"ExcludeFromMaxTransactionChange","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":"treasuryFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"capitalFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"newValue","type":"bool"}],"name":"FeeOnSelectedWalletTransfersChange","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":"treasuryFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"capitalFee","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":"walletIdentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"capitalWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","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":"dividendTracker","outputs":[{"internalType":"contract REITDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"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":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"maxTxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxSellAmount","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_treasuryFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_capitalFeeOnBuy","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":"_treasuryFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_capitalFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeOnSelectedWalletTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isSell","type":"bool"},{"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":"newUSDTAddress","type":"address"}],"name":"setUSDTAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newTreasuryWallet","type":"address"},{"internalType":"address","name":"newCapitalWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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"}]
Contract Creation Code
60a0604052600a80546001600160a01b03191673dac17f958d2ee523a2206206994597c13d831ec7179055612710620000476c0c9f2c9cd04674edea40000000606462000c0e565b62000053919062000c30565b600b55620186a0620000756c0c9f2c9cd04674edea400000006101f462000c0e565b62000081919062000c30565b600c55620186a0620000a36c0c9f2c9cd04674edea4000000061012c62000c0e565b620000af919062000c30565b600d556a0c685fa11e01ec6f000000600f55604080516101a08101825266191959985d5b1d60ca1b815260006020820181905291810182905260016060820181905260808201819052600360a0830181905260c08301819052600260e084018190526101008401526101208301819052610140830152610160820181905261018090910152601480546001600160c01b03191666191959985d5b1d60821b1790556015556016805469010103030202030301016001600160501b03199091161790553480156200017e57600080fd5b5060408051808201825260088152672922a4aa37b5b2b760c11b6020808301918252835180850190945260048452631491525560e21b908401528151919291620001cb9160039162000b44565b508051620001e190600490602084019062000b44565b5050506000620001f66200086360201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600554601080546001600160a01b039092166001600160a01b03199283168117909155601180548316821790556012805483168217905560138054909216179055604051620002939062000bd3565b604051809103906000f080158015620002b0573d6000803e3d6000fd5b50600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000357919062000c53565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb919062000c53565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000419573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043f919062000c53565b600680546001600160a01b0319166001600160a01b0385811691909117909155811660805290506200047381600162000876565b6001601860006200048c6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260189093528183208054851660019081179091556007805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b1580156200052257600080fd5b505af115801562000537573d6000803e3d6000fd5b505060075460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200058157600080fd5b505af115801562000596573d6000803e3d6000fd5b505060075460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015620005e257600080fd5b505af1158015620005f7573d6000803e3d6000fd5b50506007546001600160a01b031691506331e79db09050620006216005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200066357600080fd5b505af115801562000678573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b158015620006c457600080fd5b505af1158015620006d9573d6000803e3d6000fd5b505050506001601d6000620006f36200086760201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252601d85528382208054871660019081179091558784168352601995869052848320805488168217905560075484168352848320805488168217905560065490931682528382208054871684179055815291822080549094168117909355620007956005546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600190601a90620007d96005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601a9093528183208054851660019081179091556007549091168352912080549092161790556200085b620008476005546001600160a01b031690565b6c0c9f2c9cd04674edea40000000620009de565b505062000cd5565b3390565b6005546001600160a01b031690565b6001600160a01b0382166000908152601b602052604090205481151560ff909116151503620009125760405162461bcd60e51b815260206004820152603e60248201527f524549543a204175746f6d61746564206d61726b6574206d616b65722070616960448201527f7220697320616c72656164792073657420746f20746861742076616c7565000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601b60205260409020805460ff19168215801591909117909155620009a25760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b1580156200098857600080fd5b505af11580156200099d573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000a365760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000909565b62000a528160025462000ada60201b62001fe61790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000a8591839062001fe662000ada821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60008062000ae9838562000c7e565b90508381101562000b3d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000909565b9392505050565b82805462000b529062000c99565b90600052602060002090601f01602090048101928262000b76576000855562000bc1565b82601f1062000b9157805160ff191683800117855562000bc1565b8280016001018555821562000bc1579182015b8281111562000bc157825182559160200191906001019062000ba4565b5062000bcf92915062000be1565b5090565b611bc68062004c4183390190565b5b8082111562000bcf576000815560010162000be2565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000c2b5762000c2b62000bf8565b500290565b60008262000c4e57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000c6657600080fd5b81516001600160a01b038116811462000b3d57600080fd5b6000821982111562000c945762000c9462000bf8565b500190565b600181811c9082168062000cae57607f821691505b60208210810362000ccf57634e487b7160e01b600052602260045260246000fd5b50919050565b608051613f5062000cf1600039600061054d0152613f506000f3fe6080604052600436106103035760003560e01c8063781edb3c11610190578063b1ba39ea116100dc578063d2d7ad8311610095578063dd62ed3e1161006f578063dd62ed3e1461094f578063e07b162f14610995578063f2fde38b146109ab578063fe017535146109cb57600080fd5b8063d2d7ad83146108f9578063d32215761461090f578063d46980161461092f57600080fd5b8063b1ba39ea146107d8578063b62496f5146107f8578063bea9849e14610828578063c024666814610848578063c54e44eb14610868578063cd43e2281461088857600080fd5b80639a364e6711610149578063a457c2d711610123578063a457c2d714610762578063a9059cbb14610782578063aa4bde28146107a2578063aee50b1e146107b857600080fd5b80639a364e671461070c5780639f9bb74e1461072c5780639fad96831461074257600080fd5b8063781edb3c146106595780637c0a893d1461067957806383672f3e14610699578063880bcbc1146106b95780638da5cb5b146106d957806395d89b41146106f757600080fd5b806336f8be9a1161024f5780634e71d92d1161020857806366164f6f116101e257806366164f6f146105d957806370a08231146105ee578063715018a61461062457806375f0a8741461063957600080fd5b80634e71d92d1461058f57806355eba868146105a457806364b0f653146105c457600080fd5b806336f8be9a146104bb57806339509351146104db57806345a42329146104fb5780634626402b1461051b57806349bd5a5e1461053b5780634d78fdc61461056f57600080fd5b806323b872dd116102bc57806330bb4cff1161029657806330bb4cff14610455578063313ce5671461046a57806331e79db01461048657806334cf1fea146104a657600080fd5b806323b872dd146103f557806327a14fc2146104155780632c1f52161461043557600080fd5b8063064a59d01461030f57806306fdde0314610345578063095ea7b3146103675780630bd05b69146103875780631694505e1461039e57806318160ddd146103d657600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5060075461033090600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5061035a610a11565b60405161033c919061384e565b34801561037357600080fd5b506103306103823660046138b8565b610aa3565b34801561039357600080fd5b5061039c610ab9565b005b3480156103aa57600080fd5b506006546103be906001600160a01b031681565b6040516001600160a01b03909116815260200161033c565b3480156103e257600080fd5b506002545b60405190815260200161033c565b34801561040157600080fd5b506103306104103660046138e4565b610b14565b34801561042157600080fd5b5061039c610430366004613925565b610b7d565b34801561044157600080fd5b506007546103be906001600160a01b031681565b34801561046157600080fd5b506103e7610c45565b34801561047657600080fd5b506040516012815260200161033c565b34801561049257600080fd5b5061039c6104a136600461393e565b610cb8565b3480156104b257600080fd5b5061039c610d44565b3480156104c757600080fd5b5061039c6104d6366004613969565b610d7d565b3480156104e757600080fd5b506103306104f63660046138b8565b610eee565b34801561050757600080fd5b5061039c610516366004613987565b610f24565b34801561052757600080fd5b506012546103be906001600160a01b031681565b34801561054757600080fd5b506103be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561057b57600080fd5b5061039c61058a36600461393e565b61103d565b34801561059b57600080fd5b5061039c61111c565b3480156105b057600080fd5b5061039c6105bf36600461393e565b611194565b3480156105d057600080fd5b506103e7611264565b3480156105e557600080fd5b5061039c6112ae565b3480156105fa57600080fd5b506103e761060936600461393e565b6001600160a01b031660009081526020819052604090205490565b34801561063057600080fd5b5061039c61137d565b34801561064557600080fd5b506011546103be906001600160a01b031681565b34801561066557600080fd5b5061039c610674366004613987565b6113f1565b34801561068557600080fd5b5061039c61069436600461393e565b6114b3565b3480156106a557600080fd5b5061039c6106b43660046139c0565b611608565b3480156106c557600080fd5b5061039c6106d4366004613987565b6119b1565b3480156106e557600080fd5b506005546001600160a01b03166103be565b34801561070357600080fd5b5061035a611a73565b34801561071857600080fd5b506013546103be906001600160a01b031681565b34801561073857600080fd5b506103e7600d5481565b34801561074e57600080fd5b5061039c61075d366004613a32565b611a82565b34801561076e57600080fd5b5061033061077d3660046138b8565b611b39565b34801561078e57600080fd5b5061033061079d3660046138b8565b611b88565b3480156107ae57600080fd5b506103e7600b5481565b3480156107c457600080fd5b5061039c6107d3366004613925565b611b95565b3480156107e457600080fd5b5061039c6107f3366004613a32565b611c69565b34801561080457600080fd5b5061033061081336600461393e565b601b6020526000908152604090205460ff1681565b34801561083457600080fd5b5061039c61084336600461393e565b611cc0565b34801561085457600080fd5b5061039c610863366004613987565b611db7565b34801561087457600080fd5b50600a546103be906001600160a01b031681565b34801561089457600080fd5b5060165460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a00161033c565b34801561090557600080fd5b506103e7600f5481565b34801561091b57600080fd5b5061039c61092a366004613987565b611e79565b34801561093b57600080fd5b506010546103be906001600160a01b031681565b34801561095b57600080fd5b506103e761096a366004613a97565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109a157600080fd5b506103e7600c5481565b3480156109b757600080fd5b5061039c6109c636600461393e565b611efb565b3480156109d757600080fd5b5060165460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166108c5565b606060038054610a2090613ac5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4c90613ac5565b8015610a995780601f10610a6e57610100808354040283529160200191610a99565b820191906000526020600020905b815481529060010190602001808311610a7c57829003601f168201915b5050505050905090565b6000610ab033848461204c565b50600192915050565b6005546001600160a01b03163314610aec5760405162461bcd60e51b8152600401610ae390613aff565b60405180910390fd5b6007805460ff60a01b1916600160a01b179055600954600003610b125742600955436008555b565b6000610b21848484612171565b610b738433610b6e85604051806060016040528060288152602001613eae602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906127e6565b61204c565b5060019392505050565b6005546001600160a01b03163314610ba75760405162461bcd60e51b8152600401610ae390613aff565b600b548103610c125760405162461bcd60e51b815260206004820152603160248201527f524549543a2043616e6e6f7420757064617465206d617857616c6c6574416d6f604482015270756e7420746f2073616d652076616c756560781b6064820152608401610ae3565b600b5460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600b55565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb39190613b34565b905090565b6005546001600160a01b03163314610ce25760405162461bcd60e51b8152600401610ae390613aff565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015610d2957600080fd5b505af1158015610d3d573d6000803e3d6000fd5b5050505050565b6005546001600160a01b03163314610d6e5760405162461bcd60e51b8152600401610ae390613aff565b6007805460ff60a01b19169055565b6005546001600160a01b03163314610da75760405162461bcd60e51b8152600401610ae390613aff565b8115610e4c57600d548103610e185760405162461bcd60e51b815260206004820152603160248201527f524549543a2043616e6e6f7420757064617465206d6178547853656c6c416d6f604482015270756e7420746f2073616d652076616c756560781b6064820152608401610ae3565b600d5460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600d5550565b600c548103610eb65760405162461bcd60e51b815260206004820152603060248201527f524549543a2043616e6e6f7420757064617465206d61785478427579416d6f7560448201526f6e7420746f2073616d652076616c756560801b6064820152608401610ae3565b600c5460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600c8190555b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ab0918590610b6e9086611fe6565b6005546001600160a01b03163314610f4e5760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b0382166000908152601c602052604090205481151560ff909116151503610fdd5760405162461bcd60e51b815260206004820152603660248201527f524549543a205468652073656c65637465642077616c6c657420697320616c72604482015275032b0b23c9039b2ba103a37903a3432903b30b63ab2960551b6064820152608401610ae3565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6005546001600160a01b031633146110675760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b03811660009081526017602052604090205460ff166110cf5760405162461bcd60e51b815260206004820152601c60248201527f524549543a204163636f756e74206973206e6f7420626c636f6b6564000000006044820152606401610ae3565b6001600160a01b038116600081815260176020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af115801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190613b4d565b50565b6005546001600160a01b031633146111be5760405162461bcd60e51b8152600401610ae390613aff565b600a546001600160a01b03908116908216036112425760405162461bcd60e51b815260206004820152603d60248201527f524549543a205468652055534454206164647265737320697320616c7265616460448201527f79207468652076616c7565206f66206e657755534454416464726573730000006064820152608401610ae3565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610c8f573d6000803e3d6000fd5b6005546001600160a01b031633146112d85760405162461bcd60e51b8152600401610ae390613aff565b4760006112ed6005546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114611337576040519150601f19603f3d011682016040523d82523d6000602084013e61133c565b606091505b505090508015610eea576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15050565b6005546001600160a01b031633146113a75760405162461bcd60e51b8152600401610ae390613aff565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461141b5760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b03821660009081526019602052604090205481151560ff90911615150361145b5760405162461bcd60e51b8152600401610ae390613b6a565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101611031565b6005546001600160a01b031633146114dd5760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b03811660009081526017602052604090205460ff16156115465760405162461bcd60e51b815260206004820181905260248201527f524549543a204163636f756e7420697320616c726561647920626c6f636b65646044820152606401610ae3565b6202a300600954426115589190613bd0565b106115b65760405162461bcd60e51b815260206004820152602860248201527f524549543a2054696d6520746f20626c6f636b206163636f756e74732068617360448201526708195e1c1a5c995960c21b6064820152608401610ae3565b6001600160a01b038116600081815260176020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6005546001600160a01b031633146116325760405162461bcd60e51b8152600401610ae390613aff565b6010546001600160a01b03858116911614611712576001600160a01b0384166116ab5760405162461bcd60e51b815260206004820152602560248201527f524549543a20546865206c697175696469747957616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610ae3565b6010546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f0160405190819003812090600080516020613e8e83398151915290600090a4601080546001600160a01b0319166001600160a01b0386161790555b6011546001600160a01b038481169116146117f2576001600160a01b03831661178b5760405162461bcd60e51b815260206004820152602560248201527f524549543a20546865206d61726b6574696e6757616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610ae3565b6011546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f0160405190819003812090600080516020613e8e83398151915290600090a4601180546001600160a01b0319166001600160a01b0385161790555b6012546001600160a01b038381169116146118cf576001600160a01b0382166118695760405162461bcd60e51b8152602060048201526024808201527f524549543a2054686520747265617375727957616c6c65742063616e6e6f74206044820152630626520360e41b6064820152608401610ae3565b6012546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b0391821691841690600e0160405190819003812090600080516020613e8e83398151915290600090a4601280546001600160a01b0319166001600160a01b0384161790555b6013546001600160a01b038281169116146119ab576001600160a01b0381166119465760405162461bcd60e51b815260206004820152602360248201527f524549543a20546865206361706974616c57616c6c65742063616e6e6f74206260448201526206520360ec1b6064820152608401610ae3565b6013546040516c18d85c1a5d185b15d85b1b195d609a1b81526001600160a01b0391821691831690600d0160405190819003812090600080516020613e8e83398151915290600090a4601380546001600160a01b0319166001600160a01b0383161790555b50505050565b6005546001600160a01b031633146119db5760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b0382166000908152601a602052604090205481151560ff909116151503611a1b5760405162461bcd60e51b8152600401610ae390613b6a565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f590b452f33c2ce4c8d34a3c2605002d05726f44c785969820a0bafeb361566409101611031565b606060048054610a2090613ac5565b6005546001600160a01b03163314611aac5760405162461bcd60e51b8152600401610ae390613aff565b611abb60148686868686612820565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610ab03384610b6e85604051806060016040528060258152602001613ef6602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906127e6565b6000610ab0338484612171565b6005546001600160a01b03163314611bbf5760405162461bcd60e51b8152600401610ae390613aff565b600f548103611c365760405162461bcd60e51b815260206004820152603960248201527f524549543a2043616e6e6f7420757064617465206d696e696d756d546f6b656e60448201527f734265666f72655377617020746f2073616d652076616c7565000000000000006064820152608401610ae3565b600f5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600f55565b6005546001600160a01b03163314611c935760405162461bcd60e51b8152600401610ae390613aff565b611ca260148686868686612b09565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611ad4565b6005546001600160a01b03163314611cea5760405162461bcd60e51b8152600401610ae390613aff565b6006546001600160a01b0390811690821603611d5a5760405162461bcd60e51b815260206004820152602960248201527f524549543a2054686520726f7574657220616c7265616479206861732074686160448201526874206164647265737360b81b6064820152608401610ae3565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611de15760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503611e215760405162461bcd60e51b8152600401610ae390613b6a565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611031565b6005546001600160a01b03163314611ea35760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611031565b6005546001600160a01b03163314611f255760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b038116611f8a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ae3565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080611ff38385613be7565b9050838110156120455760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ae3565b9392505050565b6001600160a01b0383166120ae5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ae3565b6001600160a01b03821661210f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ae3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166121975760405162461bcd60e51b8152600401610ae390613bff565b6001600160a01b0382166121bd5760405162461bcd60e51b8152600401610ae390613c44565b806000036121d6576121d183836000612e0e565b505050565b6001600160a01b0383166000908152601d602052604090205460ff1615801561221857506001600160a01b0382166000908152601d602052604090205460ff16155b1561252457600754600160a01b900460ff166122825760405162461bcd60e51b8152602060048201526024808201527f524549543a2054726164696e672069732063757272656e746c792064697361626044820152633632b21760e11b6064820152608401610ae3565b6001600160a01b03821660009081526017602052604090205460ff16156122e65760405162461bcd60e51b8152602060048201526018602482015277149152550e881058d8dbdd5b9d081a5cc8189b1bd8dad95960421b6044820152606401610ae3565b6001600160a01b03831660009081526017602052604090205460ff161561234a5760405162461bcd60e51b8152602060048201526018602482015277149152550e881058d8dbdd5b9d081a5cc8189b1bd8dad95960421b6044820152606401610ae3565b6001600160a01b03821660009081526019602052604090205460ff1661240b57600b548161238d846001600160a01b031660009081526020819052604090205490565b6123979190613be7565b111561240b5760405162461bcd60e51b815260206004820152603960248201527f524549543a2045787065637465642077616c6c657420616d6f756e742065786360448201527f6565647320746865206d617857616c6c6574416d6f756e742e000000000000006064820152608401610ae3565b6001600160a01b0382166000908152601a602052604090205460ff1661249757600c548111156124975760405162461bcd60e51b815260206004820152603160248201527f524549543a205472616e7366657220616d6f756e742065786365656473207468604482015270329036b0bc2a3c213abca0b6b7bab73a1760791b6064820152608401610ae3565b6001600160a01b0383166000908152601a602052604090205460ff1661252457600d548111156125245760405162461bcd60e51b815260206004820152603260248201527f524549543a205472616e7366657220616d6f756e742065786365656473207468604482015271329036b0bc2a3c29b2b63620b6b7bab73a1760711b6064820152608401610ae3565b6001600160a01b038084166000908152601b60205260408082205492851682529020546125599160ff90811691168585612f17565b600f543060009081526020819052604090205460075491111590600160a01b900460ff1680156125865750805b80156125955750600e5460ff16155b80156125ac5750601e54600160281b900460ff1615155b80156125d057506001600160a01b0383166000908152601b602052604090205460ff165b156125f557600e805460ff191660011790556125ea613200565b600e805460ff191690555b600e5460009060ff161580156126145750600754600160a01b900460ff165b6001600160a01b03861660009081526018602052604090205490915060ff168061265657506001600160a01b03841660009081526018602052604090205460ff165b1561265f575060005b8080156126775750601e54600160281b900460ff1615155b156126be57601e5460009060649061269990600160281b900460ff1686613c87565b6126a39190613cbc565b90506126af8185613bd0565b93506126bc863083612e0e565b505b6126c9858585612e0e565b6007546001600160a01b031663e30443bc866126fa816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561274057600080fd5b505af1925050508015612751575060015b506007546001600160a01b031663e30443bc85612783816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156127c957600080fd5b505af19250505080156127da575060015b15610d3d575050505050565b6000818484111561280a5760405162461bcd60e51b8152600401610ae3919061384e565b5060006128178486613bd0565b95945050505050565b600286015460ff8681169116146128a157604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613ed6833981519152916128879160481b90613cd0565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461293557604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613ed6833981519152916129149160481b90613cd0565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b90920416146129cd576040516f74726561737572794665654f6e42757960801b815260100160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613ed6833981519152916129a99160481b90613cd0565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614612a66576040516e6361706974616c4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613ed683398151915291612a409160481b90613cd0565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b9092041614612b01576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613ed683398151915291612ad99160481b90613cd0565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff8681166101009092041614612b9a57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613ed683398151915291612b7b9160481b90613cd0565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612c3357604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613ed683398151915291612c109160481b90613cd0565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612ccd57604051701d1c99585cdd5c9e51995953db94d95b1b607a1b815260110160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613ed683398151915291612ca89160481b90613cd0565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612d68576040516f18d85c1a5d185b11995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613ed683398151915291612d419160481b90613cd0565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b9092041614612b01576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613ed683398151915291612ddc9160481b90613cd0565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b038316612e345760405162461bcd60e51b8152600401610ae390613bff565b6001600160a01b038216612e5a5760405162461bcd60e51b8152600401610ae390613c44565b612e9781604051806060016040528060268152602001613e68602691396001600160a01b03861660009081526020819052604090205491906127e6565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612ec69082611fe6565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612164565b601e805464ffffffffff191690558315612fc657600560085443612f3b9190613bd0565b11612f5257601e805460ff19166064179055612fc6565b601654601e805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b821561304157601654601e805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b8215801561304d575083155b801561309357506001600160a01b0382166000908152601c602052604090205460ff168061309357506001600160a01b0381166000908152601c602052604090205460ff165b1561310d57601654601e805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b601e5460ff600160201b82048116916301000000810482169162010000820481169161314191610100820481169116613ce7565b61314b9190613ce7565b6131559190613ce7565b61315f9190613ce7565b601e805460ff928316600160281b90810265ff0000000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401526301000000840485166060820152600160201b840485166080820152920490921660a082015290517f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29181900360c00190a150505050565b30600090815260208190526040812054601e549091479160ff600160281b8204811692916002918491613234911687613c87565b61323e9190613cbc565b6132489190613cbc565b905060006132568286613bd0565b9050613261816134fc565b600061326d8547613bd0565b601e549091506000906132859060029060ff16613d0c565b601e5461329c9190600160281b900460ff16613d2e565b601e5460ff918216925060009160029184916132b9911686613c87565b6132c39190613cbc565b6132cd9190613cbc565b601e5490915060009083906132ea90610100900460ff1686613c87565b6132f49190613cbc565b601e5490915060009084906133129062010000900460ff1687613c87565b61331c9190613cbc565b601e54909150600090859061333b906301000000900460ff1688613c87565b6133459190613cbc565b9050600081836133558688613be7565b61335f9190613be7565b6133699190613be7565b6133739088613bd0565b6012546040519192506001600160a01b03169084156108fc029085906000818181858888f193505050501580156133ae573d6000803e3d6000fd5b50600a546011546133cd9186916001600160a01b03918216911661364e565b600a546013546133eb9184916001600160a01b03918216911661364e565b881561343d576133fb89866137a1565b60408051898152602081018790529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6007546040516000916001600160a01b03169083908381818185875af1925050503d806000811461348a576040519150601f19603f3d011682016040523d82523d6000602084013e61348f565b606091505b5050905080156134cd576040518281527fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9699060200160405180910390a15b5050601e805460ff909a16600160281b0265ff000000000019909a169990991790985550505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061353157613531613d51565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561358a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ae9190613d67565b816001815181106135c1576135c1613d51565b6001600160a01b0392831660209182029290920101526006546135e7913091168461204c565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613620908590600090869030904290600401613dc8565b600060405180830381600087803b15801561363a57600080fd5b505af1158015612b01573d6000803e3d6000fd5b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156136b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136dc9190613d67565b816000815181106136ef576136ef613d51565b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061372357613723613d51565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de9590869061376990600090869088904290600401613e04565b6000604051808303818588803b15801561378257600080fd5b505af1158015613796573d6000803e3d6000fd5b505050505050505050565b6006546137b99030906001600160a01b03168461204c565b60065460105460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613829573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d3d9190613e39565b600060208083528351808285015260005b8181101561387b5785810183015185820160400152820161385f565b8181111561388d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461119157600080fd5b600080604083850312156138cb57600080fd5b82356138d6816138a3565b946020939093013593505050565b6000806000606084860312156138f957600080fd5b8335613904816138a3565b92506020840135613914816138a3565b929592945050506040919091013590565b60006020828403121561393757600080fd5b5035919050565b60006020828403121561395057600080fd5b8135612045816138a3565b801515811461119157600080fd5b6000806040838503121561397c57600080fd5b82356138d68161395b565b6000806040838503121561399a57600080fd5b82356139a5816138a3565b915060208301356139b58161395b565b809150509250929050565b600080600080608085870312156139d657600080fd5b84356139e1816138a3565b935060208501356139f1816138a3565b92506040850135613a01816138a3565b91506060850135613a11816138a3565b939692955090935050565b803560ff81168114613a2d57600080fd5b919050565b600080600080600060a08688031215613a4a57600080fd5b613a5386613a1c565b9450613a6160208701613a1c565b9350613a6f60408701613a1c565b9250613a7d60608701613a1c565b9150613a8b60808701613a1c565b90509295509295909350565b60008060408385031215613aaa57600080fd5b8235613ab5816138a3565b915060208301356139b5816138a3565b600181811c90821680613ad957607f821691505b602082108103613af957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215613b4657600080fd5b5051919050565b600060208284031215613b5f57600080fd5b81516120458161395b565b60208082526030908201527f524549543a204163636f756e7420697320616c7265616479207468652076616c60408201526f7565206f6620276578636c756465642760801b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015613be257613be2613bba565b500390565b60008219821115613bfa57613bfa613bba565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000816000190483118215151615613ca157613ca1613bba565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613ccb57613ccb613ca6565b500490565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff03821115613d0457613d04613bba565b019392505050565b600060ff831680613d1f57613d1f613ca6565b8060ff84160491505092915050565b600060ff821660ff841680821015613d4857613d48613bba565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613d7957600080fd5b8151612045816138a3565b600081518084526020808501945080840160005b83811015613dbd5781516001600160a01b031687529582019590820190600101613d98565b509495945050505050565b85815284602082015260a060408201526000613de760a0830186613d84565b6001600160a01b0394909416606083015250608001529392505050565b848152608060208201526000613e1d6080830186613d84565b6001600160a01b03949094166040830152506060015292915050565b600080600060608486031215613e4e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200095c017fac8f150aea152ab2abec5ec477da40c83e134c5447a21d22045c67664736f6c634300080d003360806040523480156200001157600080fd5b5060408051808201825260158082527f524549545f4469766964656e645f547261636b65720000000000000000000000602080840182815285518087019096529285528401528151919291839183916200006e91600391620000fe565b50805162000084906004906020840190620000fe565b505050600062000099620000fa60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e10601155506000601255620001e0565b3390565b8280546200010c90620001a4565b90600052602060002090601f0160209004810192826200013057600085556200017b565b82601f106200014b57805160ff19168380011785556200017b565b828001600101855582156200017b579182015b828111156200017b5782518255916020019190600101906200015e565b50620001899291506200018d565b5090565b5b808211156200018957600081556001016200018e565b600181811c90821680620001b957607f821691505b602082108103620001da57634e487b7160e01b600052602260045260246000fd5b50919050565b6119d680620001f06000396000f3fe6080604052600436106101dc5760003560e01c80636f2789ec11610102578063a8b9d24011610095578063be10b61411610064578063be10b61414610555578063dd62ed3e1461056b578063e30443bc146105b1578063f2fde38b146105d157600080fd5b8063a8b9d240146104bf578063a9059cbb146104df578063aafd847a146104ff578063bc4c4b371461053557600080fd5b80638da5cb5b116100d15780638da5cb5b1461044257806391b89fba1461046a57806395d89b411461048a578063a457c2d71461049f57600080fd5b80636f2789ec146103cb57806370a08231146103e1578063715018a61461041757806385a6b3ae1461042c57600080fd5b806323b872dd1161017a57806331e79db01161014957806331e79db01461034657806339509351146103665780634e7b827f146103865780636a474002146103b657600080fd5b806323b872dd146102d457806327ce0147146102f45780633009a60914610314578063313ce5671461032a57600080fd5b806309bbedde116101b657806309bbedde14610253578063163c7cef1461027257806318160ddd14610292578063226cfa3d146102a757600080fd5b806303c83302146101f057806306fdde03146101f8578063095ea7b31461022357600080fd5b366101eb576101e96105f1565b005b600080fd5b6101e96105f1565b34801561020457600080fd5b5061020d6106b7565b60405161021a9190611643565b60405180910390f35b34801561022f57600080fd5b5061024361023e3660046116ad565b610749565b604051901515815260200161021a565b34801561025f57600080fd5b50600a545b60405190815260200161021a565b34801561027e57600080fd5b506101e961028d3660046116d9565b610760565b34801561029e57600080fd5b50600254610264565b3480156102b357600080fd5b506102646102c23660046116f2565b60106020526000908152604090205481565b3480156102e057600080fd5b506102436102ef36600461170f565b61082c565b34801561030057600080fd5b5061026461030f3660046116f2565b610895565b34801561032057600080fd5b50610264600e5481565b34801561033657600080fd5b506040516012815260200161021a565b34801561035257600080fd5b506101e96103613660046116f2565b6108f1565b34801561037257600080fd5b506102436103813660046116ad565b610a18565b34801561039257600080fd5b506102436103a13660046116f2565b600f6020526000908152604090205460ff1681565b3480156103c257600080fd5b506101e9610a4e565b3480156103d757600080fd5b5061026460115481565b3480156103ed57600080fd5b506102646103fc3660046116f2565b6001600160a01b031660009081526020819052604090205490565b34801561042357600080fd5b506101e9610a5a565b34801561043857600080fd5b5061026460075481565b34801561044e57600080fd5b506005546040516001600160a01b03909116815260200161021a565b34801561047657600080fd5b506102646104853660046116f2565b610ace565b34801561049657600080fd5b5061020d610ad9565b3480156104ab57600080fd5b506102436104ba3660046116ad565b610ae8565b3480156104cb57600080fd5b506102646104da3660046116f2565b610b37565b3480156104eb57600080fd5b506102436104fa3660046116ad565b610b63565b34801561050b57600080fd5b5061026461051a3660046116f2565b6001600160a01b031660009081526009602052604090205490565b34801561054157600080fd5b50610243610550366004611750565b610b70565b34801561056157600080fd5b5061026460125481565b34801561057757600080fd5b5061026461058636600461178e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105bd57600080fd5b506101e96105cc3660046116ad565b610c1e565b3480156105dd57600080fd5b506101e96105ec3660046116f2565b610d88565b6005546001600160a01b031633146106245760405162461bcd60e51b815260040161061b906117bc565b60405180910390fd5b600061062f60025490565b1161063957600080fd5b34156106b55761066c61064b60025490565b61065934600160801b610e73565b6106639190611807565b60065490610efc565b60065560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26007546106b19034610efc565b6007555b565b6060600380546106c690611829565b80601f01602080910402602001604051908101604052809291908181526020018280546106f290611829565b801561073f5780601f106107145761010080835404028352916020019161073f565b820191906000526020600020905b81548152906001019060200180831161072257829003601f168201915b5050505050905090565b6000610756338484610f5b565b5060015b92915050565b6005546001600160a01b0316331461078a5760405162461bcd60e51b815260040161061b906117bc565b80601254036108275760405162461bcd60e51b815260206004820152605760248201527f524549545f4469766964656e645f547261636b65723a206d696e696d756d546f60448201527f6b656e42616c616e6365466f724469766964656e647320616c7265616479207460648201527f68652076616c7565206f6620276e657756616c7565272e000000000000000000608482015260a40161061b565b601255565b600061083984848461107f565b61088b843361088685604051806060016040528060288152602001611954602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906110db565b610f5b565b5060019392505050565b6001600160a01b03811660009081526008602090815260408083205491839052822054600654600160801b926108e7926108e2926108dc916108d79190610e73565b611115565b90611125565b611163565b61075a9190611807565b6005546001600160a01b0316331461091b5760405162461bcd60e51b815260040161061b906117bc565b6001600160a01b0381166000908152600f602052604090205460ff161561094157600080fd5b6001600160a01b0381166000908152600f60205260408120805460ff1916600117905561096f908290611176565b60405163131836e760e21b8152600a60048201526001600160a01b0382166024820152735c7c9084847631f708d7141a149254c4308f5acb90634c60db9c9060440160006040518083038186803b1580156109c957600080fd5b505af41580156109dd573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107569185906108869086610efc565b610a57336111db565b50565b6005546001600160a01b03163314610a845760405162461bcd60e51b815260040161061b906117bc565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600061075a82610b37565b6060600480546106c690611829565b600061075633846108868560405180606001604052806025815260200161197c602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906110db565b6001600160a01b03811660009081526009602052604081205461075a90610b5d84610895565b90611321565b600061075633848461107f565b6005546000906001600160a01b03163314610b9d5760405162461bcd60e51b815260040161061b906117bc565b6000610ba8846111db565b90508015610c14576001600160a01b038416600081815260106020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610c029085815260200190565b60405180910390a3600191505061075a565b5060009392505050565b6005546001600160a01b03163314610c485760405162461bcd60e51b815260040161061b906117bc565b6001600160a01b0382166000908152600f602052604090205460ff16610d84576012548110610cf957610c7b8282611176565b604051632f0ad01760e21b8152600a60048201526001600160a01b038316602482015260448101829052735c7c9084847631f708d7141a149254c4308f5acb9063bc2b405c9060640160006040518083038186803b158015610cdc57600080fd5b505af4158015610cf0573d6000803e3d6000fd5b50505050610d77565b610d04826000611176565b60405163131836e760e21b8152600a60048201526001600160a01b0383166024820152735c7c9084847631f708d7141a149254c4308f5acb90634c60db9c9060440160006040518083038186803b158015610d5e57600080fd5b505af4158015610d72573d6000803e3d6000fd5b505050505b610d82826001610b70565b505b5050565b6005546001600160a01b03163314610db25760405162461bcd60e51b815260040161061b906117bc565b6001600160a01b038116610e175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161061b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600082600003610e855750600061075a565b6000610e918385611863565b905082610e9e8583611807565b14610ef55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161061b565b9392505050565b600080610f098385611882565b905083811015610ef55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161061b565b6001600160a01b038316610fbd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161061b565b6001600160a01b03821661101e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161061b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602b60248201527f524549545f4469766964656e645f547261636b65723a204e6f207472616e736660448201526a195c9cc8185b1b1bddd95960aa1b606482015260840161061b565b600081848411156110ff5760405162461bcd60e51b815260040161061b9190611643565b50600061110c848661189a565b95945050505050565b6000818181121561075a57600080fd5b60008061113283856118b1565b9050600083121580156111455750838112155b8061115a575060008312801561115a57508381125b610ef557600080fd5b60008082121561117257600080fd5b5090565b6001600160a01b038216600090815260208190526040902054808211156111b55760006111a38383611321565b90506111af8482611363565b50610d82565b80821015610d825760006111c98284611321565b90506111d584826113c7565b50505050565b6000806111e783610b37565b90508015611318576001600160a01b0383166000908152600960205260409020546112129082610efc565b6001600160a01b038416600081815260096020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906112619084815260200190565b60405180910390a26000836001600160a01b031682610bb890604051600060405180830381858888f193505050503d80600081146112bb576040519150601f19603f3d011682016040523d82523d6000602084013e6112c0565b606091505b5050905080611311576001600160a01b0384166000908152600960205260409020546112ec9083611321565b6001600160a01b03909416600090815260096020526040812094909455509192915050565b5092915050565b50600092915050565b6000610ef583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110db565b61136d828261140b565b6113a76113886108d783600654610e7390919063ffffffff16565b6001600160a01b038416600090815260086020526040902054906114f6565b6001600160a01b0390921660009081526008602052604090209190915550565b6113d18282611533565b6113a76113ec6108d783600654610e7390919063ffffffff16565b6001600160a01b03841660009081526008602052604090205490611125565b6001600160a01b0382166114615760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161061b565b61146d60008383610d82565b60025461147a9082610efc565b6002556001600160a01b0382166000908152602081905260409020546114a09082610efc565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b60008061150383856118f2565b9050600083121580156115165750838113155b8061115a575060008312801561115a5750838113610ef557600080fd5b6001600160a01b0382166115935760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161061b565b61159f82600083610d82565b6115dc81604051806060016040528060228152602001611932602291396001600160a01b03851660009081526020819052604090205491906110db565b6001600160a01b0383166000908152602081905260409020556002546116029082611321565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016114ea565b600060208083528351808285015260005b8181101561167057858101830151858201604001528201611654565b81811115611682576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610a5757600080fd5b600080604083850312156116c057600080fd5b82356116cb81611698565b946020939093013593505050565b6000602082840312156116eb57600080fd5b5035919050565b60006020828403121561170457600080fd5b8135610ef581611698565b60008060006060848603121561172457600080fd5b833561172f81611698565b9250602084013561173f81611698565b929592945050506040919091013590565b6000806040838503121561176357600080fd5b823561176e81611698565b91506020830135801515811461178357600080fd5b809150509250929050565b600080604083850312156117a157600080fd5b82356117ac81611698565b9150602083013561178381611698565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261182457634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061183d57607f821691505b60208210810361185d57634e487b7160e01b600052602260045260246000fd5b50919050565b600081600019048311821515161561187d5761187d6117f1565b500290565b60008219821115611895576118956117f1565b500190565b6000828210156118ac576118ac6117f1565b500390565b600080821280156001600160ff1b03849003851316156118d3576118d36117f1565b600160ff1b83900384128116156118ec576118ec6117f1565b50500190565b60008083128015600160ff1b850184121615611910576119106117f1565b6001600160ff1b038401831381161561192b5761192b6117f1565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ac3784e0251fc7eea29bd69381dd98c1300c553460c2d5e3f45e9ee15182ed6764736f6c634300080d0033
Deployed Bytecode
0x6080604052600436106103035760003560e01c8063781edb3c11610190578063b1ba39ea116100dc578063d2d7ad8311610095578063dd62ed3e1161006f578063dd62ed3e1461094f578063e07b162f14610995578063f2fde38b146109ab578063fe017535146109cb57600080fd5b8063d2d7ad83146108f9578063d32215761461090f578063d46980161461092f57600080fd5b8063b1ba39ea146107d8578063b62496f5146107f8578063bea9849e14610828578063c024666814610848578063c54e44eb14610868578063cd43e2281461088857600080fd5b80639a364e6711610149578063a457c2d711610123578063a457c2d714610762578063a9059cbb14610782578063aa4bde28146107a2578063aee50b1e146107b857600080fd5b80639a364e671461070c5780639f9bb74e1461072c5780639fad96831461074257600080fd5b8063781edb3c146106595780637c0a893d1461067957806383672f3e14610699578063880bcbc1146106b95780638da5cb5b146106d957806395d89b41146106f757600080fd5b806336f8be9a1161024f5780634e71d92d1161020857806366164f6f116101e257806366164f6f146105d957806370a08231146105ee578063715018a61461062457806375f0a8741461063957600080fd5b80634e71d92d1461058f57806355eba868146105a457806364b0f653146105c457600080fd5b806336f8be9a146104bb57806339509351146104db57806345a42329146104fb5780634626402b1461051b57806349bd5a5e1461053b5780634d78fdc61461056f57600080fd5b806323b872dd116102bc57806330bb4cff1161029657806330bb4cff14610455578063313ce5671461046a57806331e79db01461048657806334cf1fea146104a657600080fd5b806323b872dd146103f557806327a14fc2146104155780632c1f52161461043557600080fd5b8063064a59d01461030f57806306fdde0314610345578063095ea7b3146103675780630bd05b69146103875780631694505e1461039e57806318160ddd146103d657600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5060075461033090600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5061035a610a11565b60405161033c919061384e565b34801561037357600080fd5b506103306103823660046138b8565b610aa3565b34801561039357600080fd5b5061039c610ab9565b005b3480156103aa57600080fd5b506006546103be906001600160a01b031681565b6040516001600160a01b03909116815260200161033c565b3480156103e257600080fd5b506002545b60405190815260200161033c565b34801561040157600080fd5b506103306104103660046138e4565b610b14565b34801561042157600080fd5b5061039c610430366004613925565b610b7d565b34801561044157600080fd5b506007546103be906001600160a01b031681565b34801561046157600080fd5b506103e7610c45565b34801561047657600080fd5b506040516012815260200161033c565b34801561049257600080fd5b5061039c6104a136600461393e565b610cb8565b3480156104b257600080fd5b5061039c610d44565b3480156104c757600080fd5b5061039c6104d6366004613969565b610d7d565b3480156104e757600080fd5b506103306104f63660046138b8565b610eee565b34801561050757600080fd5b5061039c610516366004613987565b610f24565b34801561052757600080fd5b506012546103be906001600160a01b031681565b34801561054757600080fd5b506103be7f0000000000000000000000007afbeb90b3f15d378e59f741dca38f4b07653b9c81565b34801561057b57600080fd5b5061039c61058a36600461393e565b61103d565b34801561059b57600080fd5b5061039c61111c565b3480156105b057600080fd5b5061039c6105bf36600461393e565b611194565b3480156105d057600080fd5b506103e7611264565b3480156105e557600080fd5b5061039c6112ae565b3480156105fa57600080fd5b506103e761060936600461393e565b6001600160a01b031660009081526020819052604090205490565b34801561063057600080fd5b5061039c61137d565b34801561064557600080fd5b506011546103be906001600160a01b031681565b34801561066557600080fd5b5061039c610674366004613987565b6113f1565b34801561068557600080fd5b5061039c61069436600461393e565b6114b3565b3480156106a557600080fd5b5061039c6106b43660046139c0565b611608565b3480156106c557600080fd5b5061039c6106d4366004613987565b6119b1565b3480156106e557600080fd5b506005546001600160a01b03166103be565b34801561070357600080fd5b5061035a611a73565b34801561071857600080fd5b506013546103be906001600160a01b031681565b34801561073857600080fd5b506103e7600d5481565b34801561074e57600080fd5b5061039c61075d366004613a32565b611a82565b34801561076e57600080fd5b5061033061077d3660046138b8565b611b39565b34801561078e57600080fd5b5061033061079d3660046138b8565b611b88565b3480156107ae57600080fd5b506103e7600b5481565b3480156107c457600080fd5b5061039c6107d3366004613925565b611b95565b3480156107e457600080fd5b5061039c6107f3366004613a32565b611c69565b34801561080457600080fd5b5061033061081336600461393e565b601b6020526000908152604090205460ff1681565b34801561083457600080fd5b5061039c61084336600461393e565b611cc0565b34801561085457600080fd5b5061039c610863366004613987565b611db7565b34801561087457600080fd5b50600a546103be906001600160a01b031681565b34801561089457600080fd5b5060165460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a00161033c565b34801561090557600080fd5b506103e7600f5481565b34801561091b57600080fd5b5061039c61092a366004613987565b611e79565b34801561093b57600080fd5b506010546103be906001600160a01b031681565b34801561095b57600080fd5b506103e761096a366004613a97565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109a157600080fd5b506103e7600c5481565b3480156109b757600080fd5b5061039c6109c636600461393e565b611efb565b3480156109d757600080fd5b5060165460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166108c5565b606060038054610a2090613ac5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4c90613ac5565b8015610a995780601f10610a6e57610100808354040283529160200191610a99565b820191906000526020600020905b815481529060010190602001808311610a7c57829003601f168201915b5050505050905090565b6000610ab033848461204c565b50600192915050565b6005546001600160a01b03163314610aec5760405162461bcd60e51b8152600401610ae390613aff565b60405180910390fd5b6007805460ff60a01b1916600160a01b179055600954600003610b125742600955436008555b565b6000610b21848484612171565b610b738433610b6e85604051806060016040528060288152602001613eae602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906127e6565b61204c565b5060019392505050565b6005546001600160a01b03163314610ba75760405162461bcd60e51b8152600401610ae390613aff565b600b548103610c125760405162461bcd60e51b815260206004820152603160248201527f524549543a2043616e6e6f7420757064617465206d617857616c6c6574416d6f604482015270756e7420746f2073616d652076616c756560781b6064820152608401610ae3565b600b5460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600b55565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb39190613b34565b905090565b6005546001600160a01b03163314610ce25760405162461bcd60e51b8152600401610ae390613aff565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015610d2957600080fd5b505af1158015610d3d573d6000803e3d6000fd5b5050505050565b6005546001600160a01b03163314610d6e5760405162461bcd60e51b8152600401610ae390613aff565b6007805460ff60a01b19169055565b6005546001600160a01b03163314610da75760405162461bcd60e51b8152600401610ae390613aff565b8115610e4c57600d548103610e185760405162461bcd60e51b815260206004820152603160248201527f524549543a2043616e6e6f7420757064617465206d6178547853656c6c416d6f604482015270756e7420746f2073616d652076616c756560781b6064820152608401610ae3565b600d5460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600d5550565b600c548103610eb65760405162461bcd60e51b815260206004820152603060248201527f524549543a2043616e6e6f7420757064617465206d61785478427579416d6f7560448201526f6e7420746f2073616d652076616c756560801b6064820152608401610ae3565b600c5460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600c8190555b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ab0918590610b6e9086611fe6565b6005546001600160a01b03163314610f4e5760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b0382166000908152601c602052604090205481151560ff909116151503610fdd5760405162461bcd60e51b815260206004820152603660248201527f524549543a205468652073656c65637465642077616c6c657420697320616c72604482015275032b0b23c9039b2ba103a37903a3432903b30b63ab2960551b6064820152608401610ae3565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6005546001600160a01b031633146110675760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b03811660009081526017602052604090205460ff166110cf5760405162461bcd60e51b815260206004820152601c60248201527f524549543a204163636f756e74206973206e6f7420626c636f6b6564000000006044820152606401610ae3565b6001600160a01b038116600081815260176020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af115801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190613b4d565b50565b6005546001600160a01b031633146111be5760405162461bcd60e51b8152600401610ae390613aff565b600a546001600160a01b03908116908216036112425760405162461bcd60e51b815260206004820152603d60248201527f524549543a205468652055534454206164647265737320697320616c7265616460448201527f79207468652076616c7565206f66206e657755534454416464726573730000006064820152608401610ae3565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610c8f573d6000803e3d6000fd5b6005546001600160a01b031633146112d85760405162461bcd60e51b8152600401610ae390613aff565b4760006112ed6005546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114611337576040519150601f19603f3d011682016040523d82523d6000602084013e61133c565b606091505b505090508015610eea576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15050565b6005546001600160a01b031633146113a75760405162461bcd60e51b8152600401610ae390613aff565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461141b5760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b03821660009081526019602052604090205481151560ff90911615150361145b5760405162461bcd60e51b8152600401610ae390613b6a565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101611031565b6005546001600160a01b031633146114dd5760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b03811660009081526017602052604090205460ff16156115465760405162461bcd60e51b815260206004820181905260248201527f524549543a204163636f756e7420697320616c726561647920626c6f636b65646044820152606401610ae3565b6202a300600954426115589190613bd0565b106115b65760405162461bcd60e51b815260206004820152602860248201527f524549543a2054696d6520746f20626c6f636b206163636f756e74732068617360448201526708195e1c1a5c995960c21b6064820152608401610ae3565b6001600160a01b038116600081815260176020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6005546001600160a01b031633146116325760405162461bcd60e51b8152600401610ae390613aff565b6010546001600160a01b03858116911614611712576001600160a01b0384166116ab5760405162461bcd60e51b815260206004820152602560248201527f524549543a20546865206c697175696469747957616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610ae3565b6010546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f0160405190819003812090600080516020613e8e83398151915290600090a4601080546001600160a01b0319166001600160a01b0386161790555b6011546001600160a01b038481169116146117f2576001600160a01b03831661178b5760405162461bcd60e51b815260206004820152602560248201527f524549543a20546865206d61726b6574696e6757616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610ae3565b6011546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f0160405190819003812090600080516020613e8e83398151915290600090a4601180546001600160a01b0319166001600160a01b0385161790555b6012546001600160a01b038381169116146118cf576001600160a01b0382166118695760405162461bcd60e51b8152602060048201526024808201527f524549543a2054686520747265617375727957616c6c65742063616e6e6f74206044820152630626520360e41b6064820152608401610ae3565b6012546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b0391821691841690600e0160405190819003812090600080516020613e8e83398151915290600090a4601280546001600160a01b0319166001600160a01b0384161790555b6013546001600160a01b038281169116146119ab576001600160a01b0381166119465760405162461bcd60e51b815260206004820152602360248201527f524549543a20546865206361706974616c57616c6c65742063616e6e6f74206260448201526206520360ec1b6064820152608401610ae3565b6013546040516c18d85c1a5d185b15d85b1b195d609a1b81526001600160a01b0391821691831690600d0160405190819003812090600080516020613e8e83398151915290600090a4601380546001600160a01b0319166001600160a01b0383161790555b50505050565b6005546001600160a01b031633146119db5760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b0382166000908152601a602052604090205481151560ff909116151503611a1b5760405162461bcd60e51b8152600401610ae390613b6a565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f590b452f33c2ce4c8d34a3c2605002d05726f44c785969820a0bafeb361566409101611031565b606060048054610a2090613ac5565b6005546001600160a01b03163314611aac5760405162461bcd60e51b8152600401610ae390613aff565b611abb60148686868686612820565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610ab03384610b6e85604051806060016040528060258152602001613ef6602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906127e6565b6000610ab0338484612171565b6005546001600160a01b03163314611bbf5760405162461bcd60e51b8152600401610ae390613aff565b600f548103611c365760405162461bcd60e51b815260206004820152603960248201527f524549543a2043616e6e6f7420757064617465206d696e696d756d546f6b656e60448201527f734265666f72655377617020746f2073616d652076616c7565000000000000006064820152608401610ae3565b600f5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600f55565b6005546001600160a01b03163314611c935760405162461bcd60e51b8152600401610ae390613aff565b611ca260148686868686612b09565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611ad4565b6005546001600160a01b03163314611cea5760405162461bcd60e51b8152600401610ae390613aff565b6006546001600160a01b0390811690821603611d5a5760405162461bcd60e51b815260206004820152602960248201527f524549543a2054686520726f7574657220616c7265616479206861732074686160448201526874206164647265737360b81b6064820152608401610ae3565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611de15760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503611e215760405162461bcd60e51b8152600401610ae390613b6a565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611031565b6005546001600160a01b03163314611ea35760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611031565b6005546001600160a01b03163314611f255760405162461bcd60e51b8152600401610ae390613aff565b6001600160a01b038116611f8a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ae3565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080611ff38385613be7565b9050838110156120455760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ae3565b9392505050565b6001600160a01b0383166120ae5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ae3565b6001600160a01b03821661210f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ae3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166121975760405162461bcd60e51b8152600401610ae390613bff565b6001600160a01b0382166121bd5760405162461bcd60e51b8152600401610ae390613c44565b806000036121d6576121d183836000612e0e565b505050565b6001600160a01b0383166000908152601d602052604090205460ff1615801561221857506001600160a01b0382166000908152601d602052604090205460ff16155b1561252457600754600160a01b900460ff166122825760405162461bcd60e51b8152602060048201526024808201527f524549543a2054726164696e672069732063757272656e746c792064697361626044820152633632b21760e11b6064820152608401610ae3565b6001600160a01b03821660009081526017602052604090205460ff16156122e65760405162461bcd60e51b8152602060048201526018602482015277149152550e881058d8dbdd5b9d081a5cc8189b1bd8dad95960421b6044820152606401610ae3565b6001600160a01b03831660009081526017602052604090205460ff161561234a5760405162461bcd60e51b8152602060048201526018602482015277149152550e881058d8dbdd5b9d081a5cc8189b1bd8dad95960421b6044820152606401610ae3565b6001600160a01b03821660009081526019602052604090205460ff1661240b57600b548161238d846001600160a01b031660009081526020819052604090205490565b6123979190613be7565b111561240b5760405162461bcd60e51b815260206004820152603960248201527f524549543a2045787065637465642077616c6c657420616d6f756e742065786360448201527f6565647320746865206d617857616c6c6574416d6f756e742e000000000000006064820152608401610ae3565b6001600160a01b0382166000908152601a602052604090205460ff1661249757600c548111156124975760405162461bcd60e51b815260206004820152603160248201527f524549543a205472616e7366657220616d6f756e742065786365656473207468604482015270329036b0bc2a3c213abca0b6b7bab73a1760791b6064820152608401610ae3565b6001600160a01b0383166000908152601a602052604090205460ff1661252457600d548111156125245760405162461bcd60e51b815260206004820152603260248201527f524549543a205472616e7366657220616d6f756e742065786365656473207468604482015271329036b0bc2a3c29b2b63620b6b7bab73a1760711b6064820152608401610ae3565b6001600160a01b038084166000908152601b60205260408082205492851682529020546125599160ff90811691168585612f17565b600f543060009081526020819052604090205460075491111590600160a01b900460ff1680156125865750805b80156125955750600e5460ff16155b80156125ac5750601e54600160281b900460ff1615155b80156125d057506001600160a01b0383166000908152601b602052604090205460ff165b156125f557600e805460ff191660011790556125ea613200565b600e805460ff191690555b600e5460009060ff161580156126145750600754600160a01b900460ff165b6001600160a01b03861660009081526018602052604090205490915060ff168061265657506001600160a01b03841660009081526018602052604090205460ff165b1561265f575060005b8080156126775750601e54600160281b900460ff1615155b156126be57601e5460009060649061269990600160281b900460ff1686613c87565b6126a39190613cbc565b90506126af8185613bd0565b93506126bc863083612e0e565b505b6126c9858585612e0e565b6007546001600160a01b031663e30443bc866126fa816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561274057600080fd5b505af1925050508015612751575060015b506007546001600160a01b031663e30443bc85612783816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156127c957600080fd5b505af19250505080156127da575060015b15610d3d575050505050565b6000818484111561280a5760405162461bcd60e51b8152600401610ae3919061384e565b5060006128178486613bd0565b95945050505050565b600286015460ff8681169116146128a157604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613ed6833981519152916128879160481b90613cd0565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461293557604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613ed6833981519152916129149160481b90613cd0565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b90920416146129cd576040516f74726561737572794665654f6e42757960801b815260100160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613ed6833981519152916129a99160481b90613cd0565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614612a66576040516e6361706974616c4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613ed683398151915291612a409160481b90613cd0565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b9092041614612b01576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613ed683398151915291612ad99160481b90613cd0565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff8681166101009092041614612b9a57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613ed683398151915291612b7b9160481b90613cd0565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612c3357604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613ed683398151915291612c109160481b90613cd0565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612ccd57604051701d1c99585cdd5c9e51995953db94d95b1b607a1b815260110160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613ed683398151915291612ca89160481b90613cd0565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612d68576040516f18d85c1a5d185b11995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613ed683398151915291612d419160481b90613cd0565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b9092041614612b01576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613ed683398151915291612ddc9160481b90613cd0565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b038316612e345760405162461bcd60e51b8152600401610ae390613bff565b6001600160a01b038216612e5a5760405162461bcd60e51b8152600401610ae390613c44565b612e9781604051806060016040528060268152602001613e68602691396001600160a01b03861660009081526020819052604090205491906127e6565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612ec69082611fe6565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612164565b601e805464ffffffffff191690558315612fc657600560085443612f3b9190613bd0565b11612f5257601e805460ff19166064179055612fc6565b601654601e805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b821561304157601654601e805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b8215801561304d575083155b801561309357506001600160a01b0382166000908152601c602052604090205460ff168061309357506001600160a01b0381166000908152601c602052604090205460ff165b1561310d57601654601e805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b601e5460ff600160201b82048116916301000000810482169162010000820481169161314191610100820481169116613ce7565b61314b9190613ce7565b6131559190613ce7565b61315f9190613ce7565b601e805460ff928316600160281b90810265ff0000000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401526301000000840485166060820152600160201b840485166080820152920490921660a082015290517f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29181900360c00190a150505050565b30600090815260208190526040812054601e549091479160ff600160281b8204811692916002918491613234911687613c87565b61323e9190613cbc565b6132489190613cbc565b905060006132568286613bd0565b9050613261816134fc565b600061326d8547613bd0565b601e549091506000906132859060029060ff16613d0c565b601e5461329c9190600160281b900460ff16613d2e565b601e5460ff918216925060009160029184916132b9911686613c87565b6132c39190613cbc565b6132cd9190613cbc565b601e5490915060009083906132ea90610100900460ff1686613c87565b6132f49190613cbc565b601e5490915060009084906133129062010000900460ff1687613c87565b61331c9190613cbc565b601e54909150600090859061333b906301000000900460ff1688613c87565b6133459190613cbc565b9050600081836133558688613be7565b61335f9190613be7565b6133699190613be7565b6133739088613bd0565b6012546040519192506001600160a01b03169084156108fc029085906000818181858888f193505050501580156133ae573d6000803e3d6000fd5b50600a546011546133cd9186916001600160a01b03918216911661364e565b600a546013546133eb9184916001600160a01b03918216911661364e565b881561343d576133fb89866137a1565b60408051898152602081018790529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6007546040516000916001600160a01b03169083908381818185875af1925050503d806000811461348a576040519150601f19603f3d011682016040523d82523d6000602084013e61348f565b606091505b5050905080156134cd576040518281527fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9699060200160405180910390a15b5050601e805460ff909a16600160281b0265ff000000000019909a169990991790985550505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061353157613531613d51565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561358a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ae9190613d67565b816001815181106135c1576135c1613d51565b6001600160a01b0392831660209182029290920101526006546135e7913091168461204c565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613620908590600090869030904290600401613dc8565b600060405180830381600087803b15801561363a57600080fd5b505af1158015612b01573d6000803e3d6000fd5b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156136b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136dc9190613d67565b816000815181106136ef576136ef613d51565b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061372357613723613d51565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de9590869061376990600090869088904290600401613e04565b6000604051808303818588803b15801561378257600080fd5b505af1158015613796573d6000803e3d6000fd5b505050505050505050565b6006546137b99030906001600160a01b03168461204c565b60065460105460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613829573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d3d9190613e39565b600060208083528351808285015260005b8181101561387b5785810183015185820160400152820161385f565b8181111561388d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461119157600080fd5b600080604083850312156138cb57600080fd5b82356138d6816138a3565b946020939093013593505050565b6000806000606084860312156138f957600080fd5b8335613904816138a3565b92506020840135613914816138a3565b929592945050506040919091013590565b60006020828403121561393757600080fd5b5035919050565b60006020828403121561395057600080fd5b8135612045816138a3565b801515811461119157600080fd5b6000806040838503121561397c57600080fd5b82356138d68161395b565b6000806040838503121561399a57600080fd5b82356139a5816138a3565b915060208301356139b58161395b565b809150509250929050565b600080600080608085870312156139d657600080fd5b84356139e1816138a3565b935060208501356139f1816138a3565b92506040850135613a01816138a3565b91506060850135613a11816138a3565b939692955090935050565b803560ff81168114613a2d57600080fd5b919050565b600080600080600060a08688031215613a4a57600080fd5b613a5386613a1c565b9450613a6160208701613a1c565b9350613a6f60408701613a1c565b9250613a7d60608701613a1c565b9150613a8b60808701613a1c565b90509295509295909350565b60008060408385031215613aaa57600080fd5b8235613ab5816138a3565b915060208301356139b5816138a3565b600181811c90821680613ad957607f821691505b602082108103613af957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215613b4657600080fd5b5051919050565b600060208284031215613b5f57600080fd5b81516120458161395b565b60208082526030908201527f524549543a204163636f756e7420697320616c7265616479207468652076616c60408201526f7565206f6620276578636c756465642760801b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015613be257613be2613bba565b500390565b60008219821115613bfa57613bfa613bba565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000816000190483118215151615613ca157613ca1613bba565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613ccb57613ccb613ca6565b500490565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff03821115613d0457613d04613bba565b019392505050565b600060ff831680613d1f57613d1f613ca6565b8060ff84160491505092915050565b600060ff821660ff841680821015613d4857613d48613bba565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613d7957600080fd5b8151612045816138a3565b600081518084526020808501945080840160005b83811015613dbd5781516001600160a01b031687529582019590820190600101613d98565b509495945050505050565b85815284602082015260a060408201526000613de760a0830186613d84565b6001600160a01b0394909416606083015250608001529392505050565b848152608060208201526000613e1d6080830186613d84565b6001600160a01b03949094166040830152506060015292915050565b600080600060608486031215613e4e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200095c017fac8f150aea152ab2abec5ec477da40c83e134c5447a21d22045c67664736f6c634300080d0033
Deployed Bytecode Sourcemap
19473:21758:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19772:28;;;;;;;;;;-1:-1:-1;19772:28:0;;;;-1:-1:-1;;;19772:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;19772:28:0;;;;;;;;12315:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13139:154::-;;;;;;;;;;-1:-1:-1;13139:154:0;;;;;:::i;:::-;;:::i;25085:195::-;;;;;;;;;;;;;:::i;:::-;;19513:30;;;;;;;;;;-1:-1:-1;19513:30:0;;;;-1:-1:-1;;;;;19513:30:0;;;;;;-1:-1:-1;;;;;1443:32:1;;;1425:51;;1413:2;1398:18;19513:30:0;1264:218:1;12600:99:0;;;;;;;;;;-1:-1:-1;12682:12:0;;12600:99;;;1633:25:1;;;1621:2;1606:18;12600:99:0;1487:177:1;13298:313:0;;;;;;;;;;-1:-1:-1;13298:313:0;;;;;:::i;:::-;;:::i;30435:253::-;;;;;;;;;;-1:-1:-1;30435:253:0;;;;;:::i;:::-;;:::i;19724:42::-;;;;;;;;;;-1:-1:-1;19724:42:0;;;;-1:-1:-1;;;;;19724:42:0;;;31849:132;;;;;;;;;;;;;:::i;12511:84::-;;;;;;;;;;-1:-1:-1;12511:84:0;;12588:2;2701:36:1;;2689:2;2674:18;12511:84:0;2559:184:1;27286:121:0;;;;;;;;;;-1:-1:-1;27286:121:0;;;;;:::i;:::-;;:::i;25283:82::-;;;;;;;;;;;;;:::i;30691:489::-;;;;;;;;;;-1:-1:-1;30691:489:0;;;;;:::i;:::-;;:::i;13616:203::-;;;;;;;;;;-1:-1:-1;13616:203:0;;;;;:::i;:::-;;:::i;26677:324::-;;;;;;;;;;-1:-1:-1;26677:324:0;;;;;:::i;:::-;;:::i;20553:29::-;;;;;;;;;;-1:-1:-1;20553:29:0;;;;-1:-1:-1;;;;;20553:29:0;;;19547:38;;;;;;;;;;;;;;;26264:208;;;;;;;;;;-1:-1:-1;26264:208:0;;;;;:::i;:::-;;:::i;31488:94::-;;;;;;;;;;;;;:::i;26475:199::-;;;;;;;;;;-1:-1:-1;26475:199:0;;;;;:::i;:::-;;:::i;31984:132::-;;;;;;;;;;;;;:::i;31585:246::-;;;;;;;;;;;;;:::i;12704:118::-;;;;;;;;;;-1:-1:-1;12704:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;12799:18:0;12778:7;12799:18;;;;;;;;;;;;12704:118;11549:133;;;;;;;;;;;;;:::i;20519:30::-;;;;;;;;;;-1:-1:-1;20519:30:0;;;;-1:-1:-1;;;;;20519:30:0;;;27410:316;;;;;;;;;;-1:-1:-1;27410:316:0;;;;;:::i;:::-;;:::i;25938:323::-;;;;;;;;;;-1:-1:-1;25938:323:0;;;;;:::i;:::-;;:::i;28068:1176::-;;;;;;;;;;-1:-1:-1;28068:1176:0;;;;;:::i;:::-;;:::i;27729:336::-;;;;;;;;;;-1:-1:-1;27729:336:0;;;;;:::i;:::-;;:::i;11365:70::-;;;;;;;;;;-1:-1:-1;11424:6:0;;-1:-1:-1;;;;;11424:6:0;11365:70;;12411:95;;;;;;;;;;;;;:::i;20586:28::-;;;;;;;;;;-1:-1:-1;20586:28:0;;;;-1:-1:-1;;;;;20586:28:0;;;20323:61;;;;;;;;;;;;;;;;29262:434;;;;;;;;;;-1:-1:-1;29262:434:0;;;;;:::i;:::-;;:::i;13824:254::-;;;;;;;;;;-1:-1:-1;13824:254:0;;;;;:::i;:::-;;:::i;12827:160::-;;;;;;;;;;-1:-1:-1;12827:160:0;;;;;:::i;:::-;;:::i;20128:60::-;;;;;;;;;;;;;;;;31183:302;;;;;;;;;;-1:-1:-1;31183:302:0;;;;;:::i;:::-;;:::i;29699:452::-;;;;;;;;;;-1:-1:-1;29699:452:0;;;;;:::i;:::-;;:::i;21352:58::-;;;;;;;;;;-1:-1:-1;21352:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30154:278;;;;;;;;;;-1:-1:-1;30154:278:0;;;;;:::i;:::-;;:::i;27004:279::-;;;;;;;;;;-1:-1:-1;27004:279:0;;;;;:::i;:::-;;:::i;19937:64::-;;;;;;;;;;-1:-1:-1;19937:64:0;;;;-1:-1:-1;;;;;19937:64:0;;;32119:220;;;;;;;;;;-1:-1:-1;32215:23:0;;;;;;;32240;;;;;;-1:-1:-1;;;32265:22:0;;;;;-1:-1:-1;;;32289:21:0;;;;;-1:-1:-1;;;32312:21:0;;;;32119:220;;;;5607:4:1;5595:17;;;5577:36;;5649:17;;;5644:2;5629:18;;5622:45;5703:17;;;5683:18;;;5676:45;;;;5757:17;;5752:2;5737:18;;5730:45;5812:17;;;5806:3;5791:19;;5784:46;5564:3;5549:19;32119:220:0;5338:498:1;20416:60:0;;;;;;;;;;;;;;;;25733:202;;;;;;;;;;-1:-1:-1;25733:202:0;;;;;:::i;:::-;;:::i;20482:30::-;;;;;;;;;;-1:-1:-1;20482:30:0;;;;-1:-1:-1;;;;;20482:30:0;;;12992:142;;;;;;;;;;-1:-1:-1;12992:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;13102:18:0;;;13081:7;13102:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12992:142;20256:60;;;;;;;;;;;;;;;;11687:223;;;;;;;;;;-1:-1:-1;11687:223:0;;;;;:::i;:::-;;:::i;32342:226::-;;;;;;;;;;-1:-1:-1;32439:24:0;;;;;;;;;32465;;;;;;-1:-1:-1;;;32491:23:0;;;;;-1:-1:-1;;;32516:22:0;;;;;-1:-1:-1;;;32540:22:0;;;;32342:226;;12315:91;12369:13;12396:5;12389:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12315:91;:::o;13139:154::-;13222:4;13233:39;10831:10;13256:7;13265:6;13233:8;:39::i;:::-;-1:-1:-1;13284:4:0;13139:154;;;;:::o;25085:195::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;;;;;;;;;25136:16:::1;:23:::0;;-1:-1:-1;;;;25136:23:0::1;-1:-1:-1::0;;;25136:23:0::1;::::0;;25168:16:::1;::::0;25136:23;25168:21;25164:112:::1;;25216:15;25197:16;:34:::0;25258:12:::1;25237:18;:33:::0;25164:112:::1;25085:195::o:0;13298:313::-;13417:4;13428:36;13438:6;13446:9;13457:6;13428:9;:36::i;:::-;13469:121;13478:6;10831:10;13500:89;13538:6;13500:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13500:19:0;;;;;;:11;:19;;;;;;;;10831:10;13500:33;;;;;;;;;;:37;:89::i;:::-;13469:8;:121::i;:::-;-1:-1:-1;13602:4:0;13298:313;;;;;:::o;30435:253::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;30525:15:::1;;30513:8;:27:::0;30505:89:::1;;;::::0;-1:-1:-1;;;30505:89:0;;7182:2:1;30505:89:0::1;::::0;::::1;7164:21:1::0;7221:2;7201:18;;;7194:30;7260:34;7240:18;;;7233:62;-1:-1:-1;;;7311:18:1;;;7304:47;7368:19;;30505:89:0::1;6980:413:1::0;30505:89:0::1;30636:15;::::0;30604:48:::1;::::0;30626:8;;30604:48:::1;::::0;;;::::1;30657:15;:26:::0;30435:253::o;31849:132::-;31933:15;;:43;;;-1:-1:-1;;;31933:43:0;;;;31912:7;;-1:-1:-1;;;;;31933:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31926:50;;31849:132;:::o;27286:121::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;27357:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;27357:45:0;;-1:-1:-1;;;;;1443:32:1;;;27357:45:0::1;::::0;::::1;1425:51:1::0;27357:15:0;;::::1;::::0;:36:::1;::::0;1398:18:1;;27357:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27286:121:::0;:::o;25283:82::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;25336:16:::1;:24:::0;;-1:-1:-1;;;;25336:24:0::1;::::0;;25283:82::o;30691:489::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;30782:6:::1;30779:397;;;30816:15;;30804:8;:27:::0;30796:89:::1;;;::::0;-1:-1:-1;;;30796:89:0;;7789:2:1;30796:89:0::1;::::0;::::1;7771:21:1::0;7828:2;7808:18;;;7801:30;7867:34;7847:18;;;7840:62;-1:-1:-1;;;7918:18:1;;;7911:47;7975:19;;30796:89:0::1;7587:413:1::0;30796:89:0::1;30928:15;::::0;30896:48:::1;::::0;30918:8;;30896:48:::1;::::0;;;::::1;30950:15;:26:::0;-1:-1:-1;30691:489:0:o;30779:397::-:1;31014:14;;31002:8;:26:::0;30994:87:::1;;;::::0;-1:-1:-1;;;30994:87:0;;8207:2:1;30994:87:0::1;::::0;::::1;8189:21:1::0;8246:2;8226:18;;;8219:30;8285:34;8265:18;;;8258:62;-1:-1:-1;;;8336:18:1;;;8329:46;8392:19;;30994:87:0::1;8005:412:1::0;30994:87:0::1;31124:14;::::0;31092:47:::1;::::0;31114:8;;31092:47:::1;::::0;;;::::1;31145:14;:25:::0;;;30779:397:::1;30691:489:::0;;:::o;13616:203::-;10831:10;13704:4;13747:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13747:34:0;;;;;;;;;;13704:4;;13715:83;;13738:7;;13747:50;;13786:10;13747:38;:50::i;26677:324::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26779:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;26771:114:::1;;;::::0;-1:-1:-1;;;26771:114:0;;8624:2:1;26771:114:0::1;::::0;::::1;8606:21:1::0;8663:2;8643:18;;;8636:30;8702:34;8682:18;;;8675:62;-1:-1:-1;;;8753:18:1;;;8746:52;8815:19;;26771:114:0::1;8422:418:1::0;26771:114:0::1;-1:-1:-1::0;;;;;26890:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;26890:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26946:50;;154:41:1;;;26946:50:0::1;::::0;127:18:1;26946:50:0::1;;;;;;;;26677:324:::0;;:::o;26264:208::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26337:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;26329:60;;;::::0;-1:-1:-1;;;26329:60:0;;9047:2:1;26329:60:0::1;::::0;::::1;9029:21:1::0;9086:2;9066:18;;;9059:30;9125;9105:18;;;9098:58;9173:18;;26329:60:0::1;8845:352:1::0;26329:60:0::1;-1:-1:-1::0;;;;;26394:19:0;::::1;26416:5;26394:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;26394:27:0::1;::::0;;26431:36;26416:5;;26394:19;26431:36:::1;::::0;26416:5;;26431:36:::1;26264:208:::0;:::o;31488:94::-;31519:15;;:58;;-1:-1:-1;;;31519:58:0;;31558:10;31519:58;;;9386:51:1;31519:15:0;9453:18:1;;;9446:50;-1:-1:-1;;;;;31519:15:0;;;;:30;;9359:18:1;;31519:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31488:94::o;26475:199::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;26573:4:::1;::::0;-1:-1:-1;;;;;26573:4:0;;::::1;26555:22:::0;;::::1;::::0;26547:96:::1;;;::::0;-1:-1:-1;;;26547:96:0;;9959:2:1;26547:96:0::1;::::0;::::1;9941:21:1::0;9998:2;9978:18;;;9971:30;10037:34;10017:18;;;10010:62;10108:31;10088:18;;;10081:59;10157:19;;26547:96:0::1;9757:425:1::0;26547:96:0::1;26648:4;:21:::0;;-1:-1:-1;;;;;;26648:21:0::1;-1:-1:-1::0;;;;;26648:21:0;;;::::1;::::0;;;::::1;::::0;;26475:199::o;31984:132::-;32070:15;;:41;;;-1:-1:-1;;;32070:41:0;;;;32049:7;;-1:-1:-1;;;;;32070:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;31585:246;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;31657:21:::1;31640:14;31715:7;11424:6:::0;;-1:-1:-1;;;;;11424:6:0;;11365:70;31715:7:::1;-1:-1:-1::0;;;;;31707:21:0::1;31737:6;31707:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31689:59;;;31763:7;31759:68;;;31791:24;::::0;1633:25:1;;;31791:24:0::1;::::0;1621:2:1;1606:18;31791:24:0::1;;;;;;;31632:199;;31585:246::o:0;11549:133::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;11634:6:::1;::::0;11613:40:::1;::::0;11650:1:::1;::::0;-1:-1:-1;;;;;11634:6:0::1;::::0;11613:40:::1;::::0;11650:1;;11613:40:::1;11658:6;:19:::0;;-1:-1:-1;;;;;;11658:19:0::1;::::0;;11549:133::o;27410:316::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27509:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;27501:111:::1;;;;-1:-1:-1::0;;;27501:111:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27617:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;27617:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27676:45;;154:41:1;;;27676:45:0::1;::::0;127:18:1;27676:45:0::1;14:187:1::0;25938:323:0;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26010:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;26009:20;26001:65;;;::::0;-1:-1:-1;;;26001:65:0;;11016:2:1;26001:65:0::1;::::0;::::1;10998:21:1::0;;;11035:18;;;11028:30;11094:34;11074:18;;;11067:62;11146:18;;26001:65:0::1;10814:356:1::0;26001:65:0::1;19925:6;26098:16;;26080:15;:34;;;;:::i;:::-;26079:56;26071:109;;;::::0;-1:-1:-1;;;26071:109:0;;11639:2:1;26071:109:0::1;::::0;::::1;11621:21:1::0;11678:2;11658:18;;;11651:30;11717:34;11697:18;;;11690:62;-1:-1:-1;;;11768:18:1;;;11761:38;11816:19;;26071:109:0::1;11437:404:1::0;26071:109:0::1;-1:-1:-1::0;;;;;26185:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;26185:26:0::1;26207:4;26185:26:::0;;::::1;::::0;;;26221:35;;26207:4;;26185:19;26221:35:::1;::::0;::::1;25938:323:::0;:::o;28068:1176::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;28224:15:::1;::::0;-1:-1:-1;;;;;28224:37:0;;::::1;:15:::0;::::1;:37;28221:257;;-1:-1:-1::0;;;;;28277:32:0;::::1;28269:82;;;::::0;-1:-1:-1;;;28269:82:0;;12048:2:1;28269:82:0::1;::::0;::::1;12030:21:1::0;12087:2;12067:18;;;12060:30;12126:34;12106:18;;;12099:62;-1:-1:-1;;;12177:18:1;;;12170:35;12222:19;;28269:82:0::1;11846:401:1::0;28269:82:0::1;28414:15;::::0;28362:68:::1;::::0;-1:-1:-1;;;12454:30:1;;-1:-1:-1;;;;;28414:15:0;;::::1;::::0;28362:68;::::1;::::0;12509:2:1;12500:12;28362:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;28362:68:0;;;::::1;28436:15;:36:::0;;-1:-1:-1;;;;;;28436:36:0::1;-1:-1:-1::0;;;;;28436:36:0;::::1;;::::0;;28221:257:::1;28491:15;::::0;-1:-1:-1;;;;;28491:37:0;;::::1;:15:::0;::::1;:37;28488:257;;-1:-1:-1::0;;;;;28544:32:0;::::1;28536:82;;;::::0;-1:-1:-1;;;28536:82:0;;12725:2:1;28536:82:0::1;::::0;::::1;12707:21:1::0;12764:2;12744:18;;;12737:30;12803:34;12783:18;;;12776:62;-1:-1:-1;;;12854:18:1;;;12847:35;12899:19;;28536:82:0::1;12523:401:1::0;28536:82:0::1;28681:15;::::0;28629:68:::1;::::0;-1:-1:-1;;;13131:30:1;;-1:-1:-1;;;;;28681:15:0;;::::1;::::0;28629:68;::::1;::::0;13186:2:1;13177:12;28629:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;28629:68:0;;;::::1;28703:15;:36:::0;;-1:-1:-1;;;;;;28703:36:0::1;-1:-1:-1::0;;;;;28703:36:0;::::1;;::::0;;28488:257:::1;28752:14;::::0;-1:-1:-1;;;;;28752:35:0;;::::1;:14:::0;::::1;:35;28749:248;;-1:-1:-1::0;;;;;28803:31:0;::::1;28795:80;;;::::0;-1:-1:-1;;;28795:80:0;;13402:2:1;28795:80:0::1;::::0;::::1;13384:21:1::0;13441:2;13421:18;;;13414:30;13480:34;13460:18;;;13453:62;-1:-1:-1;;;13531:18:1;;;13524:34;13575:19;;28795:80:0::1;13200:400:1::0;28795:80:0::1;28936:14;::::0;28886:65:::1;::::0;-1:-1:-1;;;13807:29:1;;-1:-1:-1;;;;;28936:14:0;;::::1;::::0;28886:65;::::1;::::0;13861:2:1;13852:12;28886:65:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;28886:65:0;;;::::1;28957:14;:34:::0;;-1:-1:-1;;;;;;28957:34:0::1;-1:-1:-1::0;;;;;28957:34:0;::::1;;::::0;;28749:248:::1;29004:13;::::0;-1:-1:-1;;;;;29004:33:0;;::::1;:13:::0;::::1;:33;29001:239;;-1:-1:-1::0;;;;;29053:30:0;::::1;29045:78;;;::::0;-1:-1:-1;;;29045:78:0;;14077:2:1;29045:78:0::1;::::0;::::1;14059:21:1::0;14116:2;14096:18;;;14089:30;14155:34;14135:18;;;14128:62;-1:-1:-1;;;14206:18:1;;;14199:33;14249:19;;29045:78:0::1;13875:399:1::0;29045:78:0::1;29182:13;::::0;29134:62:::1;::::0;-1:-1:-1;;;14481:28:1;;-1:-1:-1;;;;;29182:13:0;;::::1;::::0;29134:62;::::1;::::0;14534:2:1;14525:12;29134:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;29134:62:0;;;::::1;29202:13;:32:::0;;-1:-1:-1;;;;;;29202:32:0::1;-1:-1:-1::0;;;;;29202:32:0;::::1;;::::0;;29001:239:::1;28068:1176:::0;;;;:::o;27729:336::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27833:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;27825:116:::1;;;;-1:-1:-1::0;;;27825:116:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27946:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;27946:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;28010:50;;154:41:1;;;28010:50:0::1;::::0;127:18:1;28010:50:0::1;14:187:1::0;12411:95:0;12467:13;12494:7;12487:14;;;;;:::i;29262:434::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;29437:124:::1;29460:5;29467:18;29487;29507:17;29526:16;29544;29437:22;:124::i;:::-;29571:120;::::0;-1:-1:-1;;;14750:27:1;;14802:2;14793:12;29571:120:0::1;;::::0;;;;;::::1;::::0;;5607:4:1;5595:17;;;5577:36;;5649:17;;;5644:2;5629:18;;5622:45;5703:17;;;5683:18;;;5676:45;5757:17;;;5752:2;5737:18;;5730:45;5812:17;;5806:3;5791:19;;5784:46;29571:120:0;;;;::::1;::::0;;;;;5564:3:1;29571:120:0;;::::1;29262:434:::0;;;;;:::o;13824:254::-;13917:4;13928:129;10831:10;13951:7;13960:96;13999:15;13960:96;;;;;;;;;;;;;;;;;10831:10;13960:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13960:34:0;;;;;;;;;;;;:38;:96::i;12827:160::-;12913:4;12924:42;10831:10;12948:9;12959:6;12924:9;:42::i;31183:302::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;31281:23:::1;;31269:8;:35:::0;31261:105:::1;;;::::0;-1:-1:-1;;;31261:105:0;;15018:2:1;31261:105:0::1;::::0;::::1;15000:21:1::0;15057:2;15037:18;;;15030:30;15096:34;15076:18;;;15069:62;15167:27;15147:18;;;15140:55;15212:19;;31261:105:0::1;14816:421:1::0;31261:105:0::1;31417:23;::::0;31376:65:::1;::::0;31407:8;;31376:65:::1;::::0;;;::::1;31446:23;:34:::0;31183:302::o;29699:452::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;29880:130:::1;29904:5;29911:19;29932;29953:18;29973:17;29992;29880:23;:130::i;:::-;30020:126;::::0;-1:-1:-1;;;15444:28:1;;15497:2;15488:12;30020:126:0::1;15242:264:1::0;30154:278:0;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;30254:15:::1;::::0;-1:-1:-1;;;;;30254:15:0;;::::1;30232:38:::0;;::::1;::::0;30224:92:::1;;;::::0;-1:-1:-1;;;30224:92:0;;15713:2:1;30224:92:0::1;::::0;::::1;15695:21:1::0;15752:2;15732:18;;;15725:30;15791:34;15771:18;;;15764:62;-1:-1:-1;;;15842:18:1;;;15835:39;15891:19;;30224:92:0::1;15511:405:1::0;30224:92:0::1;30368:15;::::0;30326:59:::1;::::0;-1:-1:-1;;;;;30368:15:0;;::::1;::::0;30326:59;::::1;::::0;::::1;::::0;30368:15:::1;::::0;30326:59:::1;30390:15;:37:::0;;-1:-1:-1;;;;;;30390:37:0::1;-1:-1:-1::0;;;;;30390:37:0;;;::::1;::::0;;;::::1;::::0;;30154:278::o;27004:279::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27093:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;27085:100:::1;;;;-1:-1:-1::0;;;27085:100:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27190:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;27190:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27238:40;;154:41:1;;;27238:40:0::1;::::0;127:18:1;27238:40:0::1;14:187:1::0;25733:202:0;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25822:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;25822:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25880:50;;154:41:1;;;25880:50:0::1;::::0;127:18:1;25880:50:0::1;14:187:1::0;11687:223:0;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11770:22:0;::::1;11762:73;;;::::0;-1:-1:-1;;;11762:73:0;;16123:2:1;11762:73:0::1;::::0;::::1;16105:21:1::0;16162:2;16142:18;;;16135:30;16201:34;16181:18;;;16174:62;-1:-1:-1;;;16252:18:1;;;16245:36;16298:19;;11762:73:0::1;15921:402:1::0;11762:73:0::1;11866:6;::::0;11845:38:::1;::::0;-1:-1:-1;;;;;11845:38:0;;::::1;::::0;11866:6:::1;::::0;11845:38:::1;::::0;11866:6:::1;::::0;11845:38:::1;11888:6;:17:::0;;-1:-1:-1;;;;;;11888:17:0::1;-1:-1:-1::0;;;;;11888:17:0;;;::::1;::::0;;;::::1;::::0;;11687:223::o;6473:160::-;6531:7;;6557:5;6561:1;6557;:5;:::i;:::-;6545:17;;6580:1;6575;:6;;6567:46;;;;-1:-1:-1;;;6567:46:0;;16663:2:1;6567:46:0;;;16645:21:1;16702:2;16682:18;;;16675:30;16741:29;16721:18;;;16714:57;16788:18;;6567:46:0;16461:351:1;6567:46:0;6627:1;6473:160;-1:-1:-1;;;6473:160:0:o;15329:330::-;-1:-1:-1;;;;;15438:19:0;;15430:68;;;;-1:-1:-1;;;15430:68:0;;17019:2:1;15430:68:0;;;17001:21:1;17058:2;17038:18;;;17031:30;17097:34;17077:18;;;17070:62;-1:-1:-1;;;17148:18:1;;;17141:34;17192:19;;15430:68:0;16817:400:1;15430:68:0;-1:-1:-1;;;;;15511:21:0;;15503:68;;;;-1:-1:-1;;;15503:68:0;;17424:2:1;15503:68:0;;;17406:21:1;17463:2;17443:18;;;17436:30;17502:34;17482:18;;;17475:62;-1:-1:-1;;;17553:18:1;;;17546:32;17595:19;;15503:68:0;17222:398:1;15503:68:0;-1:-1:-1;;;;;15576:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15622:32;;1633:25:1;;;15622:32:0;;1606:18:1;15622:32:0;;;;;;;;15329:330;;;:::o;32583:1975::-;-1:-1:-1;;;;;32690:18:0;;32682:68;;;;-1:-1:-1;;;32682:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32764:16:0;;32756:64;;;;-1:-1:-1;;;32756:64:0;;;;;;;:::i;:::-;32831:6;32841:1;32831:11;32828:71;;32851:28;32867:4;32873:2;32877:1;32851:15;:28::i;:::-;32583:1975;;;:::o;32828:71::-;-1:-1:-1;;;;;32913:35:0;;;;;;:29;:35;;;;;;;;32912:36;:74;;;;-1:-1:-1;;;;;;32953:33:0;;;;;;:29;:33;;;;;;;;32952:34;32912:74;32909:763;;;33003:16;;-1:-1:-1;;;33003:16:0;;;;32995:65;;;;-1:-1:-1;;;32995:65:0;;18637:2:1;32995:65:0;;;18619:21:1;18676:2;18656:18;;;18649:30;18715:34;18695:18;;;18688:62;-1:-1:-1;;;18766:18:1;;;18759:34;18810:19;;32995:65:0;18435:400:1;32995:65:0;-1:-1:-1;;;;;33076:14:0;;;;;;:10;:14;;;;;;;;33075:15;33067:52;;;;-1:-1:-1;;;33067:52:0;;19042:2:1;33067:52:0;;;19024:21:1;19081:2;19061:18;;;19054:30;-1:-1:-1;;;19100:18:1;;;19093:54;19164:18;;33067:52:0;18840:348:1;33067:52:0;-1:-1:-1;;;;;33135:16:0;;;;;;:10;:16;;;;;;;;33134:17;33126:54;;;;-1:-1:-1;;;33126:54:0;;19042:2:1;33126:54:0;;;19024:21:1;19081:2;19061:18;;;19054:30;-1:-1:-1;;;19100:18:1;;;19093:54;19164:18;;33126:54:0;18840:348:1;33126:54:0;-1:-1:-1;;;;;33192:33:0;;;;;;:29;:33;;;;;;;;33187:169;;33271:15;;33260:6;33244:13;33254:2;-1:-1:-1;;;;;12799:18:0;12778:7;12799:18;;;;;;;;;;;;12704:118;33244:13;:22;;;;:::i;:::-;33243:43;;33235:113;;;;-1:-1:-1;;;33235:113:0;;19395:2:1;33235:113:0;;;19377:21:1;19434:2;19414:18;;;19407:30;19473:34;19453:18;;;19446:62;19544:27;19524:18;;;19517:55;19589:19;;33235:113:0;19193:421:1;33235:113:0;-1:-1:-1;;;;;33367:38:0;;;;;;:34;:38;;;;;;;;33362:147;;33433:14;;33423:6;:24;;33415:86;;;;-1:-1:-1;;;33415:86:0;;19821:2:1;33415:86:0;;;19803:21:1;19860:2;19840:18;;;19833:30;19899:34;19879:18;;;19872:62;-1:-1:-1;;;19950:18:1;;;19943:47;20007:19;;33415:86:0;19619:413:1;33415:86:0;-1:-1:-1;;;;;33520:40:0;;;;;;:34;:40;;;;;;;;33515:151;;33588:15;;33578:6;:25;;33570:88;;;;-1:-1:-1;;;33570:88:0;;20239:2:1;33570:88:0;;;20221:21:1;20278:2;20258:18;;;20251:30;20317:34;20297:18;;;20290:62;-1:-1:-1;;;20368:18:1;;;20361:48;20426:19;;33570:88:0;20037:414:1;33570:88:0;-1:-1:-1;;;;;33692:31:0;;;;;;;:25;:31;;;;;;;33725:29;;;;;;;;33679:86;;33692:31;;;;;33725:29;33718:4;33751:2;33679:12;:86::i;:::-;33814:23;;33804:4;33771:12;12799:18;;;;;;;;;;;33855:16;;-1:-1:-1;;33786:51:0;;-1:-1:-1;;;33855:16:0;;;;:32;;;;;33880:7;33855:32;:51;;;;-1:-1:-1;33897:9:0;;;;33896:10;33855:51;:73;;;;-1:-1:-1;33915:9:0;;-1:-1:-1;;;33915:9:0;;;;:13;;33855:73;:111;;;;-1:-1:-1;;;;;;33937:29:0;;;;;;:25;:29;;;;;;;;33855:111;33845:206;;;33980:9;:16;;-1:-1:-1;;33980:16:0;33992:4;33980:16;;;34003:17;:15;:17::i;:::-;34027:9;:17;;-1:-1:-1;;34027:17:0;;;33845:206;34074:9;;34058:12;;34074:9;;34073:10;:30;;;;-1:-1:-1;34087:16:0;;-1:-1:-1;;;34087:16:0;;;;34073:30;-1:-1:-1;;;;;34114:24:0;;;;;;:18;:24;;;;;;34058:45;;-1:-1:-1;34114:24:0;;;:50;;-1:-1:-1;;;;;;34142:22:0;;;;;;:18;:22;;;;;;;;34114:50;34111:83;;;-1:-1:-1;34182:5:0;34111:83;34203:7;:24;;;;-1:-1:-1;34214:9:0;;-1:-1:-1;;;34214:9:0;;;;:13;;34203:24;34199:158;;;34259:9;;34236:11;;34271:3;;34250:18;;-1:-1:-1;;;34259:9:0;;;;34250:6;:18;:::i;:::-;:24;;;;:::i;:::-;34236:38;-1:-1:-1;34290:12:0;34236:38;34290:6;:12;:::i;:::-;34281:21;;34309:41;34325:4;34339;34346:3;34309:15;:41::i;:::-;34229:128;34199:158;34364:33;34380:4;34386:2;34390:6;34364:15;:33::i;:::-;34409:15;;-1:-1:-1;;;;;34409:15:0;:26;34444:4;34451:15;34444:4;-1:-1:-1;;;;;12799:18:0;12778:7;12799:18;;;;;;;;;;;;12704:118;34451:15;34409:58;;-1:-1:-1;;;;;;34409:58:0;;;;;;;-1:-1:-1;;;;;21094:32:1;;;34409:58:0;;;21076:51:1;21143:18;;;21136:34;21049:18;;34409:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34405:74;34488:15;;-1:-1:-1;;;;;34488:15:0;:26;34523:2;34528:13;34523:2;-1:-1:-1;;;;;12799:18:0;12778:7;12799:18;;;;;;;;;;;;12704:118;34528:13;34488:54;;-1:-1:-1;;;;;;34488:54:0;;;;;;;-1:-1:-1;;;;;21094:32:1;;;34488:54:0;;;21076:51:1;21143:18;;;21136:34;21049:18;;34488:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34484:70;;;32676:1882;;32583:1975;;;:::o;6770:171::-;6856:7;6886:12;6878:6;;;;6870:29;;;;-1:-1:-1;;;6870:29:0;;;;;;;;:::i;:::-;-1:-1:-1;6904:9:0;6916:5;6920:1;6916;:5;:::i;:::-;6904:17;6770:171;-1:-1:-1;;;;;6770:171:0:o;37260:1278::-;37482:21;;;;:43;;;;:21;;:43;37478:215;;37538:101;;-1:-1:-1;;;21383:32:1;;21440:2;21431:12;37538:101:0;;;;;;;;37580:21;;;;37624:14;;37538:101;;37580:21;;;;;37538:101;;;;-1:-1:-1;;;;;;;;;;;37538:101:0;;;37624:14;;;37538:101;:::i;:::-;;;;;;;;37645:21;;;:42;;-1:-1:-1;;37645:42:0;;;;;;;37478:215;37701:21;;;;:43;;;;:21;;;;;:43;37697:215;;37757:101;;-1:-1:-1;;;21870:32:1;;21927:2;21918:12;37757:101:0;;;;;;;;37799:21;;;;37843:14;;37757:101;;37799:21;;;;;;;;37757:101;;;;-1:-1:-1;;;;;;;;;;;37757:101:0;;;37843:14;;;37757:101;:::i;:::-;;;;;;;;37864:21;;;:42;;-1:-1:-1;;37864:42:0;;;;;;;;;37697:215;37920:20;;;;:41;;;;-1:-1:-1;;;37920:20:0;;;;:41;37916:208;;37974:98;;-1:-1:-1;;;22143:31:1;;22199:2;22190:12;37974:98:0;;;;;;;;38015:20;;;;38057:14;;37974:98;;38015:20;-1:-1:-1;;;38015:20:0;;;;;;37974:98;;;;-1:-1:-1;;;;;;;;;;;37974:98:0;;;38057:14;;;37974:98;:::i;:::-;;;;;;;;38078:20;;;:40;;-1:-1:-1;;38078:40:0;-1:-1:-1;;;38078:40:0;;;;;;;37916:208;38132:19;;;;:39;;;;-1:-1:-1;;;38132:19:0;;;;:39;38128:201;;38184:95;;-1:-1:-1;;;22415:30:1;;22470:2;22461:12;38184:95:0;;;;;;;;38224:19;;;;38264:14;;38184:95;;38224:19;-1:-1:-1;;;38224:19:0;;;;;;38184:95;;;;-1:-1:-1;;;;;;;;;;;38184:95:0;;;38264:14;;;38184:95;:::i;:::-;;;;;;;;38285:19;;;:38;;-1:-1:-1;;38285:38:0;-1:-1:-1;;;38285:38:0;;;;;;;38128:201;38337:19;;;;:39;;;;-1:-1:-1;;;38337:19:0;;;;:39;38333:201;;38389:95;;-1:-1:-1;;;22686:30:1;;22741:2;22732:12;38389:95:0;;;;;;;;38429:19;;;;38469:14;;38389:95;;38429:19;-1:-1:-1;;;38429:19:0;;;;;;38389:95;;;;-1:-1:-1;;;;;;;;;;;38389:95:0;;;38469:14;;;38389:95;:::i;:::-;;;;;;;;38490:19;;;:38;;-1:-1:-1;;38490:38:0;-1:-1:-1;;;38490:38:0;;;;;;;38333:201;37260:1278;;;;;;:::o;35939:1318::-;36166:22;;;;:45;;;;:22;;;;;:45;36162:222;;36224:104;;-1:-1:-1;;;22957:33:1;;23015:2;23006:12;36224:104:0;;;;;;;;36267:22;;;;36313:14;;36224:104;;36267:22;;;;;;;;36224:104;;;;-1:-1:-1;;;;;;;;;;;36224:104:0;;;36313:14;;;36224:104;:::i;:::-;;;;;;;;36334:22;;;:44;;-1:-1:-1;;36334:44:0;;;;;;;;;36162:222;36392:22;;;;:45;;;;:22;;;;;:45;36388:222;;36450:104;;-1:-1:-1;;;23231:33:1;;23289:2;23280:12;36450:104:0;;;;;;;;36493:22;;;;36539:14;;36450:104;;36493:22;;;;;;;;36450:104;;;;-1:-1:-1;;;;;;;;;;;36450:104:0;;;36539:14;;;36450:104;:::i;:::-;;;;;;;;36560:22;;;:44;;-1:-1:-1;;36560:44:0;;;;;;;;;36388:222;36618:21;;;;:43;;;;-1:-1:-1;;;36618:21:0;;;;:43;36614:215;;36674:101;;-1:-1:-1;;;23505:32:1;;23562:2;23553:12;36674:101:0;;;;;;;;36716:21;;;;36760:14;;36674:101;;36716:21;-1:-1:-1;;;36716:21:0;;;;;;36674:101;;;;-1:-1:-1;;;;;;;;;;;36674:101:0;;;36760:14;;;36674:101;:::i;:::-;;;;;;;;36781:21;;;:42;;-1:-1:-1;;36781:42:0;-1:-1:-1;;;36781:42:0;;;;;;;36614:215;36837:20;;;;:41;;;;-1:-1:-1;;;36837:20:0;;;;:41;36833:208;;36891:98;;-1:-1:-1;;;23778:31:1;;23834:2;23825:12;36891:98:0;;;;;;;;36932:20;;;;36974:14;;36891:98;;36932:20;-1:-1:-1;;;36932:20:0;;;;;;36891:98;;;;-1:-1:-1;;;;;;;;;;;36891:98:0;;;36974:14;;;36891:98;:::i;:::-;;;;;;;;36995:20;;;:40;;-1:-1:-1;;36995:40:0;-1:-1:-1;;;36995:40:0;;;;;;;36833:208;37049:20;;;;:41;;;;-1:-1:-1;;;37049:20:0;;;;:41;37045:208;;37103:98;;-1:-1:-1;;;24050:31:1;;24106:2;24097:12;37103:98:0;;;;;;;;37144:20;;;;37186:14;;37103:98;;37144:20;-1:-1:-1;;;37144:20:0;;;;;;37103:98;;;;-1:-1:-1;;;;;;;;;;;37103:98:0;;;37186:14;;;37103:98;:::i;:::-;;;;;;;;37207:20;;;:40;;;;;-1:-1:-1;;;37207:40:0;-1:-1:-1;;37207:40:0;;;;;;35939:1318;;;;;;:::o;14083:509::-;-1:-1:-1;;;;;14196:20:0;;14188:70;;;;-1:-1:-1;;;14188:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14271:23:0;;14263:71;;;;-1:-1:-1;;;14263:71:0;;;;;;;:::i;:::-;14411;14433:6;14411:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14411:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;14391:17:0;;;:9;:17;;;;;;;;;;;:91;;;;14510:20;;;;;;;:32;;14535:6;14510:24;:32::i;:::-;-1:-1:-1;;;;;14487:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;14552:35;1633:25:1;;;14487:20:0;;14552:35;;;;;;1606:18:1;14552:35:0;1487:177:1;34561:1375:0;34657:13;:17;;-1:-1:-1;;34742:15:0;;;34764:347;;;;34833:1;34810:18;;34795:12;:33;;;;:::i;:::-;34794:40;34790:316;;34843:13;:19;;-1:-1:-1;;34843:19:0;34859:3;34843:19;;;34790:316;;;34902:23;;34886:13;:39;;34902:23;;;;-1:-1:-1;;34932:39:0;;;;;;;34902:23;34948;;;;;;34932:39;;;;;;;;-1:-1:-1;;35022:35:0;-1:-1:-1;;;34993:22:0;;;;;34978:37;;;;-1:-1:-1;;35022:35:0;;-1:-1:-1;;;35036:21:0;;;;35022:35;;;-1:-1:-1;;35064:35:0;-1:-1:-1;;;35078:21:0;;;;;;;35064:35;;;;;;;34790:316;35122:10;35118:245;;;35159:24;;35143:13;:40;;35159:24;;;;;;;;-1:-1:-1;;35189:40:0;;;;;;;35205:24;;;;;;35189:40;;;;;-1:-1:-1;;35279:36:0;-1:-1:-1;;;35250:23:0;;;;35235:38;;-1:-1:-1;;35279:36:0;;-1:-1:-1;;;35293:22:0;;;;35279:36;;;;;-1:-1:-1;;35321:36:0;-1:-1:-1;;;35335:22:0;;;;-1:-1:-1;;;35321:36:0;;;;;;;35118:245;35372:10;35371:11;:27;;;;;35387:11;35386:12;35371:27;:105;;;;-1:-1:-1;;;;;;35403:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;35442:33:0;;;;;;:29;:33;;;;;;;;35403:72;35367:373;;;35500:24;;35484:13;:40;;35500:24;;;;;;;;-1:-1:-1;;35539:40:0;;;;;;;35555:24;;;;;;35539:40;;;;;-1:-1:-1;;35647:36:0;-1:-1:-1;;;35609:23:0;;;;35594:38;;-1:-1:-1;;35647:36:0;;-1:-1:-1;;;35661:22:0;;;;35647:36;;;;;-1:-1:-1;;35698:36:0;-1:-1:-1;;;35712:22:0;;;;-1:-1:-1;;;35698:36:0;;;;;;;35367:373;35818:11;;;-1:-1:-1;;;35818:11:0;;;;;35803;;;;;;35788:12;;;;;;35756:29;;35818:11;35772:13;;;;;35756;:29;:::i;:::-;:44;;;;:::i;:::-;:58;;;;:::i;:::-;:73;;;;:::i;:::-;35744:9;:85;;;;;;-1:-1:-1;;;35744:85:0;;;-1:-1:-1;;35744:85:0;;;;;;;;35839:92;;;35851:13;;;;;;;;;;24615:34:1;;35744:85:0;35866:13;;;;24680:2:1;24665:18;;24658:43;35881:12:0;;;;;24717:18:1;;;24710:43;35895:11:0;;;;;24784:2:1;24769:18;;24762:43;-1:-1:-1;;;35908:11:0;;;;24836:3:1;24821:19;;24814:44;35921:9:0;;;;;24889:3:1;24874:19;;24867:44;35839:92:0;;;;;;;24579:3:1;35839:92:0;;;34561:1375;;;;:::o;38541:1528::-;38625:4;38581:23;12799:18;;;;;;;;;;;38714:9;;12799:18;;38664:21;;38714:9;-1:-1:-1;;;38714:9:0;;;;;38581:23;38802:1;;38714:9;;38756:31;;38774:13;12799:18;38756:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;38730:73;-1:-1:-1;38808:20:0;38831:33;38730:73;38831:15;:33;:::i;:::-;38808:56;;38871:31;38889:12;38871:17;:31::i;:::-;38909:27;38939:41;38963:17;38939:21;:41;:::i;:::-;39020:13;;38909:71;;-1:-1:-1;38985:19:0;;39020:17;;39036:1;;39020:13;;:17;:::i;:::-;39007:9;;:31;;;-1:-1:-1;;;39007:9:0;;;;:31;:::i;:::-;39096:13;;38985:53;;;;;-1:-1:-1;39045:26:0;;39126:1;;38985:53;;39074:35;;39096:13;39074:19;:35;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;39183:13;;39045:82;;-1:-1:-1;39132:26:0;;39199:11;;39161:35;;39183:13;;;;;39161:19;:35;:::i;:::-;:49;;;;:::i;:::-;39265:12;;39132:78;;-1:-1:-1;39215:25:0;;39280:11;;39243:34;;39265:12;;;;;39243:19;:34;:::i;:::-;:48;;;;:::i;:::-;39345:11;;39215:76;;-1:-1:-1;39296:24:0;;39359:11;;39323:33;;39345:11;;;;;39323:19;:33;:::i;:::-;:47;;;;:::i;:::-;39296:74;-1:-1:-1;39375:24:0;39296:74;39467:17;39425:39;39446:18;39425;:39;:::i;:::-;:59;;;;:::i;:::-;:78;;;;:::i;:::-;39402:102;;:19;:102;:::i;:::-;39519:14;;39511:51;;39375:129;;-1:-1:-1;;;;;;39519:14:0;;39511:51;;;;;39544:17;;39519:14;39511:51;39519:14;39511:51;39544:17;39519:14;39511:51;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39612:4:0;;39618:15;;39569:65;;39592:18;;-1:-1:-1;;;;;39612:4:0;;;;39618:15;39569:22;:65::i;:::-;39680:4;;39686:13;;39639:61;;39662:16;;-1:-1:-1;;;;;39680:4:0;;;;39686:13;39639:22;:61::i;:::-;39711:19;;39707:163;;39738:50;39752:15;39769:18;39738:13;:50::i;:::-;39799:65;;;25494:25:1;;;25550:2;25535:18;;25528:34;;;25578:18;;;25571:34;;;39799:65:0;;25482:2:1;25467:18;39799:65:0;;;;;;;39707:163;39910:15;;39902:58;;39877:20;;-1:-1:-1;;;;;39910:15:0;;39939:16;;39877:20;39902:58;39877:20;39902:58;39939:16;39910:15;39902:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39876:84;;;39968:15;39965:68;;;39996:31;;1633:25:1;;;39996:31:0;;1621:2:1;1606:18;39996:31:0;;;;;;;39965:68;-1:-1:-1;;40039:9:0;:25;;;;;;-1:-1:-1;;;40039:25:0;-1:-1:-1;;40039:25:0;;;;;;;;;;-1:-1:-1;;;;;;;;;;38541:1528:0:o;40461:416::-;40546:16;;;40560:1;40546:16;;;;;;;;40522:21;;40546:16;;;;;;;;;;-1:-1:-1;40546:16:0;40522:40;;40585:4;40567;40572:1;40567:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40567:23:0;;;:7;;;;;;;;;;:23;;;;40605:15;;:22;;;-1:-1:-1;;;40605:22:0;;;;:15;;;;;:20;;:22;;;;;40567:7;;40605:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40595:4;40600:1;40595:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40595:32:0;;;:7;;;;;;;;;:32;40664:15;;40632:62;;40649:4;;40664:15;40682:11;40632:8;:62::i;:::-;40699:15;;:173;;-1:-1:-1;;;40699:173:0;;-1:-1:-1;;;;;40699:15:0;;;;:66;;:173;;40771:11;;40699:15;;40823:4;;40841;;40852:15;;40699:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40072:386;40197:16;;;40211:1;40197:16;;;;;;;;40173:21;;40197:16;;;;;;;;-1:-1:-1;;40228:15:0;;:22;;;-1:-1:-1;;;40228:22:0;;;;40173:40;;-1:-1:-1;;;;;;40228:15:0;;;;:20;;-1:-1:-1;40228:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40218:4;40223:1;40218:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;40218:32:0;;;-1:-1:-1;;;;;40218:32:0;;;;;40265:5;40255:4;40260:1;40255:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40255:15:0;;;:7;;;;;;;;;:15;40277;;:173;;-1:-1:-1;;;40277:173:0;;:15;;;:66;;40352:9;;40277:173;;:15;;40401:4;;40418:6;;40430:15;;40277:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40162:296;40072:386;;;:::o;40880:348::-;40988:15;;40956:62;;40973:4;;-1:-1:-1;;;;;40988:15:0;41006:11;40956:8;:62::i;:::-;41023:15;;41182;;41023:200;;-1:-1:-1;;;41023:200:0;;41086:4;41023:200;;;28045:34:1;28095:18;;;28088:34;;;41023:15:0;28138:18:1;;;28131:34;;;28181:18;;;28174:34;-1:-1:-1;;;;;41182:15:0;;;28224:19:1;;;28217:44;41203:15:0;28277:19:1;;;28270:35;41023:15:0;;;:31;;41062:9;;27979:19:1;;41023:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;944:315;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1669:456::-;1746:6;1754;1762;1815:2;1803:9;1794:7;1790:23;1786:32;1783:52;;;1831:1;1828;1821:12;1783:52;1870:9;1857:23;1889:31;1914:5;1889:31;:::i;:::-;1939:5;-1:-1:-1;1996:2:1;1981:18;;1968:32;2009:33;1968:32;2009:33;:::i;:::-;1669:456;;2061:7;;-1:-1:-1;;;2115:2:1;2100:18;;;;2087:32;;1669:456::o;2130:180::-;2189:6;2242:2;2230:9;2221:7;2217:23;2213:32;2210:52;;;2258:1;2255;2248:12;2210:52;-1:-1:-1;2281:23:1;;2130:180;-1:-1:-1;2130:180:1:o;2748:247::-;2807:6;2860:2;2848:9;2839:7;2835:23;2831:32;2828:52;;;2876:1;2873;2866:12;2828:52;2915:9;2902:23;2934:31;2959:5;2934:31;:::i;3000:118::-;3086:5;3079:13;3072:21;3065:5;3062:32;3052:60;;3108:1;3105;3098:12;3123:309;3188:6;3196;3249:2;3237:9;3228:7;3224:23;3220:32;3217:52;;;3265:1;3262;3255:12;3217:52;3304:9;3291:23;3323:28;3345:5;3323:28;:::i;3437:382::-;3502:6;3510;3563:2;3551:9;3542:7;3538:23;3534:32;3531:52;;;3579:1;3576;3569:12;3531:52;3618:9;3605:23;3637:31;3662:5;3637:31;:::i;:::-;3687:5;-1:-1:-1;3744:2:1;3729:18;;3716:32;3757:30;3716:32;3757:30;:::i;:::-;3806:7;3796:17;;;3437:382;;;;;:::o;4032:671::-;4118:6;4126;4134;4142;4195:3;4183:9;4174:7;4170:23;4166:33;4163:53;;;4212:1;4209;4202:12;4163:53;4251:9;4238:23;4270:31;4295:5;4270:31;:::i;:::-;4320:5;-1:-1:-1;4377:2:1;4362:18;;4349:32;4390:33;4349:32;4390:33;:::i;:::-;4442:7;-1:-1:-1;4501:2:1;4486:18;;4473:32;4514:33;4473:32;4514:33;:::i;:::-;4566:7;-1:-1:-1;4625:2:1;4610:18;;4597:32;4638:33;4597:32;4638:33;:::i;:::-;4032:671;;;;-1:-1:-1;4032:671:1;;-1:-1:-1;;4032:671:1:o;4708:156::-;4774:20;;4834:4;4823:16;;4813:27;;4803:55;;4854:1;4851;4844:12;4803:55;4708:156;;;:::o;4869:464::-;4954:6;4962;4970;4978;4986;5039:3;5027:9;5018:7;5014:23;5010:33;5007:53;;;5056:1;5053;5046:12;5007:53;5079:27;5096:9;5079:27;:::i;:::-;5069:37;;5125:36;5157:2;5146:9;5142:18;5125:36;:::i;:::-;5115:46;;5180:36;5212:2;5201:9;5197:18;5180:36;:::i;:::-;5170:46;;5235:36;5267:2;5256:9;5252:18;5235:36;:::i;:::-;5225:46;;5290:37;5322:3;5311:9;5307:19;5290:37;:::i;:::-;5280:47;;4869:464;;;;;;;;:::o;5841:388::-;5909:6;5917;5970:2;5958:9;5949:7;5945:23;5941:32;5938:52;;;5986:1;5983;5976:12;5938:52;6025:9;6012:23;6044:31;6069:5;6044:31;:::i;:::-;6094:5;-1:-1:-1;6151:2:1;6136:18;;6123:32;6164:33;6123:32;6164:33;:::i;6234:380::-;6313:1;6309:12;;;;6356;;;6377:61;;6431:4;6423:6;6419:17;6409:27;;6377:61;6484:2;6476:6;6473:14;6453:18;6450:38;6447:161;;6530:10;6525:3;6521:20;6518:1;6511:31;6565:4;6562:1;6555:15;6593:4;6590:1;6583:15;6447:161;;6234:380;;;:::o;6619:356::-;6821:2;6803:21;;;6840:18;;;6833:30;6899:34;6894:2;6879:18;;6872:62;6966:2;6951:18;;6619:356::o;7398:184::-;7468:6;7521:2;7509:9;7500:7;7496:23;7492:32;7489:52;;;7537:1;7534;7527:12;7489:52;-1:-1:-1;7560:16:1;;7398:184;-1:-1:-1;7398:184:1:o;9507:245::-;9574:6;9627:2;9615:9;9606:7;9602:23;9598:32;9595:52;;;9643:1;9640;9633:12;9595:52;9675:9;9669:16;9694:28;9716:5;9694:28;:::i;10397:412::-;10599:2;10581:21;;;10638:2;10618:18;;;10611:30;10677:34;10672:2;10657:18;;10650:62;-1:-1:-1;;;10743:2:1;10728:18;;10721:46;10799:3;10784:19;;10397:412::o;11175:127::-;11236:10;11231:3;11227:20;11224:1;11217:31;11267:4;11264:1;11257:15;11291:4;11288:1;11281:15;11307:125;11347:4;11375:1;11372;11369:8;11366:34;;;11380:18;;:::i;:::-;-1:-1:-1;11417:9:1;;11307:125::o;16328:128::-;16368:3;16399:1;16395:6;16392:1;16389:13;16386:39;;;16405:18;;:::i;:::-;-1:-1:-1;16441:9:1;;16328:128::o;17625:401::-;17827:2;17809:21;;;17866:2;17846:18;;;17839:30;17905:34;17900:2;17885:18;;17878:62;-1:-1:-1;;;17971:2:1;17956:18;;17949:35;18016:3;18001:19;;17625:401::o;18031:399::-;18233:2;18215:21;;;18272:2;18252:18;;;18245:30;18311:34;18306:2;18291:18;;18284:62;-1:-1:-1;;;18377:2:1;18362:18;;18355:33;18420:3;18405:19;;18031:399::o;20456:168::-;20496:7;20562:1;20558;20554:6;20550:14;20547:1;20544:21;20539:1;20532:9;20525:17;20521:45;20518:71;;;20569:18;;:::i;:::-;-1:-1:-1;20609:9:1;;20456:168::o;20629:127::-;20690:10;20685:3;20681:20;20678:1;20671:31;20721:4;20718:1;20711:15;20745:4;20742:1;20735:15;20761:120;20801:1;20827;20817:35;;20832:18;;:::i;:::-;-1:-1:-1;20866:9:1;;20761:120::o;21454:209::-;-1:-1:-1;;21618:38:1;;;;21600:57;;21588:2;21573:18;;21454:209::o;24120:204::-;24158:3;24194:4;24191:1;24187:12;24226:4;24223:1;24219:12;24261:3;24255:4;24251:14;24246:3;24243:23;24240:49;;;24269:18;;:::i;:::-;24305:13;;24120:204;-1:-1:-1;;;24120:204:1:o;24922:165::-;24960:1;24994:4;24991:1;24987:12;25018:3;25008:37;;25025:18;;:::i;:::-;25077:3;25070:4;25067:1;25063:12;25059:22;25054:27;;;24922:165;;;;:::o;25092:195::-;25130:4;25167;25164:1;25160:12;25199:4;25196:1;25192:12;25224:3;25219;25216:12;25213:38;;;25231:18;;:::i;:::-;25268:13;;;25092:195;-1:-1:-1;;;25092:195:1:o;25748:127::-;25809:10;25804:3;25800:20;25797:1;25790:31;25840:4;25837:1;25830:15;25864:4;25861:1;25854:15;25880:251;25950:6;26003:2;25991:9;25982:7;25978:23;25974:32;25971:52;;;26019:1;26016;26009:12;25971:52;26051:9;26045:16;26070:31;26095:5;26070:31;:::i;26136:461::-;26189:3;26227:5;26221:12;26254:6;26249:3;26242:19;26280:4;26309:2;26304:3;26300:12;26293:19;;26346:2;26339:5;26335:14;26367:1;26377:195;26391:6;26388:1;26385:13;26377:195;;;26456:13;;-1:-1:-1;;;;;26452:39:1;26440:52;;26512:12;;;;26547:15;;;;26488:1;26406:9;26377:195;;;-1:-1:-1;26588:3:1;;26136:461;-1:-1:-1;;;;;26136:461:1:o;26602:582::-;26901:6;26890:9;26883:25;26944:6;26939:2;26928:9;26924:18;26917:34;26987:3;26982:2;26971:9;26967:18;26960:31;26864:4;27008:57;27060:3;27049:9;27045:19;27037:6;27008:57;:::i;:::-;-1:-1:-1;;;;;27101:32:1;;;;27096:2;27081:18;;27074:60;-1:-1:-1;27165:3:1;27150:19;27143:35;27000:65;26602:582;-1:-1:-1;;;26602:582:1:o;27189:510::-;27460:6;27449:9;27442:25;27503:3;27498:2;27487:9;27483:18;27476:31;27423:4;27524:57;27576:3;27565:9;27561:19;27553:6;27524:57;:::i;:::-;-1:-1:-1;;;;;27617:32:1;;;;27612:2;27597:18;;27590:60;-1:-1:-1;27681:2:1;27666:18;27659:34;27516:65;27189:510;-1:-1:-1;;27189:510:1:o;28316:306::-;28404:6;28412;28420;28473:2;28461:9;28452:7;28448:23;28444:32;28441:52;;;28489:1;28486;28479:12;28441:52;28518:9;28512:16;28502:26;;28568:2;28557:9;28553:18;28547:25;28537:35;;28612:2;28601:9;28597:18;28591:25;28581:35;;28316:306;;;;;:::o
Swarm Source
ipfs://ac3784e0251fc7eea29bd69381dd98c1300c553460c2d5e3f45e9ee15182ed67
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.