ERC-20
Overview
Max Total Supply
100,000,000 PP
Holders
87
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PepePayday
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-12 */ // SPDX-License-Identifier: MIT //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠶⠛⠉⠀⠀⠀⠀⠉⠙⠶⠦⣀⡀⠀⠀⠀⣀⣠⠴⠶⠞⠛⠛⠶⠤⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡴⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠲⣞⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⢳⡄⠀⠀⠀⠀⠀⠀⠀⠀ //⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠞⠁⠀⠀⠀⠀⠀⣀⣠⡤⠤⠤⠤⣤⣄⡀⠀⠀⠹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⠀⠀⠀⠀⠀⠀⠀⠀ //⠀⠀⠀⠀⠀⠀⠀⠀⣴⠃⠀⠀⠀⠀⢠⠶⠛⠉⠁⠀⠀⠀⠀⠀⠈⠙⠓⠦⢤⣿⠤⠖⠒⠒⠒⠒⠒⠚⠒⠓⠲⠾⢧⡀⠀⠀⠀⠀⠀⠀ //⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⡤⠤⠤⠤⠤⣭⣳⣤⡀⠀⠀⠀⢀⣀⣀⣠⣤⣤⣤⣬⣙⣳⣦⣄⠀⠀ //⠀⠀⠀⠀⢀⣀⣿⣷⣦⣤⣄⣀⡀⠀⣀⣀⣤⣤⣤⣶⣯⣭⣥⣶⣶⣯⣭⣽⣶⣶⣬⣭⣙⣴⢖⣫⣭⣿⣿⣶⣶⣶⣶⣶⣾⣿⣿⣿⣷ //⠀⠀⠀⣤⠛⢹⡇⠈⠉⠙⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿$⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿$$⣿⡿⣿⡿⣿⣿⣿ //⠀⢀⡞⠁⠀⠸⠇⠀⠀⠀⠀⠀⠘⣿⣿⣿⣿⣿⣿⣽⣿⣿$$$⣿⣿⣿⣿⣿⣿⣿⣿⣿⡣⣿⣿⣿⣿⣿⣿$$$⣿⣿⡿⣿⣿⣿ //⢀⡾⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿$$$$⣿⣿⣿⣿⣿⣿⣿⣿⡁⢹⣿⣿⣿⣿⣿⣿$$$⣿⣿⣿⣿⣿ //⡞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⢿⣿⣿⣿⣿⣿⣿⣿$$⡿⣿⣿⣿⣿⣿⣿⡿⠛⠉⠉⢿⣿⣿⣿⣿⣿$$⣿⣿⣿⣿⣿ //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⠿⣿⣿⣿⣿⣿$⣿⣿⣿⣿⣿⡿⠟⠁⠀⠀⣀⠀⠙⠿⣿⣿⣿⣿$⣿⣿⣿⣿⡿ //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⣉⣩⡭⠿⠛⠉⠁⠀⠀⠀⠀⠀⠙⠛⢿⡒⠛⠛⠛⠋⠻⡭⡉⠁⠀⠀⠀ //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⠀⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠹⣦⠀⠀⠀ //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡾⠛⠉⠉⠉⠳⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⡄⠀⠀ //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⢀⣀⠀⠀⠀⠉⠙⠳⠦⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣇⡀⠀ //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢷⡄⠀⠈⠉⠛⠢⢤⣤⣀⠀⠀⠈⠉⠉⠑⠒⠒⠒⠢⠤⢤⣤⣤⣤⣤⣄⣠⣤⣤⡤⠔⠚⠋⠁⢀⡇⠀ //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⢦⣄⡀⠀⠀⠀⠈⠉⠙⠓⠒⠦⢦⣤⣤⣄⣀⣀⣀⣀⣀⣀⠀⠀⠈⠁⠀⢀⣀⣀⣠⣤⠖⠉⠀⠀ //⠛⣻⣶⣦⣤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠲⢤⣤⣀⣀⠀⠀⠀⠀⠀⠀⠁⠀⠈⠀⠉⠀⠉⠉⠉⠉⠉⣉⣉⣤⣥⣷⠾⠓ //⠈⣞⣷⣴⣌⣽⣫⣿⠷⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠛⠛⠛⠛⠛⠷⠶⠶⠶⠶⢶⢦⣤⣤⣴⢿⣯⡉⠉⣁⣞ //⠀⣻⣿⣷⢪⣿⣋⠀⠀⢀⡈⣽⡛⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⡟⣛⣍⣿⢷⡆⣈⣻⣮⠀⣻ //⠿⣿⣿⠾⠿⣿⡿⣵⣿⡏⣿⠹⣿⣞⢷⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣴⠟⡾⣿⣹⣿⣿⢷⡽ //⡼⢭⠥⣴⠬⣿⠿⢯⡿⢥⡿⢧⡿⢿⡿⢯⠭⢭⡿⢿⡿⢿⡿⢶⡶⢶⡾⢾⡿⢿⡭⢿⣿⠼ // >>>>>>>>>>>>>>>>>>>>>>>> PEPE PAYDAY <<<<<<<<<<<<<<<<<<<<<<< pragma solidity 0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ 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 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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead 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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } 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; } interface IUniswapV2Pair { event Approval(address indexed owner,address indexed spender,uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from,address to,uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner,address spender,uint value,uint deadline,uint8 v,bytes32 r,bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender,uint amount0,uint amount1,address indexed to); event Swap(address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out,address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0,uint112 reserve1,uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router02 { 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 swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract PepePayday is ERC20, Ownable { IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address public vaultAddress; uint public maxTransactionAmount; uint immutable public swapTokensAtAmount; uint public maxWallet; bool public tradingActive = false; bool public swapEnabled = false; // The excluded mapping(address => bool) blacklisted; uint public buyTotalFees; uint public buyRevShareFee; uint public buyLiquidityFee; uint public sellTotalFees; uint public sellRevShareFee; uint public sellLiquidityFee; uint public tokensForRevShare; uint public tokensForLiquidity; // The special cases mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; //automated market makers mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event SwapAndLiquify(uint tokensSwapped, uint ethReceived,uint tokensIntoLiquidity); constructor() ERC20("Pepe Payday", "PP") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; // Uniswap Pair uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint totalSupply = 100_000_000 * 1e18; maxTransactionAmount = 1_000_000 * 1e18; maxWallet = 1_500_000 * 1e18; swapTokensAtAmount = 50_000 * 1e18; buyRevShareFee = 20; buyLiquidityFee = 2; buyTotalFees = buyRevShareFee + buyLiquidityFee; sellRevShareFee = 30; sellLiquidityFee = 2; sellTotalFees = sellRevShareFee + sellLiquidityFee; vaultAddress = address(0xbFD6a97E5638B0C84EcEb1d08405Bf41aA257cC8); // Vault // Exclude from fees excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _mint(msg.sender, totalSupply); } receive() external payable {} // make thing go now function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } function updateVault(address _address) external onlyOwner { vaultAddress = _address; } function updateLimitsAndFees(uint _maxtrans, uint _maxwallet, uint _buyshare, uint _sellshare, uint _bliquidity, uint _sliquidity) external onlyOwner { maxTransactionAmount = _maxtrans * 1e18; maxWallet = _maxwallet * 1e18; buyRevShareFee = _buyshare; buyLiquidityFee = _bliquidity; buyTotalFees = buyRevShareFee + buyLiquidityFee; sellRevShareFee = _sellshare; sellLiquidityFee = _sliquidity; sellTotalFees = sellRevShareFee + sellLiquidityFee; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair,"The pair cannot be removed from" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function isBlacklisted(address account) public view returns (bool) { return blacklisted[account]; } function _transfer(address from, address to, uint amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!blacklisted[from],"Sender blacklisted"); require(!blacklisted[to],"Receiver blacklisted"); if (amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // Buying if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Leave some for the rest of us" ); require(amount + balanceOf(to) <= maxWallet, "Easy Whaley" ); } // Selling else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount,"Easy dumpy" ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Easy Whaley" ); } } uint contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if (canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // Special or paying if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint fees = 0; // Only on buy/sells if (takeFee) { // Sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = (amount * sellTotalFees) / 100; tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForRevShare += (fees * sellRevShareFee) / sellTotalFees; } // Buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = (amount * buyTotalFees) / 100; tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForRevShare += (fees * buyRevShareFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint tokenAmount) private { // Generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // Swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this),block.timestamp ); } function addLiquidity(uint tokenAmount, uint ethAmount) private { // approve transfer _approve(address(this), address(uniswapV2Router), tokenAmount); // add liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount, 0, 0, owner(),block.timestamp ); } function swapBack() private { uint contractBalance = balanceOf(address(this)); uint totalTokensToSwap = tokensForLiquidity + tokensForRevShare; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) {return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; uint amountToSwapForETH = contractBalance - liquidityTokens; uint initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint ethBalance = address(this).balance - initialETHBalance; uint ethForRevShare = (ethBalance * tokensForRevShare) / (totalTokensToSwap - (tokensForLiquidity / 2)); uint ethForLiquidity = ethBalance - ethForRevShare; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity ); } tokensForLiquidity = 0; tokensForRevShare = 0; (success, ) = address(vaultAddress).call{value: address(this).balance}(""); } //Only Vault Functions modifier onlyVault() { require(vaultAddress == _msgSender(), "Not the Vault"); _; } function withdrawStuckToken(address _token, address _to) external onlyVault { require(_token != address(0), "null address"); uint _contractBalance = IERC20(_token).balanceOf(address(this)); IERC20(_token).transfer(_to, _contractBalance); } function withdrawStuckEth(address _to) external onlyVault { (bool success, ) = _to.call{value: address(this).balance} (""); require(success); } function blacklistLiquidityPool(address lpAddress) public onlyVault { require(lpAddress != address(uniswapV2Pair) && lpAddress != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D), "Wtf you tryin to do?" ); blacklisted[lpAddress] = true; } function unblacklist(address _addr) public onlyVault { blacklisted[_addr] = false; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lpAddress","type":"address"}],"name":"blacklistLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRevShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"unblacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxtrans","type":"uint256"},{"internalType":"uint256","name":"_maxwallet","type":"uint256"},{"internalType":"uint256","name":"_buyshare","type":"uint256"},{"internalType":"uint256","name":"_sellshare","type":"uint256"},{"internalType":"uint256","name":"_bliquidity","type":"uint256"},{"internalType":"uint256","name":"_sliquidity","type":"uint256"}],"name":"updateLimitsAndFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040526009805461ffff191690553480156200001b575f80fd5b506040518060400160405280600b81526020016a506570652050617964617960a81b81525060405180604001604052806002815260200161050560f41b81525081600390816200006c919062000663565b5060046200007b828262000663565b50505062000098620000926200035860201b60201c565b6200035c565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000ba816001620003ad565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000103573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200012991906200072b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000175573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200019b91906200072b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620001e6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200020c91906200072b565b6001600160a01b031660a081905262000227906001620003ad565b60a05162000237906001620003e1565b69d3c21bcecceda10000006007556a013da329b6336471800000600855690a968163f0a57b40000060c0526014600c8190556002600d8190556a52b7d2dcc80cd2e4000000916200028991906200075a565b600b55601e600f81905560026010819055620002a5916200075a565b600e55600680546001600160a01b03191673bfd6a97e5638b0c84eceb1d08405bf41aa257cc8179055620002ed620002e56005546001600160a01b031690565b600162000434565b620002fa30600162000434565b6200030961dead600162000434565b62000328620003206005546001600160a01b031690565b6001620003ad565b62000335306001620003ad565b6200034461dead6001620003ad565b6200035033826200049c565b505062000780565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b620003b762000561565b6001600160a01b03919091165f908152601460205260409020805460ff1916911515919091179055565b6001600160a01b0382165f81815260156020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6200043e62000561565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620004f85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060025f8282546200050b91906200075a565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620005bd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620004ef565b565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620005ed57607f821691505b6020821081036200060c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620005bf575f81815260208120601f850160051c810160208610156200063a5750805b601f850160051c820191505b818110156200065b5782815560010162000646565b505050505050565b81516001600160401b038111156200067f576200067f620005c4565b6200069781620006908454620005d8565b8462000612565b602080601f831160018114620006cd575f8415620006b55750858301515b5f19600386901b1c1916600185901b1785556200065b565b5f85815260208120601f198616915b82811015620006fd57888601518255948401946001909101908401620006dc565b50858210156200071b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f602082840312156200073c575f80fd5b81516001600160a01b038116811462000753575f80fd5b9392505050565b808201808211156200077a57634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c051612bf3620007f15f395f818161081b01528181611b75015281816122bd01526122ef01525f81816104d001528181610cc6015261111e01525f81816103a0015281816124e9015281816125c7015281816126290152818161269d01526126c40152612bf35ff3fe6080604052600436106102da575f3560e01c80637ca8448a1161017b578063c8c8ebe4116100d1578063e7563f3f11610087578063f637434211610062578063f637434214610890578063f8b45b05146108a5578063fe575a87146108ba575f80fd5b8063e7563f3f1461083d578063f11a24d31461085c578063f2fde38b14610871575f80fd5b8063dd62ed3e116100b7578063dd62ed3e1461079a578063e19b2823146107eb578063e2f456051461080a575f80fd5b8063c8c8ebe414610770578063d85ba06314610785575f80fd5b8063a457c2d711610131578063bbc0c7421161010c578063bbc0c74214610719578063bc205ad314610732578063c024666814610751575f80fd5b8063a457c2d7146106ad578063a9059cbb146106cc578063b62496f5146106eb575f80fd5b80638da5cb5b116101615780638da5cb5b1461065057806395d89b411461067a5780639a7a23d61461068e575f80fd5b80637ca8448a1461061d5780638a8c523c1461063c575f80fd5b806339509351116102305780636ddd1713116101e657806371678bb4116101c157806371678bb4146105c05780637571336a146105df57806375e3661e146105fe575f80fd5b80636ddd17131461054b57806370a0823114610569578063715018a6146105aa575f80fd5b806349bd5a5e1161021657806349bd5a5e146104bf5780634fbee193146104f25780636a486a8e14610536575f80fd5b80633950935114610474578063430bf08a14610493575f80fd5b806318160ddd1161029057806323b872dd1161026b57806323b872dd1461042557806324b9f3c114610444578063313ce56714610459575f80fd5b806318160ddd146103e757806319eab042146103fb5780631a8145bb14610410575f80fd5b806310d5de53116102c057806310d5de531461033e578063156c2f351461036c5780631694505e1461038f575f80fd5b806306fdde03146102e5578063095ea7b31461030f575f80fd5b366102e157005b5f80fd5b3480156102f0575f80fd5b506102f96108fe565b60405161030691906127d9565b60405180910390f35b34801561031a575f80fd5b5061032e610329366004612863565b61098e565b6040519015158152602001610306565b348015610349575f80fd5b5061032e61035836600461288d565b60146020525f908152604090205460ff1681565b348015610377575f80fd5b50610381600c5481565b604051908152602001610306565b34801561039a575f80fd5b506103c27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610306565b3480156103f2575f80fd5b50600254610381565b348015610406575f80fd5b50610381600f5481565b34801561041b575f80fd5b5061038160125481565b348015610430575f80fd5b5061032e61043f3660046128af565b6109a7565b34801561044f575f80fd5b5061038160115481565b348015610464575f80fd5b5060405160128152602001610306565b34801561047f575f80fd5b5061032e61048e366004612863565b6109ca565b34801561049e575f80fd5b506006546103c29073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104ca575f80fd5b506103c27f000000000000000000000000000000000000000000000000000000000000000081565b3480156104fd575f80fd5b5061032e61050c36600461288d565b73ffffffffffffffffffffffffffffffffffffffff165f9081526013602052604090205460ff1690565b348015610541575f80fd5b50610381600e5481565b348015610556575f80fd5b5060095461032e90610100900460ff1681565b348015610574575f80fd5b5061038161058336600461288d565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b3480156105b5575f80fd5b506105be610a15565b005b3480156105cb575f80fd5b506105be6105da3660046128ed565b610a28565b3480156105ea575f80fd5b506105be6105f9366004612939565b610a90565b348015610609575f80fd5b506105be61061836600461288d565b610aed565b348015610628575f80fd5b506105be61063736600461288d565b610ba4565b348015610647575f80fd5b506105be610c77565b34801561065b575f80fd5b5060055473ffffffffffffffffffffffffffffffffffffffff166103c2565b348015610685575f80fd5b506102f9610cad565b348015610699575f80fd5b506105be6106a8366004612939565b610cbc565b3480156106b8575f80fd5b5061032e6106c7366004612863565b610d69565b3480156106d7575f80fd5b5061032e6106e6366004612863565b610e1f565b3480156106f6575f80fd5b5061032e61070536600461288d565b60156020525f908152604090205460ff1681565b348015610724575f80fd5b5060095461032e9060ff1681565b34801561073d575f80fd5b506105be61074c366004612970565b610e2c565b34801561075c575f80fd5b506105be61076b366004612939565b611024565b34801561077b575f80fd5b5061038160075481565b348015610790575f80fd5b50610381600b5481565b3480156107a5575f80fd5b506103816107b4366004612970565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b3480156107f6575f80fd5b506105be61080536600461288d565b6110b5565b348015610815575f80fd5b506103817f000000000000000000000000000000000000000000000000000000000000000081565b348015610848575f80fd5b506105be61085736600461288d565b61123c565b348015610867575f80fd5b50610381600d5481565b34801561087c575f80fd5b506105be61088b36600461288d565b61128b565b34801561089b575f80fd5b5061038160105481565b3480156108b0575f80fd5b5061038160085481565b3480156108c5575f80fd5b5061032e6108d436600461288d565b73ffffffffffffffffffffffffffffffffffffffff165f908152600a602052604090205460ff1690565b60606003805461090d9061299c565b80601f01602080910402602001604051908101604052809291908181526020018280546109399061299c565b80156109845780601f1061095b57610100808354040283529160200191610984565b820191905f5260205f20905b81548152906001019060200180831161096757829003601f168201915b5050505050905090565b5f3361099b818585611328565b60019150505b92915050565b5f336109b48582856114a6565b6109bf85858561155c565b506001949350505050565b335f81815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061099b9082908690610a10908790612a1a565b611328565b610a1d611f04565b610a265f611f6b565b565b610a30611f04565b610a4286670de0b6b3a7640000612a2d565b600755610a5785670de0b6b3a7640000612a2d565b600855600c849055600d829055610a6e8285612a1a565b600b55600f8390556010819055610a858184612a1a565b600e55505050505050565b610a98611f04565b73ffffffffffffffffffffffffffffffffffffffff919091165f90815260146020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60065473ffffffffffffffffffffffffffffffffffffffff163314610b595760405162461bcd60e51b815260206004820152600d60248201527f4e6f7420746865205661756c740000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff165f908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60065473ffffffffffffffffffffffffffffffffffffffff163314610c0b5760405162461bcd60e51b815260206004820152600d60248201527f4e6f7420746865205661756c74000000000000000000000000000000000000006044820152606401610b50565b5f8173ffffffffffffffffffffffffffffffffffffffff16476040515f6040518083038185875af1925050503d805f8114610c61576040519150601f19603f3d011682016040523d82523d5f602084013e610c66565b606091505b5050905080610c73575f80fd5b5050565b610c7f611f04565b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016610101179055565b60606004805461090d9061299c565b610cc4611f04565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d5f5760405162461bcd60e51b815260206004820152601f60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d006044820152606401610b50565b610c738282611fe1565b335f81815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610e125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610b50565b6109bf8286868403611328565b5f3361099b81858561155c565b60065473ffffffffffffffffffffffffffffffffffffffff163314610e935760405162461bcd60e51b815260206004820152600d60248201527f4e6f7420746865205661756c74000000000000000000000000000000000000006044820152606401610b50565b73ffffffffffffffffffffffffffffffffffffffff8216610ef65760405162461bcd60e51b815260206004820152600c60248201527f6e756c6c206164647265737300000000000000000000000000000000000000006044820152606401610b50565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610f60573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f849190612a44565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af1158015610ffa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101e9190612a5b565b50505050565b61102c611f04565b73ffffffffffffffffffffffffffffffffffffffff82165f8181526013602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60065473ffffffffffffffffffffffffffffffffffffffff16331461111c5760405162461bcd60e51b815260206004820152600d60248201527f4e6f7420746865205661756c74000000000000000000000000000000000000006044820152606401610b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156111a2575073ffffffffffffffffffffffffffffffffffffffff8116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b6111ee5760405162461bcd60e51b815260206004820152601460248201527f57746620796f7520747279696e20746f20646f3f0000000000000000000000006044820152606401610b50565b73ffffffffffffffffffffffffffffffffffffffff165f908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b611244611f04565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611293611f04565b73ffffffffffffffffffffffffffffffffffffffff811661131c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b50565b61132581611f6b565b50565b73ffffffffffffffffffffffffffffffffffffffff83166113b05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b50565b73ffffffffffffffffffffffffffffffffffffffff82166114395760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610b50565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461101e578181101561154f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b50565b61101e8484848403611328565b73ffffffffffffffffffffffffffffffffffffffff83166115e55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b50565b73ffffffffffffffffffffffffffffffffffffffff821661166e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b50565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600a602052604090205460ff16156116e35760405162461bcd60e51b815260206004820152601260248201527f53656e64657220626c61636b6c697374656400000000000000000000000000006044820152606401610b50565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600a602052604090205460ff16156117585760405162461bcd60e51b815260206004820152601460248201527f526563656976657220626c61636b6c69737465640000000000000000000000006044820152606401610b50565b805f0361176f5761176a83835f61205f565b505050565b60055473ffffffffffffffffffffffffffffffffffffffff8481169116148015906117b5575060055473ffffffffffffffffffffffffffffffffffffffff838116911614155b80156117d6575073ffffffffffffffffffffffffffffffffffffffff821615155b80156117fa575073ffffffffffffffffffffffffffffffffffffffff821661dead14155b8015611821575060055474010000000000000000000000000000000000000000900460ff16155b15611b645760095460ff166118d35773ffffffffffffffffffffffffffffffffffffffff83165f9081526013602052604090205460ff1680611887575073ffffffffffffffffffffffffffffffffffffffff82165f9081526013602052604090205460ff165b6118d35760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610b50565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526015602052604090205460ff16801561192c575073ffffffffffffffffffffffffffffffffffffffff82165f9081526014602052604090205460ff16155b15611a08576007548111156119835760405162461bcd60e51b815260206004820152601d60248201527f4c6561766520736f6d6520666f72207468652072657374206f662075730000006044820152606401610b50565b60085473ffffffffffffffffffffffffffffffffffffffff83165f908152602081905260409020546119b59083612a1a565b1115611a035760405162461bcd60e51b815260206004820152600b60248201527f45617379205768616c65790000000000000000000000000000000000000000006044820152606401610b50565b611b64565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526015602052604090205460ff168015611a61575073ffffffffffffffffffffffffffffffffffffffff83165f9081526014602052604090205460ff16155b15611ab857600754811115611a035760405162461bcd60e51b815260206004820152600a60248201527f456173792064756d7079000000000000000000000000000000000000000000006044820152606401610b50565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526014602052604090205460ff16611b645760085473ffffffffffffffffffffffffffffffffffffffff83165f90815260208190526040902054611b169083612a1a565b1115611b645760405162461bcd60e51b815260206004820152600b60248201527f45617379205768616c65790000000000000000000000000000000000000000006044820152606401610b50565b305f908152602081905260409020547f000000000000000000000000000000000000000000000000000000000000000081108015908190611bac5750600954610100900460ff165b8015611bd3575060055474010000000000000000000000000000000000000000900460ff16155b8015611c04575073ffffffffffffffffffffffffffffffffffffffff85165f9081526015602052604090205460ff16155b8015611c35575073ffffffffffffffffffffffffffffffffffffffff85165f9081526013602052604090205460ff16155b8015611c66575073ffffffffffffffffffffffffffffffffffffffff84165f9081526013602052604090205460ff16155b15611cdb57600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055611cb261227e565b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555b60055473ffffffffffffffffffffffffffffffffffffffff86165f9081526013602052604090205460ff74010000000000000000000000000000000000000000909204821615911680611d52575073ffffffffffffffffffffffffffffffffffffffff85165f9081526013602052604090205460ff165b15611d5a57505f5b5f8115611ef05773ffffffffffffffffffffffffffffffffffffffff86165f9081526015602052604090205460ff168015611d9657505f600e54115b15611e1c576064600e5486611dab9190612a2d565b611db59190612a76565b9050600e5460105482611dc89190612a2d565b611dd29190612a76565b60125f828254611de29190612a1a565b9091555050600e54600f54611df79083612a2d565b611e019190612a76565b60115f828254611e119190612a1a565b90915550611ed29050565b73ffffffffffffffffffffffffffffffffffffffff87165f9081526015602052604090205460ff168015611e5157505f600b54115b15611ed2576064600b5486611e669190612a2d565b611e709190612a76565b9050600b54600d5482611e839190612a2d565b611e8d9190612a76565b60125f828254611e9d9190612a1a565b9091555050600b54600c54611eb29083612a2d565b611ebc9190612a76565b60115f828254611ecc9190612a1a565b90915550505b8015611ee357611ee387308361205f565b611eed8186612aae565b94505b611efb87878761205f565b50505050505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610a265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b50565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b73ffffffffffffffffffffffffffffffffffffffff82165f8181526015602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b73ffffffffffffffffffffffffffffffffffffffff83166120e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b50565b73ffffffffffffffffffffffffffffffffffffffff82166121715760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b50565b73ffffffffffffffffffffffffffffffffffffffff83165f908152602081905260409020548181101561220c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610b50565b73ffffffffffffffffffffffffffffffffffffffff8481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361101e565b305f9081526020819052604081205490505f6011546012546122a09190612a1a565b90505f8215806122ae575081155b156122b857505050565b6122e37f00000000000000000000000000000000000000000000000000000000000000006014612a2d565b831115612318576123157f00000000000000000000000000000000000000000000000000000000000000006014612a2d565b92505b5f6002836012548661232a9190612a2d565b6123349190612a76565b61233e9190612a76565b90505f61234b8286612aae565b9050476123578261247a565b5f6123628247612aae565b90505f60026012546123749190612a76565b61237e9088612aae565b60115461238b9084612a2d565b6123959190612a76565b90505f6123a28284612aae565b90505f861180156123b257505f81115b15612405576123c18682612697565b601254604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b5f6012819055601181905560065460405173ffffffffffffffffffffffffffffffffffffffff9091169147919081818185875af1925050503d805f8114612467576040519150601f19603f3d011682016040523d82523d5f602084013e61246c565b606091505b505050505050505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106124ad576124ad612ac1565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125749190612aee565b8160018151811061258757612587612ac1565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506125ec307f000000000000000000000000000000000000000000000000000000000000000084611328565b6040517f791ac94700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906126669085905f90869030904290600401612b09565b5f604051808303815f87803b15801561267d575f80fd5b505af115801561268f573d5f803e3d5ffd5b505050505050565b6126c2307f000000000000000000000000000000000000000000000000000000000000000084611328565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061272260055473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156127ad573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906127d29190612b92565b5050505050565b5f6020808352835180828501525f5b81811015612804578581018301518582016040015282016127e8565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff81168114611325575f80fd5b5f8060408385031215612874575f80fd5b823561287f81612842565b946020939093013593505050565b5f6020828403121561289d575f80fd5b81356128a881612842565b9392505050565b5f805f606084860312156128c1575f80fd5b83356128cc81612842565b925060208401356128dc81612842565b929592945050506040919091013590565b5f805f805f8060c08789031215612902575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b8015158114611325575f80fd5b5f806040838503121561294a575f80fd5b823561295581612842565b915060208301356129658161292c565b809150509250929050565b5f8060408385031215612981575f80fd5b823561298c81612842565b9150602083013561296581612842565b600181811c908216806129b057607f821691505b6020821081036129e7577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156109a1576109a16129ed565b80820281158282048414176109a1576109a16129ed565b5f60208284031215612a54575f80fd5b5051919050565b5f60208284031215612a6b575f80fd5b81516128a88161292c565b5f82612aa9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b818103818111156109a1576109a16129ed565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215612afe575f80fd5b81516128a881612842565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612b6457845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101612b32565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b5f805f60608486031215612ba4575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212201ad3a025dedb1de019b5d2375d7180ac4ffcd9fc063e49867682a5e9f6d4f24264736f6c63430008140033
Deployed Bytecode
0x6080604052600436106102da575f3560e01c80637ca8448a1161017b578063c8c8ebe4116100d1578063e7563f3f11610087578063f637434211610062578063f637434214610890578063f8b45b05146108a5578063fe575a87146108ba575f80fd5b8063e7563f3f1461083d578063f11a24d31461085c578063f2fde38b14610871575f80fd5b8063dd62ed3e116100b7578063dd62ed3e1461079a578063e19b2823146107eb578063e2f456051461080a575f80fd5b8063c8c8ebe414610770578063d85ba06314610785575f80fd5b8063a457c2d711610131578063bbc0c7421161010c578063bbc0c74214610719578063bc205ad314610732578063c024666814610751575f80fd5b8063a457c2d7146106ad578063a9059cbb146106cc578063b62496f5146106eb575f80fd5b80638da5cb5b116101615780638da5cb5b1461065057806395d89b411461067a5780639a7a23d61461068e575f80fd5b80637ca8448a1461061d5780638a8c523c1461063c575f80fd5b806339509351116102305780636ddd1713116101e657806371678bb4116101c157806371678bb4146105c05780637571336a146105df57806375e3661e146105fe575f80fd5b80636ddd17131461054b57806370a0823114610569578063715018a6146105aa575f80fd5b806349bd5a5e1161021657806349bd5a5e146104bf5780634fbee193146104f25780636a486a8e14610536575f80fd5b80633950935114610474578063430bf08a14610493575f80fd5b806318160ddd1161029057806323b872dd1161026b57806323b872dd1461042557806324b9f3c114610444578063313ce56714610459575f80fd5b806318160ddd146103e757806319eab042146103fb5780631a8145bb14610410575f80fd5b806310d5de53116102c057806310d5de531461033e578063156c2f351461036c5780631694505e1461038f575f80fd5b806306fdde03146102e5578063095ea7b31461030f575f80fd5b366102e157005b5f80fd5b3480156102f0575f80fd5b506102f96108fe565b60405161030691906127d9565b60405180910390f35b34801561031a575f80fd5b5061032e610329366004612863565b61098e565b6040519015158152602001610306565b348015610349575f80fd5b5061032e61035836600461288d565b60146020525f908152604090205460ff1681565b348015610377575f80fd5b50610381600c5481565b604051908152602001610306565b34801561039a575f80fd5b506103c27f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610306565b3480156103f2575f80fd5b50600254610381565b348015610406575f80fd5b50610381600f5481565b34801561041b575f80fd5b5061038160125481565b348015610430575f80fd5b5061032e61043f3660046128af565b6109a7565b34801561044f575f80fd5b5061038160115481565b348015610464575f80fd5b5060405160128152602001610306565b34801561047f575f80fd5b5061032e61048e366004612863565b6109ca565b34801561049e575f80fd5b506006546103c29073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104ca575f80fd5b506103c27f000000000000000000000000ec19d512f6ea6de5ac0c754dc656a05bee5f55cd81565b3480156104fd575f80fd5b5061032e61050c36600461288d565b73ffffffffffffffffffffffffffffffffffffffff165f9081526013602052604090205460ff1690565b348015610541575f80fd5b50610381600e5481565b348015610556575f80fd5b5060095461032e90610100900460ff1681565b348015610574575f80fd5b5061038161058336600461288d565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b3480156105b5575f80fd5b506105be610a15565b005b3480156105cb575f80fd5b506105be6105da3660046128ed565b610a28565b3480156105ea575f80fd5b506105be6105f9366004612939565b610a90565b348015610609575f80fd5b506105be61061836600461288d565b610aed565b348015610628575f80fd5b506105be61063736600461288d565b610ba4565b348015610647575f80fd5b506105be610c77565b34801561065b575f80fd5b5060055473ffffffffffffffffffffffffffffffffffffffff166103c2565b348015610685575f80fd5b506102f9610cad565b348015610699575f80fd5b506105be6106a8366004612939565b610cbc565b3480156106b8575f80fd5b5061032e6106c7366004612863565b610d69565b3480156106d7575f80fd5b5061032e6106e6366004612863565b610e1f565b3480156106f6575f80fd5b5061032e61070536600461288d565b60156020525f908152604090205460ff1681565b348015610724575f80fd5b5060095461032e9060ff1681565b34801561073d575f80fd5b506105be61074c366004612970565b610e2c565b34801561075c575f80fd5b506105be61076b366004612939565b611024565b34801561077b575f80fd5b5061038160075481565b348015610790575f80fd5b50610381600b5481565b3480156107a5575f80fd5b506103816107b4366004612970565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b3480156107f6575f80fd5b506105be61080536600461288d565b6110b5565b348015610815575f80fd5b506103817f000000000000000000000000000000000000000000000a968163f0a57b40000081565b348015610848575f80fd5b506105be61085736600461288d565b61123c565b348015610867575f80fd5b50610381600d5481565b34801561087c575f80fd5b506105be61088b36600461288d565b61128b565b34801561089b575f80fd5b5061038160105481565b3480156108b0575f80fd5b5061038160085481565b3480156108c5575f80fd5b5061032e6108d436600461288d565b73ffffffffffffffffffffffffffffffffffffffff165f908152600a602052604090205460ff1690565b60606003805461090d9061299c565b80601f01602080910402602001604051908101604052809291908181526020018280546109399061299c565b80156109845780601f1061095b57610100808354040283529160200191610984565b820191905f5260205f20905b81548152906001019060200180831161096757829003601f168201915b5050505050905090565b5f3361099b818585611328565b60019150505b92915050565b5f336109b48582856114a6565b6109bf85858561155c565b506001949350505050565b335f81815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061099b9082908690610a10908790612a1a565b611328565b610a1d611f04565b610a265f611f6b565b565b610a30611f04565b610a4286670de0b6b3a7640000612a2d565b600755610a5785670de0b6b3a7640000612a2d565b600855600c849055600d829055610a6e8285612a1a565b600b55600f8390556010819055610a858184612a1a565b600e55505050505050565b610a98611f04565b73ffffffffffffffffffffffffffffffffffffffff919091165f90815260146020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60065473ffffffffffffffffffffffffffffffffffffffff163314610b595760405162461bcd60e51b815260206004820152600d60248201527f4e6f7420746865205661756c740000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff165f908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60065473ffffffffffffffffffffffffffffffffffffffff163314610c0b5760405162461bcd60e51b815260206004820152600d60248201527f4e6f7420746865205661756c74000000000000000000000000000000000000006044820152606401610b50565b5f8173ffffffffffffffffffffffffffffffffffffffff16476040515f6040518083038185875af1925050503d805f8114610c61576040519150601f19603f3d011682016040523d82523d5f602084013e610c66565b606091505b5050905080610c73575f80fd5b5050565b610c7f611f04565b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016610101179055565b60606004805461090d9061299c565b610cc4611f04565b7f000000000000000000000000ec19d512f6ea6de5ac0c754dc656a05bee5f55cd73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d5f5760405162461bcd60e51b815260206004820152601f60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d006044820152606401610b50565b610c738282611fe1565b335f81815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610e125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610b50565b6109bf8286868403611328565b5f3361099b81858561155c565b60065473ffffffffffffffffffffffffffffffffffffffff163314610e935760405162461bcd60e51b815260206004820152600d60248201527f4e6f7420746865205661756c74000000000000000000000000000000000000006044820152606401610b50565b73ffffffffffffffffffffffffffffffffffffffff8216610ef65760405162461bcd60e51b815260206004820152600c60248201527f6e756c6c206164647265737300000000000000000000000000000000000000006044820152606401610b50565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610f60573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f849190612a44565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af1158015610ffa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101e9190612a5b565b50505050565b61102c611f04565b73ffffffffffffffffffffffffffffffffffffffff82165f8181526013602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60065473ffffffffffffffffffffffffffffffffffffffff16331461111c5760405162461bcd60e51b815260206004820152600d60248201527f4e6f7420746865205661756c74000000000000000000000000000000000000006044820152606401610b50565b7f000000000000000000000000ec19d512f6ea6de5ac0c754dc656a05bee5f55cd73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156111a2575073ffffffffffffffffffffffffffffffffffffffff8116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b6111ee5760405162461bcd60e51b815260206004820152601460248201527f57746620796f7520747279696e20746f20646f3f0000000000000000000000006044820152606401610b50565b73ffffffffffffffffffffffffffffffffffffffff165f908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b611244611f04565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611293611f04565b73ffffffffffffffffffffffffffffffffffffffff811661131c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b50565b61132581611f6b565b50565b73ffffffffffffffffffffffffffffffffffffffff83166113b05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b50565b73ffffffffffffffffffffffffffffffffffffffff82166114395760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610b50565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461101e578181101561154f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b50565b61101e8484848403611328565b73ffffffffffffffffffffffffffffffffffffffff83166115e55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b50565b73ffffffffffffffffffffffffffffffffffffffff821661166e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b50565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600a602052604090205460ff16156116e35760405162461bcd60e51b815260206004820152601260248201527f53656e64657220626c61636b6c697374656400000000000000000000000000006044820152606401610b50565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600a602052604090205460ff16156117585760405162461bcd60e51b815260206004820152601460248201527f526563656976657220626c61636b6c69737465640000000000000000000000006044820152606401610b50565b805f0361176f5761176a83835f61205f565b505050565b60055473ffffffffffffffffffffffffffffffffffffffff8481169116148015906117b5575060055473ffffffffffffffffffffffffffffffffffffffff838116911614155b80156117d6575073ffffffffffffffffffffffffffffffffffffffff821615155b80156117fa575073ffffffffffffffffffffffffffffffffffffffff821661dead14155b8015611821575060055474010000000000000000000000000000000000000000900460ff16155b15611b645760095460ff166118d35773ffffffffffffffffffffffffffffffffffffffff83165f9081526013602052604090205460ff1680611887575073ffffffffffffffffffffffffffffffffffffffff82165f9081526013602052604090205460ff165b6118d35760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610b50565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526015602052604090205460ff16801561192c575073ffffffffffffffffffffffffffffffffffffffff82165f9081526014602052604090205460ff16155b15611a08576007548111156119835760405162461bcd60e51b815260206004820152601d60248201527f4c6561766520736f6d6520666f72207468652072657374206f662075730000006044820152606401610b50565b60085473ffffffffffffffffffffffffffffffffffffffff83165f908152602081905260409020546119b59083612a1a565b1115611a035760405162461bcd60e51b815260206004820152600b60248201527f45617379205768616c65790000000000000000000000000000000000000000006044820152606401610b50565b611b64565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526015602052604090205460ff168015611a61575073ffffffffffffffffffffffffffffffffffffffff83165f9081526014602052604090205460ff16155b15611ab857600754811115611a035760405162461bcd60e51b815260206004820152600a60248201527f456173792064756d7079000000000000000000000000000000000000000000006044820152606401610b50565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526014602052604090205460ff16611b645760085473ffffffffffffffffffffffffffffffffffffffff83165f90815260208190526040902054611b169083612a1a565b1115611b645760405162461bcd60e51b815260206004820152600b60248201527f45617379205768616c65790000000000000000000000000000000000000000006044820152606401610b50565b305f908152602081905260409020547f000000000000000000000000000000000000000000000a968163f0a57b40000081108015908190611bac5750600954610100900460ff165b8015611bd3575060055474010000000000000000000000000000000000000000900460ff16155b8015611c04575073ffffffffffffffffffffffffffffffffffffffff85165f9081526015602052604090205460ff16155b8015611c35575073ffffffffffffffffffffffffffffffffffffffff85165f9081526013602052604090205460ff16155b8015611c66575073ffffffffffffffffffffffffffffffffffffffff84165f9081526013602052604090205460ff16155b15611cdb57600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055611cb261227e565b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555b60055473ffffffffffffffffffffffffffffffffffffffff86165f9081526013602052604090205460ff74010000000000000000000000000000000000000000909204821615911680611d52575073ffffffffffffffffffffffffffffffffffffffff85165f9081526013602052604090205460ff165b15611d5a57505f5b5f8115611ef05773ffffffffffffffffffffffffffffffffffffffff86165f9081526015602052604090205460ff168015611d9657505f600e54115b15611e1c576064600e5486611dab9190612a2d565b611db59190612a76565b9050600e5460105482611dc89190612a2d565b611dd29190612a76565b60125f828254611de29190612a1a565b9091555050600e54600f54611df79083612a2d565b611e019190612a76565b60115f828254611e119190612a1a565b90915550611ed29050565b73ffffffffffffffffffffffffffffffffffffffff87165f9081526015602052604090205460ff168015611e5157505f600b54115b15611ed2576064600b5486611e669190612a2d565b611e709190612a76565b9050600b54600d5482611e839190612a2d565b611e8d9190612a76565b60125f828254611e9d9190612a1a565b9091555050600b54600c54611eb29083612a2d565b611ebc9190612a76565b60115f828254611ecc9190612a1a565b90915550505b8015611ee357611ee387308361205f565b611eed8186612aae565b94505b611efb87878761205f565b50505050505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610a265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b50565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b73ffffffffffffffffffffffffffffffffffffffff82165f8181526015602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b73ffffffffffffffffffffffffffffffffffffffff83166120e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b50565b73ffffffffffffffffffffffffffffffffffffffff82166121715760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b50565b73ffffffffffffffffffffffffffffffffffffffff83165f908152602081905260409020548181101561220c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610b50565b73ffffffffffffffffffffffffffffffffffffffff8481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361101e565b305f9081526020819052604081205490505f6011546012546122a09190612a1a565b90505f8215806122ae575081155b156122b857505050565b6122e37f000000000000000000000000000000000000000000000a968163f0a57b4000006014612a2d565b831115612318576123157f000000000000000000000000000000000000000000000a968163f0a57b4000006014612a2d565b92505b5f6002836012548661232a9190612a2d565b6123349190612a76565b61233e9190612a76565b90505f61234b8286612aae565b9050476123578261247a565b5f6123628247612aae565b90505f60026012546123749190612a76565b61237e9088612aae565b60115461238b9084612a2d565b6123959190612a76565b90505f6123a28284612aae565b90505f861180156123b257505f81115b15612405576123c18682612697565b601254604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b5f6012819055601181905560065460405173ffffffffffffffffffffffffffffffffffffffff9091169147919081818185875af1925050503d805f8114612467576040519150601f19603f3d011682016040523d82523d5f602084013e61246c565b606091505b505050505050505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106124ad576124ad612ac1565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125749190612aee565b8160018151811061258757612587612ac1565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506125ec307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611328565b6040517f791ac94700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906126669085905f90869030904290600401612b09565b5f604051808303815f87803b15801561267d575f80fd5b505af115801561268f573d5f803e3d5ffd5b505050505050565b6126c2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611328565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061272260055473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156127ad573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906127d29190612b92565b5050505050565b5f6020808352835180828501525f5b81811015612804578581018301518582016040015282016127e8565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff81168114611325575f80fd5b5f8060408385031215612874575f80fd5b823561287f81612842565b946020939093013593505050565b5f6020828403121561289d575f80fd5b81356128a881612842565b9392505050565b5f805f606084860312156128c1575f80fd5b83356128cc81612842565b925060208401356128dc81612842565b929592945050506040919091013590565b5f805f805f8060c08789031215612902575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b8015158114611325575f80fd5b5f806040838503121561294a575f80fd5b823561295581612842565b915060208301356129658161292c565b809150509250929050565b5f8060408385031215612981575f80fd5b823561298c81612842565b9150602083013561296581612842565b600181811c908216806129b057607f821691505b6020821081036129e7577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156109a1576109a16129ed565b80820281158282048414176109a1576109a16129ed565b5f60208284031215612a54575f80fd5b5051919050565b5f60208284031215612a6b575f80fd5b81516128a88161292c565b5f82612aa9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b818103818111156109a1576109a16129ed565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215612afe575f80fd5b81516128a881612842565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612b6457845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101612b32565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b5f805f60608486031215612ba4575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212201ad3a025dedb1de019b5d2375d7180ac4ffcd9fc063e49867682a5e9f6d4f24264736f6c63430008140033
Deployed Bytecode Sourcemap
27792:11092:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12068:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14419:201;;;;;;;;;;-1:-1:-1;14419:201:0;;;;;:::i;:::-;;:::i;:::-;;;1270:14:1;;1263:22;1245:41;;1233:2;1218:18;14419:201:0;1105:187:1;28633:63:0;;;;;;;;;;-1:-1:-1;28633:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28301:26;;;;;;;;;;;;;;;;;;;1695:25:1;;;1683:2;1668:18;28301:26:0;1549:177:1;27839:51:0;;;;;;;;;;;;;;;;;;1934:42:1;1922:55;;;1904:74;;1892:2;1877:18;27839:51:0;1731:253:1;13188:108:0;;;;;;;;;;-1:-1:-1;13276:12:0;;13188:108;;28402:27;;;;;;;;;;;;;;;;28509:30;;;;;;;;;;;;;;;;15200:295;;;;;;;;;;-1:-1:-1;15200:295:0;;;;;:::i;:::-;;:::i;28473:29::-;;;;;;;;;;;;;;;;13030:93;;;;;;;;;;-1:-1:-1;13030:93:0;;13113:2;2592:36:1;;2580:2;2565:18;13030:93:0;2450:184:1;15904:238:0;;;;;;;;;;-1:-1:-1;15904:238:0;;;;;:::i;:::-;;:::i;27972:27::-;;;;;;;;;;-1:-1:-1;27972:27:0;;;;;;;;27897:38;;;;;;;;;;;;;;;32242:126;;;;;;;;;;-1:-1:-1;32242:126:0;;;;;:::i;:::-;32332:28;;32308:4;32332:28;;;:19;:28;;;;;;;;;32242:126;28370:25;;;;;;;;;;;;;;;;28164:31;;;;;;;;;;-1:-1:-1;28164:31:0;;;;;;;;;;;13359:127;;;;;;;;;;-1:-1:-1;13359:127:0;;;;;:::i;:::-;13460:18;;13433:7;13460:18;;;;;;;;;;;;13359:127;5985:103;;;;;;;;;;;;;:::i;:::-;;30933:539;;;;;;;;;;-1:-1:-1;30933:539:0;;;;;:::i;:::-;;:::i;31480:144::-;;;;;;;;;;-1:-1:-1;31480:144:0;;;;;:::i;:::-;;:::i;38781:98::-;;;;;;;;;;-1:-1:-1;38781:98:0;;;;;:::i;:::-;;:::i;38335:166::-;;;;;;;;;;-1:-1:-1;38335:166:0;;;;;:::i;:::-;;:::i;30703:112::-;;;;;;;;;;;;;:::i;5337:87::-;;;;;;;;;;-1:-1:-1;5410:6:0;;;;5337:87;;12287:104;;;;;;;;;;;;;:::i;31822:218::-;;;;;;;;;;-1:-1:-1;31822:218:0;;;;;:::i;:::-;;:::i;16645:436::-;;;;;;;;;;-1:-1:-1;16645:436:0;;;;;:::i;:::-;;:::i;13692:193::-;;;;;;;;;;-1:-1:-1;13692:193:0;;;;;:::i;:::-;;:::i;28736:57::-;;;;;;;;;;-1:-1:-1;28736:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28124:33;;;;;;;;;;-1:-1:-1;28124:33:0;;;;;;;;38056:271;;;;;;;;;;-1:-1:-1;38056:271:0;;;;;:::i;:::-;;:::i;31632:182::-;;;;;;;;;;-1:-1:-1;31632:182:0;;;;;:::i;:::-;;:::i;28008:32::-;;;;;;;;;;;;;;;;28270:24;;;;;;;;;;;;;;;;13948:151;;;;;;;;;;-1:-1:-1;13948:151:0;;;;;:::i;:::-;14064:18;;;;14037:7;14064:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13948:151;38509:264;;;;;;;;;;-1:-1:-1;38509:264:0;;;;;:::i;:::-;;:::i;28047:40::-;;;;;;;;;;;;;;;30823:100;;;;;;;;;;-1:-1:-1;30823:100:0;;;;;:::i;:::-;;:::i;28334:27::-;;;;;;;;;;;;;;;;6243:201;;;;;;;;;;-1:-1:-1;6243:201:0;;;;;:::i;:::-;;:::i;28436:28::-;;;;;;;;;;;;;;;;28094:21;;;;;;;;;;;;;;;;32376:113;;;;;;;;;;-1:-1:-1;32376:113:0;;;;;:::i;:::-;32461:20;;32437:4;32461:20;;;:11;:20;;;;;;;;;32376:113;12068:100;12122:13;12155:5;12148:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12068:100;:::o;14419:201::-;14502:4;4126:10;14558:32;4126:10;14574:7;14583:6;14558:8;:32::i;:::-;14608:4;14601:11;;;14419:201;;;;;:::o;15200:295::-;15331:4;4126:10;15389:38;15405:4;4126:10;15420:6;15389:15;:38::i;:::-;15438:27;15448:4;15454:2;15458:6;15438:9;:27::i;:::-;-1:-1:-1;15483:4:0;;15200:295;-1:-1:-1;;;;15200:295:0:o;15904:238::-;4126:10;15992:4;14064:18;;;:11;:18;;;;;;;;;:27;;;;;;;;;;15992:4;;4126:10;16048:64;;4126:10;;14064:27;;16073:38;;16101:10;;16073:38;:::i;:::-;16048:8;:64::i;5985:103::-;5223:13;:11;:13::i;:::-;6050:30:::1;6077:1;6050:18;:30::i;:::-;5985:103::o:0;30933:539::-;5223:13;:11;:13::i;:::-;31117:17:::1;:9:::0;31130:4:::1;31117:17;:::i;:::-;31094:20;:40:::0;31158:17:::1;:10:::0;31171:4:::1;31158:17;:::i;:::-;31146:9;:29:::0;31193:14:::1;:26:::0;;;31231:15:::1;:29:::0;;;31287:32:::1;31249:11:::0;31210:9;31287:32:::1;:::i;:::-;31272:12;:47:::0;31332:15:::1;:28:::0;;;31372:16:::1;:30:::0;;;31430:34:::1;31391:11:::0;31350:10;31430:34:::1;:::i;:::-;31414:13;:50:::0;-1:-1:-1;;;;;;30933:539:0:o;31480:144::-;5223:13;:11;:13::i;:::-;31570:39:::1;::::0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;31480:144::o;38781:98::-;37982:12;;:28;:12;4126:10;37982:28;37974:54;;;;-1:-1:-1;;;37974:54:0;;5437:2:1;37974:54:0;;;5419:21:1;5476:2;5456:18;;;5449:30;5515:15;5495:18;;;5488:43;5548:18;;37974:54:0;;;;;;;;;38845:18:::1;;38866:5;38845:18:::0;;;:11:::1;:18;::::0;;;;:26;;;::::1;::::0;;38781:98::o;38335:166::-;37982:12;;:28;:12;4126:10;37982:28;37974:54;;;;-1:-1:-1;;;37974:54:0;;5437:2:1;37974:54:0;;;5419:21:1;5476:2;5456:18;;;5449:30;5515:15;5495:18;;;5488:43;5548:18;;37974:54:0;5235:337:1;37974:54:0;38405:12:::1;38423:3;:8;;38439:21;38423:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38404:62;;;38485:7;38477:16;;;::::0;::::1;;38393:108;38335:166:::0;:::o;30703:112::-;5223:13;:11;:13::i;:::-;30758::::1;:20:::0;;30789:18;;;;;;30703:112::o;12287:104::-;12343:13;12376:7;12369:14;;;;;:::i;31822:218::-;5223:13;:11;:13::i;:::-;31931::::1;31923:21;;:4;:21;;::::0;31915:65:::1;;;::::0;-1:-1:-1;;;31915:65:0;;5989:2:1;31915:65:0::1;::::0;::::1;5971:21:1::0;6028:2;6008:18;;;6001:30;6067:33;6047:18;;;6040:61;6118:18;;31915:65:0::1;5787:355:1::0;31915:65:0::1;31991:41;32020:4;32026:5;31991:28;:41::i;16645:436::-:0;4126:10;16738:4;14064:18;;;:11;:18;;;;;;;;;:27;;;;;;;;;;16738:4;;4126:10;16885:15;16865:16;:35;;16857:85;;;;-1:-1:-1;;;16857:85:0;;6349:2:1;16857:85:0;;;6331:21:1;6388:2;6368:18;;;6361:30;6427:34;6407:18;;;6400:62;6498:7;6478:18;;;6471:35;6523:19;;16857:85:0;6147:401:1;16857:85:0;16978:60;16987:5;16994:7;17022:15;17003:16;:34;16978:8;:60::i;13692:193::-;13771:4;4126:10;13827:28;4126:10;13844:2;13848:6;13827:9;:28::i;38056:271::-;37982:12;;:28;:12;4126:10;37982:28;37974:54;;;;-1:-1:-1;;;37974:54:0;;5437:2:1;37974:54:0;;;5419:21:1;5476:2;5456:18;;;5449:30;5515:15;5495:18;;;5488:43;5548:18;;37974:54:0;5235:337:1;37974:54:0;38151:20:::1;::::0;::::1;38143:45;;;::::0;-1:-1:-1;;;38143:45:0;;6755:2:1;38143:45:0::1;::::0;::::1;6737:21:1::0;6794:2;6774:18;;;6767:30;6833:14;6813:18;;;6806:42;6865:18;;38143:45:0::1;6553:336:1::0;38143:45:0::1;38223:39;::::0;;;;38256:4:::1;38223:39;::::0;::::1;1904:74:1::0;38199:21:0::1;::::0;38223:24:::1;::::0;::::1;::::0;::::1;::::0;1877:18:1;;38223:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38273:46;::::0;;;;:23:::1;7275:55:1::0;;;38273:46:0::1;::::0;::::1;7257:74:1::0;7347:18;;;7340:34;;;38199:63:0;;-1:-1:-1;38273:23:0;;::::1;::::0;::::1;::::0;7230:18:1;;38273:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38132:195;38056:271:::0;;:::o;31632:182::-;5223:13;:11;:13::i;:::-;31717:28:::1;::::0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;31772:34;;1245:41:1;;;31772:34:0::1;::::0;1218:18:1;31772:34:0::1;;;;;;;31632:182:::0;;:::o;38509:264::-;37982:12;;:28;:12;4126:10;37982:28;37974:54;;;;-1:-1:-1;;;37974:54:0;;5437:2:1;37974:54:0;;;5419:21:1;5476:2;5456:18;;;5449:30;5515:15;5495:18;;;5488:43;5548:18;;37974:54:0;5235:337:1;37974:54:0;38617:13:::1;38596:35;;:9;:35;;;;:103;;;;-1:-1:-1::0;38635:64:0::1;::::0;::::1;38656:42;38635:64;;38596:103;38588:137;;;::::0;-1:-1:-1;;;38588:137:0;;7837:2:1;38588:137:0::1;::::0;::::1;7819:21:1::0;7876:2;7856:18;;;7849:30;7915:22;7895:18;;;7888:50;7955:18;;38588:137:0::1;7635:344:1::0;38588:137:0::1;38736:22;;;::::0;;;:11:::1;:22;::::0;;;;:29;;;::::1;38761:4;38736:29;::::0;;38509:264::o;30823:100::-;5223:13;:11;:13::i;:::-;30892:12:::1;:23:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;30823:100::o;6243:201::-;5223:13;:11;:13::i;:::-;6332:22:::1;::::0;::::1;6324:73;;;::::0;-1:-1:-1;;;6324:73:0;;8186:2:1;6324:73:0::1;::::0;::::1;8168:21:1::0;8225:2;8205:18;;;8198:30;8264:34;8244:18;;;8237:62;8335:8;8315:18;;;8308:36;8361:19;;6324:73:0::1;7984:402:1::0;6324:73:0::1;6408:28;6427:8;6408:18;:28::i;:::-;6243:201:::0;:::o;20672:380::-;20808:19;;;20800:68;;;;-1:-1:-1;;;20800:68:0;;8593:2:1;20800:68:0;;;8575:21:1;8632:2;8612:18;;;8605:30;8671:34;8651:18;;;8644:62;8742:6;8722:18;;;8715:34;8766:19;;20800:68:0;8391:400:1;20800:68:0;20887:21;;;20879:68;;;;-1:-1:-1;;;20879:68:0;;8998:2:1;20879:68:0;;;8980:21:1;9037:2;9017:18;;;9010:30;9076:34;9056:18;;;9049:62;9147:4;9127:18;;;9120:32;9169:19;;20879:68:0;8796:398:1;20879:68:0;20960:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21012:32;;1695:25:1;;;21012:32:0;;1668:18:1;21012:32:0;;;;;;;20672:380;;;:::o;21343:453::-;14064:18;;;;21478:24;14064:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;21565:17;21545:37;;21541:248;;21627:6;21607:16;:26;;21599:68;;;;-1:-1:-1;;;21599:68:0;;9401:2:1;21599:68:0;;;9383:21:1;9440:2;9420:18;;;9413:30;9479:31;9459:18;;;9452:59;9528:18;;21599:68:0;9199:353:1;21599:68:0;21711:51;21720:5;21727:7;21755:6;21736:16;:25;21711:8;:51::i;32497:3254::-;32593:18;;;32585:68;;;;-1:-1:-1;;;32585:68:0;;9759:2:1;32585:68:0;;;9741:21:1;9798:2;9778:18;;;9771:30;9837:34;9817:18;;;9810:62;9908:7;9888:18;;;9881:35;9933:19;;32585:68:0;9557:401:1;32585:68:0;32672:16;;;32664:64;;;;-1:-1:-1;;;32664:64:0;;10165:2:1;32664:64:0;;;10147:21:1;10204:2;10184:18;;;10177:30;10243:34;10223:18;;;10216:62;10314:5;10294:18;;;10287:33;10337:19;;32664:64:0;9963:399:1;32664:64:0;32748:17;;;;;;;:11;:17;;;;;;;;32747:18;32739:48;;;;-1:-1:-1;;;32739:48:0;;10569:2:1;32739:48:0;;;10551:21:1;10608:2;10588:18;;;10581:30;10647:20;10627:18;;;10620:48;10685:18;;32739:48:0;10367:342:1;32739:48:0;32807:15;;;;;;;:11;:15;;;;;;;;32806:16;32798:48;;;;-1:-1:-1;;;32798:48:0;;10916:2:1;32798:48:0;;;10898:21:1;10955:2;10935:18;;;10928:30;10994:22;10974:18;;;10967:50;11034:18;;32798:48:0;10714:344:1;32798:48:0;32863:6;32873:1;32863:11;32859:93;;32891:28;32907:4;32913:2;32917:1;32891:15;:28::i;:::-;32497:3254;;;:::o;32859:93::-;5410:6;;;32986:15;;;5410:6;;32986:15;;;;:49;;-1:-1:-1;5410:6:0;;;33022:13;;;5410:6;;33022:13;;32986:49;:86;;;;-1:-1:-1;33056:16:0;;;;;32986:86;:128;;;;-1:-1:-1;33093:21:0;;;33107:6;33093:21;;32986:128;:158;;;;-1:-1:-1;33136:8:0;;;;;;;33135:9;32986:158;32964:1295;;;33184:13;;;;33179:223;;33256:25;;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;33285:23:0;;;;;;;:19;:23;;;;;;;;33256:52;33222:160;;;;-1:-1:-1;;;33222:160:0;;11265:2:1;33222:160:0;;;11247:21:1;11304:2;11284:18;;;11277:30;11343:24;11323:18;;;11316:52;11385:18;;33222:160:0;11063:346:1;33222:160:0;33475:31;;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;33532:35:0;;;;;;;:31;:35;;;;;;;;33531:36;33475:92;33449:799;;;33629:20;;33619:6;:30;;33610:74;;;;-1:-1:-1;;;33610:74:0;;11616:2:1;33610:74:0;;;11598:21:1;11655:2;11635:18;;;11628:30;11694:31;11674:18;;;11667:59;11743:18;;33610:74:0;11414:353:1;33610:74:0;33741:9;;13460:18;;;13433:7;13460:18;;;;;;;;;;;33715:22;;:6;:22;:::i;:::-;:35;;33707:60;;;;-1:-1:-1;;;33707:60:0;;11974:2:1;33707:60:0;;;11956:21:1;12013:2;11993:18;;;11986:30;12052:13;12032:18;;;12025:41;12083:18;;33707:60:0;11772:335:1;33707:60:0;33449:799;;;33864:29;;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;33919:37:0;;;;;;;:31;:37;;;;;;;;33918:38;33864:92;33838:410;;;34019:20;;34009:6;:30;;33999:76;;;;-1:-1:-1;;;33999:76:0;;12314:2:1;33999:76:0;;;12296:21:1;12353:2;12333:18;;;12326:30;12392:12;12372:18;;;12365:40;12422:18;;33999:76:0;12112:334:1;33838:410:0;34106:35;;;;;;;:31;:35;;;;;;;;34101:147;;34202:9;;13460:18;;;13433:7;13460:18;;;;;;;;;;;34176:22;;:6;:22;:::i;:::-;:35;;34166:62;;;;-1:-1:-1;;;34166:62:0;;11974:2:1;34166:62:0;;;11956:21:1;12013:2;11993:18;;;11986:30;12052:13;12032:18;;;12025:41;12083:18;;34166:62:0;11772:335:1;34166:62:0;34317:4;34271:25;13460:18;;;;;;;;;;;34375;34351:42;;;;;;;34410:22;;-1:-1:-1;34421:11:0;;;;;;;34410:22;:35;;;;-1:-1:-1;34437:8:0;;;;;;;34436:9;34410:35;:71;;;;-1:-1:-1;34450:31:0;;;;;;;:25;:31;;;;;;;;34449:32;34410:71;:101;;;;-1:-1:-1;34486:25:0;;;;;;;:19;:25;;;;;;;;34485:26;34410:101;:129;;;;-1:-1:-1;34516:23:0;;;;;;;:19;:23;;;;;;;;34515:24;34410:129;34406:234;;;34557:8;:15;;;;;;;;34587:10;:8;:10::i;:::-;34612:8;:16;;;;;;34406:234;34668:8;;34723:25;;;34652:12;34723:25;;;:19;:25;;;;;;34668:8;;;;;;;34667:9;;34723:25;;:52;;-1:-1:-1;34752:23:0;;;;;;;:19;:23;;;;;;;;34723:52;34719:100;;;-1:-1:-1;34802:5:0;34719:100;34831:9;34889:7;34885:813;;;34938:29;;;;;;;:25;:29;;;;;;;;:50;;;;;34987:1;34971:13;;:17;34938:50;34934:615;;;35043:3;35026:13;;35017:6;:22;;;;:::i;:::-;35016:30;;;;:::i;:::-;35009:37;;35115:13;;35095:16;;35088:4;:23;;;;:::i;:::-;35087:41;;;;:::i;:::-;35065:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;35195:13:0;;35176:15;;35169:22;;:4;:22;:::i;:::-;35168:40;;;;:::i;:::-;35147:17;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;34934:615:0;;-1:-1:-1;34934:615:0;;35267:31;;;;;;;:25;:31;;;;;;;;:51;;;;;35317:1;35302:12;;:16;35267:51;35263:286;;;35372:3;35356:12;;35347:6;:21;;;;:::i;:::-;35346:29;;;;:::i;:::-;35339:36;;35443:12;;35424:15;;35417:4;:22;;;;:::i;:::-;35416:39;;;;:::i;:::-;35394:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;35521:12:0;;35503:14;;35496:21;;:4;:21;:::i;:::-;35495:38;;;;:::i;:::-;35474:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;35263:286:0;35569:8;;35565:91;;35598:42;35614:4;35628;35635;35598:15;:42::i;:::-;35672:14;35682:4;35672:14;;:::i;:::-;;;34885:813;35710:33;35726:4;35732:2;35736:6;35710:15;:33::i;:::-;32574:3177;;;;32497:3254;;;:::o;5502:132::-;5410:6;;5566:23;5410:6;4126:10;5566:23;5558:68;;;;-1:-1:-1;;;5558:68:0;;13065:2:1;5558:68:0;;;13047:21:1;;;13084:18;;;13077:30;13143:34;13123:18;;;13116:62;13195:18;;5558:68:0;12863:356:1;6604:191:0;6697:6;;;;6714:17;;;;;;;;;;;6747:40;;6697:6;;;6714:17;6697:6;;6747:40;;6678:16;;6747:40;6667:128;6604:191;:::o;32048:186::-;32131:31;;;;;;;:25;:31;;;;;;:39;;;;;;;;;;;;;32186:40;;32131:39;;:31;32186:40;;;32048:186;;:::o;17551:840::-;17682:18;;;17674:68;;;;-1:-1:-1;;;17674:68:0;;9759:2:1;17674:68:0;;;9741:21:1;9798:2;9778:18;;;9771:30;9837:34;9817:18;;;9810:62;9908:7;9888:18;;;9881:35;9933:19;;17674:68:0;9557:401:1;17674:68:0;17761:16;;;17753:64;;;;-1:-1:-1;;;17753:64:0;;10165:2:1;17753:64:0;;;10147:21:1;10204:2;10184:18;;;10177:30;10243:34;10223:18;;;10216:62;10314:5;10294:18;;;10287:33;10337:19;;17753:64:0;9963:399:1;17753:64:0;17903:15;;;17881:19;17903:15;;;;;;;;;;;17937:21;;;;17929:72;;;;-1:-1:-1;;;17929:72:0;;13426:2:1;17929:72:0;;;13408:21:1;13465:2;13445:18;;;13438:30;13504:34;13484:18;;;13477:62;13575:8;13555:18;;;13548:36;13601:19;;17929:72:0;13224:402:1;17929:72:0;18037:15;;;;:9;:15;;;;;;;;;;;18055:20;;;18037:38;;18255:13;;;;;;;;;;:23;;;;;;18307:26;;1695:25:1;;;18255:13:0;;18307:26;;1668:18:1;18307:26:0;;;;;;;18346:37;32497:3254;36569:1333;36649:4;36608:20;13460:18;;;;;;;;;;;36608:47;;36666:22;36712:17;;36691:18;;:38;;;;:::i;:::-;36666:63;-1:-1:-1;36740:12:0;36769:20;;;:46;;-1:-1:-1;36793:22:0;;36769:46;36765:62;;;36818:7;;;36569:1333::o;36765:62::-;36861:23;:18;36882:2;36861:23;:::i;:::-;36843:15;:41;36839:93;;;36906:23;:18;36927:2;36906:23;:::i;:::-;36888:41;;36839:93;36993:20;37077:1;37057:17;37035:18;;37017:15;:36;;;;:::i;:::-;37016:58;;;;:::i;:::-;:62;;;;:::i;:::-;36993:85;-1:-1:-1;37089:23:0;37115:33;36993:85;37115:15;:33;:::i;:::-;37089:59;-1:-1:-1;37186:21:0;37220:36;37089:59;37220:16;:36::i;:::-;37269:15;37287:41;37311:17;37287:21;:41;:::i;:::-;37269:59;;37341:19;37441:1;37420:18;;:22;;;;:::i;:::-;37399:44;;:17;:44;:::i;:::-;37377:17;;37364:30;;:10;:30;:::i;:::-;37363:81;;;;:::i;:::-;37341:103;-1:-1:-1;37465:20:0;37488:27;37341:103;37488:10;:27;:::i;:::-;37465:50;;37550:1;37532:15;:19;:42;;;;;37573:1;37555:15;:19;37532:42;37528:213;;;37591:46;37604:15;37621;37591:12;:46::i;:::-;37709:18;;37657:72;;;13833:25:1;;;13889:2;13874:18;;13867:34;;;13917:18;;;13910:34;;;;37657:72:0;;;;;;13821:2:1;37657:72:0;;;37528:213;37774:1;37753:18;:22;;;37786:17;:21;;;37842:12;;37834:60;;37842:12;;;;;37868:21;;37834:60;;37774:1;37834:60;37868:21;37842:12;37834:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;36569:1333:0:o;35759:473::-;35906:16;;;35920:1;35906:16;;;;;;;;35882:21;;35906:16;;;;;;;;;;-1:-1:-1;35906:16:0;35882:40;;35951:4;35933;35938:1;35933:7;;;;;;;;:::i;:::-;;;;;;:23;;;;;;;;;;;35977:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35967:4;35972:1;35967:7;;;;;;;;:::i;:::-;;;;;;:32;;;;;;;;;;;36012:62;36029:4;36044:15;36062:11;36012:8;:62::i;:::-;36104:120;;;;;:66;:15;:66;;;;:120;;36171:11;;36184:1;;36187:4;;36201;;36207:15;;36104:120;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35811:421;35759:473;:::o;36240:321::-;36344:62;36361:4;36376:15;36394:11;36344:8;:62::i;:::-;36445:15;:31;;;36484:9;36503:4;36509:11;36522:1;36525;36528:7;5410:6;;;;;5337:87;36528:7;36445:108;;;;;;;;;;15933:42:1;16002:15;;;36445:108:0;;;15984:34:1;16034:18;;;16027:34;;;;16077:18;;;16070:34;;;;16120:18;;;16113:34;16184:15;;;16163:19;;;16156:44;36536:15:0;16216:19:1;;;16209:35;15895:19;;36445:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36240:321;;:::o;14:607:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;612:2;542:66;537:2;529:6;525:15;521:88;510:9;506:104;502:113;494:121;;;;14:607;;;;:::o;626:154::-;712:42;705:5;701:54;694:5;691:65;681:93;;770:1;767;760:12;785:315;853:6;861;914:2;902:9;893:7;889:23;885:32;882:52;;;930:1;927;920:12;882:52;969:9;956:23;988:31;1013:5;988:31;:::i;:::-;1038:5;1090:2;1075:18;;;;1062:32;;-1:-1:-1;;;785:315:1:o;1297:247::-;1356:6;1409:2;1397:9;1388:7;1384:23;1380:32;1377:52;;;1425:1;1422;1415:12;1377:52;1464:9;1451:23;1483:31;1508:5;1483:31;:::i;:::-;1533:5;1297:247;-1:-1:-1;;;1297:247:1:o;1989:456::-;2066:6;2074;2082;2135:2;2123:9;2114:7;2110:23;2106:32;2103:52;;;2151:1;2148;2141:12;2103:52;2190:9;2177:23;2209:31;2234:5;2209:31;:::i;:::-;2259:5;-1:-1:-1;2316:2:1;2301:18;;2288:32;2329:33;2288:32;2329:33;:::i;:::-;1989:456;;2381:7;;-1:-1:-1;;;2435:2:1;2420:18;;;;2407:32;;1989:456::o;2870:523::-;2974:6;2982;2990;2998;3006;3014;3067:3;3055:9;3046:7;3042:23;3038:33;3035:53;;;3084:1;3081;3074:12;3035:53;-1:-1:-1;;3107:23:1;;;3177:2;3162:18;;3149:32;;-1:-1:-1;3228:2:1;3213:18;;3200:32;;3279:2;3264:18;;3251:32;;-1:-1:-1;3330:3:1;3315:19;;3302:33;;-1:-1:-1;3382:3:1;3367:19;3354:33;;-1:-1:-1;2870:523:1;-1:-1:-1;2870:523:1:o;3398:118::-;3484:5;3477:13;3470:21;3463:5;3460:32;3450:60;;3506:1;3503;3496:12;3521:382;3586:6;3594;3647:2;3635:9;3626:7;3622:23;3618:32;3615:52;;;3663:1;3660;3653:12;3615:52;3702:9;3689:23;3721:31;3746:5;3721:31;:::i;:::-;3771:5;-1:-1:-1;3828:2:1;3813:18;;3800:32;3841:30;3800:32;3841:30;:::i;:::-;3890:7;3880:17;;;3521:382;;;;;:::o;3908:388::-;3976:6;3984;4037:2;4025:9;4016:7;4012:23;4008:32;4005:52;;;4053:1;4050;4043:12;4005:52;4092:9;4079:23;4111:31;4136:5;4111:31;:::i;:::-;4161:5;-1:-1:-1;4218:2:1;4203:18;;4190:32;4231:33;4190:32;4231:33;:::i;4301:437::-;4380:1;4376:12;;;;4423;;;4444:61;;4498:4;4490:6;4486:17;4476:27;;4444:61;4551:2;4543:6;4540:14;4520:18;4517:38;4514:218;;4588:77;4585:1;4578:88;4689:4;4686:1;4679:15;4717:4;4714:1;4707:15;4514:218;;4301:437;;;:::o;4743:184::-;4795:77;4792:1;4785:88;4892:4;4889:1;4882:15;4916:4;4913:1;4906:15;4932:125;4997:9;;;5018:10;;;5015:36;;;5031:18;;:::i;5062:168::-;5135:9;;;5166;;5183:15;;;5177:22;;5163:37;5153:71;;5204:18;;:::i;6894:184::-;6964:6;7017:2;7005:9;6996:7;6992:23;6988:32;6985:52;;;7033:1;7030;7023:12;6985:52;-1:-1:-1;7056:16:1;;6894:184;-1:-1:-1;6894:184:1:o;7385:245::-;7452:6;7505:2;7493:9;7484:7;7480:23;7476:32;7473:52;;;7521:1;7518;7511:12;7473:52;7553:9;7547:16;7572:28;7594:5;7572:28;:::i;12451:274::-;12491:1;12517;12507:189;;12552:77;12549:1;12542:88;12653:4;12650:1;12643:15;12681:4;12678:1;12671:15;12507:189;-1:-1:-1;12710:9:1;;12451:274::o;12730:128::-;12797:9;;;12818:11;;;12815:37;;;12832:18;;:::i;14144:184::-;14196:77;14193:1;14186:88;14293:4;14290:1;14283:15;14317:4;14314:1;14307:15;14333:251;14403:6;14456:2;14444:9;14435:7;14431:23;14427:32;14424:52;;;14472:1;14469;14462:12;14424:52;14504:9;14498:16;14523:31;14548:5;14523:31;:::i;14589:1026::-;14851:4;14899:3;14888:9;14884:19;14930:6;14919:9;14912:25;14956:2;14994:6;14989:2;14978:9;14974:18;14967:34;15037:3;15032:2;15021:9;15017:18;15010:31;15061:6;15096;15090:13;15127:6;15119;15112:22;15165:3;15154:9;15150:19;15143:26;;15204:2;15196:6;15192:15;15178:29;;15225:1;15235:218;15249:6;15246:1;15243:13;15235:218;;;15314:13;;15329:42;15310:62;15298:75;;15428:15;;;;15393:12;;;;15271:1;15264:9;15235:218;;;-1:-1:-1;;15521:42:1;15509:55;;;;15504:2;15489:18;;15482:83;-1:-1:-1;;;15596:3:1;15581:19;15574:35;15470:3;14589:1026;-1:-1:-1;;;14589:1026:1:o;16255:306::-;16343:6;16351;16359;16412:2;16400:9;16391:7;16387:23;16383:32;16380:52;;;16428:1;16425;16418:12;16380:52;16457:9;16451:16;16441:26;;16507:2;16496:9;16492:18;16486:25;16476:35;;16551:2;16540:9;16536:18;16530:25;16520:35;;16255:306;;;;;:::o
Swarm Source
ipfs://1ad3a025dedb1de019b5d2375d7180ac4ffcd9fc063e49867682a5e9f6d4f242
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.