Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 AMELIA
Holders
5
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
29,553.815932687259466793 AMELIAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AMELIA
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-23 */ /** *Submitted for verification at Etherscan.io on 2022-08-03 */ /** *Submitted for verification at Etherscan.io on 2022-08-02 */ /** *Submitted for verification at Etherscan.io on 2022-08-02 */ // A PROJECT BY A FEMALE DEV // #RESPECT_WOMEN_DEVS // O/0 TAX FREE TOKEN /** *Submitted for verification at Etherscan.io on 2022-07-31 */ /** *Submitted for verification at Etherscan.io on 2022-07-31 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.15; /** * @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); } 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 Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. * 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 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); 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 _createSupply(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 AMELIA is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public maxTransactionAmount = 1000000000 * (10**18); uint256 public swapTokensAtAmount = 300000 * (10**18); uint256 public liquidityFee = 1; uint256 public marketingFee = 1; address payable public marketingWallet = payable(0x4246B81b9Dbc82a39e58a24D3c603e96386cC973); // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; event ExcludeFromFees(address indexed account, bool isExcluded); 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(address _owner) ERC20("AMELIA", "AMELIA") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; // exclude from paying fees or having max transaction amount excludeFromFees(_owner, true); excludeFromFees(marketingWallet, true); excludeFromFees(address(this), true); /* an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _createSupply(_owner, 1000000000 * (10**18)); } 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(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]){ require(amount <= maxTransactionAmount, "amount exceeds the maxTransactionAmount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if( overMinTokenBalance && !inSwapAndLiquify && to == uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = swapTokensAtAmount; swapAndLiquify(contractTokenBalance); } // if any account belongs to _isExcludedFromFee account then remove the fee if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { uint256 fees = amount.mul(liquidityFee.add(marketingFee)).div(100); amount = amount.sub(fees); if (fees > 0) { super._transfer(from, address(this), fees); } } super._transfer(from, to, amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 tokensForLiquidity = contractTokenBalance.mul(liquidityFee).div(liquidityFee.add(marketingFee)); // 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 to Marketing address swapTokensForEth(contractTokenBalance.sub(tokensForLiquidity)); marketingWallet.transfer(address(this).balance); 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 setFee(uint256 _liquidityFee, uint256 _marketingFee) public onlyOwner { require(_liquidityFee.add(_marketingFee) <= 10, "tax too high"); liquidityFee = _liquidityFee; marketingFee = _marketingFee; } function setMaxTransaction(uint256 _maxTxAmount) public onlyOwner { maxTransactionAmount = _maxTxAmount; require(maxTransactionAmount >= totalSupply().div(300), "value too high"); } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } receive() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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":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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","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":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"setMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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":"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526001600660156101000a81548160ff0219169083151502179055506b033b2e3c9fd0803ce8000000600755693f870857a3e0e380000060085560016009556001600a55734246b81b9dbc82a39e58a24d3c603e96386cc973600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000a957600080fd5b5060405162004041380380620040418339818101604052810190620000cf9190620008ad565b6040518060400160405280600681526020017f414d454c494100000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f414d454c4941000000000000000000000000000000000000000000000000000081525081600390816200014c919062000b59565b5080600490816200015e919062000b59565b5050506200018162000175620003fa60201b60201c565b6200040260201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020e9190620008ad565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000276573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029c9190620008ad565b6040518363ffffffff1660e01b8152600401620002bb92919062000c51565b6020604051808303816000875af1158015620002db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003019190620008ad565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200038b836001620004c860201b60201c565b620003c0600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004c860201b60201c565b620003d3306001620004c860201b60201c565b620003f1836b033b2e3c9fd0803ce80000006200069760201b60201c565b50505062000eff565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004d8620003fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004fe6200080f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000557576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054e9062000cdf565b60405180910390fd5b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620005ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005e39062000d77565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200068b919062000db6565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000709576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007009062000e23565b60405180910390fd5b6200071d600083836200083960201b60201c565b806002600082825462000731919062000e74565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000788919062000e74565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007ef919062000ee2565b60405180910390a36200080b600083836200083e60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008758262000848565b9050919050565b620008878162000868565b81146200089357600080fd5b50565b600081519050620008a7816200087c565b92915050565b600060208284031215620008c657620008c562000843565b5b6000620008d68482850162000896565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200096157607f821691505b60208210810362000977576200097662000919565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009a2565b620009ed8683620009a2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a3a62000a3462000a2e8462000a05565b62000a0f565b62000a05565b9050919050565b6000819050919050565b62000a568362000a19565b62000a6e62000a658262000a41565b848454620009af565b825550505050565b600090565b62000a8562000a76565b62000a9281848462000a4b565b505050565b5b8181101562000aba5762000aae60008262000a7b565b60018101905062000a98565b5050565b601f82111562000b095762000ad3816200097d565b62000ade8462000992565b8101602085101562000aee578190505b62000b0662000afd8562000992565b83018262000a97565b50505b505050565b600082821c905092915050565b600062000b2e6000198460080262000b0e565b1980831691505092915050565b600062000b49838362000b1b565b9150826002028217905092915050565b62000b6482620008df565b67ffffffffffffffff81111562000b805762000b7f620008ea565b5b62000b8c825462000948565b62000b9982828562000abe565b600060209050601f83116001811462000bd1576000841562000bbc578287015190505b62000bc8858262000b3b565b86555062000c38565b601f19841662000be1866200097d565b60005b8281101562000c0b5784890151825560018201915060208501945060208101905062000be4565b8683101562000c2b578489015162000c27601f89168262000b1b565b8355505b6001600288020188555050505b505050505050565b62000c4b8162000868565b82525050565b600060408201905062000c68600083018562000c40565b62000c77602083018462000c40565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000cc760208362000c7e565b915062000cd48262000c8f565b602082019050919050565b6000602082019050818103600083015262000cfa8162000cb8565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062000d5f602a8362000c7e565b915062000d6c8262000d01565b604082019050919050565b6000602082019050818103600083015262000d928162000d50565b9050919050565b60008115159050919050565b62000db08162000d99565b82525050565b600060208201905062000dcd600083018462000da5565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e0b601f8362000c7e565b915062000e188262000dd3565b602082019050919050565b6000602082019050818103600083015262000e3e8162000dfc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e818262000a05565b915062000e8e8362000a05565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ec65762000ec562000e45565b5b828201905092915050565b62000edc8162000a05565b82525050565b600060208201905062000ef9600083018462000ed1565b92915050565b60805161311f62000f22600039600081816109360152611654015261311f6000f3fe6080604052600436106101a05760003560e01c8063715018a6116100ec578063ab5a18871161008a578063c8c8ebe411610064578063c8c8ebe4146105eb578063dd62ed3e14610616578063e2f4560514610653578063f2fde38b1461067e576101a7565b8063ab5a188714610570578063c024666814610599578063c49b9a80146105c2576101a7565b806395d89b41116100c657806395d89b41146104a057806398118cb4146104cb578063a457c2d7146104f6578063a9059cbb14610533576101a7565b8063715018a61461043357806375f0a8741461044a5780638da5cb5b14610475576101a7565b806339509351116101595780634fbee193116101335780634fbee1931461036557806352f7c988146103a25780636b67c4df146103cb57806370a08231146103f6576101a7565b806339509351146102d257806349bd5a5e1461030f5780634a74bb021461033a576101a7565b806306fdde03146101ac578063095ea7b3146101d75780631694505e1461021457806318160ddd1461023f57806323b872dd1461026a578063313ce567146102a7576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c16106a7565b6040516101ce9190612101565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f991906121bc565b610739565b60405161020b9190612217565b60405180910390f35b34801561022057600080fd5b50610229610757565b6040516102369190612291565b60405180910390f35b34801561024b57600080fd5b5061025461077d565b60405161026191906122bb565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c91906122d6565b610787565b60405161029e9190612217565b60405180910390f35b3480156102b357600080fd5b506102bc61087f565b6040516102c99190612345565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f491906121bc565b610888565b6040516103069190612217565b60405180910390f35b34801561031b57600080fd5b50610324610934565b604051610331919061236f565b60405180910390f35b34801561034657600080fd5b5061034f610958565b60405161035c9190612217565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061238a565b61096b565b6040516103999190612217565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906123b7565b6109c1565b005b3480156103d757600080fd5b506103e0610aa5565b6040516103ed91906122bb565b60405180910390f35b34801561040257600080fd5b5061041d6004803603810190610418919061238a565b610aab565b60405161042a91906122bb565b60405180910390f35b34801561043f57600080fd5b50610448610af3565b005b34801561045657600080fd5b5061045f610b7b565b60405161046c9190612418565b60405180910390f35b34801561048157600080fd5b5061048a610ba1565b604051610497919061236f565b60405180910390f35b3480156104ac57600080fd5b506104b5610bcb565b6040516104c29190612101565b60405180910390f35b3480156104d757600080fd5b506104e0610c5d565b6040516104ed91906122bb565b60405180910390f35b34801561050257600080fd5b5061051d600480360381019061051891906121bc565b610c63565b60405161052a9190612217565b60405180910390f35b34801561053f57600080fd5b5061055a600480360381019061055591906121bc565b610d4e565b6040516105679190612217565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190612433565b610d6c565b005b3480156105a557600080fd5b506105c060048036038101906105bb919061248c565b610e52565b005b3480156105ce57600080fd5b506105e960048036038101906105e491906124cc565b611009565b005b3480156105f757600080fd5b506106006110d9565b60405161060d91906122bb565b60405180910390f35b34801561062257600080fd5b5061063d600480360381019061063891906124f9565b6110df565b60405161064a91906122bb565b60405180910390f35b34801561065f57600080fd5b50610668611166565b60405161067591906122bb565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a0919061238a565b61116c565b005b6060600380546106b690612568565b80601f01602080910402602001604051908101604052809291908181526020018280546106e290612568565b801561072f5780601f106107045761010080835404028352916020019161072f565b820191906000526020600020905b81548152906001019060200180831161071257829003601f168201915b5050505050905090565b600061074d610746611263565b848461126b565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610794848484611434565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107df611263565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561085f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108569061260b565b60405180910390fd5b6108738561086b611263565b85840361126b565b60019150509392505050565b60006012905090565b600061092a610895611263565b8484600160006108a3611263565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610925919061265a565b61126b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660159054906101000a900460ff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6109c9611263565b73ffffffffffffffffffffffffffffffffffffffff166109e7610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a34906126fc565b60405180910390fd5b600a610a5282846117f690919063ffffffff16565b1115610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90612768565b60405180910390fd5b8160098190555080600a819055505050565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610afb611263565b73ffffffffffffffffffffffffffffffffffffffff16610b19610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b66906126fc565b60405180910390fd5b610b79600061180c565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610bda90612568565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0690612568565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b5050505050905090565b60095481565b60008060016000610c72611263565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d26906127fa565b60405180910390fd5b610d43610d3a611263565b8585840361126b565b600191505092915050565b6000610d62610d5b611263565b8484611434565b6001905092915050565b610d74611263565b73ffffffffffffffffffffffffffffffffffffffff16610d92610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf906126fc565b60405180910390fd5b80600781905550610e0b61012c610dfd61077d565b6118d290919063ffffffff16565b6007541015610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690612866565b60405180910390fd5b50565b610e5a611263565b73ffffffffffffffffffffffffffffffffffffffff16610e78610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec5906126fc565b60405180910390fd5b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f57906128f8565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610ffd9190612217565b60405180910390a25050565b611011611263565b73ffffffffffffffffffffffffffffffffffffffff1661102f610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c906126fc565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516110ce9190612217565b60405180910390a150565b60075481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b611174611263565b73ffffffffffffffffffffffffffffffffffffffff16611192610ba1565b73ffffffffffffffffffffffffffffffffffffffff16146111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df906126fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e9061298a565b60405180910390fd5b6112608161180c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d190612a1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134090612aae565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161142791906122bb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a90612b40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990612bd2565b60405180910390fd5b6000810361152b57611526838360006118e8565b6117f1565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156115cf5750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561161a57600754811115611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090612c64565b60405180910390fd5b5b600061162530610aab565b90506000600854821015905080801561164b5750600660149054906101000a900460ff16155b80156116a257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156116ba5750600660159054906101000a900460ff165b156116ce5760085491506116cd82611b67565b5b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117725750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156117e35760006117b560646117a7611798600a546009546117f690919063ffffffff16565b87611d0190919063ffffffff16565b6118d290919063ffffffff16565b90506117ca8185611d1790919063ffffffff16565b935060008111156117e1576117e08630836118e8565b5b505b6117ee8585856118e8565b50505b505050565b60008183611804919061265a565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836118e09190612cb3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90612b40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bd90612bd2565b60405180910390fd5b6119d1838383611d2d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90612d56565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aea919061265a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b4e91906122bb565b60405180910390a3611b61848484611d32565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000611bc1611b9e600a546009546117f690919063ffffffff16565b611bb360095485611d0190919063ffffffff16565b6118d290919063ffffffff16565b90506000611bd96002836118d290919063ffffffff16565b90506000611bf08284611d1790919063ffffffff16565b90506000479050611c0083611d37565b6000611c158247611d1790919063ffffffff16565b9050611c218382611fb0565b611c3c611c378688611d1790919063ffffffff16565b611d37565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611ca4573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868482604051611cd6929190612d76565b60405180910390a150505050506000600660146101000a81548160ff02191690831515021790555050565b60008183611d0f9190612d9f565b905092915050565b60008183611d259190612df9565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115611d5457611d53612e2d565b5b604051908082528060200260200182016040528015611d825781602001602082028036833780820191505090505b5090503081600081518110611d9a57611d99612e5c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e659190612ea0565b81600181518110611e7957611e78612e5c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081611ee030600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110df565b1015611f1657611f1530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660001961126b565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611f7a959493929190612fc6565b600060405180830381600087803b158015611f9457600080fd5b505af1158015611fa8573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611ffc610ba1565b426040518863ffffffff1660e01b815260040161201e96959493929190613020565b60606040518083038185885af115801561203c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120619190613096565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156120a2578082015181840152602081019050612087565b838111156120b1576000848401525b50505050565b6000601f19601f8301169050919050565b60006120d382612068565b6120dd8185612073565b93506120ed818560208601612084565b6120f6816120b7565b840191505092915050565b6000602082019050818103600083015261211b81846120c8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061215382612128565b9050919050565b61216381612148565b811461216e57600080fd5b50565b6000813590506121808161215a565b92915050565b6000819050919050565b61219981612186565b81146121a457600080fd5b50565b6000813590506121b681612190565b92915050565b600080604083850312156121d3576121d2612123565b5b60006121e185828601612171565b92505060206121f2858286016121a7565b9150509250929050565b60008115159050919050565b612211816121fc565b82525050565b600060208201905061222c6000830184612208565b92915050565b6000819050919050565b600061225761225261224d84612128565b612232565b612128565b9050919050565b60006122698261223c565b9050919050565b600061227b8261225e565b9050919050565b61228b81612270565b82525050565b60006020820190506122a66000830184612282565b92915050565b6122b581612186565b82525050565b60006020820190506122d060008301846122ac565b92915050565b6000806000606084860312156122ef576122ee612123565b5b60006122fd86828701612171565b935050602061230e86828701612171565b925050604061231f868287016121a7565b9150509250925092565b600060ff82169050919050565b61233f81612329565b82525050565b600060208201905061235a6000830184612336565b92915050565b61236981612148565b82525050565b60006020820190506123846000830184612360565b92915050565b6000602082840312156123a05761239f612123565b5b60006123ae84828501612171565b91505092915050565b600080604083850312156123ce576123cd612123565b5b60006123dc858286016121a7565b92505060206123ed858286016121a7565b9150509250929050565b600061240282612128565b9050919050565b612412816123f7565b82525050565b600060208201905061242d6000830184612409565b92915050565b60006020828403121561244957612448612123565b5b6000612457848285016121a7565b91505092915050565b612469816121fc565b811461247457600080fd5b50565b60008135905061248681612460565b92915050565b600080604083850312156124a3576124a2612123565b5b60006124b185828601612171565b92505060206124c285828601612477565b9150509250929050565b6000602082840312156124e2576124e1612123565b5b60006124f084828501612477565b91505092915050565b600080604083850312156125105761250f612123565b5b600061251e85828601612171565b925050602061252f85828601612171565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061258057607f821691505b60208210810361259357612592612539565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006125f5602883612073565b915061260082612599565b604082019050919050565b60006020820190508181036000830152612624816125e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061266582612186565b915061267083612186565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126a5576126a461262b565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006126e6602083612073565b91506126f1826126b0565b602082019050919050565b60006020820190508181036000830152612715816126d9565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000612752600c83612073565b915061275d8261271c565b602082019050919050565b6000602082019050818103600083015261278181612745565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006127e4602583612073565b91506127ef82612788565b604082019050919050565b60006020820190508181036000830152612813816127d7565b9050919050565b7f76616c756520746f6f2068696768000000000000000000000000000000000000600082015250565b6000612850600e83612073565b915061285b8261281a565b602082019050919050565b6000602082019050818103600083015261287f81612843565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006128e2602a83612073565b91506128ed82612886565b604082019050919050565b60006020820190508181036000830152612911816128d5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612974602683612073565b915061297f82612918565b604082019050919050565b600060208201905081810360008301526129a381612967565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a06602483612073565b9150612a11826129aa565b604082019050919050565b60006020820190508181036000830152612a35816129f9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a98602283612073565b9150612aa382612a3c565b604082019050919050565b60006020820190508181036000830152612ac781612a8b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b2a602583612073565b9150612b3582612ace565b604082019050919050565b60006020820190508181036000830152612b5981612b1d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612bbc602383612073565b9150612bc782612b60565b604082019050919050565b60006020820190508181036000830152612beb81612baf565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000612c4e602883612073565b9150612c5982612bf2565b604082019050919050565b60006020820190508181036000830152612c7d81612c41565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612cbe82612186565b9150612cc983612186565b925082612cd957612cd8612c84565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612d40602683612073565b9150612d4b82612ce4565b604082019050919050565b60006020820190508181036000830152612d6f81612d33565b9050919050565b6000604082019050612d8b60008301856122ac565b612d9860208301846122ac565b9392505050565b6000612daa82612186565b9150612db583612186565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612dee57612ded61262b565b5b828202905092915050565b6000612e0482612186565b9150612e0f83612186565b925082821015612e2257612e2161262b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612e9a8161215a565b92915050565b600060208284031215612eb657612eb5612123565b5b6000612ec484828501612e8b565b91505092915050565b6000819050919050565b6000612ef2612eed612ee884612ecd565b612232565b612186565b9050919050565b612f0281612ed7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f3d81612148565b82525050565b6000612f4f8383612f34565b60208301905092915050565b6000602082019050919050565b6000612f7382612f08565b612f7d8185612f13565b9350612f8883612f24565b8060005b83811015612fb9578151612fa08882612f43565b9750612fab83612f5b565b925050600181019050612f8c565b5085935050505092915050565b600060a082019050612fdb60008301886122ac565b612fe86020830187612ef9565b8181036040830152612ffa8186612f68565b90506130096060830185612360565b61301660808301846122ac565b9695505050505050565b600060c0820190506130356000830189612360565b61304260208301886122ac565b61304f6040830187612ef9565b61305c6060830186612ef9565b6130696080830185612360565b61307660a08301846122ac565b979650505050505050565b60008151905061309081612190565b92915050565b6000806000606084860312156130af576130ae612123565b5b60006130bd86828701613081565b93505060206130ce86828701613081565b92505060406130df86828701613081565b915050925092509256fea26469706673582212208cd660c1748c92880833c9f1b4b503df2f9b79d55c60c47f62a396c4cf607b5d64736f6c634300080f0033000000000000000000000000cffd1bfddf4b503e6dd38ee7463dd268573b6820
Deployed Bytecode
0x6080604052600436106101a05760003560e01c8063715018a6116100ec578063ab5a18871161008a578063c8c8ebe411610064578063c8c8ebe4146105eb578063dd62ed3e14610616578063e2f4560514610653578063f2fde38b1461067e576101a7565b8063ab5a188714610570578063c024666814610599578063c49b9a80146105c2576101a7565b806395d89b41116100c657806395d89b41146104a057806398118cb4146104cb578063a457c2d7146104f6578063a9059cbb14610533576101a7565b8063715018a61461043357806375f0a8741461044a5780638da5cb5b14610475576101a7565b806339509351116101595780634fbee193116101335780634fbee1931461036557806352f7c988146103a25780636b67c4df146103cb57806370a08231146103f6576101a7565b806339509351146102d257806349bd5a5e1461030f5780634a74bb021461033a576101a7565b806306fdde03146101ac578063095ea7b3146101d75780631694505e1461021457806318160ddd1461023f57806323b872dd1461026a578063313ce567146102a7576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c16106a7565b6040516101ce9190612101565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f991906121bc565b610739565b60405161020b9190612217565b60405180910390f35b34801561022057600080fd5b50610229610757565b6040516102369190612291565b60405180910390f35b34801561024b57600080fd5b5061025461077d565b60405161026191906122bb565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c91906122d6565b610787565b60405161029e9190612217565b60405180910390f35b3480156102b357600080fd5b506102bc61087f565b6040516102c99190612345565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f491906121bc565b610888565b6040516103069190612217565b60405180910390f35b34801561031b57600080fd5b50610324610934565b604051610331919061236f565b60405180910390f35b34801561034657600080fd5b5061034f610958565b60405161035c9190612217565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061238a565b61096b565b6040516103999190612217565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906123b7565b6109c1565b005b3480156103d757600080fd5b506103e0610aa5565b6040516103ed91906122bb565b60405180910390f35b34801561040257600080fd5b5061041d6004803603810190610418919061238a565b610aab565b60405161042a91906122bb565b60405180910390f35b34801561043f57600080fd5b50610448610af3565b005b34801561045657600080fd5b5061045f610b7b565b60405161046c9190612418565b60405180910390f35b34801561048157600080fd5b5061048a610ba1565b604051610497919061236f565b60405180910390f35b3480156104ac57600080fd5b506104b5610bcb565b6040516104c29190612101565b60405180910390f35b3480156104d757600080fd5b506104e0610c5d565b6040516104ed91906122bb565b60405180910390f35b34801561050257600080fd5b5061051d600480360381019061051891906121bc565b610c63565b60405161052a9190612217565b60405180910390f35b34801561053f57600080fd5b5061055a600480360381019061055591906121bc565b610d4e565b6040516105679190612217565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190612433565b610d6c565b005b3480156105a557600080fd5b506105c060048036038101906105bb919061248c565b610e52565b005b3480156105ce57600080fd5b506105e960048036038101906105e491906124cc565b611009565b005b3480156105f757600080fd5b506106006110d9565b60405161060d91906122bb565b60405180910390f35b34801561062257600080fd5b5061063d600480360381019061063891906124f9565b6110df565b60405161064a91906122bb565b60405180910390f35b34801561065f57600080fd5b50610668611166565b60405161067591906122bb565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a0919061238a565b61116c565b005b6060600380546106b690612568565b80601f01602080910402602001604051908101604052809291908181526020018280546106e290612568565b801561072f5780601f106107045761010080835404028352916020019161072f565b820191906000526020600020905b81548152906001019060200180831161071257829003601f168201915b5050505050905090565b600061074d610746611263565b848461126b565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610794848484611434565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107df611263565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561085f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108569061260b565b60405180910390fd5b6108738561086b611263565b85840361126b565b60019150509392505050565b60006012905090565b600061092a610895611263565b8484600160006108a3611263565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610925919061265a565b61126b565b6001905092915050565b7f000000000000000000000000885dad2217ef7d513c1e02ae4b3806dbb67ec81681565b600660159054906101000a900460ff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6109c9611263565b73ffffffffffffffffffffffffffffffffffffffff166109e7610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a34906126fc565b60405180910390fd5b600a610a5282846117f690919063ffffffff16565b1115610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90612768565b60405180910390fd5b8160098190555080600a819055505050565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610afb611263565b73ffffffffffffffffffffffffffffffffffffffff16610b19610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b66906126fc565b60405180910390fd5b610b79600061180c565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610bda90612568565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0690612568565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b5050505050905090565b60095481565b60008060016000610c72611263565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d26906127fa565b60405180910390fd5b610d43610d3a611263565b8585840361126b565b600191505092915050565b6000610d62610d5b611263565b8484611434565b6001905092915050565b610d74611263565b73ffffffffffffffffffffffffffffffffffffffff16610d92610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf906126fc565b60405180910390fd5b80600781905550610e0b61012c610dfd61077d565b6118d290919063ffffffff16565b6007541015610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690612866565b60405180910390fd5b50565b610e5a611263565b73ffffffffffffffffffffffffffffffffffffffff16610e78610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec5906126fc565b60405180910390fd5b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f57906128f8565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610ffd9190612217565b60405180910390a25050565b611011611263565b73ffffffffffffffffffffffffffffffffffffffff1661102f610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c906126fc565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516110ce9190612217565b60405180910390a150565b60075481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b611174611263565b73ffffffffffffffffffffffffffffffffffffffff16611192610ba1565b73ffffffffffffffffffffffffffffffffffffffff16146111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df906126fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e9061298a565b60405180910390fd5b6112608161180c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d190612a1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134090612aae565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161142791906122bb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a90612b40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990612bd2565b60405180910390fd5b6000810361152b57611526838360006118e8565b6117f1565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156115cf5750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561161a57600754811115611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090612c64565b60405180910390fd5b5b600061162530610aab565b90506000600854821015905080801561164b5750600660149054906101000a900460ff16155b80156116a257507f000000000000000000000000885dad2217ef7d513c1e02ae4b3806dbb67ec81673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156116ba5750600660159054906101000a900460ff165b156116ce5760085491506116cd82611b67565b5b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117725750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156117e35760006117b560646117a7611798600a546009546117f690919063ffffffff16565b87611d0190919063ffffffff16565b6118d290919063ffffffff16565b90506117ca8185611d1790919063ffffffff16565b935060008111156117e1576117e08630836118e8565b5b505b6117ee8585856118e8565b50505b505050565b60008183611804919061265a565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836118e09190612cb3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90612b40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bd90612bd2565b60405180910390fd5b6119d1838383611d2d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90612d56565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aea919061265a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b4e91906122bb565b60405180910390a3611b61848484611d32565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000611bc1611b9e600a546009546117f690919063ffffffff16565b611bb360095485611d0190919063ffffffff16565b6118d290919063ffffffff16565b90506000611bd96002836118d290919063ffffffff16565b90506000611bf08284611d1790919063ffffffff16565b90506000479050611c0083611d37565b6000611c158247611d1790919063ffffffff16565b9050611c218382611fb0565b611c3c611c378688611d1790919063ffffffff16565b611d37565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611ca4573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868482604051611cd6929190612d76565b60405180910390a150505050506000600660146101000a81548160ff02191690831515021790555050565b60008183611d0f9190612d9f565b905092915050565b60008183611d259190612df9565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115611d5457611d53612e2d565b5b604051908082528060200260200182016040528015611d825781602001602082028036833780820191505090505b5090503081600081518110611d9a57611d99612e5c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e659190612ea0565b81600181518110611e7957611e78612e5c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081611ee030600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110df565b1015611f1657611f1530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660001961126b565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611f7a959493929190612fc6565b600060405180830381600087803b158015611f9457600080fd5b505af1158015611fa8573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611ffc610ba1565b426040518863ffffffff1660e01b815260040161201e96959493929190613020565b60606040518083038185885af115801561203c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120619190613096565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156120a2578082015181840152602081019050612087565b838111156120b1576000848401525b50505050565b6000601f19601f8301169050919050565b60006120d382612068565b6120dd8185612073565b93506120ed818560208601612084565b6120f6816120b7565b840191505092915050565b6000602082019050818103600083015261211b81846120c8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061215382612128565b9050919050565b61216381612148565b811461216e57600080fd5b50565b6000813590506121808161215a565b92915050565b6000819050919050565b61219981612186565b81146121a457600080fd5b50565b6000813590506121b681612190565b92915050565b600080604083850312156121d3576121d2612123565b5b60006121e185828601612171565b92505060206121f2858286016121a7565b9150509250929050565b60008115159050919050565b612211816121fc565b82525050565b600060208201905061222c6000830184612208565b92915050565b6000819050919050565b600061225761225261224d84612128565b612232565b612128565b9050919050565b60006122698261223c565b9050919050565b600061227b8261225e565b9050919050565b61228b81612270565b82525050565b60006020820190506122a66000830184612282565b92915050565b6122b581612186565b82525050565b60006020820190506122d060008301846122ac565b92915050565b6000806000606084860312156122ef576122ee612123565b5b60006122fd86828701612171565b935050602061230e86828701612171565b925050604061231f868287016121a7565b9150509250925092565b600060ff82169050919050565b61233f81612329565b82525050565b600060208201905061235a6000830184612336565b92915050565b61236981612148565b82525050565b60006020820190506123846000830184612360565b92915050565b6000602082840312156123a05761239f612123565b5b60006123ae84828501612171565b91505092915050565b600080604083850312156123ce576123cd612123565b5b60006123dc858286016121a7565b92505060206123ed858286016121a7565b9150509250929050565b600061240282612128565b9050919050565b612412816123f7565b82525050565b600060208201905061242d6000830184612409565b92915050565b60006020828403121561244957612448612123565b5b6000612457848285016121a7565b91505092915050565b612469816121fc565b811461247457600080fd5b50565b60008135905061248681612460565b92915050565b600080604083850312156124a3576124a2612123565b5b60006124b185828601612171565b92505060206124c285828601612477565b9150509250929050565b6000602082840312156124e2576124e1612123565b5b60006124f084828501612477565b91505092915050565b600080604083850312156125105761250f612123565b5b600061251e85828601612171565b925050602061252f85828601612171565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061258057607f821691505b60208210810361259357612592612539565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006125f5602883612073565b915061260082612599565b604082019050919050565b60006020820190508181036000830152612624816125e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061266582612186565b915061267083612186565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126a5576126a461262b565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006126e6602083612073565b91506126f1826126b0565b602082019050919050565b60006020820190508181036000830152612715816126d9565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000612752600c83612073565b915061275d8261271c565b602082019050919050565b6000602082019050818103600083015261278181612745565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006127e4602583612073565b91506127ef82612788565b604082019050919050565b60006020820190508181036000830152612813816127d7565b9050919050565b7f76616c756520746f6f2068696768000000000000000000000000000000000000600082015250565b6000612850600e83612073565b915061285b8261281a565b602082019050919050565b6000602082019050818103600083015261287f81612843565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006128e2602a83612073565b91506128ed82612886565b604082019050919050565b60006020820190508181036000830152612911816128d5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612974602683612073565b915061297f82612918565b604082019050919050565b600060208201905081810360008301526129a381612967565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a06602483612073565b9150612a11826129aa565b604082019050919050565b60006020820190508181036000830152612a35816129f9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a98602283612073565b9150612aa382612a3c565b604082019050919050565b60006020820190508181036000830152612ac781612a8b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b2a602583612073565b9150612b3582612ace565b604082019050919050565b60006020820190508181036000830152612b5981612b1d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612bbc602383612073565b9150612bc782612b60565b604082019050919050565b60006020820190508181036000830152612beb81612baf565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000612c4e602883612073565b9150612c5982612bf2565b604082019050919050565b60006020820190508181036000830152612c7d81612c41565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612cbe82612186565b9150612cc983612186565b925082612cd957612cd8612c84565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612d40602683612073565b9150612d4b82612ce4565b604082019050919050565b60006020820190508181036000830152612d6f81612d33565b9050919050565b6000604082019050612d8b60008301856122ac565b612d9860208301846122ac565b9392505050565b6000612daa82612186565b9150612db583612186565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612dee57612ded61262b565b5b828202905092915050565b6000612e0482612186565b9150612e0f83612186565b925082821015612e2257612e2161262b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612e9a8161215a565b92915050565b600060208284031215612eb657612eb5612123565b5b6000612ec484828501612e8b565b91505092915050565b6000819050919050565b6000612ef2612eed612ee884612ecd565b612232565b612186565b9050919050565b612f0281612ed7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f3d81612148565b82525050565b6000612f4f8383612f34565b60208301905092915050565b6000602082019050919050565b6000612f7382612f08565b612f7d8185612f13565b9350612f8883612f24565b8060005b83811015612fb9578151612fa08882612f43565b9750612fab83612f5b565b925050600181019050612f8c565b5085935050505092915050565b600060a082019050612fdb60008301886122ac565b612fe86020830187612ef9565b8181036040830152612ffa8186612f68565b90506130096060830185612360565b61301660808301846122ac565b9695505050505050565b600060c0820190506130356000830189612360565b61304260208301886122ac565b61304f6040830187612ef9565b61305c6060830186612ef9565b6130696080830185612360565b61307660a08301846122ac565b979650505050505050565b60008151905061309081612190565b92915050565b6000806000606084860312156130af576130ae612123565b5b60006130bd86828701613081565b93505060206130ce86828701613081565b92505060406130df86828701613081565b915050925092509256fea26469706673582212208cd660c1748c92880833c9f1b4b503df2f9b79d55c60c47f62a396c4cf607b5d64736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cffd1bfddf4b503e6dd38ee7463dd268573b6820
-----Decoded View---------------
Arg [0] : _owner (address): 0xcffd1bfDdf4b503e6dD38EE7463dD268573b6820
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000cffd1bfddf4b503e6dd38ee7463dd268573b6820
Deployed Bytecode Sourcemap
40058:6966:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5921:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8088:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40136:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7041:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8739:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6883:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9640:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40184:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40267:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46665:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45902:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40482:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7212:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17451:94;;;;;;;;;;;;;:::i;:::-;;40520:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16800:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6140:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40444:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10358:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7552:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46150:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46363:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46802:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40316:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7790:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40382:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17700:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5921:100;5975:13;6008:5;6001:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5921:100;:::o;8088:169::-;8171:4;8188:39;8197:12;:10;:12::i;:::-;8211:7;8220:6;8188:8;:39::i;:::-;8245:4;8238:11;;8088:169;;;;:::o;40136:41::-;;;;;;;;;;;;;:::o;7041:108::-;7102:7;7129:12;;7122:19;;7041:108;:::o;8739:492::-;8879:4;8896:36;8906:6;8914:9;8925:6;8896:9;:36::i;:::-;8945:24;8972:11;:19;8984:6;8972:19;;;;;;;;;;;;;;;:33;8992:12;:10;:12::i;:::-;8972:33;;;;;;;;;;;;;;;;8945:60;;9044:6;9024:16;:26;;9016:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9131:57;9140:6;9148:12;:10;:12::i;:::-;9181:6;9162:16;:25;9131:8;:57::i;:::-;9219:4;9212:11;;;8739:492;;;;;:::o;6883:93::-;6941:5;6966:2;6959:9;;6883:93;:::o;9640:215::-;9728:4;9745:80;9754:12;:10;:12::i;:::-;9768:7;9814:10;9777:11;:25;9789:12;:10;:12::i;:::-;9777:25;;;;;;;;;;;;;;;:34;9803:7;9777:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9745:8;:80::i;:::-;9843:4;9836:11;;9640:215;;;;:::o;40184:38::-;;;:::o;40267:40::-;;;;;;;;;;;;;:::o;46665:125::-;46730:4;46754:19;:28;46774:7;46754:28;;;;;;;;;;;;;;;;;;;;;;;;;46747:35;;46665:125;;;:::o;45902:240::-;17031:12;:10;:12::i;:::-;17020:23;;:7;:5;:7::i;:::-;:23;;;17012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46036:2:::1;46000:32;46018:13;46000;:17;;:32;;;;:::i;:::-;:38;;45992:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;46081:13;46066:12;:28;;;;46120:13;46105:12;:28;;;;45902:240:::0;;:::o;40482:31::-;;;;:::o;7212:127::-;7286:7;7313:9;:18;7323:7;7313:18;;;;;;;;;;;;;;;;7306:25;;7212:127;;;:::o;17451:94::-;17031:12;:10;:12::i;:::-;17020:23;;:7;:5;:7::i;:::-;:23;;;17012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17516:21:::1;17534:1;17516:9;:21::i;:::-;17451:94::o:0;40520:93::-;;;;;;;;;;;;;:::o;16800:87::-;16846:7;16873:6;;;;;;;;;;;16866:13;;16800:87;:::o;6140:104::-;6196:13;6229:7;6222:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6140:104;:::o;40444:31::-;;;;:::o;10358:413::-;10451:4;10468:24;10495:11;:25;10507:12;:10;:12::i;:::-;10495:25;;;;;;;;;;;;;;;:34;10521:7;10495:34;;;;;;;;;;;;;;;;10468:61;;10568:15;10548:16;:35;;10540:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10661:67;10670:12;:10;:12::i;:::-;10684:7;10712:15;10693:16;:34;10661:8;:67::i;:::-;10759:4;10752:11;;;10358:413;;;;:::o;7552:175::-;7638:4;7655:42;7665:12;:10;:12::i;:::-;7679:9;7690:6;7655:9;:42::i;:::-;7715:4;7708:11;;7552:175;;;;:::o;46150:204::-;17031:12;:10;:12::i;:::-;17020:23;;:7;:5;:7::i;:::-;:23;;;17012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46250:12:::1;46227:20;:35;;;;46305:22;46323:3;46305:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;46281:20;;:46;;46273:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;46150:204:::0;:::o;46363:290::-;17031:12;:10;:12::i;:::-;17020:23;;:7;:5;:7::i;:::-;:23;;;17012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46488:8:::1;46456:40;;:19;:28;46476:7;46456:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;46448:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46585:8;46554:19;:28;46574:7;46554:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;46627:7;46611:34;;;46636:8;46611:34;;;;;;:::i;:::-;;;;;;;;46363:290:::0;;:::o;46802:171::-;17031:12;:10;:12::i;:::-;17020:23;;:7;:5;:7::i;:::-;:23;;;17012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46903:8:::1;46879:21;;:32;;;;;;;;;;;;;;;;;;46927:38;46956:8;46927:38;;;;;;:::i;:::-;;;;;;;;46802:171:::0;:::o;40316:59::-;;;;:::o;7790:151::-;7879:7;7906:11;:18;7918:5;7906:18;;;;;;;;;;;;;;;:27;7925:7;7906:27;;;;;;;;;;;;;;;;7899:34;;7790:151;;;;:::o;40382:53::-;;;;:::o;17700:192::-;17031:12;:10;:12::i;:::-;17020:23;;:7;:5;:7::i;:::-;:23;;;17012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17809:1:::1;17789:22;;:8;:22;;::::0;17781:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17865:19;17875:8;17865:9;:19::i;:::-;17700:192:::0;:::o;3831:98::-;3884:7;3911:10;3904:17;;3831:98;:::o;14050:380::-;14203:1;14186:19;;:5;:19;;;14178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14284:1;14265:21;;:7;:21;;;14257:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14368:6;14338:11;:18;14350:5;14338:18;;;;;;;;;;;;;;;:27;14357:7;14338:27;;;;;;;;;;;;;;;:36;;;;14406:7;14390:32;;14399:5;14390:32;;;14415:6;14390:32;;;;;;:::i;:::-;;;;;;;;14050:380;;;:::o;42057:1470::-;42205:1;42189:18;;:4;:18;;;42181:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42282:1;42268:16;;:2;:16;;;42260:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42350:1;42340:6;:11;42337:92;;42368:28;42384:4;42390:2;42394:1;42368:15;:28::i;:::-;42411:7;;42337:92;42453:19;:25;42473:4;42453:25;;;;;;;;;;;;;;;;;;;;;;;;;42452:26;:54;;;;;42483:19;:23;42503:2;42483:23;;;;;;;;;;;;;;;;;;;;;;;;;42482:24;42452:54;42449:168;;;42540:20;;42530:6;:30;;42522:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;42449:168;42626:28;42657:24;42675:4;42657:9;:24::i;:::-;42626:55;;42702:24;42753:18;;42729:20;:42;;42702:69;;42808:19;:53;;;;;42845:16;;;;;;;;;;;42844:17;42808:53;:89;;;;;42884:13;42878:19;;:2;:19;;;42808:89;:128;;;;;42915:21;;;;;;;;;;;42808:128;42791:276;;;42986:18;;42963:41;;43019:36;43034:20;43019:14;:36::i;:::-;42791:276;43169:19;:25;43189:4;43169:25;;;;;;;;;;;;;;;;;;;;;;;;;43168:26;:54;;;;;43199:19;:23;43219:2;43199:23;;;;;;;;;;;;;;;;;;;;;;;;;43198:24;43168:54;43165:307;;;43236:12;43251:51;43298:3;43251:42;43262:30;43279:12;;43262;;:16;;:30;;;;:::i;:::-;43251:6;:10;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;43236:66;;43323:16;43334:4;43323:6;:10;;:16;;;;:::i;:::-;43314:25;;43367:1;43360:4;:8;43356:91;;;43389:42;43405:4;43419;43426;43389:15;:42::i;:::-;43356:91;43224:248;43165:307;43484:33;43500:4;43506:2;43510:6;43484:15;:33::i;:::-;42170:1357;;42057:1470;;;;:::o;27954:98::-;28012:7;28043:1;28039;:5;;;;:::i;:::-;28032:12;;27954:98;;;;:::o;17900:173::-;17956:16;17975:6;;;;;;;;;;;17956:25;;18001:8;17992:6;;:17;;;;;;;;;;;;;;;;;;18056:8;18025:40;;18046:8;18025:40;;;;;;;;;;;;17945:128;17900:173;:::o;29091:98::-;29149:7;29180:1;29176;:5;;;;:::i;:::-;29169:12;;29091:98;;;;:::o;11261:733::-;11419:1;11401:20;;:6;:20;;;11393:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11503:1;11482:23;;:9;:23;;;11474:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11558:47;11579:6;11587:9;11598:6;11558:20;:47::i;:::-;11618:21;11642:9;:17;11652:6;11642:17;;;;;;;;;;;;;;;;11618:41;;11695:6;11678:13;:23;;11670:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11816:6;11800:13;:22;11780:9;:17;11790:6;11780:17;;;;;;;;;;;;;;;:42;;;;11868:6;11844:9;:20;11854:9;11844:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11909:9;11892:35;;11901:6;11892:35;;;11920:6;11892:35;;;;;;:::i;:::-;;;;;;;;11940:46;11960:6;11968:9;11979:6;11940:19;:46::i;:::-;11382:612;11261:733;;;:::o;43536:1269::-;41109:4;41090:16;;:23;;;;;;;;;;;;;;;;;;43621:26:::1;43650:74;43693:30;43710:12;;43693;;:16;;:30;;;;:::i;:::-;43650:38;43675:12;;43650:20;:24;;:38;;;;:::i;:::-;:42;;:74;;;;:::i;:::-;43621:103;;43799:12;43814:25;43837:1;43814:18;:22;;:25;;;;:::i;:::-;43799:40;;43850:17;43870:28;43893:4;43870:18;:22;;:28;;;;:::i;:::-;43850:48;;44176:22;44201:21;44176:46;;44267:22;44284:4;44267:16;:22::i;:::-;44420:18;44441:41;44467:14;44441:21;:25;;:41;;;;:::i;:::-;44420:62;;44532:35;44545:9;44556:10;44532:12;:35::i;:::-;44627:62;44644:44;44669:18;44644:20;:24;;:44;;;;:::i;:::-;44627:16;:62::i;:::-;44700:15;;;;;;;;;;;:24;;:47;44725:21;44700:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44765:32;44780:4;44786:10;44765:32;;;;;;;:::i;:::-;;;;;;;;43610:1195;;;;;41155:5:::0;41136:16;;:24;;;;;;;;;;;;;;;;;;43536:1269;:::o;28692:98::-;28750:7;28781:1;28777;:5;;;;:::i;:::-;28770:12;;28692:98;;;;:::o;28335:::-;28393:7;28424:1;28420;:5;;;;:::i;:::-;28413:12;;28335:98;;;;:::o;15030:125::-;;;;:::o;15759:124::-;;;;:::o;44813:692::-;44939:21;44977:1;44963:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44939:40;;45008:4;44990;44995:1;44990:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45034:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45024:4;45029:1;45024:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45125:11;45072:50;45090:4;45105:15;;;;;;;;;;;45072:9;:50::i;:::-;:64;45069:156;;;45151:62;45168:4;45183:15;;;;;;;;;;;45210:1;45201:11;45151:8;:62::i;:::-;45069:156;45263:15;;;;;;;;;;;:66;;;45344:11;45370:1;45414:4;45441;45461:15;45263:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44868:637;44813:692;:::o;45513:381::-;45624:15;;;;;;;;;;;:31;;;45663:9;45696:4;45716:11;45742:1;45785;45828:7;:5;:7::i;:::-;45850:15;45624:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45513:381;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:153::-;3917:9;3950:37;3981:5;3950:37;:::i;:::-;3937:50;;3840:153;;;:::o;3999:185::-;4113:64;4171:5;4113:64;:::i;:::-;4108:3;4101:77;3999:185;;:::o;4190:276::-;4310:4;4348:2;4337:9;4333:18;4325:26;;4361:98;4456:1;4445:9;4441:17;4432:6;4361:98;:::i;:::-;4190:276;;;;:::o;4472:118::-;4559:24;4577:5;4559:24;:::i;:::-;4554:3;4547:37;4472:118;;:::o;4596:222::-;4689:4;4727:2;4716:9;4712:18;4704:26;;4740:71;4808:1;4797:9;4793:17;4784:6;4740:71;:::i;:::-;4596:222;;;;:::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:86::-;5484:7;5524:4;5517:5;5513:16;5502:27;;5449:86;;;:::o;5541:112::-;5624:22;5640:5;5624:22;:::i;:::-;5619:3;5612:35;5541:112;;:::o;5659:214::-;5748:4;5786:2;5775:9;5771:18;5763:26;;5799:67;5863:1;5852:9;5848:17;5839:6;5799:67;:::i;:::-;5659:214;;;;:::o;5879:118::-;5966:24;5984:5;5966:24;:::i;:::-;5961:3;5954:37;5879:118;;:::o;6003:222::-;6096:4;6134:2;6123:9;6119:18;6111:26;;6147:71;6215:1;6204:9;6200:17;6191:6;6147:71;:::i;:::-;6003:222;;;;:::o;6231:329::-;6290:6;6339:2;6327:9;6318:7;6314:23;6310:32;6307:119;;;6345:79;;:::i;:::-;6307:119;6465:1;6490:53;6535:7;6526:6;6515:9;6511:22;6490:53;:::i;:::-;6480:63;;6436:117;6231:329;;;;:::o;6566:474::-;6634:6;6642;6691:2;6679:9;6670:7;6666:23;6662:32;6659:119;;;6697:79;;:::i;:::-;6659:119;6817:1;6842:53;6887:7;6878:6;6867:9;6863:22;6842:53;:::i;:::-;6832:63;;6788:117;6944:2;6970:53;7015:7;7006:6;6995:9;6991:22;6970:53;:::i;:::-;6960:63;;6915:118;6566:474;;;;;:::o;7046:104::-;7091:7;7120:24;7138:5;7120:24;:::i;:::-;7109:35;;7046:104;;;:::o;7156:142::-;7259:32;7285:5;7259:32;:::i;:::-;7254:3;7247:45;7156:142;;:::o;7304:254::-;7413:4;7451:2;7440:9;7436:18;7428:26;;7464:87;7548:1;7537:9;7533:17;7524:6;7464:87;:::i;:::-;7304:254;;;;:::o;7564:329::-;7623:6;7672:2;7660:9;7651:7;7647:23;7643:32;7640:119;;;7678:79;;:::i;:::-;7640:119;7798:1;7823:53;7868:7;7859:6;7848:9;7844:22;7823:53;:::i;:::-;7813:63;;7769:117;7564:329;;;;:::o;7899:116::-;7969:21;7984:5;7969:21;:::i;:::-;7962:5;7959:32;7949:60;;8005:1;8002;7995:12;7949:60;7899:116;:::o;8021:133::-;8064:5;8102:6;8089:20;8080:29;;8118:30;8142:5;8118:30;:::i;:::-;8021:133;;;;:::o;8160:468::-;8225:6;8233;8282:2;8270:9;8261:7;8257:23;8253:32;8250:119;;;8288:79;;:::i;:::-;8250:119;8408:1;8433:53;8478:7;8469:6;8458:9;8454:22;8433:53;:::i;:::-;8423:63;;8379:117;8535:2;8561:50;8603:7;8594:6;8583:9;8579:22;8561:50;:::i;:::-;8551:60;;8506:115;8160:468;;;;;:::o;8634:323::-;8690:6;8739:2;8727:9;8718:7;8714:23;8710:32;8707:119;;;8745:79;;:::i;:::-;8707:119;8865:1;8890:50;8932:7;8923:6;8912:9;8908:22;8890:50;:::i;:::-;8880:60;;8836:114;8634:323;;;;:::o;8963:474::-;9031:6;9039;9088:2;9076:9;9067:7;9063:23;9059:32;9056:119;;;9094:79;;:::i;:::-;9056:119;9214:1;9239:53;9284:7;9275:6;9264:9;9260:22;9239:53;:::i;:::-;9229:63;;9185:117;9341:2;9367:53;9412:7;9403:6;9392:9;9388:22;9367:53;:::i;:::-;9357:63;;9312:118;8963:474;;;;;:::o;9443:180::-;9491:77;9488:1;9481:88;9588:4;9585:1;9578:15;9612:4;9609:1;9602:15;9629:320;9673:6;9710:1;9704:4;9700:12;9690:22;;9757:1;9751:4;9747:12;9778:18;9768:81;;9834:4;9826:6;9822:17;9812:27;;9768:81;9896:2;9888:6;9885:14;9865:18;9862:38;9859:84;;9915:18;;:::i;:::-;9859:84;9680:269;9629:320;;;:::o;9955:227::-;10095:34;10091:1;10083:6;10079:14;10072:58;10164:10;10159:2;10151:6;10147:15;10140:35;9955:227;:::o;10188:366::-;10330:3;10351:67;10415:2;10410:3;10351:67;:::i;:::-;10344:74;;10427:93;10516:3;10427:93;:::i;:::-;10545:2;10540:3;10536:12;10529:19;;10188:366;;;:::o;10560:419::-;10726:4;10764:2;10753:9;10749:18;10741:26;;10813:9;10807:4;10803:20;10799:1;10788:9;10784:17;10777:47;10841:131;10967:4;10841:131;:::i;:::-;10833:139;;10560:419;;;:::o;10985:180::-;11033:77;11030:1;11023:88;11130:4;11127:1;11120:15;11154:4;11151:1;11144:15;11171:305;11211:3;11230:20;11248:1;11230:20;:::i;:::-;11225:25;;11264:20;11282:1;11264:20;:::i;:::-;11259:25;;11418:1;11350:66;11346:74;11343:1;11340:81;11337:107;;;11424:18;;:::i;:::-;11337:107;11468:1;11465;11461:9;11454:16;;11171:305;;;;:::o;11482:182::-;11622:34;11618:1;11610:6;11606:14;11599:58;11482:182;:::o;11670:366::-;11812:3;11833:67;11897:2;11892:3;11833:67;:::i;:::-;11826:74;;11909:93;11998:3;11909:93;:::i;:::-;12027:2;12022:3;12018:12;12011:19;;11670:366;;;:::o;12042:419::-;12208:4;12246:2;12235:9;12231:18;12223:26;;12295:9;12289:4;12285:20;12281:1;12270:9;12266:17;12259:47;12323:131;12449:4;12323:131;:::i;:::-;12315:139;;12042:419;;;:::o;12467:162::-;12607:14;12603:1;12595:6;12591:14;12584:38;12467:162;:::o;12635:366::-;12777:3;12798:67;12862:2;12857:3;12798:67;:::i;:::-;12791:74;;12874:93;12963:3;12874:93;:::i;:::-;12992:2;12987:3;12983:12;12976:19;;12635:366;;;:::o;13007:419::-;13173:4;13211:2;13200:9;13196:18;13188:26;;13260:9;13254:4;13250:20;13246:1;13235:9;13231:17;13224:47;13288:131;13414:4;13288:131;:::i;:::-;13280:139;;13007:419;;;:::o;13432:224::-;13572:34;13568:1;13560:6;13556:14;13549:58;13641:7;13636:2;13628:6;13624:15;13617:32;13432:224;:::o;13662:366::-;13804:3;13825:67;13889:2;13884:3;13825:67;:::i;:::-;13818:74;;13901:93;13990:3;13901:93;:::i;:::-;14019:2;14014:3;14010:12;14003:19;;13662:366;;;:::o;14034:419::-;14200:4;14238:2;14227:9;14223:18;14215:26;;14287:9;14281:4;14277:20;14273:1;14262:9;14258:17;14251:47;14315:131;14441:4;14315:131;:::i;:::-;14307:139;;14034:419;;;:::o;14459:164::-;14599:16;14595:1;14587:6;14583:14;14576:40;14459:164;:::o;14629:366::-;14771:3;14792:67;14856:2;14851:3;14792:67;:::i;:::-;14785:74;;14868:93;14957:3;14868:93;:::i;:::-;14986:2;14981:3;14977:12;14970:19;;14629:366;;;:::o;15001:419::-;15167:4;15205:2;15194:9;15190:18;15182:26;;15254:9;15248:4;15244:20;15240:1;15229:9;15225:17;15218:47;15282:131;15408:4;15282:131;:::i;:::-;15274:139;;15001:419;;;:::o;15426:229::-;15566:34;15562:1;15554:6;15550:14;15543:58;15635:12;15630:2;15622:6;15618:15;15611:37;15426:229;:::o;15661:366::-;15803:3;15824:67;15888:2;15883:3;15824:67;:::i;:::-;15817:74;;15900:93;15989:3;15900:93;:::i;:::-;16018:2;16013:3;16009:12;16002:19;;15661:366;;;:::o;16033:419::-;16199:4;16237:2;16226:9;16222:18;16214:26;;16286:9;16280:4;16276:20;16272:1;16261:9;16257:17;16250:47;16314:131;16440:4;16314:131;:::i;:::-;16306:139;;16033:419;;;:::o;16458:225::-;16598:34;16594:1;16586:6;16582:14;16575:58;16667:8;16662:2;16654:6;16650:15;16643:33;16458:225;:::o;16689:366::-;16831:3;16852:67;16916:2;16911:3;16852:67;:::i;:::-;16845:74;;16928:93;17017:3;16928:93;:::i;:::-;17046:2;17041:3;17037:12;17030:19;;16689:366;;;:::o;17061:419::-;17227:4;17265:2;17254:9;17250:18;17242:26;;17314:9;17308:4;17304:20;17300:1;17289:9;17285:17;17278:47;17342:131;17468:4;17342:131;:::i;:::-;17334:139;;17061:419;;;:::o;17486:223::-;17626:34;17622:1;17614:6;17610:14;17603:58;17695:6;17690:2;17682:6;17678:15;17671:31;17486:223;:::o;17715:366::-;17857:3;17878:67;17942:2;17937:3;17878:67;:::i;:::-;17871:74;;17954:93;18043:3;17954:93;:::i;:::-;18072:2;18067:3;18063:12;18056:19;;17715:366;;;:::o;18087:419::-;18253:4;18291:2;18280:9;18276:18;18268:26;;18340:9;18334:4;18330:20;18326:1;18315:9;18311:17;18304:47;18368:131;18494:4;18368:131;:::i;:::-;18360:139;;18087:419;;;:::o;18512:221::-;18652:34;18648:1;18640:6;18636:14;18629:58;18721:4;18716:2;18708:6;18704:15;18697:29;18512:221;:::o;18739:366::-;18881:3;18902:67;18966:2;18961:3;18902:67;:::i;:::-;18895:74;;18978:93;19067:3;18978:93;:::i;:::-;19096:2;19091:3;19087:12;19080:19;;18739:366;;;:::o;19111:419::-;19277:4;19315:2;19304:9;19300:18;19292:26;;19364:9;19358:4;19354:20;19350:1;19339:9;19335:17;19328:47;19392:131;19518:4;19392:131;:::i;:::-;19384:139;;19111:419;;;:::o;19536:224::-;19676:34;19672:1;19664:6;19660:14;19653:58;19745:7;19740:2;19732:6;19728:15;19721:32;19536:224;:::o;19766:366::-;19908:3;19929:67;19993:2;19988:3;19929:67;:::i;:::-;19922:74;;20005:93;20094:3;20005:93;:::i;:::-;20123:2;20118:3;20114:12;20107:19;;19766:366;;;:::o;20138:419::-;20304:4;20342:2;20331:9;20327:18;20319:26;;20391:9;20385:4;20381:20;20377:1;20366:9;20362:17;20355:47;20419:131;20545:4;20419:131;:::i;:::-;20411:139;;20138:419;;;:::o;20563:222::-;20703:34;20699:1;20691:6;20687:14;20680:58;20772:5;20767:2;20759:6;20755:15;20748:30;20563:222;:::o;20791:366::-;20933:3;20954:67;21018:2;21013:3;20954:67;:::i;:::-;20947:74;;21030:93;21119:3;21030:93;:::i;:::-;21148:2;21143:3;21139:12;21132:19;;20791:366;;;:::o;21163:419::-;21329:4;21367:2;21356:9;21352:18;21344:26;;21416:9;21410:4;21406:20;21402:1;21391:9;21387:17;21380:47;21444:131;21570:4;21444:131;:::i;:::-;21436:139;;21163:419;;;:::o;21588:227::-;21728:34;21724:1;21716:6;21712:14;21705:58;21797:10;21792:2;21784:6;21780:15;21773:35;21588:227;:::o;21821:366::-;21963:3;21984:67;22048:2;22043:3;21984:67;:::i;:::-;21977:74;;22060:93;22149:3;22060:93;:::i;:::-;22178:2;22173:3;22169:12;22162:19;;21821:366;;;:::o;22193:419::-;22359:4;22397:2;22386:9;22382:18;22374:26;;22446:9;22440:4;22436:20;22432:1;22421:9;22417:17;22410:47;22474:131;22600:4;22474:131;:::i;:::-;22466:139;;22193:419;;;:::o;22618:180::-;22666:77;22663:1;22656:88;22763:4;22760:1;22753:15;22787:4;22784:1;22777:15;22804:185;22844:1;22861:20;22879:1;22861:20;:::i;:::-;22856:25;;22895:20;22913:1;22895:20;:::i;:::-;22890:25;;22934:1;22924:35;;22939:18;;:::i;:::-;22924:35;22981:1;22978;22974:9;22969:14;;22804:185;;;;:::o;22995:225::-;23135:34;23131:1;23123:6;23119:14;23112:58;23204:8;23199:2;23191:6;23187:15;23180:33;22995:225;:::o;23226:366::-;23368:3;23389:67;23453:2;23448:3;23389:67;:::i;:::-;23382:74;;23465:93;23554:3;23465:93;:::i;:::-;23583:2;23578:3;23574:12;23567:19;;23226:366;;;:::o;23598:419::-;23764:4;23802:2;23791:9;23787:18;23779:26;;23851:9;23845:4;23841:20;23837:1;23826:9;23822:17;23815:47;23879:131;24005:4;23879:131;:::i;:::-;23871:139;;23598:419;;;:::o;24023:332::-;24144:4;24182:2;24171:9;24167:18;24159:26;;24195:71;24263:1;24252:9;24248:17;24239:6;24195:71;:::i;:::-;24276:72;24344:2;24333:9;24329:18;24320:6;24276:72;:::i;:::-;24023:332;;;;;:::o;24361:348::-;24401:7;24424:20;24442:1;24424:20;:::i;:::-;24419:25;;24458:20;24476:1;24458:20;:::i;:::-;24453:25;;24646:1;24578:66;24574:74;24571:1;24568:81;24563:1;24556:9;24549:17;24545:105;24542:131;;;24653:18;;:::i;:::-;24542:131;24701:1;24698;24694:9;24683:20;;24361:348;;;;:::o;24715:191::-;24755:4;24775:20;24793:1;24775:20;:::i;:::-;24770:25;;24809:20;24827:1;24809:20;:::i;:::-;24804:25;;24848:1;24845;24842:8;24839:34;;;24853:18;;:::i;:::-;24839:34;24898:1;24895;24891:9;24883:17;;24715:191;;;;:::o;24912:180::-;24960:77;24957:1;24950:88;25057:4;25054:1;25047:15;25081:4;25078:1;25071:15;25098:180;25146:77;25143:1;25136:88;25243:4;25240:1;25233:15;25267:4;25264:1;25257:15;25284:143;25341:5;25372:6;25366:13;25357:22;;25388:33;25415:5;25388:33;:::i;:::-;25284:143;;;;:::o;25433:351::-;25503:6;25552:2;25540:9;25531:7;25527:23;25523:32;25520:119;;;25558:79;;:::i;:::-;25520:119;25678:1;25703:64;25759:7;25750:6;25739:9;25735:22;25703:64;:::i;:::-;25693:74;;25649:128;25433:351;;;;:::o;25790:85::-;25835:7;25864:5;25853:16;;25790:85;;;:::o;25881:158::-;25939:9;25972:61;25990:42;25999:32;26025:5;25999:32;:::i;:::-;25990:42;:::i;:::-;25972:61;:::i;:::-;25959:74;;25881:158;;;:::o;26045:147::-;26140:45;26179:5;26140:45;:::i;:::-;26135:3;26128:58;26045:147;;:::o;26198:114::-;26265:6;26299:5;26293:12;26283:22;;26198:114;;;:::o;26318:184::-;26417:11;26451:6;26446:3;26439:19;26491:4;26486:3;26482:14;26467:29;;26318:184;;;;:::o;26508:132::-;26575:4;26598:3;26590:11;;26628:4;26623:3;26619:14;26611:22;;26508:132;;;:::o;26646:108::-;26723:24;26741:5;26723:24;:::i;:::-;26718:3;26711:37;26646:108;;:::o;26760:179::-;26829:10;26850:46;26892:3;26884:6;26850:46;:::i;:::-;26928:4;26923:3;26919:14;26905:28;;26760:179;;;;:::o;26945:113::-;27015:4;27047;27042:3;27038:14;27030:22;;26945:113;;;:::o;27094:732::-;27213:3;27242:54;27290:5;27242:54;:::i;:::-;27312:86;27391:6;27386:3;27312:86;:::i;:::-;27305:93;;27422:56;27472:5;27422:56;:::i;:::-;27501:7;27532:1;27517:284;27542:6;27539:1;27536:13;27517:284;;;27618:6;27612:13;27645:63;27704:3;27689:13;27645:63;:::i;:::-;27638:70;;27731:60;27784:6;27731:60;:::i;:::-;27721:70;;27577:224;27564:1;27561;27557:9;27552:14;;27517:284;;;27521:14;27817:3;27810:10;;27218:608;;;27094:732;;;;:::o;27832:831::-;28095:4;28133:3;28122:9;28118:19;28110:27;;28147:71;28215:1;28204:9;28200:17;28191:6;28147:71;:::i;:::-;28228:80;28304:2;28293:9;28289:18;28280:6;28228:80;:::i;:::-;28355:9;28349:4;28345:20;28340:2;28329:9;28325:18;28318:48;28383:108;28486:4;28477:6;28383:108;:::i;:::-;28375:116;;28501:72;28569:2;28558:9;28554:18;28545:6;28501:72;:::i;:::-;28583:73;28651:3;28640:9;28636:19;28627:6;28583:73;:::i;:::-;27832:831;;;;;;;;:::o;28669:807::-;28918:4;28956:3;28945:9;28941:19;28933:27;;28970:71;29038:1;29027:9;29023:17;29014:6;28970:71;:::i;:::-;29051:72;29119:2;29108:9;29104:18;29095:6;29051:72;:::i;:::-;29133:80;29209:2;29198:9;29194:18;29185:6;29133:80;:::i;:::-;29223;29299:2;29288:9;29284:18;29275:6;29223:80;:::i;:::-;29313:73;29381:3;29370:9;29366:19;29357:6;29313:73;:::i;:::-;29396;29464:3;29453:9;29449:19;29440:6;29396:73;:::i;:::-;28669:807;;;;;;;;;:::o;29482:143::-;29539:5;29570:6;29564:13;29555:22;;29586:33;29613:5;29586:33;:::i;:::-;29482:143;;;;:::o;29631:663::-;29719:6;29727;29735;29784:2;29772:9;29763:7;29759:23;29755:32;29752:119;;;29790:79;;:::i;:::-;29752:119;29910:1;29935:64;29991:7;29982:6;29971:9;29967:22;29935:64;:::i;:::-;29925:74;;29881:128;30048:2;30074:64;30130:7;30121:6;30110:9;30106:22;30074:64;:::i;:::-;30064:74;;30019:129;30187:2;30213:64;30269:7;30260:6;30249:9;30245:22;30213:64;:::i;:::-;30203:74;;30158:129;29631:663;;;;;:::o
Swarm Source
ipfs://8cd660c1748c92880833c9f1b4b503df2f9b79d55c60c47f62a396c4cf607b5d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.