ERC-20
Overview
Max Total Supply
1,000,000,000 BROSKI
Holders
8
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
447,878.887035192 BROSKIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BROSKI
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-22 */ /* Website: Contract Name: BROSKI Twitter: Telegram: https://t.me/broskiERC20 Contract Version: 2.05 Contract Supply: 1,000,000,000 Contract Tokenomics: 0% Ecosystem. 6% Liquidity. 1% Marketing. 7% Total Tax. Dev Notes: Publicly Doxxed dev, Clean Contract and Amazing Community */ //SPDX-License-Identifier:Unlicensed pragma solidity 0.8.15; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ 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" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue( target, data, 0, "Address: low-level call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() external virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) external virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract BROSKI is Context, IERC20, Ownable { using Address for address; address payable public marketingWalletAddress = payable(0xb2df661067aE8d0405D17aBC9Bbc47A899473C57); // Marketing Wallet Address address payable public ecosystemWalletAddress = payable(0xb2df661067aE8d0405D17aBC9Bbc47A899473C57); // ecosystem Wallet Address address public constant deadWallet = 0x000000000000000000000000000000000000dEaD; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; event Log(string, uint256); event LogTokenApproval(address from, uint256 total); event LogTokenBulkSentETH(address from, uint256 total); event LogTokenBulkSent(address token, address from, uint256 total); event AuditLog(string, address); mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) public isMaxWalletExempt; mapping(address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1_000_000_000 gwei; uint256 private _tFeeTotal; string private constant _name = "BROSKI"; string private constant _symbol = "BROSKI"; uint8 private constant _decimals = 9; uint256 public _liquidityFee = 6; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _marketingFee = 1; uint256 private _previousMarketingFee = _marketingFee; uint256 public _ecosystemFee = 0; uint256 private _previousecosystemFee = _ecosystemFee; uint256 public totalSwapableFee = _liquidityFee + _marketingFee + _ecosystemFee; uint256 public liquidityTokensCollected = 0; uint256 public marketingTokensCollected = 0; uint256 public ecosystemTokensCollected = 0; uint256 private minimumTokensBeforeSwap = 100_000 gwei; uint256 public maxWalletAmount = 100_000 gwei; IUniswapV2Router02 public immutable uniswapV2Router; address public currentRouter; address public immutable uniswapV2Pair; bool public inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; event RewardLiquidityProviders(uint256 tokenAmount); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SwapTokensForETH(uint256 amountIn, address[] path); event UsernameSet(address indexed _user, bytes32 indexed _username); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _tOwned[_msgSender()] = _tTotal; //Adding Variables for all the routers for easier deployment for our customers. if (block.chainid == 56) { currentRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // PCS Router } else if (block.chainid == 97) { currentRouter = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3; // PCS Testnet } else if (block.chainid == 43114) { currentRouter = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; //Avax Mainnet } else if (block.chainid == 137) { currentRouter = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff; //Polygon Ropsten } else if (block.chainid == 250) { currentRouter = 0xF491e7B69E4244ad4002BC14e878a34207E38c29; //SpookySwap FTM } else if (block.chainid == 3) { currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Ropsten } else if (block.chainid == 1 || block.chainid == 4) { currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Mainnet } else { revert(); } //End of Router Variables. IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; isMaxWalletExempt[owner()] = true; isMaxWalletExempt[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } 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 view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _tOwned[account]; } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()] - amount ); return true; } function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue ); return true; } function minimumTokensBeforeSwapAmount() external view returns (uint256) { return minimumTokensBeforeSwap; } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(isMaxWalletExempt[to] || balanceOf(to) + amount <= maxWalletAmount, "Max Wallet Limit Exceeds!"); uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; if ( !inSwapAndLiquify && swapAndLiquifyEnabled && from != uniswapV2Pair && from != owner() ) { if (overMinimumTokenBalance) { swapAndLiquify(); } } bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify() public lockTheSwap { uint256 initialBalance = address(this).balance; uint256 halfLiquidityTokens = liquidityTokensCollected / 2; swapTokensForEth(halfLiquidityTokens); uint256 newBalance = address(this).balance - initialBalance; addLiquidity(halfLiquidityTokens, newBalance); emit SwapAndLiquify( halfLiquidityTokens, newBalance, halfLiquidityTokens ); uint256 totalTokens = balanceOf(address(this)); swapTokensForEth(totalTokens); newBalance = address(this).balance; uint256 walletsTotal = marketingTokensCollected + ecosystemTokensCollected; uint256 ethForMarketing = (newBalance * marketingTokensCollected) / walletsTotal; uint256 ethForecosystem = (newBalance * ecosystemTokensCollected) / walletsTotal; transferToAddressETH(marketingWalletAddress, ethForMarketing); transferToAddressETH(ecosystemWalletAddress, ethForecosystem); liquidityTokensCollected = 0; marketingTokensCollected = 0; ecosystemTokensCollected = 0; } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 1, // accept any amount of ETH //testing 1 from 0 path, address(this), // The contract block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), //changed as requested by audit block.timestamp ); } function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) { removeAllFee(); } countUpFeeShare(amount); _transferBothExcluded(sender, recipient, amount); restoreAllFee(); } function countUpFeeShare(uint256 amount) private { if (totalSwapableFee == 0) { return; } liquidityTokensCollected += (amount * _liquidityFee) / 100; marketingTokensCollected += (amount * _marketingFee) / 100; ecosystemTokensCollected += (amount * _ecosystemFee) / 100; } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { (uint256 tTransferAmount, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender] - tAmount; _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; _takeLiquidity(tLiquidity); emit Transfer(sender, recipient, tTransferAmount); } function _getValues(uint256 tAmount) private view returns (uint256, uint256) { (uint256 tTransferAmount, uint256 tLiquidity) = _getTValues(tAmount); return (tTransferAmount, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256) { //uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = (tAmount) - tLiquidity; return (tTransferAmount, tLiquidity); } function _takeLiquidity(uint256 tLiquidity) private { _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity; //emit Transfer(address(0), address(this), tLiquidity); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return (_amount * totalSwapableFee) / 100; } function removeAllFee() private { _liquidityFee = 0; _marketingFee = 0; _ecosystemFee = 0; totalSwapableFee = 0; } function restoreAllFee() private { _liquidityFee = _previousLiquidityFee; _marketingFee = _previousMarketingFee; _ecosystemFee = _previousecosystemFee; totalSwapableFee = _liquidityFee + _marketingFee + _ecosystemFee; } function isExcludedFromFee(address account) external view returns (bool) { return _isExcludedFromFee[account]; } function excludeFromFee(address account) external onlyOwner { _isExcludedFromFee[account] = true; emit AuditLog( "We have excluded the following walled in fees:", account ); } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; emit AuditLog("We have include the following walled in fees:", account); } function setAllFeePercent(uint256 liquidityFee, uint256 ecosystemFee, uint256 marketingFee) external onlyOwner() { _liquidityFee = liquidityFee; _previousLiquidityFee = _liquidityFee; _ecosystemFee = ecosystemFee; _previousecosystemFee = _ecosystemFee; _marketingFee = marketingFee; _previousMarketingFee = _marketingFee; totalSwapableFee = _liquidityFee + _ecosystemFee + _marketingFee; require(totalSwapableFee <= 25, "Must be less than 25% total"); emit Log("We have updated total buy tax", totalSwapableFee); } function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner { minimumTokensBeforeSwap = _minimumTokensBeforeSwap; emit Log( "We have updated minimunTokensBeforeSwap to:", minimumTokensBeforeSwap ); } function setMarketingWalletAddress(address _marketingWallet) external onlyOwner { require( _marketingWallet != address(0), "setMarketingWalletAddress: ZERO" ); marketingWalletAddress = payable(_marketingWallet); emit AuditLog( "We have Updated the MarketingWallet:", marketingWalletAddress ); } function setecosystemWalletAddress(address _ecosystemWallet) external onlyOwner { require(_ecosystemWallet != address(0), "setecosystemWalletAddress: ZERO"); ecosystemWalletAddress = payable(_ecosystemWallet); emit AuditLog("We have Updated the ecosystemWallet:", ecosystemWalletAddress); } function setMaxWalletPercentage(uint256 percentage) public onlyOwner { require(percentage > 10, "Need to be greater than 0.01%"); maxWalletAmount = (totalSupply() * percentage) / 10000; } function setMaxTxExempt(address account, bool value) external onlyOwner { isMaxWalletExempt[account] = value; } function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} /////---dev----//// event SwapETHForTokens(uint256 amountIn, address[] path); function swapETHForTokens(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: amount }( 0, // accept any amount of Tokens path, deadWallet, // Burn address block.timestamp + 300 ); emit SwapETHForTokens(amount, path); } function withdraw() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); emit AuditLog("We have withdraw eth from contract.", msg.sender); } // Withdraw ETH that's potentially stuck in the Contract function recoverETHfromContract() public virtual onlyOwner { payable(marketingWalletAddress).transfer(address(this).balance); emit AuditLog( "We have recover the stock eth from contract.", marketingWalletAddress ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"AuditLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Log","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"LogTokenApproval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"LogTokenBulkSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"LogTokenBulkSentETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"_user","type":"address"},{"indexed":true,"internalType":"bytes32","name":"_username","type":"bytes32"}],"name":"UsernameSet","type":"event"},{"inputs":[],"name":"_ecosystemFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ecosystemTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ecosystemWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxWalletExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETHfromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"ecosystemFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setAllFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMaxTxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setMaxWalletPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ecosystemWallet","type":"address"}],"name":"setecosystemWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"view","type":"function"},{"inputs":[],"name":"totalSwapableFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001805473b2df661067ae8d0405d17abc9bbc47a899473c576001600160a01b03199182168117835560028054909216179055670de0b6b3a76400006009556006600b819055600c819055600d829055600e8290556000600f81905560108190559162000071916200052b565b6200007d91906200052b565b601155600060128190556013819055601455655af3107a400060158190556016556017805460ff60a81b19169055348015620000b857600080fd5b50620000c433620004db565b60095433600090815260036020526040902055466038036200010c57601780546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556200025d565b466061036200014157601780546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c31790556200025d565b4661a86a036200017757601780546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d41790556200025d565b46608903620001ac57601780546001600160a01b03191673a5e0829caced8ffdd4de3c43696c57f7d7a678ff1790556200025d565b4660fa03620001e157601780546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c291790556200025d565b466003036200021657601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200025d565b4660011480620002265750466004145b156200025857601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200025d565b600080fd5b6017546040805163c45a015560e01b815290516001600160a01b0390921691829163c45a01559160048083019260209291908290030181865afa158015620002a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cf919062000552565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200031d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000343919062000552565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000391573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b7919062000552565b6001600160a01b0390811660a0528116608052600160056000620003e36000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260059092528120805490921660019081179092556006906200043c6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252902080549091166001179055620004843390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620004cc91815260200190565b60405180910390a35062000584565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082198211156200054d57634e487b7160e01b600052601160045260246000fd5b500190565b6000602082840312156200056557600080fd5b81516001600160a01b03811681146200057d57600080fd5b9392505050565b60805160a051611fb9620005d4600039600081816104d001526114ff01526000818161036a015281816116c10152818161177a015281816117b60152818161186901526118c50152611fb96000f3fe6080604052600436106102765760003560e01c80636ca60bc61161014f578063a9059cbb116100c1578063d158272d1161007a578063d158272d1461074e578063d61b68bd1461076e578063dd62ed3e1461078e578063ea2f0b37146107d4578063f0f165af146107f4578063f2fde38b1461081457600080fd5b8063a9059cbb146106b8578063aa4bde28146106d8578063b29ad50a146106ee578063ba2c8f1614610703578063c49b9a8014610719578063ce831ed51461073957600080fd5b80637d7d3aaf116101135780637d7d3aaf1461062f57806385141a771461064f5780638da5cb5b1461066557806395d89b4114610282578063a073d37f14610683578063a457c2d71461069857600080fd5b80636ca60bc6146105985780636dadbd1c146105ae57806370a08231146105c4578063715018a6146105fa5780637a845ece1461060f57600080fd5b8063313ce567116101e857806349bd5a5e116101ac57806349bd5a5e146104be5780634a74bb02146104f25780634cb80fd5146105135780635342acb414610533578063574dfe9f1461056c5780636bc87c3a1461058257600080fd5b8063313ce5671461043857806339509351146104545780633b0f83b2146104745780633ccfd60b14610496578063437823ec1461049e57600080fd5b806318160ddd1161023a57806318160ddd1461038c5780631915c307146103ab5780631bdb54d5146103cb578063220f6696146103e157806322976e0d1461040257806323b872dd1461041857600080fd5b806306fdde0314610282578063095ea7b3146102c05780630bd11f8a146102f0578063122fea3b146103205780631694505e1461035857600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b50604080518082018252600681526542524f534b4960d01b602082015290516102b79190611bfd565b60405180910390f35b3480156102cc57600080fd5b506102e06102db366004611c67565b610834565b60405190151581526020016102b7565b3480156102fc57600080fd5b506102e061030b366004611c93565b60066020526000908152604090205460ff1681565b34801561032c57600080fd5b50601754610340906001600160a01b031681565b6040516001600160a01b0390911681526020016102b7565b34801561036457600080fd5b506103407f000000000000000000000000000000000000000000000000000000000000000081565b34801561039857600080fd5b506009545b6040519081526020016102b7565b3480156103b757600080fd5b50600254610340906001600160a01b031681565b3480156103d757600080fd5b5061039d60125481565b3480156103ed57600080fd5b506017546102e090600160a01b900460ff1681565b34801561040e57600080fd5b5061039d600d5481565b34801561042457600080fd5b506102e0610433366004611cb7565b61084a565b34801561044457600080fd5b50604051600981526020016102b7565b34801561046057600080fd5b506102e061046f366004611c67565b61089c565b34801561048057600080fd5b5061049461048f366004611cf8565b6108d3565b005b6104946109e0565b3480156104aa57600080fd5b506104946104b9366004611c93565b610a72565b3480156104ca57600080fd5b506103407f000000000000000000000000000000000000000000000000000000000000000081565b3480156104fe57600080fd5b506017546102e090600160a81b900460ff1681565b34801561051f57600080fd5b5061049461052e366004611c93565b610b20565b34801561053f57600080fd5b506102e061054e366004611c93565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561057857600080fd5b5061039d600f5481565b34801561058e57600080fd5b5061039d600b5481565b3480156105a457600080fd5b5061039d60135481565b3480156105ba57600080fd5b5061039d60145481565b3480156105d057600080fd5b5061039d6105df366004611c93565b6001600160a01b031660009081526003602052604090205490565b34801561060657600080fd5b50610494610bff565b34801561061b57600080fd5b5061049461062a366004611d24565b610c13565b34801561063b57600080fd5b5061049461064a366004611d52565b610c92565b34801561065b57600080fd5b5061034061dead81565b34801561067157600080fd5b506000546001600160a01b0316610340565b34801561068f57600080fd5b5060155461039d565b3480156106a457600080fd5b506102e06106b3366004611c67565b610cc5565b3480156106c457600080fd5b506102e06106d3366004611c67565b610cfc565b3480156106e457600080fd5b5061039d60165481565b3480156106fa57600080fd5b50610494610d09565b34801561070f57600080fd5b5061039d60115481565b34801561072557600080fd5b50610494610734366004611d87565b610e50565b34801561074557600080fd5b50610494610ea5565b34801561075a57600080fd5b50600154610340906001600160a01b031681565b34801561077a57600080fd5b50610494610789366004611c93565b610f5d565b34801561079a57600080fd5b5061039d6107a9366004611da2565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156107e057600080fd5b506104946107ef366004611c93565b61103c565b34801561080057600080fd5b5061049461080f366004611d24565b6110d0565b34801561082057600080fd5b5061049461082f366004611c93565b611158565b60006108413384846111d1565b50600192915050565b60006108578484846112f5565b6001600160a01b03841660009081526004602090815260408083203380855292529091205461089291869161088d908690611df1565b6111d1565b5060019392505050565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161084191859061088d908690611e08565b6108db6115c0565b600b839055600c839055600f8290556010829055600d819055600e819055806109048385611e08565b61090e9190611e08565b6011819055601910156109685760405162461bcd60e51b815260206004820152601b60248201527f4d757374206265206c657373207468616e2032352520746f74616c000000000060448201526064015b60405180910390fd5b7fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b56011546040516109d391906040808252601d908201527f57652068617665207570646174656420746f74616c20627579207461780000006060820152602081019190915260800190565b60405180910390a1505050565b6109e86115c0565b60405133904780156108fc02916000818181858888f19350505050610a0c57600080fd5b604080518181526023918101919091527f57652068617665207769746864726177206574682066726f6d20636f6e74726160608201526231ba1760e91b6080820152336020820152600080516020611f648339815191529060a0015b60405180910390a1565b610a7a6115c0565b6001600160a01b03811660009081526005602052604090819020805460ff1916600117905551600080516020611f6483398151915290610b159083906040808252602e908201527f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760608201526d30b63632b21034b7103332b2b99d60911b60808201526001600160a01b0391909116602082015260a00190565b60405180910390a150565b610b286115c0565b6001600160a01b038116610b7e5760405162461bcd60e51b815260206004820152601f60248201527f7365744d61726b6574696e6757616c6c6574416464726573733a205a45524f00604482015260640161095f565b600180546001600160a01b0319166001600160a01b038316908117909155604080518181526024918101919091527f57652068617665205570646174656420746865204d61726b6574696e6757616c6060820152633632ba1d60e11b60808201526020810191909152600080516020611f648339815191529060a001610b15565b610c076115c0565b610c11600061161a565b565b610c1b6115c0565b600a8111610c6b5760405162461bcd60e51b815260206004820152601d60248201527f4e65656420746f2062652067726561746572207468616e20302e303125000000604482015260640161095f565b61271081610c7860095490565b610c829190611e20565b610c8c9190611e3f565b60165550565b610c9a6115c0565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161084191859061088d908690611df1565b60006108413384846112f5565b6017805460ff60a01b1916600160a01b1790556012544790600090610d3090600290611e3f565b9050610d3b8161166a565b6000610d478347611df1565b9050610d538282611863565b60408051838152602081018390529081018390527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a130600090815260036020526040902054610dad8161166a565b4791506000601454601354610dc29190611e08565b905060008160135485610dd59190611e20565b610ddf9190611e3f565b905060008260145486610df29190611e20565b610dfc9190611e3f565b600154909150610e15906001600160a01b031683611943565b600254610e2b906001600160a01b031682611943565b505060006012819055601381905560145550506017805460ff60a01b19169055505050565b610e586115c0565b60178054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b1590831515815260200190565b610ead6115c0565b6001546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610ee6573d6000803e3d6000fd5b5060015460408051818152602c918101919091527f57652068617665207265636f766572207468652073746f636b2065746820667260608201526b37b69031b7b73a3930b1ba1760a11b60808201526001600160a01b039091166020820152600080516020611f648339815191529060a001610a68565b610f656115c0565b6001600160a01b038116610fbb5760405162461bcd60e51b815260206004820152601f60248201527f73657465636f73797374656d57616c6c6574416464726573733a205a45524f00604482015260640161095f565b600280546001600160a01b0319166001600160a01b038316908117909155604080518181526024918101919091527f576520686176652055706461746564207468652065636f73797374656d57616c6060820152633632ba1d60e11b60808201526020810191909152600080516020611f648339815191529060a001610b15565b6110446115c0565b6001600160a01b038116600081815260056020908152604091829020805460ff191690558151828152602d928101929092527f5765206861766520696e636c7564652074686520666f6c6c6f77696e6720776160608301526c363632b21034b7103332b2b99d60991b6080830152810191909152600080516020611f648339815191529060a001610b15565b6110d86115c0565b601581905560408051818152602b918101919091527f576520686176652075706461746564206d696e696d756e546f6b656e7342656660608201526a37b932a9bbb0b8103a379d60a91b6080820152602081018290527fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59060a001610b15565b6111606115c0565b6001600160a01b0381166111c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095f565b6111ce8161161a565b50565b6001600160a01b0383166112335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161095f565b6001600160a01b0382166112945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161095f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113595760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161095f565b6001600160a01b0382166113bb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161095f565b6000811161141d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161095f565b6001600160a01b03821660009081526006602052604090205460ff168061146f575060165481611462846001600160a01b031660009081526003602052604090205490565b61146c9190611e08565b11155b6114bb5760405162461bcd60e51b815260206004820152601960248201527f4d61782057616c6c6574204c696d697420457863656564732100000000000000604482015260640161095f565b306000908152600360205260409020546015546017549082101590600160a01b900460ff161580156114f65750601754600160a81b900460ff165b801561153457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b801561154e57506000546001600160a01b03868116911614155b1561156157801561156157611561610d09565b6001600160a01b03851660009081526005602052604090205460019060ff16806115a357506001600160a01b03851660009081526005602052604090205460ff165b156115ac575060005b6115b88686868461197e565b505050505050565b6000546001600160a01b03163314610c115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061169f5761169f611e61565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117419190611e77565b8160018151811061175457611754611e61565b60200260200101906001600160a01b031690816001600160a01b03168152505061179f307f0000000000000000000000000000000000000000000000000000000000000000846111d1565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906117f4908590600190869030904290600401611ed8565b600060405180830381600087803b15801561180e57600080fd5b505af1158015611822573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051611857929190611f14565b60405180910390a15050565b61188e307f0000000000000000000000000000000000000000000000000000000000000000846111d1565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611917573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061193c9190611f35565b5050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611979573d6000803e3d6000fd5b505050565b8061199c5761199c6000600b819055600d819055600f819055601155565b6119a5826119be565b6119b0848484611a5e565b6119b8611b39565b50505050565b6011546000036119cb5750565b6064600b54826119db9190611e20565b6119e59190611e3f565b601260008282546119f69190611e08565b9091555050600d54606490611a0b9083611e20565b611a159190611e3f565b60136000828254611a269190611e08565b9091555050600f54606490611a3b9083611e20565b611a459190611e3f565b60146000828254611a569190611e08565b909155505050565b600080611a6a83611b6b565b6001600160a01b0387166000908152600360205260409020549193509150611a93908490611df1565b6001600160a01b038087166000908152600360205260408082209390935590861681522054611ac3908390611e08565b6001600160a01b038516600090815260036020526040902055611ae581611b86565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b2a91815260200190565b60405180910390a35050505050565b600c54600b819055600e54600d819055601054600f81905591611b5c9190611e08565b611b669190611e08565b601155565b600080600080611b7a85611bb4565b90969095509350505050565b30600090815260036020526040902054611ba1908290611e08565b3060009081526003602052604090205550565b6000806000611bc284611bdb565b90506000611bd08286611df1565b959194509092505050565b6000606460115483611bed9190611e20565b611bf79190611e3f565b92915050565b600060208083528351808285015260005b81811015611c2a57858101830151858201604001528201611c0e565b81811115611c3c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146111ce57600080fd5b60008060408385031215611c7a57600080fd5b8235611c8581611c52565b946020939093013593505050565b600060208284031215611ca557600080fd5b8135611cb081611c52565b9392505050565b600080600060608486031215611ccc57600080fd5b8335611cd781611c52565b92506020840135611ce781611c52565b929592945050506040919091013590565b600080600060608486031215611d0d57600080fd5b505081359360208301359350604090920135919050565b600060208284031215611d3657600080fd5b5035919050565b80358015158114611d4d57600080fd5b919050565b60008060408385031215611d6557600080fd5b8235611d7081611c52565b9150611d7e60208401611d3d565b90509250929050565b600060208284031215611d9957600080fd5b611cb082611d3d565b60008060408385031215611db557600080fd5b8235611dc081611c52565b91506020830135611dd081611c52565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600082821015611e0357611e03611ddb565b500390565b60008219821115611e1b57611e1b611ddb565b500190565b6000816000190483118215151615611e3a57611e3a611ddb565b500290565b600082611e5c57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611e8957600080fd5b8151611cb081611c52565b600081518084526020808501945080840160005b83811015611ecd5781516001600160a01b031687529582019590820190600101611ea8565b509495945050505050565b85815284602082015260a060408201526000611ef760a0830186611e94565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000611f2d6040830184611e94565b949350505050565b600080600060608486031215611f4a57600080fd5b835192506020840151915060408401519050925092509256fe025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00a2646970667358221220e13c04ec98e2a5014329d3a241c4fa08560b0c1ef440f4401b1cdbcff72e788a64736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102765760003560e01c80636ca60bc61161014f578063a9059cbb116100c1578063d158272d1161007a578063d158272d1461074e578063d61b68bd1461076e578063dd62ed3e1461078e578063ea2f0b37146107d4578063f0f165af146107f4578063f2fde38b1461081457600080fd5b8063a9059cbb146106b8578063aa4bde28146106d8578063b29ad50a146106ee578063ba2c8f1614610703578063c49b9a8014610719578063ce831ed51461073957600080fd5b80637d7d3aaf116101135780637d7d3aaf1461062f57806385141a771461064f5780638da5cb5b1461066557806395d89b4114610282578063a073d37f14610683578063a457c2d71461069857600080fd5b80636ca60bc6146105985780636dadbd1c146105ae57806370a08231146105c4578063715018a6146105fa5780637a845ece1461060f57600080fd5b8063313ce567116101e857806349bd5a5e116101ac57806349bd5a5e146104be5780634a74bb02146104f25780634cb80fd5146105135780635342acb414610533578063574dfe9f1461056c5780636bc87c3a1461058257600080fd5b8063313ce5671461043857806339509351146104545780633b0f83b2146104745780633ccfd60b14610496578063437823ec1461049e57600080fd5b806318160ddd1161023a57806318160ddd1461038c5780631915c307146103ab5780631bdb54d5146103cb578063220f6696146103e157806322976e0d1461040257806323b872dd1461041857600080fd5b806306fdde0314610282578063095ea7b3146102c05780630bd11f8a146102f0578063122fea3b146103205780631694505e1461035857600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b50604080518082018252600681526542524f534b4960d01b602082015290516102b79190611bfd565b60405180910390f35b3480156102cc57600080fd5b506102e06102db366004611c67565b610834565b60405190151581526020016102b7565b3480156102fc57600080fd5b506102e061030b366004611c93565b60066020526000908152604090205460ff1681565b34801561032c57600080fd5b50601754610340906001600160a01b031681565b6040516001600160a01b0390911681526020016102b7565b34801561036457600080fd5b506103407f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561039857600080fd5b506009545b6040519081526020016102b7565b3480156103b757600080fd5b50600254610340906001600160a01b031681565b3480156103d757600080fd5b5061039d60125481565b3480156103ed57600080fd5b506017546102e090600160a01b900460ff1681565b34801561040e57600080fd5b5061039d600d5481565b34801561042457600080fd5b506102e0610433366004611cb7565b61084a565b34801561044457600080fd5b50604051600981526020016102b7565b34801561046057600080fd5b506102e061046f366004611c67565b61089c565b34801561048057600080fd5b5061049461048f366004611cf8565b6108d3565b005b6104946109e0565b3480156104aa57600080fd5b506104946104b9366004611c93565b610a72565b3480156104ca57600080fd5b506103407f0000000000000000000000003174a5a296ad226dcbde1475052ac61566af8cc981565b3480156104fe57600080fd5b506017546102e090600160a81b900460ff1681565b34801561051f57600080fd5b5061049461052e366004611c93565b610b20565b34801561053f57600080fd5b506102e061054e366004611c93565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561057857600080fd5b5061039d600f5481565b34801561058e57600080fd5b5061039d600b5481565b3480156105a457600080fd5b5061039d60135481565b3480156105ba57600080fd5b5061039d60145481565b3480156105d057600080fd5b5061039d6105df366004611c93565b6001600160a01b031660009081526003602052604090205490565b34801561060657600080fd5b50610494610bff565b34801561061b57600080fd5b5061049461062a366004611d24565b610c13565b34801561063b57600080fd5b5061049461064a366004611d52565b610c92565b34801561065b57600080fd5b5061034061dead81565b34801561067157600080fd5b506000546001600160a01b0316610340565b34801561068f57600080fd5b5060155461039d565b3480156106a457600080fd5b506102e06106b3366004611c67565b610cc5565b3480156106c457600080fd5b506102e06106d3366004611c67565b610cfc565b3480156106e457600080fd5b5061039d60165481565b3480156106fa57600080fd5b50610494610d09565b34801561070f57600080fd5b5061039d60115481565b34801561072557600080fd5b50610494610734366004611d87565b610e50565b34801561074557600080fd5b50610494610ea5565b34801561075a57600080fd5b50600154610340906001600160a01b031681565b34801561077a57600080fd5b50610494610789366004611c93565b610f5d565b34801561079a57600080fd5b5061039d6107a9366004611da2565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156107e057600080fd5b506104946107ef366004611c93565b61103c565b34801561080057600080fd5b5061049461080f366004611d24565b6110d0565b34801561082057600080fd5b5061049461082f366004611c93565b611158565b60006108413384846111d1565b50600192915050565b60006108578484846112f5565b6001600160a01b03841660009081526004602090815260408083203380855292529091205461089291869161088d908690611df1565b6111d1565b5060019392505050565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161084191859061088d908690611e08565b6108db6115c0565b600b839055600c839055600f8290556010829055600d819055600e819055806109048385611e08565b61090e9190611e08565b6011819055601910156109685760405162461bcd60e51b815260206004820152601b60248201527f4d757374206265206c657373207468616e2032352520746f74616c000000000060448201526064015b60405180910390fd5b7fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b56011546040516109d391906040808252601d908201527f57652068617665207570646174656420746f74616c20627579207461780000006060820152602081019190915260800190565b60405180910390a1505050565b6109e86115c0565b60405133904780156108fc02916000818181858888f19350505050610a0c57600080fd5b604080518181526023918101919091527f57652068617665207769746864726177206574682066726f6d20636f6e74726160608201526231ba1760e91b6080820152336020820152600080516020611f648339815191529060a0015b60405180910390a1565b610a7a6115c0565b6001600160a01b03811660009081526005602052604090819020805460ff1916600117905551600080516020611f6483398151915290610b159083906040808252602e908201527f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760608201526d30b63632b21034b7103332b2b99d60911b60808201526001600160a01b0391909116602082015260a00190565b60405180910390a150565b610b286115c0565b6001600160a01b038116610b7e5760405162461bcd60e51b815260206004820152601f60248201527f7365744d61726b6574696e6757616c6c6574416464726573733a205a45524f00604482015260640161095f565b600180546001600160a01b0319166001600160a01b038316908117909155604080518181526024918101919091527f57652068617665205570646174656420746865204d61726b6574696e6757616c6060820152633632ba1d60e11b60808201526020810191909152600080516020611f648339815191529060a001610b15565b610c076115c0565b610c11600061161a565b565b610c1b6115c0565b600a8111610c6b5760405162461bcd60e51b815260206004820152601d60248201527f4e65656420746f2062652067726561746572207468616e20302e303125000000604482015260640161095f565b61271081610c7860095490565b610c829190611e20565b610c8c9190611e3f565b60165550565b610c9a6115c0565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161084191859061088d908690611df1565b60006108413384846112f5565b6017805460ff60a01b1916600160a01b1790556012544790600090610d3090600290611e3f565b9050610d3b8161166a565b6000610d478347611df1565b9050610d538282611863565b60408051838152602081018390529081018390527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a130600090815260036020526040902054610dad8161166a565b4791506000601454601354610dc29190611e08565b905060008160135485610dd59190611e20565b610ddf9190611e3f565b905060008260145486610df29190611e20565b610dfc9190611e3f565b600154909150610e15906001600160a01b031683611943565b600254610e2b906001600160a01b031682611943565b505060006012819055601381905560145550506017805460ff60a01b19169055505050565b610e586115c0565b60178054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b1590831515815260200190565b610ead6115c0565b6001546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610ee6573d6000803e3d6000fd5b5060015460408051818152602c918101919091527f57652068617665207265636f766572207468652073746f636b2065746820667260608201526b37b69031b7b73a3930b1ba1760a11b60808201526001600160a01b039091166020820152600080516020611f648339815191529060a001610a68565b610f656115c0565b6001600160a01b038116610fbb5760405162461bcd60e51b815260206004820152601f60248201527f73657465636f73797374656d57616c6c6574416464726573733a205a45524f00604482015260640161095f565b600280546001600160a01b0319166001600160a01b038316908117909155604080518181526024918101919091527f576520686176652055706461746564207468652065636f73797374656d57616c6060820152633632ba1d60e11b60808201526020810191909152600080516020611f648339815191529060a001610b15565b6110446115c0565b6001600160a01b038116600081815260056020908152604091829020805460ff191690558151828152602d928101929092527f5765206861766520696e636c7564652074686520666f6c6c6f77696e6720776160608301526c363632b21034b7103332b2b99d60991b6080830152810191909152600080516020611f648339815191529060a001610b15565b6110d86115c0565b601581905560408051818152602b918101919091527f576520686176652075706461746564206d696e696d756e546f6b656e7342656660608201526a37b932a9bbb0b8103a379d60a91b6080820152602081018290527fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59060a001610b15565b6111606115c0565b6001600160a01b0381166111c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095f565b6111ce8161161a565b50565b6001600160a01b0383166112335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161095f565b6001600160a01b0382166112945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161095f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113595760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161095f565b6001600160a01b0382166113bb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161095f565b6000811161141d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161095f565b6001600160a01b03821660009081526006602052604090205460ff168061146f575060165481611462846001600160a01b031660009081526003602052604090205490565b61146c9190611e08565b11155b6114bb5760405162461bcd60e51b815260206004820152601960248201527f4d61782057616c6c6574204c696d697420457863656564732100000000000000604482015260640161095f565b306000908152600360205260409020546015546017549082101590600160a01b900460ff161580156114f65750601754600160a81b900460ff165b801561153457507f0000000000000000000000003174a5a296ad226dcbde1475052ac61566af8cc96001600160a01b0316856001600160a01b031614155b801561154e57506000546001600160a01b03868116911614155b1561156157801561156157611561610d09565b6001600160a01b03851660009081526005602052604090205460019060ff16806115a357506001600160a01b03851660009081526005602052604090205460ff165b156115ac575060005b6115b88686868461197e565b505050505050565b6000546001600160a01b03163314610c115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061169f5761169f611e61565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117419190611e77565b8160018151811061175457611754611e61565b60200260200101906001600160a01b031690816001600160a01b03168152505061179f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846111d1565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906117f4908590600190869030904290600401611ed8565b600060405180830381600087803b15801561180e57600080fd5b505af1158015611822573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051611857929190611f14565b60405180910390a15050565b61188e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846111d1565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611917573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061193c9190611f35565b5050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611979573d6000803e3d6000fd5b505050565b8061199c5761199c6000600b819055600d819055600f819055601155565b6119a5826119be565b6119b0848484611a5e565b6119b8611b39565b50505050565b6011546000036119cb5750565b6064600b54826119db9190611e20565b6119e59190611e3f565b601260008282546119f69190611e08565b9091555050600d54606490611a0b9083611e20565b611a159190611e3f565b60136000828254611a269190611e08565b9091555050600f54606490611a3b9083611e20565b611a459190611e3f565b60146000828254611a569190611e08565b909155505050565b600080611a6a83611b6b565b6001600160a01b0387166000908152600360205260409020549193509150611a93908490611df1565b6001600160a01b038087166000908152600360205260408082209390935590861681522054611ac3908390611e08565b6001600160a01b038516600090815260036020526040902055611ae581611b86565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b2a91815260200190565b60405180910390a35050505050565b600c54600b819055600e54600d819055601054600f81905591611b5c9190611e08565b611b669190611e08565b601155565b600080600080611b7a85611bb4565b90969095509350505050565b30600090815260036020526040902054611ba1908290611e08565b3060009081526003602052604090205550565b6000806000611bc284611bdb565b90506000611bd08286611df1565b959194509092505050565b6000606460115483611bed9190611e20565b611bf79190611e3f565b92915050565b600060208083528351808285015260005b81811015611c2a57858101830151858201604001528201611c0e565b81811115611c3c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146111ce57600080fd5b60008060408385031215611c7a57600080fd5b8235611c8581611c52565b946020939093013593505050565b600060208284031215611ca557600080fd5b8135611cb081611c52565b9392505050565b600080600060608486031215611ccc57600080fd5b8335611cd781611c52565b92506020840135611ce781611c52565b929592945050506040919091013590565b600080600060608486031215611d0d57600080fd5b505081359360208301359350604090920135919050565b600060208284031215611d3657600080fd5b5035919050565b80358015158114611d4d57600080fd5b919050565b60008060408385031215611d6557600080fd5b8235611d7081611c52565b9150611d7e60208401611d3d565b90509250929050565b600060208284031215611d9957600080fd5b611cb082611d3d565b60008060408385031215611db557600080fd5b8235611dc081611c52565b91506020830135611dd081611c52565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600082821015611e0357611e03611ddb565b500390565b60008219821115611e1b57611e1b611ddb565b500190565b6000816000190483118215151615611e3a57611e3a611ddb565b500290565b600082611e5c57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611e8957600080fd5b8151611cb081611c52565b600081518084526020808501945080840160005b83811015611ecd5781516001600160a01b031687529582019590820190600101611ea8565b509495945050505050565b85815284602082015260a060408201526000611ef760a0830186611e94565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000611f2d6040830184611e94565b949350505050565b600080600060608486031215611f4a57600080fd5b835192506020840151915060408401519050925092509256fe025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00a2646970667358221220e13c04ec98e2a5014329d3a241c4fa08560b0c1ef440f4401b1cdbcff72e788a64736f6c634300080f0033
Deployed Bytecode Sourcemap
22780:17491:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27224:83;;;;;;;;;;-1:-1:-1;27294:5:0;;;;;;;;;;;-1:-1:-1;;;27294:5:0;;;;27224:83;;;;27294:5;27224:83;:::i;:::-;;;;;;;;28132:195;;;;;;;;;;-1:-1:-1;28132:195:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;28132:195:0;1072:187:1;23701:49:0;;;;;;;;;;-1:-1:-1;23701:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24851:28;;;;;;;;;;-1:-1:-1;24851:28:0;;;;-1:-1:-1;;;;;24851:28:0;;;;;;-1:-1:-1;;;;;1680:32:1;;;1662:51;;1650:2;1635:18;24851:28:0;1516:203:1;24793:51:0;;;;;;;;;;;;;;;27501:95;;;;;;;;;;-1:-1:-1;27581:7:0;;27501:95;;;2105:25:1;;;2093:2;2078:18;27501:95:0;1959:177:1;23006:108:0;;;;;;;;;;-1:-1:-1;23006:108:0;;;;-1:-1:-1;;;;;23006:108:0;;;24524:43;;;;;;;;;;;;;;;;24933:28;;;;;;;;;;-1:-1:-1;24933:28:0;;;;-1:-1:-1;;;24933:28:0;;;;;;24223:32;;;;;;;;;;;;;;;;28335:352;;;;;;;;;;-1:-1:-1;28335:352:0;;;;;:::i;:::-;;:::i;27410:83::-;;;;;;;;;;-1:-1:-1;27410:83:0;;24112:1;2968:36:1;;2956:2;2941:18;27410:83:0;2826:184:1;28695:299:0;;;;;;;;;;-1:-1:-1;28695:299:0;;;;;:::i;:::-;;:::i;36571:615::-;;;;;;;;;;-1:-1:-1;36571:615:0;;;;;:::i;:::-;;:::i;:::-;;39729:195;;;:::i;36130:233::-;;;;;;;;;;-1:-1:-1;36130:233:0;;;;;:::i;:::-;;:::i;24886:38::-;;;;;;;;;;;;;;;24968:41;;;;;;;;;;-1:-1:-1;24968:41:0;;;;-1:-1:-1;;;24968:41:0;;;;;;37515:419;;;;;;;;;;-1:-1:-1;37515:419:0;;;;;:::i;:::-;;:::i;35996:126::-;;;;;;;;;;-1:-1:-1;35996:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;36087:27:0;36063:4;36087:27;;;:18;:27;;;;;;;;;35996:126;24324:32;;;;;;;;;;;;;;;;24122;;;;;;;;;;;;;;;;24574:43;;;;;;;;;;;;;;;;24624;;;;;;;;;;;;;;;;27604:117;;;;;;;;;;-1:-1:-1;27604:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;27697:16:0;27670:7;27697:16;;;:7;:16;;;;;;;27604:117;12694:105;;;;;;;;;;;;;:::i;38270:210::-;;;;;;;;;;-1:-1:-1;38270:210:0;;;;;:::i;:::-;;:::i;38488:125::-;;;;;;;;;;-1:-1:-1;38488:125:0;;;;;:::i;:::-;;:::i;23149:88::-;;;;;;;;;;;;23195:42;23149:88;;12046:87;;;;;;;;;;-1:-1:-1;12092:7:0;12119:6;-1:-1:-1;;;;;12119:6:0;12046:87;;29319:122;;;;;;;;;;-1:-1:-1;29410:23:0;;29319:122;;29002:309;;;;;;;;;;-1:-1:-1;29002:309:0;;;;;:::i;:::-;;:::i;27729:201::-;;;;;;;;;;-1:-1:-1;27729:201:0;;;;;:::i;:::-;;:::i;24737:45::-;;;;;;;;;;;;;;;;31010:1195;;;;;;;;;;;;;:::i;24425:88::-;;;;;;;;;;;;;;;;38621:173;;;;;;;;;;-1:-1:-1;38621:173:0;;;;;:::i;:::-;;:::i;39994:274::-;;;;;;;;;;;;;:::i;22863:108::-;;;;;;;;;;-1:-1:-1;22863:108:0;;;;-1:-1:-1;;;;;22863:108:0;;;37942:322;;;;;;;;;;-1:-1:-1;37942:322:0;;;;;:::i;:::-;;:::i;27938:186::-;;;;;;;;;;-1:-1:-1;27938:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;28089:18:0;;;28057:7;28089:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;27938:186;36371:194;;;;;;;;;;-1:-1:-1;36371:194:0;;;;;:::i;:::-;;:::i;37192:315::-;;;;;;;;;;-1:-1:-1;37192:315:0;;;;;:::i;:::-;;:::i;12954:240::-;;;;;;;;;;-1:-1:-1;12954:240:0;;;;;:::i;:::-;;:::i;28132:195::-;28236:4;28258:39;1034:10;28281:7;28290:6;28258:8;:39::i;:::-;-1:-1:-1;28315:4:0;28132:195;;;;:::o;28335:352::-;28469:4;28486:36;28496:6;28504:9;28515:6;28486:9;:36::i;:::-;-1:-1:-1;;;;;28604:19:0;;;;;;:11;:19;;;;;;;;1034:10;28604:33;;;;;;;;;28533:124;;28556:6;;28604:42;;28640:6;;28604:42;:::i;:::-;28533:8;:124::i;:::-;-1:-1:-1;28675:4:0;28335:352;;;;;:::o;28695:299::-;1034:10;28812:4;28906:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;28906:34:0;;;;;;;;;;28812:4;;28834:130;;28884:7;;28906:47;;28943:10;;28906:47;:::i;36571:615::-;11932:13;:11;:13::i;:::-;36707::::1;:28:::0;;;36746:21:::1;:37:::0;;;36794:13:::1;:28:::0;;;36833:21:::1;:37:::0;;;36881:13:::1;:28:::0;;;36920:21:::1;:37:::0;;;36897:12;36989:29:::1;36810:12:::0;36723;36989:29:::1;:::i;:::-;:45;;;;:::i;:::-;36970:16;:64:::0;;;37074:2:::1;-1:-1:-1::0;37054:22:0::1;37046:62;;;::::0;-1:-1:-1;;;37046:62:0;;5181:2:1;37046:62:0::1;::::0;::::1;5163:21:1::0;5220:2;5200:18;;;5193:30;5259:29;5239:18;;;5232:57;5306:18;;37046:62:0::1;;;;;;;;;37124:54;37161:16;;37124:54;;;;;5565:2:1::0;5547:21;;;5604:2;5584:18;;;5577:30;5643:31;5638:2;5623:18;;5616:59;5742:4;5727:20;;5720:36;;;;5707:3;5692:19;;5335:427;37124:54:0::1;;;;;;;;36571:615:::0;;;:::o;39729:195::-;11932:13;:11;:13::i;:::-;39793:47:::1;::::0;39801:10:::1;::::0;39818:21:::1;39793:47:::0;::::1;;;::::0;::::1;::::0;;;39818:21;39801:10;39793:47;::::1;;;;;;39785:56;;;::::0;::::1;;39857:59;::::0;;5979:21:1;;;6036:2;6016:18;;;6009:30;;;;6075:34;6070:2;6055:18;;6048:62;-1:-1:-1;;;6141:3:1;6126:19;;6119:34;39905:10:0::1;6220:4:1::0;6205:20;;6198:62;-1:-1:-1;;;;;;;;;;;39857:59:0;6185:3:1;6170:19;39857:59:0::1;;;;;;;;39729:195::o:0;36130:233::-;11932:13;:11;:13::i;:::-;-1:-1:-1;;;;;36201:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;:34;;-1:-1:-1;;36201:34:0::1;36231:4;36201:34;::::0;;36251:104;-1:-1:-1;;;;;;;;;;;36251:104:0;::::1;::::0;36220:7;;6501:2:1;6483:21;;;6540:2;6520:18;;;6513:30;6579:34;6574:2;6559:18;;6552:62;-1:-1:-1;;;6645:3:1;6630:19;;6623:45;-1:-1:-1;;;;;6742:32:1;;;;6735:4;6720:20;;6713:62;6700:3;6685:19;;6271:510;36251:104:0::1;;;;;;;;36130:233:::0;:::o;37515:419::-;11932:13;:11;:13::i;:::-;-1:-1:-1;;;;;37651:30:0;::::1;37629:111;;;::::0;-1:-1:-1;;;37629:111:0;;6988:2:1;37629:111:0::1;::::0;::::1;6970:21:1::0;7027:2;7007:18;;;7000:30;7066:33;7046:18;;;7039:61;7117:18;;37629:111:0::1;6786:355:1::0;37629:111:0::1;37751:22;:50:::0;;-1:-1:-1;;;;;;37751:50:0::1;-1:-1:-1::0;;;;;37751:50:0;::::1;::::0;;::::1;::::0;;;37817:109:::1;::::0;;7366:21:1;;;7423:2;7403:18;;;7396:30;;;;7462:34;7457:2;7442:18;;7435:62;-1:-1:-1;;;7528:3:1;7513:19;;7506:35;7608:4;7593:20;;7586:62;;;;-1:-1:-1;;;;;;;;;;;37817:109:0;7573:3:1;7558:19;37817:109:0::1;7146:508:1::0;12694:105:0;11932:13;:11;:13::i;:::-;12761:30:::1;12788:1;12761:18;:30::i;:::-;12694:105::o:0;38270:210::-;11932:13;:11;:13::i;:::-;38371:2:::1;38358:10;:15;38350:57;;;::::0;-1:-1:-1;;;38350:57:0;;7861:2:1;38350:57:0::1;::::0;::::1;7843:21:1::0;7900:2;7880:18;;;7873:30;7939:31;7919:18;;;7912:59;7988:18;;38350:57:0::1;7659:353:1::0;38350:57:0::1;38467:5;38453:10;38437:13;27581:7:::0;;;27501:95;38437:13:::1;:26;;;;:::i;:::-;38436:36;;;;:::i;:::-;38418:15;:54:::0;-1:-1:-1;38270:210:0:o;38488:125::-;11932:13;:11;:13::i;:::-;-1:-1:-1;;;;;38571:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:34;;-1:-1:-1;;38571:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38488:125::o;29002:309::-;1034:10;29124:4;29218:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29218:34:0;;;;;;;;;;29124:4;;29146:135;;29196:7;;29218:52;;29255:15;;29218:52;:::i;27729:201::-;27836:4;27858:42;1034:10;27882:9;27893:6;27858:9;:42::i;31010:1195::-;25439:16;:23;;-1:-1:-1;;;;25439:23:0;-1:-1:-1;;;25439:23:0;;;31153:24:::1;::::0;31091:21:::1;::::0;25439:23;;31153:28:::1;::::0;31180:1:::1;::::0;31153:28:::1;:::i;:::-;31123:58;;31192:37;31209:19;31192:16;:37::i;:::-;31242:18;31263:38;31287:14:::0;31263:21:::1;:38;:::i;:::-;31242:59;;31312:45;31325:19;31346:10;31312:12;:45::i;:::-;31373:118;::::0;;8614:25:1;;;8670:2;8655:18;;8648:34;;;8698:18;;;8691:34;;;31373:118:0::1;::::0;8602:2:1;8587:18;31373:118:0::1;;;;;;;31544:4;31504:19;27697:16:::0;;;:7;:16;;;;;;31561:29:::1;27697:16:::0;31561::::1;:29::i;:::-;31614:21;31601:34;;31648:20;31698:24;;31671;;:51;;;;:::i;:::-;31648:74;;31735:23;31816:12;31775:24;;31762:10;:37;;;;:::i;:::-;31761:67;;;;:::i;:::-;31735:93;;31839:23;31920:12;31879:24;;31866:10;:37;;;;:::i;:::-;31865:67;;;;:::i;:::-;31966:22;::::0;31839:93;;-1:-1:-1;31945:61:0::1;::::0;-1:-1:-1;;;;;31966:22:0::1;31990:15:::0;31945:20:::1;:61::i;:::-;32038:22;::::0;32017:61:::1;::::0;-1:-1:-1;;;;;32038:22:0::1;32062:15:::0;32017:20:::1;:61::i;:::-;-1:-1:-1::0;;32118:1:0::1;32091:24;:28:::0;;;32130:24:::1;:28:::0;;;32169:24:::1;:28:::0;-1:-1:-1;;25485:16:0;:24;;-1:-1:-1;;;;25485:24:0;;;-1:-1:-1;;;31010:1195:0:o;38621:173::-;11932:13;:11;:13::i;:::-;38700:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;38700:32:0::1;-1:-1:-1::0;;;;38700:32:0;;::::1;;::::0;;38748:38:::1;::::0;::::1;::::0;::::1;::::0;38724:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;39994:274:0;11932:13;:11;:13::i;:::-;40072:22:::1;::::0;40064:63:::1;::::0;-1:-1:-1;;;;;40072:22:0;;::::1;::::0;40105:21:::1;40064:63:::0;::::1;;;::::0;40072:22:::1;40064:63:::0;40072:22;40064:63;40105:21;40072:22;40064:63;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;40227:22:0::1;::::0;40143:117:::1;::::0;;8956:21:1;;;9013:2;8993:18;;;8986:30;;;;9052:34;9047:2;9032:18;;9025:62;-1:-1:-1;;;9118:3:1;9103:19;;9096:43;-1:-1:-1;;;;;40227:22:0;;::::1;9206:4:1::0;9191:20;;9184:62;-1:-1:-1;;;;;;;;;;;40143:117:0;9171:3:1;9156:19;40143:117:0::1;8736:516:1::0;37942:322:0;11932:13;:11;:13::i;:::-;-1:-1:-1;;;;;38041:30:0;::::1;38033:74;;;::::0;-1:-1:-1;;;38033:74:0;;9459:2:1;38033:74:0::1;::::0;::::1;9441:21:1::0;9498:2;9478:18;;;9471:30;9537:33;9517:18;;;9510:61;9588:18;;38033:74:0::1;9257:355:1::0;38033:74:0::1;38118:22;:50:::0;;-1:-1:-1;;;;;;38118:50:0::1;-1:-1:-1::0;;;;;38118:50:0;::::1;::::0;;::::1;::::0;;;38184:72:::1;::::0;;9837:21:1;;;9894:2;9874:18;;;9867:30;;;;9933:34;9928:2;9913:18;;9906:62;-1:-1:-1;;;9999:3:1;9984:19;;9977:35;10079:4;10064:20;;10057:62;;;;-1:-1:-1;;;;;;;;;;;38184:72:0;10044:3:1;10029:19;38184:72:0::1;9617:508:1::0;36371:194:0;11932:13;:11;:13::i;:::-;-1:-1:-1;;;;;36440:27:0;::::1;36470:5;36440:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;36440:35:0::1;::::0;;36491:66;;10342:21:1;;;10399:2;10379:18;;;10372:30;;;;10438:34;10433:2;10418:18;;10411:62;-1:-1:-1;;;10504:3:1;10489:19;;10482:44;10578:20;;10571:62;;;;-1:-1:-1;;;;;;;;;;;36491:66:0;10558:3:1;10543:19;36491:66:0::1;10130:509:1::0;37192:315:0;11932:13;:11;:13::i;:::-;37321:23:::1;:50:::0;;;37387:112:::1;::::0;;10856:21:1;;;10913:2;10893:18;;;10886:30;;;;10952:34;10947:2;10932:18;;10925:62;-1:-1:-1;;;11018:3:1;11003:19;;10996:42;11105:4;11090:20;;11083:36;;;37387:112:0::1;::::0;11070:3:1;11055:19;37387:112:0::1;10644:481:1::0;12954:240:0;11932:13;:11;:13::i;:::-;-1:-1:-1;;;;;13059:22:0;::::1;13037:110;;;::::0;-1:-1:-1;;;13037:110:0;;11332:2:1;13037:110:0::1;::::0;::::1;11314:21:1::0;11371:2;11351:18;;;11344:30;11410:34;11390:18;;;11383:62;-1:-1:-1;;;11461:18:1;;;11454:36;11507:19;;13037:110:0::1;11130:402:1::0;13037:110:0::1;13158:28;13177:8;13158:18;:28::i;:::-;12954:240:::0;:::o;29449:371::-;-1:-1:-1;;;;;29576:19:0;;29568:68;;;;-1:-1:-1;;;29568:68:0;;11739:2:1;29568:68:0;;;11721:21:1;11778:2;11758:18;;;11751:30;11817:34;11797:18;;;11790:62;-1:-1:-1;;;11868:18:1;;;11861:34;11912:19;;29568:68:0;11537:400:1;29568:68:0;-1:-1:-1;;;;;29655:21:0;;29647:68;;;;-1:-1:-1;;;29647:68:0;;12144:2:1;29647:68:0;;;12126:21:1;12183:2;12163:18;;;12156:30;12222:34;12202:18;;;12195:62;-1:-1:-1;;;12273:18:1;;;12266:32;12315:19;;29647:68:0;11942:398:1;29647:68:0;-1:-1:-1;;;;;29728:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29780:32;;2105:25:1;;;29780:32:0;;2078:18:1;29780:32:0;;;;;;;29449:371;;;:::o;29828:1174::-;-1:-1:-1;;;;;29950:18:0;;29942:68;;;;-1:-1:-1;;;29942:68:0;;12547:2:1;29942:68:0;;;12529:21:1;12586:2;12566:18;;;12559:30;12625:34;12605:18;;;12598:62;-1:-1:-1;;;12676:18:1;;;12669:35;12721:19;;29942:68:0;12345:401:1;29942:68:0;-1:-1:-1;;;;;30029:16:0;;30021:64;;;;-1:-1:-1;;;30021:64:0;;12953:2:1;30021:64:0;;;12935:21:1;12992:2;12972:18;;;12965:30;13031:34;13011:18;;;13004:62;-1:-1:-1;;;13082:18:1;;;13075:33;13125:19;;30021:64:0;12751:399:1;30021:64:0;30113:1;30104:6;:10;30096:64;;;;-1:-1:-1;;;30096:64:0;;13357:2:1;30096:64:0;;;13339:21:1;13396:2;13376:18;;;13369:30;13435:34;13415:18;;;13408:62;-1:-1:-1;;;13486:18:1;;;13479:39;13535:19;;30096:64:0;13155:405:1;30096:64:0;-1:-1:-1;;;;;30179:21:0;;;;;;:17;:21;;;;;;;;;:66;;;30230:15;;30220:6;30204:13;30214:2;-1:-1:-1;;;;;27697:16:0;27670:7;27697:16;;;:7;:16;;;;;;;27604:117;30204:13;:22;;;;:::i;:::-;:41;;30179:66;30171:104;;;;-1:-1:-1;;;30171:104:0;;13767:2:1;30171:104:0;;;13749:21:1;13806:2;13786:18;;;13779:30;13845:27;13825:18;;;13818:55;13890:18;;30171:104:0;13565:349:1;30171:104:0;30337:4;30288:28;27697:16;;;:7;:16;;;;;;30422:23;;30477:16;;30385:60;;;;;-1:-1:-1;;;30477:16:0;;;;30476:17;:55;;;;-1:-1:-1;30510:21:0;;-1:-1:-1;;;30510:21:0;;;;30476:55;:93;;;;;30556:13;-1:-1:-1;;;;;30548:21:0;:4;-1:-1:-1;;;;;30548:21:0;;;30476:93;:125;;;;-1:-1:-1;12092:7:0;12119:6;-1:-1:-1;;;;;30586:15:0;;;12119:6;;30586:15;;30476:125;30458:261;;;30632:23;30628:80;;;30676:16;:14;:16::i;:::-;-1:-1:-1;;;;;30849:24:0;;30731:12;30849:24;;;:18;:24;;;;;;30746:4;;30849:24;;;:50;;-1:-1:-1;;;;;;30877:22:0;;;;;;:18;:22;;;;;;;;30849:50;30845:98;;;-1:-1:-1;30926:5:0;30845:98;30953:41;30968:4;30974:2;30978:6;30986:7;30953:14;:41::i;:::-;29931:1071;;;29828:1174;;;:::o;12211:132::-;12092:7;12119:6;-1:-1:-1;;;;;12119:6:0;1034:10;12275:23;12267:68;;;;-1:-1:-1;;;12267:68:0;;14121:2:1;12267:68:0;;;14103:21:1;;;14140:18;;;14133:30;14199:34;14179:18;;;14172:62;14251:18;;12267:68:0;13919:356:1;13354:191:0;13428:16;13447:6;;-1:-1:-1;;;;;13464:17:0;;;-1:-1:-1;;;;;;13464:17:0;;;;;;13497:40;;13447:6;;;;;;;13497:40;;13428:16;13497:40;13417:128;13354:191;:::o;32213:675::-;32363:16;;;32377:1;32363:16;;;;;;;;32339:21;;32363:16;;;;;;;;;;-1:-1:-1;32363:16:0;32339:40;;32408:4;32390;32395:1;32390:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;32390:23:0;;;-1:-1:-1;;;;;32390:23:0;;;;;32434:15;-1:-1:-1;;;;;32434:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32424:4;32429:1;32424:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;32424:32:0;;;-1:-1:-1;;;;;32424:32:0;;;;;32467:62;32484:4;32499:15;32517:11;32467:8;:62::i;:::-;32568:259;;-1:-1:-1;;;32568:259:0;;-1:-1:-1;;;;;32568:15:0;:66;;;;:259;;32649:11;;32675:1;;32738:4;;32765;;32801:15;;32568:259;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32845:35;32862:11;32875:4;32845:35;;;;;;;:::i;:::-;;;;;;;;32268:620;32213:675;:::o;32896:551::-;33044:62;33061:4;33076:15;33094:11;33044:8;:62::i;:::-;33149:290;;-1:-1:-1;;;33149:290:0;;33221:4;33149:290;;;16531:34:1;;;16581:18;;;16574:34;;;33267:1:0;16624:18:1;;;16617:34;;;16667:18;;;16660:34;16710:19;;;16703:44;33413:15:0;16763:19:1;;;16756:35;33149:15:0;-1:-1:-1;;;;;33149:31:0;;;;33188:9;;16465:19:1;;33149:290:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32896:551;;:::o;38802:140::-;38908:26;;-1:-1:-1;;;;;38908:18:0;;;:26;;;;;38927:6;;38908:26;;;;38927:6;38908:18;:26;;;;;;;;;;;;;;;;;;;;;38802:140;;:::o;33455:336::-;33611:7;33606:55;;33635:14;35624:1;35608:13;:17;;;35636:13;:17;;;35664:13;:17;;;35692:16;:20;35565:155;33635:14;33673:23;33689:6;33673:15;:23::i;:::-;33709:48;33731:6;33739:9;33750:6;33709:21;:48::i;:::-;33768:15;:13;:15::i;:::-;33455:336;;;;:::o;33799:334::-;33863:16;;33883:1;33863:21;33859:60;;33799:334;:::o;33859:60::-;33984:3;33967:13;;33958:6;:22;;;;:::i;:::-;33957:30;;;;:::i;:::-;33929:24;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;34036:13:0;;34053:3;;34027:22;;:6;:22;:::i;:::-;34026:30;;;;:::i;:::-;33998:24;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;34105:13:0;;34122:3;;34096:22;;:6;:22;:::i;:::-;34095:30;;;;:::i;:::-;34067:24;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;;33799:334:0:o;34141:434::-;34278:23;34303:18;34325:19;34336:7;34325:10;:19::i;:::-;-1:-1:-1;;;;;34373:15:0;;;;;;:7;:15;;;;;;34277:67;;-1:-1:-1;34277:67:0;-1:-1:-1;34373:25:0;;34391:7;;34373:25;:::i;:::-;-1:-1:-1;;;;;34355:15:0;;;;;;;:7;:15;;;;;;:43;;;;34432:18;;;;;;;:36;;34453:15;;34432:36;:::i;:::-;-1:-1:-1;;;;;34411:18:0;;;;;;:7;:18;;;;;:57;34481:26;34496:10;34481:14;:26::i;:::-;34540:9;-1:-1:-1;;;;;34523:44:0;34532:6;-1:-1:-1;;;;;34523:44:0;;34551:15;34523:44;;;;2105:25:1;;2093:2;2078:18;;1959:177;34523:44:0;;;;;;;;34266:309;;34141:434;;;:::o;35728:260::-;35788:21;;35772:13;:37;;;35836:21;;35820:13;:37;;;35884:21;;35868:13;:37;;;35884:21;35935:29;;35836:21;35935:29;:::i;:::-;:45;;;;:::i;:::-;35916:16;:64;35728:260::o;34583:245::-;34669:7;34678;34704:23;34729:18;34751:20;34763:7;34751:11;:20::i;:::-;34703:68;;;;-1:-1:-1;34583:245:0;-1:-1:-1;;;;34583:245:0:o;35182:196::-;35286:4;35270:22;;;;:7;:22;;;;;;:35;;35295:10;;35270:35;:::i;:::-;35261:4;35245:22;;;;:7;:22;;;;;:60;-1:-1:-1;35182:196:0:o;34836:338::-;34923:7;34932;35009:18;35030:30;35052:7;35030:21;:30::i;:::-;35009:51;-1:-1:-1;35071:23:0;35097:22;35009:51;35098:7;35097:22;:::i;:::-;35071:48;35155:10;;-1:-1:-1;34836:338:0;;-1:-1:-1;;;34836:338:0:o;35386:171::-;35483:7;35546:3;35526:16;;35516:7;:26;;;;:::i;:::-;35515:34;;;;:::i;:::-;35508:41;35386:171;-1:-1:-1;;35386:171:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;:::-;1500:5;1264:247;-1:-1:-1;;;1264:247:1:o;2365:456::-;2442:6;2450;2458;2511:2;2499:9;2490:7;2486:23;2482:32;2479:52;;;2527:1;2524;2517:12;2479:52;2566:9;2553:23;2585:31;2610:5;2585:31;:::i;:::-;2635:5;-1:-1:-1;2692:2:1;2677:18;;2664:32;2705:33;2664:32;2705:33;:::i;:::-;2365:456;;2757:7;;-1:-1:-1;;;2811:2:1;2796:18;;;;2783:32;;2365:456::o;3015:316::-;3092:6;3100;3108;3161:2;3149:9;3140:7;3136:23;3132:32;3129:52;;;3177:1;3174;3167:12;3129:52;-1:-1:-1;;3200:23:1;;;3270:2;3255:18;;3242:32;;-1:-1:-1;3321:2:1;3306:18;;;3293:32;;3015:316;-1:-1:-1;3015:316:1:o;3336:180::-;3395:6;3448:2;3436:9;3427:7;3423:23;3419:32;3416:52;;;3464:1;3461;3454:12;3416:52;-1:-1:-1;3487:23:1;;3336:180;-1:-1:-1;3336:180:1:o;3521:160::-;3586:20;;3642:13;;3635:21;3625:32;;3615:60;;3671:1;3668;3661:12;3615:60;3521:160;;;:::o;3686:315::-;3751:6;3759;3812:2;3800:9;3791:7;3787:23;3783:32;3780:52;;;3828:1;3825;3818:12;3780:52;3867:9;3854:23;3886:31;3911:5;3886:31;:::i;:::-;3936:5;-1:-1:-1;3960:35:1;3991:2;3976:18;;3960:35;:::i;:::-;3950:45;;3686:315;;;;;:::o;4006:180::-;4062:6;4115:2;4103:9;4094:7;4090:23;4086:32;4083:52;;;4131:1;4128;4121:12;4083:52;4154:26;4170:9;4154:26;:::i;4191:388::-;4259:6;4267;4320:2;4308:9;4299:7;4295:23;4291:32;4288:52;;;4336:1;4333;4326:12;4288:52;4375:9;4362:23;4394:31;4419:5;4394:31;:::i;:::-;4444:5;-1:-1:-1;4501:2:1;4486:18;;4473:32;4514:33;4473:32;4514:33;:::i;:::-;4566:7;4556:17;;;4191:388;;;;;:::o;4584:127::-;4645:10;4640:3;4636:20;4633:1;4626:31;4676:4;4673:1;4666:15;4700:4;4697:1;4690:15;4716:125;4756:4;4784:1;4781;4778:8;4775:34;;;4789:18;;:::i;:::-;-1:-1:-1;4826:9:1;;4716:125::o;4846:128::-;4886:3;4917:1;4913:6;4910:1;4907:13;4904:39;;;4923:18;;:::i;:::-;-1:-1:-1;4959:9:1;;4846:128::o;8017:168::-;8057:7;8123:1;8119;8115:6;8111:14;8108:1;8105:21;8100:1;8093:9;8086:17;8082:45;8079:71;;;8130:18;;:::i;:::-;-1:-1:-1;8170:9:1;;8017:168::o;8190:217::-;8230:1;8256;8246:132;;8300:10;8295:3;8291:20;8288:1;8281:31;8335:4;8332:1;8325:15;8363:4;8360:1;8353:15;8246:132;-1:-1:-1;8392:9:1;;8190:217::o;14412:127::-;14473:10;14468:3;14464:20;14461:1;14454:31;14504:4;14501:1;14494:15;14528:4;14525:1;14518:15;14544:251;14614:6;14667:2;14655:9;14646:7;14642:23;14638:32;14635:52;;;14683:1;14680;14673:12;14635:52;14715:9;14709:16;14734:31;14759:5;14734:31;:::i;14800:461::-;14853:3;14891:5;14885:12;14918:6;14913:3;14906:19;14944:4;14973:2;14968:3;14964:12;14957:19;;15010:2;15003:5;14999:14;15031:1;15041:195;15055:6;15052:1;15049:13;15041:195;;;15120:13;;-1:-1:-1;;;;;15116:39:1;15104:52;;15176:12;;;;15211:15;;;;15152:1;15070:9;15041:195;;;-1:-1:-1;15252:3:1;;14800:461;-1:-1:-1;;;;;14800:461:1:o;15266:582::-;15565:6;15554:9;15547:25;15608:6;15603:2;15592:9;15588:18;15581:34;15651:3;15646:2;15635:9;15631:18;15624:31;15528:4;15672:57;15724:3;15713:9;15709:19;15701:6;15672:57;:::i;:::-;-1:-1:-1;;;;;15765:32:1;;;;15760:2;15745:18;;15738:60;-1:-1:-1;15829:3:1;15814:19;15807:35;15664:65;15266:582;-1:-1:-1;;;15266:582:1:o;15853:332::-;16060:6;16049:9;16042:25;16103:2;16098;16087:9;16083:18;16076:30;16023:4;16123:56;16175:2;16164:9;16160:18;16152:6;16123:56;:::i;:::-;16115:64;15853:332;-1:-1:-1;;;;15853:332:1:o;16802:306::-;16890:6;16898;16906;16959:2;16947:9;16938:7;16934:23;16930:32;16927:52;;;16975:1;16972;16965:12;16927:52;17004:9;16998:16;16988:26;;17054:2;17043:9;17039:18;17033:25;17023:35;;17098:2;17087:9;17083:18;17077:25;17067:35;;16802:306;;;;;:::o
Swarm Source
ipfs://e13c04ec98e2a5014329d3a241c4fa08560b0c1ef440f4401b1cdbcff72e788a
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.