ERC-20
Overview
Max Total Supply
100,000,000 DAO
Holders
17
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
179,648.437680151193069466 DAOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DAO
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-06-06 */ /* * SPDX-License-Identifier: MIT * Telegram:https://t.me/daocoinportal * Website:https://laozidao.xyz/ * X:https://x.com/daoerc20 */ pragma solidity 0.8.19; library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } 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; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { 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 upd 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); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } 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 upd allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + 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 upd 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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This 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 { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(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"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), 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 { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IDexFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract DAO is Context, ERC20, Ownable { using SafeMath for uint256; mapping(address => bool) private _isExcludedFromFee; address payable private _taxWallet; uint256 firstBlock; uint64 private lastLiquifyTime; uint256 private buyFee = 23; uint256 private sellFee = 23; uint256 private _preventSwapBefore = 1; uint256 private _buyCount = 0; uint256 private _txAmountLimit; uint256 private _walletAmountLimit; uint256 private _swapbackMin; uint256 private _swapbackMax; IDexRouter private uniswapV2Router; address private uniswapV2Pair; bool private tradingOpen; bool private inSwap = false; bool private swapEnabled = false; event MaxTxAmountUpdated(uint _txAmountLimit); event MaxWalletAmountUpdated(uint _walletAmountLimit); event FeesUpdated(uint buyFee, uint sellFee); event SwapbackUpdated(uint _swapbackMin, uint _swapbackMax); event FeeReceiverUpdated(address _taxWallet); event ExcludedFromFee(address account, bool status); event LimitsRemoved(); event TradingOpened(); modifier lockTheSwap() { inSwap = true; _; inSwap = false; } constructor() ERC20("DAO", "DAO") { uint256 _totalSupply = 100_000_000 * 10 ** 18; _txAmountLimit = (_totalSupply * 20) / 1000; _walletAmountLimit = (_totalSupply * 20) / 1000; _swapbackMin = (_totalSupply * 5) / 10000; _swapbackMax = (_totalSupply * 200) / 10000; _taxWallet = payable(0x5AB9c6E9d11612d93197f700D091ddf2169D4B41); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_taxWallet] = true; _mint(_msgSender(), _totalSupply); } receive() external payable {} function open() external onlyOwner { require(!tradingOpen, "trading is already open"); uniswapV2Router = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); _approve(address(this), address(uniswapV2Router), totalSupply()); uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); uniswapV2Router.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp ); IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max); swapEnabled = true; tradingOpen = true; firstBlock = block.number; lastLiquifyTime = uint64(block.number); _isExcludedFromFee[address(this)] = true; buyFee = 15; sellFee = 40; emit TradingOpened(); } function setMkt(address payable marketingWallet) external onlyOwner { _taxWallet = marketingWallet; emit FeeReceiverUpdated(marketingWallet); } function setTx(uint256 newValue) external onlyOwner { require(newValue >= 1, "Max tx cant be lower than 0.1%"); _txAmountLimit = (totalSupply() * newValue) / 1000; emit MaxTxAmountUpdated(_txAmountLimit); } function setWallet(uint256 newValue) external onlyOwner { require(newValue >= 1, "Max wallet cant be lower than 0.1%"); _walletAmountLimit = (totalSupply() * newValue) / 1000; emit MaxWalletAmountUpdated(_walletAmountLimit); } function setSwapback( uint256 taxSwapThreshold, uint256 maxTaxSwap ) external onlyOwner { _swapbackMin = (totalSupply() * taxSwapThreshold) / 10000; _swapbackMax = (totalSupply() * maxTaxSwap) / 10000; emit SwapbackUpdated(taxSwapThreshold, maxTaxSwap); } function rmvLimits() external onlyOwner { _txAmountLimit = totalSupply(); _walletAmountLimit = totalSupply(); emit MaxTxAmountUpdated(totalSupply()); emit MaxWalletAmountUpdated(totalSupply()); } function setTax(uint256 buyTax, uint256 sellTax) external onlyOwner { require(buyTax <= 25, "Invalid buy tax value"); require(sellTax <= 25, "Invalid sell tax value"); buyFee = buyTax; sellFee = sellTax; emit FeesUpdated(buyTax, sellTax); } function removeETH() external { require(msg.sender == _taxWallet, "Only fee receiver can trigger"); _taxWallet.transfer(address(this).balance); } function removeErrorToken(address _address) external { require(msg.sender == _taxWallet, "Only fee receiver can trigger"); IERC20(_address).transfer(_taxWallet,IERC20(_address).balanceOf(address(this))); } function viewInfo() external view returns ( uint256 _buyFee, uint256 _sellFee, uint256 maxTxAmount, uint256 maxWalletSize, uint256 taxSwapThreshold, uint256 maxTaxSwap ) { return ( buyFee, sellFee, _txAmountLimit, _walletAmountLimit, _swapbackMin, _swapbackMax ); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 taxAmount = 0; if (from != owner() && to != owner() && !inSwap) { taxAmount = amount.mul(buyFee).div(100); if ( from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to] ) { require(amount <= _txAmountLimit, "Exceeds the _txAmountLimit."); require( balanceOf(to) + amount <= _walletAmountLimit, "Exceeds the maxWalletSize." ); if (firstBlock + 3 > block.number) { // require(!isContract(to)); } _buyCount++; } if (to != uniswapV2Pair && !_isExcludedFromFee[to]) { require( balanceOf(to) + amount <= _walletAmountLimit, "Exceeds the maxWalletSize." ); } if (to == uniswapV2Pair && from != address(this)) { taxAmount = amount.mul(sellFee).div(100); } uint256 contractTokenBalance = balanceOf(address(this)); if ( !inSwap && to == uniswapV2Pair && swapEnabled && contractTokenBalance > _swapbackMin && _buyCount > _preventSwapBefore && lastLiquifyTime != uint64(block.number) ) { swapTokensForEth(min(contractTokenBalance, _swapbackMax)); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToFee(); } } } if (taxAmount > 0) { super._transfer(from, address(this), taxAmount); } super._transfer(from, to, amount.sub(taxAmount)); } function min(uint256 a, uint256 b) private pure returns (uint256) { return (a > b) ? b : a; } function isContract(address account) private view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function triggerSwap() external { require( msg.sender == _taxWallet || msg.sender == owner(), "Only fee receiver can trigger" ); uint256 contractTokenBalance = balanceOf(address(this)); swapTokensForEth(contractTokenBalance); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToFee(); } } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { lastLiquifyTime = uint64(block.number); address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function sendETHToFee() private { bool success; (success, ) = address(_taxWallet).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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_taxWallet","type":"address"}],"name":"FeeReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_txAmountLimit","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_walletAmountLimit","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":"_swapbackMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_swapbackMax","type":"uint256"}],"name":"SwapbackUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingOpened","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":[{"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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeErrorToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rmvLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setMkt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"setSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"triggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewInfo","outputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526017600a556017600b556001600c556000600d556000601360156101000a81548160ff0219169083151502179055506000601360166101000a81548160ff0219169083151502179055503480156200005b57600080fd5b506040518060400160405280600381526020017f44414f00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f44414f00000000000000000000000000000000000000000000000000000000008152508160039081620000d9919062000858565b508060049081620000eb919062000858565b5050506200010e620001026200036460201b60201c565b6200036c60201b60201c565b60006a52b7d2dcc80cd2e400000090506103e86014826200013091906200096e565b6200013c9190620009e8565b600e819055506103e86014826200015491906200096e565b620001609190620009e8565b600f819055506127106005826200017891906200096e565b620001849190620009e8565b60108190555061271060c8826200019c91906200096e565b620001a89190620009e8565b601181905550735ab9c6e9d11612d93197f700d091ddf2169d4b41600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000620002196200043260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200035d620003506200036460201b60201c565b826200045c60201b60201c565b5062000b0c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004c59062000a81565b60405180910390fd5b620004e260008383620005d460201b60201c565b8060026000828254620004f6919062000aa3565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200054d919062000aa3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005b4919062000aef565b60405180910390a3620005d060008383620005d960201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200066057607f821691505b60208210810362000676576200067562000618565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006a1565b620006ec8683620006a1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000739620007336200072d8462000704565b6200070e565b62000704565b9050919050565b6000819050919050565b620007558362000718565b6200076d620007648262000740565b848454620006ae565b825550505050565b600090565b6200078462000775565b620007918184846200074a565b505050565b5b81811015620007b957620007ad6000826200077a565b60018101905062000797565b5050565b601f8211156200080857620007d2816200067c565b620007dd8462000691565b81016020851015620007ed578190505b62000805620007fc8562000691565b83018262000796565b50505b505050565b600082821c905092915050565b60006200082d600019846008026200080d565b1980831691505092915050565b60006200084883836200081a565b9150826002028217905092915050565b6200086382620005de565b67ffffffffffffffff8111156200087f576200087e620005e9565b5b6200088b825462000647565b62000898828285620007bd565b600060209050601f831160018114620008d05760008415620008bb578287015190505b620008c785826200083a565b86555062000937565b601f198416620008e0866200067c565b60005b828110156200090a57848901518255600182019150602085019450602081019050620008e3565b868310156200092a578489015162000926601f8916826200081a565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200097b8262000704565b9150620009888362000704565b9250828202620009988162000704565b91508282048414831517620009b257620009b16200093f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620009f58262000704565b915062000a028362000704565b92508262000a155762000a14620009b9565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a69601f8362000a20565b915062000a768262000a31565b602082019050919050565b6000602082019050818103600083015262000a9c8162000a5a565b9050919050565b600062000ab08262000704565b915062000abd8362000704565b925082820190508082111562000ad85762000ad76200093f565b5b92915050565b62000ae98162000704565b82525050565b600060208201905062000b06600083018462000ade565b92915050565b613ffd8062000b1c6000396000f3fe60806040526004361061016a5760003560e01c806370a08231116100d1578063a9059cbb1161008a578063c8e0a45d11610064578063c8e0a45d14610514578063dd62ed3e1461053d578063f2fde38b1461057a578063fcfff16f146105a357610171565b8063a9059cbb1461047e578063ae601480146104bb578063b5973bd4146104eb57610171565b806370a0823114610380578063715018a6146103bd5780638da5cb5b146103d45780638f937cc4146103ff57806395d89b4114610416578063a457c2d71461044157610171565b806323b872dd1161012357806323b872dd14610272578063313ce567146102af57806339509351146102da578063620cc86c14610317578063667f6526146103405780636ed6a48d1461036957610171565b80630313fc4b1461017657806306fdde031461019f578063095ea7b3146101ca57806314d0c4341461020757806318160ddd14610230578063217b6da61461025b57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061019d60048036038101906101989190612c22565b6105ba565b005b3480156101ab57600080fd5b506101b46106bf565b6040516101c19190612cf2565b60405180910390f35b3480156101d657600080fd5b506101f160048036038101906101ec9190612d72565b610751565b6040516101fe9190612dcd565b60405180910390f35b34801561021357600080fd5b5061022e60048036038101906102299190612de8565b61076f565b005b34801561023c57600080fd5b50610245610891565b6040516102529190612e24565b60405180910390f35b34801561026757600080fd5b5061027061089b565b005b34801561027e57600080fd5b5061029960048036038101906102949190612e3f565b610996565b6040516102a69190612dcd565b60405180910390f35b3480156102bb57600080fd5b506102c4610a8e565b6040516102d19190612eae565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190612d72565b610a97565b60405161030e9190612dcd565b60405180910390f35b34801561032357600080fd5b5061033e60048036038101906103399190612de8565b610b43565b005b34801561034c57600080fd5b5061036760048036038101906103629190612c22565b610c65565b005b34801561037557600080fd5b5061037e610db4565b005b34801561038c57600080fd5b506103a760048036038101906103a29190612ec9565b610eca565b6040516103b49190612e24565b60405180910390f35b3480156103c957600080fd5b506103d2610f12565b005b3480156103e057600080fd5b506103e9610f9a565b6040516103f69190612f05565b60405180910390f35b34801561040b57600080fd5b50610414610fc4565b005b34801561042257600080fd5b5061042b6110c2565b6040516104389190612cf2565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190612d72565b611154565b6040516104759190612dcd565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612d72565b61123f565b6040516104b29190612dcd565b60405180910390f35b3480156104c757600080fd5b506104d061125d565b6040516104e296959493929190612f20565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d9190612fbf565b61128c565b005b34801561052057600080fd5b5061053b60048036038101906105369190612ec9565b611383565b005b34801561054957600080fd5b50610564600480360381019061055f9190612fec565b611530565b6040516105719190612e24565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c9190612ec9565b6115b7565b005b3480156105af57600080fd5b506105b86116ae565b005b6105c2611c7c565b73ffffffffffffffffffffffffffffffffffffffff166105e0610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062d90613078565b60405180910390fd5b61271082610642610891565b61064c91906130c7565b6106569190613138565b60108190555061271081610668610891565b61067291906130c7565b61067c9190613138565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb182826040516106b3929190613169565b60405180910390a15050565b6060600380546106ce906131c1565b80601f01602080910402602001604051908101604052809291908181526020018280546106fa906131c1565b80156107475780601f1061071c57610100808354040283529160200191610747565b820191906000526020600020905b81548152906001019060200180831161072a57829003601f168201915b5050505050905090565b600061076561075e611c7c565b8484611c84565b6001905092915050565b610777611c7c565b73ffffffffffffffffffffffffffffffffffffffff16610795610f9a565b73ffffffffffffffffffffffffffffffffffffffff16146107eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e290613078565b60405180910390fd5b600181101561082f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082690613264565b60405180910390fd5b6103e88161083b610891565b61084591906130c7565b61084f9190613138565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516108869190612e24565b60405180910390a150565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461092b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610922906132d0565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610993573d6000803e3d6000fd5b50565b60006109a3848484611e4d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109ee611c7c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6590613362565b60405180910390fd5b610a8285610a7a611c7c565b858403611c84565b60019150509392505050565b60006012905090565b6000610b39610aa4611c7c565b848460016000610ab2611c7c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b349190613382565b611c84565b6001905092915050565b610b4b611c7c565b73ffffffffffffffffffffffffffffffffffffffff16610b69610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690613078565b60405180910390fd5b6001811015610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa90613402565b60405180910390fd5b6103e881610c0f610891565b610c1991906130c7565b610c239190613138565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610c5a9190612e24565b60405180910390a150565b610c6d611c7c565b73ffffffffffffffffffffffffffffffffffffffff16610c8b610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd890613078565b60405180910390fd5b6019821115610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c9061346e565b60405180910390fd5b6019811115610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d60906134da565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051610da8929190613169565b60405180910390a15050565b610dbc611c7c565b73ffffffffffffffffffffffffffffffffffffffff16610dda610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2790613078565b60405180910390fd5b610e38610891565b600e81905550610e46610891565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610e75610891565b604051610e829190612e24565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001610eb3610891565b604051610ec09190612e24565b60405180910390a1565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f1a611c7c565b73ffffffffffffffffffffffffffffffffffffffff16610f38610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8590613078565b60405180910390fd5b610f986000612508565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110525750611023610f9a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611091576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611088906132d0565b60405180910390fd5b600061109c30610eca565b90506110a7816125ce565b600047905060008111156110be576110bd612870565b5b5050565b6060600480546110d1906131c1565b80601f01602080910402602001604051908101604052809291908181526020018280546110fd906131c1565b801561114a5780601f1061111f5761010080835404028352916020019161114a565b820191906000526020600020905b81548152906001019060200180831161112d57829003601f168201915b5050505050905090565b60008060016000611163611c7c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611220576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112179061356c565b60405180910390fd5b61123461122b611c7c565b85858403611c84565b600191505092915050565b600061125361124c611c7c565b8484611e4d565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b611294611c7c565b73ffffffffffffffffffffffffffffffffffffffff166112b2610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff90613078565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee8160405161137891906135eb565b60405180910390a150565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140a906132d0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161148b9190612f05565b602060405180830381865afa1580156114a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cc919061361b565b6040518363ffffffff1660e01b81526004016114e9929190613648565b6020604051808303816000875af1158015611508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152c919061369d565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115bf611c7c565b73ffffffffffffffffffffffffffffffffffffffff166115dd610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a90613078565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116999061373c565b60405180910390fd5b6116ab81612508565b50565b6116b6611c7c565b73ffffffffffffffffffffffffffffffffffffffff166116d4610f9a565b73ffffffffffffffffffffffffffffffffffffffff161461172a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172190613078565b60405180910390fd5b601360149054906101000a900460ff161561177a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611771906137a8565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061180330601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117fe610891565b611c84565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189491906137dd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561191d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194191906137dd565b6040518363ffffffff1660e01b815260040161195e92919061380a565b6020604051808303816000875af115801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a191906137dd565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611a2a30610eca565b600080611a35610f9a565b426040518863ffffffff1660e01b8152600401611a579695949392919061386e565b60606040518083038185885af1158015611a75573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a9a91906138cf565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611b3c929190613922565b6020604051808303816000875af1158015611b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7f919061369d565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600f600a819055506028600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cea906139bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5990613a4f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e409190612e24565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb390613ae1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290613b73565b60405180910390fd5b60008111611f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6590613c05565b60405180910390fd5b6000611f78610f9a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611fe65750611fb6610f9a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611fff5750601360159054906101000a900460ff16155b156124d05761202c606461201e600a548561290390919063ffffffff16565b61291990919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156120d95750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561212f5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121fc57600e54821115612179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217090613c71565b60405180910390fd5b600f548261218685610eca565b6121909190613382565b11156121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c890613cdd565b60405180910390fd5b4360036008546121e19190613382565b5050600d60008154809291906121f690613cfd565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122a45750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561230257600f54826122b685610eca565b6122c09190613382565b1115612301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f890613cdd565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561238b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156123bb576123b860646123aa600b548561290390919063ffffffff16565b61291990919063ffffffff16565b90505b60006123c630610eca565b9050601360159054906101000a900460ff161580156124325750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561244a5750601360169054906101000a900460ff165b8015612457575060105481115b80156124665750600c54600d54115b801561249c57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156124ce576124b56124b08260115461292f565b6125ce565b600047905060008111156124cc576124cb612870565b5b505b505b60008111156124e5576124e4843083612948565b5b61250284846124fd8486612bc790919063ffffffff16565b612948565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff81111561262f5761262e613d45565b5b60405190808252806020026020018201604052801561265d5781602001602082028036833780820191505090505b509050308160008151811061267557612674613d74565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561271c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274091906137dd565b8160018151811061275457612753613d74565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506127bb30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c84565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161281f959493929190613e61565b600060405180830381600087803b15801561283957600080fd5b505af115801561284d573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516128b890613eec565b60006040518083038185875af1925050503d80600081146128f5576040519150601f19603f3d011682016040523d82523d6000602084013e6128fa565b606091505b50508091505050565b6000818361291191906130c7565b905092915050565b600081836129279190613138565b905092915050565b600081831161293e5782612940565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ae90613ae1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1d90613b73565b60405180910390fd5b612a31838383612bdd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae90613f73565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b4a9190613382565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bae9190612e24565b60405180910390a3612bc1848484612be2565b50505050565b60008183612bd59190613f93565b905092915050565b505050565b505050565b600080fd5b6000819050919050565b612bff81612bec565b8114612c0a57600080fd5b50565b600081359050612c1c81612bf6565b92915050565b60008060408385031215612c3957612c38612be7565b5b6000612c4785828601612c0d565b9250506020612c5885828601612c0d565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c9c578082015181840152602081019050612c81565b60008484015250505050565b6000601f19601f8301169050919050565b6000612cc482612c62565b612cce8185612c6d565b9350612cde818560208601612c7e565b612ce781612ca8565b840191505092915050565b60006020820190508181036000830152612d0c8184612cb9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d3f82612d14565b9050919050565b612d4f81612d34565b8114612d5a57600080fd5b50565b600081359050612d6c81612d46565b92915050565b60008060408385031215612d8957612d88612be7565b5b6000612d9785828601612d5d565b9250506020612da885828601612c0d565b9150509250929050565b60008115159050919050565b612dc781612db2565b82525050565b6000602082019050612de26000830184612dbe565b92915050565b600060208284031215612dfe57612dfd612be7565b5b6000612e0c84828501612c0d565b91505092915050565b612e1e81612bec565b82525050565b6000602082019050612e396000830184612e15565b92915050565b600080600060608486031215612e5857612e57612be7565b5b6000612e6686828701612d5d565b9350506020612e7786828701612d5d565b9250506040612e8886828701612c0d565b9150509250925092565b600060ff82169050919050565b612ea881612e92565b82525050565b6000602082019050612ec36000830184612e9f565b92915050565b600060208284031215612edf57612ede612be7565b5b6000612eed84828501612d5d565b91505092915050565b612eff81612d34565b82525050565b6000602082019050612f1a6000830184612ef6565b92915050565b600060c082019050612f356000830189612e15565b612f426020830188612e15565b612f4f6040830187612e15565b612f5c6060830186612e15565b612f696080830185612e15565b612f7660a0830184612e15565b979650505050505050565b6000612f8c82612d14565b9050919050565b612f9c81612f81565b8114612fa757600080fd5b50565b600081359050612fb981612f93565b92915050565b600060208284031215612fd557612fd4612be7565b5b6000612fe384828501612faa565b91505092915050565b6000806040838503121561300357613002612be7565b5b600061301185828601612d5d565b925050602061302285828601612d5d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613062602083612c6d565b915061306d8261302c565b602082019050919050565b6000602082019050818103600083015261309181613055565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130d282612bec565b91506130dd83612bec565b92508282026130eb81612bec565b9150828204841483151761310257613101613098565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061314382612bec565b915061314e83612bec565b92508261315e5761315d613109565b5b828204905092915050565b600060408201905061317e6000830185612e15565b61318b6020830184612e15565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131d957607f821691505b6020821081036131ec576131eb613192565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061324e602283612c6d565b9150613259826131f2565b604082019050919050565b6000602082019050818103600083015261327d81613241565b9050919050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b60006132ba601d83612c6d565b91506132c582613284565b602082019050919050565b600060208201905081810360008301526132e9816132ad565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061334c602883612c6d565b9150613357826132f0565b604082019050919050565b6000602082019050818103600083015261337b8161333f565b9050919050565b600061338d82612bec565b915061339883612bec565b92508282019050808211156133b0576133af613098565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b60006133ec601e83612c6d565b91506133f7826133b6565b602082019050919050565b6000602082019050818103600083015261341b816133df565b9050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613458601583612c6d565b915061346382613422565b602082019050919050565b600060208201905081810360008301526134878161344b565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b60006134c4601683612c6d565b91506134cf8261348e565b602082019050919050565b600060208201905081810360008301526134f3816134b7565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613556602583612c6d565b9150613561826134fa565b604082019050919050565b6000602082019050818103600083015261358581613549565b9050919050565b6000819050919050565b60006135b16135ac6135a784612d14565b61358c565b612d14565b9050919050565b60006135c382613596565b9050919050565b60006135d5826135b8565b9050919050565b6135e5816135ca565b82525050565b600060208201905061360060008301846135dc565b92915050565b60008151905061361581612bf6565b92915050565b60006020828403121561363157613630612be7565b5b600061363f84828501613606565b91505092915050565b600060408201905061365d60008301856135dc565b61366a6020830184612e15565b9392505050565b61367a81612db2565b811461368557600080fd5b50565b60008151905061369781613671565b92915050565b6000602082840312156136b3576136b2612be7565b5b60006136c184828501613688565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613726602683612c6d565b9150613731826136ca565b604082019050919050565b6000602082019050818103600083015261375581613719565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613792601783612c6d565b915061379d8261375c565b602082019050919050565b600060208201905081810360008301526137c181613785565b9050919050565b6000815190506137d781612d46565b92915050565b6000602082840312156137f3576137f2612be7565b5b6000613801848285016137c8565b91505092915050565b600060408201905061381f6000830185612ef6565b61382c6020830184612ef6565b9392505050565b6000819050919050565b600061385861385361384e84613833565b61358c565b612bec565b9050919050565b6138688161383d565b82525050565b600060c0820190506138836000830189612ef6565b6138906020830188612e15565b61389d604083018761385f565b6138aa606083018661385f565b6138b76080830185612ef6565b6138c460a0830184612e15565b979650505050505050565b6000806000606084860312156138e8576138e7612be7565b5b60006138f686828701613606565b935050602061390786828701613606565b925050604061391886828701613606565b9150509250925092565b60006040820190506139376000830185612ef6565b6139446020830184612e15565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139a7602483612c6d565b91506139b28261394b565b604082019050919050565b600060208201905081810360008301526139d68161399a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a39602283612c6d565b9150613a44826139dd565b604082019050919050565b60006020820190508181036000830152613a6881613a2c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613acb602583612c6d565b9150613ad682613a6f565b604082019050919050565b60006020820190508181036000830152613afa81613abe565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b5d602383612c6d565b9150613b6882613b01565b604082019050919050565b60006020820190508181036000830152613b8c81613b50565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613bef602983612c6d565b9150613bfa82613b93565b604082019050919050565b60006020820190508181036000830152613c1e81613be2565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000613c5b601b83612c6d565b9150613c6682613c25565b602082019050919050565b60006020820190508181036000830152613c8a81613c4e565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000613cc7601a83612c6d565b9150613cd282613c91565b602082019050919050565b60006020820190508181036000830152613cf681613cba565b9050919050565b6000613d0882612bec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d3a57613d39613098565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613dd881612d34565b82525050565b6000613dea8383613dcf565b60208301905092915050565b6000602082019050919050565b6000613e0e82613da3565b613e188185613dae565b9350613e2383613dbf565b8060005b83811015613e54578151613e3b8882613dde565b9750613e4683613df6565b925050600181019050613e27565b5085935050505092915050565b600060a082019050613e766000830188612e15565b613e83602083018761385f565b8181036040830152613e958186613e03565b9050613ea46060830185612ef6565b613eb16080830184612e15565b9695505050505050565b600081905092915050565b50565b6000613ed6600083613ebb565b9150613ee182613ec6565b600082019050919050565b6000613ef782613ec9565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f5d602683612c6d565b9150613f6882613f01565b604082019050919050565b60006020820190508181036000830152613f8c81613f50565b9050919050565b6000613f9e82612bec565b9150613fa983612bec565b9250828203905081811115613fc157613fc0613098565b5b9291505056fea2646970667358221220049d5cf565ce5ee505e754aef4532210bbd95488d8433de5e04c5af9f09cb8a564736f6c63430008130033
Deployed Bytecode
0x60806040526004361061016a5760003560e01c806370a08231116100d1578063a9059cbb1161008a578063c8e0a45d11610064578063c8e0a45d14610514578063dd62ed3e1461053d578063f2fde38b1461057a578063fcfff16f146105a357610171565b8063a9059cbb1461047e578063ae601480146104bb578063b5973bd4146104eb57610171565b806370a0823114610380578063715018a6146103bd5780638da5cb5b146103d45780638f937cc4146103ff57806395d89b4114610416578063a457c2d71461044157610171565b806323b872dd1161012357806323b872dd14610272578063313ce567146102af57806339509351146102da578063620cc86c14610317578063667f6526146103405780636ed6a48d1461036957610171565b80630313fc4b1461017657806306fdde031461019f578063095ea7b3146101ca57806314d0c4341461020757806318160ddd14610230578063217b6da61461025b57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061019d60048036038101906101989190612c22565b6105ba565b005b3480156101ab57600080fd5b506101b46106bf565b6040516101c19190612cf2565b60405180910390f35b3480156101d657600080fd5b506101f160048036038101906101ec9190612d72565b610751565b6040516101fe9190612dcd565b60405180910390f35b34801561021357600080fd5b5061022e60048036038101906102299190612de8565b61076f565b005b34801561023c57600080fd5b50610245610891565b6040516102529190612e24565b60405180910390f35b34801561026757600080fd5b5061027061089b565b005b34801561027e57600080fd5b5061029960048036038101906102949190612e3f565b610996565b6040516102a69190612dcd565b60405180910390f35b3480156102bb57600080fd5b506102c4610a8e565b6040516102d19190612eae565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190612d72565b610a97565b60405161030e9190612dcd565b60405180910390f35b34801561032357600080fd5b5061033e60048036038101906103399190612de8565b610b43565b005b34801561034c57600080fd5b5061036760048036038101906103629190612c22565b610c65565b005b34801561037557600080fd5b5061037e610db4565b005b34801561038c57600080fd5b506103a760048036038101906103a29190612ec9565b610eca565b6040516103b49190612e24565b60405180910390f35b3480156103c957600080fd5b506103d2610f12565b005b3480156103e057600080fd5b506103e9610f9a565b6040516103f69190612f05565b60405180910390f35b34801561040b57600080fd5b50610414610fc4565b005b34801561042257600080fd5b5061042b6110c2565b6040516104389190612cf2565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190612d72565b611154565b6040516104759190612dcd565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612d72565b61123f565b6040516104b29190612dcd565b60405180910390f35b3480156104c757600080fd5b506104d061125d565b6040516104e296959493929190612f20565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d9190612fbf565b61128c565b005b34801561052057600080fd5b5061053b60048036038101906105369190612ec9565b611383565b005b34801561054957600080fd5b50610564600480360381019061055f9190612fec565b611530565b6040516105719190612e24565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c9190612ec9565b6115b7565b005b3480156105af57600080fd5b506105b86116ae565b005b6105c2611c7c565b73ffffffffffffffffffffffffffffffffffffffff166105e0610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062d90613078565b60405180910390fd5b61271082610642610891565b61064c91906130c7565b6106569190613138565b60108190555061271081610668610891565b61067291906130c7565b61067c9190613138565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb182826040516106b3929190613169565b60405180910390a15050565b6060600380546106ce906131c1565b80601f01602080910402602001604051908101604052809291908181526020018280546106fa906131c1565b80156107475780601f1061071c57610100808354040283529160200191610747565b820191906000526020600020905b81548152906001019060200180831161072a57829003601f168201915b5050505050905090565b600061076561075e611c7c565b8484611c84565b6001905092915050565b610777611c7c565b73ffffffffffffffffffffffffffffffffffffffff16610795610f9a565b73ffffffffffffffffffffffffffffffffffffffff16146107eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e290613078565b60405180910390fd5b600181101561082f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082690613264565b60405180910390fd5b6103e88161083b610891565b61084591906130c7565b61084f9190613138565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516108869190612e24565b60405180910390a150565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461092b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610922906132d0565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610993573d6000803e3d6000fd5b50565b60006109a3848484611e4d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109ee611c7c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6590613362565b60405180910390fd5b610a8285610a7a611c7c565b858403611c84565b60019150509392505050565b60006012905090565b6000610b39610aa4611c7c565b848460016000610ab2611c7c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b349190613382565b611c84565b6001905092915050565b610b4b611c7c565b73ffffffffffffffffffffffffffffffffffffffff16610b69610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690613078565b60405180910390fd5b6001811015610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa90613402565b60405180910390fd5b6103e881610c0f610891565b610c1991906130c7565b610c239190613138565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610c5a9190612e24565b60405180910390a150565b610c6d611c7c565b73ffffffffffffffffffffffffffffffffffffffff16610c8b610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd890613078565b60405180910390fd5b6019821115610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c9061346e565b60405180910390fd5b6019811115610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d60906134da565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051610da8929190613169565b60405180910390a15050565b610dbc611c7c565b73ffffffffffffffffffffffffffffffffffffffff16610dda610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2790613078565b60405180910390fd5b610e38610891565b600e81905550610e46610891565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610e75610891565b604051610e829190612e24565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001610eb3610891565b604051610ec09190612e24565b60405180910390a1565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f1a611c7c565b73ffffffffffffffffffffffffffffffffffffffff16610f38610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8590613078565b60405180910390fd5b610f986000612508565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110525750611023610f9a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611091576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611088906132d0565b60405180910390fd5b600061109c30610eca565b90506110a7816125ce565b600047905060008111156110be576110bd612870565b5b5050565b6060600480546110d1906131c1565b80601f01602080910402602001604051908101604052809291908181526020018280546110fd906131c1565b801561114a5780601f1061111f5761010080835404028352916020019161114a565b820191906000526020600020905b81548152906001019060200180831161112d57829003601f168201915b5050505050905090565b60008060016000611163611c7c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611220576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112179061356c565b60405180910390fd5b61123461122b611c7c565b85858403611c84565b600191505092915050565b600061125361124c611c7c565b8484611e4d565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b611294611c7c565b73ffffffffffffffffffffffffffffffffffffffff166112b2610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff90613078565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee8160405161137891906135eb565b60405180910390a150565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140a906132d0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161148b9190612f05565b602060405180830381865afa1580156114a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cc919061361b565b6040518363ffffffff1660e01b81526004016114e9929190613648565b6020604051808303816000875af1158015611508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152c919061369d565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115bf611c7c565b73ffffffffffffffffffffffffffffffffffffffff166115dd610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a90613078565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116999061373c565b60405180910390fd5b6116ab81612508565b50565b6116b6611c7c565b73ffffffffffffffffffffffffffffffffffffffff166116d4610f9a565b73ffffffffffffffffffffffffffffffffffffffff161461172a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172190613078565b60405180910390fd5b601360149054906101000a900460ff161561177a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611771906137a8565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061180330601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117fe610891565b611c84565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189491906137dd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561191d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194191906137dd565b6040518363ffffffff1660e01b815260040161195e92919061380a565b6020604051808303816000875af115801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a191906137dd565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611a2a30610eca565b600080611a35610f9a565b426040518863ffffffff1660e01b8152600401611a579695949392919061386e565b60606040518083038185885af1158015611a75573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a9a91906138cf565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611b3c929190613922565b6020604051808303816000875af1158015611b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7f919061369d565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600f600a819055506028600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cea906139bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5990613a4f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e409190612e24565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb390613ae1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290613b73565b60405180910390fd5b60008111611f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6590613c05565b60405180910390fd5b6000611f78610f9a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611fe65750611fb6610f9a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611fff5750601360159054906101000a900460ff16155b156124d05761202c606461201e600a548561290390919063ffffffff16565b61291990919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156120d95750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561212f5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121fc57600e54821115612179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217090613c71565b60405180910390fd5b600f548261218685610eca565b6121909190613382565b11156121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c890613cdd565b60405180910390fd5b4360036008546121e19190613382565b5050600d60008154809291906121f690613cfd565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122a45750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561230257600f54826122b685610eca565b6122c09190613382565b1115612301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f890613cdd565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561238b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156123bb576123b860646123aa600b548561290390919063ffffffff16565b61291990919063ffffffff16565b90505b60006123c630610eca565b9050601360159054906101000a900460ff161580156124325750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561244a5750601360169054906101000a900460ff165b8015612457575060105481115b80156124665750600c54600d54115b801561249c57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156124ce576124b56124b08260115461292f565b6125ce565b600047905060008111156124cc576124cb612870565b5b505b505b60008111156124e5576124e4843083612948565b5b61250284846124fd8486612bc790919063ffffffff16565b612948565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff81111561262f5761262e613d45565b5b60405190808252806020026020018201604052801561265d5781602001602082028036833780820191505090505b509050308160008151811061267557612674613d74565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561271c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274091906137dd565b8160018151811061275457612753613d74565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506127bb30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c84565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161281f959493929190613e61565b600060405180830381600087803b15801561283957600080fd5b505af115801561284d573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516128b890613eec565b60006040518083038185875af1925050503d80600081146128f5576040519150601f19603f3d011682016040523d82523d6000602084013e6128fa565b606091505b50508091505050565b6000818361291191906130c7565b905092915050565b600081836129279190613138565b905092915050565b600081831161293e5782612940565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ae90613ae1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1d90613b73565b60405180910390fd5b612a31838383612bdd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae90613f73565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b4a9190613382565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bae9190612e24565b60405180910390a3612bc1848484612be2565b50505050565b60008183612bd59190613f93565b905092915050565b505050565b505050565b600080fd5b6000819050919050565b612bff81612bec565b8114612c0a57600080fd5b50565b600081359050612c1c81612bf6565b92915050565b60008060408385031215612c3957612c38612be7565b5b6000612c4785828601612c0d565b9250506020612c5885828601612c0d565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c9c578082015181840152602081019050612c81565b60008484015250505050565b6000601f19601f8301169050919050565b6000612cc482612c62565b612cce8185612c6d565b9350612cde818560208601612c7e565b612ce781612ca8565b840191505092915050565b60006020820190508181036000830152612d0c8184612cb9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d3f82612d14565b9050919050565b612d4f81612d34565b8114612d5a57600080fd5b50565b600081359050612d6c81612d46565b92915050565b60008060408385031215612d8957612d88612be7565b5b6000612d9785828601612d5d565b9250506020612da885828601612c0d565b9150509250929050565b60008115159050919050565b612dc781612db2565b82525050565b6000602082019050612de26000830184612dbe565b92915050565b600060208284031215612dfe57612dfd612be7565b5b6000612e0c84828501612c0d565b91505092915050565b612e1e81612bec565b82525050565b6000602082019050612e396000830184612e15565b92915050565b600080600060608486031215612e5857612e57612be7565b5b6000612e6686828701612d5d565b9350506020612e7786828701612d5d565b9250506040612e8886828701612c0d565b9150509250925092565b600060ff82169050919050565b612ea881612e92565b82525050565b6000602082019050612ec36000830184612e9f565b92915050565b600060208284031215612edf57612ede612be7565b5b6000612eed84828501612d5d565b91505092915050565b612eff81612d34565b82525050565b6000602082019050612f1a6000830184612ef6565b92915050565b600060c082019050612f356000830189612e15565b612f426020830188612e15565b612f4f6040830187612e15565b612f5c6060830186612e15565b612f696080830185612e15565b612f7660a0830184612e15565b979650505050505050565b6000612f8c82612d14565b9050919050565b612f9c81612f81565b8114612fa757600080fd5b50565b600081359050612fb981612f93565b92915050565b600060208284031215612fd557612fd4612be7565b5b6000612fe384828501612faa565b91505092915050565b6000806040838503121561300357613002612be7565b5b600061301185828601612d5d565b925050602061302285828601612d5d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613062602083612c6d565b915061306d8261302c565b602082019050919050565b6000602082019050818103600083015261309181613055565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130d282612bec565b91506130dd83612bec565b92508282026130eb81612bec565b9150828204841483151761310257613101613098565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061314382612bec565b915061314e83612bec565b92508261315e5761315d613109565b5b828204905092915050565b600060408201905061317e6000830185612e15565b61318b6020830184612e15565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131d957607f821691505b6020821081036131ec576131eb613192565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061324e602283612c6d565b9150613259826131f2565b604082019050919050565b6000602082019050818103600083015261327d81613241565b9050919050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b60006132ba601d83612c6d565b91506132c582613284565b602082019050919050565b600060208201905081810360008301526132e9816132ad565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061334c602883612c6d565b9150613357826132f0565b604082019050919050565b6000602082019050818103600083015261337b8161333f565b9050919050565b600061338d82612bec565b915061339883612bec565b92508282019050808211156133b0576133af613098565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b60006133ec601e83612c6d565b91506133f7826133b6565b602082019050919050565b6000602082019050818103600083015261341b816133df565b9050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613458601583612c6d565b915061346382613422565b602082019050919050565b600060208201905081810360008301526134878161344b565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b60006134c4601683612c6d565b91506134cf8261348e565b602082019050919050565b600060208201905081810360008301526134f3816134b7565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613556602583612c6d565b9150613561826134fa565b604082019050919050565b6000602082019050818103600083015261358581613549565b9050919050565b6000819050919050565b60006135b16135ac6135a784612d14565b61358c565b612d14565b9050919050565b60006135c382613596565b9050919050565b60006135d5826135b8565b9050919050565b6135e5816135ca565b82525050565b600060208201905061360060008301846135dc565b92915050565b60008151905061361581612bf6565b92915050565b60006020828403121561363157613630612be7565b5b600061363f84828501613606565b91505092915050565b600060408201905061365d60008301856135dc565b61366a6020830184612e15565b9392505050565b61367a81612db2565b811461368557600080fd5b50565b60008151905061369781613671565b92915050565b6000602082840312156136b3576136b2612be7565b5b60006136c184828501613688565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613726602683612c6d565b9150613731826136ca565b604082019050919050565b6000602082019050818103600083015261375581613719565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613792601783612c6d565b915061379d8261375c565b602082019050919050565b600060208201905081810360008301526137c181613785565b9050919050565b6000815190506137d781612d46565b92915050565b6000602082840312156137f3576137f2612be7565b5b6000613801848285016137c8565b91505092915050565b600060408201905061381f6000830185612ef6565b61382c6020830184612ef6565b9392505050565b6000819050919050565b600061385861385361384e84613833565b61358c565b612bec565b9050919050565b6138688161383d565b82525050565b600060c0820190506138836000830189612ef6565b6138906020830188612e15565b61389d604083018761385f565b6138aa606083018661385f565b6138b76080830185612ef6565b6138c460a0830184612e15565b979650505050505050565b6000806000606084860312156138e8576138e7612be7565b5b60006138f686828701613606565b935050602061390786828701613606565b925050604061391886828701613606565b9150509250925092565b60006040820190506139376000830185612ef6565b6139446020830184612e15565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139a7602483612c6d565b91506139b28261394b565b604082019050919050565b600060208201905081810360008301526139d68161399a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a39602283612c6d565b9150613a44826139dd565b604082019050919050565b60006020820190508181036000830152613a6881613a2c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613acb602583612c6d565b9150613ad682613a6f565b604082019050919050565b60006020820190508181036000830152613afa81613abe565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b5d602383612c6d565b9150613b6882613b01565b604082019050919050565b60006020820190508181036000830152613b8c81613b50565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613bef602983612c6d565b9150613bfa82613b93565b604082019050919050565b60006020820190508181036000830152613c1e81613be2565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000613c5b601b83612c6d565b9150613c6682613c25565b602082019050919050565b60006020820190508181036000830152613c8a81613c4e565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000613cc7601a83612c6d565b9150613cd282613c91565b602082019050919050565b60006020820190508181036000830152613cf681613cba565b9050919050565b6000613d0882612bec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d3a57613d39613098565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613dd881612d34565b82525050565b6000613dea8383613dcf565b60208301905092915050565b6000602082019050919050565b6000613e0e82613da3565b613e188185613dae565b9350613e2383613dbf565b8060005b83811015613e54578151613e3b8882613dde565b9750613e4683613df6565b925050600181019050613e27565b5085935050505092915050565b600060a082019050613e766000830188612e15565b613e83602083018761385f565b8181036040830152613e958186613e03565b9050613ea46060830185612ef6565b613eb16080830184612e15565b9695505050505050565b600081905092915050565b50565b6000613ed6600083613ebb565b9150613ee182613ec6565b600082019050919050565b6000613ef782613ec9565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f5d602683612c6d565b9150613f6882613f01565b604082019050919050565b60006020820190508181036000830152613f8c81613f50565b9050919050565b6000613f9e82612bec565b9150613fa983612bec565b9250828203905081811115613fc157613fc0613098565b5b9291505056fea2646970667358221220049d5cf565ce5ee505e754aef4532210bbd95488d8433de5e04c5af9f09cb8a564736f6c63430008130033
Deployed Bytecode Sourcemap
25438:9132:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29014:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11036:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13269:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28748:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12156:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29880:168;;;;;;;;;;;;;:::i;:::-;;13941:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11998:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14875:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28502:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29582:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29338:236;;;;;;;;;;;;;:::i;:::-;;12327:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22375:103;;;;;;;;;;;;;:::i;:::-;;21724:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33413:436;;;;;;;;;;;;;:::i;:::-;;11255:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15664:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12683:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30298:485;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;28326:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30058:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12946:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22633:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27294:1024;;;;;;;;;;;;;:::i;:::-;;29014:310;21955:12;:10;:12::i;:::-;21944:23;;:7;:5;:7::i;:::-;:23;;;21936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29188:5:::1;29168:16;29152:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29151:42;;;;:::i;:::-;29136:12;:57;;;;29250:5;29236:10;29220:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29219:36;;;;:::i;:::-;29204:12;:51;;;;29271:45;29287:16;29305:10;29271:45;;;;;;;:::i;:::-;;;;;;;;29014:310:::0;;:::o;11036:100::-;11090:13;11123:5;11116:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11036:100;:::o;13269:194::-;13377:4;13394:39;13403:12;:10;:12::i;:::-;13417:7;13426:6;13394:8;:39::i;:::-;13451:4;13444:11;;13269:194;;;;:::o;28748:258::-;21955:12;:10;:12::i;:::-;21944:23;;:7;:5;:7::i;:::-;:23;;;21936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28835:1:::1;28823:8;:13;;28815:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28936:4;28924:8;28908:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28907:33;;;;:::i;:::-;28886:18;:54;;;;28956:42;28979:18;;28956:42;;;;;;:::i;:::-;;;;;;;;28748:258:::0;:::o;12156:108::-;12217:7;12244:12;;12237:19;;12156:108;:::o;29880:168::-;29943:10;;;;;;;;;;;29929:24;;:10;:24;;;29921:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29998:10;;;;;;;;;;;:19;;:42;30018:21;29998:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29880:168::o;13941:529::-;14081:4;14098:36;14108:6;14116:9;14127:6;14098:9;:36::i;:::-;14147:24;14174:11;:19;14186:6;14174:19;;;;;;;;;;;;;;;:33;14194:12;:10;:12::i;:::-;14174:33;;;;;;;;;;;;;;;;14147:60;;14260:6;14240:16;:26;;14218:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14370:57;14379:6;14387:12;:10;:12::i;:::-;14420:6;14401:16;:25;14370:8;:57::i;:::-;14458:4;14451:11;;;13941:529;;;;;:::o;11998:93::-;12056:5;12081:2;12074:9;;11998:93;:::o;14875:290::-;14988:4;15005:130;15028:12;:10;:12::i;:::-;15055:7;15114:10;15077:11;:25;15089:12;:10;:12::i;:::-;15077:25;;;;;;;;;;;;;;;:34;15103:7;15077:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;15005:8;:130::i;:::-;15153:4;15146:11;;14875:290;;;;:::o;28502:238::-;21955:12;:10;:12::i;:::-;21944:23;;:7;:5;:7::i;:::-;:23;;;21936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28585:1:::1;28573:8;:13;;28565:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28678:4;28666:8;28650:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28649:33;;;;:::i;:::-;28632:14;:50;;;;28698:34;28717:14;;28698:34;;;;;;:::i;:::-;;;;;;;;28502:238:::0;:::o;29582:290::-;21955:12;:10;:12::i;:::-;21944:23;;:7;:5;:7::i;:::-;:23;;;21936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29679:2:::1;29669:6;:12;;29661:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29737:2;29726:7;:13;;29718:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29786:6;29777;:15;;;;29813:7;29803;:17;;;;29836:28;29848:6;29856:7;29836:28;;;;;;;:::i;:::-;;;;;;;;29582:290:::0;;:::o;29338:236::-;21955:12;:10;:12::i;:::-;21944:23;;:7;:5;:7::i;:::-;:23;;;21936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29406:13:::1;:11;:13::i;:::-;29389:14;:30;;;;29451:13;:11;:13::i;:::-;29430:18;:34;;;;29480:33;29499:13;:11;:13::i;:::-;29480:33;;;;;;:::i;:::-;;;;;;;;29529:37;29552:13;:11;:13::i;:::-;29529:37;;;;;;:::i;:::-;;;;;;;;29338:236::o:0;12327:143::-;12417:7;12444:9;:18;12454:7;12444:18;;;;;;;;;;;;;;;;12437:25;;12327:143;;;:::o;22375:103::-;21955:12;:10;:12::i;:::-;21944:23;;:7;:5;:7::i;:::-;:23;;;21936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22440:30:::1;22467:1;22440:18;:30::i;:::-;22375:103::o:0;21724:87::-;21770:7;21797:6;;;;;;;;;;;21790:13;;21724:87;:::o;33413:436::-;33492:10;;;;;;;;;;;33478:24;;:10;:24;;;:49;;;;33520:7;:5;:7::i;:::-;33506:21;;:10;:21;;;33478:49;33456:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;33595:28;33626:24;33644:4;33626:9;:24::i;:::-;33595:55;;33663:38;33680:20;33663:16;:38::i;:::-;33712:26;33741:21;33712:50;;33798:1;33777:18;:22;33773:69;;;33816:14;:12;:14::i;:::-;33773:69;33445:404;;33413:436::o;11255:104::-;11311:13;11344:7;11337:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11255:104;:::o;15664:475::-;15782:4;15799:24;15826:11;:25;15838:12;:10;:12::i;:::-;15826:25;;;;;;;;;;;;;;;:34;15852:7;15826:34;;;;;;;;;;;;;;;;15799:61;;15913:15;15893:16;:35;;15871:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16029:67;16038:12;:10;:12::i;:::-;16052:7;16080:15;16061:16;:34;16029:8;:67::i;:::-;16127:4;16120:11;;;15664:475;;;;:::o;12683:200::-;12794:4;12811:42;12821:12;:10;:12::i;:::-;12835:9;12846:6;12811:9;:42::i;:::-;12871:4;12864:11;;12683:200;;;;:::o;30298:485::-;30382:15;30412:16;30443:19;30477:21;30513:24;30552:18;30620:6;;30641:7;;30663:14;;30692:18;;30725:12;;30752;;30598:177;;;;;;;;;;;;30298:485;;;;;;:::o;28326:168::-;21955:12;:10;:12::i;:::-;21944:23;;:7;:5;:7::i;:::-;:23;;;21936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28418:15:::1;28405:10;;:28;;;;;;;;;;;;;;;;;;28451:35;28470:15;28451:35;;;;;;:::i;:::-;;;;;;;;28326:168:::0;:::o;30058:232::-;30144:10;;;;;;;;;;;30130:24;;:10;:24;;;30122:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30206:8;30199:25;;;30225:10;;;;;;;;;;;30243:8;30236:26;;;30271:4;30236:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30199:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30058:232;:::o;12946:176::-;13060:7;13087:11;:18;13099:5;13087:18;;;;;;;;;;;;;;;:27;13106:7;13087:27;;;;;;;;;;;;;;;;13080:34;;12946:176;;;;:::o;22633:238::-;21955:12;:10;:12::i;:::-;21944:23;;:7;:5;:7::i;:::-;:23;;;21936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22756:1:::1;22736:22;;:8;:22;;::::0;22714:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22835:28;22854:8;22835:18;:28::i;:::-;22633:238:::0;:::o;27294:1024::-;21955:12;:10;:12::i;:::-;21944:23;;:7;:5;:7::i;:::-;:23;;;21936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27349:11:::1;;;;;;;;;;;27348:12;27340:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27442:42;27399:15;;:96;;;;;;;;;;;;;;;;;;27506:64;27523:4;27538:15;;;;;;;;;;;27556:13;:11;:13::i;:::-;27506:8;:64::i;:::-;27609:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27597:49;;;27669:4;27689:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27597:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27581:13;;:141;;;;;;;;;;;;;;;;;;27733:15;;;;;;;;;;;:31;;;27772:21;27817:4;27837:24;27855:4;27837:9;:24::i;:::-;27876:1;27892::::0;27908:7:::1;:5;:7::i;:::-;27930:15;27733:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27974:13;;;;;;;;;;;27967:29;;;28005:15;;;;;;;;;;;28023:14;27967:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28063:4;28049:11;;:18;;;;;;;;;;;;;;;;;;28092:4;28078:11;;:18;;;;;;;;;;;;;;;;;;28120:12;28107:10;:25;;;;28168:12;28143:15;;:38;;;;;;;;;;;;;;;;;;28228:4;28192:18;:33;28219:4;28192:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28252:2;28243:6;:11;;;;28275:2;28265:7;:12;;;;28295:15;;;;;;;;;;27294:1024::o:0;10042:98::-;10095:7;10122:10;10115:17;;10042:98;:::o;19447:380::-;19600:1;19583:19;;:5;:19;;;19575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19681:1;19662:21;;:7;:21;;;19654:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19765:6;19735:11;:18;19747:5;19735:18;;;;;;;;;;;;;;;:27;19754:7;19735:27;;;;;;;;;;;;;;;:36;;;;19803:7;19787:32;;19796:5;19787:32;;;19812:6;19787:32;;;;;;:::i;:::-;;;;;;;;19447:380;;;:::o;30791:2296::-;30939:1;30923:18;;:4;:18;;;30915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31016:1;31002:16;;:2;:16;;;30994:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31086:1;31077:6;:10;31069:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31144:17;31188:7;:5;:7::i;:::-;31180:15;;:4;:15;;;;:32;;;;;31205:7;:5;:7::i;:::-;31199:13;;:2;:13;;;;31180:32;:43;;;;;31217:6;;;;;;;;;;;31216:7;31180:43;31176:1740;;;31268:27;31291:3;31268:18;31279:6;;31268;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;31256:39;;31342:13;;;;;;;;;;;31334:21;;:4;:21;;;:72;;;;;31390:15;;;;;;;;;;;31376:30;;:2;:30;;;;31334:72;:116;;;;;31428:18;:22;31447:2;31428:22;;;;;;;;;;;;;;;;;;;;;;;;;31427:23;31334:116;31312:571;;;31503:14;;31493:6;:24;;31485:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31624:18;;31614:6;31598:13;31608:2;31598:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;31568:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;31754:12;31750:1;31737:10;;:14;;;;:::i;:::-;:29;;31856:9;;:11;;;;;;;;;:::i;:::-;;;;;;31312:571;31909:13;;;;;;;;;;;31903:19;;:2;:19;;;;:46;;;;;31927:18;:22;31946:2;31927:22;;;;;;;;;;;;;;;;;;;;;;;;;31926:23;31903:46;31899:231;;;32026:18;;32016:6;32000:13;32010:2;32000:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;31970:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;31899:231;32156:13;;;;;;;;;;;32150:19;;:2;:19;;;:44;;;;;32189:4;32173:21;;:4;:21;;;;32150:44;32146:125;;;32227:28;32251:3;32227:19;32238:7;;32227:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;32215:40;;32146:125;32287:28;32318:24;32336:4;32318:9;:24::i;:::-;32287:55;;32380:6;;;;;;;;;;;32379:7;:47;;;;;32413:13;;;;;;;;;;;32407:19;;:2;:19;;;32379:47;:79;;;;;32447:11;;;;;;;;;;;32379:79;:135;;;;;32502:12;;32479:20;:35;32379:135;:186;;;;;32547:18;;32535:9;;:30;32379:186;:246;;;;;32612:12;32586:39;;:15;;;;;;;;;;;:39;;;;32379:246;32357:548;;;32660:57;32677:39;32681:20;32703:12;;32677:3;:39::i;:::-;32660:16;:57::i;:::-;32736:26;32765:21;32736:50;;32830:1;32809:18;:22;32805:85;;;32856:14;:12;:14::i;:::-;32805:85;32641:264;32357:548;31225:1691;31176:1740;32944:1;32932:9;:13;32928:93;;;32962:47;32978:4;32992;32999:9;32962:15;:47::i;:::-;32928:93;33031:48;33047:4;33053:2;33057:21;33068:9;33057:6;:10;;:21;;;;:::i;:::-;33031:15;:48::i;:::-;30904:2183;30791:2296;;;:::o;23031:191::-;23105:16;23124:6;;;;;;;;;;;23105:25;;23150:8;23141:6;;:17;;;;;;;;;;;;;;;;;;23205:8;23174:40;;23195:8;23174:40;;;;;;;;;;;;23094:128;23031:191;:::o;33857:532::-;26607:4;26598:6;;:13;;;;;;;;;;;;;;;;;;33960:12:::1;33935:15;;:38;;;;;;;;;;;;;;;;;;33984:21;34022:1;34008:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33984:40;;34053:4;34035;34040:1;34035:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34079:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34069:4;34074:1;34069:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34112:62;34129:4;34144:15;;;;;;;;;;;34162:11;34112:8;:62::i;:::-;34185:15;;;;;;;;;;;:66;;;34266:11;34292:1;34308:4;34335;34355:15;34185:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33924:465;26643:5:::0;26634:6;;:14;;;;;;;;;;;;;;;;;;33857:532;:::o;34397:170::-;34440:12;34485:10;;;;;;;;;;;34477:24;;34509:21;34477:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34463:96;;;;;34429:138;34397:170::o;3401:98::-;3459:7;3490:1;3486;:5;;;;:::i;:::-;3479:12;;3401:98;;;;:::o;3800:::-;3858:7;3889:1;3885;:5;;;;:::i;:::-;3878:12;;3800:98;;;;:::o;33095:107::-;33152:7;33184:1;33180;:5;33179:15;;33193:1;33179:15;;;33189:1;33179:15;33172:22;;33095:107;;;;:::o;16629:770::-;16787:1;16769:20;;:6;:20;;;16761:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16871:1;16850:23;;:9;:23;;;16842:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16926:47;16947:6;16955:9;16966:6;16926:20;:47::i;:::-;16986:21;17010:9;:17;17020:6;17010:17;;;;;;;;;;;;;;;;16986:41;;17077:6;17060:13;:23;;17038:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17221:6;17205:13;:22;17185:9;:17;17195:6;17185:17;;;;;;;;;;;;;;;:42;;;;17273:6;17249:9;:20;17259:9;17249:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17314:9;17297:35;;17306:6;17297:35;;;17325:6;17297:35;;;;;;:::i;:::-;;;;;;;;17345:46;17365:6;17373:9;17384:6;17345:19;:46::i;:::-;16750:649;16629:770;;;:::o;3044:98::-;3102:7;3133:1;3129;:5;;;;:::i;:::-;3122:12;;3044:98;;;;:::o;20427:125::-;;;;:::o;21156:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:329::-;3985:6;4034:2;4022:9;4013:7;4009:23;4005:32;4002:119;;;4040:79;;:::i;:::-;4002:119;4160:1;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4131:117;3926:329;;;;:::o;4261:118::-;4348:24;4366:5;4348:24;:::i;:::-;4343:3;4336:37;4261:118;;:::o;4385:222::-;4478:4;4516:2;4505:9;4501:18;4493:26;;4529:71;4597:1;4586:9;4582:17;4573:6;4529:71;:::i;:::-;4385:222;;;;:::o;4613:619::-;4690:6;4698;4706;4755:2;4743:9;4734:7;4730:23;4726:32;4723:119;;;4761:79;;:::i;:::-;4723:119;4881:1;4906:53;4951:7;4942:6;4931:9;4927:22;4906:53;:::i;:::-;4896:63;;4852:117;5008:2;5034:53;5079:7;5070:6;5059:9;5055:22;5034:53;:::i;:::-;5024:63;;4979:118;5136:2;5162:53;5207:7;5198:6;5187:9;5183:22;5162:53;:::i;:::-;5152:63;;5107:118;4613:619;;;;;:::o;5238:86::-;5273:7;5313:4;5306:5;5302:16;5291:27;;5238:86;;;:::o;5330:112::-;5413:22;5429:5;5413:22;:::i;:::-;5408:3;5401:35;5330:112;;:::o;5448:214::-;5537:4;5575:2;5564:9;5560:18;5552:26;;5588:67;5652:1;5641:9;5637:17;5628:6;5588:67;:::i;:::-;5448:214;;;;:::o;5668:329::-;5727:6;5776:2;5764:9;5755:7;5751:23;5747:32;5744:119;;;5782:79;;:::i;:::-;5744:119;5902:1;5927:53;5972:7;5963:6;5952:9;5948:22;5927:53;:::i;:::-;5917:63;;5873:117;5668:329;;;;:::o;6003:118::-;6090:24;6108:5;6090:24;:::i;:::-;6085:3;6078:37;6003:118;;:::o;6127:222::-;6220:4;6258:2;6247:9;6243:18;6235:26;;6271:71;6339:1;6328:9;6324:17;6315:6;6271:71;:::i;:::-;6127:222;;;;:::o;6355:775::-;6588:4;6626:3;6615:9;6611:19;6603:27;;6640:71;6708:1;6697:9;6693:17;6684:6;6640:71;:::i;:::-;6721:72;6789:2;6778:9;6774:18;6765:6;6721:72;:::i;:::-;6803;6871:2;6860:9;6856:18;6847:6;6803:72;:::i;:::-;6885;6953:2;6942:9;6938:18;6929:6;6885:72;:::i;:::-;6967:73;7035:3;7024:9;7020:19;7011:6;6967:73;:::i;:::-;7050;7118:3;7107:9;7103:19;7094:6;7050:73;:::i;:::-;6355:775;;;;;;;;;:::o;7136:104::-;7181:7;7210:24;7228:5;7210:24;:::i;:::-;7199:35;;7136:104;;;:::o;7246:138::-;7327:32;7353:5;7327:32;:::i;:::-;7320:5;7317:43;7307:71;;7374:1;7371;7364:12;7307:71;7246:138;:::o;7390:155::-;7444:5;7482:6;7469:20;7460:29;;7498:41;7533:5;7498:41;:::i;:::-;7390:155;;;;:::o;7551:345::-;7618:6;7667:2;7655:9;7646:7;7642:23;7638:32;7635:119;;;7673:79;;:::i;:::-;7635:119;7793:1;7818:61;7871:7;7862:6;7851:9;7847:22;7818:61;:::i;:::-;7808:71;;7764:125;7551:345;;;;:::o;7902:474::-;7970:6;7978;8027:2;8015:9;8006:7;8002:23;7998:32;7995:119;;;8033:79;;:::i;:::-;7995:119;8153:1;8178:53;8223:7;8214:6;8203:9;8199:22;8178:53;:::i;:::-;8168:63;;8124:117;8280:2;8306:53;8351:7;8342:6;8331:9;8327:22;8306:53;:::i;:::-;8296:63;;8251:118;7902:474;;;;;:::o;8382:182::-;8522:34;8518:1;8510:6;8506:14;8499:58;8382:182;:::o;8570:366::-;8712:3;8733:67;8797:2;8792:3;8733:67;:::i;:::-;8726:74;;8809:93;8898:3;8809:93;:::i;:::-;8927:2;8922:3;8918:12;8911:19;;8570:366;;;:::o;8942:419::-;9108:4;9146:2;9135:9;9131:18;9123:26;;9195:9;9189:4;9185:20;9181:1;9170:9;9166:17;9159:47;9223:131;9349:4;9223:131;:::i;:::-;9215:139;;8942:419;;;:::o;9367:180::-;9415:77;9412:1;9405:88;9512:4;9509:1;9502:15;9536:4;9533:1;9526:15;9553:410;9593:7;9616:20;9634:1;9616:20;:::i;:::-;9611:25;;9650:20;9668:1;9650:20;:::i;:::-;9645:25;;9705:1;9702;9698:9;9727:30;9745:11;9727:30;:::i;:::-;9716:41;;9906:1;9897:7;9893:15;9890:1;9887:22;9867:1;9860:9;9840:83;9817:139;;9936:18;;:::i;:::-;9817:139;9601:362;9553:410;;;;:::o;9969:180::-;10017:77;10014:1;10007:88;10114:4;10111:1;10104:15;10138:4;10135:1;10128:15;10155:185;10195:1;10212:20;10230:1;10212:20;:::i;:::-;10207:25;;10246:20;10264:1;10246:20;:::i;:::-;10241:25;;10285:1;10275:35;;10290:18;;:::i;:::-;10275:35;10332:1;10329;10325:9;10320:14;;10155:185;;;;:::o;10346:332::-;10467:4;10505:2;10494:9;10490:18;10482:26;;10518:71;10586:1;10575:9;10571:17;10562:6;10518:71;:::i;:::-;10599:72;10667:2;10656:9;10652:18;10643:6;10599:72;:::i;:::-;10346:332;;;;;:::o;10684:180::-;10732:77;10729:1;10722:88;10829:4;10826:1;10819:15;10853:4;10850:1;10843:15;10870:320;10914:6;10951:1;10945:4;10941:12;10931:22;;10998:1;10992:4;10988:12;11019:18;11009:81;;11075:4;11067:6;11063:17;11053:27;;11009:81;11137:2;11129:6;11126:14;11106:18;11103:38;11100:84;;11156:18;;:::i;:::-;11100:84;10921:269;10870:320;;;:::o;11196:221::-;11336:34;11332:1;11324:6;11320:14;11313:58;11405:4;11400:2;11392:6;11388:15;11381:29;11196:221;:::o;11423:366::-;11565:3;11586:67;11650:2;11645:3;11586:67;:::i;:::-;11579:74;;11662:93;11751:3;11662:93;:::i;:::-;11780:2;11775:3;11771:12;11764:19;;11423:366;;;:::o;11795:419::-;11961:4;11999:2;11988:9;11984:18;11976:26;;12048:9;12042:4;12038:20;12034:1;12023:9;12019:17;12012:47;12076:131;12202:4;12076:131;:::i;:::-;12068:139;;11795:419;;;:::o;12220:179::-;12360:31;12356:1;12348:6;12344:14;12337:55;12220:179;:::o;12405:366::-;12547:3;12568:67;12632:2;12627:3;12568:67;:::i;:::-;12561:74;;12644:93;12733:3;12644:93;:::i;:::-;12762:2;12757:3;12753:12;12746:19;;12405:366;;;:::o;12777:419::-;12943:4;12981:2;12970:9;12966:18;12958:26;;13030:9;13024:4;13020:20;13016:1;13005:9;13001:17;12994:47;13058:131;13184:4;13058:131;:::i;:::-;13050:139;;12777:419;;;:::o;13202:227::-;13342:34;13338:1;13330:6;13326:14;13319:58;13411:10;13406:2;13398:6;13394:15;13387:35;13202:227;:::o;13435:366::-;13577:3;13598:67;13662:2;13657:3;13598:67;:::i;:::-;13591:74;;13674:93;13763:3;13674:93;:::i;:::-;13792:2;13787:3;13783:12;13776:19;;13435:366;;;:::o;13807:419::-;13973:4;14011:2;14000:9;13996:18;13988:26;;14060:9;14054:4;14050:20;14046:1;14035:9;14031:17;14024:47;14088:131;14214:4;14088:131;:::i;:::-;14080:139;;13807:419;;;:::o;14232:191::-;14272:3;14291:20;14309:1;14291:20;:::i;:::-;14286:25;;14325:20;14343:1;14325:20;:::i;:::-;14320:25;;14368:1;14365;14361:9;14354:16;;14389:3;14386:1;14383:10;14380:36;;;14396:18;;:::i;:::-;14380:36;14232:191;;;;:::o;14429:180::-;14569:32;14565:1;14557:6;14553:14;14546:56;14429:180;:::o;14615:366::-;14757:3;14778:67;14842:2;14837:3;14778:67;:::i;:::-;14771:74;;14854:93;14943:3;14854:93;:::i;:::-;14972:2;14967:3;14963:12;14956:19;;14615:366;;;:::o;14987:419::-;15153:4;15191:2;15180:9;15176:18;15168:26;;15240:9;15234:4;15230:20;15226:1;15215:9;15211:17;15204:47;15268:131;15394:4;15268:131;:::i;:::-;15260:139;;14987:419;;;:::o;15412:171::-;15552:23;15548:1;15540:6;15536:14;15529:47;15412:171;:::o;15589:366::-;15731:3;15752:67;15816:2;15811:3;15752:67;:::i;:::-;15745:74;;15828:93;15917:3;15828:93;:::i;:::-;15946:2;15941:3;15937:12;15930:19;;15589:366;;;:::o;15961:419::-;16127:4;16165:2;16154:9;16150:18;16142:26;;16214:9;16208:4;16204:20;16200:1;16189:9;16185:17;16178:47;16242:131;16368:4;16242:131;:::i;:::-;16234:139;;15961:419;;;:::o;16386:172::-;16526:24;16522:1;16514:6;16510:14;16503:48;16386:172;:::o;16564:366::-;16706:3;16727:67;16791:2;16786:3;16727:67;:::i;:::-;16720:74;;16803:93;16892:3;16803:93;:::i;:::-;16921:2;16916:3;16912:12;16905:19;;16564:366;;;:::o;16936:419::-;17102:4;17140:2;17129:9;17125:18;17117:26;;17189:9;17183:4;17179:20;17175:1;17164:9;17160:17;17153:47;17217:131;17343:4;17217:131;:::i;:::-;17209:139;;16936:419;;;:::o;17361:224::-;17501:34;17497:1;17489:6;17485:14;17478:58;17570:7;17565:2;17557:6;17553:15;17546:32;17361:224;:::o;17591:366::-;17733:3;17754:67;17818:2;17813:3;17754:67;:::i;:::-;17747:74;;17830:93;17919:3;17830:93;:::i;:::-;17948:2;17943:3;17939:12;17932:19;;17591:366;;;:::o;17963:419::-;18129:4;18167:2;18156:9;18152:18;18144:26;;18216:9;18210:4;18206:20;18202:1;18191:9;18187:17;18180:47;18244:131;18370:4;18244:131;:::i;:::-;18236:139;;17963:419;;;:::o;18388:60::-;18416:3;18437:5;18430:12;;18388:60;;;:::o;18454:142::-;18504:9;18537:53;18555:34;18564:24;18582:5;18564:24;:::i;:::-;18555:34;:::i;:::-;18537:53;:::i;:::-;18524:66;;18454:142;;;:::o;18602:126::-;18652:9;18685:37;18716:5;18685:37;:::i;:::-;18672:50;;18602:126;;;:::o;18734:134::-;18792:9;18825:37;18856:5;18825:37;:::i;:::-;18812:50;;18734:134;;;:::o;18874:147::-;18969:45;19008:5;18969:45;:::i;:::-;18964:3;18957:58;18874:147;;:::o;19027:238::-;19128:4;19166:2;19155:9;19151:18;19143:26;;19179:79;19255:1;19244:9;19240:17;19231:6;19179:79;:::i;:::-;19027:238;;;;:::o;19271:143::-;19328:5;19359:6;19353:13;19344:22;;19375:33;19402:5;19375:33;:::i;:::-;19271:143;;;;:::o;19420:351::-;19490:6;19539:2;19527:9;19518:7;19514:23;19510:32;19507:119;;;19545:79;;:::i;:::-;19507:119;19665:1;19690:64;19746:7;19737:6;19726:9;19722:22;19690:64;:::i;:::-;19680:74;;19636:128;19420:351;;;;:::o;19777:348::-;19906:4;19944:2;19933:9;19929:18;19921:26;;19957:79;20033:1;20022:9;20018:17;20009:6;19957:79;:::i;:::-;20046:72;20114:2;20103:9;20099:18;20090:6;20046:72;:::i;:::-;19777:348;;;;;:::o;20131:116::-;20201:21;20216:5;20201:21;:::i;:::-;20194:5;20191:32;20181:60;;20237:1;20234;20227:12;20181:60;20131:116;:::o;20253:137::-;20307:5;20338:6;20332:13;20323:22;;20354:30;20378:5;20354:30;:::i;:::-;20253:137;;;;:::o;20396:345::-;20463:6;20512:2;20500:9;20491:7;20487:23;20483:32;20480:119;;;20518:79;;:::i;:::-;20480:119;20638:1;20663:61;20716:7;20707:6;20696:9;20692:22;20663:61;:::i;:::-;20653:71;;20609:125;20396:345;;;;:::o;20747:225::-;20887:34;20883:1;20875:6;20871:14;20864:58;20956:8;20951:2;20943:6;20939:15;20932:33;20747:225;:::o;20978:366::-;21120:3;21141:67;21205:2;21200:3;21141:67;:::i;:::-;21134:74;;21217:93;21306:3;21217:93;:::i;:::-;21335:2;21330:3;21326:12;21319:19;;20978:366;;;:::o;21350:419::-;21516:4;21554:2;21543:9;21539:18;21531:26;;21603:9;21597:4;21593:20;21589:1;21578:9;21574:17;21567:47;21631:131;21757:4;21631:131;:::i;:::-;21623:139;;21350:419;;;:::o;21775:173::-;21915:25;21911:1;21903:6;21899:14;21892:49;21775:173;:::o;21954:366::-;22096:3;22117:67;22181:2;22176:3;22117:67;:::i;:::-;22110:74;;22193:93;22282:3;22193:93;:::i;:::-;22311:2;22306:3;22302:12;22295:19;;21954:366;;;:::o;22326:419::-;22492:4;22530:2;22519:9;22515:18;22507:26;;22579:9;22573:4;22569:20;22565:1;22554:9;22550:17;22543:47;22607:131;22733:4;22607:131;:::i;:::-;22599:139;;22326:419;;;:::o;22751:143::-;22808:5;22839:6;22833:13;22824:22;;22855:33;22882:5;22855:33;:::i;:::-;22751:143;;;;:::o;22900:351::-;22970:6;23019:2;23007:9;22998:7;22994:23;22990:32;22987:119;;;23025:79;;:::i;:::-;22987:119;23145:1;23170:64;23226:7;23217:6;23206:9;23202:22;23170:64;:::i;:::-;23160:74;;23116:128;22900:351;;;;:::o;23257:332::-;23378:4;23416:2;23405:9;23401:18;23393:26;;23429:71;23497:1;23486:9;23482:17;23473:6;23429:71;:::i;:::-;23510:72;23578:2;23567:9;23563:18;23554:6;23510:72;:::i;:::-;23257:332;;;;;:::o;23595:85::-;23640:7;23669:5;23658:16;;23595:85;;;:::o;23686:158::-;23744:9;23777:61;23795:42;23804:32;23830:5;23804:32;:::i;:::-;23795:42;:::i;:::-;23777:61;:::i;:::-;23764:74;;23686:158;;;:::o;23850:147::-;23945:45;23984:5;23945:45;:::i;:::-;23940:3;23933:58;23850:147;;:::o;24003:807::-;24252:4;24290:3;24279:9;24275:19;24267:27;;24304:71;24372:1;24361:9;24357:17;24348:6;24304:71;:::i;:::-;24385:72;24453:2;24442:9;24438:18;24429:6;24385:72;:::i;:::-;24467:80;24543:2;24532:9;24528:18;24519:6;24467:80;:::i;:::-;24557;24633:2;24622:9;24618:18;24609:6;24557:80;:::i;:::-;24647:73;24715:3;24704:9;24700:19;24691:6;24647:73;:::i;:::-;24730;24798:3;24787:9;24783:19;24774:6;24730:73;:::i;:::-;24003:807;;;;;;;;;:::o;24816:663::-;24904:6;24912;24920;24969:2;24957:9;24948:7;24944:23;24940:32;24937:119;;;24975:79;;:::i;:::-;24937:119;25095:1;25120:64;25176:7;25167:6;25156:9;25152:22;25120:64;:::i;:::-;25110:74;;25066:128;25233:2;25259:64;25315:7;25306:6;25295:9;25291:22;25259:64;:::i;:::-;25249:74;;25204:129;25372:2;25398:64;25454:7;25445:6;25434:9;25430:22;25398:64;:::i;:::-;25388:74;;25343:129;24816:663;;;;;:::o;25485:332::-;25606:4;25644:2;25633:9;25629:18;25621:26;;25657:71;25725:1;25714:9;25710:17;25701:6;25657:71;:::i;:::-;25738:72;25806:2;25795:9;25791:18;25782:6;25738:72;:::i;:::-;25485:332;;;;;:::o;25823:223::-;25963:34;25959:1;25951:6;25947:14;25940:58;26032:6;26027:2;26019:6;26015:15;26008:31;25823:223;:::o;26052:366::-;26194:3;26215:67;26279:2;26274:3;26215:67;:::i;:::-;26208:74;;26291:93;26380:3;26291:93;:::i;:::-;26409:2;26404:3;26400:12;26393:19;;26052:366;;;:::o;26424:419::-;26590:4;26628:2;26617:9;26613:18;26605:26;;26677:9;26671:4;26667:20;26663:1;26652:9;26648:17;26641:47;26705:131;26831:4;26705:131;:::i;:::-;26697:139;;26424:419;;;:::o;26849:221::-;26989:34;26985:1;26977:6;26973:14;26966:58;27058:4;27053:2;27045:6;27041:15;27034:29;26849:221;:::o;27076:366::-;27218:3;27239:67;27303:2;27298:3;27239:67;:::i;:::-;27232:74;;27315:93;27404:3;27315:93;:::i;:::-;27433:2;27428:3;27424:12;27417:19;;27076:366;;;:::o;27448:419::-;27614:4;27652:2;27641:9;27637:18;27629:26;;27701:9;27695:4;27691:20;27687:1;27676:9;27672:17;27665:47;27729:131;27855:4;27729:131;:::i;:::-;27721:139;;27448:419;;;:::o;27873:224::-;28013:34;28009:1;28001:6;27997:14;27990:58;28082:7;28077:2;28069:6;28065:15;28058:32;27873:224;:::o;28103:366::-;28245:3;28266:67;28330:2;28325:3;28266:67;:::i;:::-;28259:74;;28342:93;28431:3;28342:93;:::i;:::-;28460:2;28455:3;28451:12;28444:19;;28103:366;;;:::o;28475:419::-;28641:4;28679:2;28668:9;28664:18;28656:26;;28728:9;28722:4;28718:20;28714:1;28703:9;28699:17;28692:47;28756:131;28882:4;28756:131;:::i;:::-;28748:139;;28475:419;;;:::o;28900:222::-;29040:34;29036:1;29028:6;29024:14;29017:58;29109:5;29104:2;29096:6;29092:15;29085:30;28900:222;:::o;29128:366::-;29270:3;29291:67;29355:2;29350:3;29291:67;:::i;:::-;29284:74;;29367:93;29456:3;29367:93;:::i;:::-;29485:2;29480:3;29476:12;29469:19;;29128:366;;;:::o;29500:419::-;29666:4;29704:2;29693:9;29689:18;29681:26;;29753:9;29747:4;29743:20;29739:1;29728:9;29724:17;29717:47;29781:131;29907:4;29781:131;:::i;:::-;29773:139;;29500:419;;;:::o;29925:228::-;30065:34;30061:1;30053:6;30049:14;30042:58;30134:11;30129:2;30121:6;30117:15;30110:36;29925:228;:::o;30159:366::-;30301:3;30322:67;30386:2;30381:3;30322:67;:::i;:::-;30315:74;;30398:93;30487:3;30398:93;:::i;:::-;30516:2;30511:3;30507:12;30500:19;;30159:366;;;:::o;30531:419::-;30697:4;30735:2;30724:9;30720:18;30712:26;;30784:9;30778:4;30774:20;30770:1;30759:9;30755:17;30748:47;30812:131;30938:4;30812:131;:::i;:::-;30804:139;;30531:419;;;:::o;30956:177::-;31096:29;31092:1;31084:6;31080:14;31073:53;30956:177;:::o;31139:366::-;31281:3;31302:67;31366:2;31361:3;31302:67;:::i;:::-;31295:74;;31378:93;31467:3;31378:93;:::i;:::-;31496:2;31491:3;31487:12;31480:19;;31139:366;;;:::o;31511:419::-;31677:4;31715:2;31704:9;31700:18;31692:26;;31764:9;31758:4;31754:20;31750:1;31739:9;31735:17;31728:47;31792:131;31918:4;31792:131;:::i;:::-;31784:139;;31511:419;;;:::o;31936:176::-;32076:28;32072:1;32064:6;32060:14;32053:52;31936:176;:::o;32118:366::-;32260:3;32281:67;32345:2;32340:3;32281:67;:::i;:::-;32274:74;;32357:93;32446:3;32357:93;:::i;:::-;32475:2;32470:3;32466:12;32459:19;;32118:366;;;:::o;32490:419::-;32656:4;32694:2;32683:9;32679:18;32671:26;;32743:9;32737:4;32733:20;32729:1;32718:9;32714:17;32707:47;32771:131;32897:4;32771:131;:::i;:::-;32763:139;;32490:419;;;:::o;32915:233::-;32954:3;32977:24;32995:5;32977:24;:::i;:::-;32968:33;;33023:66;33016:5;33013:77;33010:103;;33093:18;;:::i;:::-;33010:103;33140:1;33133:5;33129:13;33122:20;;32915:233;;;:::o;33154:180::-;33202:77;33199:1;33192:88;33299:4;33296:1;33289:15;33323:4;33320:1;33313:15;33340:180;33388:77;33385:1;33378:88;33485:4;33482:1;33475:15;33509:4;33506:1;33499:15;33526:114;33593:6;33627:5;33621:12;33611:22;;33526:114;;;:::o;33646:184::-;33745:11;33779:6;33774:3;33767:19;33819:4;33814:3;33810:14;33795:29;;33646:184;;;;:::o;33836:132::-;33903:4;33926:3;33918:11;;33956:4;33951:3;33947:14;33939:22;;33836:132;;;:::o;33974:108::-;34051:24;34069:5;34051:24;:::i;:::-;34046:3;34039:37;33974:108;;:::o;34088:179::-;34157:10;34178:46;34220:3;34212:6;34178:46;:::i;:::-;34256:4;34251:3;34247:14;34233:28;;34088:179;;;;:::o;34273:113::-;34343:4;34375;34370:3;34366:14;34358:22;;34273:113;;;:::o;34422:732::-;34541:3;34570:54;34618:5;34570:54;:::i;:::-;34640:86;34719:6;34714:3;34640:86;:::i;:::-;34633:93;;34750:56;34800:5;34750:56;:::i;:::-;34829:7;34860:1;34845:284;34870:6;34867:1;34864:13;34845:284;;;34946:6;34940:13;34973:63;35032:3;35017:13;34973:63;:::i;:::-;34966:70;;35059:60;35112:6;35059:60;:::i;:::-;35049:70;;34905:224;34892:1;34889;34885:9;34880:14;;34845:284;;;34849:14;35145:3;35138:10;;34546:608;;;34422:732;;;;:::o;35160:831::-;35423:4;35461:3;35450:9;35446:19;35438:27;;35475:71;35543:1;35532:9;35528:17;35519:6;35475:71;:::i;:::-;35556:80;35632:2;35621:9;35617:18;35608:6;35556:80;:::i;:::-;35683:9;35677:4;35673:20;35668:2;35657:9;35653:18;35646:48;35711:108;35814:4;35805:6;35711:108;:::i;:::-;35703:116;;35829:72;35897:2;35886:9;35882:18;35873:6;35829:72;:::i;:::-;35911:73;35979:3;35968:9;35964:19;35955:6;35911:73;:::i;:::-;35160:831;;;;;;;;:::o;35997:147::-;36098:11;36135:3;36120:18;;35997:147;;;;:::o;36150:114::-;;:::o;36270:398::-;36429:3;36450:83;36531:1;36526:3;36450:83;:::i;:::-;36443:90;;36542:93;36631:3;36542:93;:::i;:::-;36660:1;36655:3;36651:11;36644:18;;36270:398;;;:::o;36674:379::-;36858:3;36880:147;37023:3;36880:147;:::i;:::-;36873:154;;37044:3;37037:10;;36674:379;;;:::o;37059:225::-;37199:34;37195:1;37187:6;37183:14;37176:58;37268:8;37263:2;37255:6;37251:15;37244:33;37059:225;:::o;37290:366::-;37432:3;37453:67;37517:2;37512:3;37453:67;:::i;:::-;37446:74;;37529:93;37618:3;37529:93;:::i;:::-;37647:2;37642:3;37638:12;37631:19;;37290:366;;;:::o;37662:419::-;37828:4;37866:2;37855:9;37851:18;37843:26;;37915:9;37909:4;37905:20;37901:1;37890:9;37886:17;37879:47;37943:131;38069:4;37943:131;:::i;:::-;37935:139;;37662:419;;;:::o;38087:194::-;38127:4;38147:20;38165:1;38147:20;:::i;:::-;38142:25;;38181:20;38199:1;38181:20;:::i;:::-;38176:25;;38225:1;38222;38218:9;38210:17;;38249:1;38243:4;38240:11;38237:37;;;38254:18;;:::i;:::-;38237:37;38087:194;;;;:::o
Swarm Source
ipfs://049d5cf565ce5ee505e754aef4532210bbd95488d8433de5e04c5af9f09cb8a5
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.