Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 8 from a total of 8 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 15871100 | 828 days ago | IN | 0 ETH | 0.00226824 | ||||
Approve | 15871092 | 828 days ago | IN | 0 ETH | 0.00076829 | ||||
Approve | 15871082 | 828 days ago | IN | 0 ETH | 0.00077863 | ||||
Approve | 15871069 | 828 days ago | IN | 0 ETH | 0.00111442 | ||||
Approve | 15871059 | 828 days ago | IN | 0 ETH | 0.00084128 | ||||
Approve | 15871042 | 828 days ago | IN | 0 ETH | 0.00265249 | ||||
Approve | 15871042 | 828 days ago | IN | 0 ETH | 0.00265249 | ||||
Approve | 15871031 | 828 days ago | IN | 0 ETH | 0.00083019 |
Latest 20 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15871462 | 828 days ago | 0.00065168 ETH | ||||
15871462 | 828 days ago | 0.00065168 ETH | ||||
15871462 | 828 days ago | 0.0000815 ETH | ||||
15871462 | 828 days ago | 0.0000815 ETH | ||||
15871462 | 828 days ago | 0.00066686 ETH | ||||
15871462 | 828 days ago | 0.00066686 ETH | ||||
15871462 | 828 days ago | 0.0000834 ETH | ||||
15871462 | 828 days ago | 0.0000834 ETH | ||||
15871101 | 828 days ago | 0.00066686 ETH | ||||
15871101 | 828 days ago | 0.00066686 ETH | ||||
15871101 | 828 days ago | 0.0000834 ETH | ||||
15871101 | 828 days ago | 0.0000834 ETH | ||||
15871101 | 828 days ago | 0.0019352 ETH | ||||
15871101 | 828 days ago | 0.0019352 ETH | ||||
15871101 | 828 days ago | 0.00024214 ETH | ||||
15871101 | 828 days ago | 0.00024214 ETH | ||||
15871090 | 828 days ago | 0.00052695 ETH | ||||
15871090 | 828 days ago | 0.00052695 ETH | ||||
15871090 | 828 days ago | 0.0000659 ETH | ||||
15871090 | 828 days ago | 0.0000659 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
RedWave
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-31 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.13; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ 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); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using this function * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 12; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + 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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _createInitialSupply(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); 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(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SignedSafeMath { /** * @dev Returns the multiplication of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { return a * b; } /** * @dev Returns the integer division of two signed integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(int256 a, int256 b) internal pure returns (int256) { return a / b; } /** * @dev Returns the subtraction of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { return a - b; } /** * @dev Returns the addition of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { return a + b; } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow * checks. * * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can * easily result in undesired exploitation or bugs, since developers usually * assume that overflows raise errors. `SafeCast` restores this intuition by * reverting the transaction when such an operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. * * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing * all math on `uint256` and `int256` and then downcasting. */ library SafeCast { /** * @dev Returns the downcasted uint224 from uint256, reverting on * overflow (when the input is greater than largest uint224). * * Counterpart to Solidity's `uint224` operator. * * Requirements: * * - input must fit into 224 bits */ function toUint224(uint256 value) internal pure returns (uint224) { require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits"); return uint224(value); } /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). * * Counterpart to Solidity's `uint128` operator. * * Requirements: * * - input must fit into 128 bits */ function toUint128(uint256 value) internal pure returns (uint128) { require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits"); return uint128(value); } /** * @dev Returns the downcasted uint96 from uint256, reverting on * overflow (when the input is greater than largest uint96). * * Counterpart to Solidity's `uint96` operator. * * Requirements: * * - input must fit into 96 bits */ function toUint96(uint256 value) internal pure returns (uint96) { require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits"); return uint96(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). * * Counterpart to Solidity's `uint64` operator. * * Requirements: * * - input must fit into 64 bits */ function toUint64(uint256 value) internal pure returns (uint64) { require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits"); return uint64(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). * * Counterpart to Solidity's `uint32` operator. * * Requirements: * * - input must fit into 32 bits */ function toUint32(uint256 value) internal pure returns (uint32) { require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits"); return uint32(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). * * Counterpart to Solidity's `uint16` operator. * * Requirements: * * - input must fit into 16 bits */ function toUint16(uint256 value) internal pure returns (uint16) { require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits"); return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). * * Counterpart to Solidity's `uint8` operator. * * Requirements: * * - input must fit into 8 bits. */ function toUint8(uint256 value) internal pure returns (uint8) { require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits"); return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. */ function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } /** * @dev Returns the downcasted int128 from int256, reverting on * overflow (when the input is less than smallest int128 or * greater than largest int128). * * Counterpart to Solidity's `int128` operator. * * Requirements: * * - input must fit into 128 bits * * _Available since v3.1._ */ function toInt128(int256 value) internal pure returns (int128) { require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits"); return int128(value); } /** * @dev Returns the downcasted int64 from int256, reverting on * overflow (when the input is less than smallest int64 or * greater than largest int64). * * Counterpart to Solidity's `int64` operator. * * Requirements: * * - input must fit into 64 bits * * _Available since v3.1._ */ function toInt64(int256 value) internal pure returns (int64) { require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits"); return int64(value); } /** * @dev Returns the downcasted int32 from int256, reverting on * overflow (when the input is less than smallest int32 or * greater than largest int32). * * Counterpart to Solidity's `int32` operator. * * Requirements: * * - input must fit into 32 bits * * _Available since v3.1._ */ function toInt32(int256 value) internal pure returns (int32) { require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits"); return int32(value); } /** * @dev Returns the downcasted int16 from int256, reverting on * overflow (when the input is less than smallest int16 or * greater than largest int16). * * Counterpart to Solidity's `int16` operator. * * Requirements: * * - input must fit into 16 bits * * _Available since v3.1._ */ function toInt16(int256 value) internal pure returns (int16) { require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits"); return int16(value); } /** * @dev Returns the downcasted int8 from int256, reverting on * overflow (when the input is less than smallest int8 or * greater than largest int8). * * Counterpart to Solidity's `int8` operator. * * Requirements: * * - input must fit into 8 bits. * * _Available since v3.1._ */ function toInt8(int256 value) internal pure returns (int8) { require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits"); return int8(value); } /** * @dev Converts an unsigned uint256 into a signed int256. * * Requirements: * * - input must be less than or equal to maxInt256. */ function toInt256(uint256 value) internal pure returns (int256) { // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); return int256(value); } } contract RedWave is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public maxSellTransactionAmount = 1000000000 * (10**12); uint256 public maxBuyTransactionAmount = 1000000000 * (10**12); uint256 public swapTokensAtAmount = 500000 * (10**12); uint256 public liquidityBuyFee = 1; uint256 public teamBuyFee = 4; uint256 public apeBurnBuyFee = 0; uint256 public totalBuyFees = liquidityBuyFee.add(teamBuyFee).add(apeBurnBuyFee); uint256 public liquiditySellFee = 0; uint256 public teamSellFee = 5; uint256 public apeBurnSellFee = 0; uint256 public totalSellFees = liquiditySellFee.add(teamSellFee).add(apeBurnSellFee); address public immutable ApeCoin = address(0x4d224452801ACEd8B2F0aebE155379bb5D594381); //ApeCoin contract address address payable public teamWallet = payable(0xB0C1f550Dbba6fD5032d3aCAD80F05a3D6eff382); address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; uint256 private buyBackUpperLimit = 50000000000000000; // 0.05 Ether uint256 public _buybackDivisor = 10; bool public buyBackEnabled = true; event BuyBackEnabledUpdated(bool enabled); event SwapETHForTokens(uint256 amountIn, address[] path); event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensIntoLiqudity, uint256 ethReceived ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() ERC20("RedWave", "WAVE") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // uniswap v2 router address // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(teamWallet, true); excludeFromFees(address(this), true); /* an internal function that is only called here, and CANNOT be called ever again */ _createInitialSupply(owner(), 1000000000 * (10**12)); } receive() external payable { } function updateUniswapV2Router(address newAddress) public onlyOwner { require(newAddress != address(uniswapV2Router), "RedWave: The router already has that address"); emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router)); uniswapV2Router = IUniswapV2Router02(newAddress); } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded, "RedWave: Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "RedWave: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "RedWave: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if(automatedMarketMakerPairs[from] && (!_isExcludedFromFees[from]) && (!_isExcludedFromFees[to])){ require(amount <= maxBuyTransactionAmount, "amount exceeds the maxBuyTransactionAmount."); } if(automatedMarketMakerPairs[to] && (!_isExcludedFromFees[from]) && (!_isExcludedFromFees[to])){ require(amount <= maxSellTransactionAmount, "amount exceeds the maxSellTransactionAmount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if(!inSwapAndLiquify && automatedMarketMakerPairs[to] && swapAndLiquifyEnabled) { if(overMinTokenBalance) { contractTokenBalance = swapTokensAtAmount; swapAndLiquify(contractTokenBalance); } uint256 balance = address(this).balance; if (buyBackEnabled && balance > uint256(buyBackUpperLimit)) { if (balance > buyBackUpperLimit) balance = buyBackUpperLimit; buyBackTokens(balance.div(_buybackDivisor)); } } // if any account belongs to _isExcludedFromFee account then remove the fee if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { uint256 fees; if(automatedMarketMakerPairs[from]) { fees = amount.mul(totalBuyFees).div(100); } if(automatedMarketMakerPairs[to]) { fees = amount.mul(totalSellFees).div(100); } amount = amount.sub(fees); super._transfer(from, address(this), fees); } super._transfer(from, to, amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 tokensForLiquidity = contractTokenBalance.mul(liquidityBuyFee).div(totalBuyFees); // split the Liquidity token balance into halves uint256 half = tokensForLiquidity.div(2); uint256 otherHalf = tokensForLiquidity.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); // swap and Send eth to team wallet uint256 balanceBeforeSwap = address(this).balance; swapTokensForEth(contractTokenBalance.sub(tokensForLiquidity)); uint256 balanceAfterSwap = address(this).balance.sub(balanceBeforeSwap); teamWallet.transfer(balanceAfterSwap.mul(teamBuyFee).div(teamBuyFee.add(apeBurnBuyFee))); emit SwapAndLiquify(half, newBalance); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) { _approve(address(this), address(uniswapV2Router), ~uint256(0)); } // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function buyBackTokens(uint256 amount) private lockTheSwap { if (amount > 0) { swapETHForTokens(amount); } } function swapETHForTokens(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = ApeCoin; // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, // accept any amount of Tokens path, deadAddress, // burn address block.timestamp.add(300) ); emit SwapETHForTokens(amount, path); } function swapTokensForApeCoin(uint256 tokenAmount) private { address[] memory path = new address[](3); path[0] = address(this); path[1] = uniswapV2Router.WETH(); path[2] = ApeCoin; _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function setMaxSellTransaction(uint256 _maxSellTxAmount) public onlyOwner { maxSellTransactionAmount = _maxSellTxAmount; require(maxSellTransactionAmount >= totalSupply().div(300), "value is too low"); } function setMaxBuyTransaction(uint256 _maxBuyTxAmount) public onlyOwner { maxBuyTransactionAmount = _maxBuyTxAmount; require(maxBuyTransactionAmount >= totalSupply().div(300), "value is too low"); } function setSwapTokensAtAmouunt(uint256 _newAmount) public onlyOwner { swapTokensAtAmount = _newAmount; } function setBuybackDivisor(uint256 divisor) external onlyOwner{ _buybackDivisor = divisor; } function setBuybackUpperLimit(uint256 newLimit) external onlyOwner{ buyBackUpperLimit = newLimit; } function buyBackUpperLimitAmount() public view returns (uint256) { return buyBackUpperLimit; } function setBuyBackEnabled(bool _enabled) public onlyOwner { buyBackEnabled = _enabled; emit BuyBackEnabledUpdated(_enabled); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","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":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"ApeCoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buybackDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"apeBurnBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"apeBurnSellFee","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setBuybackDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyTxAmount","type":"uint256"}],"name":"setMaxBuyTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellTxAmount","type":"uint256"}],"name":"setMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmouunt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"teamBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040526001600660156101000a81548160ff021916908315150217905550683635c9adc5dea00000600755683635c9adc5dea000006008556706f05b59d3b200006009556001600a556004600b556000600c556200008d600c5462000079600b54600a546200054b60201b62001c781790919060201c565b6200054b60201b62001c781790919060201c565b600d556000600e556005600f556000601055620000d8601054620000c4600f54600e546200054b60201b62001c781790919060201c565b6200054b60201b62001c781790919060201c565b601155734d224452801aced8b2f0aebe155379bb5d59438173ffffffffffffffffffffffffffffffffffffffff1660a09073ffffffffffffffffffffffffffffffffffffffff1681525073b0c1f550dbba6fd5032d3acad80f05a3d6eff382601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660c09073ffffffffffffffffffffffffffffffffffffffff1681525066b1a2bc2ec50000601555600a6016556001601760006101000a81548160ff021916908315150217905550348015620001e457600080fd5b506040518060400160405280600781526020017f52656457617665000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f574156450000000000000000000000000000000000000000000000000000000081525081600390805190602001906200026992919062000ae2565b5080600490805190602001906200028292919062000ae2565b505050620002a5620002996200056360201b60201c565b6200056b60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200030c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000332919062000bfc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200039a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c0919062000bfc565b6040518363ffffffff1660e01b8152600401620003df92919062000c3f565b6020604051808303816000875af1158015620003ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000425919062000bfc565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620004af8160016200063160201b60201c565b620004d1620004c36200076760201b60201c565b60016200079160201b60201c565b62000506601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200079160201b60201c565b620005193060016200079160201b60201c565b620005436200052d6200076760201b60201c565b683635c9adc5dea000006200096060201b60201c565b505062001019565b600081836200055b919062000ca5565b905092915050565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620006c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006bd9062000daf565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007a16200056360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007c76200076760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008179062000e21565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620008b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ac9062000eb9565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000954919062000ef8565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c99062000f65565b60405180910390fd5b620009e66000838362000ad860201b60201c565b8060026000828254620009fa919062000ca5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a51919062000ca5565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ab8919062000f98565b60405180910390a362000ad46000838362000add60201b60201c565b5050565b505050565b505050565b82805462000af09062000fe4565b90600052602060002090601f01602090048101928262000b14576000855562000b60565b82601f1062000b2f57805160ff191683800117855562000b60565b8280016001018555821562000b60579182015b8281111562000b5f57825182559160200191906001019062000b42565b5b50905062000b6f919062000b73565b5090565b5b8082111562000b8e57600081600090555060010162000b74565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bc48262000b97565b9050919050565b62000bd68162000bb7565b811462000be257600080fd5b50565b60008151905062000bf68162000bcb565b92915050565b60006020828403121562000c155762000c1462000b92565b5b600062000c258482850162000be5565b91505092915050565b62000c398162000bb7565b82525050565b600060408201905062000c56600083018562000c2e565b62000c65602083018462000c2e565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cb28262000c6c565b915062000cbf8362000c6c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000cf75762000cf662000c76565b5b828201905092915050565b600082825260208201905092915050565b7f526564576176653a204175746f6d61746564206d61726b6574206d616b65722060008201527f7061697220697320616c72656164792073657420746f20746861742076616c7560208201527f6500000000000000000000000000000000000000000000000000000000000000604082015250565b600062000d9760418362000d02565b915062000da48262000d13565b606082019050919050565b6000602082019050818103600083015262000dca8162000d88565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e0960208362000d02565b915062000e168262000dd1565b602082019050919050565b6000602082019050818103600083015262000e3c8162000dfa565b9050919050565b7f526564576176653a204163636f756e7420697320616c7265616479207468652060008201527f76616c7565206f6620276578636c756465642700000000000000000000000000602082015250565b600062000ea160338362000d02565b915062000eae8262000e43565b604082019050919050565b6000602082019050818103600083015262000ed48162000e92565b9050919050565b60008115159050919050565b62000ef28162000edb565b82525050565b600060208201905062000f0f600083018462000ee7565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f4d601f8362000d02565b915062000f5a8262000f15565b602082019050919050565b6000602082019050818103600083015262000f808162000f3e565b9050919050565b62000f928162000c6c565b82525050565b600060208201905062000faf600083018462000f87565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ffd57607f821691505b60208210810362001013576200101262000fb5565b5b50919050565b60805160a05160c05161449c6200105e60003960008181610cb101526130bf015260008181611ad2015261300e015260008181610ee6015261157e015261449c6000f3fe6080604052600436106102815760003560e01c806370a082311161014f578063b3b5e043116100c1578063ccb613581161007a578063ccb61358146109ad578063d0a39814146109d8578063d9671ba014610a03578063dd62ed3e14610a2e578063e2f4560514610a6b578063f2fde38b14610a9657610288565b8063b3b5e0431461089f578063b62496f5146108c8578063b9e9370014610905578063bdc653ef14610930578063c02466681461095b578063c49b9a801461098457610288565b80639303e1ce116101135780639303e1ce1461077b57806395d89b41146107a65780639a7a23d6146107d1578063a1e2745f146107fa578063a457c2d714610825578063a9059cbb1461086257610288565b806370a08231146106aa578063715018a6146106e7578063750c11b6146106fe57806382d2a4bb146107275780638da5cb5b1461075057610288565b80632a6986b8116101f35780634fbee193116101ac5780634fbee1931461059a57806359927044146105d75780635aa821a9146106025780635c38ffe21461062d5780636053a0e31461065657806365b8dbc01461068157610288565b80632a6986b814610488578063313ce567146104b357806339509351146104de5780634198d1bb1461051b57806349bd5a5e146105445780634a74bb021461056f57610288565b806318160ddd1161024557806318160ddd1461037657806319998bbb146103a15780631d38ff96146103cc57806323b872dd146103f757806327c8f8351461043457806329370cc61461045f57610288565b806302259e9e1461028d57806306fdde03146102b8578063095ea7b3146102e3578063099d0d30146103205780631694505e1461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610abf565b6040516102af919061319a565b60405180910390f35b3480156102c457600080fd5b506102cd610ac5565b6040516102da919061324e565b60405180910390f35b3480156102ef57600080fd5b5061030a600480360381019061030591906132ff565b610b57565b604051610317919061335a565b60405180910390f35b34801561032c57600080fd5b50610335610b75565b604051610342919061319a565b60405180910390f35b34801561035757600080fd5b50610360610b7b565b60405161036d91906133d4565b60405180910390f35b34801561038257600080fd5b5061038b610ba1565b604051610398919061319a565b60405180910390f35b3480156103ad57600080fd5b506103b6610bab565b6040516103c3919061319a565b60405180910390f35b3480156103d857600080fd5b506103e1610bb1565b6040516103ee919061319a565b60405180910390f35b34801561040357600080fd5b5061041e600480360381019061041991906133ef565b610bb7565b60405161042b919061335a565b60405180910390f35b34801561044057600080fd5b50610449610caf565b6040516104569190613451565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613498565b610cd3565b005b34801561049457600080fd5b5061049d610da3565b6040516104aa919061319a565b60405180910390f35b3480156104bf57600080fd5b506104c8610da9565b6040516104d591906134e1565b60405180910390f35b3480156104ea57600080fd5b50610505600480360381019061050091906132ff565b610db2565b604051610512919061335a565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d91906134fc565b610e5e565b005b34801561055057600080fd5b50610559610ee4565b6040516105669190613451565b60405180910390f35b34801561057b57600080fd5b50610584610f08565b604051610591919061335a565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190613529565b610f1b565b6040516105ce919061335a565b60405180910390f35b3480156105e357600080fd5b506105ec610f71565b6040516105f99190613577565b60405180910390f35b34801561060e57600080fd5b50610617610f97565b604051610624919061319a565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f91906134fc565b610f9d565b005b34801561066257600080fd5b5061066b611083565b604051610678919061335a565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190613529565b611096565b005b3480156106b657600080fd5b506106d160048036038101906106cc9190613529565b611262565b6040516106de919061319a565b60405180910390f35b3480156106f357600080fd5b506106fc6112aa565b005b34801561070a57600080fd5b50610725600480360381019061072091906134fc565b611332565b005b34801561073357600080fd5b5061074e600480360381019061074991906134fc565b6113b8565b005b34801561075c57600080fd5b5061076561143e565b6040516107729190613451565b60405180910390f35b34801561078757600080fd5b50610790611468565b60405161079d919061319a565b60405180910390f35b3480156107b257600080fd5b506107bb61146e565b6040516107c8919061324e565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190613592565b611500565b005b34801561080657600080fd5b5061080f611618565b60405161081c919061319a565b60405180910390f35b34801561083157600080fd5b5061084c600480360381019061084791906132ff565b61161e565b604051610859919061335a565b60405180910390f35b34801561086e57600080fd5b50610889600480360381019061088491906132ff565b611709565b604051610896919061335a565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c191906134fc565b611727565b005b3480156108d457600080fd5b506108ef60048036038101906108ea9190613529565b61180d565b6040516108fc919061335a565b60405180910390f35b34801561091157600080fd5b5061091a61182d565b604051610927919061319a565b60405180910390f35b34801561093c57600080fd5b50610945611833565b604051610952919061319a565b60405180910390f35b34801561096757600080fd5b50610982600480360381019061097d9190613592565b61183d565b005b34801561099057600080fd5b506109ab60048036038101906109a69190613498565b6119f4565b005b3480156109b957600080fd5b506109c2611ac4565b6040516109cf919061319a565b60405180910390f35b3480156109e457600080fd5b506109ed611aca565b6040516109fa919061319a565b60405180910390f35b348015610a0f57600080fd5b50610a18611ad0565b604051610a259190613451565b60405180910390f35b348015610a3a57600080fd5b50610a556004803603810190610a5091906135d2565b611af4565b604051610a62919061319a565b60405180910390f35b348015610a7757600080fd5b50610a80611b7b565b604051610a8d919061319a565b60405180910390f35b348015610aa257600080fd5b50610abd6004803603810190610ab89190613529565b611b81565b005b60075481565b606060038054610ad490613641565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0090613641565b8015610b4d5780601f10610b2257610100808354040283529160200191610b4d565b820191906000526020600020905b815481529060010190602001808311610b3057829003601f168201915b5050505050905090565b6000610b6b610b64611c8e565b8484611c96565b6001905092915050565b600e5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600f5481565b600b5481565b6000610bc4848484611e5f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c0f611c8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c86906136e4565b60405180910390fd5b610ca385610c9b611c8e565b858403611c96565b60019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610cdb611c8e565b73ffffffffffffffffffffffffffffffffffffffff16610cf961143e565b73ffffffffffffffffffffffffffffffffffffffff1614610d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4690613750565b60405180910390fd5b80601760006101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c081604051610d98919061335a565b60405180910390a150565b60105481565b6000600c905090565b6000610e54610dbf611c8e565b848460016000610dcd611c8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e4f919061379f565b611c96565b6001905092915050565b610e66611c8e565b73ffffffffffffffffffffffffffffffffffffffff16610e8461143e565b73ffffffffffffffffffffffffffffffffffffffff1614610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed190613750565b60405180910390fd5b8060168190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660159054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b610fa5611c8e565b73ffffffffffffffffffffffffffffffffffffffff16610fc361143e565b73ffffffffffffffffffffffffffffffffffffffff1614611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090613750565b60405180910390fd5b8060078190555061103c61012c61102e610ba1565b6124be90919063ffffffff16565b6007541015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790613841565b60405180910390fd5b50565b601760009054906101000a900460ff1681565b61109e611c8e565b73ffffffffffffffffffffffffffffffffffffffff166110bc61143e565b73ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613750565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611199906138d3565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112b2611c8e565b73ffffffffffffffffffffffffffffffffffffffff166112d061143e565b73ffffffffffffffffffffffffffffffffffffffff1614611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d90613750565b60405180910390fd5b61133060006124d4565b565b61133a611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661135861143e565b73ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590613750565b60405180910390fd5b8060098190555050565b6113c0611c8e565b73ffffffffffffffffffffffffffffffffffffffff166113de61143e565b73ffffffffffffffffffffffffffffffffffffffff1614611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b90613750565b60405180910390fd5b8060158190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60165481565b60606004805461147d90613641565b80601f01602080910402602001604051908101604052809291908181526020018280546114a990613641565b80156114f65780601f106114cb576101008083540402835291602001916114f6565b820191906000526020600020905b8154815290600101906020018083116114d957829003601f168201915b5050505050905090565b611508611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661152661143e565b73ffffffffffffffffffffffffffffffffffffffff161461157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390613750565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116019061398b565b60405180910390fd5b611614828261259a565b5050565b600c5481565b6000806001600061162d611c8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190613a1d565b60405180910390fd5b6116fe6116f5611c8e565b85858403611c96565b600191505092915050565b600061171d611716611c8e565b8484611e5f565b6001905092915050565b61172f611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661174d61143e565b73ffffffffffffffffffffffffffffffffffffffff16146117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90613750565b60405180910390fd5b806008819055506117c661012c6117b8610ba1565b6124be90919063ffffffff16565b600854101561180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190613841565b60405180910390fd5b50565b60146020528060005260406000206000915054906101000a900460ff1681565b600d5481565b6000601554905090565b611845611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661186361143e565b73ffffffffffffffffffffffffffffffffffffffff16146118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090613750565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361194b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194290613aaf565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119e8919061335a565b60405180910390a25050565b6119fc611c8e565b73ffffffffffffffffffffffffffffffffffffffff16611a1a61143e565b73ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6790613750565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611ab9919061335a565b60405180910390a150565b600a5481565b60115481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b611b89611c8e565b73ffffffffffffffffffffffffffffffffffffffff16611ba761143e565b73ffffffffffffffffffffffffffffffffffffffff1614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490613750565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6390613b41565b60405180910390fd5b611c75816124d4565b50565b60008183611c86919061379f565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90613bd3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b90613c65565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e52919061319a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec590613cf7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3490613d89565b60405180910390fd5b60008103611f5657611f51838360006126cd565b6124b9565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ff95750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561204f5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561209a57600854811115612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090613e1b565b60405180910390fd5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561213d5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121935750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121de576007548111156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490613ead565b60405180910390fd5b5b60006121e930611262565b905060006009548210159050600660149054906101000a900460ff1615801561225b5750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156122735750600660159054906101000a900460ff165b156122e457801561228d57600954915061228c8261294c565b5b6000479050601760009054906101000a900460ff1680156122af575060155481115b156122e2576015548111156122c45760155490505b6122e16122dc601654836124be90919063ffffffff16565b612b2c565b5b505b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123885750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ab576000601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561240c5761240960646123fb600d5487612b7890919063ffffffff16565b6124be90919063ffffffff16565b90505b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561248957612486606461247860115487612b7890919063ffffffff16565b6124be90919063ffffffff16565b90505b61249c8185612b8e90919063ffffffff16565b93506124a98630836126cd565b505b6124b68585856126cd565b50505b505050565b600081836124cc9190613efc565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361262c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262390613fc5565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390613cf7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a290613d89565b60405180910390fd5b6127b6838383612ba4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283390614057565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128cf919061379f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612933919061319a565b60405180910390a3612946848484612ba9565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000612992600d54612984600a5485612b7890919063ffffffff16565b6124be90919063ffffffff16565b905060006129aa6002836124be90919063ffffffff16565b905060006129c18284612b8e90919063ffffffff16565b905060004790506129d183612bae565b60006129e68247612b8e90919063ffffffff16565b90506129f28382612e27565b6000479050612a12612a0d8789612b8e90919063ffffffff16565b612bae565b6000612a278247612b8e90919063ffffffff16565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612aa2612a7f600c54600b54611c7890919063ffffffff16565b612a94600b5486612b7890919063ffffffff16565b6124be90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612acd573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868684604051612aff929190614077565b60405180910390a1505050505050506000600660146101000a81548160ff02191690831515021790555050565b6001600660146101000a81548160ff0219169083151502179055506000811115612b5a57612b5981612edf565b5b6000600660146101000a81548160ff02191690831515021790555050565b60008183612b8691906140a0565b905092915050565b60008183612b9c91906140fa565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612bcb57612bca61412e565b5b604051908082528060200260200182016040528015612bf95781602001602082028036833780820191505090505b5090503081600081518110612c1157612c1061415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdc91906141a1565b81600181518110612cf057612cef61415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081612d5730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611af4565b1015612d8d57612d8c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611c96565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612df19594939291906142c7565b600060405180830381600087803b158015612e0b57600080fd5b505af1158015612e1f573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612e7361143e565b426040518863ffffffff1660e01b8152600401612e9596959493929190614321565b60606040518083038185885af1158015612eb3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ed89190614397565b5050505050565b6000600267ffffffffffffffff811115612efc57612efb61412e565b5b604051908082528060200260200182016040528015612f2a5781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fbe91906141a1565b81600081518110612fd257612fd161415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106130415761304061415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000847f00000000000000000000000000000000000000000000000000000000000000006130f361012c42611c7890919063ffffffff16565b6040518663ffffffff1660e01b815260040161311294939291906143ea565b6000604051808303818588803b15801561312b57600080fd5b505af115801561313f573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051613175929190614436565b60405180910390a15050565b6000819050919050565b61319481613181565b82525050565b60006020820190506131af600083018461318b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131ef5780820151818401526020810190506131d4565b838111156131fe576000848401525b50505050565b6000601f19601f8301169050919050565b6000613220826131b5565b61322a81856131c0565b935061323a8185602086016131d1565b61324381613204565b840191505092915050565b600060208201905081810360008301526132688184613215565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132a082613275565b9050919050565b6132b081613295565b81146132bb57600080fd5b50565b6000813590506132cd816132a7565b92915050565b6132dc81613181565b81146132e757600080fd5b50565b6000813590506132f9816132d3565b92915050565b6000806040838503121561331657613315613270565b5b6000613324858286016132be565b9250506020613335858286016132ea565b9150509250929050565b60008115159050919050565b6133548161333f565b82525050565b600060208201905061336f600083018461334b565b92915050565b6000819050919050565b600061339a61339561339084613275565b613375565b613275565b9050919050565b60006133ac8261337f565b9050919050565b60006133be826133a1565b9050919050565b6133ce816133b3565b82525050565b60006020820190506133e960008301846133c5565b92915050565b60008060006060848603121561340857613407613270565b5b6000613416868287016132be565b9350506020613427868287016132be565b9250506040613438868287016132ea565b9150509250925092565b61344b81613295565b82525050565b60006020820190506134666000830184613442565b92915050565b6134758161333f565b811461348057600080fd5b50565b6000813590506134928161346c565b92915050565b6000602082840312156134ae576134ad613270565b5b60006134bc84828501613483565b91505092915050565b600060ff82169050919050565b6134db816134c5565b82525050565b60006020820190506134f660008301846134d2565b92915050565b60006020828403121561351257613511613270565b5b6000613520848285016132ea565b91505092915050565b60006020828403121561353f5761353e613270565b5b600061354d848285016132be565b91505092915050565b600061356182613275565b9050919050565b61357181613556565b82525050565b600060208201905061358c6000830184613568565b92915050565b600080604083850312156135a9576135a8613270565b5b60006135b7858286016132be565b92505060206135c885828601613483565b9150509250929050565b600080604083850312156135e9576135e8613270565b5b60006135f7858286016132be565b9250506020613608858286016132be565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061365957607f821691505b60208210810361366c5761366b613612565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006136ce6028836131c0565b91506136d982613672565b604082019050919050565b600060208201905081810360008301526136fd816136c1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061373a6020836131c0565b915061374582613704565b602082019050919050565b600060208201905081810360008301526137698161372d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137aa82613181565b91506137b583613181565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137ea576137e9613770565b5b828201905092915050565b7f76616c756520697320746f6f206c6f7700000000000000000000000000000000600082015250565b600061382b6010836131c0565b9150613836826137f5565b602082019050919050565b6000602082019050818103600083015261385a8161381e565b9050919050565b7f526564576176653a2054686520726f7574657220616c7265616479206861732060008201527f7468617420616464726573730000000000000000000000000000000000000000602082015250565b60006138bd602c836131c0565b91506138c882613861565b604082019050919050565b600060208201905081810360008301526138ec816138b0565b9050919050565b7f526564576176653a205468652050616e63616b6553776170207061697220636160008201527f6e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d6160208201527f726b65744d616b65725061697273000000000000000000000000000000000000604082015250565b6000613975604e836131c0565b9150613980826138f3565b606082019050919050565b600060208201905081810360008301526139a481613968565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613a076025836131c0565b9150613a12826139ab565b604082019050919050565b60006020820190508181036000830152613a36816139fa565b9050919050565b7f526564576176653a204163636f756e7420697320616c7265616479207468652060008201527f76616c7565206f6620276578636c756465642700000000000000000000000000602082015250565b6000613a996033836131c0565b9150613aa482613a3d565b604082019050919050565b60006020820190508181036000830152613ac881613a8c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b2b6026836131c0565b9150613b3682613acf565b604082019050919050565b60006020820190508181036000830152613b5a81613b1e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613bbd6024836131c0565b9150613bc882613b61565b604082019050919050565b60006020820190508181036000830152613bec81613bb0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c4f6022836131c0565b9150613c5a82613bf3565b604082019050919050565b60006020820190508181036000830152613c7e81613c42565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ce16025836131c0565b9150613cec82613c85565b604082019050919050565b60006020820190508181036000830152613d1081613cd4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613d736023836131c0565b9150613d7e82613d17565b604082019050919050565b60006020820190508181036000830152613da281613d66565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b6000613e05602b836131c0565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b6000613e97602c836131c0565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f0782613181565b9150613f1283613181565b925082613f2257613f21613ecd565b5b828204905092915050565b7f526564576176653a204175746f6d61746564206d61726b6574206d616b65722060008201527f7061697220697320616c72656164792073657420746f20746861742076616c7560208201527f6500000000000000000000000000000000000000000000000000000000000000604082015250565b6000613faf6041836131c0565b9150613fba82613f2d565b606082019050919050565b60006020820190508181036000830152613fde81613fa2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006140416026836131c0565b915061404c82613fe5565b604082019050919050565b6000602082019050818103600083015261407081614034565b9050919050565b600060408201905061408c600083018561318b565b614099602083018461318b565b9392505050565b60006140ab82613181565b91506140b683613181565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140ef576140ee613770565b5b828202905092915050565b600061410582613181565b915061411083613181565b92508282101561412357614122613770565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061419b816132a7565b92915050565b6000602082840312156141b7576141b6613270565b5b60006141c58482850161418c565b91505092915050565b6000819050919050565b60006141f36141ee6141e9846141ce565b613375565b613181565b9050919050565b614203816141d8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61423e81613295565b82525050565b60006142508383614235565b60208301905092915050565b6000602082019050919050565b600061427482614209565b61427e8185614214565b935061428983614225565b8060005b838110156142ba5781516142a18882614244565b97506142ac8361425c565b92505060018101905061428d565b5085935050505092915050565b600060a0820190506142dc600083018861318b565b6142e960208301876141fa565b81810360408301526142fb8186614269565b905061430a6060830185613442565b614317608083018461318b565b9695505050505050565b600060c0820190506143366000830189613442565b614343602083018861318b565b61435060408301876141fa565b61435d60608301866141fa565b61436a6080830185613442565b61437760a083018461318b565b979650505050505050565b600081519050614391816132d3565b92915050565b6000806000606084860312156143b0576143af613270565b5b60006143be86828701614382565b93505060206143cf86828701614382565b92505060406143e086828701614382565b9150509250925092565b60006080820190506143ff60008301876141fa565b81810360208301526144118186614269565b90506144206040830185613442565b61442d606083018461318b565b95945050505050565b600060408201905061444b600083018561318b565b818103602083015261445d8184614269565b9050939250505056fea26469706673582212200fc2ac90ab6a39252602aef314d7f5bb98cc8dfe25e8ca46f390ee1571bb8baf64736f6c634300080d0033
Deployed Bytecode
0x6080604052600436106102815760003560e01c806370a082311161014f578063b3b5e043116100c1578063ccb613581161007a578063ccb61358146109ad578063d0a39814146109d8578063d9671ba014610a03578063dd62ed3e14610a2e578063e2f4560514610a6b578063f2fde38b14610a9657610288565b8063b3b5e0431461089f578063b62496f5146108c8578063b9e9370014610905578063bdc653ef14610930578063c02466681461095b578063c49b9a801461098457610288565b80639303e1ce116101135780639303e1ce1461077b57806395d89b41146107a65780639a7a23d6146107d1578063a1e2745f146107fa578063a457c2d714610825578063a9059cbb1461086257610288565b806370a08231146106aa578063715018a6146106e7578063750c11b6146106fe57806382d2a4bb146107275780638da5cb5b1461075057610288565b80632a6986b8116101f35780634fbee193116101ac5780634fbee1931461059a57806359927044146105d75780635aa821a9146106025780635c38ffe21461062d5780636053a0e31461065657806365b8dbc01461068157610288565b80632a6986b814610488578063313ce567146104b357806339509351146104de5780634198d1bb1461051b57806349bd5a5e146105445780634a74bb021461056f57610288565b806318160ddd1161024557806318160ddd1461037657806319998bbb146103a15780631d38ff96146103cc57806323b872dd146103f757806327c8f8351461043457806329370cc61461045f57610288565b806302259e9e1461028d57806306fdde03146102b8578063095ea7b3146102e3578063099d0d30146103205780631694505e1461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610abf565b6040516102af919061319a565b60405180910390f35b3480156102c457600080fd5b506102cd610ac5565b6040516102da919061324e565b60405180910390f35b3480156102ef57600080fd5b5061030a600480360381019061030591906132ff565b610b57565b604051610317919061335a565b60405180910390f35b34801561032c57600080fd5b50610335610b75565b604051610342919061319a565b60405180910390f35b34801561035757600080fd5b50610360610b7b565b60405161036d91906133d4565b60405180910390f35b34801561038257600080fd5b5061038b610ba1565b604051610398919061319a565b60405180910390f35b3480156103ad57600080fd5b506103b6610bab565b6040516103c3919061319a565b60405180910390f35b3480156103d857600080fd5b506103e1610bb1565b6040516103ee919061319a565b60405180910390f35b34801561040357600080fd5b5061041e600480360381019061041991906133ef565b610bb7565b60405161042b919061335a565b60405180910390f35b34801561044057600080fd5b50610449610caf565b6040516104569190613451565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613498565b610cd3565b005b34801561049457600080fd5b5061049d610da3565b6040516104aa919061319a565b60405180910390f35b3480156104bf57600080fd5b506104c8610da9565b6040516104d591906134e1565b60405180910390f35b3480156104ea57600080fd5b50610505600480360381019061050091906132ff565b610db2565b604051610512919061335a565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d91906134fc565b610e5e565b005b34801561055057600080fd5b50610559610ee4565b6040516105669190613451565b60405180910390f35b34801561057b57600080fd5b50610584610f08565b604051610591919061335a565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190613529565b610f1b565b6040516105ce919061335a565b60405180910390f35b3480156105e357600080fd5b506105ec610f71565b6040516105f99190613577565b60405180910390f35b34801561060e57600080fd5b50610617610f97565b604051610624919061319a565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f91906134fc565b610f9d565b005b34801561066257600080fd5b5061066b611083565b604051610678919061335a565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190613529565b611096565b005b3480156106b657600080fd5b506106d160048036038101906106cc9190613529565b611262565b6040516106de919061319a565b60405180910390f35b3480156106f357600080fd5b506106fc6112aa565b005b34801561070a57600080fd5b50610725600480360381019061072091906134fc565b611332565b005b34801561073357600080fd5b5061074e600480360381019061074991906134fc565b6113b8565b005b34801561075c57600080fd5b5061076561143e565b6040516107729190613451565b60405180910390f35b34801561078757600080fd5b50610790611468565b60405161079d919061319a565b60405180910390f35b3480156107b257600080fd5b506107bb61146e565b6040516107c8919061324e565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190613592565b611500565b005b34801561080657600080fd5b5061080f611618565b60405161081c919061319a565b60405180910390f35b34801561083157600080fd5b5061084c600480360381019061084791906132ff565b61161e565b604051610859919061335a565b60405180910390f35b34801561086e57600080fd5b50610889600480360381019061088491906132ff565b611709565b604051610896919061335a565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c191906134fc565b611727565b005b3480156108d457600080fd5b506108ef60048036038101906108ea9190613529565b61180d565b6040516108fc919061335a565b60405180910390f35b34801561091157600080fd5b5061091a61182d565b604051610927919061319a565b60405180910390f35b34801561093c57600080fd5b50610945611833565b604051610952919061319a565b60405180910390f35b34801561096757600080fd5b50610982600480360381019061097d9190613592565b61183d565b005b34801561099057600080fd5b506109ab60048036038101906109a69190613498565b6119f4565b005b3480156109b957600080fd5b506109c2611ac4565b6040516109cf919061319a565b60405180910390f35b3480156109e457600080fd5b506109ed611aca565b6040516109fa919061319a565b60405180910390f35b348015610a0f57600080fd5b50610a18611ad0565b604051610a259190613451565b60405180910390f35b348015610a3a57600080fd5b50610a556004803603810190610a5091906135d2565b611af4565b604051610a62919061319a565b60405180910390f35b348015610a7757600080fd5b50610a80611b7b565b604051610a8d919061319a565b60405180910390f35b348015610aa257600080fd5b50610abd6004803603810190610ab89190613529565b611b81565b005b60075481565b606060038054610ad490613641565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0090613641565b8015610b4d5780601f10610b2257610100808354040283529160200191610b4d565b820191906000526020600020905b815481529060010190602001808311610b3057829003601f168201915b5050505050905090565b6000610b6b610b64611c8e565b8484611c96565b6001905092915050565b600e5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600f5481565b600b5481565b6000610bc4848484611e5f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c0f611c8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c86906136e4565b60405180910390fd5b610ca385610c9b611c8e565b858403611c96565b60019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b610cdb611c8e565b73ffffffffffffffffffffffffffffffffffffffff16610cf961143e565b73ffffffffffffffffffffffffffffffffffffffff1614610d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4690613750565b60405180910390fd5b80601760006101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c081604051610d98919061335a565b60405180910390a150565b60105481565b6000600c905090565b6000610e54610dbf611c8e565b848460016000610dcd611c8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e4f919061379f565b611c96565b6001905092915050565b610e66611c8e565b73ffffffffffffffffffffffffffffffffffffffff16610e8461143e565b73ffffffffffffffffffffffffffffffffffffffff1614610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed190613750565b60405180910390fd5b8060168190555050565b7f000000000000000000000000d42b5f5b4346cd35b3ca4cc750dc87e038cdfd1981565b600660159054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b610fa5611c8e565b73ffffffffffffffffffffffffffffffffffffffff16610fc361143e565b73ffffffffffffffffffffffffffffffffffffffff1614611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090613750565b60405180910390fd5b8060078190555061103c61012c61102e610ba1565b6124be90919063ffffffff16565b6007541015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790613841565b60405180910390fd5b50565b601760009054906101000a900460ff1681565b61109e611c8e565b73ffffffffffffffffffffffffffffffffffffffff166110bc61143e565b73ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613750565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611199906138d3565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112b2611c8e565b73ffffffffffffffffffffffffffffffffffffffff166112d061143e565b73ffffffffffffffffffffffffffffffffffffffff1614611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d90613750565b60405180910390fd5b61133060006124d4565b565b61133a611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661135861143e565b73ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590613750565b60405180910390fd5b8060098190555050565b6113c0611c8e565b73ffffffffffffffffffffffffffffffffffffffff166113de61143e565b73ffffffffffffffffffffffffffffffffffffffff1614611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b90613750565b60405180910390fd5b8060158190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60165481565b60606004805461147d90613641565b80601f01602080910402602001604051908101604052809291908181526020018280546114a990613641565b80156114f65780601f106114cb576101008083540402835291602001916114f6565b820191906000526020600020905b8154815290600101906020018083116114d957829003601f168201915b5050505050905090565b611508611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661152661143e565b73ffffffffffffffffffffffffffffffffffffffff161461157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390613750565b60405180910390fd5b7f000000000000000000000000d42b5f5b4346cd35b3ca4cc750dc87e038cdfd1973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116019061398b565b60405180910390fd5b611614828261259a565b5050565b600c5481565b6000806001600061162d611c8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190613a1d565b60405180910390fd5b6116fe6116f5611c8e565b85858403611c96565b600191505092915050565b600061171d611716611c8e565b8484611e5f565b6001905092915050565b61172f611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661174d61143e565b73ffffffffffffffffffffffffffffffffffffffff16146117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90613750565b60405180910390fd5b806008819055506117c661012c6117b8610ba1565b6124be90919063ffffffff16565b600854101561180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190613841565b60405180910390fd5b50565b60146020528060005260406000206000915054906101000a900460ff1681565b600d5481565b6000601554905090565b611845611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661186361143e565b73ffffffffffffffffffffffffffffffffffffffff16146118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090613750565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361194b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194290613aaf565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119e8919061335a565b60405180910390a25050565b6119fc611c8e565b73ffffffffffffffffffffffffffffffffffffffff16611a1a61143e565b73ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6790613750565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611ab9919061335a565b60405180910390a150565b600a5481565b60115481565b7f0000000000000000000000004d224452801aced8b2f0aebe155379bb5d59438181565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b611b89611c8e565b73ffffffffffffffffffffffffffffffffffffffff16611ba761143e565b73ffffffffffffffffffffffffffffffffffffffff1614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490613750565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6390613b41565b60405180910390fd5b611c75816124d4565b50565b60008183611c86919061379f565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90613bd3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b90613c65565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e52919061319a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec590613cf7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3490613d89565b60405180910390fd5b60008103611f5657611f51838360006126cd565b6124b9565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ff95750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561204f5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561209a57600854811115612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090613e1b565b60405180910390fd5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561213d5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121935750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121de576007548111156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490613ead565b60405180910390fd5b5b60006121e930611262565b905060006009548210159050600660149054906101000a900460ff1615801561225b5750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156122735750600660159054906101000a900460ff165b156122e457801561228d57600954915061228c8261294c565b5b6000479050601760009054906101000a900460ff1680156122af575060155481115b156122e2576015548111156122c45760155490505b6122e16122dc601654836124be90919063ffffffff16565b612b2c565b5b505b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123885750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ab576000601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561240c5761240960646123fb600d5487612b7890919063ffffffff16565b6124be90919063ffffffff16565b90505b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561248957612486606461247860115487612b7890919063ffffffff16565b6124be90919063ffffffff16565b90505b61249c8185612b8e90919063ffffffff16565b93506124a98630836126cd565b505b6124b68585856126cd565b50505b505050565b600081836124cc9190613efc565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361262c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262390613fc5565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390613cf7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a290613d89565b60405180910390fd5b6127b6838383612ba4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283390614057565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128cf919061379f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612933919061319a565b60405180910390a3612946848484612ba9565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000612992600d54612984600a5485612b7890919063ffffffff16565b6124be90919063ffffffff16565b905060006129aa6002836124be90919063ffffffff16565b905060006129c18284612b8e90919063ffffffff16565b905060004790506129d183612bae565b60006129e68247612b8e90919063ffffffff16565b90506129f28382612e27565b6000479050612a12612a0d8789612b8e90919063ffffffff16565b612bae565b6000612a278247612b8e90919063ffffffff16565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612aa2612a7f600c54600b54611c7890919063ffffffff16565b612a94600b5486612b7890919063ffffffff16565b6124be90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612acd573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868684604051612aff929190614077565b60405180910390a1505050505050506000600660146101000a81548160ff02191690831515021790555050565b6001600660146101000a81548160ff0219169083151502179055506000811115612b5a57612b5981612edf565b5b6000600660146101000a81548160ff02191690831515021790555050565b60008183612b8691906140a0565b905092915050565b60008183612b9c91906140fa565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612bcb57612bca61412e565b5b604051908082528060200260200182016040528015612bf95781602001602082028036833780820191505090505b5090503081600081518110612c1157612c1061415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdc91906141a1565b81600181518110612cf057612cef61415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081612d5730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611af4565b1015612d8d57612d8c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611c96565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612df19594939291906142c7565b600060405180830381600087803b158015612e0b57600080fd5b505af1158015612e1f573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612e7361143e565b426040518863ffffffff1660e01b8152600401612e9596959493929190614321565b60606040518083038185885af1158015612eb3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ed89190614397565b5050505050565b6000600267ffffffffffffffff811115612efc57612efb61412e565b5b604051908082528060200260200182016040528015612f2a5781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fbe91906141a1565b81600081518110612fd257612fd161415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000004d224452801aced8b2f0aebe155379bb5d594381816001815181106130415761304061415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead6130f361012c42611c7890919063ffffffff16565b6040518663ffffffff1660e01b815260040161311294939291906143ea565b6000604051808303818588803b15801561312b57600080fd5b505af115801561313f573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051613175929190614436565b60405180910390a15050565b6000819050919050565b61319481613181565b82525050565b60006020820190506131af600083018461318b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131ef5780820151818401526020810190506131d4565b838111156131fe576000848401525b50505050565b6000601f19601f8301169050919050565b6000613220826131b5565b61322a81856131c0565b935061323a8185602086016131d1565b61324381613204565b840191505092915050565b600060208201905081810360008301526132688184613215565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132a082613275565b9050919050565b6132b081613295565b81146132bb57600080fd5b50565b6000813590506132cd816132a7565b92915050565b6132dc81613181565b81146132e757600080fd5b50565b6000813590506132f9816132d3565b92915050565b6000806040838503121561331657613315613270565b5b6000613324858286016132be565b9250506020613335858286016132ea565b9150509250929050565b60008115159050919050565b6133548161333f565b82525050565b600060208201905061336f600083018461334b565b92915050565b6000819050919050565b600061339a61339561339084613275565b613375565b613275565b9050919050565b60006133ac8261337f565b9050919050565b60006133be826133a1565b9050919050565b6133ce816133b3565b82525050565b60006020820190506133e960008301846133c5565b92915050565b60008060006060848603121561340857613407613270565b5b6000613416868287016132be565b9350506020613427868287016132be565b9250506040613438868287016132ea565b9150509250925092565b61344b81613295565b82525050565b60006020820190506134666000830184613442565b92915050565b6134758161333f565b811461348057600080fd5b50565b6000813590506134928161346c565b92915050565b6000602082840312156134ae576134ad613270565b5b60006134bc84828501613483565b91505092915050565b600060ff82169050919050565b6134db816134c5565b82525050565b60006020820190506134f660008301846134d2565b92915050565b60006020828403121561351257613511613270565b5b6000613520848285016132ea565b91505092915050565b60006020828403121561353f5761353e613270565b5b600061354d848285016132be565b91505092915050565b600061356182613275565b9050919050565b61357181613556565b82525050565b600060208201905061358c6000830184613568565b92915050565b600080604083850312156135a9576135a8613270565b5b60006135b7858286016132be565b92505060206135c885828601613483565b9150509250929050565b600080604083850312156135e9576135e8613270565b5b60006135f7858286016132be565b9250506020613608858286016132be565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061365957607f821691505b60208210810361366c5761366b613612565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006136ce6028836131c0565b91506136d982613672565b604082019050919050565b600060208201905081810360008301526136fd816136c1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061373a6020836131c0565b915061374582613704565b602082019050919050565b600060208201905081810360008301526137698161372d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137aa82613181565b91506137b583613181565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137ea576137e9613770565b5b828201905092915050565b7f76616c756520697320746f6f206c6f7700000000000000000000000000000000600082015250565b600061382b6010836131c0565b9150613836826137f5565b602082019050919050565b6000602082019050818103600083015261385a8161381e565b9050919050565b7f526564576176653a2054686520726f7574657220616c7265616479206861732060008201527f7468617420616464726573730000000000000000000000000000000000000000602082015250565b60006138bd602c836131c0565b91506138c882613861565b604082019050919050565b600060208201905081810360008301526138ec816138b0565b9050919050565b7f526564576176653a205468652050616e63616b6553776170207061697220636160008201527f6e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d6160208201527f726b65744d616b65725061697273000000000000000000000000000000000000604082015250565b6000613975604e836131c0565b9150613980826138f3565b606082019050919050565b600060208201905081810360008301526139a481613968565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613a076025836131c0565b9150613a12826139ab565b604082019050919050565b60006020820190508181036000830152613a36816139fa565b9050919050565b7f526564576176653a204163636f756e7420697320616c7265616479207468652060008201527f76616c7565206f6620276578636c756465642700000000000000000000000000602082015250565b6000613a996033836131c0565b9150613aa482613a3d565b604082019050919050565b60006020820190508181036000830152613ac881613a8c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b2b6026836131c0565b9150613b3682613acf565b604082019050919050565b60006020820190508181036000830152613b5a81613b1e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613bbd6024836131c0565b9150613bc882613b61565b604082019050919050565b60006020820190508181036000830152613bec81613bb0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c4f6022836131c0565b9150613c5a82613bf3565b604082019050919050565b60006020820190508181036000830152613c7e81613c42565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ce16025836131c0565b9150613cec82613c85565b604082019050919050565b60006020820190508181036000830152613d1081613cd4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613d736023836131c0565b9150613d7e82613d17565b604082019050919050565b60006020820190508181036000830152613da281613d66565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b6000613e05602b836131c0565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b6000613e97602c836131c0565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f0782613181565b9150613f1283613181565b925082613f2257613f21613ecd565b5b828204905092915050565b7f526564576176653a204175746f6d61746564206d61726b6574206d616b65722060008201527f7061697220697320616c72656164792073657420746f20746861742076616c7560208201527f6500000000000000000000000000000000000000000000000000000000000000604082015250565b6000613faf6041836131c0565b9150613fba82613f2d565b606082019050919050565b60006020820190508181036000830152613fde81613fa2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006140416026836131c0565b915061404c82613fe5565b604082019050919050565b6000602082019050818103600083015261407081614034565b9050919050565b600060408201905061408c600083018561318b565b614099602083018461318b565b9392505050565b60006140ab82613181565b91506140b683613181565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140ef576140ee613770565b5b828202905092915050565b600061410582613181565b915061411083613181565b92508282101561412357614122613770565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061419b816132a7565b92915050565b6000602082840312156141b7576141b6613270565b5b60006141c58482850161418c565b91505092915050565b6000819050919050565b60006141f36141ee6141e9846141ce565b613375565b613181565b9050919050565b614203816141d8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61423e81613295565b82525050565b60006142508383614235565b60208301905092915050565b6000602082019050919050565b600061427482614209565b61427e8185614214565b935061428983614225565b8060005b838110156142ba5781516142a18882614244565b97506142ac8361425c565b92505060018101905061428d565b5085935050505092915050565b600060a0820190506142dc600083018861318b565b6142e960208301876141fa565b81810360408301526142fb8186614269565b905061430a6060830185613442565b614317608083018461318b565b9695505050505050565b600060c0820190506143366000830189613442565b614343602083018861318b565b61435060408301876141fa565b61435d60608301866141fa565b61436a6080830185613442565b61437760a083018461318b565b979650505050505050565b600081519050614391816132d3565b92915050565b6000806000606084860312156143b0576143af613270565b5b60006143be86828701614382565b93505060206143cf86828701614382565b92505060406143e086828701614382565b9150509250925092565b60006080820190506143ff60008301876141fa565b81810360208301526144118186614269565b90506144206040830185613442565b61442d606083018461318b565b95945050505050565b600060408201905061444b600083018561318b565b818103602083015261445d8184614269565b9050939250505056fea26469706673582212200fc2ac90ab6a39252602aef314d7f5bb98cc8dfe25e8ca46f390ee1571bb8baf64736f6c634300080d0033
Deployed Bytecode Sourcemap
39725:12140:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39984:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5581:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7748:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40390:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39802:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6701:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40432:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40226:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8399:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40816:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51706:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40469:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6543:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9300:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51357:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39850:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39935:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44367:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40722:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40054:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50763:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41363:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43131:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6872:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17118:94;;;;;;;;;;;;;:::i;:::-;;51230:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51470:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16467:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41315:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5800:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43765:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40262:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10018:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7212:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51001:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41174:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40301:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51590:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43455:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44503:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40185:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40509:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40602:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7450:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40123:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17367:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39984:63;;;;:::o;5581:100::-;5635:13;5668:5;5661:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:100;:::o;7748:169::-;7831:4;7848:39;7857:12;:10;:12::i;:::-;7871:7;7880:6;7848:8;:39::i;:::-;7905:4;7898:11;;7748:169;;;;:::o;40390:35::-;;;;:::o;39802:41::-;;;;;;;;;;;;;:::o;6701:108::-;6762:7;6789:12;;6782:19;;6701:108;:::o;40432:30::-;;;;:::o;40226:29::-;;;;:::o;8399:492::-;8539:4;8556:36;8566:6;8574:9;8585:6;8556:9;:36::i;:::-;8605:24;8632:11;:19;8644:6;8632:19;;;;;;;;;;;;;;;:33;8652:12;:10;:12::i;:::-;8632:33;;;;;;;;;;;;;;;;8605:60;;8704:6;8684:16;:26;;8676:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8791:57;8800:6;8808:12;:10;:12::i;:::-;8841:6;8822:16;:25;8791:8;:57::i;:::-;8879:4;8872:11;;;8399:492;;;;;:::o;40816:81::-;;;:::o;51706:150::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51793:8:::1;51776:14;;:25;;;;;;;;;;;;;;;;;;51817:31;51839:8;51817:31;;;;;;:::i;:::-;;;;;;;;51706:150:::0;:::o;40469:33::-;;;;:::o;6543:93::-;6601:5;6626:2;6619:9;;6543:93;:::o;9300:215::-;9388:4;9405:80;9414:12;:10;:12::i;:::-;9428:7;9474:10;9437:11;:25;9449:12;:10;:12::i;:::-;9437:25;;;;;;;;;;;;;;;:34;9463:7;9437:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9405:8;:80::i;:::-;9503:4;9496:11;;9300:215;;;;:::o;51357:105::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51447:7:::1;51429:15;:25;;;;51357:105:::0;:::o;39850:38::-;;;:::o;39935:40::-;;;;;;;;;;;;;:::o;44367:125::-;44432:4;44456:19;:28;44476:7;44456:28;;;;;;;;;;;;;;;;;;;;;;;;;44449:35;;44367:125;;;:::o;40722:87::-;;;;;;;;;;;;;:::o;40054:62::-;;;;:::o;50763:226::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50875:16:::1;50848:24;:43;;;;50938:22;50956:3;50938:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;50910:24;;:50;;50902:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;50763:226:::0;:::o;41363:33::-;;;;;;;;;;;;;:::o;43131:316::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43240:15:::1;;;;;;;;;;;43218:38;;:10;:38;;::::0;43210:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43363:15;;;;;;;;;;;43321:59;;43343:10;43321:59;;;;;;;;;;;;43428:10;43391:15;;:48;;;;;;;;;;;;;;;;;;43131:316:::0;:::o;6872:127::-;6946:7;6973:9;:18;6983:7;6973:18;;;;;;;;;;;;;;;;6966:25;;6872:127;;;:::o;17118:94::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17183:21:::1;17201:1;17183:9;:21::i;:::-;17118:94::o:0;51230:119::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51331:10:::1;51310:18;:31;;;;51230:119:::0;:::o;51470:112::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51566:8:::1;51546:17;:28;;;;51470:112:::0;:::o;16467:87::-;16513:7;16540:6;;;;;;;;;;;16533:13;;16467:87;:::o;41315:35::-;;;;:::o;5800:104::-;5856:13;5889:7;5882:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5800:104;:::o;43765:265::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43872:13:::1;43864:21;;:4;:21;;::::0;43856:112:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43981:41;44010:4;44016:5;43981:28;:41::i;:::-;43765:265:::0;;:::o;40262:32::-;;;;:::o;10018:413::-;10111:4;10128:24;10155:11;:25;10167:12;:10;:12::i;:::-;10155:25;;;;;;;;;;;;;;;:34;10181:7;10155:34;;;;;;;;;;;;;;;;10128:61;;10228:15;10208:16;:35;;10200:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10321:67;10330:12;:10;:12::i;:::-;10344:7;10372:15;10353:16;:34;10321:8;:67::i;:::-;10419:4;10412:11;;;10018:413;;;;:::o;7212:175::-;7298:4;7315:42;7325:12;:10;:12::i;:::-;7339:9;7350:6;7315:9;:42::i;:::-;7375:4;7368:11;;7212:175;;;;:::o;51001:221::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51110:15:::1;51084:23;:41;;;;51171:22;51189:3;51171:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;51144:23;;:49;;51136:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;51001:221:::0;:::o;41174:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;40301:80::-;;;;:::o;51590:108::-;51646:7;51673:17;;51666:24;;51590:108;:::o;43455:299::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43580:8:::1;43548:40;;:19;:28;43568:7;43548:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;43540:104:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43686:8;43655:19;:28;43675:7;43655:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43728:7;43712:34;;;43737:8;43712:34;;;;;;:::i;:::-;;;;;;;;43455:299:::0;;:::o;44503:171::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44604:8:::1;44580:21;;:32;;;;;;;;;;;;;;;;;;44628:38;44657:8;44628:38;;;;;;:::i;:::-;;;;;;;;44503:171:::0;:::o;40185:34::-;;;;:::o;40509:84::-;;;;:::o;40602:86::-;;;:::o;7450:151::-;7539:7;7566:11;:18;7578:5;7566:18;;;;;;;;;;;;;;;:27;7585:7;7566:27;;;;;;;;;;;;;;;;7559:34;;7450:151;;;;:::o;40123:53::-;;;;:::o;17367:192::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17476:1:::1;17456:22;;:8;:22;;::::0;17448:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17532:19;17542:8;17532:9;:19::i;:::-;17367:192:::0;:::o;27621:98::-;27679:7;27710:1;27706;:5;;;;:::i;:::-;27699:12;;27621:98;;;;:::o;102:::-;155:7;182:10;175:17;;102:98;:::o;13717:380::-;13870:1;13853:19;;:5;:19;;;13845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13951:1;13932:21;;:7;:21;;;13924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14035:6;14005:11;:18;14017:5;14005:18;;;;;;;;;;;;;;;:27;14024:7;14005:27;;;;;;;;;;;;;;;:36;;;;14073:7;14057:32;;14066:5;14057:32;;;14082:6;14057:32;;;;;;:::i;:::-;;;;;;;;13717:380;;;:::o;44682:2255::-;44830:1;44814:18;;:4;:18;;;44806:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44907:1;44893:16;;:2;:16;;;44885:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44975:1;44965:6;:11;44962:92;;44993:28;45009:4;45015:2;45019:1;44993:15;:28::i;:::-;45036:7;;44962:92;45077:25;:31;45103:4;45077:31;;;;;;;;;;;;;;;;;;;;;;;;;:63;;;;;45114:19;:25;45134:4;45114:25;;;;;;;;;;;;;;;;;;;;;;;;;45113:26;45077:63;:93;;;;;45146:19;:23;45166:2;45146:23;;;;;;;;;;;;;;;;;;;;;;;;;45145:24;45077:93;45074:213;;;45204:23;;45194:6;:33;;45186:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;45074:213;45302:25;:29;45328:2;45302:29;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;;45337:19;:25;45357:4;45337:25;;;;;;;;;;;;;;;;;;;;;;;;;45336:26;45302:61;:91;;;;;45369:19;:23;45389:2;45369:23;;;;;;;;;;;;;;;;;;;;;;;;;45368:24;45302:91;45299:213;;;45427:24;;45417:6;:34;;45409:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;45299:213;45529:28;45560:24;45578:4;45560:9;:24::i;:::-;45529:55;;45605:24;45656:18;;45632:20;:42;;45605:69;;45698:16;;;;;;;;;;;45697:17;:50;;;;;45718:25;:29;45744:2;45718:29;;;;;;;;;;;;;;;;;;;;;;;;;45697:50;:75;;;;;45751:21;;;;;;;;;;;45697:75;45694:621;;;45792:19;45789:157;;;45855:18;;45832:41;;45892:36;45907:20;45892:14;:36::i;:::-;45789:157;45974:15;45992:21;45974:39;;46032:14;;;;;;;;;;;:54;;;;;46068:17;;46050:7;:36;46032:54;46028:274;;;46139:17;;46129:7;:27;46125:81;;;46189:17;;46179:27;;46125:81;46243:43;46257:28;46269:15;;46257:7;:11;;:28;;;;:::i;:::-;46243:13;:43::i;:::-;46028:274;45774:541;45694:621;46417:19;:25;46437:4;46417:25;;;;;;;;;;;;;;;;;;;;;;;;;46416:26;:54;;;;;46447:19;:23;46467:2;46447:23;;;;;;;;;;;;;;;;;;;;;;;;;46446:24;46416:54;46413:469;;;46488:12;46518:25;:31;46544:4;46518:31;;;;;;;;;;;;;;;;;;;;;;;;;46515:110;;;46576:33;46605:3;46576:24;46587:12;;46576:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46568:41;;46515:110;46644:25;:29;46670:2;46644:29;;;;;;;;;;;;;;;;;;;;;;;;;46641:109;;;46700:34;46730:3;46700:25;46711:13;;46700:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46692:42;;46641:109;46782:16;46793:4;46782:6;:10;;:16;;;;:::i;:::-;46773:25;;46813:42;46829:4;46843;46850;46813:15;:42::i;:::-;46473:409;46413:469;46894:33;46910:4;46916:2;46920:6;46894:15;:33::i;:::-;44795:2142;;44682:2255;;;;:::o;28758:98::-;28816:7;28847:1;28843;:5;;;;:::i;:::-;28836:12;;28758:98;;;;:::o;17567:173::-;17623:16;17642:6;;;;;;;;;;;17623:25;;17668:8;17659:6;;:17;;;;;;;;;;;;;;;;;;17723:8;17692:40;;17713:8;17692:40;;;;;;;;;;;;17612:128;17567:173;:::o;44038:317::-;44164:5;44129:40;;:25;:31;44155:4;44129:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;44121:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;44284:5;44250:25;:31;44276:4;44250:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;44341:5;44307:40;;44335:4;44307:40;;;;;;;;;;;;44038:317;;:::o;10921:733::-;11079:1;11061:20;;:6;:20;;;11053:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11163:1;11142:23;;:9;:23;;;11134:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11218:47;11239:6;11247:9;11258:6;11218:20;:47::i;:::-;11278:21;11302:9;:17;11312:6;11302:17;;;;;;;;;;;;;;;;11278:41;;11355:6;11338:13;:23;;11330:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11476:6;11460:13;:22;11440:9;:17;11450:6;11440:17;;;;;;;;;;;;;;;:42;;;;11528:6;11504:9;:20;11514:9;11504:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11569:9;11552:35;;11561:6;11552:35;;;11580:6;11552:35;;;;;;:::i;:::-;;;;;;;;11600:46;11620:6;11628:9;11639:6;11600:19;:46::i;:::-;11042:612;10921:733;;;:::o;46946:1439::-;42069:4;42050:16;;:23;;;;;;;;;;;;;;;;;;47031:26:::1;47060:59;47106:12;;47060:41;47085:15;;47060:20;:24;;:41;;;;:::i;:::-;:45;;:59;;;;:::i;:::-;47031:88;;47188:12;47203:25;47226:1;47203:18;:22;;:25;;;;:::i;:::-;47188:40;;47239:17;47259:28;47282:4;47259:18;:22;;:28;;;;:::i;:::-;47239:48;;47565:22;47590:21;47565:46;;47656:22;47673:4;47656:16;:22::i;:::-;47809:18;47830:41;47856:14;47830:21;:25;;:41;;;;:::i;:::-;47809:62;;47921:35;47934:9;47945:10;47921:12;:35::i;:::-;48014:25;48042:21;48014:49;;48074:62;48091:44;48116:18;48091:20;:24;;:44;;;;:::i;:::-;48074:16;:62::i;:::-;48148:24;48175:44;48201:17;48175:21;:25;;:44;;;;:::i;:::-;48148:71;;48230:10;;;;;;;;;;;:19;;:88;48250:67;48287:29;48302:13;;48287:10;;:14;;:29;;;;:::i;:::-;48250:32;48271:10;;48250:16;:20;;:32;;;;:::i;:::-;:36;;:67;;;;:::i;:::-;48230:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48344:32;48359:4;48365:10;48344:32;;;;;;;:::i;:::-;;;;;;;;47020:1365;;;;;;;42115:5:::0;42096:16;;:24;;;;;;;;;;;;;;;;;;46946:1439;:::o;49494:135::-;42069:4;42050:16;;:23;;;;;;;;;;;;;;;;;;49574:1:::1;49565:6;:10;49561:61;;;49589:24;49606:6;49589:16;:24::i;:::-;49561:61;42115:5:::0;42096:16;;:24;;;;;;;;;;;;;;;;;;49494:135;:::o;28359:98::-;28417:7;28448:1;28444;:5;;;;:::i;:::-;28437:12;;28359:98;;;;:::o;28002:::-;28060:7;28091:1;28087;:5;;;;:::i;:::-;28080:12;;28002:98;;;;:::o;14697:125::-;;;;:::o;15426:124::-;;;;:::o;48393:694::-;48521:21;48559:1;48545:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48521:40;;48590:4;48572;48577:1;48572:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48616:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48606:4;48611:1;48606:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48707:11;48654:50;48672:4;48687:15;;;;;;;;;;;48654:9;:50::i;:::-;:64;48651:156;;;48733:62;48750:4;48765:15;;;;;;;;;;;48792:1;48783:11;48733:8;:62::i;:::-;48651:156;48845:15;;;;;;;;;;;:66;;;48926:11;48952:1;48996:4;49023;49043:15;48845:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48448:639;48393:694;:::o;49095:391::-;49216:15;;;;;;;;;;;:31;;;49255:9;49288:4;49308:11;49334:1;49377;49420:7;:5;:7::i;:::-;49442:15;49216:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;49095:391;;:::o;49637:572::-;49758:21;49796:1;49782:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49758:40;;49819:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49809:4;49814:1;49809:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;49862:7;49852:4;49857:1;49852:7;;;;;;;;:::i;:::-;;;;;;;:17;;;;;;;;;;;49906:15;;;;;;;;;;;:66;;;49980:6;50002:1;50049:4;50068:11;50110:24;50130:3;50110:15;:19;;:24;;;;:::i;:::-;49906:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50171:30;50188:6;50196:4;50171:30;;;;;;;:::i;:::-;;;;;;;;49687:522;49637:572;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:118::-;5536:24;5554:5;5536:24;:::i;:::-;5531:3;5524:37;5449:118;;:::o;5573:222::-;5666:4;5704:2;5693:9;5689:18;5681:26;;5717:71;5785:1;5774:9;5770:17;5761:6;5717:71;:::i;:::-;5573:222;;;;:::o;5801:116::-;5871:21;5886:5;5871:21;:::i;:::-;5864:5;5861:32;5851:60;;5907:1;5904;5897:12;5851:60;5801:116;:::o;5923:133::-;5966:5;6004:6;5991:20;5982:29;;6020:30;6044:5;6020:30;:::i;:::-;5923:133;;;;:::o;6062:323::-;6118:6;6167:2;6155:9;6146:7;6142:23;6138:32;6135:119;;;6173:79;;:::i;:::-;6135:119;6293:1;6318:50;6360:7;6351:6;6340:9;6336:22;6318:50;:::i;:::-;6308:60;;6264:114;6062:323;;;;:::o;6391:86::-;6426:7;6466:4;6459:5;6455:16;6444:27;;6391:86;;;:::o;6483:112::-;6566:22;6582:5;6566:22;:::i;:::-;6561:3;6554:35;6483:112;;:::o;6601:214::-;6690:4;6728:2;6717:9;6713:18;6705:26;;6741:67;6805:1;6794:9;6790:17;6781:6;6741:67;:::i;:::-;6601:214;;;;:::o;6821:329::-;6880:6;6929:2;6917:9;6908:7;6904:23;6900:32;6897:119;;;6935:79;;:::i;:::-;6897:119;7055:1;7080:53;7125:7;7116:6;7105:9;7101:22;7080:53;:::i;:::-;7070:63;;7026:117;6821:329;;;;:::o;7156:::-;7215:6;7264:2;7252:9;7243:7;7239:23;7235:32;7232:119;;;7270:79;;:::i;:::-;7232:119;7390:1;7415:53;7460:7;7451:6;7440:9;7436:22;7415:53;:::i;:::-;7405:63;;7361:117;7156:329;;;;:::o;7491:104::-;7536:7;7565:24;7583:5;7565:24;:::i;:::-;7554:35;;7491:104;;;:::o;7601:142::-;7704:32;7730:5;7704:32;:::i;:::-;7699:3;7692:45;7601:142;;:::o;7749:254::-;7858:4;7896:2;7885:9;7881:18;7873:26;;7909:87;7993:1;7982:9;7978:17;7969:6;7909:87;:::i;:::-;7749:254;;;;:::o;8009:468::-;8074:6;8082;8131:2;8119:9;8110:7;8106:23;8102:32;8099:119;;;8137:79;;:::i;:::-;8099:119;8257:1;8282:53;8327:7;8318:6;8307:9;8303:22;8282:53;:::i;:::-;8272:63;;8228:117;8384:2;8410:50;8452:7;8443:6;8432:9;8428:22;8410:50;:::i;:::-;8400:60;;8355:115;8009:468;;;;;:::o;8483:474::-;8551:6;8559;8608:2;8596:9;8587:7;8583:23;8579:32;8576:119;;;8614:79;;:::i;:::-;8576:119;8734:1;8759:53;8804:7;8795:6;8784:9;8780:22;8759:53;:::i;:::-;8749:63;;8705:117;8861:2;8887:53;8932:7;8923:6;8912:9;8908:22;8887:53;:::i;:::-;8877:63;;8832:118;8483:474;;;;;:::o;8963:180::-;9011:77;9008:1;9001:88;9108:4;9105:1;9098:15;9132:4;9129:1;9122:15;9149:320;9193:6;9230:1;9224:4;9220:12;9210:22;;9277:1;9271:4;9267:12;9298:18;9288:81;;9354:4;9346:6;9342:17;9332:27;;9288:81;9416:2;9408:6;9405:14;9385:18;9382:38;9379:84;;9435:18;;:::i;:::-;9379:84;9200:269;9149:320;;;:::o;9475:227::-;9615:34;9611:1;9603:6;9599:14;9592:58;9684:10;9679:2;9671:6;9667:15;9660:35;9475:227;:::o;9708:366::-;9850:3;9871:67;9935:2;9930:3;9871:67;:::i;:::-;9864:74;;9947:93;10036:3;9947:93;:::i;:::-;10065:2;10060:3;10056:12;10049:19;;9708:366;;;:::o;10080:419::-;10246:4;10284:2;10273:9;10269:18;10261:26;;10333:9;10327:4;10323:20;10319:1;10308:9;10304:17;10297:47;10361:131;10487:4;10361:131;:::i;:::-;10353:139;;10080:419;;;:::o;10505:182::-;10645:34;10641:1;10633:6;10629:14;10622:58;10505:182;:::o;10693:366::-;10835:3;10856:67;10920:2;10915:3;10856:67;:::i;:::-;10849:74;;10932:93;11021:3;10932:93;:::i;:::-;11050:2;11045:3;11041:12;11034:19;;10693:366;;;:::o;11065:419::-;11231:4;11269:2;11258:9;11254:18;11246:26;;11318:9;11312:4;11308:20;11304:1;11293:9;11289:17;11282:47;11346:131;11472:4;11346:131;:::i;:::-;11338:139;;11065:419;;;:::o;11490:180::-;11538:77;11535:1;11528:88;11635:4;11632:1;11625:15;11659:4;11656:1;11649:15;11676:305;11716:3;11735:20;11753:1;11735:20;:::i;:::-;11730:25;;11769:20;11787:1;11769:20;:::i;:::-;11764:25;;11923:1;11855:66;11851:74;11848:1;11845:81;11842:107;;;11929:18;;:::i;:::-;11842:107;11973:1;11970;11966:9;11959:16;;11676:305;;;;:::o;11987:166::-;12127:18;12123:1;12115:6;12111:14;12104:42;11987:166;:::o;12159:366::-;12301:3;12322:67;12386:2;12381:3;12322:67;:::i;:::-;12315:74;;12398:93;12487:3;12398:93;:::i;:::-;12516:2;12511:3;12507:12;12500:19;;12159:366;;;:::o;12531:419::-;12697:4;12735:2;12724:9;12720:18;12712:26;;12784:9;12778:4;12774:20;12770:1;12759:9;12755:17;12748:47;12812:131;12938:4;12812:131;:::i;:::-;12804:139;;12531:419;;;:::o;12956:231::-;13096:34;13092:1;13084:6;13080:14;13073:58;13165:14;13160:2;13152:6;13148:15;13141:39;12956:231;:::o;13193:366::-;13335:3;13356:67;13420:2;13415:3;13356:67;:::i;:::-;13349:74;;13432:93;13521:3;13432:93;:::i;:::-;13550:2;13545:3;13541:12;13534:19;;13193:366;;;:::o;13565:419::-;13731:4;13769:2;13758:9;13754:18;13746:26;;13818:9;13812:4;13808:20;13804:1;13793:9;13789:17;13782:47;13846:131;13972:4;13846:131;:::i;:::-;13838:139;;13565:419;;;:::o;13990:302::-;14130:34;14126:1;14118:6;14114:14;14107:58;14199:34;14194:2;14186:6;14182:15;14175:59;14268:16;14263:2;14255:6;14251:15;14244:41;13990:302;:::o;14298:366::-;14440:3;14461:67;14525:2;14520:3;14461:67;:::i;:::-;14454:74;;14537:93;14626:3;14537:93;:::i;:::-;14655:2;14650:3;14646:12;14639:19;;14298:366;;;:::o;14670:419::-;14836:4;14874:2;14863:9;14859:18;14851:26;;14923:9;14917:4;14913:20;14909:1;14898:9;14894:17;14887:47;14951:131;15077:4;14951:131;:::i;:::-;14943:139;;14670:419;;;:::o;15095:224::-;15235:34;15231:1;15223:6;15219:14;15212:58;15304:7;15299:2;15291:6;15287:15;15280:32;15095:224;:::o;15325:366::-;15467:3;15488:67;15552:2;15547:3;15488:67;:::i;:::-;15481:74;;15564:93;15653:3;15564:93;:::i;:::-;15682:2;15677:3;15673:12;15666:19;;15325:366;;;:::o;15697:419::-;15863:4;15901:2;15890:9;15886:18;15878:26;;15950:9;15944:4;15940:20;15936:1;15925:9;15921:17;15914:47;15978:131;16104:4;15978:131;:::i;:::-;15970:139;;15697:419;;;:::o;16122:238::-;16262:34;16258:1;16250:6;16246:14;16239:58;16331:21;16326:2;16318:6;16314:15;16307:46;16122:238;:::o;16366:366::-;16508:3;16529:67;16593:2;16588:3;16529:67;:::i;:::-;16522:74;;16605:93;16694:3;16605:93;:::i;:::-;16723:2;16718:3;16714:12;16707:19;;16366:366;;;:::o;16738:419::-;16904:4;16942:2;16931:9;16927:18;16919:26;;16991:9;16985:4;16981:20;16977:1;16966:9;16962:17;16955:47;17019:131;17145:4;17019:131;:::i;:::-;17011:139;;16738:419;;;:::o;17163:225::-;17303:34;17299:1;17291:6;17287:14;17280:58;17372:8;17367:2;17359:6;17355:15;17348:33;17163:225;:::o;17394:366::-;17536:3;17557:67;17621:2;17616:3;17557:67;:::i;:::-;17550:74;;17633:93;17722:3;17633:93;:::i;:::-;17751:2;17746:3;17742:12;17735:19;;17394:366;;;:::o;17766:419::-;17932:4;17970:2;17959:9;17955:18;17947:26;;18019:9;18013:4;18009:20;18005:1;17994:9;17990:17;17983:47;18047:131;18173:4;18047:131;:::i;:::-;18039:139;;17766:419;;;:::o;18191:223::-;18331:34;18327:1;18319:6;18315:14;18308:58;18400:6;18395:2;18387:6;18383:15;18376:31;18191:223;:::o;18420:366::-;18562:3;18583:67;18647:2;18642:3;18583:67;:::i;:::-;18576:74;;18659:93;18748:3;18659:93;:::i;:::-;18777:2;18772:3;18768:12;18761:19;;18420:366;;;:::o;18792:419::-;18958:4;18996:2;18985:9;18981:18;18973:26;;19045:9;19039:4;19035:20;19031:1;19020:9;19016:17;19009:47;19073:131;19199:4;19073:131;:::i;:::-;19065:139;;18792:419;;;:::o;19217:221::-;19357:34;19353:1;19345:6;19341:14;19334:58;19426:4;19421:2;19413:6;19409:15;19402:29;19217:221;:::o;19444:366::-;19586:3;19607:67;19671:2;19666:3;19607:67;:::i;:::-;19600:74;;19683:93;19772:3;19683:93;:::i;:::-;19801:2;19796:3;19792:12;19785:19;;19444:366;;;:::o;19816:419::-;19982:4;20020:2;20009:9;20005:18;19997:26;;20069:9;20063:4;20059:20;20055:1;20044:9;20040:17;20033:47;20097:131;20223:4;20097:131;:::i;:::-;20089:139;;19816:419;;;:::o;20241:224::-;20381:34;20377:1;20369:6;20365:14;20358:58;20450:7;20445:2;20437:6;20433:15;20426:32;20241:224;:::o;20471:366::-;20613:3;20634:67;20698:2;20693:3;20634:67;:::i;:::-;20627:74;;20710:93;20799:3;20710:93;:::i;:::-;20828:2;20823:3;20819:12;20812:19;;20471:366;;;:::o;20843:419::-;21009:4;21047:2;21036:9;21032:18;21024:26;;21096:9;21090:4;21086:20;21082:1;21071:9;21067:17;21060:47;21124:131;21250:4;21124:131;:::i;:::-;21116:139;;20843:419;;;:::o;21268:222::-;21408:34;21404:1;21396:6;21392:14;21385:58;21477:5;21472:2;21464:6;21460:15;21453:30;21268:222;:::o;21496:366::-;21638:3;21659:67;21723:2;21718:3;21659:67;:::i;:::-;21652:74;;21735:93;21824:3;21735:93;:::i;:::-;21853:2;21848:3;21844:12;21837:19;;21496:366;;;:::o;21868:419::-;22034:4;22072:2;22061:9;22057:18;22049:26;;22121:9;22115:4;22111:20;22107:1;22096:9;22092:17;22085:47;22149:131;22275:4;22149:131;:::i;:::-;22141:139;;21868:419;;;:::o;22293:230::-;22433:34;22429:1;22421:6;22417:14;22410:58;22502:13;22497:2;22489:6;22485:15;22478:38;22293:230;:::o;22529:366::-;22671:3;22692:67;22756:2;22751:3;22692:67;:::i;:::-;22685:74;;22768:93;22857:3;22768:93;:::i;:::-;22886:2;22881:3;22877:12;22870:19;;22529:366;;;:::o;22901:419::-;23067:4;23105:2;23094:9;23090:18;23082:26;;23154:9;23148:4;23144:20;23140:1;23129:9;23125:17;23118:47;23182:131;23308:4;23182:131;:::i;:::-;23174:139;;22901:419;;;:::o;23326:231::-;23466:34;23462:1;23454:6;23450:14;23443:58;23535:14;23530:2;23522:6;23518:15;23511:39;23326:231;:::o;23563:366::-;23705:3;23726:67;23790:2;23785:3;23726:67;:::i;:::-;23719:74;;23802:93;23891:3;23802:93;:::i;:::-;23920:2;23915:3;23911:12;23904:19;;23563:366;;;:::o;23935:419::-;24101:4;24139:2;24128:9;24124:18;24116:26;;24188:9;24182:4;24178:20;24174:1;24163:9;24159:17;24152:47;24216:131;24342:4;24216:131;:::i;:::-;24208:139;;23935:419;;;:::o;24360:180::-;24408:77;24405:1;24398:88;24505:4;24502:1;24495:15;24529:4;24526:1;24519:15;24546:185;24586:1;24603:20;24621:1;24603:20;:::i;:::-;24598:25;;24637:20;24655:1;24637:20;:::i;:::-;24632:25;;24676:1;24666:35;;24681:18;;:::i;:::-;24666:35;24723:1;24720;24716:9;24711:14;;24546:185;;;;:::o;24737:289::-;24877:34;24873:1;24865:6;24861:14;24854:58;24946:34;24941:2;24933:6;24929:15;24922:59;25015:3;25010:2;25002:6;24998:15;24991:28;24737:289;:::o;25032:366::-;25174:3;25195:67;25259:2;25254:3;25195:67;:::i;:::-;25188:74;;25271:93;25360:3;25271:93;:::i;:::-;25389:2;25384:3;25380:12;25373:19;;25032:366;;;:::o;25404:419::-;25570:4;25608:2;25597:9;25593:18;25585:26;;25657:9;25651:4;25647:20;25643:1;25632:9;25628:17;25621:47;25685:131;25811:4;25685:131;:::i;:::-;25677:139;;25404:419;;;:::o;25829:225::-;25969:34;25965:1;25957:6;25953:14;25946:58;26038:8;26033:2;26025:6;26021:15;26014:33;25829:225;:::o;26060:366::-;26202:3;26223:67;26287:2;26282:3;26223:67;:::i;:::-;26216:74;;26299:93;26388:3;26299:93;:::i;:::-;26417:2;26412:3;26408:12;26401:19;;26060:366;;;:::o;26432:419::-;26598:4;26636:2;26625:9;26621:18;26613:26;;26685:9;26679:4;26675:20;26671:1;26660:9;26656:17;26649:47;26713:131;26839:4;26713:131;:::i;:::-;26705:139;;26432:419;;;:::o;26857:332::-;26978:4;27016:2;27005:9;27001:18;26993:26;;27029:71;27097:1;27086:9;27082:17;27073:6;27029:71;:::i;:::-;27110:72;27178:2;27167:9;27163:18;27154:6;27110:72;:::i;:::-;26857:332;;;;;:::o;27195:348::-;27235:7;27258:20;27276:1;27258:20;:::i;:::-;27253:25;;27292:20;27310:1;27292:20;:::i;:::-;27287:25;;27480:1;27412:66;27408:74;27405:1;27402:81;27397:1;27390:9;27383:17;27379:105;27376:131;;;27487:18;;:::i;:::-;27376:131;27535:1;27532;27528:9;27517:20;;27195:348;;;;:::o;27549:191::-;27589:4;27609:20;27627:1;27609:20;:::i;:::-;27604:25;;27643:20;27661:1;27643:20;:::i;:::-;27638:25;;27682:1;27679;27676:8;27673:34;;;27687:18;;:::i;:::-;27673:34;27732:1;27729;27725:9;27717:17;;27549:191;;;;:::o;27746:180::-;27794:77;27791:1;27784:88;27891:4;27888:1;27881:15;27915:4;27912:1;27905:15;27932:180;27980:77;27977:1;27970:88;28077:4;28074:1;28067:15;28101:4;28098:1;28091:15;28118:143;28175:5;28206:6;28200:13;28191:22;;28222:33;28249:5;28222:33;:::i;:::-;28118:143;;;;:::o;28267:351::-;28337:6;28386:2;28374:9;28365:7;28361:23;28357:32;28354:119;;;28392:79;;:::i;:::-;28354:119;28512:1;28537:64;28593:7;28584:6;28573:9;28569:22;28537:64;:::i;:::-;28527:74;;28483:128;28267:351;;;;:::o;28624:85::-;28669:7;28698:5;28687:16;;28624:85;;;:::o;28715:158::-;28773:9;28806:61;28824:42;28833:32;28859:5;28833:32;:::i;:::-;28824:42;:::i;:::-;28806:61;:::i;:::-;28793:74;;28715:158;;;:::o;28879:147::-;28974:45;29013:5;28974:45;:::i;:::-;28969:3;28962:58;28879:147;;:::o;29032:114::-;29099:6;29133:5;29127:12;29117:22;;29032:114;;;:::o;29152:184::-;29251:11;29285:6;29280:3;29273:19;29325:4;29320:3;29316:14;29301:29;;29152:184;;;;:::o;29342:132::-;29409:4;29432:3;29424:11;;29462:4;29457:3;29453:14;29445:22;;29342:132;;;:::o;29480:108::-;29557:24;29575:5;29557:24;:::i;:::-;29552:3;29545:37;29480:108;;:::o;29594:179::-;29663:10;29684:46;29726:3;29718:6;29684:46;:::i;:::-;29762:4;29757:3;29753:14;29739:28;;29594:179;;;;:::o;29779:113::-;29849:4;29881;29876:3;29872:14;29864:22;;29779:113;;;:::o;29928:732::-;30047:3;30076:54;30124:5;30076:54;:::i;:::-;30146:86;30225:6;30220:3;30146:86;:::i;:::-;30139:93;;30256:56;30306:5;30256:56;:::i;:::-;30335:7;30366:1;30351:284;30376:6;30373:1;30370:13;30351:284;;;30452:6;30446:13;30479:63;30538:3;30523:13;30479:63;:::i;:::-;30472:70;;30565:60;30618:6;30565:60;:::i;:::-;30555:70;;30411:224;30398:1;30395;30391:9;30386:14;;30351:284;;;30355:14;30651:3;30644:10;;30052:608;;;29928:732;;;;:::o;30666:831::-;30929:4;30967:3;30956:9;30952:19;30944:27;;30981:71;31049:1;31038:9;31034:17;31025:6;30981:71;:::i;:::-;31062:80;31138:2;31127:9;31123:18;31114:6;31062:80;:::i;:::-;31189:9;31183:4;31179:20;31174:2;31163:9;31159:18;31152:48;31217:108;31320:4;31311:6;31217:108;:::i;:::-;31209:116;;31335:72;31403:2;31392:9;31388:18;31379:6;31335:72;:::i;:::-;31417:73;31485:3;31474:9;31470:19;31461:6;31417:73;:::i;:::-;30666:831;;;;;;;;:::o;31503:807::-;31752:4;31790:3;31779:9;31775:19;31767:27;;31804:71;31872:1;31861:9;31857:17;31848:6;31804:71;:::i;:::-;31885:72;31953:2;31942:9;31938:18;31929:6;31885:72;:::i;:::-;31967:80;32043:2;32032:9;32028:18;32019:6;31967:80;:::i;:::-;32057;32133:2;32122:9;32118:18;32109:6;32057:80;:::i;:::-;32147:73;32215:3;32204:9;32200:19;32191:6;32147:73;:::i;:::-;32230;32298:3;32287:9;32283:19;32274:6;32230:73;:::i;:::-;31503:807;;;;;;;;;:::o;32316:143::-;32373:5;32404:6;32398:13;32389:22;;32420:33;32447:5;32420:33;:::i;:::-;32316:143;;;;:::o;32465:663::-;32553:6;32561;32569;32618:2;32606:9;32597:7;32593:23;32589:32;32586:119;;;32624:79;;:::i;:::-;32586:119;32744:1;32769:64;32825:7;32816:6;32805:9;32801:22;32769:64;:::i;:::-;32759:74;;32715:128;32882:2;32908:64;32964:7;32955:6;32944:9;32940:22;32908:64;:::i;:::-;32898:74;;32853:129;33021:2;33047:64;33103:7;33094:6;33083:9;33079:22;33047:64;:::i;:::-;33037:74;;32992:129;32465:663;;;;;:::o;33134:720::-;33369:4;33407:3;33396:9;33392:19;33384:27;;33421:79;33497:1;33486:9;33482:17;33473:6;33421:79;:::i;:::-;33547:9;33541:4;33537:20;33532:2;33521:9;33517:18;33510:48;33575:108;33678:4;33669:6;33575:108;:::i;:::-;33567:116;;33693:72;33761:2;33750:9;33746:18;33737:6;33693:72;:::i;:::-;33775;33843:2;33832:9;33828:18;33819:6;33775:72;:::i;:::-;33134:720;;;;;;;:::o;33860:483::-;34031:4;34069:2;34058:9;34054:18;34046:26;;34082:71;34150:1;34139:9;34135:17;34126:6;34082:71;:::i;:::-;34200:9;34194:4;34190:20;34185:2;34174:9;34170:18;34163:48;34228:108;34331:4;34322:6;34228:108;:::i;:::-;34220:116;;33860:483;;;;;:::o
Swarm Source
ipfs://0fc2ac90ab6a39252602aef314d7f5bb98cc8dfe25e8ca46f390ee1571bb8baf
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.