Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,010,101,010 SQUATCH
Holders
232
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
0.726220779 SQUATCHValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Sasquatch
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-19 */ /** https://t.me/SasquatchPortal */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.14; library SafeMath { function tryAdd( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, 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 from, address to, uint256 amount ) external returns (bool); } library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } function functionCall( address target, bytes memory data ) internal returns (bytes memory) { return functionCallWithValue( target, data, 0, "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" ); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResultFromTarget( target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget( target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert( bytes memory returndata, string memory errorMessage ) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } interface IERC20Permit { function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require( oldAllowance >= value, "SafeERC20: decreased allowance below zero" ); uint256 newAllowance = oldAllowance - value; _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require( nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed" ); } function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); if (returndata.length > 0) { // Return data is optional require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } } abstract contract Auth { address public owner; mapping(address => bool) internal authorizations; constructor(address _owner) { owner = _owner; authorizations[_owner] = true; } modifier onlyOwner() { require(isOwner(msg.sender), "!OWNER"); _; } modifier authorized() { require(isAuthorized(msg.sender), "!AUTHORIZED"); _; } function authorize(address adr) public authorized { authorizations[adr] = true; } function unauthorize(address adr) public authorized { authorizations[adr] = false; } function isOwner(address account) public view returns (bool) { return account == owner; } function isAuthorized(address adr) public view returns (bool) { return authorizations[adr]; } function transferOwnership(address payable adr) public authorized { require(adr != address(0), "Zero Address"); owner = adr; authorizations[adr] = true; emit OwnershipTransferred(adr); } function renounceOwnership() external authorized { emit OwnershipTransferred(address(0)); owner = address(0); } event OwnershipTransferred(address owner); } interface IFactory { function createPair( address tokenA, address tokenB ) external returns (address pair); function getPair( address tokenA, address tokenB ) external view returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IPair { function sync() external; } interface IWeth { function deposit() external payable; } contract Sasquatch is IERC20, Auth { using SafeMath for uint256; using SafeERC20 for IERC20; string private constant _name = "SASQUATCH"; string private constant _symbol = "SQUATCH"; uint8 private constant _decimals = 9; uint256 private constant _totalSupply = 1010101010000000000; address constant DEAD = 0x000000000000000000000000000000000000dEaD; uint256 public _maxTxAmount = (_totalSupply * 10000) / 10000; uint256 public _maxWalletAmount = (_totalSupply * 10000) / 10000; mapping(address => uint256) _balances; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) _isBot; mapping(address => bool) isWhitelisted; mapping(address => bool) isBlacklisted; IRouter public immutable router; address public immutable pair; bool tradingEnabled = false; uint256 startedTime; uint256 constant feeDenominator = 10000; struct Fee { uint256 stakingFee; uint256 burnFee; uint256 liquidFee; uint256 totalFee; } enum TransactionType { BUY, SELL, TRANSFER } mapping(TransactionType => Fee) public fees; bool swapAndLiquifyEnabled = false; uint256 swapTimes; uint256 minTransactionsBeforeSwap = 7; bool swapping; bool antiBotEnabled = true; uint256 swapThreshold = (_totalSupply * 300) / 100000; uint256 _minTokenAmount = (_totalSupply * 15) / 100000; uint256 marketing_divisor = 50; uint256 liquidity_divisor = 50; uint256 team_divisor = 0; uint256 total_divisor = 100; address liquidity_receiver; address staking_receiver; address marketing_receiver; address team1_receiver; address team2_receiver; address team3_receiver; address team4_receiver; event WhitelistUpdated(address indexed account, bool indexed whitelisted); event BotUpdated(address indexed account, bool indexed isBot); event BlacklistedUpdated(address indexed account, bool indexed blacklisted); event AntiBotStateUpdated(bool indexed enabled); event TradingEnabled(); event TradingDisabled(); event SwapBackSettingsUpdated( bool indexed enabled, uint256 threshold, uint256 minLimit, uint256 _minTransactions ); event MaxLimitsUpdated(uint256 maxTxAmount, uint256 maxWalletAmount); event UnsupportedTokensRecoverd( address indexed token, address receiver, uint256 amount ); event DivisorsUpdated(uint256 team, uint256 liquidity, uint256 marketing); event TeamFundsDistributed( address team1, address team2, address team3, address team4, uint256 amount ); event FeesUpdated( TransactionType indexed transactionType, uint256 burnFee, uint256 stakingFee, uint256 swapAndLiquifyFee ); event FeesAddressesUpdated( address marketing, address liquidity, address staking ); event TeamAddressesUpdated( address team1, address team2, address team3, address team4 ); event ForceAdjustedLP(bool indexed sasquatch, uint256 amount, bool indexed add); event TokensAirdroped( address indexed sender, uint256 length, uint256 airdropedAmount ); modifier lockTheSwap() { swapping = true; _; swapping = false; } constructor() Auth(msg.sender) { IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _pair = IFactory(_router.factory()).createPair( address(this), _router.WETH() ); router = _router; pair = _pair; // initilasing Fees fees[TransactionType.SELL] = Fee(200, 0, 100, 0); fees[TransactionType.BUY] = Fee(300, 0, 0, 0); fees[TransactionType.TRANSFER] = Fee(0, 0, 0, 0); isBlacklisted[address(0)] = true; isWhitelisted[msg.sender] = true; isWhitelisted[address(this)] = true; liquidity_receiver = address(this); team1_receiver = msg.sender; team2_receiver = msg.sender; team3_receiver = msg.sender; team4_receiver = msg.sender; staking_receiver = msg.sender; marketing_receiver = msg.sender; _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } receive() external payable {} function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer( address recipient, uint256 amount ) public override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance( address owner, address spender ) public view override returns (uint256) { return _allowances[owner][spender]; } function isBot(address _address) public view returns (bool) { return _isBot[_address]; } function approve( address spender, uint256 amount ) public override returns (bool) { _approve(msg.sender, spender, amount); return true; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)); } function whitelistAddress( address _address, bool _whitelist ) external authorized { require(isWhitelisted[_address] != _whitelist, "Already set"); isWhitelisted[_address] = _whitelist; emit WhitelistUpdated(_address, _whitelist); } function blacklistAddress( address _address, bool _blacklist ) external authorized { require(isBlacklisted[_address] != _blacklist, "Already set"); isBlacklisted[_address] = _blacklist; emit BlacklistedUpdated(_address, _blacklist); } function updateBot(address _address, bool isBot_) external authorized { require(_isBot[_address] != isBot_, "Already set"); _isBot[_address] = isBot_; emit BotUpdated(_address, isBot_); } function enableAntiBot(bool _enable) external authorized { require(antiBotEnabled != _enable, "Already set"); antiBotEnabled = _enable; emit AntiBotStateUpdated(_enable); } function enableTrading(uint256 _input) external authorized { require(!tradingEnabled, "Already Enabled!"); tradingEnabled = true; if (startedTime == 0) // initialise only once startedTime = block.timestamp.add(_input); emit TradingEnabled(); } function updateSwapBackSettings( bool _enabled, uint256 _threshold, uint256 _minLimit, uint256 _minTransactionsBeforeSwap ) external authorized { swapAndLiquifyEnabled = _enabled; swapThreshold = _threshold; _minTokenAmount = _minLimit; minTransactionsBeforeSwap = _minTransactionsBeforeSwap; emit SwapBackSettingsUpdated( _enabled, _threshold, _minLimit, _minTransactionsBeforeSwap ); } function transferFrom( address from, address to, uint256 amount ) public override returns (bool) { _spendAllowance(from, msg.sender, amount); _transfer(from, to, amount); return true; } function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( msg.sender, spender, allowance(msg.sender, spender) + addedValue ); return true; } function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = allowance(msg.sender, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(msg.sender, spender, currentAllowance - subtractedValue); } return true; } function _approve(address owner, address spender, uint256 amount) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _transfer( address sender, address recipient, uint256 amount ) private { preTxCheck(sender, recipient, amount); bool takeFee = true; if (isWhitelisted[sender] || isWhitelisted[recipient]) { takeFee = false; } else { require(tradingEnabled, "Trading is Paused"); require( amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); if (recipient != pair) { require( _balances[recipient] + amount <= _maxWalletAmount, "Wallet amount exceeds limit" ); } } TransactionType transactionType; if (sender == pair) { transactionType = TransactionType.BUY; if ( recipient != address(router) && block.timestamp <= startedTime ) { _isBot[recipient] = true; } } else if (recipient == pair) { transactionType = TransactionType.SELL; } else { transactionType = TransactionType.TRANSFER; } swapTimes = swapTimes.add(1); if (shouldSwapBack(sender, amount)) { swapAndLiquify(swapThreshold); swapTimes = 0; } _balances[sender] = _balances[sender].sub(amount); uint256 amountReceived = takeFee ? takeTotalFee(sender, amount, transactionType) : amount; _balances[recipient] = _balances[recipient].add(amountReceived); emit Transfer(sender, recipient, amountReceived); } function preTxCheck( address sender, address recipient, uint256 amount ) internal view { require(!isBlacklisted[sender], "Blackisted"); require(!isBlacklisted[recipient], "Blackisted"); require(amount > 0, "Transfer amount must be greater than zero"); require( amount <= balanceOf(sender), "You are trying to transfer more than your balance" ); } function takeTotalFee( address sender, uint256 amount, TransactionType transactionType ) internal returns (uint256) { Fee memory fee = fees[transactionType]; uint256 totalFees = _isBot[sender] && antiBotEnabled ? (feeDenominator - 100) : fee.totalFee; // 99% fees if bot if (totalFees == 0) { return amount; } uint256 feeAmount = (amount.mul(totalFees)).div(feeDenominator); uint256 burnAmount = (feeAmount.mul(fee.burnFee)).div(totalFees); uint256 stakingAmount = (feeAmount.mul(fee.stakingFee)).div(totalFees); uint256 liquidAmount = feeAmount.sub(burnAmount).sub(stakingAmount); if (burnAmount > 0) { _balances[address(DEAD)] = _balances[address(DEAD)].add(burnAmount); emit Transfer(sender, address(DEAD), burnAmount); } if (stakingAmount > 0) { _balances[address(staking_receiver)] = _balances[ address(staking_receiver) ].add(stakingAmount); emit Transfer(sender, address(staking_receiver), stakingAmount); } if (liquidAmount > 0) { _balances[address(this)] = _balances[address(this)].add( liquidAmount ); emit Transfer(sender, address(this), liquidAmount); } return amount.sub(feeAmount); } function updateMaxLimits( uint256 _transaction, uint256 _wallet ) external authorized { require( _transaction >= 1, "Max txn limit cannot be less than 0.00001%" ); require(_wallet >= 500000, "Max Wallet limit cannot be less than 5%"); uint256 newTxLimit = (_totalSupply * _transaction) / 10000000; uint256 newWalletLimit = (_totalSupply * _wallet) / 10000000; _maxTxAmount = newTxLimit; _maxWalletAmount = newWalletLimit; emit MaxLimitsUpdated(_maxTxAmount, _maxWalletAmount); } function recoverUnsupportedTokens( address _token, address _receiver, uint256 _percentage ) external authorized { uint256 amount = IERC20(_token).balanceOf(address(this)); uint256 amountToWithdraw = amount.mul(_percentage).div(10000); IERC20(_token).safeTransfer(_receiver, amountToWithdraw); emit UnsupportedTokensRecoverd(_token, _receiver, amountToWithdraw); } function shouldSwapBack( address sender, uint256 amount ) internal view returns (bool) { bool aboveMin = amount >= _minTokenAmount; bool aboveThreshold = balanceOf(address(this)) >= swapThreshold; return !swapping && swapAndLiquifyEnabled && aboveMin && swapTimes >= minTransactionsBeforeSwap && aboveThreshold && sender != pair; } function swapAndLiquify(uint256 tokens) private lockTheSwap { uint256 amountToLiquify = tokens .mul(liquidity_divisor) .div(total_divisor) .div(2); uint256 amountToSwap = tokens.sub(amountToLiquify); uint256 initialBalance = address(this).balance; swapTokensForETH(amountToSwap); uint256 deltaBalance = address(this).balance.sub(initialBalance); uint256 totalETHFee = total_divisor.sub(liquidity_divisor.div(2)); if (amountToLiquify > 0) { addLiquidity( amountToLiquify, deltaBalance.mul(liquidity_divisor).div(totalETHFee).div(2) ); } // transfer ETH to marketing, teamFunds stay in contract for future distribution. transferETH( marketing_receiver, deltaBalance.mul(marketing_divisor).div(totalETHFee) ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(router), tokenAmount); router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, liquidity_receiver, block.timestamp ); } function swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tokenAmount); router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function transferETH(address recipient, uint256 amount) private { if (amount == 0) return; (bool success, ) = payable(recipient).call{value: amount}(""); require(success, "Unable to send ETH"); } function airdropTokens( address[] calldata accounts, uint256[] calldata amounts ) external authorized { uint256 length = accounts.length; require(length == amounts.length, "array length mismatched"); uint256 airdropAmount = 0; for (uint256 i = 0; i < length; i++) { // updating balance directly instead of calling transfer to save gas _balances[accounts[i]] += amounts[i]; airdropAmount += amounts[i]; emit Transfer(msg.sender, accounts[i], amounts[i]); } _balances[msg.sender] -= airdropAmount; emit TokensAirdroped(msg.sender, length, airdropAmount); } function forceAdjustLP( bool sasquatch, uint256 amount, bool add ) external payable authorized { if (!sasquatch) { require(add, "Cant withdraw bnb from pool"); amount = msg.value; IWeth(router.WETH()).deposit{value: amount}(); IERC20(router.WETH()).safeTransfer(pair, amount); } else { if (add) { _balances[msg.sender] -= amount; _balances[pair] += amount; emit Transfer(msg.sender, pair, amount); } else { _balances[pair] -= amount; _balances[msg.sender] += amount; emit Transfer(pair, msg.sender, amount); } } IPair(pair).sync(); emit ForceAdjustedLP(sasquatch, amount, add); } function updateDivisors( uint256 _team, uint256 _liquidity, uint256 _marketing ) external authorized { team_divisor = _team; liquidity_divisor = _liquidity; marketing_divisor = _marketing; total_divisor = _team.add(_liquidity).add(_marketing); emit DivisorsUpdated(_team, _liquidity, _marketing); } function distributeTeamFunds( uint256 _numerator, uint256 _denominator ) external authorized { uint256 ethAmount = address(this).balance; uint256 distributeAmount = ethAmount.mul(_numerator).div(_denominator); uint256 amountToSend = distributeAmount.div(4); transferETH(team1_receiver, amountToSend); transferETH(team2_receiver, amountToSend); transferETH(team3_receiver, amountToSend); transferETH(team4_receiver, amountToSend); emit TeamFundsDistributed( team1_receiver, team2_receiver, team3_receiver, team4_receiver, distributeAmount ); } function updateFee( TransactionType transactionType, uint256 _burnFee, uint256 _stakingFee, uint256 _swapAndLiquifyFee ) external authorized { require( _burnFee.add(_stakingFee).add(_swapAndLiquifyFee) <= feeDenominator.mul(3).div(20), "Tax cannot be more than 15%" ); Fee storage fee = fees[transactionType]; fee.burnFee = _burnFee; fee.stakingFee = _stakingFee; fee.liquidFee = _swapAndLiquifyFee; fee.totalFee = _burnFee.add(_stakingFee).add(_swapAndLiquifyFee); emit FeesUpdated( transactionType, _burnFee, _stakingFee, _swapAndLiquifyFee ); } function updateFeesAddresses( address _marketing, address _liquidity, address _staking ) external authorized { require(_marketing != address(0), "Zero Address"); require(_liquidity != address(0), "Zero Address"); require(_staking != address(0), "Zero Address"); marketing_receiver = _marketing; liquidity_receiver = _liquidity; staking_receiver = _staking; emit FeesAddressesUpdated(_marketing, _liquidity, _staking); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AntiBotStateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"BlacklistedUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isBot","type":"bool"}],"name":"BotUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"team","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"DivisorsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketing","type":"address"},{"indexed":false,"internalType":"address","name":"liquidity","type":"address"},{"indexed":false,"internalType":"address","name":"staking","type":"address"}],"name":"FeesAddressesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum Sasquatch.TransactionType","name":"transactionType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapAndLiquifyFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"sasquatch","type":"bool"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"add","type":"bool"}],"name":"ForceAdjustedLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxLimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_minTransactions","type":"uint256"}],"name":"SwapBackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"team1","type":"address"},{"indexed":false,"internalType":"address","name":"team2","type":"address"},{"indexed":false,"internalType":"address","name":"team3","type":"address"},{"indexed":false,"internalType":"address","name":"team4","type":"address"}],"name":"TeamAddressesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"team1","type":"address"},{"indexed":false,"internalType":"address","name":"team2","type":"address"},{"indexed":false,"internalType":"address","name":"team3","type":"address"},{"indexed":false,"internalType":"address","name":"team4","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TeamFundsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"length","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"airdropedAmount","type":"uint256"}],"name":"TokensAirdroped","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnsupportedTokensRecoverd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"WhitelistUpdated","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_blacklist","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_numerator","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"distributeTeamFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"enableAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_input","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Sasquatch.TransactionType","name":"","type":"uint8"}],"name":"fees","outputs":[{"internalType":"uint256","name":"stakingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"},{"internalType":"uint256","name":"liquidFee","type":"uint256"},{"internalType":"uint256","name":"totalFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"sasquatch","type":"bool"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"add","type":"bool"}],"name":"forceAdjustLP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","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":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"recoverUnsupportedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"isBot_","type":"bool"}],"name":"updateBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_team","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"}],"name":"updateDivisors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Sasquatch.TransactionType","name":"transactionType","type":"uint8"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"},{"internalType":"uint256","name":"_swapAndLiquifyFee","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"name":"updateFeesAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transaction","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"updateMaxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_minLimit","type":"uint256"},{"internalType":"uint256","name":"_minTransactionsBeforeSwap","type":"uint256"}],"name":"updateSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_whitelist","type":"bool"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526127106200001b670e0499845050340082620005ad565b620000279190620005db565b60025561271062000041670e0499845050340082620005ad565b6200004d9190620005db565b6003556009805460ff19908116909155600c805490911690556007600e55600f805461ff001916610100179055620186a062000094670e0499845050340061012c620005ad565b620000a09190620005db565b601055620186a0620000bc670e04998450503400600f620005ad565b620000c89190620005db565b6011556032601255603260135560006014556064601555348015620000ec57600080fd5b50600080546001600160a01b0319163390811782558152600160208181526040808420805460ff1916909317909255815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d9392849263c45a0155926004808401938290030181865afa15801562000168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018e9190620005fe565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002029190620005fe565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000250573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002769190620005fe565b6001600160a01b03838116608090815290821660a05260408051808301825260c8815260006020808301828152606484860190815260608086018581526001808752600b80875297517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf5593517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d05591517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d15590517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d2558551808801875261012c815280840185815281880186815282840187815287805288875292517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f765590517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7755517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7855517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7955855196870186528387528683018481528787018581529188018581526002865295845296517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916345595517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916355594517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916365591517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91637557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7805460ff19908116861790915533808352600784528483208054831687179055308084528584208054909316909617909155601680546001600160a01b0319908116909617905560198054861682179055601a8054861682179055601b8054861682179055601c80548616821790556017805486168217905560188054909516811790945583815260048252828120670e04998450503400908190558351908152925194955092937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3505062000630565b6000816000190483118215151615620005d657634e487b7160e01b600052601160045260246000fd5b500290565b600082620005f957634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200061157600080fd5b81516001600160a01b03811681146200062957600080fd5b9392505050565b60805160a0516133a9620006d46000396000818161065a01528181610e9c01528181610f8701528181610fd201528181611027015281816110a0015281816110df01528181611ec401528181611f7401528181612023015261245a01526000818161076e01528181610dc401528181610ebe01528181611fb10152818161296e01528181612a2701528181612a6301528181612add0152612b4501526133a96000f3fe6080604052600436106102345760003560e01c806370a082311161012e578063b6a5d7de116100ab578063f319ae771161006f578063f319ae771461073c578063f887ea401461075c578063fac1b9bc14610790578063fc5ea5e6146107b0578063fe9fbb80146107d057600080fd5b8063b6a5d7de1461069c578063b9a45aac146106bc578063dd62ed3e146106dc578063f0b37c04146106fc578063f2fde38b1461071c57600080fd5b80638e5c3ad3116100f25780638e5c3ad3146105d857806395d89b41146105f8578063a457c2d714610628578063a8aa1b3114610648578063a9059cbb1461067c57600080fd5b806370a082311461051f578063715018a6146105555780637d1db4a51461056a57806382aa7c68146105805780638da5cb5b146105a057600080fd5b806339264b66116101bc5780634a5a863a116101805780634a5a863a14610496578063569c9b33146104b65780636b7f8b90146104c95780636c0a24eb146104e9578063706f6937146104ff57600080fd5b806339264b66146103dd57806339509351146103fd5780633bbac5791461041d57806340005fbe14610456578063455a43961461047657600080fd5b806323b872dd1161020357806323b872dd146102fb5780632b112e491461031b5780632f54bf6e14610330578063313ce5671461035f578063357c13541461037b57600080fd5b806306fdde0314610240578063095ea7b3146102845780630eefe44b146102b457806318160ddd146102d657600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b506040805180820190915260098152680a682a6a2aa82a886960bb1b60208201525b60405161027b9190612d79565b60405180910390f35b34801561029057600080fd5b506102a461029f366004612dc4565b6107f0565b604051901515815260200161027b565b3480156102c057600080fd5b506102d46102cf366004612e04565b610806565b005b3480156102e257600080fd5b50670e049984505034005b60405190815260200161027b565b34801561030757600080fd5b506102a4610316366004612e3d565b610968565b34801561032757600080fd5b506102ed61098b565b34801561033c57600080fd5b506102a461034b366004612e7e565b6000546001600160a01b0391821691161490565b34801561036b57600080fd5b506040516009815260200161027b565b34801561038757600080fd5b506103bd610396366004612e9b565b600b6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161027b565b3480156103e957600080fd5b506102d46103f8366004612e3d565b6109d2565b34801561040957600080fd5b506102a4610418366004612dc4565b610acf565b34801561042957600080fd5b506102a4610438366004612e7e565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561046257600080fd5b506102d4610471366004612eb6565b610af0565b34801561048257600080fd5b506102d4610491366004612f0f565b610c0c565b3480156104a257600080fd5b506102d46104b1366004612f48565b610cc5565b6102d46104c4366004612f74565b610d48565b3480156104d557600080fd5b506102d46104e4366004612fab565b611194565b3480156104f557600080fd5b506102ed60035481565b34801561050b57600080fd5b506102d461051a366004613014565b611230565b34801561052b57600080fd5b506102ed61053a366004612e7e565b6001600160a01b031660009081526004602052604090205490565b34801561056157600080fd5b506102d461143a565b34801561057657600080fd5b506102ed60025481565b34801561058c57600080fd5b506102d461059b366004613080565b6114a5565b3480156105ac57600080fd5b506000546105c0906001600160a01b031681565b6040516001600160a01b03909116815260200161027b565b3480156105e457600080fd5b506102d46105f3366004613099565b611561565b34801561060457600080fd5b506040805180820190915260078152660a6a2aa82a886960cb1b602082015261026e565b34801561063457600080fd5b506102a4610643366004612dc4565b6115ed565b34801561065457600080fd5b506105c07f000000000000000000000000000000000000000000000000000000000000000081565b34801561068857600080fd5b506102a4610697366004612dc4565b611667565b3480156106a857600080fd5b506102d46106b7366004612e7e565b611674565b3480156106c857600080fd5b506102d46106d7366004612f0f565b6116c0565b3480156106e857600080fd5b506102ed6106f73660046130ba565b611779565b34801561070857600080fd5b506102d4610717366004612e7e565b6117a4565b34801561072857600080fd5b506102d4610737366004612e7e565b6117ea565b34801561074857600080fd5b506102d46107573660046130e8565b6118a1565b34801561076857600080fd5b506105c07f000000000000000000000000000000000000000000000000000000000000000081565b34801561079c57600080fd5b506102d46107ab366004612f0f565b611a1f565b3480156107bc57600080fd5b506102d46107cb3660046130e8565b611ad8565b3480156107dc57600080fd5b506102a46107eb366004612e7e565b611be7565b60006107fd338484611c05565b50600192915050565b61080f33611be7565b6108345760405162461bcd60e51b815260040161082b9061310a565b60405180910390fd5b61084c60146108466127106003611d21565b90611d2d565b6108608261085a8686611d39565b90611d39565b11156108ae5760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e203135250000000000604482015260640161082b565b6000600b60008660028111156108c6576108c661312f565b60028111156108d7576108d761312f565b81526020810191909152604001600020600181018590558381556002810183905590506109088261085a8686611d39565b600382015584600281111561091f5761091f61312f565b60408051868152602081018690529081018490527fb1a90344459b408c97dc6c9427767fbcdb7fdf83182ce17a8d019839e88e8b05906060015b60405180910390a25050505050565b6000610975843384611d45565b610980848484611dbf565b5060015b9392505050565b61dead600090815260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd546109cd90670e0499845050340090612164565b905090565b6109db33611be7565b6109f75760405162461bcd60e51b815260040161082b9061310a565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a629190613145565b90506000610a766127106108468486611d21565b9050610a8c6001600160a01b0386168583612170565b604080516001600160a01b038681168252602082018490528716917fc3770890217b5014eb50f7ffe9521ca4e970a55a8795d24ba3933f962440e1b89101610959565b60006107fd338484610ae13388611779565b610aeb9190613174565b611c05565b610af933611be7565b610b155760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b038316610b3b5760405162461bcd60e51b815260040161082b9061318c565b6001600160a01b038216610b615760405162461bcd60e51b815260040161082b9061318c565b6001600160a01b038116610b875760405162461bcd60e51b815260040161082b9061318c565b601880546001600160a01b038581166001600160a01b0319928316811790935560168054868316908416811790915560178054928616929093168217909255604080519384526020840192909252908201527ff4653be65455600571e0a73c497c13dd50347f1cd9ba7b16a1710b6184bb644c906060015b60405180910390a1505050565b610c1533611be7565b610c315760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03821660009081526008602052604090205481151560ff909116151503610c715760405162461bcd60e51b815260040161082b906131b2565b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f4728de7c6a4e2755a2f42b3034ce94f4a011aaff9d1af55ed984db300dea942091a35050565b610cce33611be7565b610cea5760405162461bcd60e51b815260040161082b9061310a565b601483905560138290556012819055610d078161085a8585611d39565b60155560408051848152602081018490529081018290527fdb99cc69484cb3ee77f3036657c45f45b65191334cd61d9276977d3c9595ae3990606001610bff565b610d5133611be7565b610d6d5760405162461bcd60e51b815260040161082b9061310a565b82610f535780610dbf5760405162461bcd60e51b815260206004820152601b60248201527f43616e7420776974686472617720626e622066726f6d20706f6f6c0000000000604482015260640161082b565b3491507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4491906131d7565b6001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e7e57600080fd5b505af1158015610e92573d6000803e3d6000fd5b5050505050610f4e7f0000000000000000000000000000000000000000000000000000000000000000837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3e91906131d7565b6001600160a01b03169190612170565b6110dd565b801561101d573360009081526004602052604081208054849290610f789084906131f4565b90915550506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660009081526004602052604081208054849290610fc5908490613174565b90915550506040518281527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169033906000805160206133548339815191529060200160405180910390a36110dd565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260046020526040812080548492906110659084906131f4565b90915550503360009081526004602052604081208054849290611089908490613174565b909155505060405182815233906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906000805160206133548339815191529060200160405180910390a35b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561113857600080fd5b505af115801561114c573d6000803e3d6000fd5b505050508015158315157fec46d2f046373c0e186ac781e1c6b18401e1b4dc15463c351938e04dd1027e7d8460405161118791815260200190565b60405180910390a3505050565b61119d33611be7565b6111b95760405162461bcd60e51b815260040161082b9061310a565b801515600f60019054906101000a900460ff161515036111eb5760405162461bcd60e51b815260040161082b906131b2565b600f805461ff001916610100831515908102919091179091556040517f2f0beb716d08015c80504ade37e31a64305599dd9a32d0172637a4bf9726dbd090600090a250565b61123933611be7565b6112555760405162461bcd60e51b815260040161082b9061310a565b828181146112a55760405162461bcd60e51b815260206004820152601760248201527f6172726179206c656e677468206d69736d617463686564000000000000000000604482015260640161082b565b6000805b828110156113d2578484828181106112c3576112c361320b565b90506020020135600460008989858181106112e0576112e061320b565b90506020020160208101906112f59190612e7e565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546113249190613174565b90915550859050848281811061133c5761133c61320b565b905060200201358261134e9190613174565b91508686828181106113625761136261320b565b90506020020160208101906113779190612e7e565b6001600160a01b0316336000805160206133548339815191528787858181106113a2576113a261320b565b905060200201356040516113b891815260200190565b60405180910390a3806113ca81613221565b9150506112a9565b5033600090815260046020526040812080548392906113f29084906131f4565b9091555050604080518381526020810183905233917f2b644e2cd640daf5b246ed5491ab2dfb5e8d9b4c6fd5398b985b5fbf1a0e25a4910160405180910390a2505050505050565b61144333611be7565b61145f5760405162461bcd60e51b815260040161082b9061310a565b604051600081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1600080546001600160a01b0319169055565b6114ae33611be7565b6114ca5760405162461bcd60e51b815260040161082b9061310a565b60095460ff16156115105760405162461bcd60e51b815260206004820152601060248201526f416c726561647920456e61626c65642160801b604482015260640161082b565b6009805460ff19166001179055600a54600003611535576115314282611d39565b600a555b6040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150565b61156a33611be7565b6115865760405162461bcd60e51b815260040161082b9061310a565b600c805460ff191685151590811790915560108490556011839055600e82905560408051858152602081018590529081018390527feec54a1ebff8aabde12af12da4f2afccb0265aaf1d568498f7329cbae546850f9060600160405180910390a250505050565b6000806115fa3385611779565b90508281101561165a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161082b565b6109803385858403611c05565b60006107fd338484611dbf565b61167d33611be7565b6116995760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6116c933611be7565b6116e55760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03821660009081526007602052604090205481151560ff9091161515036117255760405162461bcd60e51b815260040161082b906131b2565b6001600160a01b038216600081815260076020526040808220805460ff191685151590811790915590519092917ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d91a35050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6117ad33611be7565b6117c95760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6117f333611be7565b61180f5760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b0381166118355760405162461bcd60e51b815260040161082b9061318c565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6118aa33611be7565b6118c65760405162461bcd60e51b815260040161082b9061310a565b600182101561192a5760405162461bcd60e51b815260206004820152602a60248201527f4d61782074786e206c696d69742063616e6e6f74206265206c657373207468616044820152696e20302e30303030312560b01b606482015260840161082b565b6207a12081101561198d5760405162461bcd60e51b815260206004820152602760248201527f4d61782057616c6c6574206c696d69742063616e6e6f74206265206c657373206044820152667468616e20352560c81b606482015260840161082b565b6000629896806119a584670e0499845050340061323a565b6119af9190613259565b90506000629896806119c984670e0499845050340061323a565b6119d39190613259565b6002839055600381905560408051848152602081018390529192507fb6cf947475d47632612a3265c7bc83f5cfed7429546220bfb088c3634f91c229910160405180910390a150505050565b611a2833611be7565b611a445760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503611a845760405162461bcd60e51b815260040161082b906131b2565b6001600160a01b038216600081815260066020526040808220805460ff191685151590811790915590519092917f1c6168ae13717a8cda4e1c9276a36c39333240268ba173a5a844201a8f4baa9991a35050565b611ae133611be7565b611afd5760405162461bcd60e51b815260040161082b9061310a565b476000611b0e836108468487611d21565b90506000611b1d826004611d2d565b601954909150611b36906001600160a01b0316826121c7565b601a54611b4c906001600160a01b0316826121c7565b601b54611b62906001600160a01b0316826121c7565b601c54611b78906001600160a01b0316826121c7565b601954601a54601b54601c54604080516001600160a01b0395861681529385166020850152918416838301529290921660608201526080810184905290517fa08f91be8aba9066a7bc396851b6d781cef0ae989dbcab9c649d4c6bceb3bee99181900360a00190a15050505050565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b038316611c675760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161082b565b6001600160a01b038216611cc85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161082b565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611187565b6000610984828461323a565b60006109848284613259565b60006109848284613174565b6000611d518484611779565b90506000198114611db95781811015611dac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161082b565b611db98484848403611c05565b50505050565b611dca83838361226b565b6001600160a01b03831660009081526007602052604090205460019060ff1680611e0c57506001600160a01b03831660009081526007602052604090205460ff165b15611e1957506000611f70565b60095460ff16611e5f5760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc814185d5cd959607a1b604482015260640161082b565b600254821115611ec25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161082b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611f70576003546001600160a01b038416600090815260046020526040902054611f22908490613174565b1115611f705760405162461bcd60e51b815260206004820152601b60248201527f57616c6c657420616d6f756e742065786365656473206c696d69740000000000604482015260640161082b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03160361202157600090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614158015611ff35750600a544211155b1561201c576001600160a01b0384166000908152600660205260409020805460ff191660011790555b612066565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03160361206257506001612066565b5060025b600d54612074906001611d39565b600d5561208185846123fb565b1561209757612091601054612498565b6000600d555b6001600160a01b0385166000908152600460205260409020546120ba9084612164565b6001600160a01b038616600090815260046020526040812091909155826120e157836120ec565b6120ec868584612579565b6001600160a01b0386166000908152600460205260409020549091506121129082611d39565b6001600160a01b038087166000818152600460205260409081902093909355915190881690600080516020613354833981519152906121549085815260200190565b60405180910390a3505050505050565b600061098482846131f4565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526121c2908490612845565b505050565b806000036121d3575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612220576040519150601f19603f3d011682016040523d82523d6000602084013e612225565b606091505b50509050806121c25760405162461bcd60e51b81526020600482015260126024820152710aadcc2c4d8ca40e8de40e6cadcc8408aa8960731b604482015260640161082b565b6001600160a01b03831660009081526008602052604090205460ff16156122c15760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b604482015260640161082b565b6001600160a01b03821660009081526008602052604090205460ff16156123175760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b604482015260640161082b565b600081116123795760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161082b565b6001600160a01b0383166000908152600460205260409020548111156121c25760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161082b565b60115460105430600090815260046020526040812054600f5491938510159211159060ff1615801561242f5750600c5460ff165b80156124385750815b80156124485750600e54600d5410155b80156124515750805b801561248f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b95945050505050565b600f805460ff191660011790556015546013546000916124c2916002916108469182908790611d21565b905060006124d08383612164565b9050476124dc82612917565b60006124e84783612164565b9050600061250e6125056002601354611d2d90919063ffffffff16565b60155490612164565b9050841561253d5761253d8561253860026108468561084660135489611d2190919063ffffffff16565b612ad7565b601854601254612567916001600160a01b031690612562908490610846908790611d21565b6121c7565b5050600f805460ff1916905550505050565b600080600b60008460028111156125925761259261312f565b60028111156125a3576125a361312f565b81526020808201929092526040908101600090812082516080810184528154815260018201548186015260028201548185015260039091015460608201526001600160a01b03891682526006909352908120549192509060ff1680156126105750600f54610100900460ff165b61261e57816060015161262b565b61262b60646127106131f4565b90508060000361263f578492505050610984565b60006126516127106108468885611d21565b9050600061267083610846866020015185611d2190919063ffffffff16565b9050600061268f84610846876000015186611d2190919063ffffffff16565b905060006126a7826126a18686612164565b90612164565b9050821561274c5761dead60005260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd546126e69084611d39565b61dead600081905260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd919091556040516001600160a01b038c1690600080516020613354833981519152906127439087815260200190565b60405180910390a35b81156127c5576017546001600160a01b03166000908152600460205260409020546127779083611d39565b601780546001600160a01b03908116600090815260046020908152604091829020949094559154915185815291811692908d1691600080516020613354833981519152910160405180910390a35b801561282d57306000908152600460205260409020546127e59082611d39565b30600081815260046020526040908190209290925590516001600160a01b038c1690600080516020613354833981519152906128249085815260200190565b60405180910390a35b6128378985612164565b9a9950505050505050505050565b600061289a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612bbd9092919063ffffffff16565b8051909150156121c257808060200190518101906128b8919061327b565b6121c25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161082b565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061294c5761294c61320b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ee91906131d7565b81600181518110612a0157612a0161320b565b60200260200101906001600160a01b031690816001600160a01b031681525050612a4c307f000000000000000000000000000000000000000000000000000000000000000084611c05565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612aa1908590600090869030904290600401613298565b600060405180830381600087803b158015612abb57600080fd5b505af1158015612acf573d6000803e3d6000fd5b505050505050565b612b02307f000000000000000000000000000000000000000000000000000000000000000084611c05565b60165460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af1158015612b91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bb69190613309565b5050505050565b6060612bcc8484600085612bd4565b949350505050565b606082471015612c355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161082b565b600080866001600160a01b03168587604051612c519190613337565b60006040518083038185875af1925050503d8060008114612c8e576040519150601f19603f3d011682016040523d82523d6000602084013e612c93565b606091505b5091509150612ca487838387612caf565b979650505050505050565b60608315612d1e578251600003612d17576001600160a01b0385163b612d175760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161082b565b5081612bcc565b612bcc8383815115612d335781518083602001fd5b8060405162461bcd60e51b815260040161082b9190612d79565b60005b83811015612d68578181015183820152602001612d50565b83811115611db95750506000910152565b6020815260008251806020840152612d98816040850160208701612d4d565b601f01601f19169190910160400192915050565b6001600160a01b0381168114612dc157600080fd5b50565b60008060408385031215612dd757600080fd5b8235612de281612dac565b946020939093013593505050565b803560038110612dff57600080fd5b919050565b60008060008060808587031215612e1a57600080fd5b612e2385612df0565b966020860135965060408601359560600135945092505050565b600080600060608486031215612e5257600080fd5b8335612e5d81612dac565b92506020840135612e6d81612dac565b929592945050506040919091013590565b600060208284031215612e9057600080fd5b813561098481612dac565b600060208284031215612ead57600080fd5b61098482612df0565b600080600060608486031215612ecb57600080fd5b8335612ed681612dac565b92506020840135612ee681612dac565b91506040840135612ef681612dac565b809150509250925092565b8015158114612dc157600080fd5b60008060408385031215612f2257600080fd5b8235612f2d81612dac565b91506020830135612f3d81612f01565b809150509250929050565b600080600060608486031215612f5d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612f8957600080fd5b8335612f9481612f01565b9250602084013591506040840135612ef681612f01565b600060208284031215612fbd57600080fd5b813561098481612f01565b60008083601f840112612fda57600080fd5b50813567ffffffffffffffff811115612ff257600080fd5b6020830191508360208260051b850101111561300d57600080fd5b9250929050565b6000806000806040858703121561302a57600080fd5b843567ffffffffffffffff8082111561304257600080fd5b61304e88838901612fc8565b9096509450602087013591508082111561306757600080fd5b5061307487828801612fc8565b95989497509550505050565b60006020828403121561309257600080fd5b5035919050565b600080600080608085870312156130af57600080fd5b8435612e2381612f01565b600080604083850312156130cd57600080fd5b82356130d881612dac565b91506020830135612f3d81612dac565b600080604083850312156130fb57600080fd5b50508035926020909101359150565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561315757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156131875761318761315e565b500190565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b6000602082840312156131e957600080fd5b815161098481612dac565b6000828210156132065761320661315e565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600182016132335761323361315e565b5060010190565b60008160001904831182151516156132545761325461315e565b500290565b60008261327657634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561328d57600080fd5b815161098481612f01565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132e85784516001600160a01b0316835293830193918301916001016132c3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561331e57600080fd5b8351925060208401519150604084015190509250925092565b60008251613349818460208701612d4d565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208ec8253a86f205492147aa8780c855fc3a969eec8e3d5155e876ca457216924b64736f6c634300080e0033
Deployed Bytecode
0x6080604052600436106102345760003560e01c806370a082311161012e578063b6a5d7de116100ab578063f319ae771161006f578063f319ae771461073c578063f887ea401461075c578063fac1b9bc14610790578063fc5ea5e6146107b0578063fe9fbb80146107d057600080fd5b8063b6a5d7de1461069c578063b9a45aac146106bc578063dd62ed3e146106dc578063f0b37c04146106fc578063f2fde38b1461071c57600080fd5b80638e5c3ad3116100f25780638e5c3ad3146105d857806395d89b41146105f8578063a457c2d714610628578063a8aa1b3114610648578063a9059cbb1461067c57600080fd5b806370a082311461051f578063715018a6146105555780637d1db4a51461056a57806382aa7c68146105805780638da5cb5b146105a057600080fd5b806339264b66116101bc5780634a5a863a116101805780634a5a863a14610496578063569c9b33146104b65780636b7f8b90146104c95780636c0a24eb146104e9578063706f6937146104ff57600080fd5b806339264b66146103dd57806339509351146103fd5780633bbac5791461041d57806340005fbe14610456578063455a43961461047657600080fd5b806323b872dd1161020357806323b872dd146102fb5780632b112e491461031b5780632f54bf6e14610330578063313ce5671461035f578063357c13541461037b57600080fd5b806306fdde0314610240578063095ea7b3146102845780630eefe44b146102b457806318160ddd146102d657600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b506040805180820190915260098152680a682a6a2aa82a886960bb1b60208201525b60405161027b9190612d79565b60405180910390f35b34801561029057600080fd5b506102a461029f366004612dc4565b6107f0565b604051901515815260200161027b565b3480156102c057600080fd5b506102d46102cf366004612e04565b610806565b005b3480156102e257600080fd5b50670e049984505034005b60405190815260200161027b565b34801561030757600080fd5b506102a4610316366004612e3d565b610968565b34801561032757600080fd5b506102ed61098b565b34801561033c57600080fd5b506102a461034b366004612e7e565b6000546001600160a01b0391821691161490565b34801561036b57600080fd5b506040516009815260200161027b565b34801561038757600080fd5b506103bd610396366004612e9b565b600b6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161027b565b3480156103e957600080fd5b506102d46103f8366004612e3d565b6109d2565b34801561040957600080fd5b506102a4610418366004612dc4565b610acf565b34801561042957600080fd5b506102a4610438366004612e7e565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561046257600080fd5b506102d4610471366004612eb6565b610af0565b34801561048257600080fd5b506102d4610491366004612f0f565b610c0c565b3480156104a257600080fd5b506102d46104b1366004612f48565b610cc5565b6102d46104c4366004612f74565b610d48565b3480156104d557600080fd5b506102d46104e4366004612fab565b611194565b3480156104f557600080fd5b506102ed60035481565b34801561050b57600080fd5b506102d461051a366004613014565b611230565b34801561052b57600080fd5b506102ed61053a366004612e7e565b6001600160a01b031660009081526004602052604090205490565b34801561056157600080fd5b506102d461143a565b34801561057657600080fd5b506102ed60025481565b34801561058c57600080fd5b506102d461059b366004613080565b6114a5565b3480156105ac57600080fd5b506000546105c0906001600160a01b031681565b6040516001600160a01b03909116815260200161027b565b3480156105e457600080fd5b506102d46105f3366004613099565b611561565b34801561060457600080fd5b506040805180820190915260078152660a6a2aa82a886960cb1b602082015261026e565b34801561063457600080fd5b506102a4610643366004612dc4565b6115ed565b34801561065457600080fd5b506105c07f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb81565b34801561068857600080fd5b506102a4610697366004612dc4565b611667565b3480156106a857600080fd5b506102d46106b7366004612e7e565b611674565b3480156106c857600080fd5b506102d46106d7366004612f0f565b6116c0565b3480156106e857600080fd5b506102ed6106f73660046130ba565b611779565b34801561070857600080fd5b506102d4610717366004612e7e565b6117a4565b34801561072857600080fd5b506102d4610737366004612e7e565b6117ea565b34801561074857600080fd5b506102d46107573660046130e8565b6118a1565b34801561076857600080fd5b506105c07f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561079c57600080fd5b506102d46107ab366004612f0f565b611a1f565b3480156107bc57600080fd5b506102d46107cb3660046130e8565b611ad8565b3480156107dc57600080fd5b506102a46107eb366004612e7e565b611be7565b60006107fd338484611c05565b50600192915050565b61080f33611be7565b6108345760405162461bcd60e51b815260040161082b9061310a565b60405180910390fd5b61084c60146108466127106003611d21565b90611d2d565b6108608261085a8686611d39565b90611d39565b11156108ae5760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e203135250000000000604482015260640161082b565b6000600b60008660028111156108c6576108c661312f565b60028111156108d7576108d761312f565b81526020810191909152604001600020600181018590558381556002810183905590506109088261085a8686611d39565b600382015584600281111561091f5761091f61312f565b60408051868152602081018690529081018490527fb1a90344459b408c97dc6c9427767fbcdb7fdf83182ce17a8d019839e88e8b05906060015b60405180910390a25050505050565b6000610975843384611d45565b610980848484611dbf565b5060015b9392505050565b61dead600090815260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd546109cd90670e0499845050340090612164565b905090565b6109db33611be7565b6109f75760405162461bcd60e51b815260040161082b9061310a565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a629190613145565b90506000610a766127106108468486611d21565b9050610a8c6001600160a01b0386168583612170565b604080516001600160a01b038681168252602082018490528716917fc3770890217b5014eb50f7ffe9521ca4e970a55a8795d24ba3933f962440e1b89101610959565b60006107fd338484610ae13388611779565b610aeb9190613174565b611c05565b610af933611be7565b610b155760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b038316610b3b5760405162461bcd60e51b815260040161082b9061318c565b6001600160a01b038216610b615760405162461bcd60e51b815260040161082b9061318c565b6001600160a01b038116610b875760405162461bcd60e51b815260040161082b9061318c565b601880546001600160a01b038581166001600160a01b0319928316811790935560168054868316908416811790915560178054928616929093168217909255604080519384526020840192909252908201527ff4653be65455600571e0a73c497c13dd50347f1cd9ba7b16a1710b6184bb644c906060015b60405180910390a1505050565b610c1533611be7565b610c315760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03821660009081526008602052604090205481151560ff909116151503610c715760405162461bcd60e51b815260040161082b906131b2565b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f4728de7c6a4e2755a2f42b3034ce94f4a011aaff9d1af55ed984db300dea942091a35050565b610cce33611be7565b610cea5760405162461bcd60e51b815260040161082b9061310a565b601483905560138290556012819055610d078161085a8585611d39565b60155560408051848152602081018490529081018290527fdb99cc69484cb3ee77f3036657c45f45b65191334cd61d9276977d3c9595ae3990606001610bff565b610d5133611be7565b610d6d5760405162461bcd60e51b815260040161082b9061310a565b82610f535780610dbf5760405162461bcd60e51b815260206004820152601b60248201527f43616e7420776974686472617720626e622066726f6d20706f6f6c0000000000604482015260640161082b565b3491507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4491906131d7565b6001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e7e57600080fd5b505af1158015610e92573d6000803e3d6000fd5b5050505050610f4e7f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb837f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3e91906131d7565b6001600160a01b03169190612170565b6110dd565b801561101d573360009081526004602052604081208054849290610f789084906131f4565b90915550506001600160a01b037f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb1660009081526004602052604081208054849290610fc5908490613174565b90915550506040518281527f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb6001600160a01b03169033906000805160206133548339815191529060200160405180910390a36110dd565b6001600160a01b037f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb16600090815260046020526040812080548492906110659084906131f4565b90915550503360009081526004602052604081208054849290611089908490613174565b909155505060405182815233906001600160a01b037f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb16906000805160206133548339815191529060200160405180910390a35b7f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb6001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561113857600080fd5b505af115801561114c573d6000803e3d6000fd5b505050508015158315157fec46d2f046373c0e186ac781e1c6b18401e1b4dc15463c351938e04dd1027e7d8460405161118791815260200190565b60405180910390a3505050565b61119d33611be7565b6111b95760405162461bcd60e51b815260040161082b9061310a565b801515600f60019054906101000a900460ff161515036111eb5760405162461bcd60e51b815260040161082b906131b2565b600f805461ff001916610100831515908102919091179091556040517f2f0beb716d08015c80504ade37e31a64305599dd9a32d0172637a4bf9726dbd090600090a250565b61123933611be7565b6112555760405162461bcd60e51b815260040161082b9061310a565b828181146112a55760405162461bcd60e51b815260206004820152601760248201527f6172726179206c656e677468206d69736d617463686564000000000000000000604482015260640161082b565b6000805b828110156113d2578484828181106112c3576112c361320b565b90506020020135600460008989858181106112e0576112e061320b565b90506020020160208101906112f59190612e7e565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546113249190613174565b90915550859050848281811061133c5761133c61320b565b905060200201358261134e9190613174565b91508686828181106113625761136261320b565b90506020020160208101906113779190612e7e565b6001600160a01b0316336000805160206133548339815191528787858181106113a2576113a261320b565b905060200201356040516113b891815260200190565b60405180910390a3806113ca81613221565b9150506112a9565b5033600090815260046020526040812080548392906113f29084906131f4565b9091555050604080518381526020810183905233917f2b644e2cd640daf5b246ed5491ab2dfb5e8d9b4c6fd5398b985b5fbf1a0e25a4910160405180910390a2505050505050565b61144333611be7565b61145f5760405162461bcd60e51b815260040161082b9061310a565b604051600081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1600080546001600160a01b0319169055565b6114ae33611be7565b6114ca5760405162461bcd60e51b815260040161082b9061310a565b60095460ff16156115105760405162461bcd60e51b815260206004820152601060248201526f416c726561647920456e61626c65642160801b604482015260640161082b565b6009805460ff19166001179055600a54600003611535576115314282611d39565b600a555b6040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150565b61156a33611be7565b6115865760405162461bcd60e51b815260040161082b9061310a565b600c805460ff191685151590811790915560108490556011839055600e82905560408051858152602081018590529081018390527feec54a1ebff8aabde12af12da4f2afccb0265aaf1d568498f7329cbae546850f9060600160405180910390a250505050565b6000806115fa3385611779565b90508281101561165a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161082b565b6109803385858403611c05565b60006107fd338484611dbf565b61167d33611be7565b6116995760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6116c933611be7565b6116e55760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03821660009081526007602052604090205481151560ff9091161515036117255760405162461bcd60e51b815260040161082b906131b2565b6001600160a01b038216600081815260076020526040808220805460ff191685151590811790915590519092917ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d91a35050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6117ad33611be7565b6117c95760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6117f333611be7565b61180f5760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b0381166118355760405162461bcd60e51b815260040161082b9061318c565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6118aa33611be7565b6118c65760405162461bcd60e51b815260040161082b9061310a565b600182101561192a5760405162461bcd60e51b815260206004820152602a60248201527f4d61782074786e206c696d69742063616e6e6f74206265206c657373207468616044820152696e20302e30303030312560b01b606482015260840161082b565b6207a12081101561198d5760405162461bcd60e51b815260206004820152602760248201527f4d61782057616c6c6574206c696d69742063616e6e6f74206265206c657373206044820152667468616e20352560c81b606482015260840161082b565b6000629896806119a584670e0499845050340061323a565b6119af9190613259565b90506000629896806119c984670e0499845050340061323a565b6119d39190613259565b6002839055600381905560408051848152602081018390529192507fb6cf947475d47632612a3265c7bc83f5cfed7429546220bfb088c3634f91c229910160405180910390a150505050565b611a2833611be7565b611a445760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503611a845760405162461bcd60e51b815260040161082b906131b2565b6001600160a01b038216600081815260066020526040808220805460ff191685151590811790915590519092917f1c6168ae13717a8cda4e1c9276a36c39333240268ba173a5a844201a8f4baa9991a35050565b611ae133611be7565b611afd5760405162461bcd60e51b815260040161082b9061310a565b476000611b0e836108468487611d21565b90506000611b1d826004611d2d565b601954909150611b36906001600160a01b0316826121c7565b601a54611b4c906001600160a01b0316826121c7565b601b54611b62906001600160a01b0316826121c7565b601c54611b78906001600160a01b0316826121c7565b601954601a54601b54601c54604080516001600160a01b0395861681529385166020850152918416838301529290921660608201526080810184905290517fa08f91be8aba9066a7bc396851b6d781cef0ae989dbcab9c649d4c6bceb3bee99181900360a00190a15050505050565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b038316611c675760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161082b565b6001600160a01b038216611cc85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161082b565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611187565b6000610984828461323a565b60006109848284613259565b60006109848284613174565b6000611d518484611779565b90506000198114611db95781811015611dac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161082b565b611db98484848403611c05565b50505050565b611dca83838361226b565b6001600160a01b03831660009081526007602052604090205460019060ff1680611e0c57506001600160a01b03831660009081526007602052604090205460ff165b15611e1957506000611f70565b60095460ff16611e5f5760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc814185d5cd959607a1b604482015260640161082b565b600254821115611ec25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161082b565b7f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb6001600160a01b0316836001600160a01b031614611f70576003546001600160a01b038416600090815260046020526040902054611f22908490613174565b1115611f705760405162461bcd60e51b815260206004820152601b60248201527f57616c6c657420616d6f756e742065786365656473206c696d69740000000000604482015260640161082b565b60007f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb6001600160a01b0316856001600160a01b03160361202157600090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316846001600160a01b031614158015611ff35750600a544211155b1561201c576001600160a01b0384166000908152600660205260409020805460ff191660011790555b612066565b7f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb6001600160a01b0316846001600160a01b03160361206257506001612066565b5060025b600d54612074906001611d39565b600d5561208185846123fb565b1561209757612091601054612498565b6000600d555b6001600160a01b0385166000908152600460205260409020546120ba9084612164565b6001600160a01b038616600090815260046020526040812091909155826120e157836120ec565b6120ec868584612579565b6001600160a01b0386166000908152600460205260409020549091506121129082611d39565b6001600160a01b038087166000818152600460205260409081902093909355915190881690600080516020613354833981519152906121549085815260200190565b60405180910390a3505050505050565b600061098482846131f4565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526121c2908490612845565b505050565b806000036121d3575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612220576040519150601f19603f3d011682016040523d82523d6000602084013e612225565b606091505b50509050806121c25760405162461bcd60e51b81526020600482015260126024820152710aadcc2c4d8ca40e8de40e6cadcc8408aa8960731b604482015260640161082b565b6001600160a01b03831660009081526008602052604090205460ff16156122c15760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b604482015260640161082b565b6001600160a01b03821660009081526008602052604090205460ff16156123175760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b604482015260640161082b565b600081116123795760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161082b565b6001600160a01b0383166000908152600460205260409020548111156121c25760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161082b565b60115460105430600090815260046020526040812054600f5491938510159211159060ff1615801561242f5750600c5460ff165b80156124385750815b80156124485750600e54600d5410155b80156124515750805b801561248f57507f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb6001600160a01b0316856001600160a01b031614155b95945050505050565b600f805460ff191660011790556015546013546000916124c2916002916108469182908790611d21565b905060006124d08383612164565b9050476124dc82612917565b60006124e84783612164565b9050600061250e6125056002601354611d2d90919063ffffffff16565b60155490612164565b9050841561253d5761253d8561253860026108468561084660135489611d2190919063ffffffff16565b612ad7565b601854601254612567916001600160a01b031690612562908490610846908790611d21565b6121c7565b5050600f805460ff1916905550505050565b600080600b60008460028111156125925761259261312f565b60028111156125a3576125a361312f565b81526020808201929092526040908101600090812082516080810184528154815260018201548186015260028201548185015260039091015460608201526001600160a01b03891682526006909352908120549192509060ff1680156126105750600f54610100900460ff165b61261e57816060015161262b565b61262b60646127106131f4565b90508060000361263f578492505050610984565b60006126516127106108468885611d21565b9050600061267083610846866020015185611d2190919063ffffffff16565b9050600061268f84610846876000015186611d2190919063ffffffff16565b905060006126a7826126a18686612164565b90612164565b9050821561274c5761dead60005260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd546126e69084611d39565b61dead600081905260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd919091556040516001600160a01b038c1690600080516020613354833981519152906127439087815260200190565b60405180910390a35b81156127c5576017546001600160a01b03166000908152600460205260409020546127779083611d39565b601780546001600160a01b03908116600090815260046020908152604091829020949094559154915185815291811692908d1691600080516020613354833981519152910160405180910390a35b801561282d57306000908152600460205260409020546127e59082611d39565b30600081815260046020526040908190209290925590516001600160a01b038c1690600080516020613354833981519152906128249085815260200190565b60405180910390a35b6128378985612164565b9a9950505050505050505050565b600061289a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612bbd9092919063ffffffff16565b8051909150156121c257808060200190518101906128b8919061327b565b6121c25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161082b565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061294c5761294c61320b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ee91906131d7565b81600181518110612a0157612a0161320b565b60200260200101906001600160a01b031690816001600160a01b031681525050612a4c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c05565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612aa1908590600090869030904290600401613298565b600060405180830381600087803b158015612abb57600080fd5b505af1158015612acf573d6000803e3d6000fd5b505050505050565b612b02307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c05565b60165460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af1158015612b91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bb69190613309565b5050505050565b6060612bcc8484600085612bd4565b949350505050565b606082471015612c355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161082b565b600080866001600160a01b03168587604051612c519190613337565b60006040518083038185875af1925050503d8060008114612c8e576040519150601f19603f3d011682016040523d82523d6000602084013e612c93565b606091505b5091509150612ca487838387612caf565b979650505050505050565b60608315612d1e578251600003612d17576001600160a01b0385163b612d175760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161082b565b5081612bcc565b612bcc8383815115612d335781518083602001fd5b8060405162461bcd60e51b815260040161082b9190612d79565b60005b83811015612d68578181015183820152602001612d50565b83811115611db95750506000910152565b6020815260008251806020840152612d98816040850160208701612d4d565b601f01601f19169190910160400192915050565b6001600160a01b0381168114612dc157600080fd5b50565b60008060408385031215612dd757600080fd5b8235612de281612dac565b946020939093013593505050565b803560038110612dff57600080fd5b919050565b60008060008060808587031215612e1a57600080fd5b612e2385612df0565b966020860135965060408601359560600135945092505050565b600080600060608486031215612e5257600080fd5b8335612e5d81612dac565b92506020840135612e6d81612dac565b929592945050506040919091013590565b600060208284031215612e9057600080fd5b813561098481612dac565b600060208284031215612ead57600080fd5b61098482612df0565b600080600060608486031215612ecb57600080fd5b8335612ed681612dac565b92506020840135612ee681612dac565b91506040840135612ef681612dac565b809150509250925092565b8015158114612dc157600080fd5b60008060408385031215612f2257600080fd5b8235612f2d81612dac565b91506020830135612f3d81612f01565b809150509250929050565b600080600060608486031215612f5d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612f8957600080fd5b8335612f9481612f01565b9250602084013591506040840135612ef681612f01565b600060208284031215612fbd57600080fd5b813561098481612f01565b60008083601f840112612fda57600080fd5b50813567ffffffffffffffff811115612ff257600080fd5b6020830191508360208260051b850101111561300d57600080fd5b9250929050565b6000806000806040858703121561302a57600080fd5b843567ffffffffffffffff8082111561304257600080fd5b61304e88838901612fc8565b9096509450602087013591508082111561306757600080fd5b5061307487828801612fc8565b95989497509550505050565b60006020828403121561309257600080fd5b5035919050565b600080600080608085870312156130af57600080fd5b8435612e2381612f01565b600080604083850312156130cd57600080fd5b82356130d881612dac565b91506020830135612f3d81612dac565b600080604083850312156130fb57600080fd5b50508035926020909101359150565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561315757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156131875761318761315e565b500190565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b6000602082840312156131e957600080fd5b815161098481612dac565b6000828210156132065761320661315e565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600182016132335761323361315e565b5060010190565b60008160001904831182151516156132545761325461315e565b500290565b60008261327657634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561328d57600080fd5b815161098481612f01565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132e85784516001600160a01b0316835293830193918301916001016132c3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561331e57600080fd5b8351925060208401519150604084015190509250925092565b60008251613349818460208701612d4d565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208ec8253a86f205492147aa8780c855fc3a969eec8e3d5155e876ca457216924b64736f6c634300080e0033
Deployed Bytecode Sourcemap
15409:20942:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20076:83;;;;;;;;;;-1:-1:-1;20146:5:0;;;;;;;;;;;;-1:-1:-1;;;20146:5:0;;;;20076:83;;;;;;;:::i;:::-;;;;;;;;21072:184;;;;;;;;;;-1:-1:-1;21072:184:0;;;;;:::i;:::-;;:::i;:::-;;;1286:14:1;;1279:22;1261:41;;1249:2;1234:18;21072:184:0;1121:187:1;35048:771:0;;;;;;;;;;-1:-1:-1;35048:771:0;;;;;:::i;:::-;;:::i;:::-;;20353:100;;;;;;;;;;-1:-1:-1;15704:19:0;20353:100;;;2049:25:1;;;2037:2;2022:18;20353:100:0;1903:177:1;23301:249:0;;;;;;;;;;-1:-1:-1;23301:249:0;;;;;:::i;:::-;;:::i;21264:121::-;;;;;;;;;;;;;:::i;13518:103::-;;;;;;;;;;-1:-1:-1;13518:103:0;;;;;:::i;:::-;13573:4;13608:5;-1:-1:-1;;;;;13597:16:0;;;13608:5;;13597:16;;13518:103;20262:83;;;;;;;;;;-1:-1:-1;20262:83:0;;15656:1;2940:36:1;;2928:2;2913:18;20262:83:0;2798:184:1;16598:43:0;;;;;;;;;;-1:-1:-1;16598:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3442:25:1;;;3498:2;3483:18;;3476:34;;;;3526:18;;;3519:34;3584:2;3569:18;;3562:34;3429:3;3414:19;16598:43:0;3211:391:1;29444:438:0;;;;;;;;;;-1:-1:-1;29444:438:0;;;;;:::i;:::-;;:::i;23558:284::-;;;;;;;;;;-1:-1:-1;23558:284:0;;;;;:::i;:::-;;:::i;20962:102::-;;;;;;;;;;-1:-1:-1;20962:102:0;;;;;:::i;:::-;-1:-1:-1;;;;;21040:16:0;21016:4;21040:16;;;:6;:16;;;;;;;;;20962:102;35827:521;;;;;;;;;;-1:-1:-1;35827:521:0;;;;;:::i;:::-;;:::i;21690:291::-;;;;;;;;;;-1:-1:-1;21690:291:0;;;;;:::i;:::-;;:::i;33932:382::-;;;;;;;;;;-1:-1:-1;33932:382:0;;;;;:::i;:::-;;:::i;33070:854::-;;;;;;:::i;:::-;;:::i;22218:206::-;;;;;;;;;;-1:-1:-1;22218:206:0;;;;;:::i;:::-;;:::i;15872:64::-;;;;;;;;;;;;;;;;32361:701;;;;;;;;;;-1:-1:-1;32361:701:0;;;;;:::i;:::-;;:::i;20461:119::-;;;;;;;;;;-1:-1:-1;20461:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;20554:18:0;20527:7;20554:18;;;:9;:18;;;;;;;20461:119;13979:134;;;;;;;;;;;;;:::i;15805:60::-;;;;;;;;;;;;;;;;22432:312;;;;;;;;;;-1:-1:-1;22432:312:0;;;;;:::i;:::-;;:::i;12909:20::-;;;;;;;;;;-1:-1:-1;12909:20:0;;;;-1:-1:-1;;;;;12909:20:0;;;;;;-1:-1:-1;;;;;7166:32:1;;;7148:51;;7136:2;7121:18;12909:20:0;7002:203:1;22752:541:0;;;;;;;;;;-1:-1:-1;22752:541:0;;;;;:::i;:::-;;:::i;20167:87::-;;;;;;;;;;-1:-1:-1;20239:7:0;;;;;;;;;;;;-1:-1:-1;;;20239:7:0;;;;20167:87;;23850:469;;;;;;;;;;-1:-1:-1;23850:469:0;;;;;:::i;:::-;;:::i;16231:29::-;;;;;;;;;;;;;;;20588:190;;;;;;;;;;-1:-1:-1;20588:190:0;;;;;:::i;:::-;;:::i;13309:95::-;;;;;;;;;;-1:-1:-1;13309:95:0;;;;;:::i;:::-;;:::i;21393:289::-;;;;;;;;;;-1:-1:-1;21393:289:0;;;;;:::i;:::-;;:::i;20786:168::-;;;;;;;;;;-1:-1:-1;20786:168:0;;;;;:::i;:::-;;:::i;13412:98::-;;;;;;;;;;-1:-1:-1;13412:98:0;;;;;:::i;:::-;;:::i;13744:227::-;;;;;;;;;;-1:-1:-1;13744:227:0;;;;;:::i;:::-;;:::i;28830:606::-;;;;;;;;;;-1:-1:-1;28830:606:0;;;;;:::i;:::-;;:::i;16193:31::-;;;;;;;;;;;;;;;21989:221;;;;;;;;;;-1:-1:-1;21989:221:0;;;;;:::i;:::-;;:::i;34322:718::-;;;;;;;;;;-1:-1:-1;34322:718:0;;;;;:::i;:::-;;:::i;13629:107::-;;;;;;;;;;-1:-1:-1;13629:107:0;;;;;:::i;:::-;;:::i;21072:184::-;21172:4;21189:37;21198:10;21210:7;21219:6;21189:8;:37::i;:::-;-1:-1:-1;21244:4:0;21072:184;;;;:::o;35048:771::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;;;;;;;;;35333:29:::1;35359:2;35333:21;16363:5;35352:1;35333:18;:21::i;:::-;:25:::0;::::1;:29::i;:::-;35263:49;35293:18:::0;35263:25:::1;:8:::0;35276:11;35263:12:::1;:25::i;:::-;:29:::0;::::1;:49::i;:::-;:99;;35241:176;;;::::0;-1:-1:-1;;;35241:176:0;;9333:2:1;35241:176:0::1;::::0;::::1;9315:21:1::0;9372:2;9352:18;;;9345:30;9411:29;9391:18;;;9384:57;9458:18;;35241:176:0::1;9131:351:1::0;35241:176:0::1;35428:15;35446:4;:21;35451:15;35446:21;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35446:21:0;35478:11:::1;::::0;::::1;:22:::0;;;35511:28;;;35550:13:::1;::::0;::::1;:34:::0;;;35446:21;-1:-1:-1;35610:49:0::1;35566:18:::0;35610:25:::1;35492:8:::0;35528:11;35610:12:::1;:25::i;:49::-;35595:12;::::0;::::1;:64:::0;35703:15;35677:134:::1;::::0;::::1;;;;;;:::i;:::-;;::::0;;9821:25:1;;;9877:2;9862:18;;9855:34;;;9905:18;;;9898:34;;;35677:134:0::1;::::0;9809:2:1;9794:18;35677:134:0::1;;;;;;;;35230:589;35048:771:::0;;;;:::o;23301:249::-;23424:4;23441:41;23457:4;23463:10;23475:6;23441:15;:41::i;:::-;23493:27;23503:4;23509:2;23513:6;23493:9;:27::i;:::-;-1:-1:-1;23538:4:0;23301:249;;;;;;:::o;21264:121::-;15756:42;21317:7;20554:18;;;:9;:18;;;;21344:33;;15704:19;;21344:16;:33::i;:::-;21337:40;;21264:121;:::o;29444:438::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;29616:39:::1;::::0;-1:-1:-1;;;29616:39:0;;29649:4:::1;29616:39;::::0;::::1;7148:51:1::0;29599:14:0::1;::::0;-1:-1:-1;;;;;29616:24:0;::::1;::::0;::::1;::::0;7121:18:1;;29616:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29599:56:::0;-1:-1:-1;29666:24:0::1;29693:34;29721:5;29693:23;29599:56:::0;29704:11;29693:10:::1;:23::i;:34::-;29666:61:::0;-1:-1:-1;29738:56:0::1;-1:-1:-1::0;;;;;29738:27:0;::::1;29766:9:::0;29666:61;29738:27:::1;:56::i;:::-;29812:62;::::0;;-1:-1:-1;;;;;10324:32:1;;;10306:51;;10388:2;10373:18;;10366:34;;;29812:62:0;::::1;::::0;::::1;::::0;10279:18:1;29812:62:0::1;10132:274:1::0;23558:284:0;23671:4;23688:124;23711:10;23736:7;23791:10;23758:30;23768:10;23780:7;23758:9;:30::i;:::-;:43;;;;:::i;:::-;23688:8;:124::i;35827:521::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35987:24:0;::::1;35979:49;;;;-1:-1:-1::0;;;35979:49:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36047:24:0;::::1;36039:49;;;;-1:-1:-1::0;;;36039:49:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36107:22:0;::::1;36099:47;;;;-1:-1:-1::0;;;36099:47:0::1;;;;;;;:::i;:::-;36157:18;:31:::0;;-1:-1:-1;;;;;36157:31:0;;::::1;-1:-1:-1::0;;;;;;36157:31:0;;::::1;::::0;::::1;::::0;;;36199:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;36241:16:::1;:27:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;36286:54:::1;::::0;;11257:34:1;;;11322:2;11307:18;;11300:43;;;;11359:18;;;11352:43;36286:54:0::1;::::0;11207:2:1;11192:18;36286:54:0::1;;;;;;;;35827:521:::0;;;:::o;21690:291::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21815:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:37;::::1;;:23;::::0;;::::1;:37;;::::0;21807:61:::1;;;;-1:-1:-1::0;;;21807:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21879:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:36;;-1:-1:-1;;21879:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21933:40;;21879:36;;:23;21933:40:::1;::::0;::::1;21690:291:::0;;:::o;33932:382::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;34076:12:::1;:20:::0;;;34107:17:::1;:30:::0;;;34148:17:::1;:30:::0;;;34205:37:::1;34168:10:::0;34205:21:::1;34091:5:::0;34127:10;34205:9:::1;:21::i;:37::-;34189:13;:53:::0;34260:46:::1;::::0;;9821:25:1;;;9877:2;9862:18;;9855:34;;;9905:18;;;9898:34;;;34260:46:0::1;::::0;9809:2:1;9794:18;34260:46:0::1;9619:319:1::0;33070:854:0;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;33213:9:::1;33208:625;;33247:3;33239:43;;;::::0;-1:-1:-1;;;33239:43:0;;11948:2:1;33239:43:0::1;::::0;::::1;11930:21:1::0;11987:2;11967:18;;;11960:30;12026:29;12006:18;;;11999:57;12073:18;;33239:43:0::1;11746:351:1::0;33239:43:0::1;33306:9;33297:18;;33336:6;-1:-1:-1::0;;;;;33336:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33330:28:0::1;;33366:6;33330:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;33390:48;33425:4;33431:6;33397;-1:-1:-1::0;;;;;33397:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33390:34:0::1;::::0;:48;:34:::1;:48::i;:::-;33208:625;;;33475:3;33471:351;;;33509:10;33499:21;::::0;;;:9:::1;:21;::::0;;;;:31;;33524:6;;33499:21;:31:::1;::::0;33524:6;;33499:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;33559:4:0::1;33549:15;;::::0;;;:9:::1;:15;::::0;;;;:25;;33568:6;;33549:15;:25:::1;::::0;33568:6;;33549:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;33598:34:0::1;::::0;2049:25:1;;;33619:4:0::1;-1:-1:-1::0;;;;;33598:34:0::1;::::0;33607:10:::1;::::0;-1:-1:-1;;;;;;;;;;;33598:34:0;2037:2:1;2022:18;33598:34:0::1;;;;;;;33471:351;;;-1:-1:-1::0;;;;;33683:4:0::1;33673:15;;::::0;;;:9:::1;:15;::::0;;;;:25;;33692:6;;33673:15;:25:::1;::::0;33692:6;;33673:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;33727:10:0::1;33717:21;::::0;;;:9:::1;:21;::::0;;;;:31;;33742:6;;33717:21;:31:::1;::::0;33742:6;;33717:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;33772:34:0::1;::::0;2049:25:1;;;33787:10:0::1;::::0;-1:-1:-1;;;;;33781:4:0::1;33772:34;::::0;-1:-1:-1;;;;;;;;;;;33772:34:0;2037:2:1;2022:18;33772:34:0::1;;;;;;;33471:351;33849:4;-1:-1:-1::0;;;;;33843:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33912:3;33877:39;;33893:9;33877:39;;;33904:6;33877:39;;;;2049:25:1::0;;2037:2;2022:18;;1903:177;33877:39:0::1;;;;;;;;33070:854:::0;;;:::o;22218:206::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;22312:7:::1;22294:25;;:14;;;;;;;;;;;:25;;::::0;22286:49:::1;;;;-1:-1:-1::0;;;22286:49:0::1;;;;;;;:::i;:::-;22346:14;:24:::0;;-1:-1:-1;;22346:24:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;22388:28:::1;::::0;::::1;::::0;-1:-1:-1;;22388:28:0::1;22218:206:::0;:::o;32361:701::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;32514:8;32548:24;;::::1;32540:60;;;::::0;-1:-1:-1;;;32540:60:0;;12690:2:1;32540:60:0::1;::::0;::::1;12672:21:1::0;12729:2;12709:18;;;12702:30;12768:25;12748:18;;;12741:53;12811:18;;32540:60:0::1;12488:347:1::0;32540:60:0::1;32611:21;32654:9:::0;32649:289:::1;32673:6;32669:1;:10;32649:289;;;32809:7;;32817:1;32809:10;;;;;;;:::i;:::-;;;;;;;32783:9;:22;32793:8;;32802:1;32793:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32783:22:0::1;-1:-1:-1::0;;;;;32783:22:0::1;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;32851:7:0;;-1:-1:-1;32851:7:0;32859:1;32851:10;;::::1;;;;;:::i;:::-;;;;;;;32834:27;;;;;:::i;:::-;;;32902:8;;32911:1;32902:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32881:45:0::1;32890:10;-1:-1:-1::0;;;;;;;;;;;32915:7:0;;32923:1;32915:10;;::::1;;;;;:::i;:::-;;;;;;;32881:45;;;;2049:25:1::0;;2037:2;2022:18;;1903:177;32881:45:0::1;;;;;;;;32681:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32649:289;;;-1:-1:-1::0;32958:10:0::1;32948:21;::::0;;;:9:::1;:21;::::0;;;;:38;;32973:13;;32948:21;:38:::1;::::0;32973:13;;32948:38:::1;:::i;:::-;::::0;;;-1:-1:-1;;33004:50:0::1;::::0;;13286:25:1;;;13342:2;13327:18;;13320:34;;;33020:10:0::1;::::0;33004:50:::1;::::0;13259:18:1;33004:50:0::1;;;;;;;32486:576;;32361:701:::0;;;;:::o;13979:134::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;14044:32:::1;::::0;14073:1:::1;7148:51:1::0;;14044:32:0::1;::::0;7136:2:1;7121:18;14044:32:0::1;;;;;;;14103:1;14087:18:::0;;-1:-1:-1;;;;;;14087:18:0::1;::::0;;13979:134::o;22432:312::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;22511:14:::1;::::0;::::1;;22510:15;22502:44;;;::::0;-1:-1:-1;;;22502:44:0;;13567:2:1;22502:44:0::1;::::0;::::1;13549:21:1::0;13606:2;13586:18;;;13579:30;-1:-1:-1;;;13625:18:1;;;13618:46;13681:18;;22502:44:0::1;13365:340:1::0;22502:44:0::1;22557:14;:21:::0;;-1:-1:-1;;22557:21:0::1;22574:4;22557:21;::::0;;22593:11:::1;::::0;22557:14:::1;22593:16:::0;22589:113:::1;;22675:27;:15;22695:6:::0;22675:19:::1;:27::i;:::-;22661:11;:41:::0;22589:113:::1;22720:16;::::0;::::1;::::0;;;::::1;22432:312:::0;:::o;22752:541::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;22948:21:::1;:32:::0;;-1:-1:-1;;22948:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22991:13:::1;:26:::0;;;23028:15:::1;:27:::0;;;23066:25:::1;:54:::0;;;23138:147:::1;::::0;;9821:25:1;;;9877:2;9862:18;;9855:34;;;9905:18;;;9898:34;;;23138:147:0::1;::::0;9809:2:1;9794:18;23138:147:0::1;;;;;;;22752:541:::0;;;;:::o;23850:469::-;23968:4;23985:24;24012:30;24022:10;24034:7;24012:9;:30::i;:::-;23985:57;;24095:15;24075:16;:35;;24053:122;;;;-1:-1:-1;;;24053:122:0;;13912:2:1;24053:122:0;;;13894:21:1;13951:2;13931:18;;;13924:30;13990:34;13970:18;;;13963:62;-1:-1:-1;;;14041:18:1;;;14034:35;14086:19;;24053:122:0;13710:401:1;24053:122:0;24211:65;24220:10;24232:7;24260:15;24241:16;:34;24211:8;:65::i;20588:190::-;20691:4;20708:40;20718:10;20730:9;20741:6;20708:9;:40::i;13309:95::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13370:19:0::1;;::::0;;;13392:4:::1;13370:19;::::0;;;;;;;:26;;-1:-1:-1;;13370:26:0::1;::::0;;::::1;::::0;;13309:95::o;21393:289::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21518:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:37;::::1;;:23;::::0;;::::1;:37;;::::0;21510:61:::1;;;;-1:-1:-1::0;;;21510:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21582:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:36;;-1:-1:-1;;21582:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21636:38;;21582:36;;:23;21636:38:::1;::::0;::::1;21393:289:::0;;:::o;20786:168::-;-1:-1:-1;;;;;20919:18:0;;;20892:7;20919:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20786:168::o;13412:98::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13475:19:0::1;13497:5;13475:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;13475:27:0::1;::::0;;13412:98::o;13744:227::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13829:17:0;::::1;13821:42;;;;-1:-1:-1::0;;;13821:42:0::1;;;;;;;:::i;:::-;13874:5;:11:::0;;-1:-1:-1;;;;;;13874:11:0::1;-1:-1:-1::0;;;;;13874:11:0;::::1;::::0;;::::1;::::0;;13896:19;;;-1:-1:-1;13896:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;13896:26:0::1;::::0;;::::1;::::0;;;13938:25;;7148:51:1;;;13938:25:0::1;::::0;7121:18:1;13938:25:0::1;;;;;;;13744:227:::0;:::o;28830:606::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;28988:1:::1;28972:12;:17;;28950:109;;;::::0;-1:-1:-1;;;28950:109:0;;14534:2:1;28950:109:0::1;::::0;::::1;14516:21:1::0;14573:2;14553:18;;;14546:30;14612:34;14592:18;;;14585:62;-1:-1:-1;;;14663:18:1;;;14656:40;14713:19;;28950:109:0::1;14332:406:1::0;28950:109:0::1;29089:6;29078:7;:17;;29070:69;;;::::0;-1:-1:-1;;;29070:69:0;;14945:2:1;29070:69:0::1;::::0;::::1;14927:21:1::0;14984:2;14964:18;;;14957:30;15023:34;15003:18;;;14996:62;-1:-1:-1;;;15074:18:1;;;15067:37;15121:19;;29070:69:0::1;14743:403:1::0;29070:69:0::1;29150:18;29203:8;29172:27;29187:12:::0;15704:19:::1;29172:27;:::i;:::-;29171:40;;;;:::i;:::-;29150:61:::0;-1:-1:-1;29222:22:0::1;29274:8;29248:22;29263:7:::0;15704:19:::1;29248:22;:::i;:::-;29247:35;;;;:::i;:::-;29293:12;:25:::0;;;29329:16:::1;:33:::0;;;29380:48:::1;::::0;;13286:25:1;;;13342:2;13327:18;;13320:34;;;29329:33:0;;-1:-1:-1;29380:48:0::1;::::0;13259:18:1;29380:48:0::1;;;;;;;28939:497;;28830:606:::0;;:::o;21989:221::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22078:16:0;::::1;;::::0;;;:6:::1;:16;::::0;;;;;:26;::::1;;:16;::::0;;::::1;:26;;::::0;22070:50:::1;;;;-1:-1:-1::0;;;22070:50:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22131:16:0;::::1;;::::0;;;:6:::1;:16;::::0;;;;;:25;;-1:-1:-1;;22131:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22174:28;;22131:25;;:16;22174:28:::1;::::0;::::1;21989:221:::0;;:::o;34322:718::-;13241:24;13254:10;13241:12;:24::i;:::-;13233:48;;;;-1:-1:-1;;;13233:48:0;;;;;;;:::i;:::-;34469:21:::1;34449:17;34528:43;34558:12:::0;34528:25:::1;34469:21:::0;34542:10;34528:13:::1;:25::i;:43::-;34501:70:::0;-1:-1:-1;34582:20:0::1;34605:23;34501:70:::0;34626:1:::1;34605:20;:23::i;:::-;34651:14;::::0;34582:46;;-1:-1:-1;34639:41:0::1;::::0;-1:-1:-1;;;;;34651:14:0::1;34582:46:::0;34639:11:::1;:41::i;:::-;34703:14;::::0;34691:41:::1;::::0;-1:-1:-1;;;;;34703:14:0::1;34719:12:::0;34691:11:::1;:41::i;:::-;34755:14;::::0;34743:41:::1;::::0;-1:-1:-1;;;;;34755:14:0::1;34771:12:::0;34743:11:::1;:41::i;:::-;34807:14;::::0;34795:41:::1;::::0;-1:-1:-1;;;;;34807:14:0::1;34823:12:::0;34795:11:::1;:41::i;:::-;34889:14;::::0;34918::::1;::::0;34947::::1;::::0;34976::::1;::::0;34854:178:::1;::::0;;-1:-1:-1;;;;;34889:14:0;;::::1;15843:34:1::0;;34918:14:0;;::::1;15908:2:1::0;15893:18;;15886:43;34947:14:0;;::::1;15945:18:1::0;;;15938:43;34976:14:0;;;::::1;16012:2:1::0;15997:18;;15990:43;16064:3;16049:19;;16042:35;;;34854:178:0;;::::1;::::0;;;;15792:3:1;34854:178:0;;::::1;34438:602;;;34322:718:::0;;:::o;13629:107::-;-1:-1:-1;;;;;13709:19:0;13685:4;13709:19;;;:14;:19;;;;;;;;;13629:107::o;24327:338::-;-1:-1:-1;;;;;24421:19:0;;24413:68;;;;-1:-1:-1;;;24413:68:0;;16290:2:1;24413:68:0;;;16272:21:1;16329:2;16309:18;;;16302:30;16368:34;16348:18;;;16341:62;-1:-1:-1;;;16419:18:1;;;16412:34;16463:19;;24413:68:0;16088:400:1;24413:68:0;-1:-1:-1;;;;;24500:21:0;;24492:68;;;;-1:-1:-1;;;24492:68:0;;16695:2:1;24492:68:0;;;16677:21:1;16734:2;16714:18;;;16707:30;16773:34;16753:18;;;16746:62;-1:-1:-1;;;16824:18:1;;;16817:32;16866:19;;24492:68:0;16493:398:1;24492:68:0;-1:-1:-1;;;;;24573:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24625:32;;2049:25:1;;;24625:32:0;;2022:18:1;24625:32:0;1903:177:1;1818:98:0;1876:7;1903:5;1907:1;1903;:5;:::i;1924:98::-;1982:7;2009:5;2013:1;2009;:5;:::i;1606:98::-;1664:7;1691:5;1695:1;1691;:5;:::i;24673:502::-;24808:24;24835:25;24845:5;24852:7;24835:9;:25::i;:::-;24808:52;;-1:-1:-1;;24875:16:0;:37;24871:297;;24975:6;24955:16;:26;;24929:117;;;;-1:-1:-1;;;24929:117:0;;17098:2:1;24929:117:0;;;17080:21:1;17137:2;17117:18;;;17110:30;17176:31;17156:18;;;17149:59;17225:18;;24929:117:0;16896:353:1;24929:117:0;25090:51;25099:5;25106:7;25134:6;25115:16;:25;25090:8;:51::i;:::-;24797:378;24673:502;;;:::o;25183:1719::-;25306:37;25317:6;25325:9;25336:6;25306:10;:37::i;:::-;-1:-1:-1;;;;;25390:21:0;;25356:12;25390:21;;;:13;:21;;;;;;25371:4;;25390:21;;;:49;;-1:-1:-1;;;;;;25415:24:0;;;;;;:13;:24;;;;;;;;25390:49;25386:535;;;-1:-1:-1;25466:5:0;25386:535;;;25512:14;;;;25504:44;;;;-1:-1:-1;;;25504:44:0;;17456:2:1;25504:44:0;;;17438:21:1;17495:2;17475:18;;;17468:30;-1:-1:-1;;;17514:18:1;;;17507:47;17571:18;;25504:44:0;17254:341:1;25504:44:0;25599:12;;25589:6;:22;;25563:124;;;;-1:-1:-1;;;25563:124:0;;17802:2:1;25563:124:0;;;17784:21:1;17841:2;17821:18;;;17814:30;17880:34;17860:18;;;17853:62;-1:-1:-1;;;17931:18:1;;;17924:38;17979:19;;25563:124:0;17600:404:1;25563:124:0;25719:4;-1:-1:-1;;;;;25706:17:0;:9;-1:-1:-1;;;;;25706:17:0;;25702:208;;25807:16;;-1:-1:-1;;;;;25774:20:0;;;;;;:9;:20;;;;;;:29;;25797:6;;25774:29;:::i;:::-;:49;;25744:150;;;;-1:-1:-1;;;25744:150:0;;18211:2:1;25744:150:0;;;18193:21:1;18250:2;18230:18;;;18223:30;18289:29;18269:18;;;18262:57;18336:18;;25744:150:0;18009:351:1;25744:150:0;25933:31;25991:4;-1:-1:-1;;;;;25981:14:0;:6;-1:-1:-1;;;;;25981:14:0;;25977:426;;26030:19;26012:37;;26107:6;-1:-1:-1;;;;;26086:28:0;:9;-1:-1:-1;;;;;26086:28:0;;;:62;;;;;26137:11;;26118:15;:30;;26086:62;26064:159;;;-1:-1:-1;;;;;26183:17:0;;;;;;:6;:17;;;;;:24;;-1:-1:-1;;26183:24:0;26203:4;26183:24;;;26064:159;25977:426;;;26257:4;-1:-1:-1;;;;;26244:17:0;:9;-1:-1:-1;;;;;26244:17:0;;26240:163;;-1:-1:-1;26296:20:0;26240:163;;;-1:-1:-1;26367:24:0;26240:163;26427:9;;:16;;26441:1;26427:13;:16::i;:::-;26415:9;:28;26458:30;26473:6;26481;26458:14;:30::i;:::-;26454:120;;;26505:29;26520:13;;26505:14;:29::i;:::-;26561:1;26549:9;:13;26454:120;-1:-1:-1;;;;;26606:17:0;;;;;;:9;:17;;;;;;:29;;26628:6;26606:21;:29::i;:::-;-1:-1:-1;;;;;26586:17:0;;;;;;:9;:17;;;;;:49;;;;26671:7;:90;;26755:6;26671:90;;;26694:45;26707:6;26715;26723:15;26694:12;:45::i;:::-;-1:-1:-1;;;;;26795:20:0;;;;;;:9;:20;;;;;;26646:115;;-1:-1:-1;26795:40:0;;26646:115;26795:24;:40::i;:::-;-1:-1:-1;;;;;26772:20:0;;;;;;;:9;:20;;;;;;;:63;;;;26851:43;;;;;;-1:-1:-1;;;;;;;;;;;26851:43:0;;;26879:14;2049:25:1;;2037:2;2022:18;;1903:177;26851:43:0;;;;;;;;25295:1607;;;25183:1719;;;:::o;1712:98::-;1770:7;1797:5;1801:1;1797;:5;:::i;9250:214::-;9387:58;;;-1:-1:-1;;;;;10324:32:1;;9387:58:0;;;10306:51:1;10373:18;;;;10366:34;;;9387:58:0;;;;;;;;;;10279:18:1;;;;9387:58:0;;;;;;;;-1:-1:-1;;;;;9387:58:0;-1:-1:-1;;;9387:58:0;;;9333:123;;9367:5;;9333:19;:123::i;:::-;9250:214;;;:::o;32126:227::-;32205:6;32215:1;32205:11;32201:24;;32126:227;;:::o;32201:24::-;32236:12;32262:9;-1:-1:-1;;;;;32254:23:0;32285:6;32254:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32235:61;;;32315:7;32307:38;;;;-1:-1:-1;;;32307:38:0;;18777:2:1;32307:38:0;;;18759:21:1;18816:2;18796:18;;;18789:30;-1:-1:-1;;;18835:18:1;;;18828:48;18893:18;;32307:38:0;18575:342:1;26910:454:0;-1:-1:-1;;;;;27049:21:0;;;;;;:13;:21;;;;;;;;27048:22;27040:45;;;;-1:-1:-1;;;27040:45:0;;19124:2:1;27040:45:0;;;19106:21:1;19163:2;19143:18;;;19136:30;-1:-1:-1;;;19182:18:1;;;19175:40;19232:18;;27040:45:0;18922:334:1;27040:45:0;-1:-1:-1;;;;;27105:24:0;;;;;;:13;:24;;;;;;;;27104:25;27096:48;;;;-1:-1:-1;;;27096:48:0;;19124:2:1;27096:48:0;;;19106:21:1;19163:2;19143:18;;;19136:30;-1:-1:-1;;;19182:18:1;;;19175:40;19232:18;;27096:48:0;18922:334:1;27096:48:0;27172:1;27163:6;:10;27155:64;;;;-1:-1:-1;;;27155:64:0;;19463:2:1;27155:64:0;;;19445:21:1;19502:2;19482:18;;;19475:30;19541:34;19521:18;;;19514:62;-1:-1:-1;;;19592:18:1;;;19585:39;19641:19;;27155:64:0;19261:405:1;27155:64:0;-1:-1:-1;;;;;20554:18:0;;20527:7;20554:18;;;:9;:18;;;;;;27252:6;:27;;27230:126;;;;-1:-1:-1;;;27230:126:0;;19873:2:1;27230:126:0;;;19855:21:1;19912:2;19892:18;;;19885:30;19951:34;19931:18;;;19924:62;-1:-1:-1;;;20002:18:1;;;19995:47;20059:19;;27230:126:0;19671:413:1;29890:464:0;30037:15;;30113:13;;30103:4;29994;20554:18;;;:9;:18;;;;;;30158:8;;29994:4;;30027:25;;;;-1:-1:-1;30085:41:0;;30158:8;;30157:9;:47;;;;-1:-1:-1;30183:21:0;;;;30157:47;:72;;;;;30221:8;30157:72;:127;;;;;30259:25;;30246:9;;:38;;30157:127;:158;;;;;30301:14;30157:158;:189;;;;;30342:4;-1:-1:-1;;;;;30332:14:0;:6;-1:-1:-1;;;;;30332:14:0;;;30157:189;30137:209;29890:464;-1:-1:-1;;;;;29890:464:0:o;30362:943::-;18926:8;:15;;-1:-1:-1;;18926:15:0;18937:4;18926:15;;;30521:13:::1;::::0;30484:17:::1;::::0;18926:8;;30459:97:::1;::::0;30554:1:::1;::::0;30459:76:::1;::::0;;;:6;;:24:::1;:43::i;:97::-;30433:123:::0;-1:-1:-1;30567:20:0::1;30590:27;:6:::0;30433:123;30590:10:::1;:27::i;:::-;30567:50:::0;-1:-1:-1;30655:21:0::1;30687:30;30567:50:::0;30687:16:::1;:30::i;:::-;30730:20;30753:41;:21;30779:14:::0;30753:25:::1;:41::i;:::-;30730:64;;30805:19;30827:43;30845:24;30867:1;30845:17;;:21;;:24;;;;:::i;:::-;30827:13;::::0;;:17:::1;:43::i;:::-;30805:65:::0;-1:-1:-1;30887:19:0;;30883:191:::1;;30923:139;30954:15;30988:59;31045:1;30988:52;31028:11;30988:35;31005:17;;30988:12;:16;;:35;;;;:::i;:59::-;30923:12;:139::i;:::-;31201:18;::::0;31251:17:::1;::::0;31175:122:::1;::::0;-1:-1:-1;;;;;31201:18:0::1;::::0;31234:52:::1;::::0;31274:11;;31234:35:::1;::::0;:12;;:16:::1;:35::i;:52::-;31175:11;:122::i;:::-;-1:-1:-1::0;;18964:8:0;:16;;-1:-1:-1;;18964:16:0;;;-1:-1:-1;;;;30362:943:0:o;27372:1450::-;27511:7;27531:14;27548:4;:21;27553:15;27548:21;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;27548:21:0;;;27531:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27600:14:0;;;;:6;:14;;;;;;;27531:38;;-1:-1:-1;;27600:14:0;;:32;;;;-1:-1:-1;27618:14:0;;;;;;;27600:32;:98;;27686:3;:12;;;27600:98;;;27649:20;27666:3;16363:5;27649:20;:::i;:::-;27580:118;;27732:9;27745:1;27732:14;27728:60;;27770:6;27763:13;;;;;;27728:60;27798:17;27818:43;16363:5;27819:21;:6;27830:9;27819:10;:21::i;27818:43::-;27798:63;;27872:18;27893:43;27926:9;27894:26;27908:3;:11;;;27894:9;:13;;:26;;;;:::i;27893:43::-;27872:64;;27947:21;27971:46;28007:9;27972:29;27986:3;:14;;;27972:9;:13;;:29;;;;:::i;27971:46::-;27947:70;-1:-1:-1;28030:20:0;28053:44;27947:70;28053:25;:9;28067:10;28053:13;:25::i;:::-;:29;;:44::i;:::-;28030:67;-1:-1:-1;28114:14:0;;28110:177;;15756:42;28172:24;;:9;:24;;;;:40;;28201:10;28172:28;:40::i;:::-;15756:42;28145:24;;;;:9;:24;;;:67;;;;:24;28232:43;-1:-1:-1;;;;;28232:43:0;;;-1:-1:-1;;;;;;;;;;;28232:43:0;;;28264:10;2049:25:1;;2037:2;2022:18;;1903:177;28232:43:0;;;;;;;;28110:177;28301:17;;28297:254;;28410:16;;-1:-1:-1;;;;;28410:16:0;28374:68;;;;:9;:68;;;;;;:87;;28447:13;28374:72;:87::i;:::-;28353:16;;;-1:-1:-1;;;;;28353:16:0;;;28335:36;;;;:9;:36;;;;;;;;;:126;;;;28506:16;;28481:58;;2049:25:1;;;28506:16:0;;;;28481:58;;;;-1:-1:-1;;;;;;;;;;;28481:58:0;2022:18:1;28481:58:0;;;;;;;28297:254;28565:16;;28561:215;;28643:4;28625:24;;;;:9;:24;;;;;;:74;;28672:12;28625:28;:74::i;:::-;28616:4;28598:24;;;;:9;:24;;;;;;;:101;;;;28719:45;;-1:-1:-1;;;;;28719:45:0;;;-1:-1:-1;;;;;;;;;;;28719:45:0;;;28751:12;2049:25:1;;2037:2;2022:18;;1903:177;28719:45:0;;;;;;;;28561:215;28793:21;:6;28804:9;28793:10;:21::i;:::-;28786:28;27372:1450;-1:-1:-1;;;;;;;;;;27372:1450:0:o;12070:802::-;12494:23;12520:106;12562:4;12520:106;;;;;;;;;;;;;;;;;12528:5;-1:-1:-1;;;;;12520:27:0;;;:106;;;;;:::i;:::-;12641:17;;12494:132;;-1:-1:-1;12641:21:0;12637:228;;12756:10;12745:30;;;;;;;;;;;;:::i;:::-;12719:134;;;;-1:-1:-1;;;12719:134:0;;20541:2:1;12719:134:0;;;20523:21:1;20580:2;20560:18;;;20553:30;20619:34;20599:18;;;20592:62;-1:-1:-1;;;20670:18:1;;;20663:40;20720:19;;12719:134:0;20339:406:1;31674:444:0;31764:16;;;31778:1;31764:16;;;;;;;;31740:21;;31764:16;;;;;;;;;;-1:-1:-1;31764:16:0;31740:40;;31809:4;31791;31796:1;31791:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31791:23:0;;;-1:-1:-1;;;;;31791:23:0;;;;;31835:6;-1:-1:-1;;;;;31835:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31825:4;31830:1;31825:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31825:23:0;;;-1:-1:-1;;;;;31825:23:0;;;;;31859:53;31876:4;31891:6;31900:11;31859:8;:53::i;:::-;31923:187;;-1:-1:-1;;;31923:187:0;;-1:-1:-1;;;;;31923:6:0;:57;;;;:187;;31995:11;;32021:1;;32037:4;;32064;;32084:15;;31923:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31729:389;31674:444;:::o;31313:353::-;31394:53;31411:4;31426:6;31435:11;31394:8;:53::i;:::-;31599:18;;31458:200;;-1:-1:-1;;;31458:200:0;;31521:4;31458:200;;;22208:34:1;22258:18;;;22251:34;;;31567:1:0;22301:18:1;;;22294:34;;;22344:18;;;22337:34;-1:-1:-1;;;;;31599:18:0;;;22387:19:1;;;22380:44;31632:15:0;22440:19:1;;;22433:35;31458:6:0;:22;;;;;;31488:9;;22142:19:1;;31458:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31313:353;;:::o;4504:229::-;4641:12;4673:52;4695:6;4703:4;4709:1;4712:12;4673:21;:52::i;:::-;4666:59;4504:229;-1:-1:-1;;;;4504:229:0:o;5105:612::-;5275:12;5347:5;5322:21;:30;;5300:118;;;;-1:-1:-1;;;5300:118:0;;22992:2:1;5300:118:0;;;22974:21:1;23031:2;23011:18;;;23004:30;23070:34;23050:18;;;23043:62;-1:-1:-1;;;23121:18:1;;;23114:36;23167:19;;5300:118:0;22790:402:1;5300:118:0;5430:12;5444:23;5471:6;-1:-1:-1;;;;;5471:11:0;5490:5;5511:4;5471:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5429:97;;;;5557:152;5602:6;5627:7;5653:10;5682:12;5557:26;:152::i;:::-;5537:172;5105:612;-1:-1:-1;;;;;;;5105:612:0:o;7221:644::-;7406:12;7435:7;7431:427;;;7463:10;:17;7484:1;7463:22;7459:290;;-1:-1:-1;;;;;3750:19:0;;;7673:60;;;;-1:-1:-1;;;7673:60:0;;23678:2:1;7673:60:0;;;23660:21:1;23717:2;23697:18;;;23690:30;23756:31;23736:18;;;23729:59;23805:18;;7673:60:0;23476:353:1;7673:60:0;-1:-1:-1;7770:10:0;7763:17;;7431:427;7813:33;7821:10;7833:12;8372:17;;:21;8368:388;;8604:10;8598:17;8661:15;8648:10;8644:2;8640:19;8633:44;8368:388;8731:12;8724:20;;-1:-1:-1;;;8724:20:0;;;;;;;;:::i;14:258:1:-;86:1;96:113;110:6;107:1;104:13;96:113;;;186:11;;;180:18;167:11;;;160:39;132:2;125:10;96:113;;;227:6;224:1;221:13;218:48;;;-1:-1:-1;;262:1:1;244:16;;237:27;14:258::o;277:383::-;426:2;415:9;408:21;389:4;458:6;452:13;501:6;496:2;485:9;481:18;474:34;517:66;576:6;571:2;560:9;556:18;551:2;543:6;539:15;517:66;:::i;:::-;644:2;623:15;-1:-1:-1;;619:29:1;604:45;;;;651:2;600:54;;277:383;-1:-1:-1;;277:383:1:o;665:131::-;-1:-1:-1;;;;;740:31:1;;730:42;;720:70;;786:1;783;776:12;720:70;665:131;:::o;801:315::-;869:6;877;930:2;918:9;909:7;905:23;901:32;898:52;;;946:1;943;936:12;898:52;985:9;972:23;1004:31;1029:5;1004:31;:::i;:::-;1054:5;1106:2;1091:18;;;;1078:32;;-1:-1:-1;;;801:315:1:o;1313:156::-;1394:20;;1443:1;1433:12;;1423:40;;1459:1;1456;1449:12;1423:40;1313:156;;;:::o;1474:424::-;1580:6;1588;1596;1604;1657:3;1645:9;1636:7;1632:23;1628:33;1625:53;;;1674:1;1671;1664:12;1625:53;1697:42;1729:9;1697:42;:::i;:::-;1687:52;1786:2;1771:18;;1758:32;;-1:-1:-1;1837:2:1;1822:18;;1809:32;;1888:2;1873:18;1860:32;;-1:-1:-1;1474:424:1;-1:-1:-1;;;1474:424:1:o;2085:456::-;2162:6;2170;2178;2231:2;2219:9;2210:7;2206:23;2202:32;2199:52;;;2247:1;2244;2237:12;2199:52;2286:9;2273:23;2305:31;2330:5;2305:31;:::i;:::-;2355:5;-1:-1:-1;2412:2:1;2397:18;;2384:32;2425:33;2384:32;2425:33;:::i;:::-;2085:456;;2477:7;;-1:-1:-1;;;2531:2:1;2516:18;;;;2503:32;;2085:456::o;2546:247::-;2605:6;2658:2;2646:9;2637:7;2633:23;2629:32;2626:52;;;2674:1;2671;2664:12;2626:52;2713:9;2700:23;2732:31;2757:5;2732:31;:::i;2987:219::-;3066:6;3119:2;3107:9;3098:7;3094:23;3090:32;3087:52;;;3135:1;3132;3125:12;3087:52;3158:42;3190:9;3158:42;:::i;3607:529::-;3684:6;3692;3700;3753:2;3741:9;3732:7;3728:23;3724:32;3721:52;;;3769:1;3766;3759:12;3721:52;3808:9;3795:23;3827:31;3852:5;3827:31;:::i;:::-;3877:5;-1:-1:-1;3934:2:1;3919:18;;3906:32;3947:33;3906:32;3947:33;:::i;:::-;3999:7;-1:-1:-1;4058:2:1;4043:18;;4030:32;4071:33;4030:32;4071:33;:::i;:::-;4123:7;4113:17;;;3607:529;;;;;:::o;4141:118::-;4227:5;4220:13;4213:21;4206:5;4203:32;4193:60;;4249:1;4246;4239:12;4264:382;4329:6;4337;4390:2;4378:9;4369:7;4365:23;4361:32;4358:52;;;4406:1;4403;4396:12;4358:52;4445:9;4432:23;4464:31;4489:5;4464:31;:::i;:::-;4514:5;-1:-1:-1;4571:2:1;4556:18;;4543:32;4584:30;4543:32;4584:30;:::i;:::-;4633:7;4623:17;;;4264:382;;;;;:::o;4651:316::-;4728:6;4736;4744;4797:2;4785:9;4776:7;4772:23;4768:32;4765:52;;;4813:1;4810;4803:12;4765:52;-1:-1:-1;;4836:23:1;;;4906:2;4891:18;;4878:32;;-1:-1:-1;4957:2:1;4942:18;;;4929:32;;4651:316;-1:-1:-1;4651:316:1:o;4972:444::-;5043:6;5051;5059;5112:2;5100:9;5091:7;5087:23;5083:32;5080:52;;;5128:1;5125;5118:12;5080:52;5167:9;5154:23;5186:28;5208:5;5186:28;:::i;:::-;5233:5;-1:-1:-1;5285:2:1;5270:18;;5257:32;;-1:-1:-1;5341:2:1;5326:18;;5313:32;5354:30;5313:32;5354:30;:::i;5421:241::-;5477:6;5530:2;5518:9;5509:7;5505:23;5501:32;5498:52;;;5546:1;5543;5536:12;5498:52;5585:9;5572:23;5604:28;5626:5;5604:28;:::i;5667:367::-;5730:8;5740:6;5794:3;5787:4;5779:6;5775:17;5771:27;5761:55;;5812:1;5809;5802:12;5761:55;-1:-1:-1;5835:20:1;;5878:18;5867:30;;5864:50;;;5910:1;5907;5900:12;5864:50;5947:4;5939:6;5935:17;5923:29;;6007:3;6000:4;5990:6;5987:1;5983:14;5975:6;5971:27;5967:38;5964:47;5961:67;;;6024:1;6021;6014:12;5961:67;5667:367;;;;;:::o;6039:773::-;6161:6;6169;6177;6185;6238:2;6226:9;6217:7;6213:23;6209:32;6206:52;;;6254:1;6251;6244:12;6206:52;6294:9;6281:23;6323:18;6364:2;6356:6;6353:14;6350:34;;;6380:1;6377;6370:12;6350:34;6419:70;6481:7;6472:6;6461:9;6457:22;6419:70;:::i;:::-;6508:8;;-1:-1:-1;6393:96:1;-1:-1:-1;6596:2:1;6581:18;;6568:32;;-1:-1:-1;6612:16:1;;;6609:36;;;6641:1;6638;6631:12;6609:36;;6680:72;6744:7;6733:8;6722:9;6718:24;6680:72;:::i;:::-;6039:773;;;;-1:-1:-1;6771:8:1;-1:-1:-1;;;;6039:773:1:o;6817:180::-;6876:6;6929:2;6917:9;6908:7;6904:23;6900:32;6897:52;;;6945:1;6942;6935:12;6897:52;-1:-1:-1;6968:23:1;;6817:180;-1:-1:-1;6817:180:1:o;7210:446::-;7293:6;7301;7309;7317;7370:3;7358:9;7349:7;7345:23;7341:33;7338:53;;;7387:1;7384;7377:12;7338:53;7426:9;7413:23;7445:28;7467:5;7445:28;:::i;7661:388::-;7729:6;7737;7790:2;7778:9;7769:7;7765:23;7761:32;7758:52;;;7806:1;7803;7796:12;7758:52;7845:9;7832:23;7864:31;7889:5;7864:31;:::i;:::-;7914:5;-1:-1:-1;7971:2:1;7956:18;;7943:32;7984:33;7943:32;7984:33;:::i;8314:248::-;8382:6;8390;8443:2;8431:9;8422:7;8418:23;8414:32;8411:52;;;8459:1;8456;8449:12;8411:52;-1:-1:-1;;8482:23:1;;;8552:2;8537:18;;;8524:32;;-1:-1:-1;8314:248:1:o;8791:335::-;8993:2;8975:21;;;9032:2;9012:18;;;9005:30;-1:-1:-1;;;9066:2:1;9051:18;;9044:41;9117:2;9102:18;;8791:335::o;9487:127::-;9548:10;9543:3;9539:20;9536:1;9529:31;9579:4;9576:1;9569:15;9603:4;9600:1;9593:15;9943:184;10013:6;10066:2;10054:9;10045:7;10041:23;10037:32;10034:52;;;10082:1;10079;10072:12;10034:52;-1:-1:-1;10105:16:1;;9943:184;-1:-1:-1;9943:184:1:o;10411:127::-;10472:10;10467:3;10463:20;10460:1;10453:31;10503:4;10500:1;10493:15;10527:4;10524:1;10517:15;10543:128;10583:3;10614:1;10610:6;10607:1;10604:13;10601:39;;;10620:18;;:::i;:::-;-1:-1:-1;10656:9:1;;10543:128::o;10676:336::-;10878:2;10860:21;;;10917:2;10897:18;;;10890:30;-1:-1:-1;;;10951:2:1;10936:18;;10929:42;11003:2;10988:18;;10676:336::o;11406:335::-;11608:2;11590:21;;;11647:2;11627:18;;;11620:30;-1:-1:-1;;;11681:2:1;11666:18;;11659:41;11732:2;11717:18;;11406:335::o;12102:251::-;12172:6;12225:2;12213:9;12204:7;12200:23;12196:32;12193:52;;;12241:1;12238;12231:12;12193:52;12273:9;12267:16;12292:31;12317:5;12292:31;:::i;12358:125::-;12398:4;12426:1;12423;12420:8;12417:34;;;12431:18;;:::i;:::-;-1:-1:-1;12468:9:1;;12358:125::o;12840:127::-;12901:10;12896:3;12892:20;12889:1;12882:31;12932:4;12929:1;12922:15;12956:4;12953:1;12946:15;12972:135;13011:3;13032:17;;;13029:43;;13052:18;;:::i;:::-;-1:-1:-1;13099:1:1;13088:13;;12972:135::o;15151:168::-;15191:7;15257:1;15253;15249:6;15245:14;15242:1;15239:21;15234:1;15227:9;15220:17;15216:45;15213:71;;;15264:18;;:::i;:::-;-1:-1:-1;15304:9:1;;15151:168::o;15324:217::-;15364:1;15390;15380:132;;15434:10;15429:3;15425:20;15422:1;15415:31;15469:4;15466:1;15459:15;15497:4;15494:1;15487:15;15380:132;-1:-1:-1;15526:9:1;;15324:217::o;20089:245::-;20156:6;20209:2;20197:9;20188:7;20184:23;20180:32;20177:52;;;20225:1;20222;20215:12;20177:52;20257:9;20251:16;20276:28;20298:5;20276:28;:::i;20882:980::-;21144:4;21192:3;21181:9;21177:19;21223:6;21212:9;21205:25;21249:2;21287:6;21282:2;21271:9;21267:18;21260:34;21330:3;21325:2;21314:9;21310:18;21303:31;21354:6;21389;21383:13;21420:6;21412;21405:22;21458:3;21447:9;21443:19;21436:26;;21497:2;21489:6;21485:15;21471:29;;21518:1;21528:195;21542:6;21539:1;21536:13;21528:195;;;21607:13;;-1:-1:-1;;;;;21603:39:1;21591:52;;21698:15;;;;21663:12;;;;21639:1;21557:9;21528:195;;;-1:-1:-1;;;;;;;21779:32:1;;;;21774:2;21759:18;;21752:60;-1:-1:-1;;;21843:3:1;21828:19;21821:35;21740:3;20882:980;-1:-1:-1;;;20882:980:1:o;22479:306::-;22567:6;22575;22583;22636:2;22624:9;22615:7;22611:23;22607:32;22604:52;;;22652:1;22649;22642:12;22604:52;22681:9;22675:16;22665:26;;22731:2;22720:9;22716:18;22710:25;22700:35;;22775:2;22764:9;22760:18;22754:25;22744:35;;22479:306;;;;;:::o;23197:274::-;23326:3;23364:6;23358:13;23380:53;23426:6;23421:3;23414:4;23406:6;23402:17;23380:53;:::i;:::-;23449:16;;;;;23197:274;-1:-1:-1;;23197:274:1:o
Swarm Source
ipfs://8ec8253a86f205492147aa8780c855fc3a969eec8e3d5155e876ca457216924b
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.