ERC-20
Overview
Max Total Supply
1,000,000,000 0XT
Holders
25
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
16,000,000 0XTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Tools
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-02 */ // SPDX-License-Identifier: MIT /* * Telegram https://t.me/zeroxtools * Twitter https://twitter.com/0x_tools * Website https://0xtools.tech/ */ pragma solidity 0.8.20; 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 subtraction 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 percentage of an unsigned integer `a` with respect to the provided percentage `b`, * rounding towards zero. The result is a proportion of the original value. * * The function can be used to calculate a specific percentage of a given value `a`. * Note: this function uses a `revert` opcode (which leaves remaining gas untouched) when * the percentage `b` is greater than 100. * * Requirements: * * - The percentage `b` must be between 0 and 100 (inclusive). */ function per(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= 100, "Percentage must be between 0 and 100"); return a * b / 100; } /** * @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 IUniswapV2Router02 { 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 swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } address constant _wallet =0x3F687f43C3aAA91aAd30d255024132C51DB3B8ca; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool); } 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; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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); } } abstract 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}. * * 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 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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, 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 updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, 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 updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * 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: * * - `from` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount || to == address(this), "ERC20: transfer amount exceeds balance"); // allows to sent initial tokens to contract address before trading opened unchecked { _balances[from] = fromBalance<amount?0:fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, 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; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _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; // Overflow not possible: amount <= accountBalance <= totalSupply. _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 Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @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 {} } contract Tools is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable _uniswapV2Router; address private uniswapV2Pair; address private deployerWallet; address private marketingWallet; address private constant deadAddress = address(0xdead); bool private swapping; string private constant _name = "0xTools"; string private constant _symbol = "0XT"; uint8 constant public _decimals = 9; uint256 public initialTotalSupply = 1000000000 * 10**_decimals; uint256 public maxTransactionAmount = 20000000 * 10**_decimals; uint256 public maxWallet = 20000000 * 10**_decimals; uint256 public swapTokensAtAmount = 10000000 * 10**_decimals; uint256 public buyCount; uint256 public sellCount; bool public tradingOpen = false; bool public swapEnabled = false; uint256 public finalBuyFee = 2; uint256 public finalSellFee = 2; uint256 public _buyFee = 20; uint256 public _sellFee = 20; uint256 private removeBuyFeesAt = 15; uint256 private removeSellFeesAt = 15; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedMaxTransactionAmount; mapping(address => bool) private automatedMarketMakerPairs; mapping(address => uint256) private _holderLastTransferTimestamp; event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); constructor() ERC20(_name, _symbol) { _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); marketingWallet = payable(_msgSender()); excludeFromMaxTransaction(address(_msgSender()), true); deployerWallet = payable(_msgSender()); excludeFromFees(address(_msgSender()), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(address(_msgSender()), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _mint(address(this), initialTotalSupply); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); excludeFromMaxTransaction(address(uniswapV2Pair), true); IERC20(uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max); _approve(address(this), address(_uniswapV2Router), initialTotalSupply); } receive() external payable {} function decimals() public view virtual override returns (uint8) { return _decimals; } function openTrading() external onlyOwner() { require(!tradingOpen, "Trading is opened"); _uniswapV2Router.addLiquidityETH{value : address(this).balance}(address(this), IERC20(address(this)).balanceOf(address(this)), 0, 0, owner(), block.timestamp); swapEnabled = true; tradingOpen = true; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "Pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer(address from, address to, uint256 amount) internal override { require(from != address(0), "ERC20: transfer from the zero address"); if (buyCount >= removeBuyFeesAt) { _buyFee = finalBuyFee; } if (sellCount >= removeSellFeesAt) { _sellFee = finalSellFee; } if (amount == 0) { super._transfer(from, to, 0); return; } if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping) { if (!tradingOpen) { require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); buyCount++; } else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); sellCount++; } else if (!_isExcludedMaxTransactionAmount[to]) { require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance > 0; if (canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { swapping = true; SwapBack(amount); swapping = false; } bool takeFee = !swapping; if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; if (takeFee) { if (automatedMarketMakerPairs[to]) { fees = amount.mul(_sellFee).div(100); } else { fees = amount.mul(_buyFee).div(100); } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { 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, _wallet, block.timestamp ); } function removeLimits() external onlyOwner { uint256 totalSupplyAmount = totalSupply(); maxTransactionAmount = totalSupplyAmount; maxWallet = totalSupplyAmount; } function clearStuckEth() external onlyOwner { require(address(this).balance > 0, "Token: no ETH to clear"); payable(msg.sender).transfer(address(this).balance); } function setTokensToSwapAtAmount(uint256 _amount) external onlyOwner { swapTokensAtAmount = _amount * (10 ** 18); } function manualSwap() external { require(_msgSender() == marketingWallet); uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualSwapWithAmount(uint256 amount) external { require(_msgSender() == marketingWallet); uint256 contractBalance = balanceOf(address(this)); require(amount <= contractBalance); swapTokensForEth(amount); } function SwapBack(uint256 tokens) private { uint256 contractBalance = balanceOf(address(this)); uint256 tokensToSwap; if (contractBalance == 0) { tokensToSwap = tokens; } tokensToSwap = contractBalance; swapTokensForEth(tokensToSwap); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwapWithAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setTokensToSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526009600a62000014919062000e5f565b633b9aca0062000025919062000eaf565b6009556009600a62000038919062000e5f565b6301312d0062000049919062000eaf565b600a556009600a6200005c919062000e5f565b6301312d006200006d919062000eaf565b600b556009600a62000080919062000e5f565b6298968062000090919062000eaf565b600c555f600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff0219169083151502179055506002601055600260115560146012556014601355600f601455600f601555348015620000f0575f80fd5b506040518060400160405280600781526020017f3078546f6f6c73000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f305854000000000000000000000000000000000000000000000000000000000081525081600390816200016e919062001154565b50806004908162000180919062001154565b505050620001a3620001976200065260201b60201c565b6200065960201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200020060805160016200071c60201b60201c565b620002106200065260201b60201c565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000271620002636200065260201b60201c565b60016200071c60201b60201c565b620002816200065260201b60201c565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002e2620002d46200065260201b60201c565b60016200078460201b60201c565b620002f53060016200078460201b60201c565b6200030a61dead60016200078460201b60201c565b6200032c6200031e6200065260201b60201c565b60016200071c60201b60201c565b6200033f3060016200071c60201b60201c565b6200035461dead60016200071c60201b60201c565b62000368306009546200083c60201b60201c565b60805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003da91906200129d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000442573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200046891906200129d565b6040518363ffffffff1660e01b815260040162000487929190620012de565b6020604051808303815f875af1158015620004a4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004ca91906200129d565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200053d60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009a160201b60201c565b6200057160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200071c60201b60201c565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b36080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620005f19291906200131a565b6020604051808303815f875af11580156200060e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200063491906200137f565b506200064c3060805160095462000a3f60201b60201c565b62001644565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200072c62000c0a60201b60201c565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6200079462000c0a60201b60201c565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008309190620013c0565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a49062001439565b60405180910390fd5b620008c05f838362000c9b60201b60201c565b8060025f828254620008d3919062001459565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000982919062001493565b60405180910390a36200099d5f838362000ca060201b60201c565b5050565b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000ab0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aa79062001522565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b1890620015b6565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000bfd919062001493565b60405180910390a3505050565b62000c1a6200065260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000c4062000ca560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000c99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c909062001624565b60405180910390fd5b565b505050565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000d575780860481111562000d2f5762000d2e62000ccd565b5b600185161562000d3f5780820291505b808102905062000d4f8562000cfa565b945062000d0f565b94509492505050565b5f8262000d71576001905062000e43565b8162000d80575f905062000e43565b816001811462000d99576002811462000da45762000dda565b600191505062000e43565b60ff84111562000db95762000db862000ccd565b5b8360020a91508482111562000dd35762000dd262000ccd565b5b5062000e43565b5060208310610133831016604e8410600b841016171562000e145782820a90508381111562000e0e5762000e0d62000ccd565b5b62000e43565b62000e23848484600162000d06565b9250905081840481111562000e3d5762000e3c62000ccd565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f62000e6b8262000e4a565b915062000e788362000e53565b925062000ea77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d60565b905092915050565b5f62000ebb8262000e4a565b915062000ec88362000e4a565b925082820262000ed88162000e4a565b9150828204841483151762000ef25762000ef162000ccd565b5b5092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000f7557607f821691505b60208210810362000f8b5762000f8a62000f30565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000fef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000fb2565b62000ffb868362000fb2565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6200103c62001036620010308462000e4a565b62001013565b62000e4a565b9050919050565b5f819050919050565b62001057836200101c565b6200106f620010668262001043565b84845462000fbe565b825550505050565b5f90565b6200108562001077565b620010928184846200104c565b505050565b5b81811015620010b957620010ad5f826200107b565b60018101905062001098565b5050565b601f8211156200110857620010d28162000f91565b620010dd8462000fa3565b81016020851015620010ed578190505b62001105620010fc8562000fa3565b83018262001097565b50505b505050565b5f82821c905092915050565b5f6200112a5f19846008026200110d565b1980831691505092915050565b5f62001144838362001119565b9150826002028217905092915050565b6200115f8262000ef9565b67ffffffffffffffff8111156200117b576200117a62000f03565b5b62001187825462000f5d565b62001194828285620010bd565b5f60209050601f831160018114620011ca575f8415620011b5578287015190505b620011c1858262001137565b86555062001230565b601f198416620011da8662000f91565b5f5b828110156200120357848901518255600182019150602085019450602081019050620011dc565b868310156200122357848901516200121f601f89168262001119565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62001267826200123c565b9050919050565b62001279816200125b565b811462001284575f80fd5b50565b5f8151905062001297816200126e565b92915050565b5f60208284031215620012b557620012b462001238565b5b5f620012c48482850162001287565b91505092915050565b620012d8816200125b565b82525050565b5f604082019050620012f35f830185620012cd565b620013026020830184620012cd565b9392505050565b620013148162000e4a565b82525050565b5f6040820190506200132f5f830185620012cd565b6200133e602083018462001309565b9392505050565b5f8115159050919050565b6200135b8162001345565b811462001366575f80fd5b50565b5f81519050620013798162001350565b92915050565b5f6020828403121562001397576200139662001238565b5b5f620013a68482850162001369565b91505092915050565b620013ba8162001345565b82525050565b5f602082019050620013d55f830184620013af565b92915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001421601f83620013db565b91506200142e82620013eb565b602082019050919050565b5f6020820190508181035f830152620014528162001413565b9050919050565b5f620014658262000e4a565b9150620014728362000e4a565b92508282019050808211156200148d576200148c62000ccd565b5b92915050565b5f602082019050620014a85f83018462001309565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6200150a602483620013db565b91506200151782620014ae565b604082019050919050565b5f6020820190508181035f8301526200153b81620014fc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200159e602283620013db565b9150620015ab8262001542565b604082019050919050565b5f6020820190508181035f830152620015cf8162001590565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200160c602083620013db565b91506200161982620015d6565b602082019050919050565b5f6020820190508181035f8301526200163d81620015fe565b9050919050565b608051613496620016795f395f8181610b1c01528181610fe9015281816114df015281816115be01526115e501526134965ff3fe608060405260043610610228575f3560e01c80637571336a11610122578063c8c8ebe4116100aa578063e6990a901161006e578063e6990a90146107bf578063e6d40d60146107e9578063f2fde38b14610813578063f8b45b051461083b578063ffb54a99146108655761022f565b8063c8c8ebe4146106ef578063c9567bf914610719578063ca7030751461072f578063dd62ed3e14610759578063e2f45605146107955761022f565b80639a7a23d6116100f15780639a7a23d6146105ff5780639bbad41014610627578063a457c2d71461064f578063a9059cbb1461068b578063c0246668146106c75761022f565b80637571336a1461056d57806389291a8f146105955780638da5cb5b146105ab57806395d89b41146105d55761022f565b806339509351116101b0578063590f897e11610174578063590f897e146104b15780636ddd1713146104db57806370a0823114610505578063715018a614610541578063751039fc146105575761022f565b806339509351146103cf57806340b9a54b1461040b5780634fbee1931461043557806351bc3c8514610471578063583e0568146104875761022f565b8063239cd5a5116101f7578063239cd5a5146102ed57806323b872dd14610315578063311028af14610351578063313ce5671461037b57806332424aa3146103a55761022f565b806306fdde0314610233578063095ea7b31461025d5780630c6b67371461029957806318160ddd146102c35761022f565b3661022f57005b5f80fd5b34801561023e575f80fd5b5061024761088f565b60405161025491906124e8565b60405180910390f35b348015610268575f80fd5b50610283600480360381019061027e9190612599565b61091f565b60405161029091906125f1565b60405180910390f35b3480156102a4575f80fd5b506102ad610941565b6040516102ba9190612619565b60405180910390f35b3480156102ce575f80fd5b506102d7610947565b6040516102e49190612619565b60405180910390f35b3480156102f8575f80fd5b50610313600480360381019061030e9190612632565b610950565b005b348015610320575f80fd5b5061033b6004803603810190610336919061265d565b6109d4565b60405161034891906125f1565b60405180910390f35b34801561035c575f80fd5b50610365610a02565b6040516103729190612619565b60405180910390f35b348015610386575f80fd5b5061038f610a08565b60405161039c91906126c8565b60405180910390f35b3480156103b0575f80fd5b506103b9610a10565b6040516103c691906126c8565b60405180910390f35b3480156103da575f80fd5b506103f560048036038101906103f09190612599565b610a15565b60405161040291906125f1565b60405180910390f35b348015610416575f80fd5b5061041f610a4b565b60405161042c9190612619565b60405180910390f35b348015610440575f80fd5b5061045b600480360381019061045691906126e1565b610a51565b60405161046891906125f1565b60405180910390f35b34801561047c575f80fd5b50610485610aa3565b005b348015610492575f80fd5b5061049b610b1a565b6040516104a89190612767565b60405180910390f35b3480156104bc575f80fd5b506104c5610b3e565b6040516104d29190612619565b60405180910390f35b3480156104e6575f80fd5b506104ef610b44565b6040516104fc91906125f1565b60405180910390f35b348015610510575f80fd5b5061052b600480360381019061052691906126e1565b610b57565b6040516105389190612619565b60405180910390f35b34801561054c575f80fd5b50610555610b9c565b005b348015610562575f80fd5b5061056b610baf565b005b348015610578575f80fd5b50610593600480360381019061058e91906127aa565b610bd3565b005b3480156105a0575f80fd5b506105a9610c33565b005b3480156105b6575f80fd5b506105bf610cc3565b6040516105cc91906127f7565b60405180910390f35b3480156105e0575f80fd5b506105e9610ceb565b6040516105f691906124e8565b60405180910390f35b34801561060a575f80fd5b50610625600480360381019061062091906127aa565b610d7b565b005b348015610632575f80fd5b5061064d60048036038101906106489190612632565b610e20565b005b34801561065a575f80fd5b5061067560048036038101906106709190612599565b610e45565b60405161068291906125f1565b60405180910390f35b348015610696575f80fd5b506106b160048036038101906106ac9190612599565b610eba565b6040516106be91906125f1565b60405180910390f35b3480156106d2575f80fd5b506106ed60048036038101906106e891906127aa565b610edc565b005b3480156106fa575f80fd5b50610703610f8a565b6040516107109190612619565b60405180910390f35b348015610724575f80fd5b5061072d610f90565b005b34801561073a575f80fd5b50610743611144565b6040516107509190612619565b60405180910390f35b348015610764575f80fd5b5061077f600480360381019061077a9190612810565b61114a565b60405161078c9190612619565b60405180910390f35b3480156107a0575f80fd5b506107a96111cc565b6040516107b69190612619565b60405180910390f35b3480156107ca575f80fd5b506107d36111d2565b6040516107e09190612619565b60405180910390f35b3480156107f4575f80fd5b506107fd6111d8565b60405161080a9190612619565b60405180910390f35b34801561081e575f80fd5b50610839600480360381019061083491906126e1565b6111de565b005b348015610846575f80fd5b5061084f611260565b60405161085c9190612619565b60405180910390f35b348015610870575f80fd5b50610879611266565b60405161088691906125f1565b60405180910390f35b60606003805461089e9061287b565b80601f01602080910402602001604051908101604052809291908181526020018280546108ca9061287b565b80156109155780601f106108ec57610100808354040283529160200191610915565b820191905f5260205f20905b8154815290600101906020018083116108f857829003601f168201915b5050505050905090565b5f80610929611278565b905061093681858561127f565b600191505092915050565b600e5481565b5f600254905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610990611278565b73ffffffffffffffffffffffffffffffffffffffff16146109af575f80fd5b5f6109b930610b57565b9050808211156109c7575f80fd5b6109d082611442565b5050565b5f806109de611278565b90506109eb858285611689565b6109f6858585611714565b60019150509392505050565b60095481565b5f6009905090565b600981565b5f80610a1f611278565b9050610a40818585610a31858961114a565b610a3b91906128d8565b61127f565b600191505092915050565b60125481565b5f60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ae3611278565b73ffffffffffffffffffffffffffffffffffffffff1614610b02575f80fd5b5f610b0c30610b57565b9050610b1781611442565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60135481565b600f60019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ba4611fe0565b610bad5f61205e565b565b610bb7611fe0565b5f610bc0610947565b905080600a8190555080600b8190555050565b610bdb611fe0565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610c3b611fe0565b5f4711610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490612955565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610cc0573d5f803e3d5ffd5b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610cfa9061287b565b80601f0160208091040260200160405190810160405280929190818152602001828054610d269061287b565b8015610d715780601f10610d4857610100808354040283529160200191610d71565b820191905f5260205f20905b815481529060010190602001808311610d5457829003601f168201915b5050505050905090565b610d83611fe0565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e09906129e3565b60405180910390fd5b610e1c8282612121565b5050565b610e28611fe0565b670de0b6b3a764000081610e3c9190612a01565b600c8190555050565b5f80610e4f611278565b90505f610e5c828661114a565b905083811015610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9890612ab2565b60405180910390fd5b610eae828686840361127f565b60019250505092915050565b5f80610ec4611278565b9050610ed1818585611714565b600191505092915050565b610ee4611fe0565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610f7e91906125f1565b60405180910390a25050565b600a5481565b610f98611fe0565b600f5f9054906101000a900460ff1615610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde90612b1a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71947303073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161105e91906127f7565b602060405180830381865afa158015611079573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109d9190612b4c565b5f806110a7610cc3565b426040518863ffffffff1660e01b81526004016110c996959493929190612bb0565b60606040518083038185885af11580156110e5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061110a9190612c0f565b5050506001600f60016101000a81548160ff0219169083151502179055506001600f5f6101000a81548160ff021916908315150217905550565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600c5481565b60115481565b60105481565b6111e6611fe0565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90612ccf565b60405180910390fd5b61125d8161205e565b50565b600b5481565b600f5f9054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e490612d5d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361135b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135290612deb565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114359190612619565b60405180910390a3505050565b5f600267ffffffffffffffff81111561145e5761145d612e09565b5b60405190808252806020026020018201604052801561148c5781602001602082028036833780820191505090505b50905030815f815181106114a3576114a2612e36565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611546573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156a9190612e77565b8160018151811061157e5761157d612e36565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506115e3307f00000000000000000000000000000000000000000000000000000000000000008461127f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f84733f687f43c3aaa91aad30d255024132c51db3b8ca426040518663ffffffff1660e01b8152600401611658959493929190612f59565b5f604051808303815f87803b15801561166f575f80fd5b505af1158015611681573d5f803e3d5ffd5b505050505050565b5f611694848461114a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461170e5781811015611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790612ffb565b60405180910390fd5b61170d848484840361127f565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177990613089565b60405180910390fd5b601454600d5410611797576010546012819055505b601554600e54106117ac576011546013819055505b5f81036117c3576117be83835f6121bf565b611fdb565b6117cb610cc3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118395750611809610cc3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187157505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118ab575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118c45750600860149054906101000a900460ff16155b15611cbf57600f5f9054906101000a900460ff166119b75760165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611977575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad906130f1565b60405180910390fd5b5b60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611a54575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611b1257600a54811115611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a959061317f565b60405180910390fd5b600b54611aaa83610b57565b82611ab591906128d8565b1115611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed906131e7565b60405180910390fd5b600d5f815480929190611b0890613205565b9190505550611cbe565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611baf575060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611c1557600a54811115611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf0906132bc565b60405180910390fd5b600e5f815480929190611c0b90613205565b9190505550611cbd565b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611cbc57600b54611c6f83610b57565b82611c7a91906128d8565b1115611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb2906131e7565b60405180910390fd5b5b5b5b5b5f611cc930610b57565b90505f8082119050808015611cea5750600f60019054906101000a900460ff165b8015611d035750600860149054906101000a900460ff16155b8015611d56575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611da9575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611dfc575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611e40576001600860146101000a81548160ff021916908315150217905550611e2583612401565b5f600860146101000a81548160ff0219169083151502179055505b5f600860149054906101000a900460ff1615905060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611eef575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611ef8575f90505b5f8115611fcb5760185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611f7d57611f766064611f686013548861242a90919063ffffffff16565b61243f90919063ffffffff16565b9050611fa8565b611fa56064611f976012548861242a90919063ffffffff16565b61243f90919063ffffffff16565b90505b5f811115611fbc57611fbb8730836121bf565b5b8085611fc891906132da565b94505b611fd68787876121bf565b505050505b505050565b611fe8611278565b73ffffffffffffffffffffffffffffffffffffffff16612006610cc3565b73ffffffffffffffffffffffffffffffffffffffff161461205c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205390613357565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361222d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222490613089565b60405180910390fd5b612238838383612454565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015806122b257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e8906133e5565b60405180910390fd5b81811061230057818103612302565b5f5b5f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123e89190612619565b60405180910390a36123fb848484612459565b50505050565b5f61240b30610b57565b90505f808203612419578290505b81905061242581611442565b505050565b5f81836124379190612a01565b905092915050565b5f818361244c9190613430565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561249557808201518184015260208101905061247a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6124ba8261245e565b6124c48185612468565b93506124d4818560208601612478565b6124dd816124a0565b840191505092915050565b5f6020820190508181035f83015261250081846124b0565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6125358261250c565b9050919050565b6125458161252b565b811461254f575f80fd5b50565b5f813590506125608161253c565b92915050565b5f819050919050565b61257881612566565b8114612582575f80fd5b50565b5f813590506125938161256f565b92915050565b5f80604083850312156125af576125ae612508565b5b5f6125bc85828601612552565b92505060206125cd85828601612585565b9150509250929050565b5f8115159050919050565b6125eb816125d7565b82525050565b5f6020820190506126045f8301846125e2565b92915050565b61261381612566565b82525050565b5f60208201905061262c5f83018461260a565b92915050565b5f6020828403121561264757612646612508565b5b5f61265484828501612585565b91505092915050565b5f805f6060848603121561267457612673612508565b5b5f61268186828701612552565b935050602061269286828701612552565b92505060406126a386828701612585565b9150509250925092565b5f60ff82169050919050565b6126c2816126ad565b82525050565b5f6020820190506126db5f8301846126b9565b92915050565b5f602082840312156126f6576126f5612508565b5b5f61270384828501612552565b91505092915050565b5f819050919050565b5f61272f61272a6127258461250c565b61270c565b61250c565b9050919050565b5f61274082612715565b9050919050565b5f61275182612736565b9050919050565b61276181612747565b82525050565b5f60208201905061277a5f830184612758565b92915050565b612789816125d7565b8114612793575f80fd5b50565b5f813590506127a481612780565b92915050565b5f80604083850312156127c0576127bf612508565b5b5f6127cd85828601612552565b92505060206127de85828601612796565b9150509250929050565b6127f18161252b565b82525050565b5f60208201905061280a5f8301846127e8565b92915050565b5f806040838503121561282657612825612508565b5b5f61283385828601612552565b925050602061284485828601612552565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061289257607f821691505b6020821081036128a5576128a461284e565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6128e282612566565b91506128ed83612566565b9250828201905080821115612905576129046128ab565b5b92915050565b7f546f6b656e3a206e6f2045544820746f20636c656172000000000000000000005f82015250565b5f61293f601683612468565b915061294a8261290b565b602082019050919050565b5f6020820190508181035f83015261296c81612933565b9050919050565b7f506169722063616e6e6f742062652072656d6f7665642066726f6d206175746f5f8201527f6d617465644d61726b65744d616b657250616972730000000000000000000000602082015250565b5f6129cd603583612468565b91506129d882612973565b604082019050919050565b5f6020820190508181035f8301526129fa816129c1565b9050919050565b5f612a0b82612566565b9150612a1683612566565b9250828202612a2481612566565b91508282048414831517612a3b57612a3a6128ab565b5b5092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612a9c602583612468565b9150612aa782612a42565b604082019050919050565b5f6020820190508181035f830152612ac981612a90565b9050919050565b7f54726164696e67206973206f70656e65640000000000000000000000000000005f82015250565b5f612b04601183612468565b9150612b0f82612ad0565b602082019050919050565b5f6020820190508181035f830152612b3181612af8565b9050919050565b5f81519050612b468161256f565b92915050565b5f60208284031215612b6157612b60612508565b5b5f612b6e84828501612b38565b91505092915050565b5f819050919050565b5f612b9a612b95612b9084612b77565b61270c565b612566565b9050919050565b612baa81612b80565b82525050565b5f60c082019050612bc35f8301896127e8565b612bd0602083018861260a565b612bdd6040830187612ba1565b612bea6060830186612ba1565b612bf760808301856127e8565b612c0460a083018461260a565b979650505050505050565b5f805f60608486031215612c2657612c25612508565b5b5f612c3386828701612b38565b9350506020612c4486828701612b38565b9250506040612c5586828701612b38565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612cb9602683612468565b9150612cc482612c5f565b604082019050919050565b5f6020820190508181035f830152612ce681612cad565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612d47602483612468565b9150612d5282612ced565b604082019050919050565b5f6020820190508181035f830152612d7481612d3b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612dd5602283612468565b9150612de082612d7b565b604082019050919050565b5f6020820190508181035f830152612e0281612dc9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050612e718161253c565b92915050565b5f60208284031215612e8c57612e8b612508565b5b5f612e9984828501612e63565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612ed48161252b565b82525050565b5f612ee58383612ecb565b60208301905092915050565b5f602082019050919050565b5f612f0782612ea2565b612f118185612eac565b9350612f1c83612ebc565b805f5b83811015612f4c578151612f338882612eda565b9750612f3e83612ef1565b925050600181019050612f1f565b5085935050505092915050565b5f60a082019050612f6c5f83018861260a565b612f796020830187612ba1565b8181036040830152612f8b8186612efd565b9050612f9a60608301856127e8565b612fa7608083018461260a565b9695505050505050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612fe5601d83612468565b9150612ff082612fb1565b602082019050919050565b5f6020820190508181035f83015261301281612fd9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613073602583612468565b915061307e82613019565b604082019050919050565b5f6020820190508181035f8301526130a081613067565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6130db601683612468565b91506130e6826130a7565b602082019050919050565b5f6020820190508181035f830152613108816130cf565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613169603583612468565b91506131748261310f565b604082019050919050565b5f6020820190508181035f8301526131968161315d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6131d1601383612468565b91506131dc8261319d565b602082019050919050565b5f6020820190508181035f8301526131fe816131c5565b9050919050565b5f61320f82612566565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613241576132406128ab565b5b600182019050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6132a6603683612468565b91506132b18261324c565b604082019050919050565b5f6020820190508181035f8301526132d38161329a565b9050919050565b5f6132e482612566565b91506132ef83612566565b9250828203905081811115613307576133066128ab565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613341602083612468565b915061334c8261330d565b602082019050919050565b5f6020820190508181035f83015261336e81613335565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6133cf602683612468565b91506133da82613375565b604082019050919050565b5f6020820190508181035f8301526133fc816133c3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61343a82612566565b915061344583612566565b92508261345557613454613403565b5b82820490509291505056fea2646970667358221220c62e0687aea2a9c39b7ffbf3a9c7a8faedcea3f199cc31f991481de16c199f3664736f6c63430008140033
Deployed Bytecode
0x608060405260043610610228575f3560e01c80637571336a11610122578063c8c8ebe4116100aa578063e6990a901161006e578063e6990a90146107bf578063e6d40d60146107e9578063f2fde38b14610813578063f8b45b051461083b578063ffb54a99146108655761022f565b8063c8c8ebe4146106ef578063c9567bf914610719578063ca7030751461072f578063dd62ed3e14610759578063e2f45605146107955761022f565b80639a7a23d6116100f15780639a7a23d6146105ff5780639bbad41014610627578063a457c2d71461064f578063a9059cbb1461068b578063c0246668146106c75761022f565b80637571336a1461056d57806389291a8f146105955780638da5cb5b146105ab57806395d89b41146105d55761022f565b806339509351116101b0578063590f897e11610174578063590f897e146104b15780636ddd1713146104db57806370a0823114610505578063715018a614610541578063751039fc146105575761022f565b806339509351146103cf57806340b9a54b1461040b5780634fbee1931461043557806351bc3c8514610471578063583e0568146104875761022f565b8063239cd5a5116101f7578063239cd5a5146102ed57806323b872dd14610315578063311028af14610351578063313ce5671461037b57806332424aa3146103a55761022f565b806306fdde0314610233578063095ea7b31461025d5780630c6b67371461029957806318160ddd146102c35761022f565b3661022f57005b5f80fd5b34801561023e575f80fd5b5061024761088f565b60405161025491906124e8565b60405180910390f35b348015610268575f80fd5b50610283600480360381019061027e9190612599565b61091f565b60405161029091906125f1565b60405180910390f35b3480156102a4575f80fd5b506102ad610941565b6040516102ba9190612619565b60405180910390f35b3480156102ce575f80fd5b506102d7610947565b6040516102e49190612619565b60405180910390f35b3480156102f8575f80fd5b50610313600480360381019061030e9190612632565b610950565b005b348015610320575f80fd5b5061033b6004803603810190610336919061265d565b6109d4565b60405161034891906125f1565b60405180910390f35b34801561035c575f80fd5b50610365610a02565b6040516103729190612619565b60405180910390f35b348015610386575f80fd5b5061038f610a08565b60405161039c91906126c8565b60405180910390f35b3480156103b0575f80fd5b506103b9610a10565b6040516103c691906126c8565b60405180910390f35b3480156103da575f80fd5b506103f560048036038101906103f09190612599565b610a15565b60405161040291906125f1565b60405180910390f35b348015610416575f80fd5b5061041f610a4b565b60405161042c9190612619565b60405180910390f35b348015610440575f80fd5b5061045b600480360381019061045691906126e1565b610a51565b60405161046891906125f1565b60405180910390f35b34801561047c575f80fd5b50610485610aa3565b005b348015610492575f80fd5b5061049b610b1a565b6040516104a89190612767565b60405180910390f35b3480156104bc575f80fd5b506104c5610b3e565b6040516104d29190612619565b60405180910390f35b3480156104e6575f80fd5b506104ef610b44565b6040516104fc91906125f1565b60405180910390f35b348015610510575f80fd5b5061052b600480360381019061052691906126e1565b610b57565b6040516105389190612619565b60405180910390f35b34801561054c575f80fd5b50610555610b9c565b005b348015610562575f80fd5b5061056b610baf565b005b348015610578575f80fd5b50610593600480360381019061058e91906127aa565b610bd3565b005b3480156105a0575f80fd5b506105a9610c33565b005b3480156105b6575f80fd5b506105bf610cc3565b6040516105cc91906127f7565b60405180910390f35b3480156105e0575f80fd5b506105e9610ceb565b6040516105f691906124e8565b60405180910390f35b34801561060a575f80fd5b50610625600480360381019061062091906127aa565b610d7b565b005b348015610632575f80fd5b5061064d60048036038101906106489190612632565b610e20565b005b34801561065a575f80fd5b5061067560048036038101906106709190612599565b610e45565b60405161068291906125f1565b60405180910390f35b348015610696575f80fd5b506106b160048036038101906106ac9190612599565b610eba565b6040516106be91906125f1565b60405180910390f35b3480156106d2575f80fd5b506106ed60048036038101906106e891906127aa565b610edc565b005b3480156106fa575f80fd5b50610703610f8a565b6040516107109190612619565b60405180910390f35b348015610724575f80fd5b5061072d610f90565b005b34801561073a575f80fd5b50610743611144565b6040516107509190612619565b60405180910390f35b348015610764575f80fd5b5061077f600480360381019061077a9190612810565b61114a565b60405161078c9190612619565b60405180910390f35b3480156107a0575f80fd5b506107a96111cc565b6040516107b69190612619565b60405180910390f35b3480156107ca575f80fd5b506107d36111d2565b6040516107e09190612619565b60405180910390f35b3480156107f4575f80fd5b506107fd6111d8565b60405161080a9190612619565b60405180910390f35b34801561081e575f80fd5b50610839600480360381019061083491906126e1565b6111de565b005b348015610846575f80fd5b5061084f611260565b60405161085c9190612619565b60405180910390f35b348015610870575f80fd5b50610879611266565b60405161088691906125f1565b60405180910390f35b60606003805461089e9061287b565b80601f01602080910402602001604051908101604052809291908181526020018280546108ca9061287b565b80156109155780601f106108ec57610100808354040283529160200191610915565b820191905f5260205f20905b8154815290600101906020018083116108f857829003601f168201915b5050505050905090565b5f80610929611278565b905061093681858561127f565b600191505092915050565b600e5481565b5f600254905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610990611278565b73ffffffffffffffffffffffffffffffffffffffff16146109af575f80fd5b5f6109b930610b57565b9050808211156109c7575f80fd5b6109d082611442565b5050565b5f806109de611278565b90506109eb858285611689565b6109f6858585611714565b60019150509392505050565b60095481565b5f6009905090565b600981565b5f80610a1f611278565b9050610a40818585610a31858961114a565b610a3b91906128d8565b61127f565b600191505092915050565b60125481565b5f60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ae3611278565b73ffffffffffffffffffffffffffffffffffffffff1614610b02575f80fd5b5f610b0c30610b57565b9050610b1781611442565b50565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60135481565b600f60019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ba4611fe0565b610bad5f61205e565b565b610bb7611fe0565b5f610bc0610947565b905080600a8190555080600b8190555050565b610bdb611fe0565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610c3b611fe0565b5f4711610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490612955565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610cc0573d5f803e3d5ffd5b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610cfa9061287b565b80601f0160208091040260200160405190810160405280929190818152602001828054610d269061287b565b8015610d715780601f10610d4857610100808354040283529160200191610d71565b820191905f5260205f20905b815481529060010190602001808311610d5457829003601f168201915b5050505050905090565b610d83611fe0565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e09906129e3565b60405180910390fd5b610e1c8282612121565b5050565b610e28611fe0565b670de0b6b3a764000081610e3c9190612a01565b600c8190555050565b5f80610e4f611278565b90505f610e5c828661114a565b905083811015610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9890612ab2565b60405180910390fd5b610eae828686840361127f565b60019250505092915050565b5f80610ec4611278565b9050610ed1818585611714565b600191505092915050565b610ee4611fe0565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610f7e91906125f1565b60405180910390a25050565b600a5481565b610f98611fe0565b600f5f9054906101000a900460ff1615610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde90612b1a565b60405180910390fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71947303073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161105e91906127f7565b602060405180830381865afa158015611079573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109d9190612b4c565b5f806110a7610cc3565b426040518863ffffffff1660e01b81526004016110c996959493929190612bb0565b60606040518083038185885af11580156110e5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061110a9190612c0f565b5050506001600f60016101000a81548160ff0219169083151502179055506001600f5f6101000a81548160ff021916908315150217905550565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600c5481565b60115481565b60105481565b6111e6611fe0565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90612ccf565b60405180910390fd5b61125d8161205e565b50565b600b5481565b600f5f9054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e490612d5d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361135b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135290612deb565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114359190612619565b60405180910390a3505050565b5f600267ffffffffffffffff81111561145e5761145d612e09565b5b60405190808252806020026020018201604052801561148c5781602001602082028036833780820191505090505b50905030815f815181106114a3576114a2612e36565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611546573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156a9190612e77565b8160018151811061157e5761157d612e36565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506115e3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461127f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f84733f687f43c3aaa91aad30d255024132c51db3b8ca426040518663ffffffff1660e01b8152600401611658959493929190612f59565b5f604051808303815f87803b15801561166f575f80fd5b505af1158015611681573d5f803e3d5ffd5b505050505050565b5f611694848461114a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461170e5781811015611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790612ffb565b60405180910390fd5b61170d848484840361127f565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177990613089565b60405180910390fd5b601454600d5410611797576010546012819055505b601554600e54106117ac576011546013819055505b5f81036117c3576117be83835f6121bf565b611fdb565b6117cb610cc3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118395750611809610cc3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187157505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118ab575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118c45750600860149054906101000a900460ff16155b15611cbf57600f5f9054906101000a900460ff166119b75760165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611977575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad906130f1565b60405180910390fd5b5b60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611a54575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611b1257600a54811115611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a959061317f565b60405180910390fd5b600b54611aaa83610b57565b82611ab591906128d8565b1115611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed906131e7565b60405180910390fd5b600d5f815480929190611b0890613205565b9190505550611cbe565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611baf575060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611c1557600a54811115611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf0906132bc565b60405180910390fd5b600e5f815480929190611c0b90613205565b9190505550611cbd565b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611cbc57600b54611c6f83610b57565b82611c7a91906128d8565b1115611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb2906131e7565b60405180910390fd5b5b5b5b5b5f611cc930610b57565b90505f8082119050808015611cea5750600f60019054906101000a900460ff165b8015611d035750600860149054906101000a900460ff16155b8015611d56575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611da9575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611dfc575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611e40576001600860146101000a81548160ff021916908315150217905550611e2583612401565b5f600860146101000a81548160ff0219169083151502179055505b5f600860149054906101000a900460ff1615905060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611eef575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611ef8575f90505b5f8115611fcb5760185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611f7d57611f766064611f686013548861242a90919063ffffffff16565b61243f90919063ffffffff16565b9050611fa8565b611fa56064611f976012548861242a90919063ffffffff16565b61243f90919063ffffffff16565b90505b5f811115611fbc57611fbb8730836121bf565b5b8085611fc891906132da565b94505b611fd68787876121bf565b505050505b505050565b611fe8611278565b73ffffffffffffffffffffffffffffffffffffffff16612006610cc3565b73ffffffffffffffffffffffffffffffffffffffff161461205c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205390613357565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361222d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222490613089565b60405180910390fd5b612238838383612454565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015806122b257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e8906133e5565b60405180910390fd5b81811061230057818103612302565b5f5b5f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123e89190612619565b60405180910390a36123fb848484612459565b50505050565b5f61240b30610b57565b90505f808203612419578290505b81905061242581611442565b505050565b5f81836124379190612a01565b905092915050565b5f818361244c9190613430565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561249557808201518184015260208101905061247a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6124ba8261245e565b6124c48185612468565b93506124d4818560208601612478565b6124dd816124a0565b840191505092915050565b5f6020820190508181035f83015261250081846124b0565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6125358261250c565b9050919050565b6125458161252b565b811461254f575f80fd5b50565b5f813590506125608161253c565b92915050565b5f819050919050565b61257881612566565b8114612582575f80fd5b50565b5f813590506125938161256f565b92915050565b5f80604083850312156125af576125ae612508565b5b5f6125bc85828601612552565b92505060206125cd85828601612585565b9150509250929050565b5f8115159050919050565b6125eb816125d7565b82525050565b5f6020820190506126045f8301846125e2565b92915050565b61261381612566565b82525050565b5f60208201905061262c5f83018461260a565b92915050565b5f6020828403121561264757612646612508565b5b5f61265484828501612585565b91505092915050565b5f805f6060848603121561267457612673612508565b5b5f61268186828701612552565b935050602061269286828701612552565b92505060406126a386828701612585565b9150509250925092565b5f60ff82169050919050565b6126c2816126ad565b82525050565b5f6020820190506126db5f8301846126b9565b92915050565b5f602082840312156126f6576126f5612508565b5b5f61270384828501612552565b91505092915050565b5f819050919050565b5f61272f61272a6127258461250c565b61270c565b61250c565b9050919050565b5f61274082612715565b9050919050565b5f61275182612736565b9050919050565b61276181612747565b82525050565b5f60208201905061277a5f830184612758565b92915050565b612789816125d7565b8114612793575f80fd5b50565b5f813590506127a481612780565b92915050565b5f80604083850312156127c0576127bf612508565b5b5f6127cd85828601612552565b92505060206127de85828601612796565b9150509250929050565b6127f18161252b565b82525050565b5f60208201905061280a5f8301846127e8565b92915050565b5f806040838503121561282657612825612508565b5b5f61283385828601612552565b925050602061284485828601612552565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061289257607f821691505b6020821081036128a5576128a461284e565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6128e282612566565b91506128ed83612566565b9250828201905080821115612905576129046128ab565b5b92915050565b7f546f6b656e3a206e6f2045544820746f20636c656172000000000000000000005f82015250565b5f61293f601683612468565b915061294a8261290b565b602082019050919050565b5f6020820190508181035f83015261296c81612933565b9050919050565b7f506169722063616e6e6f742062652072656d6f7665642066726f6d206175746f5f8201527f6d617465644d61726b65744d616b657250616972730000000000000000000000602082015250565b5f6129cd603583612468565b91506129d882612973565b604082019050919050565b5f6020820190508181035f8301526129fa816129c1565b9050919050565b5f612a0b82612566565b9150612a1683612566565b9250828202612a2481612566565b91508282048414831517612a3b57612a3a6128ab565b5b5092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612a9c602583612468565b9150612aa782612a42565b604082019050919050565b5f6020820190508181035f830152612ac981612a90565b9050919050565b7f54726164696e67206973206f70656e65640000000000000000000000000000005f82015250565b5f612b04601183612468565b9150612b0f82612ad0565b602082019050919050565b5f6020820190508181035f830152612b3181612af8565b9050919050565b5f81519050612b468161256f565b92915050565b5f60208284031215612b6157612b60612508565b5b5f612b6e84828501612b38565b91505092915050565b5f819050919050565b5f612b9a612b95612b9084612b77565b61270c565b612566565b9050919050565b612baa81612b80565b82525050565b5f60c082019050612bc35f8301896127e8565b612bd0602083018861260a565b612bdd6040830187612ba1565b612bea6060830186612ba1565b612bf760808301856127e8565b612c0460a083018461260a565b979650505050505050565b5f805f60608486031215612c2657612c25612508565b5b5f612c3386828701612b38565b9350506020612c4486828701612b38565b9250506040612c5586828701612b38565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612cb9602683612468565b9150612cc482612c5f565b604082019050919050565b5f6020820190508181035f830152612ce681612cad565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612d47602483612468565b9150612d5282612ced565b604082019050919050565b5f6020820190508181035f830152612d7481612d3b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612dd5602283612468565b9150612de082612d7b565b604082019050919050565b5f6020820190508181035f830152612e0281612dc9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050612e718161253c565b92915050565b5f60208284031215612e8c57612e8b612508565b5b5f612e9984828501612e63565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612ed48161252b565b82525050565b5f612ee58383612ecb565b60208301905092915050565b5f602082019050919050565b5f612f0782612ea2565b612f118185612eac565b9350612f1c83612ebc565b805f5b83811015612f4c578151612f338882612eda565b9750612f3e83612ef1565b925050600181019050612f1f565b5085935050505092915050565b5f60a082019050612f6c5f83018861260a565b612f796020830187612ba1565b8181036040830152612f8b8186612efd565b9050612f9a60608301856127e8565b612fa7608083018461260a565b9695505050505050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612fe5601d83612468565b9150612ff082612fb1565b602082019050919050565b5f6020820190508181035f83015261301281612fd9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613073602583612468565b915061307e82613019565b604082019050919050565b5f6020820190508181035f8301526130a081613067565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6130db601683612468565b91506130e6826130a7565b602082019050919050565b5f6020820190508181035f830152613108816130cf565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613169603583612468565b91506131748261310f565b604082019050919050565b5f6020820190508181035f8301526131968161315d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6131d1601383612468565b91506131dc8261319d565b602082019050919050565b5f6020820190508181035f8301526131fe816131c5565b9050919050565b5f61320f82612566565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613241576132406128ab565b5b600182019050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6132a6603683612468565b91506132b18261324c565b604082019050919050565b5f6020820190508181035f8301526132d38161329a565b9050919050565b5f6132e482612566565b91506132ef83612566565b9250828203905081811115613307576133066128ab565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613341602083612468565b915061334c8261330d565b602082019050919050565b5f6020820190508181035f83015261336e81613335565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6133cf602683612468565b91506133da82613375565b604082019050919050565b5f6020820190508181035f8301526133fc816133c3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61343a82612566565b915061344583612566565b92508261345557613454613403565b5b82820490509291505056fea2646970667358221220c62e0687aea2a9c39b7ffbf3a9c7a8faedcea3f199cc31f991481de16c199f3664736f6c63430008140033
Deployed Bytecode Sourcemap
28078:8443:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17885:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19504:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28847:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18273:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35945:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20285:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28554:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30840:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28512:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20955:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29033:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32100:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35742:195;;;;;;;;;;;;;:::i;:::-;;28153:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29067:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28918:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18444:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16409:103;;;;;;;;;;;;;:::i;:::-;;35210:194;;;;;;;;;;;;;:::i;:::-;;31288:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35412:185;;;;;;;;;;;;;:::i;:::-;;15768:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18104:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31645:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35605:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21696:424;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18777:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31455:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28623:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30948:332;;;;;;;;;;;;;:::i;:::-;;28817:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19033:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28750:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28995:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28958:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16667:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28692:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28880:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17885:100;17939:13;17972:5;17965:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17885:100;:::o;19504:201::-;19587:4;19604:13;19620:12;:10;:12::i;:::-;19604:28;;19643:32;19652:5;19659:7;19668:6;19643:8;:32::i;:::-;19693:4;19686:11;;;19504:201;;;;:::o;28847:24::-;;;;:::o;18273:108::-;18334:7;18361:12;;18354:19;;18273:108;:::o;35945:255::-;36035:15;;;;;;;;;;;36019:31;;:12;:10;:12::i;:::-;:31;;;36011:40;;;;;;36062:23;36088:24;36106:4;36088:9;:24::i;:::-;36062:50;;36141:15;36131:6;:25;;36123:34;;;;;;36168:24;36185:6;36168:16;:24::i;:::-;36000:200;35945:255;:::o;20285:261::-;20382:4;20399:15;20417:12;:10;:12::i;:::-;20399:30;;20440:38;20456:4;20462:7;20471:6;20440:15;:38::i;:::-;20489:27;20499:4;20505:2;20509:6;20489:9;:27::i;:::-;20534:4;20527:11;;;20285:261;;;;;:::o;28554:62::-;;;;:::o;30840:100::-;30898:5;28546:1;30916:16;;30840:100;:::o;28512:35::-;28546:1;28512:35;:::o;20955:238::-;21043:4;21060:13;21076:12;:10;:12::i;:::-;21060:28;;21099:64;21108:5;21115:7;21152:10;21124:25;21134:5;21141:7;21124:9;:25::i;:::-;:38;;;;:::i;:::-;21099:8;:64::i;:::-;21181:4;21174:11;;;20955:238;;;;:::o;29033:27::-;;;;:::o;32100:126::-;32166:4;32190:19;:28;32210:7;32190:28;;;;;;;;;;;;;;;;;;;;;;;;;32183:35;;32100:126;;;:::o;35742:195::-;35808:15;;;;;;;;;;;35792:31;;:12;:10;:12::i;:::-;:31;;;35784:40;;;;;;35835:23;35861:24;35879:4;35861:9;:24::i;:::-;35835:50;;35896:33;35913:15;35896:16;:33::i;:::-;35773:164;35742:195::o;28153:52::-;;;:::o;29067:28::-;;;;:::o;28918:31::-;;;;;;;;;;;;;:::o;18444:127::-;18518:7;18545:9;:18;18555:7;18545:18;;;;;;;;;;;;;;;;18538:25;;18444:127;;;:::o;16409:103::-;15654:13;:11;:13::i;:::-;16474:30:::1;16501:1;16474:18;:30::i;:::-;16409:103::o:0;35210:194::-;15654:13;:11;:13::i;:::-;35264:25:::1;35292:13;:11;:13::i;:::-;35264:41;;35339:17;35316:20;:40;;;;35379:17;35367:9;:29;;;;35253:151;35210:194::o:0;31288:159::-;15654:13;:11;:13::i;:::-;31435:4:::1;31393:31;:39;31425:6;31393:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31288:159:::0;;:::o;35412:185::-;15654:13;:11;:13::i;:::-;35499:1:::1;35475:21;:25;35467:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35546:10;35538:28;;:51;35567:21;35538:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35412:185::o:0;15768:87::-;15814:7;15841:6;;;;;;;;;;;15834:13;;15768:87;:::o;18104:104::-;18160:13;18193:7;18186:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18104:104;:::o;31645:253::-;15654:13;:11;:13::i;:::-;31767::::1;;;;;;;;;;;31759:21;;:4;:21;;::::0;31751:87:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31849:41;31878:4;31884:5;31849:28;:41::i;:::-;31645:253:::0;;:::o;35605:129::-;15654:13;:11;:13::i;:::-;35717:8:::1;35706:7;:20;;;;:::i;:::-;35685:18;:41;;;;35605:129:::0;:::o;21696:424::-;21789:4;21806:13;21822:12;:10;:12::i;:::-;21806:28;;21845:24;21872:25;21882:5;21889:7;21872:9;:25::i;:::-;21845:52;;21936:15;21916:16;:35;;21908:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22021:60;22030:5;22037:7;22065:15;22046:16;:34;22021:8;:60::i;:::-;22108:4;22101:11;;;;21696:424;;;;:::o;18777:193::-;18856:4;18873:13;18889:12;:10;:12::i;:::-;18873:28;;18912;18922:5;18929:2;18933:6;18912:9;:28::i;:::-;18958:4;18951:11;;;18777:193;;;;:::o;31455:182::-;15654:13;:11;:13::i;:::-;31571:8:::1;31540:19;:28;31560:7;31540:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31611:7;31595:34;;;31620:8;31595:34;;;;;;:::i;:::-;;;;;;;;31455:182:::0;;:::o;28623:62::-;;;;:::o;30948:332::-;15654:13;:11;:13::i;:::-;31012:11:::1;;;;;;;;;;;31011:12;31003:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;31056:16;:32;;;31097:21;31128:4;31150;31135:31;;;31175:4;31135:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31183:1;31186::::0;31189:7:::1;:5;:7::i;:::-;31198:15;31056:158;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31239:4;31225:11;;:18;;;;;;;;;;;;;;;;;;31268:4;31254:11;;:18;;;;;;;;;;;;;;;;;;30948:332::o:0;28817:23::-;;;;:::o;19033:151::-;19122:7;19149:11;:18;19161:5;19149:18;;;;;;;;;;;;;;;:27;19168:7;19149:27;;;;;;;;;;;;;;;;19142:34;;19033:151;;;;:::o;28750:60::-;;;;:::o;28995:31::-;;;;:::o;28958:30::-;;;;:::o;16667:201::-;15654:13;:11;:13::i;:::-;16776:1:::1;16756:22;;:8;:22;;::::0;16748:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16832:28;16851:8;16832:18;:28::i;:::-;16667:201:::0;:::o;28692:51::-;;;;:::o;28880:31::-;;;;;;;;;;;;;:::o;14984:98::-;15037:7;15064:10;15057:17;;14984:98;:::o;25642:346::-;25761:1;25744:19;;:5;:19;;;25736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25842:1;25823:21;;:7;:21;;;25815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25926:6;25896:11;:18;25908:5;25896:18;;;;;;;;;;;;;;;:27;25915:7;25896:27;;;;;;;;;;;;;;;:36;;;;25964:7;25948:32;;25957:5;25948:32;;;25973:6;25948:32;;;;;;:::i;:::-;;;;;;;;25642:346;;;:::o;34732:470::-;34800:21;34838:1;34824:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34800:40;;34869:4;34851;34856:1;34851:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34895:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34885:4;34890:1;34885:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;34929:63;34946:4;34961:16;34980:11;34929:8;:63::i;:::-;35003:16;:67;;;35085:11;35111:1;35127:4;11138:42;35168:15;35003:191;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34787:415;34732:470;:::o;26279:407::-;26380:24;26407:25;26417:5;26424:7;26407:9;:25::i;:::-;26380:52;;26467:17;26447:16;:37;26443:236;;26529:6;26509:16;:26;;26501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26605:51;26614:5;26621:7;26649:6;26630:16;:25;26605:8;:51::i;:::-;26443:236;26369:317;26279:407;;;:::o;32236:2488::-;32350:1;32334:18;;:4;:18;;;32326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32423:15;;32411:8;;:27;32407:81;;32465:11;;32455:7;:21;;;;32407:81;32517:16;;32504:9;;:29;32500:85;;32561:12;;32550:8;:23;;;;32500:85;32611:1;32601:6;:11;32597:93;;32629:28;32645:4;32651:2;32655:1;32629:15;:28::i;:::-;32672:7;;32597:93;32712:7;:5;:7::i;:::-;32704:15;;:4;:15;;;;:32;;;;;32729:7;:5;:7::i;:::-;32723:13;;:2;:13;;;;32704:32;:52;;;;;32754:1;32740:16;;:2;:16;;;;32704:52;:77;;;;;32774:6;32760:21;;:2;:21;;;;32704:77;:90;;;;;32786:8;;;;;;;;;;;32785:9;32704:90;32700:1042;;;32818:11;;;;;;;;;;;32813:140;;32858:19;:25;32878:4;32858:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32887:19;:23;32907:2;32887:23;;;;;;;;;;;;;;;;;;;;;;;;;32858:52;32850:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;32813:140;32973:25;:31;32999:4;32973:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;33009:31;:35;33041:2;33009:35;;;;;;;;;;;;;;;;;;;;;;;;;33008:36;32973:71;32969:762;;;33097:20;;33087:6;:30;;33079:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;33228:9;;33211:13;33221:2;33211:9;:13::i;:::-;33202:6;:22;;;;:::i;:::-;:35;;33194:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33280:8;;:10;;;;;;;;;:::i;:::-;;;;;;32969:762;;;33331:25;:29;33357:2;33331:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;33365:31;:37;33397:4;33365:37;;;;;;;;;;;;;;;;;;;;;;;;;33364:38;33331:71;33327:404;;;33441:20;;33431:6;:30;;33423:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;33539:9;;:11;;;;;;;;;:::i;:::-;;;;;;33327:404;;;33592:31;:35;33624:2;33592:35;;;;;;;;;;;;;;;;;;;;;;;;;33587:144;;33682:9;;33665:13;33675:2;33665:9;:13::i;:::-;33656:6;:22;;;;:::i;:::-;:35;;33648:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33587:144;33327:404;32969:762;32700:1042;33754:28;33785:24;33803:4;33785:9;:24::i;:::-;33754:55;;33822:12;33860:1;33837:20;:24;33822:39;;33878:7;:22;;;;;33889:11;;;;;;;;;;;33878:22;:35;;;;;33905:8;;;;;;;;;;;33904:9;33878:35;:71;;;;;33918:25;:31;33944:4;33918:31;;;;;;;;;;;;;;;;;;;;;;;;;33917:32;33878:71;:101;;;;;33954:19;:25;33974:4;33954:25;;;;;;;;;;;;;;;;;;;;;;;;;33953:26;33878:101;:129;;;;;33984:19;:23;34004:2;33984:23;;;;;;;;;;;;;;;;;;;;;;;;;33983:24;33878:129;33874:239;;;34035:4;34024:8;;:15;;;;;;;;;;;;;;;;;;34054:16;34063:6;34054:8;:16::i;:::-;34096:5;34085:8;;:16;;;;;;;;;;;;;;;;;;33874:239;34125:12;34141:8;;;;;;;;;;;34140:9;34125:24;;34166:19;:25;34186:4;34166:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34195:19;:23;34215:2;34195:23;;;;;;;;;;;;;;;;;;;;;;;;;34166:52;34162:100;;;34245:5;34235:15;;34162:100;34274:12;34307:7;34303:370;;;34335:25;:29;34361:2;34335:29;;;;;;;;;;;;;;;;;;;;;;;;;34331:195;;;34392:29;34417:3;34392:20;34403:8;;34392:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;34385:36;;34331:195;;;34482:28;34506:3;34482:19;34493:7;;34482:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;34475:35;;34331:195;34553:1;34546:4;:8;34542:91;;;34575:42;34591:4;34605;34612;34575:15;:42::i;:::-;34542:91;34657:4;34647:14;;;;;:::i;:::-;;;34303:370;34683:33;34699:4;34705:2;34709:6;34683:15;:33::i;:::-;32315:2409;;;;32236:2488;;;;:::o;15933:132::-;16008:12;:10;:12::i;:::-;15997:23;;:7;:5;:7::i;:::-;:23;;;15989:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15933:132::o;17028:191::-;17102:16;17121:6;;;;;;;;;;;17102:25;;17147:8;17138:6;;:17;;;;;;;;;;;;;;;;;;17202:8;17171:40;;17192:8;17171:40;;;;;;;;;;;;17091:128;17028:191;:::o;31906:186::-;32023:5;31989:25;:31;32015:4;31989:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32078:5;32044:40;;32072:4;32044:40;;;;;;;;;;;;31906:186;;:::o;22547:850::-;22660:1;22644:18;;:4;:18;;;22636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22717:38;22738:4;22744:2;22748:6;22717:20;:38::i;:::-;22768:19;22790:9;:15;22800:4;22790:15;;;;;;;;;;;;;;;;22768:37;;22839:6;22824:11;:21;;:44;;;;22863:4;22849:19;;:2;:19;;;22824:44;22816:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;23052:6;23040:11;:18;:41;;23075:6;23061:11;:20;23040:41;;;23059:1;23040:41;23022:9;:15;23032:4;23022:15;;;;;;;;;;;;;;;:59;;;;23278:6;23261:9;:13;23271:2;23261:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;23328:2;23313:26;;23322:4;23313:26;;;23332:6;23313:26;;;;;;:::i;:::-;;;;;;;;23352:37;23372:4;23378:2;23382:6;23352:19;:37::i;:::-;22625:772;22547:850;;;:::o;36208:310::-;36261:23;36287:24;36305:4;36287:9;:24::i;:::-;36261:50;;36322:20;36376:1;36357:15;:20;36353:74;;36409:6;36394:21;;36353:74;36454:15;36439:30;;36480;36497:12;36480:16;:30::i;:::-;36250:268;;36208:310;:::o;3179:98::-;3237:7;3268:1;3264;:5;;;;:::i;:::-;3257:12;;3179:98;;;;:::o;3578:::-;3636:7;3667:1;3663;:5;;;;:::i;:::-;3656:12;;3578:98;;;;:::o;27286:91::-;;;;:::o;27981:90::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:329::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:60::-;5551:3;5572:5;5565:12;;5523:60;;;:::o;5589:142::-;5639:9;5672:53;5690:34;5699:24;5717:5;5699:24;:::i;:::-;5690:34;:::i;:::-;5672:53;:::i;:::-;5659:66;;5589:142;;;:::o;5737:126::-;5787:9;5820:37;5851:5;5820:37;:::i;:::-;5807:50;;5737:126;;;:::o;5869:152::-;5945:9;5978:37;6009:5;5978:37;:::i;:::-;5965:50;;5869:152;;;:::o;6027:183::-;6140:63;6197:5;6140:63;:::i;:::-;6135:3;6128:76;6027:183;;:::o;6216:274::-;6335:4;6373:2;6362:9;6358:18;6350:26;;6386:97;6480:1;6469:9;6465:17;6456:6;6386:97;:::i;:::-;6216:274;;;;:::o;6496:116::-;6566:21;6581:5;6566:21;:::i;:::-;6559:5;6556:32;6546:60;;6602:1;6599;6592:12;6546:60;6496:116;:::o;6618:133::-;6661:5;6699:6;6686:20;6677:29;;6715:30;6739:5;6715:30;:::i;:::-;6618:133;;;;:::o;6757:468::-;6822:6;6830;6879:2;6867:9;6858:7;6854:23;6850:32;6847:119;;;6885:79;;:::i;:::-;6847:119;7005:1;7030:53;7075:7;7066:6;7055:9;7051:22;7030:53;:::i;:::-;7020:63;;6976:117;7132:2;7158:50;7200:7;7191:6;7180:9;7176:22;7158:50;:::i;:::-;7148:60;;7103:115;6757:468;;;;;:::o;7231:118::-;7318:24;7336:5;7318:24;:::i;:::-;7313:3;7306:37;7231:118;;:::o;7355:222::-;7448:4;7486:2;7475:9;7471:18;7463:26;;7499:71;7567:1;7556:9;7552:17;7543:6;7499:71;:::i;:::-;7355:222;;;;:::o;7583:474::-;7651:6;7659;7708:2;7696:9;7687:7;7683:23;7679:32;7676:119;;;7714:79;;:::i;:::-;7676:119;7834:1;7859:53;7904:7;7895:6;7884:9;7880:22;7859:53;:::i;:::-;7849:63;;7805:117;7961:2;7987:53;8032:7;8023:6;8012:9;8008:22;7987:53;:::i;:::-;7977:63;;7932:118;7583:474;;;;;:::o;8063:180::-;8111:77;8108:1;8101:88;8208:4;8205:1;8198:15;8232:4;8229:1;8222:15;8249:320;8293:6;8330:1;8324:4;8320:12;8310:22;;8377:1;8371:4;8367:12;8398:18;8388:81;;8454:4;8446:6;8442:17;8432:27;;8388:81;8516:2;8508:6;8505:14;8485:18;8482:38;8479:84;;8535:18;;:::i;:::-;8479:84;8300:269;8249:320;;;:::o;8575:180::-;8623:77;8620:1;8613:88;8720:4;8717:1;8710:15;8744:4;8741:1;8734:15;8761:191;8801:3;8820:20;8838:1;8820:20;:::i;:::-;8815:25;;8854:20;8872:1;8854:20;:::i;:::-;8849:25;;8897:1;8894;8890:9;8883:16;;8918:3;8915:1;8912:10;8909:36;;;8925:18;;:::i;:::-;8909:36;8761:191;;;;:::o;8958:172::-;9098:24;9094:1;9086:6;9082:14;9075:48;8958:172;:::o;9136:366::-;9278:3;9299:67;9363:2;9358:3;9299:67;:::i;:::-;9292:74;;9375:93;9464:3;9375:93;:::i;:::-;9493:2;9488:3;9484:12;9477:19;;9136:366;;;:::o;9508:419::-;9674:4;9712:2;9701:9;9697:18;9689:26;;9761:9;9755:4;9751:20;9747:1;9736:9;9732:17;9725:47;9789:131;9915:4;9789:131;:::i;:::-;9781:139;;9508:419;;;:::o;9933:240::-;10073:34;10069:1;10061:6;10057:14;10050:58;10142:23;10137:2;10129:6;10125:15;10118:48;9933:240;:::o;10179:366::-;10321:3;10342:67;10406:2;10401:3;10342:67;:::i;:::-;10335:74;;10418:93;10507:3;10418:93;:::i;:::-;10536:2;10531:3;10527:12;10520:19;;10179:366;;;:::o;10551:419::-;10717:4;10755:2;10744:9;10740:18;10732:26;;10804:9;10798:4;10794:20;10790:1;10779:9;10775:17;10768:47;10832:131;10958:4;10832:131;:::i;:::-;10824:139;;10551:419;;;:::o;10976:410::-;11016:7;11039:20;11057:1;11039:20;:::i;:::-;11034:25;;11073:20;11091:1;11073:20;:::i;:::-;11068:25;;11128:1;11125;11121:9;11150:30;11168:11;11150:30;:::i;:::-;11139:41;;11329:1;11320:7;11316:15;11313:1;11310:22;11290:1;11283:9;11263:83;11240:139;;11359:18;;:::i;:::-;11240:139;11024:362;10976:410;;;;:::o;11392:224::-;11532:34;11528:1;11520:6;11516:14;11509:58;11601:7;11596:2;11588:6;11584:15;11577:32;11392:224;:::o;11622:366::-;11764:3;11785:67;11849:2;11844:3;11785:67;:::i;:::-;11778:74;;11861:93;11950:3;11861:93;:::i;:::-;11979:2;11974:3;11970:12;11963:19;;11622:366;;;:::o;11994:419::-;12160:4;12198:2;12187:9;12183:18;12175:26;;12247:9;12241:4;12237:20;12233:1;12222:9;12218:17;12211:47;12275:131;12401:4;12275:131;:::i;:::-;12267:139;;11994:419;;;:::o;12419:167::-;12559:19;12555:1;12547:6;12543:14;12536:43;12419:167;:::o;12592:366::-;12734:3;12755:67;12819:2;12814:3;12755:67;:::i;:::-;12748:74;;12831:93;12920:3;12831:93;:::i;:::-;12949:2;12944:3;12940:12;12933:19;;12592:366;;;:::o;12964:419::-;13130:4;13168:2;13157:9;13153:18;13145:26;;13217:9;13211:4;13207:20;13203:1;13192:9;13188:17;13181:47;13245:131;13371:4;13245:131;:::i;:::-;13237:139;;12964:419;;;:::o;13389:143::-;13446:5;13477:6;13471:13;13462:22;;13493:33;13520:5;13493:33;:::i;:::-;13389:143;;;;:::o;13538:351::-;13608:6;13657:2;13645:9;13636:7;13632:23;13628:32;13625:119;;;13663:79;;:::i;:::-;13625:119;13783:1;13808:64;13864:7;13855:6;13844:9;13840:22;13808:64;:::i;:::-;13798:74;;13754:128;13538:351;;;;:::o;13895:85::-;13940:7;13969:5;13958:16;;13895:85;;;:::o;13986:158::-;14044:9;14077:61;14095:42;14104:32;14130:5;14104:32;:::i;:::-;14095:42;:::i;:::-;14077:61;:::i;:::-;14064:74;;13986:158;;;:::o;14150:147::-;14245:45;14284:5;14245:45;:::i;:::-;14240:3;14233:58;14150:147;;:::o;14303:807::-;14552:4;14590:3;14579:9;14575:19;14567:27;;14604:71;14672:1;14661:9;14657:17;14648:6;14604:71;:::i;:::-;14685:72;14753:2;14742:9;14738:18;14729:6;14685:72;:::i;:::-;14767:80;14843:2;14832:9;14828:18;14819:6;14767:80;:::i;:::-;14857;14933:2;14922:9;14918:18;14909:6;14857:80;:::i;:::-;14947:73;15015:3;15004:9;15000:19;14991:6;14947:73;:::i;:::-;15030;15098:3;15087:9;15083:19;15074:6;15030:73;:::i;:::-;14303:807;;;;;;;;;:::o;15116:663::-;15204:6;15212;15220;15269:2;15257:9;15248:7;15244:23;15240:32;15237:119;;;15275:79;;:::i;:::-;15237:119;15395:1;15420:64;15476:7;15467:6;15456:9;15452:22;15420:64;:::i;:::-;15410:74;;15366:128;15533:2;15559:64;15615:7;15606:6;15595:9;15591:22;15559:64;:::i;:::-;15549:74;;15504:129;15672:2;15698:64;15754:7;15745:6;15734:9;15730:22;15698:64;:::i;:::-;15688:74;;15643:129;15116:663;;;;;:::o;15785:225::-;15925:34;15921:1;15913:6;15909:14;15902:58;15994:8;15989:2;15981:6;15977:15;15970:33;15785:225;:::o;16016:366::-;16158:3;16179:67;16243:2;16238:3;16179:67;:::i;:::-;16172:74;;16255:93;16344:3;16255:93;:::i;:::-;16373:2;16368:3;16364:12;16357:19;;16016:366;;;:::o;16388:419::-;16554:4;16592:2;16581:9;16577:18;16569:26;;16641:9;16635:4;16631:20;16627:1;16616:9;16612:17;16605:47;16669:131;16795:4;16669:131;:::i;:::-;16661:139;;16388:419;;;:::o;16813:223::-;16953:34;16949:1;16941:6;16937:14;16930:58;17022:6;17017:2;17009:6;17005:15;16998:31;16813:223;:::o;17042:366::-;17184:3;17205:67;17269:2;17264:3;17205:67;:::i;:::-;17198:74;;17281:93;17370:3;17281:93;:::i;:::-;17399:2;17394:3;17390:12;17383:19;;17042:366;;;:::o;17414:419::-;17580:4;17618:2;17607:9;17603:18;17595:26;;17667:9;17661:4;17657:20;17653:1;17642:9;17638:17;17631:47;17695:131;17821:4;17695:131;:::i;:::-;17687:139;;17414:419;;;:::o;17839:221::-;17979:34;17975:1;17967:6;17963:14;17956:58;18048:4;18043:2;18035:6;18031:15;18024:29;17839:221;:::o;18066:366::-;18208:3;18229:67;18293:2;18288:3;18229:67;:::i;:::-;18222:74;;18305:93;18394:3;18305:93;:::i;:::-;18423:2;18418:3;18414:12;18407:19;;18066:366;;;:::o;18438:419::-;18604:4;18642:2;18631:9;18627:18;18619:26;;18691:9;18685:4;18681:20;18677:1;18666:9;18662:17;18655:47;18719:131;18845:4;18719:131;:::i;:::-;18711:139;;18438:419;;;:::o;18863:180::-;18911:77;18908:1;18901:88;19008:4;19005:1;18998:15;19032:4;19029:1;19022:15;19049:180;19097:77;19094:1;19087:88;19194:4;19191:1;19184:15;19218:4;19215:1;19208:15;19235:143;19292:5;19323:6;19317:13;19308:22;;19339:33;19366:5;19339:33;:::i;:::-;19235:143;;;;:::o;19384:351::-;19454:6;19503:2;19491:9;19482:7;19478:23;19474:32;19471:119;;;19509:79;;:::i;:::-;19471:119;19629:1;19654:64;19710:7;19701:6;19690:9;19686:22;19654:64;:::i;:::-;19644:74;;19600:128;19384:351;;;;:::o;19741:114::-;19808:6;19842:5;19836:12;19826:22;;19741:114;;;:::o;19861:184::-;19960:11;19994:6;19989:3;19982:19;20034:4;20029:3;20025:14;20010:29;;19861:184;;;;:::o;20051:132::-;20118:4;20141:3;20133:11;;20171:4;20166:3;20162:14;20154:22;;20051:132;;;:::o;20189:108::-;20266:24;20284:5;20266:24;:::i;:::-;20261:3;20254:37;20189:108;;:::o;20303:179::-;20372:10;20393:46;20435:3;20427:6;20393:46;:::i;:::-;20471:4;20466:3;20462:14;20448:28;;20303:179;;;;:::o;20488:113::-;20558:4;20590;20585:3;20581:14;20573:22;;20488:113;;;:::o;20637:732::-;20756:3;20785:54;20833:5;20785:54;:::i;:::-;20855:86;20934:6;20929:3;20855:86;:::i;:::-;20848:93;;20965:56;21015:5;20965:56;:::i;:::-;21044:7;21075:1;21060:284;21085:6;21082:1;21079:13;21060:284;;;21161:6;21155:13;21188:63;21247:3;21232:13;21188:63;:::i;:::-;21181:70;;21274:60;21327:6;21274:60;:::i;:::-;21264:70;;21120:224;21107:1;21104;21100:9;21095:14;;21060:284;;;21064:14;21360:3;21353:10;;20761:608;;;20637:732;;;;:::o;21375:831::-;21638:4;21676:3;21665:9;21661:19;21653:27;;21690:71;21758:1;21747:9;21743:17;21734:6;21690:71;:::i;:::-;21771:80;21847:2;21836:9;21832:18;21823:6;21771:80;:::i;:::-;21898:9;21892:4;21888:20;21883:2;21872:9;21868:18;21861:48;21926:108;22029:4;22020:6;21926:108;:::i;:::-;21918:116;;22044:72;22112:2;22101:9;22097:18;22088:6;22044:72;:::i;:::-;22126:73;22194:3;22183:9;22179:19;22170:6;22126:73;:::i;:::-;21375:831;;;;;;;;:::o;22212:179::-;22352:31;22348:1;22340:6;22336:14;22329:55;22212:179;:::o;22397:366::-;22539:3;22560:67;22624:2;22619:3;22560:67;:::i;:::-;22553:74;;22636:93;22725:3;22636:93;:::i;:::-;22754:2;22749:3;22745:12;22738:19;;22397:366;;;:::o;22769:419::-;22935:4;22973:2;22962:9;22958:18;22950:26;;23022:9;23016:4;23012:20;23008:1;22997:9;22993:17;22986:47;23050:131;23176:4;23050:131;:::i;:::-;23042:139;;22769:419;;;:::o;23194:224::-;23334:34;23330:1;23322:6;23318:14;23311:58;23403:7;23398:2;23390:6;23386:15;23379:32;23194:224;:::o;23424:366::-;23566:3;23587:67;23651:2;23646:3;23587:67;:::i;:::-;23580:74;;23663:93;23752:3;23663:93;:::i;:::-;23781:2;23776:3;23772:12;23765:19;;23424:366;;;:::o;23796:419::-;23962:4;24000:2;23989:9;23985:18;23977:26;;24049:9;24043:4;24039:20;24035:1;24024:9;24020:17;24013:47;24077:131;24203:4;24077:131;:::i;:::-;24069:139;;23796:419;;;:::o;24221:172::-;24361:24;24357:1;24349:6;24345:14;24338:48;24221:172;:::o;24399:366::-;24541:3;24562:67;24626:2;24621:3;24562:67;:::i;:::-;24555:74;;24638:93;24727:3;24638:93;:::i;:::-;24756:2;24751:3;24747:12;24740:19;;24399:366;;;:::o;24771:419::-;24937:4;24975:2;24964:9;24960:18;24952:26;;25024:9;25018:4;25014:20;25010:1;24999:9;24995:17;24988:47;25052:131;25178:4;25052:131;:::i;:::-;25044:139;;24771:419;;;:::o;25196:240::-;25336:34;25332:1;25324:6;25320:14;25313:58;25405:23;25400:2;25392:6;25388:15;25381:48;25196:240;:::o;25442:366::-;25584:3;25605:67;25669:2;25664:3;25605:67;:::i;:::-;25598:74;;25681:93;25770:3;25681:93;:::i;:::-;25799:2;25794:3;25790:12;25783:19;;25442:366;;;:::o;25814:419::-;25980:4;26018:2;26007:9;26003:18;25995:26;;26067:9;26061:4;26057:20;26053:1;26042:9;26038:17;26031:47;26095:131;26221:4;26095:131;:::i;:::-;26087:139;;25814:419;;;:::o;26239:169::-;26379:21;26375:1;26367:6;26363:14;26356:45;26239:169;:::o;26414:366::-;26556:3;26577:67;26641:2;26636:3;26577:67;:::i;:::-;26570:74;;26653:93;26742:3;26653:93;:::i;:::-;26771:2;26766:3;26762:12;26755:19;;26414:366;;;:::o;26786:419::-;26952:4;26990:2;26979:9;26975:18;26967:26;;27039:9;27033:4;27029:20;27025:1;27014:9;27010:17;27003:47;27067:131;27193:4;27067:131;:::i;:::-;27059:139;;26786:419;;;:::o;27211:233::-;27250:3;27273:24;27291:5;27273:24;:::i;:::-;27264:33;;27319:66;27312:5;27309:77;27306:103;;27389:18;;:::i;:::-;27306:103;27436:1;27429:5;27425:13;27418:20;;27211:233;;;:::o;27450:241::-;27590:34;27586:1;27578:6;27574:14;27567:58;27659:24;27654:2;27646:6;27642:15;27635:49;27450:241;:::o;27697:366::-;27839:3;27860:67;27924:2;27919:3;27860:67;:::i;:::-;27853:74;;27936:93;28025:3;27936:93;:::i;:::-;28054:2;28049:3;28045:12;28038:19;;27697:366;;;:::o;28069:419::-;28235:4;28273:2;28262:9;28258:18;28250:26;;28322:9;28316:4;28312:20;28308:1;28297:9;28293:17;28286:47;28350:131;28476:4;28350:131;:::i;:::-;28342:139;;28069:419;;;:::o;28494:194::-;28534:4;28554:20;28572:1;28554:20;:::i;:::-;28549:25;;28588:20;28606:1;28588:20;:::i;:::-;28583:25;;28632:1;28629;28625:9;28617:17;;28656:1;28650:4;28647:11;28644:37;;;28661:18;;:::i;:::-;28644:37;28494:194;;;;:::o;28694:182::-;28834:34;28830:1;28822:6;28818:14;28811:58;28694:182;:::o;28882:366::-;29024:3;29045:67;29109:2;29104:3;29045:67;:::i;:::-;29038:74;;29121:93;29210:3;29121:93;:::i;:::-;29239:2;29234:3;29230:12;29223:19;;28882:366;;;:::o;29254:419::-;29420:4;29458:2;29447:9;29443:18;29435:26;;29507:9;29501:4;29497:20;29493:1;29482:9;29478:17;29471:47;29535:131;29661:4;29535:131;:::i;:::-;29527:139;;29254:419;;;:::o;29679:225::-;29819:34;29815:1;29807:6;29803:14;29796:58;29888:8;29883:2;29875:6;29871:15;29864:33;29679:225;:::o;29910:366::-;30052:3;30073:67;30137:2;30132:3;30073:67;:::i;:::-;30066:74;;30149:93;30238:3;30149:93;:::i;:::-;30267:2;30262:3;30258:12;30251:19;;29910:366;;;:::o;30282:419::-;30448:4;30486:2;30475:9;30471:18;30463:26;;30535:9;30529:4;30525:20;30521:1;30510:9;30506:17;30499:47;30563:131;30689:4;30563:131;:::i;:::-;30555:139;;30282:419;;;:::o;30707:180::-;30755:77;30752:1;30745:88;30852:4;30849:1;30842:15;30876:4;30873:1;30866:15;30893:185;30933:1;30950:20;30968:1;30950:20;:::i;:::-;30945:25;;30984:20;31002:1;30984:20;:::i;:::-;30979:25;;31023:1;31013:35;;31028:18;;:::i;:::-;31013:35;31070:1;31067;31063:9;31058:14;;30893:185;;;;:::o
Swarm Source
ipfs://c62e0687aea2a9c39b7ffbf3a9c7a8faedcea3f199cc31f991481de16c199f36
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.