ERC-20
Bridge
Overview
Max Total Supply
1,000,000,000 HEART
Holders
616 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
93,195.550743413554454865 HEARTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HEART
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-29 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.9; // https://www.pulseheartbridge.com/ // https://twitter.com/HeartBridgeCoin // https://t.me/HeartBridgeCoin interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns(address pair); } interface IERC20 { /** * @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 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 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 `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 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 name of the token. */ function name() external view returns(string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns(string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns(uint8); } abstract contract Context { function _msgSender() internal view virtual returns(address) { return msg.sender; } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @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 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 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; } /** * @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 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 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 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); } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns(uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns(uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns(uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns(uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { 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 Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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 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; } /** * @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; } /** * @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 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; } function toUint256Safe(int256 a) internal pure returns(uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns(int256) { int256 b = int256(a); require(b >= 0); return b; } } 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 quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns(uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns(uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns(uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns(uint[] memory amounts); } interface 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 HEART is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable router; address public immutable uniswapV2Pair; // addresses address private developmentWallet; address private treasuryWallet; // limits uint256 private maxBuyAmount; uint256 private maxSellAmount; uint256 private maxWalletAmount; uint256 private thresholdSwapAmount; // status flags bool private isTrading = false; bool public swapEnabled = false; bool public isSwapping; struct Fees { uint256 buyTotalFees; uint256 buyTreasuryFee; uint256 buyDevelopmentFee; uint256 buyLiquidityFee; uint256 sellTotalFees; uint256 sellTreasuryFee; uint256 sellDevelopmentFee; uint256 sellLiquidityFee; } Fees public _fees = Fees({ buyTotalFees: 0, buyTreasuryFee: 0, buyDevelopmentFee:0, buyLiquidityFee: 0, sellTotalFees: 0, sellTreasuryFee: 0, sellDevelopmentFee:0, sellLiquidityFee: 0 }); uint256 public tokensForTreasury; uint256 public tokensForLiquidity; uint256 public tokensForDevelopment; // exclude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public _isExcludedMaxWalletAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public marketPair; event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived ); constructor() ERC20("HeartBridge", "HEART") { router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH()); _isExcludedMaxTransactionAmount[address(router)] = true; _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true; _isExcludedMaxTransactionAmount[owner()] = true; _isExcludedMaxTransactionAmount[address(this)] = true; _isExcludedMaxTransactionAmount[address(0xdead)] = true; _isExcludedFromFees[owner()] = true; _isExcludedFromFees[address(this)] = true; _isExcludedMaxWalletAmount[owner()] = true; _isExcludedMaxWalletAmount[address(0xdead)] = true; _isExcludedMaxWalletAmount[address(this)] = true; _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true; marketPair[address(uniswapV2Pair)] = true; approve(address(router), type(uint256).max); uint256 totalSupply = 1000000000 * 1e18; maxBuyAmount = totalSupply / 100; // 1% maxBuyAmount maxSellAmount = totalSupply / 100; // 1% maxSellAmount maxWalletAmount = totalSupply / 100; // 1% maxWallet thresholdSwapAmount = totalSupply * 1 / 1000; _fees.buyTreasuryFee = 95; _fees.buyLiquidityFee = 0; _fees.buyDevelopmentFee = 0; _fees.buyTotalFees = _fees.buyTreasuryFee + _fees.buyLiquidityFee + _fees.buyDevelopmentFee; _fees.sellTreasuryFee = 95; _fees.sellLiquidityFee = 0; _fees.sellDevelopmentFee = 0; _fees.sellTotalFees = _fees.sellTreasuryFee + _fees.sellLiquidityFee + _fees.sellDevelopmentFee; treasuryWallet = address(0x4598c0883B303e7aA5d5dD6c9f458ba0A799B525); developmentWallet = address(0x739f05De6FC083211917DfE371BFEEE02E3E6c8d); // exclude from paying fees or having max transaction amount /* _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 { } // once enabled, can never be turned off function heartbeat() external onlyOwner { isTrading = true; swapEnabled = true; } // change the minimum amount of tokens to sell from fees function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){ thresholdSwapAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) public onlyOwner { maxBuyAmount = (totalSupply() * newMaxBuy) / 1000; maxSellAmount = (totalSupply() * newMaxSell) / 1000; } function updateMaxWalletAmount(uint256 newPercentage) public onlyOwner { maxWalletAmount = (totalSupply() * newPercentage) / 1000; } // only use to disable contract sales if absolutely necessary (emergency use only) function toggleSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateFees(uint256 _treasuryFeeBuy, uint256 _liquidityFeeBuy,uint256 _developmentFeeBuy,uint256 _treasuryFeeSell, uint256 _liquidityFeeSell,uint256 _developmentFeeSell) external onlyOwner { _fees.buyTreasuryFee = _treasuryFeeBuy; _fees.buyLiquidityFee = _liquidityFeeBuy; _fees.buyDevelopmentFee = _developmentFeeBuy; _fees.buyTotalFees = _fees.buyTreasuryFee + _fees.buyLiquidityFee + _fees.buyDevelopmentFee; _fees.sellTreasuryFee = _treasuryFeeSell; _fees.sellLiquidityFee = _liquidityFeeSell; _fees.sellDevelopmentFee = _developmentFeeSell; _fees.sellTotalFees = _fees.sellTreasuryFee + _fees.sellLiquidityFee + _fees.sellDevelopmentFee; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; } function excludeFromWalletLimit(address account, bool excluded) public onlyOwner { _isExcludedMaxWalletAmount[account] = excluded; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function removeLimits() external onlyOwner { updateMaxTxnAmount(1000,1000); updateMaxWalletAmount(1000); } function setMarketPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from marketPair"); marketPair[pair] = value; } function setWallets(address _treasuryWallet,address _developmentWallet) external onlyOwner{ treasuryWallet = _treasuryWallet; developmentWallet = _developmentWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address sender, address recipient, uint256 amount ) internal override { if (amount == 0) { super._transfer(sender, recipient, 0); return; } if ( sender != owner() && recipient != owner() && !isSwapping ) { if (!isTrading) { require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active."); } if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) { require(amount <= maxBuyAmount, "Buy transfer amount exceeds the maxTransactionAmount."); } else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) { require(amount <= maxSellAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } if (!_isExcludedMaxWalletAmount[recipient]) { require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded"); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= thresholdSwapAmount; if ( canSwap && swapEnabled && !isSwapping && marketPair[recipient] && !_isExcludedFromFees[sender] && !_isExcludedFromFees[recipient] ) { isSwapping = true; swapBack(); isSwapping = false; } bool takeFee = !isSwapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) { takeFee = false; } // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { uint256 fees = 0; if (marketPair[recipient] && _fees.sellTotalFees > 0) { fees = amount.mul(_fees.sellTotalFees).div(100); tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees; tokensForTreasury += fees * _fees.sellTreasuryFee / _fees.sellTotalFees; tokensForDevelopment += fees * _fees.sellDevelopmentFee / _fees.sellTotalFees; } // on buy else if (marketPair[sender] && _fees.buyTotalFees > 0) { fees = amount.mul(_fees.buyTotalFees).div(100); tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees; tokensForTreasury += fees * _fees.buyTreasuryFee / _fees.buyTotalFees; tokensForDevelopment += fees * _fees.buyDevelopmentFee / _fees.buyTotalFees; } if (fees > 0) { super._transfer(sender, address(this), fees); } amount -= fees; } super._transfer(sender, recipient, amount); } function swapTokensForEth(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 ); } 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); } function swapBack() private { uint256 contractTokenBalance = balanceOf(address(this)); uint256 toSwap = tokensForLiquidity + tokensForTreasury + tokensForDevelopment; bool success; if (contractTokenBalance == 0 || toSwap == 0) { return; } if (contractTokenBalance > thresholdSwapAmount * 20) { contractTokenBalance = thresholdSwapAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2; uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 newBalance = address(this).balance.sub(initialETHBalance); uint256 ethForTreasury = newBalance.mul(tokensForTreasury).div(toSwap); uint256 ethForDevelopment = newBalance.mul(tokensForDevelopment).div(toSwap); uint256 ethForLiquidity = newBalance - (ethForTreasury + ethForDevelopment); tokensForLiquidity = 0; tokensForTreasury = 0; tokensForDevelopment = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity); } (success,) = address(developmentWallet).call{ value: (address(this).balance - ethForTreasury) } (""); (success,) = address(treasuryWallet).call{ value: address(this).balance } (""); } }
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":"_fees","outputs":[{"internalType":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"buyDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellTreasuryFee","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":"_isExcludedMaxWalletAmount","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":"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":[],"name":"heartbeat","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":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"},{"internalType":"address","name":"_developmentWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"tokensForTreasury","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":"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":"_treasuryFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_developmentFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_treasuryFeeSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_developmentFeeSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250600d600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701555050348015620000dd57600080fd5b506040518060400160405280600b81526020017f48656172744272696467650000000000000000000000000000000000000000008152506040518060400160405280600581526020017f484541525400000000000000000000000000000000000000000000000000000081525081600390805190602001906200016292919062000dfb565b5080600490805190602001906200017b92919062000dfb565b50505060006200019062000ab060201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c057600080fd5b505afa158015620002d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fb919062000f15565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036057600080fd5b505afa15801562000375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039b919062000f15565b6040518363ffffffff1660e01b8152600401620003ba92919062000f58565b602060405180830381600087803b158015620003d557600080fd5b505af1158015620003ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000410919062000f15565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016019600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016019600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960006200050d62000ab860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016019600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860006200062662000ab860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000620006e562000ab860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008d06080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000ae260201b60201c565b5060006b033b2e3c9fd0803ce80000009050606481620008f1919062000fed565b60088190555060648162000906919062000fed565b6009819055506064816200091b919062000fed565b600a819055506103e860018262000933919062001025565b6200093f919062000fed565b600b81905550605f600d600101819055506000600d600301819055506000600d60020181905550600d60020154600d60030154600d6001015462000984919062001086565b62000990919062001086565b600d60000181905550605f600d600501819055506000600d600701819055506000600d60060181905550600d60060154600d60070154600d60050154620009d8919062001086565b620009e4919062001086565b600d60040181905550734598c0883b303e7aa5d5dd6c9f458ba0a799b525600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073739f05de6fc083211917dfe371bfeee02e3e6c8d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000aa9338262000b1060201b60201c565b506200126b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600062000b0662000af862000ab060201b60201c565b848462000cab60201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b7a9062001144565b60405180910390fd5b62000b9f8160025462000d9860201b62001da61790919060201c565b60028190555062000bfd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d9860201b62001da61790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c9f919062001177565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000d8b919062001177565b60405180910390a3505050565b600080828462000da9919062001086565b90508381101562000df1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000de890620011e4565b60405180910390fd5b8091505092915050565b82805462000e099062001235565b90600052602060002090601f01602090048101928262000e2d576000855562000e79565b82601f1062000e4857805160ff191683800117855562000e79565b8280016001018555821562000e79579182015b8281111562000e7857825182559160200191906001019062000e5b565b5b50905062000e88919062000e8c565b5090565b5b8082111562000ea757600081600090555060010162000e8d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000edd8262000eb0565b9050919050565b62000eef8162000ed0565b811462000efb57600080fd5b50565b60008151905062000f0f8162000ee4565b92915050565b60006020828403121562000f2e5762000f2d62000eab565b5b600062000f3e8482850162000efe565b91505092915050565b62000f528162000ed0565b82525050565b600060408201905062000f6f600083018562000f47565b62000f7e602083018462000f47565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ffa8262000f85565b9150620010078362000f85565b9250826200101a576200101962000f8f565b5b828204905092915050565b6000620010328262000f85565b91506200103f8362000f85565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200107b576200107a62000fbe565b5b828202905092915050565b6000620010938262000f85565b9150620010a08362000f85565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010d857620010d762000fbe565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200112c601f83620010e3565b91506200113982620010f4565b602082019050919050565b600060208201905081810360008301526200115f816200111d565b9050919050565b620011718162000f85565b82525050565b60006020820190506200118e600083018462001166565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620011cc601b83620010e3565b9150620011d98262001194565b602082019050919050565b60006020820190508181036000830152620011ff81620011bd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200124e57607f821691505b6020821081141562001265576200126462001206565b5b50919050565b60805160a0516141a7620012bb60003960008181610e07015261171b015260008181611d8401528181612edc01528181612fcc01528181612ff30152818161308f01526130b601526141a76000f3fe6080604052600436106102295760003560e01c80638da5cb5b11610123578063c18bc195116100ab578063e16830a81161006f578063e16830a814610841578063ef8700e51461086a578063f2fde38b14610895578063f5b3c3bf146108be578063f887ea40146108fb57610230565b8063c18bc19514610755578063cc2ffe7c1461077e578063d212a69a146107a9578063d3f6a157146107db578063dd62ed3e1461080457610230565b8063a457c2d7116100f2578063a457c2d71461065e578063a9059cbb1461069b578063b8863115146106d8578063c024666814610703578063c16dd4a41461072c57610230565b80638da5cb5b146105a257806395d89b41146105cd57806396880b17146105f8578063992c58e41461063557610230565b806339509351116101b15780636ddd1713116101755780636ddd1713146104e357806370a082311461050e578063715018a61461054b578063751039fc146105625780637571336a1461057957610230565b806339509351146103ea5780633defb9621461042757806349bd5a5e1461043e5780634fbee19314610469578063555467a1146104a657610230565b806318160ddd116101f857806318160ddd146103035780631a8145bb1461032e5780631c6e8a751461035957806323b872dd14610382578063313ce567146103bf57610230565b806306fdde0314610235578063095ea7b31461026057806310d5de531461029d57806311a582c3146102da57610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610926565b604051610257919061326e565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613329565b6109b8565b6040516102949190613384565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061339f565b6109d6565b6040516102d19190613384565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc91906133cc565b6109f6565b005b34801561030f57600080fd5b50610318610add565b604051610325919061341b565b60405180910390f35b34801561033a57600080fd5b50610343610ae7565b604051610350919061341b565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190613462565b610aed565b005b34801561038e57600080fd5b506103a960048036038101906103a4919061348f565b610ba1565b6040516103b69190613384565b60405180910390f35b3480156103cb57600080fd5b506103d4610c7a565b6040516103e191906134fe565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190613329565b610c83565b60405161041e9190613384565b60405180910390f35b34801561043357600080fd5b5061043c610d36565b005b34801561044a57600080fd5b50610453610e05565b6040516104609190613528565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b919061339f565b610e29565b60405161049d9190613384565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190613543565b610e7f565b6040516104da9190613384565b60405180910390f35b3480156104ef57600080fd5b506104f8610f28565b6040516105059190613384565b60405180910390f35b34801561051a57600080fd5b506105356004803603810190610530919061339f565b610f3b565b604051610542919061341b565b60405180910390f35b34801561055757600080fd5b50610560610f83565b005b34801561056e57600080fd5b506105776110db565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613570565b61118b565b005b3480156105ae57600080fd5b506105b761127d565b6040516105c49190613528565b60405180910390f35b3480156105d957600080fd5b506105e26112a7565b6040516105ef919061326e565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a919061339f565b611339565b60405161062c9190613384565b60405180910390f35b34801561064157600080fd5b5061065c600480360381019061065791906135b0565b611359565b005b34801561066a57600080fd5b5061068560048036038101906106809190613329565b611492565b6040516106929190613384565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190613329565b61155f565b6040516106cf9190613384565b60405180910390f35b3480156106e457600080fd5b506106ed61157d565b6040516106fa9190613384565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190613570565b611590565b005b34801561073857600080fd5b50610753600480360381019061074e9190613570565b611682565b005b34801561076157600080fd5b5061077c60048036038101906107779190613543565b611803565b005b34801561078a57600080fd5b506107936118c3565b6040516107a0919061341b565b60405180910390f35b3480156107b557600080fd5b506107be6118c9565b6040516107d298979695949392919061363d565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd91906136bb565b6118ff565b005b34801561081057600080fd5b5061082b600480360381019061082691906136bb565b611a1c565b604051610838919061341b565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190613570565b611aa3565b005b34801561087657600080fd5b5061087f611b95565b60405161088c919061341b565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b7919061339f565b611b9b565b005b3480156108ca57600080fd5b506108e560048036038101906108e0919061339f565b611d62565b6040516108f29190613384565b60405180910390f35b34801561090757600080fd5b50610910611d82565b60405161091d919061375a565b60405180910390f35b606060038054610935906137a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906137a4565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b5050505050905090565b60006109cc6109c5611e04565b8484611e0c565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b6109fe611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490613822565b60405180910390fd5b6103e882610a99610add565b610aa39190613871565b610aad91906138fa565b6008819055506103e881610abf610add565b610ac99190613871565b610ad391906138fa565b6009819055505050565b6000600254905090565b60165481565b610af5611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b90613822565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6000610bae848484611ef7565b610c6f84610bba611e04565b610c6a8560405180606001604052806028815260200161414a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c20611e04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128329092919063ffffffff16565b611e0c565b600190509392505050565b60006012905090565b6000610d2c610c90611e04565b84610d278560016000610ca1611e04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611da690919063ffffffff16565b611e0c565b6001905092915050565b610d3e611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc490613822565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610e89611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f90613822565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f8b611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190613822565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6110e3611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116990613822565b60405180910390fd5b61117e6103e8806109f6565b6111896103e8611803565b565b611193611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121990613822565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112b6906137a4565b80601f01602080910402602001604051908101604052809291908181526020018280546112e2906137a4565b801561132f5780601f106113045761010080835404028352916020019161132f565b820191906000526020600020905b81548152906001019060200180831161131257829003601f168201915b5050505050905090565b601a6020528060005260406000206000915054906101000a900460ff1681565b611361611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e790613822565b60405180910390fd5b85600d6001018190555084600d6003018190555083600d60020181905550600d60020154600d60030154600d6001015461142a919061392b565b611434919061392b565b600d6000018190555082600d6005018190555081600d6007018190555080600d60060181905550600d60060154600d60070154600d60050154611477919061392b565b611481919061392b565b600d60040181905550505050505050565b600061155561149f611e04565b84611550856040518060600160405280602581526020016140ff60259139600160006114c9611e04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128329092919063ffffffff16565b611e0c565b6001905092915050565b600061157361156c611e04565b8484611ef7565b6001905092915050565b600c60029054906101000a900460ff1681565b611598611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90613822565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61168a611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171090613822565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f906139f3565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61180b611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190613822565b60405180910390fd5b6103e8816118a6610add565b6118b09190613871565b6118ba91906138fa565b600a8190555050565b60155481565b600d8060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b611907611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90613822565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611aab611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190613822565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611ba3611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2990613822565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9990613a85565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000808284611db5919061392b565b905083811015611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190613af1565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611eea919061341b565b60405180910390a3505050565b6000811415611f1157611f0c83836000612896565b61282d565b611f1961127d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f875750611f5761127d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fa05750600c60029054906101000a900460ff16155b1561232657600c60009054906101000a900460ff1661209a57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061205a5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090613b5d565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561213d5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561218c57600854811115612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e90613bef565b60405180910390fd5b61227b565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561222f5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561227a57600954811115612279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227090613c81565b60405180910390fd5b5b5b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661232557600a546122d883610f3b565b826122e3919061392b565b1115612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90613ced565b60405180910390fd5b5b5b600061233130610f3b565b90506000600b5482101590508080156123565750600c60019054906101000a900460ff165b801561236f5750600c60029054906101000a900460ff16155b80156123c45750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561241a5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124705750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124b4576001600c60026101000a81548160ff021916908315150217905550612498612a40565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061256a5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561257457600090505b801561281e576000601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125da57506000600d60040154115b156126bc5761260a60646125fc600d6004015488612d2e90919063ffffffff16565b612da990919063ffffffff16565b9050600d60040154600d60070154826126239190613871565b61262d91906138fa565b6016600082825461263e919061392b565b92505081905550600d60040154600d600501548261265c9190613871565b61266691906138fa565b60156000828254612677919061392b565b92505081905550600d60040154600d60060154826126959190613871565b61269f91906138fa565b601760008282546126b0919061392b565b925050819055506127f9565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561271a57506000600d60000154115b156127f85761274a606461273c600d6000015488612d2e90919063ffffffff16565b612da990919063ffffffff16565b9050600d60000154600d60030154826127639190613871565b61276d91906138fa565b6016600082825461277e919061392b565b92505081905550600d60000154600d600101548261279c9190613871565b6127a691906138fa565b601560008282546127b7919061392b565b92505081905550600d60000154600d60020154826127d59190613871565b6127df91906138fa565b601760008282546127f0919061392b565b925050819055505b5b600081111561280e5761280d873083612896565b5b808561281a9190613d0d565b9450505b612829868686612896565b5050505b505050565b600083831115829061287a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612871919061326e565b60405180910390fd5b50600083856128899190613d0d565b9050809150509392505050565b61290181604051806060016040528060268152602001614124602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128329092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612994816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611da690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a33919061341b565b60405180910390a3505050565b6000612a4b30610f3b565b90506000601754601554601654612a62919061392b565b612a6c919061392b565b9050600080831480612a7e5750600082145b15612a8b57505050612d2c565b6014600b54612a9a9190613871565b831115612ab3576014600b54612ab09190613871565b92505b600060028360165486612ac69190613871565b612ad091906138fa565b612ada91906138fa565b90506000612af18286612df390919063ffffffff16565b90506000479050612b0182612e3d565b6000612b168247612df390919063ffffffff16565b90506000612b4187612b3360155485612d2e90919063ffffffff16565b612da990919063ffffffff16565b90506000612b6c88612b5e60175486612d2e90919063ffffffff16565b612da990919063ffffffff16565b905060008183612b7c919061392b565b84612b879190613d0d565b9050600060168190555060006015819055506000601781905550600087118015612bb15750600081115b15612bfa57612bc08782613089565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612bf1929190613d41565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612c3f9190613d0d565b604051612c4b90613d9b565b60006040518083038185875af1925050503d8060008114612c88576040519150601f19603f3d011682016040523d82523d6000602084013e612c8d565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612cd990613d9b565b60006040518083038185875af1925050503d8060008114612d16576040519150601f19603f3d011682016040523d82523d6000602084013e612d1b565b606091505b505080985050505050505050505050505b565b600080831415612d415760009050612da3565b60008284612d4f9190613871565b9050828482612d5e91906138fa565b14612d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9590613e22565b60405180910390fd5b809150505b92915050565b6000612deb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613172565b905092915050565b6000612e3583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612832565b905092915050565b6000600267ffffffffffffffff811115612e5a57612e59613e42565b5b604051908082528060200260200182016040528015612e885781602001602082028036833780820191505090505b5090503081600081518110612ea057612e9f613e71565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612f4057600080fd5b505afa158015612f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f789190613eb5565b81600181518110612f8c57612f8b613e71565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ff1307f000000000000000000000000000000000000000000000000000000000000000084611e0c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613053959493929190613fdb565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b6130b4307f000000000000000000000000000000000000000000000000000000000000000084611e0c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161311996959493929190614035565b6060604051808303818588803b15801561313257600080fd5b505af1158015613146573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061316b91906140ab565b5050505050565b600080831182906131b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b0919061326e565b60405180910390fd5b50600083856131c891906138fa565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561320f5780820151818401526020810190506131f4565b8381111561321e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613240826131d5565b61324a81856131e0565b935061325a8185602086016131f1565b61326381613224565b840191505092915050565b600060208201905081810360008301526132888184613235565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132c082613295565b9050919050565b6132d0816132b5565b81146132db57600080fd5b50565b6000813590506132ed816132c7565b92915050565b6000819050919050565b613306816132f3565b811461331157600080fd5b50565b600081359050613323816132fd565b92915050565b600080604083850312156133405761333f613290565b5b600061334e858286016132de565b925050602061335f85828601613314565b9150509250929050565b60008115159050919050565b61337e81613369565b82525050565b60006020820190506133996000830184613375565b92915050565b6000602082840312156133b5576133b4613290565b5b60006133c3848285016132de565b91505092915050565b600080604083850312156133e3576133e2613290565b5b60006133f185828601613314565b925050602061340285828601613314565b9150509250929050565b613415816132f3565b82525050565b6000602082019050613430600083018461340c565b92915050565b61343f81613369565b811461344a57600080fd5b50565b60008135905061345c81613436565b92915050565b60006020828403121561347857613477613290565b5b60006134868482850161344d565b91505092915050565b6000806000606084860312156134a8576134a7613290565b5b60006134b6868287016132de565b93505060206134c7868287016132de565b92505060406134d886828701613314565b9150509250925092565b600060ff82169050919050565b6134f8816134e2565b82525050565b600060208201905061351360008301846134ef565b92915050565b613522816132b5565b82525050565b600060208201905061353d6000830184613519565b92915050565b60006020828403121561355957613558613290565b5b600061356784828501613314565b91505092915050565b6000806040838503121561358757613586613290565b5b6000613595858286016132de565b92505060206135a68582860161344d565b9150509250929050565b60008060008060008060c087890312156135cd576135cc613290565b5b60006135db89828a01613314565b96505060206135ec89828a01613314565b95505060406135fd89828a01613314565b945050606061360e89828a01613314565b935050608061361f89828a01613314565b92505060a061363089828a01613314565b9150509295509295509295565b600061010082019050613653600083018b61340c565b613660602083018a61340c565b61366d604083018961340c565b61367a606083018861340c565b613687608083018761340c565b61369460a083018661340c565b6136a160c083018561340c565b6136ae60e083018461340c565b9998505050505050505050565b600080604083850312156136d2576136d1613290565b5b60006136e0858286016132de565b92505060206136f1858286016132de565b9150509250929050565b6000819050919050565b600061372061371b61371684613295565b6136fb565b613295565b9050919050565b600061373282613705565b9050919050565b600061374482613727565b9050919050565b61375481613739565b82525050565b600060208201905061376f600083018461374b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137bc57607f821691505b602082108114156137d0576137cf613775565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061380c6020836131e0565b9150613817826137d6565b602082019050919050565b6000602082019050818103600083015261383b816137ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061387c826132f3565b9150613887836132f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138c0576138bf613842565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613905826132f3565b9150613910836132f3565b9250826139205761391f6138cb565b5b828204905092915050565b6000613936826132f3565b9150613941836132f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561397657613975613842565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b60006139dd602a836131e0565b91506139e882613981565b604082019050919050565b60006020820190508181036000830152613a0c816139d0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a6f6026836131e0565b9150613a7a82613a13565b604082019050919050565b60006020820190508181036000830152613a9e81613a62565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613adb601b836131e0565b9150613ae682613aa5565b602082019050919050565b60006020820190508181036000830152613b0a81613ace565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613b476016836131e0565b9150613b5282613b11565b602082019050919050565b60006020820190508181036000830152613b7681613b3a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613bd96035836131e0565b9150613be482613b7d565b604082019050919050565b60006020820190508181036000830152613c0881613bcc565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613c6b6036836131e0565b9150613c7682613c0f565b604082019050919050565b60006020820190508181036000830152613c9a81613c5e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613cd76013836131e0565b9150613ce282613ca1565b602082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b6000613d18826132f3565b9150613d23836132f3565b925082821015613d3657613d35613842565b5b828203905092915050565b6000604082019050613d56600083018561340c565b613d63602083018461340c565b9392505050565b600081905092915050565b50565b6000613d85600083613d6a565b9150613d9082613d75565b600082019050919050565b6000613da682613d78565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0c6021836131e0565b9150613e1782613db0565b604082019050919050565b60006020820190508181036000830152613e3b81613dff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613eaf816132c7565b92915050565b600060208284031215613ecb57613eca613290565b5b6000613ed984828501613ea0565b91505092915050565b6000819050919050565b6000613f07613f02613efd84613ee2565b6136fb565b6132f3565b9050919050565b613f1781613eec565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613f52816132b5565b82525050565b6000613f648383613f49565b60208301905092915050565b6000602082019050919050565b6000613f8882613f1d565b613f928185613f28565b9350613f9d83613f39565b8060005b83811015613fce578151613fb58882613f58565b9750613fc083613f70565b925050600181019050613fa1565b5085935050505092915050565b600060a082019050613ff0600083018861340c565b613ffd6020830187613f0e565b818103604083015261400f8186613f7d565b905061401e6060830185613519565b61402b608083018461340c565b9695505050505050565b600060c08201905061404a6000830189613519565b614057602083018861340c565b6140646040830187613f0e565b6140716060830186613f0e565b61407e6080830185613519565b61408b60a083018461340c565b979650505050505050565b6000815190506140a5816132fd565b92915050565b6000806000606084860312156140c4576140c3613290565b5b60006140d286828701614096565b93505060206140e386828701614096565b92505060406140f486828701614096565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220fd5462dd5f87482cc9206077da230f93f57abde4feb44200ee408c543c29b2ad64736f6c63430008090033
Deployed Bytecode
0x6080604052600436106102295760003560e01c80638da5cb5b11610123578063c18bc195116100ab578063e16830a81161006f578063e16830a814610841578063ef8700e51461086a578063f2fde38b14610895578063f5b3c3bf146108be578063f887ea40146108fb57610230565b8063c18bc19514610755578063cc2ffe7c1461077e578063d212a69a146107a9578063d3f6a157146107db578063dd62ed3e1461080457610230565b8063a457c2d7116100f2578063a457c2d71461065e578063a9059cbb1461069b578063b8863115146106d8578063c024666814610703578063c16dd4a41461072c57610230565b80638da5cb5b146105a257806395d89b41146105cd57806396880b17146105f8578063992c58e41461063557610230565b806339509351116101b15780636ddd1713116101755780636ddd1713146104e357806370a082311461050e578063715018a61461054b578063751039fc146105625780637571336a1461057957610230565b806339509351146103ea5780633defb9621461042757806349bd5a5e1461043e5780634fbee19314610469578063555467a1146104a657610230565b806318160ddd116101f857806318160ddd146103035780631a8145bb1461032e5780631c6e8a751461035957806323b872dd14610382578063313ce567146103bf57610230565b806306fdde0314610235578063095ea7b31461026057806310d5de531461029d57806311a582c3146102da57610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610926565b604051610257919061326e565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613329565b6109b8565b6040516102949190613384565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061339f565b6109d6565b6040516102d19190613384565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc91906133cc565b6109f6565b005b34801561030f57600080fd5b50610318610add565b604051610325919061341b565b60405180910390f35b34801561033a57600080fd5b50610343610ae7565b604051610350919061341b565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190613462565b610aed565b005b34801561038e57600080fd5b506103a960048036038101906103a4919061348f565b610ba1565b6040516103b69190613384565b60405180910390f35b3480156103cb57600080fd5b506103d4610c7a565b6040516103e191906134fe565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190613329565b610c83565b60405161041e9190613384565b60405180910390f35b34801561043357600080fd5b5061043c610d36565b005b34801561044a57600080fd5b50610453610e05565b6040516104609190613528565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b919061339f565b610e29565b60405161049d9190613384565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190613543565b610e7f565b6040516104da9190613384565b60405180910390f35b3480156104ef57600080fd5b506104f8610f28565b6040516105059190613384565b60405180910390f35b34801561051a57600080fd5b506105356004803603810190610530919061339f565b610f3b565b604051610542919061341b565b60405180910390f35b34801561055757600080fd5b50610560610f83565b005b34801561056e57600080fd5b506105776110db565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613570565b61118b565b005b3480156105ae57600080fd5b506105b761127d565b6040516105c49190613528565b60405180910390f35b3480156105d957600080fd5b506105e26112a7565b6040516105ef919061326e565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a919061339f565b611339565b60405161062c9190613384565b60405180910390f35b34801561064157600080fd5b5061065c600480360381019061065791906135b0565b611359565b005b34801561066a57600080fd5b5061068560048036038101906106809190613329565b611492565b6040516106929190613384565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190613329565b61155f565b6040516106cf9190613384565b60405180910390f35b3480156106e457600080fd5b506106ed61157d565b6040516106fa9190613384565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190613570565b611590565b005b34801561073857600080fd5b50610753600480360381019061074e9190613570565b611682565b005b34801561076157600080fd5b5061077c60048036038101906107779190613543565b611803565b005b34801561078a57600080fd5b506107936118c3565b6040516107a0919061341b565b60405180910390f35b3480156107b557600080fd5b506107be6118c9565b6040516107d298979695949392919061363d565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd91906136bb565b6118ff565b005b34801561081057600080fd5b5061082b600480360381019061082691906136bb565b611a1c565b604051610838919061341b565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190613570565b611aa3565b005b34801561087657600080fd5b5061087f611b95565b60405161088c919061341b565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b7919061339f565b611b9b565b005b3480156108ca57600080fd5b506108e560048036038101906108e0919061339f565b611d62565b6040516108f29190613384565b60405180910390f35b34801561090757600080fd5b50610910611d82565b60405161091d919061375a565b60405180910390f35b606060038054610935906137a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906137a4565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b5050505050905090565b60006109cc6109c5611e04565b8484611e0c565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b6109fe611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490613822565b60405180910390fd5b6103e882610a99610add565b610aa39190613871565b610aad91906138fa565b6008819055506103e881610abf610add565b610ac99190613871565b610ad391906138fa565b6009819055505050565b6000600254905090565b60165481565b610af5611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b90613822565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6000610bae848484611ef7565b610c6f84610bba611e04565b610c6a8560405180606001604052806028815260200161414a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c20611e04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128329092919063ffffffff16565b611e0c565b600190509392505050565b60006012905090565b6000610d2c610c90611e04565b84610d278560016000610ca1611e04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611da690919063ffffffff16565b611e0c565b6001905092915050565b610d3e611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc490613822565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550565b7f0000000000000000000000005c8dd80f97c1007c004516d5c8e22a275b29001281565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610e89611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f90613822565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f8b611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190613822565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6110e3611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116990613822565b60405180910390fd5b61117e6103e8806109f6565b6111896103e8611803565b565b611193611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121990613822565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112b6906137a4565b80601f01602080910402602001604051908101604052809291908181526020018280546112e2906137a4565b801561132f5780601f106113045761010080835404028352916020019161132f565b820191906000526020600020905b81548152906001019060200180831161131257829003601f168201915b5050505050905090565b601a6020528060005260406000206000915054906101000a900460ff1681565b611361611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e790613822565b60405180910390fd5b85600d6001018190555084600d6003018190555083600d60020181905550600d60020154600d60030154600d6001015461142a919061392b565b611434919061392b565b600d6000018190555082600d6005018190555081600d6007018190555080600d60060181905550600d60060154600d60070154600d60050154611477919061392b565b611481919061392b565b600d60040181905550505050505050565b600061155561149f611e04565b84611550856040518060600160405280602581526020016140ff60259139600160006114c9611e04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128329092919063ffffffff16565b611e0c565b6001905092915050565b600061157361156c611e04565b8484611ef7565b6001905092915050565b600c60029054906101000a900460ff1681565b611598611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90613822565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61168a611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171090613822565b60405180910390fd5b7f0000000000000000000000005c8dd80f97c1007c004516d5c8e22a275b29001273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f906139f3565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61180b611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190613822565b60405180910390fd5b6103e8816118a6610add565b6118b09190613871565b6118ba91906138fa565b600a8190555050565b60155481565b600d8060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b611907611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90613822565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611aab611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190613822565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611ba3611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2990613822565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9990613a85565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000808284611db5919061392b565b905083811015611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190613af1565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611eea919061341b565b60405180910390a3505050565b6000811415611f1157611f0c83836000612896565b61282d565b611f1961127d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f875750611f5761127d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fa05750600c60029054906101000a900460ff16155b1561232657600c60009054906101000a900460ff1661209a57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061205a5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090613b5d565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561213d5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561218c57600854811115612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e90613bef565b60405180910390fd5b61227b565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561222f5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561227a57600954811115612279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227090613c81565b60405180910390fd5b5b5b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661232557600a546122d883610f3b565b826122e3919061392b565b1115612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90613ced565b60405180910390fd5b5b5b600061233130610f3b565b90506000600b5482101590508080156123565750600c60019054906101000a900460ff165b801561236f5750600c60029054906101000a900460ff16155b80156123c45750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561241a5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124705750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124b4576001600c60026101000a81548160ff021916908315150217905550612498612a40565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061256a5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561257457600090505b801561281e576000601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125da57506000600d60040154115b156126bc5761260a60646125fc600d6004015488612d2e90919063ffffffff16565b612da990919063ffffffff16565b9050600d60040154600d60070154826126239190613871565b61262d91906138fa565b6016600082825461263e919061392b565b92505081905550600d60040154600d600501548261265c9190613871565b61266691906138fa565b60156000828254612677919061392b565b92505081905550600d60040154600d60060154826126959190613871565b61269f91906138fa565b601760008282546126b0919061392b565b925050819055506127f9565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561271a57506000600d60000154115b156127f85761274a606461273c600d6000015488612d2e90919063ffffffff16565b612da990919063ffffffff16565b9050600d60000154600d60030154826127639190613871565b61276d91906138fa565b6016600082825461277e919061392b565b92505081905550600d60000154600d600101548261279c9190613871565b6127a691906138fa565b601560008282546127b7919061392b565b92505081905550600d60000154600d60020154826127d59190613871565b6127df91906138fa565b601760008282546127f0919061392b565b925050819055505b5b600081111561280e5761280d873083612896565b5b808561281a9190613d0d565b9450505b612829868686612896565b5050505b505050565b600083831115829061287a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612871919061326e565b60405180910390fd5b50600083856128899190613d0d565b9050809150509392505050565b61290181604051806060016040528060268152602001614124602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128329092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612994816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611da690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a33919061341b565b60405180910390a3505050565b6000612a4b30610f3b565b90506000601754601554601654612a62919061392b565b612a6c919061392b565b9050600080831480612a7e5750600082145b15612a8b57505050612d2c565b6014600b54612a9a9190613871565b831115612ab3576014600b54612ab09190613871565b92505b600060028360165486612ac69190613871565b612ad091906138fa565b612ada91906138fa565b90506000612af18286612df390919063ffffffff16565b90506000479050612b0182612e3d565b6000612b168247612df390919063ffffffff16565b90506000612b4187612b3360155485612d2e90919063ffffffff16565b612da990919063ffffffff16565b90506000612b6c88612b5e60175486612d2e90919063ffffffff16565b612da990919063ffffffff16565b905060008183612b7c919061392b565b84612b879190613d0d565b9050600060168190555060006015819055506000601781905550600087118015612bb15750600081115b15612bfa57612bc08782613089565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612bf1929190613d41565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612c3f9190613d0d565b604051612c4b90613d9b565b60006040518083038185875af1925050503d8060008114612c88576040519150601f19603f3d011682016040523d82523d6000602084013e612c8d565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612cd990613d9b565b60006040518083038185875af1925050503d8060008114612d16576040519150601f19603f3d011682016040523d82523d6000602084013e612d1b565b606091505b505080985050505050505050505050505b565b600080831415612d415760009050612da3565b60008284612d4f9190613871565b9050828482612d5e91906138fa565b14612d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9590613e22565b60405180910390fd5b809150505b92915050565b6000612deb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613172565b905092915050565b6000612e3583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612832565b905092915050565b6000600267ffffffffffffffff811115612e5a57612e59613e42565b5b604051908082528060200260200182016040528015612e885781602001602082028036833780820191505090505b5090503081600081518110612ea057612e9f613e71565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612f4057600080fd5b505afa158015612f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f789190613eb5565b81600181518110612f8c57612f8b613e71565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ff1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e0c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613053959493929190613fdb565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b6130b4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e0c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161311996959493929190614035565b6060604051808303818588803b15801561313257600080fd5b505af1158015613146573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061316b91906140ab565b5050505050565b600080831182906131b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b0919061326e565b60405180910390fd5b50600083856131c891906138fa565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561320f5780820151818401526020810190506131f4565b8381111561321e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613240826131d5565b61324a81856131e0565b935061325a8185602086016131f1565b61326381613224565b840191505092915050565b600060208201905081810360008301526132888184613235565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132c082613295565b9050919050565b6132d0816132b5565b81146132db57600080fd5b50565b6000813590506132ed816132c7565b92915050565b6000819050919050565b613306816132f3565b811461331157600080fd5b50565b600081359050613323816132fd565b92915050565b600080604083850312156133405761333f613290565b5b600061334e858286016132de565b925050602061335f85828601613314565b9150509250929050565b60008115159050919050565b61337e81613369565b82525050565b60006020820190506133996000830184613375565b92915050565b6000602082840312156133b5576133b4613290565b5b60006133c3848285016132de565b91505092915050565b600080604083850312156133e3576133e2613290565b5b60006133f185828601613314565b925050602061340285828601613314565b9150509250929050565b613415816132f3565b82525050565b6000602082019050613430600083018461340c565b92915050565b61343f81613369565b811461344a57600080fd5b50565b60008135905061345c81613436565b92915050565b60006020828403121561347857613477613290565b5b60006134868482850161344d565b91505092915050565b6000806000606084860312156134a8576134a7613290565b5b60006134b6868287016132de565b93505060206134c7868287016132de565b92505060406134d886828701613314565b9150509250925092565b600060ff82169050919050565b6134f8816134e2565b82525050565b600060208201905061351360008301846134ef565b92915050565b613522816132b5565b82525050565b600060208201905061353d6000830184613519565b92915050565b60006020828403121561355957613558613290565b5b600061356784828501613314565b91505092915050565b6000806040838503121561358757613586613290565b5b6000613595858286016132de565b92505060206135a68582860161344d565b9150509250929050565b60008060008060008060c087890312156135cd576135cc613290565b5b60006135db89828a01613314565b96505060206135ec89828a01613314565b95505060406135fd89828a01613314565b945050606061360e89828a01613314565b935050608061361f89828a01613314565b92505060a061363089828a01613314565b9150509295509295509295565b600061010082019050613653600083018b61340c565b613660602083018a61340c565b61366d604083018961340c565b61367a606083018861340c565b613687608083018761340c565b61369460a083018661340c565b6136a160c083018561340c565b6136ae60e083018461340c565b9998505050505050505050565b600080604083850312156136d2576136d1613290565b5b60006136e0858286016132de565b92505060206136f1858286016132de565b9150509250929050565b6000819050919050565b600061372061371b61371684613295565b6136fb565b613295565b9050919050565b600061373282613705565b9050919050565b600061374482613727565b9050919050565b61375481613739565b82525050565b600060208201905061376f600083018461374b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137bc57607f821691505b602082108114156137d0576137cf613775565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061380c6020836131e0565b9150613817826137d6565b602082019050919050565b6000602082019050818103600083015261383b816137ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061387c826132f3565b9150613887836132f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138c0576138bf613842565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613905826132f3565b9150613910836132f3565b9250826139205761391f6138cb565b5b828204905092915050565b6000613936826132f3565b9150613941836132f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561397657613975613842565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b60006139dd602a836131e0565b91506139e882613981565b604082019050919050565b60006020820190508181036000830152613a0c816139d0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a6f6026836131e0565b9150613a7a82613a13565b604082019050919050565b60006020820190508181036000830152613a9e81613a62565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613adb601b836131e0565b9150613ae682613aa5565b602082019050919050565b60006020820190508181036000830152613b0a81613ace565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613b476016836131e0565b9150613b5282613b11565b602082019050919050565b60006020820190508181036000830152613b7681613b3a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613bd96035836131e0565b9150613be482613b7d565b604082019050919050565b60006020820190508181036000830152613c0881613bcc565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613c6b6036836131e0565b9150613c7682613c0f565b604082019050919050565b60006020820190508181036000830152613c9a81613c5e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613cd76013836131e0565b9150613ce282613ca1565b602082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b6000613d18826132f3565b9150613d23836132f3565b925082821015613d3657613d35613842565b5b828203905092915050565b6000604082019050613d56600083018561340c565b613d63602083018461340c565b9392505050565b600081905092915050565b50565b6000613d85600083613d6a565b9150613d9082613d75565b600082019050919050565b6000613da682613d78565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0c6021836131e0565b9150613e1782613db0565b604082019050919050565b60006020820190508181036000830152613e3b81613dff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613eaf816132c7565b92915050565b600060208284031215613ecb57613eca613290565b5b6000613ed984828501613ea0565b91505092915050565b6000819050919050565b6000613f07613f02613efd84613ee2565b6136fb565b6132f3565b9050919050565b613f1781613eec565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613f52816132b5565b82525050565b6000613f648383613f49565b60208301905092915050565b6000602082019050919050565b6000613f8882613f1d565b613f928185613f28565b9350613f9d83613f39565b8060005b83811015613fce578151613fb58882613f58565b9750613fc083613f70565b925050600181019050613fa1565b5085935050505092915050565b600060a082019050613ff0600083018861340c565b613ffd6020830187613f0e565b818103604083015261400f8186613f7d565b905061401e6060830185613519565b61402b608083018461340c565b9695505050505050565b600060c08201905061404a6000830189613519565b614057602083018861340c565b6140646040830187613f0e565b6140716060830186613f0e565b61407e6080830185613519565b61408b60a083018461340c565b979650505050505050565b6000815190506140a5816132fd565b92915050565b6000806000606084860312156140c4576140c3613290565b5b60006140d286828701614096565b93505060206140e386828701614096565b92505060406140f486828701614096565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220fd5462dd5f87482cc9206077da230f93f57abde4feb44200ee408c543c29b2ad64736f6c63430008090033
Deployed Bytecode Sourcemap
20767:12523:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4350:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6510:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22150:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25222:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5467:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21954:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25686:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7160:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5310:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7923:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24882:104;;;;;;;;;;;;;:::i;:::-;;20891:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27519:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25056:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21268:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5637:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13447:148;;;;;;;;;;;;;:::i;:::-;;26980:129;;;;;;;;;;;;;:::i;:::-;;26828:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12806:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4568:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22220:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25795:731;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8643:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5976:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21306:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26538:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27117:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25444:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21915:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21641:265;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;27321:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6213:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26676:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21994:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13750:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22436:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20842;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4350:99;4403:13;4436:5;4429:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4350:99;:::o;6510:168::-;6592:4;6609:39;6618:12;:10;:12::i;:::-;6632:7;6641:6;6609:8;:39::i;:::-;6666:4;6659:11;;6510:168;;;;:::o;22150:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;25222:214::-;13027:12;:10;:12::i;:::-;13017:22;;:6;;;;;;;;;;;:22;;;13009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25362:4:::1;25349:9;25333:13;:11;:13::i;:::-;:25;;;;:::i;:::-;25332:34;;;;:::i;:::-;25317:12;:49;;;;25424:4;25410:10;25394:13;:11;:13::i;:::-;:26;;;;:::i;:::-;25393:35;;;;:::i;:::-;25377:13;:51;;;;25222:214:::0;;:::o;5467:107::-;5527:7;5554:12;;5547:19;;5467:107;:::o;21954:33::-;;;;:::o;25686:101::-;13027:12;:10;:12::i;:::-;13017:22;;:6;;;;;;;;;;;:22;;;13009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25772:7:::1;25758:11;;:21;;;;;;;;;;;;;;;;;;25686:101:::0;:::o;7160:354::-;7299:4;7316:36;7326:6;7334:9;7345:6;7316:9;:36::i;:::-;7363:121;7372:6;7380:12;:10;:12::i;:::-;7394:89;7432:6;7394:89;;;;;;;;;;;;;;;;;:11;:19;7406:6;7394:19;;;;;;;;;;;;;;;:33;7414:12;:10;:12::i;:::-;7394:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7363:8;:121::i;:::-;7502:4;7495:11;;7160:354;;;;;:::o;5310:92::-;5367:5;5392:2;5385:9;;5310:92;:::o;7923:217::-;8010:4;8027:83;8036:12;:10;:12::i;:::-;8050:7;8059:50;8098:10;8059:11;:25;8071:12;:10;:12::i;:::-;8059:25;;;;;;;;;;;;;;;:34;8085:7;8059:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8027:8;:83::i;:::-;8128:4;8121:11;;7923:217;;;;:::o;24882:104::-;13027:12;:10;:12::i;:::-;13017:22;;:6;;;;;;;;;;;:22;;;13009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24945:4:::1;24933:9;;:16;;;;;;;;;;;;;;;;;;24974:4;24960:11;;:18;;;;;;;;;;;;;;;;;;24882:104::o:0;20891:38::-;;;:::o;27519:125::-;27584:4;27608:19;:28;27628:7;27608:28;;;;;;;;;;;;;;;;;;;;;;;;;27601:35;;27519:125;;;:::o;25056:158::-;25137:4;13027:12;:10;:12::i;:::-;13017:22;;:6;;;;;;;;;;;:22;;;13009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25175:9:::1;25153:19;:31;;;;25202:4;25195:11;;25056:158:::0;;;:::o;21268:31::-;;;;;;;;;;;;;:::o;5637:126::-;5710:7;5737:9;:18;5747:7;5737:18;;;;;;;;;;;;;;;;5730:25;;5637:126;;;:::o;13447:148::-;13027:12;:10;:12::i;:::-;13017:22;;:6;;;;;;;;;;;:22;;;13009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13554:1:::1;13517:40;;13538:6;;;;;;;;;;;13517:40;;;;;;;;;;;;13585:1;13568:6;;:19;;;;;;;;;;;;;;;;;;13447:148::o:0;26980:129::-;13027:12;:10;:12::i;:::-;13017:22;;:6;;;;;;;;;;;:22;;;13009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27034:29:::1;27053:4;27058::::0;27034:18:::1;:29::i;:::-;27074:27;27096:4;27074:21;:27::i;:::-;26980:129::o:0;26828:144::-;13027:12;:10;:12::i;:::-;13017:22;;:6;;;;;;;;;;;:22;;;13009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26960:4:::1;26918:31;:39;26950:6;26918:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;26828:144:::0;;:::o;12806:78::-;12843:7;12870:6;;;;;;;;;;;12863:13;;12806:78;:::o;4568:103::-;4623:13;4656:7;4649:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4568:103;:::o;22220:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;25795:731::-;13027:12;:10;:12::i;:::-;13017:22;;:6;;;;;;;;;;;:22;;;13009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26026:15:::1;26003:5;:20;;:38;;;;26076:16;26052:5;:21;;:40;;;;26129:18;26103:5;:23;;:44;;;;26226:5;:23;;;26202:5;:21;;;26179:5;:20;;;:44;;;;:::i;:::-;:70;;;;:::i;:::-;26158:5;:18;;:91;;;;26286:16;26262:5;:21;;:40;;;;26338:17;26313:5;:22;;:42;;;;26393:19;26366:5;:24;;:46;;;;26494:5;:24;;;26469:5;:22;;;26445:5;:21;;;:46;;;;:::i;:::-;:73;;;;:::i;:::-;26423:5;:19;;:95;;;;25795:731:::0;;;;;;:::o;8643:268::-;8735:4;8752:129;8761:12;:10;:12::i;:::-;8775:7;8784:96;8823:15;8784:96;;;;;;;;;;;;;;;;;:11;:25;8796:12;:10;:12::i;:::-;8784:25;;;;;;;;;;;;;;;:34;8810:7;8784:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8752:8;:129::i;:::-;8899:4;8892:11;;8643:268;;;;:::o;5976:174::-;6061:4;6078:42;6088:12;:10;:12::i;:::-;6102:9;6113:6;6078:9;:42::i;:::-;6138:4;6131:11;;5976:174;;;;:::o;21306:22::-;;;;;;;;;;;;;:::o;26538:132::-;13027:12;:10;:12::i;:::-;13017:22;;:6;;;;;;;;;;;:22;;;13009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26654:8:::1;26623:19;:28;26643:7;26623:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26538:132:::0;;:::o;27117:196::-;13027:12;:10;:12::i;:::-;13017:22;;:6;;;;;;;;;;;:22;;;13009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27210:13:::1;27202:21;;:4;:21;;;;27194:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27300:5;27281:10;:16;27292:4;27281:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;27117:196:::0;;:::o;25444:146::-;13027:12;:10;:12::i;:::-;13017:22;;:6;;;;;;;;;;;:22;;;13009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25578:4:::1;25561:13;25545;:11;:13::i;:::-;:29;;;;:::i;:::-;25544:38;;;;:::i;:::-;25526:15;:56;;;;25444:146:::0;:::o;21915:32::-;;;;:::o;21641:265::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27321:190::-;13027:12;:10;:12::i;:::-;13017:22;;:6;;;;;;;;;;;:22;;;13009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27439:15:::1;27422:14;;:32;;;;;;;;;;;;;;;;;;27485:18;27465:17;;:38;;;;;;;;;;;;;;;;;;27321:190:::0;;:::o;6213:150::-;6301:7;6328:11;:18;6340:5;6328:18;;;;;;;;;;;;;;;:27;6347:7;6328:27;;;;;;;;;;;;;;;;6321:34;;6213:150;;;;:::o;26676:146::-;13027:12;:10;:12::i;:::-;13017:22;;:6;;;;;;;;;;;:22;;;13009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26806:8:::1;26768:26;:35;26795:7;26768:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;26676:146:::0;;:::o;21994:35::-;;;;:::o;13750:244::-;13027:12;:10;:12::i;:::-;13017:22;;:6;;;;;;;;;;;:22;;;13009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13859:1:::1;13839:22;;:8;:22;;;;13831:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13949:8;13920:38;;13941:6;;;;;;;;;;;13920:38;;;;;;;;;;;;13978:8;13969:6;;:17;;;;;;;;;;;;;;;;;;13750:244:::0;:::o;22436:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;20842:::-;;;:::o;11071:180::-;11128:7;11148:9;11164:1;11160;:5;;;;:::i;:::-;11148:17;;11189:1;11184;:6;;11176:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11242:1;11235:8;;;11071:180;;;;:::o;3423:97::-;3475:7;3502:10;3495:17;;3423:97;:::o;10806:220::-;10964:6;10934:11;:18;10946:5;10934:18;;;;;;;;;;;;;;;:27;10953:7;10934:27;;;;;;;;;;;;;;;:36;;;;11002:7;10986:32;;10995:5;10986:32;;;11011:6;10986:32;;;;;;:::i;:::-;;;;;;;;10806:220;;;:::o;27652:3099::-;27809:1;27799:6;:11;27795:102;;;27827:37;27843:6;27851:9;27862:1;27827:15;:37::i;:::-;27879:7;;27795:102;27937:7;:5;:7::i;:::-;27927:17;;:6;:17;;;;:54;;;;;27974:7;:5;:7::i;:::-;27961:20;;:9;:20;;;;27927:54;:82;;;;;27999:10;;;;;;;;;;;27998:11;27927:82;27909:888;;;28043:9;;;;;;;;;;;28038:147;;28081:19;:27;28101:6;28081:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;28112:19;:30;28132:9;28112:30;;;;;;;;;;;;;;;;;;;;;;;;;28081:61;28073:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;28038:147;28203:10;:18;28214:6;28203:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;28226:31;:42;28258:9;28226:42;;;;;;;;;;;;;;;;;;;;;;;;;28225:43;28203:65;28199:410;;;28307:12;;28297:6;:22;;28289:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;28199:410;;;28417:10;:21;28428:9;28417:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;28443:31;:39;28475:6;28443:39;;;;;;;;;;;;;;;;;;;;;;;;;28442:40;28417:65;28413:196;;;28521:13;;28511:6;:23;;28503:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;28413:196;28199:410;28630:26;:37;28657:9;28630:37;;;;;;;;;;;;;;;;;;;;;;;;;28625:159;;28729:15;;28705:20;28715:9;28705;:20::i;:::-;28696:6;:29;;;;:::i;:::-;:48;;28688:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28625:159;27909:888;28810:28;28841:24;28859:4;28841:9;:24::i;:::-;28810:55;;28879:12;28918:19;;28894:20;:43;;28879:58;;28968:7;:35;;;;;28992:11;;;;;;;;;;;28968:35;:63;;;;;29021:10;;;;;;;;;;;29020:11;28968:63;:101;;;;;29048:10;:21;29059:9;29048:21;;;;;;;;;;;;;;;;;;;;;;;;;28968:101;:146;;;;;29087:19;:27;29107:6;29087:27;;;;;;;;;;;;;;;;;;;;;;;;;29086:28;28968:146;:194;;;;;29132:19;:30;29152:9;29132:30;;;;;;;;;;;;;;;;;;;;;;;;;29131:31;28968:194;28950:326;;;29202:4;29189:10;;:17;;;;;;;;;;;;;;;;;;29221:10;:8;:10::i;:::-;29259:5;29246:10;;:18;;;;;;;;;;;;;;;;;;28950:326;29289:12;29305:10;;;;;;;;;;;29304:11;29289:26;;29417:19;:27;29437:6;29417:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;29448:19;:30;29468:9;29448:30;;;;;;;;;;;;;;;;;;;;;;;;;29417:61;29413:109;;;29505:5;29495:15;;29413:109;29623:7;29619:1070;;;29647:12;29681:10;:21;29692:9;29681:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;29728:1;29706:5;:19;;;:23;29681:48;29677:859;;;29757:40;29793:3;29757:31;29768:5;:19;;;29757:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;29750:47;;29870:5;:19;;;29845:5;:22;;;29838:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;29816:18;;:73;;;;;;;:::i;:::-;;;;;;;;29960:5;:19;;;29936:5;:21;;;29929:4;:28;;;;:::i;:::-;:50;;;;:::i;:::-;29908:17;;:71;;;;;;;:::i;:::-;;;;;;;;30056:5;:19;;;30029:5;:24;;;30022:4;:31;;;;:::i;:::-;:53;;;;:::i;:::-;29998:20;;:77;;;;;;;:::i;:::-;;;;;;;;29677:859;;;30137:10;:18;30148:6;30137:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;30180:1;30159:5;:18;;;:22;30137:44;30133:403;;;30209:39;30244:3;30209:30;30220:5;:18;;;30209:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;30202:46;;30320:5;:18;;;30296:5;:21;;;30289:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;30267:18;;:71;;;;;;;:::i;:::-;;;;;;;;30408:5;:18;;;30385:5;:20;;;30378:4;:27;;;;:::i;:::-;:48;;;;:::i;:::-;30357:17;;:69;;;;;;;:::i;:::-;;;;;;;;30502:5;:18;;;30476:5;:23;;;30469:4;:30;;;;:::i;:::-;:51;;;;:::i;:::-;30445:20;;:75;;;;;;;:::i;:::-;;;;;;;;30133:403;29677:859;30563:1;30556:4;:8;30552:93;;;30585:44;30601:6;30617:4;30624;30585:15;:44::i;:::-;30552:93;30671:4;30661:14;;;;;:::i;:::-;;;29632:1057;29619:1070;30701:42;30717:6;30725:9;30736:6;30701:15;:42::i;:::-;27774:2977;;;27652:3099;;;;:::o;11412:191::-;11497:7;11530:1;11525;:6;;11533:12;11517:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11557:9;11573:1;11569;:5;;;;:::i;:::-;11557:17;;11594:1;11587:8;;;11412:191;;;;;:::o;9401:358::-;9563:71;9585:6;9563:71;;;;;;;;;;;;;;;;;:9;:17;9573:6;9563:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9543:9;:17;9553:6;9543:17;;;;;;;;;;;;;;;:91;;;;9668:32;9693:6;9668:9;:20;9678:9;9668:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9645:9;:20;9655:9;9645:20;;;;;;;;;;;;;;;:55;;;;9733:9;9716:35;;9725:6;9716:35;;;9744:6;9716:35;;;;;;:::i;:::-;;;;;;;;9401:358;;;:::o;31679:1606::-;31718:28;31749:24;31767:4;31749:9;:24::i;:::-;31718:55;;31784:14;31842:20;;31822:17;;31801:18;;:38;;;;:::i;:::-;:61;;;;:::i;:::-;31784:78;;31873:12;31926:1;31902:20;:25;:40;;;;31941:1;31931:6;:11;31902:40;31898:57;;;31946:7;;;;;31898:57;32016:2;31994:19;;:24;;;;:::i;:::-;31971:20;:47;31967:127;;;32080:2;32058:19;;:24;;;;:::i;:::-;32035:47;;31967:127;32155:23;32234:1;32225:6;32204:18;;32181:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;32155:80;;32246:26;32275:41;32300:15;32275:20;:24;;:41;;;;:::i;:::-;32246:70;;32330:25;32358:21;32330:49;;32392:36;32409:18;32392:16;:36::i;:::-;32443:18;32464:44;32490:17;32464:21;:25;;:44;;;;:::i;:::-;32443:65;;32522:22;32547:45;32585:6;32547:33;32562:17;;32547:10;:14;;:33;;;;:::i;:::-;:37;;:45;;;;:::i;:::-;32522:70;;32603:25;32631:48;32672:6;32631:36;32646:20;;32631:10;:14;;:36;;;;:::i;:::-;:40;;:48;;;;:::i;:::-;32603:76;;32690:23;32747:17;32730:14;:34;;;;:::i;:::-;32716:10;:49;;;;:::i;:::-;32690:75;;32801:1;32780:18;:22;;;;32833:1;32813:17;:21;;;;32868:1;32845:20;:24;;;;32906:1;32888:15;:19;:42;;;;;32929:1;32911:15;:19;32888:42;32884:192;;;32947:46;32960:15;32977;32947:12;:46::i;:::-;33013:51;33028:18;33048:15;33013:51;;;;;;;:::i;:::-;;;;;;;;32884:192;33109:17;;;;;;;;;;;33101:31;;33166:14;33142:21;:38;;;;:::i;:::-;33101:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33088:100;;;;;33220:14;;;;;;;;;;;33212:28;;33249:21;33212:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33199:78;;;;;31707:1578;;;;;;;;;;31679:1606;:::o;11611:256::-;11668:7;11703:1;11698;:6;11694:47;;;11728:1;11721:8;;;;11694:47;11754:9;11770:1;11766;:5;;;;:::i;:::-;11754:17;;11799:1;11794;11790;:5;;;;:::i;:::-;:10;11782:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;11858:1;11851:8;;;11611:256;;;;;:::o;11878:131::-;11935:7;11962:39;11966:1;11969;11962:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11955:46;;11878:131;;;;:::o;11264:135::-;11321:7;11348:43;11352:1;11355;11348:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11341:50;;11264:135;;;;:::o;30759:554::-;30883:21;30921:1;30907:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30883:40;;30952:4;30934;30939:1;30934:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30978:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30968:4;30973:1;30968:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31004:49;31021:4;31036:6;31045:7;31004:8;:49::i;:::-;31092:6;:57;;;31164:7;31186:1;31230:4;31257;31277:15;31092:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30810:503;30759:554;:::o;31321:350::-;31465:49;31482:4;31497:6;31506:7;31465:8;:49::i;:::-;31557:6;:22;;;31588:9;31609:4;31616:7;31625:1;31628;31640:4;31647:15;31557:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31321:350;;:::o;12021:277::-;12106:7;12138:1;12134;:5;12141:12;12126:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12165:9;12181:1;12177;:5;;;;:::i;:::-;12165:17;;12289:1;12282:8;;;12021: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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:474::-;3897:6;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;3829:474;;;;;:::o;4309:118::-;4396:24;4414:5;4396:24;:::i;:::-;4391:3;4384:37;4309:118;;:::o;4433:222::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:71;4645:1;4634:9;4630:17;4621:6;4577:71;:::i;:::-;4433:222;;;;:::o;4661:116::-;4731:21;4746:5;4731:21;:::i;:::-;4724:5;4721:32;4711:60;;4767:1;4764;4757:12;4711:60;4661:116;:::o;4783:133::-;4826:5;4864:6;4851:20;4842:29;;4880:30;4904:5;4880:30;:::i;:::-;4783:133;;;;:::o;4922:323::-;4978:6;5027:2;5015:9;5006:7;5002:23;4998:32;4995:119;;;5033:79;;:::i;:::-;4995:119;5153:1;5178:50;5220:7;5211:6;5200:9;5196:22;5178:50;:::i;:::-;5168:60;;5124:114;4922:323;;;;:::o;5251:619::-;5328:6;5336;5344;5393:2;5381:9;5372:7;5368:23;5364:32;5361:119;;;5399:79;;:::i;:::-;5361:119;5519:1;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5490:117;5646:2;5672:53;5717:7;5708:6;5697:9;5693:22;5672:53;:::i;:::-;5662:63;;5617:118;5774:2;5800:53;5845:7;5836:6;5825:9;5821:22;5800:53;:::i;:::-;5790:63;;5745:118;5251:619;;;;;:::o;5876:86::-;5911:7;5951:4;5944:5;5940:16;5929:27;;5876:86;;;:::o;5968:112::-;6051:22;6067:5;6051:22;:::i;:::-;6046:3;6039:35;5968:112;;:::o;6086:214::-;6175:4;6213:2;6202:9;6198:18;6190:26;;6226:67;6290:1;6279:9;6275:17;6266:6;6226:67;:::i;:::-;6086:214;;;;:::o;6306:118::-;6393:24;6411:5;6393:24;:::i;:::-;6388:3;6381:37;6306:118;;:::o;6430:222::-;6523:4;6561:2;6550:9;6546:18;6538:26;;6574:71;6642:1;6631:9;6627:17;6618:6;6574:71;:::i;:::-;6430:222;;;;:::o;6658:329::-;6717:6;6766:2;6754:9;6745:7;6741:23;6737:32;6734:119;;;6772:79;;:::i;:::-;6734:119;6892:1;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6863:117;6658:329;;;;:::o;6993:468::-;7058:6;7066;7115:2;7103:9;7094:7;7090:23;7086:32;7083:119;;;7121:79;;:::i;:::-;7083:119;7241:1;7266:53;7311:7;7302:6;7291:9;7287:22;7266:53;:::i;:::-;7256:63;;7212:117;7368:2;7394:50;7436:7;7427:6;7416:9;7412:22;7394:50;:::i;:::-;7384:60;;7339:115;6993:468;;;;;:::o;7467:1057::-;7571:6;7579;7587;7595;7603;7611;7660:3;7648:9;7639:7;7635:23;7631:33;7628:120;;;7667:79;;:::i;:::-;7628:120;7787:1;7812:53;7857:7;7848:6;7837:9;7833:22;7812:53;:::i;:::-;7802:63;;7758:117;7914:2;7940:53;7985:7;7976:6;7965:9;7961:22;7940:53;:::i;:::-;7930:63;;7885:118;8042:2;8068:53;8113:7;8104:6;8093:9;8089:22;8068:53;:::i;:::-;8058:63;;8013:118;8170:2;8196:53;8241:7;8232:6;8221:9;8217:22;8196:53;:::i;:::-;8186:63;;8141:118;8298:3;8325:53;8370:7;8361:6;8350:9;8346:22;8325:53;:::i;:::-;8315:63;;8269:119;8427:3;8454:53;8499:7;8490:6;8479:9;8475:22;8454:53;:::i;:::-;8444:63;;8398:119;7467:1057;;;;;;;;:::o;8530:997::-;8819:4;8857:3;8846:9;8842:19;8834:27;;8871:71;8939:1;8928:9;8924:17;8915:6;8871:71;:::i;:::-;8952:72;9020:2;9009:9;9005:18;8996:6;8952:72;:::i;:::-;9034;9102:2;9091:9;9087:18;9078:6;9034:72;:::i;:::-;9116;9184:2;9173:9;9169:18;9160:6;9116:72;:::i;:::-;9198:73;9266:3;9255:9;9251:19;9242:6;9198:73;:::i;:::-;9281;9349:3;9338:9;9334:19;9325:6;9281:73;:::i;:::-;9364;9432:3;9421:9;9417:19;9408:6;9364:73;:::i;:::-;9447;9515:3;9504:9;9500:19;9491:6;9447:73;:::i;:::-;8530:997;;;;;;;;;;;:::o;9533:474::-;9601:6;9609;9658:2;9646:9;9637:7;9633:23;9629:32;9626:119;;;9664:79;;:::i;:::-;9626:119;9784:1;9809:53;9854:7;9845:6;9834:9;9830:22;9809:53;:::i;:::-;9799:63;;9755:117;9911:2;9937:53;9982:7;9973:6;9962:9;9958:22;9937:53;:::i;:::-;9927:63;;9882:118;9533:474;;;;;:::o;10013:60::-;10041:3;10062:5;10055:12;;10013:60;;;:::o;10079:142::-;10129:9;10162:53;10180:34;10189:24;10207:5;10189:24;:::i;:::-;10180:34;:::i;:::-;10162:53;:::i;:::-;10149:66;;10079:142;;;:::o;10227:126::-;10277:9;10310:37;10341:5;10310:37;:::i;:::-;10297:50;;10227:126;;;:::o;10359:153::-;10436:9;10469:37;10500:5;10469:37;:::i;:::-;10456:50;;10359:153;;;:::o;10518:185::-;10632:64;10690:5;10632:64;:::i;:::-;10627:3;10620:77;10518:185;;:::o;10709:276::-;10829:4;10867:2;10856:9;10852:18;10844:26;;10880:98;10975:1;10964:9;10960:17;10951:6;10880:98;:::i;:::-;10709:276;;;;:::o;10991:180::-;11039:77;11036:1;11029:88;11136:4;11133:1;11126:15;11160:4;11157:1;11150:15;11177:320;11221:6;11258:1;11252:4;11248:12;11238:22;;11305:1;11299:4;11295:12;11326:18;11316:81;;11382:4;11374:6;11370:17;11360:27;;11316:81;11444:2;11436:6;11433:14;11413:18;11410:38;11407:84;;;11463:18;;:::i;:::-;11407:84;11228:269;11177:320;;;:::o;11503:182::-;11643:34;11639:1;11631:6;11627:14;11620:58;11503:182;:::o;11691:366::-;11833:3;11854:67;11918:2;11913:3;11854:67;:::i;:::-;11847:74;;11930:93;12019:3;11930:93;:::i;:::-;12048:2;12043:3;12039:12;12032:19;;11691:366;;;:::o;12063:419::-;12229:4;12267:2;12256:9;12252:18;12244:26;;12316:9;12310:4;12306:20;12302:1;12291:9;12287:17;12280:47;12344:131;12470:4;12344:131;:::i;:::-;12336:139;;12063:419;;;:::o;12488:180::-;12536:77;12533:1;12526:88;12633:4;12630:1;12623:15;12657:4;12654:1;12647:15;12674:348;12714:7;12737:20;12755:1;12737:20;:::i;:::-;12732:25;;12771:20;12789:1;12771:20;:::i;:::-;12766:25;;12959:1;12891:66;12887:74;12884:1;12881:81;12876:1;12869:9;12862:17;12858:105;12855:131;;;12966:18;;:::i;:::-;12855:131;13014:1;13011;13007:9;12996:20;;12674:348;;;;:::o;13028:180::-;13076:77;13073:1;13066:88;13173:4;13170:1;13163:15;13197:4;13194:1;13187:15;13214:185;13254:1;13271:20;13289:1;13271:20;:::i;:::-;13266:25;;13305:20;13323:1;13305:20;:::i;:::-;13300:25;;13344:1;13334:35;;13349:18;;:::i;:::-;13334:35;13391:1;13388;13384:9;13379:14;;13214:185;;;;:::o;13405:305::-;13445:3;13464:20;13482:1;13464:20;:::i;:::-;13459:25;;13498:20;13516:1;13498:20;:::i;:::-;13493:25;;13652:1;13584:66;13580:74;13577:1;13574:81;13571:107;;;13658:18;;:::i;:::-;13571:107;13702:1;13699;13695:9;13688:16;;13405:305;;;;:::o;13716:229::-;13856:34;13852:1;13844:6;13840:14;13833:58;13925:12;13920:2;13912:6;13908:15;13901:37;13716:229;:::o;13951:366::-;14093:3;14114:67;14178:2;14173:3;14114:67;:::i;:::-;14107:74;;14190:93;14279:3;14190:93;:::i;:::-;14308:2;14303:3;14299:12;14292:19;;13951:366;;;:::o;14323:419::-;14489:4;14527:2;14516:9;14512:18;14504:26;;14576:9;14570:4;14566:20;14562:1;14551:9;14547:17;14540:47;14604:131;14730:4;14604:131;:::i;:::-;14596:139;;14323:419;;;:::o;14748:225::-;14888:34;14884:1;14876:6;14872:14;14865:58;14957:8;14952:2;14944:6;14940:15;14933:33;14748:225;:::o;14979:366::-;15121:3;15142:67;15206:2;15201:3;15142:67;:::i;:::-;15135:74;;15218:93;15307:3;15218:93;:::i;:::-;15336:2;15331:3;15327:12;15320:19;;14979:366;;;:::o;15351:419::-;15517:4;15555:2;15544:9;15540:18;15532:26;;15604:9;15598:4;15594:20;15590:1;15579:9;15575:17;15568:47;15632:131;15758:4;15632:131;:::i;:::-;15624:139;;15351:419;;;:::o;15776:177::-;15916:29;15912:1;15904:6;15900:14;15893:53;15776:177;:::o;15959:366::-;16101:3;16122:67;16186:2;16181:3;16122:67;:::i;:::-;16115:74;;16198:93;16287:3;16198:93;:::i;:::-;16316:2;16311:3;16307:12;16300:19;;15959:366;;;:::o;16331:419::-;16497:4;16535:2;16524:9;16520:18;16512:26;;16584:9;16578:4;16574:20;16570:1;16559:9;16555:17;16548:47;16612:131;16738:4;16612:131;:::i;:::-;16604:139;;16331:419;;;:::o;16756:172::-;16896:24;16892:1;16884:6;16880:14;16873:48;16756:172;:::o;16934:366::-;17076:3;17097:67;17161:2;17156:3;17097:67;:::i;:::-;17090:74;;17173:93;17262:3;17173:93;:::i;:::-;17291:2;17286:3;17282:12;17275:19;;16934:366;;;:::o;17306:419::-;17472:4;17510:2;17499:9;17495:18;17487:26;;17559:9;17553:4;17549:20;17545:1;17534:9;17530:17;17523:47;17587:131;17713:4;17587:131;:::i;:::-;17579:139;;17306:419;;;:::o;17731:240::-;17871:34;17867:1;17859:6;17855:14;17848:58;17940:23;17935:2;17927:6;17923:15;17916:48;17731:240;:::o;17977:366::-;18119:3;18140:67;18204:2;18199:3;18140:67;:::i;:::-;18133:74;;18216:93;18305:3;18216:93;:::i;:::-;18334:2;18329:3;18325:12;18318:19;;17977:366;;;:::o;18349:419::-;18515:4;18553:2;18542:9;18538:18;18530:26;;18602:9;18596:4;18592:20;18588:1;18577:9;18573:17;18566:47;18630:131;18756:4;18630:131;:::i;:::-;18622:139;;18349:419;;;:::o;18774:241::-;18914:34;18910:1;18902:6;18898:14;18891:58;18983:24;18978:2;18970:6;18966:15;18959:49;18774:241;:::o;19021:366::-;19163:3;19184:67;19248:2;19243:3;19184:67;:::i;:::-;19177:74;;19260:93;19349:3;19260:93;:::i;:::-;19378:2;19373:3;19369:12;19362:19;;19021:366;;;:::o;19393:419::-;19559:4;19597:2;19586:9;19582:18;19574:26;;19646:9;19640:4;19636:20;19632:1;19621:9;19617:17;19610:47;19674:131;19800:4;19674:131;:::i;:::-;19666:139;;19393:419;;;:::o;19818:169::-;19958:21;19954:1;19946:6;19942:14;19935:45;19818:169;:::o;19993:366::-;20135:3;20156:67;20220:2;20215:3;20156:67;:::i;:::-;20149:74;;20232:93;20321:3;20232:93;:::i;:::-;20350:2;20345:3;20341:12;20334:19;;19993:366;;;:::o;20365:419::-;20531:4;20569:2;20558:9;20554:18;20546:26;;20618:9;20612:4;20608:20;20604:1;20593:9;20589:17;20582:47;20646:131;20772:4;20646:131;:::i;:::-;20638:139;;20365:419;;;:::o;20790:191::-;20830:4;20850:20;20868:1;20850:20;:::i;:::-;20845:25;;20884:20;20902:1;20884:20;:::i;:::-;20879:25;;20923:1;20920;20917:8;20914:34;;;20928:18;;:::i;:::-;20914:34;20973:1;20970;20966:9;20958:17;;20790:191;;;;:::o;20987:332::-;21108:4;21146:2;21135:9;21131:18;21123:26;;21159:71;21227:1;21216:9;21212:17;21203:6;21159:71;:::i;:::-;21240:72;21308:2;21297:9;21293:18;21284:6;21240:72;:::i;:::-;20987:332;;;;;:::o;21325:147::-;21426:11;21463:3;21448:18;;21325:147;;;;:::o;21478:114::-;;:::o;21598:398::-;21757:3;21778:83;21859:1;21854:3;21778:83;:::i;:::-;21771:90;;21870:93;21959:3;21870:93;:::i;:::-;21988:1;21983:3;21979:11;21972:18;;21598:398;;;:::o;22002:379::-;22186:3;22208:147;22351:3;22208:147;:::i;:::-;22201:154;;22372:3;22365:10;;22002:379;;;:::o;22387:220::-;22527:34;22523:1;22515:6;22511:14;22504:58;22596:3;22591:2;22583:6;22579:15;22572:28;22387:220;:::o;22613:366::-;22755:3;22776:67;22840:2;22835:3;22776:67;:::i;:::-;22769:74;;22852:93;22941:3;22852:93;:::i;:::-;22970:2;22965:3;22961:12;22954:19;;22613:366;;;:::o;22985:419::-;23151:4;23189:2;23178:9;23174:18;23166:26;;23238:9;23232:4;23228:20;23224:1;23213:9;23209:17;23202:47;23266:131;23392:4;23266:131;:::i;:::-;23258:139;;22985:419;;;:::o;23410:180::-;23458:77;23455:1;23448:88;23555:4;23552:1;23545:15;23579:4;23576:1;23569:15;23596:180;23644:77;23641:1;23634:88;23741:4;23738:1;23731:15;23765:4;23762:1;23755:15;23782:143;23839:5;23870:6;23864:13;23855:22;;23886:33;23913:5;23886:33;:::i;:::-;23782:143;;;;:::o;23931:351::-;24001:6;24050:2;24038:9;24029:7;24025:23;24021:32;24018:119;;;24056:79;;:::i;:::-;24018:119;24176:1;24201:64;24257:7;24248:6;24237:9;24233:22;24201:64;:::i;:::-;24191:74;;24147:128;23931:351;;;;:::o;24288:85::-;24333:7;24362:5;24351:16;;24288:85;;;:::o;24379:158::-;24437:9;24470:61;24488:42;24497:32;24523:5;24497:32;:::i;:::-;24488:42;:::i;:::-;24470:61;:::i;:::-;24457:74;;24379:158;;;:::o;24543:147::-;24638:45;24677:5;24638:45;:::i;:::-;24633:3;24626:58;24543:147;;:::o;24696:114::-;24763:6;24797:5;24791:12;24781:22;;24696:114;;;:::o;24816:184::-;24915:11;24949:6;24944:3;24937:19;24989:4;24984:3;24980:14;24965:29;;24816:184;;;;:::o;25006:132::-;25073:4;25096:3;25088:11;;25126:4;25121:3;25117:14;25109:22;;25006:132;;;:::o;25144:108::-;25221:24;25239:5;25221:24;:::i;:::-;25216:3;25209:37;25144:108;;:::o;25258:179::-;25327:10;25348:46;25390:3;25382:6;25348:46;:::i;:::-;25426:4;25421:3;25417:14;25403:28;;25258:179;;;;:::o;25443:113::-;25513:4;25545;25540:3;25536:14;25528:22;;25443:113;;;:::o;25592:732::-;25711:3;25740:54;25788:5;25740:54;:::i;:::-;25810:86;25889:6;25884:3;25810:86;:::i;:::-;25803:93;;25920:56;25970:5;25920:56;:::i;:::-;25999:7;26030:1;26015:284;26040:6;26037:1;26034:13;26015:284;;;26116:6;26110:13;26143:63;26202:3;26187:13;26143:63;:::i;:::-;26136:70;;26229:60;26282:6;26229:60;:::i;:::-;26219:70;;26075:224;26062:1;26059;26055:9;26050:14;;26015:284;;;26019:14;26315:3;26308:10;;25716:608;;;25592:732;;;;:::o;26330:831::-;26593:4;26631:3;26620:9;26616:19;26608:27;;26645:71;26713:1;26702:9;26698:17;26689:6;26645:71;:::i;:::-;26726:80;26802:2;26791:9;26787:18;26778:6;26726:80;:::i;:::-;26853:9;26847:4;26843:20;26838:2;26827:9;26823:18;26816:48;26881:108;26984:4;26975:6;26881:108;:::i;:::-;26873:116;;26999:72;27067:2;27056:9;27052:18;27043:6;26999:72;:::i;:::-;27081:73;27149:3;27138:9;27134:19;27125:6;27081:73;:::i;:::-;26330:831;;;;;;;;:::o;27167:807::-;27416:4;27454:3;27443:9;27439:19;27431:27;;27468:71;27536:1;27525:9;27521:17;27512:6;27468:71;:::i;:::-;27549:72;27617:2;27606:9;27602:18;27593:6;27549:72;:::i;:::-;27631:80;27707:2;27696:9;27692:18;27683:6;27631:80;:::i;:::-;27721;27797:2;27786:9;27782:18;27773:6;27721:80;:::i;:::-;27811:73;27879:3;27868:9;27864:19;27855:6;27811:73;:::i;:::-;27894;27962:3;27951:9;27947:19;27938:6;27894:73;:::i;:::-;27167:807;;;;;;;;;:::o;27980:143::-;28037:5;28068:6;28062:13;28053:22;;28084:33;28111:5;28084:33;:::i;:::-;27980:143;;;;:::o;28129:663::-;28217:6;28225;28233;28282:2;28270:9;28261:7;28257:23;28253:32;28250:119;;;28288:79;;:::i;:::-;28250:119;28408:1;28433:64;28489:7;28480:6;28469:9;28465:22;28433:64;:::i;:::-;28423:74;;28379:128;28546:2;28572:64;28628:7;28619:6;28608:9;28604:22;28572:64;:::i;:::-;28562:74;;28517:129;28685:2;28711:64;28767:7;28758:6;28747:9;28743:22;28711:64;:::i;:::-;28701:74;;28656:129;28129:663;;;;;:::o
Swarm Source
ipfs://fd5462dd5f87482cc9206077da230f93f57abde4feb44200ee408c543c29b2ad
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.