ERC-20
NFT
Overview
Max Total Supply
960,557,227 NFTY
Holders
2,508 ( -0.040%)
Market
Price
$0.00 @ 0.000000 ETH (+15.65%)
Onchain Market Cap
$159,077.88
Circulating Supply Market Cap
$92,182.00
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFTY
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-26 */ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; // //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▓▒░░░░░░▒▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░▓▓▓▓▓▓▓▓▓▓▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░▒▒▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░▒▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓░░░░░░░▒▓▒░░░░░░░░░░░░ //░░░░░░░░░░░░▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▓▒░░░░░░░▓▓▓▓▒░░░░░░░░░░░ //░░░░░░░░░░░▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▒░░░░░░░▒▓▓▓▓▓▓▓░░░░░░░░░░ //░░░░░░░░░░▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓░░░░░░░░░ //░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░ //░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▒▓▓▓▓▓▓▓▓▓░░░░░░░░░░▓▓▓▓▓▓▓▓▓░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░ //░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░▓▓▓▓▓▓▓▒░░░░░░░░░░░▒▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░ //░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░▒▒▒░░░░░░░░░░░░░░░░▒▒▒▒░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░ //░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░▓▓▒░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▒░░░ //░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░▒▓▓▓▓▓▒░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░ //░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░▓▓▓▓▓▓▓▓▓░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░ //░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░▒▓▓▓▓▓▓▓▓▓▒░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░ //░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░▓▓▓▓▓▓▓▓▒░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░ //░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░▒▓▓▓▓▓░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░ //░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░▒▒▒░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▒░░░ //░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▒▓▓▓▒░░░░░░░░░░░░░░░▒▒▒▒▒░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░▒░░░ //░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░▓▓▓▓▓▓▓▒░░░░░░░░░░░▓▓▓▓▓▓▓▓░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░ //░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░▒▓▓▓▓▓▓▓▓▓░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▒░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░ //░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▒░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░ //░░░░░░░░░░▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓░░░░░░░░░ //░░░░░░░░░░░▓▓▓▓▓▓▓░░░░░░░▒▓▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▒░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓░░░░░░░░░░ //░░░░░░░░░░░░▓▓▓▓▒░░░░░░░▓▓▓▓▓▓░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▒░░░░░░░░░░░ //░░░░░░░░░░░░░▒▓░░░░░░░▒▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▒░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▓▓▓▓▓▒░░░░░░▒▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ // __ _ _ _ // _ __ / _| |_ _ _| | __ _| |__ ___ // | '_ \| |_| __| | | | |/ _` | '_ \/ __| // | | | | _| |_| |_| | | (_| | |_) \__ \ // |_| |_|_| \__|\__, |_|\__,_|_.__/|___/ // |___/ // // Name: NFTY Token // Symbol: NFTY // Decimals: 18 // Initial Supply: 509684123 NFTY // Supply Limit: 1456240353 NFTY // Emissions Limit: 88 NFTY per block // File @openzeppelin/contracts/token/ERC20/[email protected] /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] /** * @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); } // File @openzeppelin/contracts/utils/[email protected] /** * @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; } } // File @openzeppelin/contracts/token/ERC20/[email protected] /** * @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.zeppelin.solutions/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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File @openzeppelin/contracts/access/[email protected] /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/math/[email protected] // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } abstract contract AuxContract is Ownable { function cron(address rewardTo) external virtual; } contract NFTY is ERC20, Ownable { using SafeMath for *; // constants uint8 constant private DECIMALS = 18; uint256 constant public SUPPLY_LIMIT = 1456240353 * 10 ** DECIMALS; uint256 constant public INITIAL_SUPPLY = 509684123 * 10 ** DECIMALS; // amount of token per block (88 token max) uint256 constant public MAX_AMOUNT_PER_BLOCK = 88 * 10 ** DECIMALS; uint256 public amountMinedPerBlock = MAX_AMOUNT_PER_BLOCK; AuxContract auxContract; // wallets address public w1; address public w2; address public w3; address public w4; // ratios uint256 public r1; uint256 public r2; uint256 public r3; uint256 public r4; // state variables uint256 public lastBlockMined; bool public miningPaused; uint256 public amountBurned; event AlreadyMined(uint256 block); event Mined(uint256 block, uint256 amountMined, uint256 amountBurned, uint256 totalSupply, uint256 totalBurned); event EmissionsLowered(uint256 block, uint256 newAmountPerBlock); event Paused(uint256 block); event Unpaused(uint256 block); event AuthDelegated(address from, address to); event VoteDelegated(address from, address to); /// @dev Decimals override function decimals() public pure override returns (uint8){ return DECIMALS; } /// @notice Burn an amount of tokens, and increment the global amountBurned variable function burn(uint256 amount) public { _burn(_msgSender(), amount); amountBurned += amount; // add this burnAmount to amountBurned total } /** * @notice * Constructor called on contract deployment * This function mints the initial supploy to the contract deployer. * This function also initializes miningPaused to True, and lastBlockMined to the current block */ constructor() ERC20("NFTY Token", "NFTY") { _mint(msg.sender, INITIAL_SUPPLY); // initial supply lastBlockMined = block.number; // init block number miningPaused = true; } mapping (address=>address) public delegatedAuth; /// @notice Delegate wallet authentication to another address /// @param to The address to delegate authentication to function delegateAuth(address to) public { delegatedAuth[msg.sender] = to; emit AuthDelegated(msg.sender, to); } mapping (address=>address) public delegatedVote; /// @notice Delegate wallet voting to another address /// @param to The address to delegate authentication to function delegateVote(address to) public { delegatedVote[msg.sender] = to; emit VoteDelegated(msg.sender, to); } /** * @dev calculates & returns the TOTAL pending emission and its subsequent split, * based on the current stream ratios (r1,r2,r3,r4). * These values are stored & returned as amt2mine,amt1,amt2,amt3,amt4,amt2burn * If any checks fail, returns all values as 0 - `(0,0,0,0,0,0)` */ /** * @return six-element tuple of uint256's, which represent * 1. TOTAL amount to mine * 2. amount for stream wallet 1 * 3. amount for stream wallet 2 * 4. amount for stream wallet 3 * 5. amount for stream wallet 4 * 6. amount to burn */ function getAmounts() public view returns (uint256, uint256, uint256, uint256, uint256, uint256) { // Check if miningPaused OR no difference between now and lastBlockMined int256 since = int256(block.number) - int256(lastBlockMined); if (since <= 0 || miningPaused) { return (0,0,0,0,0,0); } // Determine current reward uint256 tReward = amountMinedPerBlock.mul(uint256(since)); // Check if supply limit has been reached uint256 supply = totalSupply().add(amountBurned); if (SUPPLY_LIMIT <= supply) { return (0,0,0,0,0,0); } // Ensure correct amount should be mined // If full amount is over limit, only mine the spare change if (tReward.add(supply) > SUPPLY_LIMIT) { tReward = SUPPLY_LIMIT.sub(supply); } // Check if tReward is 0 at this point if (tReward == 0) { return (0,0,0,0,0,0); } // split the stream amounts uint256 amt1 = tReward.mul(r1).div(100); uint256 amt2 = tReward.mul(r2).div(100); uint256 amt3 = tReward.mul(r3).div(100); uint256 amt4 = tReward.mul(r4).div(100); uint256 summed = amt1.add(amt2).add(amt3).add(amt4); // Burn remainder uint256 burnAmount; if (summed != tReward) { burnAmount = tReward.sub(summed); } // Verify splits add up require(tReward == burnAmount.add(amt1).add(amt2).add(amt3).add(amt4), "mismatch"); return (tReward, amt1, amt2, amt3, amt4, burnAmount); } /// @dev This function calls mineTo, but with rewardTo set as zero-address function mine() public { mineTo(address(0)); } /** * @dev If miningPaused, this function does nothing * If tokens were already mined this block, this function does nothing * If amountBurned + totalSupply >= SUPPLY_LIMIT, this function does nothing. */ /// @notice Create tokens and send down the pre-defined streams. /// @param rewardTo Which address to send reward to for mining tokens function mineTo(address rewardTo) public { if (miningPaused) { return; } // only mine once per block, maximum. // don't revert, in case called via some downstream contract if (lastBlockMined >= block.number) { emit AlreadyMined(block.number); return; } // use getAmounts() to calculate splits (uint256 amt2mine, uint256 amount1, uint256 amount2, uint256 amount3, uint256 amount4, uint256 amt2burn) = getAmounts(); if (amt2mine == 0) { return; } lastBlockMined = block.number; // transfer downstream if amount is not zero if (amount1 != 0) { _mint(w1, amount1); } if (amount2 != 0) { _mint(w2, amount2); } if (amount3 != 0) { _mint(w3, amount3); } if (amount4 != 0) { _mint(w4, amount4); } // There are tokens to burn, so add them to amt2burn // No point in burning then minting, so simply track these in global amountBurned variable if (amt2burn != 0) { amountBurned += amt2burn; } emit Mined(block.number, amt2mine, amt2burn, totalSupply(), amountBurned); // Call auxiliary contract for reward, passing rewardTo address AuxContract aux = auxContract; if (address(aux) != address(0)) { try aux.cron(rewardTo) {} catch {} } } /// @notice Assign stream wallets for token emissions (available to contract owner only) /// @notice Order matters for these addresses, as they correspond to the matching numbered ratio /// @param a1 First stream address /// @param a2 Second stream address /// @param a3 Third stream address /// @param a4 Fourth stream address function updateStreams(address a1, address a2, address a3, address a4) public onlyOwner { require(a1 != address(0), "address 1 cannot be zero address"); w1 = a1; w2 = a2; w3 = a3; w4 = a4; // disable slot if zero address (will burn in 'mine' step) if (w2 == address(0)) { r2 = 0; } if (w3 == address(0)) { r3 = 0; } if (w4 == address(0)) { r4 = 0; } } /// @notice Assign stream ratios for token emissions (available to contract owner only) /// @notice Order matters for these ratios, as they correspond to the matching numbered wallet /// @param a1 First stream ratio /// @param a2 Second stream ratio /// @param a3 Third stream ratio /// @param a4 Fourth stream ratio function updateStreamRatios(uint256 a1, uint256 a2, uint256 a3, uint256 a4) public onlyOwner { require(a1.add(a2).add(a3).add(a4) <= 100, "parts exceed 100"); if (w2 == address(0)){ require(a2 == 0, "cannot mint to zero address 2"); } if (w3 == address(0)){ require(a3 == 0, "cannot mint to zero address 3"); } if (w4 == address(0)){ require(a4 == 0, "cannot mint to zero address 4"); } r1 = a1; r2 = a2; r3 = a3; r4 = a4; } /// @notice Pause token emissions. /// @notice Mining pause does not gather reserves or burn, as lastBlockMined is reset on unpause function pauseEmissions() public onlyOwner { require(!miningPaused, "mining already paused"); miningPaused = true; emit Paused(block.number); } /// @notice Unpause token emissions, 10 blocks after function call function unpauseEmissions() public onlyOwner { require(miningPaused, "mining not paused"); lastBlockMined = block.number + 10; // re-enable after 10 blocks miningPaused = false; emit Unpaused(block.number + 10); } /// @notice Decrease token per block emissions /// @notice This function can only decrease emissions, not increase function decreaseEmissions(uint256 amount) public onlyOwner { require(amount >= 1 * 10**DECIMALS, "amount < one token"); require(amount < amountMinedPerBlock, "amount >= current emission rate"); amountMinedPerBlock = amount; emit EmissionsLowered(block.number, amount); } /// @notice Set a new AuxContract to be used for the reward mechanism in mineTo /// @param aux Contract address for new auxiliary contract function setContract(address aux) public onlyOwner { auxContract = AuxContract(aux); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"AlreadyMined","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"AuthDelegated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmountPerBlock","type":"uint256"}],"name":"EmissionsLowered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountMined","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBurned","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBurned","type":"uint256"}],"name":"Mined","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"Paused","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":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"VoteDelegated","type":"event"},{"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_AMOUNT_PER_BLOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountMinedPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"decreaseEmissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"delegateAuth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"delegateVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegatedAuth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegatedVote","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastBlockMined","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewardTo","type":"address"}],"name":"mineTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"miningPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"pauseEmissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"r1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"r2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"r3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"r4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"aux","type":"address"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseEmissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"a1","type":"uint256"},{"internalType":"uint256","name":"a2","type":"uint256"},{"internalType":"uint256","name":"a3","type":"uint256"},{"internalType":"uint256","name":"a4","type":"uint256"}],"name":"updateStreamRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a1","type":"address"},{"internalType":"address","name":"a2","type":"address"},{"internalType":"address","name":"a3","type":"address"},{"internalType":"address","name":"a4","type":"address"}],"name":"updateStreams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"w1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"w2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"w3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"w4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526012600a6200001491906200058e565b6058620000229190620006cb565b6006553480156200003257600080fd5b506040518060400160405280600a81526020017f4e46545920546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4e465459000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000b79291906200039e565b508060049080519060200190620000d09291906200039e565b505050620000f3620000e76200014d60201b60201c565b6200015560201b60201c565b62000125336012600a6200010891906200058e565b631e61299b620001199190620006cb565b6200021b60201b60201c565b436010819055506001601160006101000a81548160ff0219169083151502179055506200080d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200028e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002859062000486565b60405180910390fd5b620002a2600083836200039460201b60201c565b8060026000828254620002b69190620004d6565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200030d9190620004d6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003749190620004a8565b60405180910390a362000390600083836200039960201b60201c565b5050565b505050565b505050565b828054620003ac9062000743565b90600052602060002090601f016020900481019282620003d057600085556200041c565b82601f10620003eb57805160ff19168380011785556200041c565b828001600101855582156200041c579182015b828111156200041b578251825591602001919060010190620003fe565b5b5090506200042b91906200042f565b5090565b5b808211156200044a57600081600090555060010162000430565b5090565b60006200045d601f83620004c5565b91506200046a82620007e4565b602082019050919050565b62000480816200072c565b82525050565b60006020820190508181036000830152620004a1816200044e565b9050919050565b6000602082019050620004bf600083018462000475565b92915050565b600082825260208201905092915050565b6000620004e3826200072c565b9150620004f0836200072c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000528576200052762000779565b5b828201905092915050565b6000808291508390505b600185111562000585578086048111156200055d576200055c62000779565b5b60018516156200056d5780820291505b80810290506200057d85620007d7565b94506200053d565b94509492505050565b60006200059b826200072c565b9150620005a88362000736565b9250620005d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005df565b905092915050565b600082620005f15760019050620006c4565b81620006015760009050620006c4565b81600181146200061a576002811462000625576200065b565b6001915050620006c4565b60ff8411156200063a576200063962000779565b5b8360020a91508482111562000654576200065362000779565b5b50620006c4565b5060208310610133831016604e8410600b8410161715620006955782820a9050838111156200068f576200068e62000779565b5b620006c4565b620006a4848484600162000533565b92509050818404811115620006be57620006bd62000779565b5b81810290505b9392505050565b6000620006d8826200072c565b9150620006e5836200072c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000721576200072062000779565b5b828202905092915050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200075c57607f821691505b60208210811415620007735762000772620007a8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613e6c806200081d6000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80637546fcb511610151578063a044c987116100c3578063c18b9c1311610087578063c18b9c13146106d9578063dd62ed3e14610709578063e640f64014610739578063ea32189c14610755578063ef8e293714610785578063f2fde38b146107a157610269565b8063a044c98714610621578063a457c2d71461063f578063a9059cbb1461066f578063b31e1d4d1461069f578063b90d5b99146106bb57610269565b806386e87ae01161011557806386e87ae0146105835780638bf6e410146105a15780638c63555c146105bf5780638da5cb5b146105db57806395d89b41146105f957806399f4b2511461061757610269565b80637546fcb5146104f157806375f890ab1461050f5780637bdb72371461052b5780637e44755b1461054957806381bb642d1461056757610269565b80633906f560116101ea5780635290d773116101ae5780635290d77314610455578063533d0bce146104735780636c33bced1461048f5780636ca5b5b01461049957806370a08231146104b7578063715018a6146104e757610269565b80633906f560146103be57806339509351146103dc5780633d370b4e1461040c57806342966c681461042f5780634b8a03e81461044b57610269565b806323b872dd1161023157806323b872dd146103165780632ff2e9dc14610346578063313ce56714610364578063355fc6c9146103825780633602deb2146103a057610269565b806303cf8a201461026e57806306fdde031461028c578063095ea7b3146102aa5780630bcbbd21146102da57806318160ddd146102f8575b600080fd5b6102766107bd565b6040516102839190613008565b60405180910390f35b6102946107e3565b6040516102a19190613067565b60405180910390f35b6102c460048036038101906102bf9190612bbd565b610875565b6040516102d1919061304c565b60405180910390f35b6102e2610893565b6040516102ef9190613349565b60405180910390f35b610300610899565b60405161030d9190613349565b60405180910390f35b610330600480360381019061032b9190612b6a565b6108a3565b60405161033d919061304c565b60405180910390f35b61034e61099b565b60405161035b9190613349565b60405180910390f35b61036c6109bb565b6040516103799190613441565b60405180910390f35b61038a6109c4565b6040516103979190613349565b60405180910390f35b6103a86109ca565b6040516103b59190613008565b60405180910390f35b6103c66109f0565b6040516103d39190613349565b60405180910390f35b6103f660048036038101906103f19190612bbd565b610a10565b604051610403919061304c565b60405180910390f35b610414610abc565b604051610426969594939291906133e0565b60405180910390f35b61044960048036038101906104449190612bfd565b610dd2565b005b610453610dff565b005b61045d610f3d565b60405161046a9190613349565b60405180910390f35b61048d60048036038101906104889190612a96565b610f43565b005b6104976111ed565b005b6104a161130d565b6040516104ae9190613349565b60405180910390f35b6104d160048036038101906104cc9190612a96565b611313565b6040516104de9190613349565b60405180910390f35b6104ef61135b565b005b6104f96113e3565b6040516105069190613349565b60405180910390f35b61052960048036038101906105249190612a96565b611400565b005b6105336114c0565b6040516105409190613349565b60405180910390f35b6105516114c6565b60405161055e9190613008565b60405180910390f35b610581600480360381019061057c9190612a96565b6114ec565b005b61058b6115a6565b604051610598919061304c565b60405180910390f35b6105a96115b9565b6040516105b69190613349565b60405180910390f35b6105d960048036038101906105d49190612c2a565b6115bf565b005b6105e36118a8565b6040516105f09190613008565b60405180910390f35b6106016118d2565b60405161060e9190613067565b60405180910390f35b61061f611964565b005b610629611970565b6040516106369190613008565b60405180910390f35b61065960048036038101906106549190612bbd565b611996565b604051610666919061304c565b60405180910390f35b61068960048036038101906106849190612bbd565b611a81565b604051610696919061304c565b60405180910390f35b6106b960048036038101906106b49190612a96565b611a9f565b005b6106c3611b59565b6040516106d09190613349565b60405180910390f35b6106f360048036038101906106ee9190612a96565b611b5f565b6040516107009190613008565b60405180910390f35b610723600480360381019061071e9190612ac3565b611b92565b6040516107309190613349565b60405180910390f35b610753600480360381019061074e9190612b03565b611c19565b005b61076f600480360381019061076a9190612a96565b611f2f565b60405161077c9190613008565b60405180910390f35b61079f600480360381019061079a9190612bfd565b611f62565b005b6107bb60048036038101906107b69190612a96565b6120c1565b005b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600380546107f290613824565b80601f016020809104026020016040519081016040528092919081815260200182805461081e90613824565b801561086b5780601f106108405761010080835404028352916020019161086b565b820191906000526020600020905b81548152906001019060200180831161084e57829003601f168201915b5050505050905090565b60006108896108826121b9565b84846121c1565b6001905092915050565b600d5481565b6000600254905090565b60006108b084848461238c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108fb6121b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561097b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097290613229565b60405180910390fd5b61098f856109876121b9565b8584036121c1565b60019150509392505050565b6012600a6109a99190613552565b631e61299b6109b89190613670565b81565b60006012905090565b60105481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6012600a6109fe9190613552565b6356cc76e1610a0d9190613670565b81565b6000610ab2610a1d6121b9565b848460016000610a2b6121b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610aad9190613478565b6121c1565b6001905092915050565b600080600080600080600060105443610ad591906136ca565b9050600081131580610af35750601160009054906101000a900460ff165b15610b135760008060008060008096509650965096509650965050610dca565b6000610b2a8260065461260d90919063ffffffff16565b90506000610b4a601254610b3c610899565b61262390919063ffffffff16565b9050806012600a610b5b9190613552565b6356cc76e1610b6a9190613670565b11610b8c57600080600080600080985098509850985098509850505050610dca565b6012600a610b9a9190613552565b6356cc76e1610ba99190613670565b610bbc828461262390919063ffffffff16565b1115610bf457610bf1816012600a610bd49190613552565b6356cc76e1610be39190613670565b61263990919063ffffffff16565b91505b6000821415610c1a57600080600080600080985098509850985098509850505050610dca565b6000610c446064610c36600c548661260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610c706064610c62600d548761260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610c9c6064610c8e600e548861260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610cc86064610cba600f548961260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610d0382610cf585610ce7888a61262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b90506000878214610d2457610d21828961263990919063ffffffff16565b90505b610d6d83610d5f86610d5189610d438c8861262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b8814610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590613209565b60405180910390fd5b8786868686859e509e509e509e509e509e505050505050505050505b909192939495565b610de3610ddd6121b9565b82612665565b8060126000828254610df59190613478565b9250508190555050565b610e076121b9565b73ffffffffffffffffffffffffffffffffffffffff16610e256118a8565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290613249565b60405180910390fd5b601160009054906101000a900460ff16610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190613169565b60405180910390fd5b600a43610ed79190613478565b6010819055506000601160006101000a81548160ff0219169083151502179055507f9dd715fed52c25e642f97653bb4c4339ad98fe6d6e130348be82ae5d86383a8c600a43610f269190613478565b604051610f339190613349565b60405180910390a1565b60125481565b601160009054906101000a900460ff1615610f5d576111ea565b4360105410610fa2577f51d2682485acc6068bd190da22f9954f8e19fe326f379c160cb532256ee9878343604051610f959190613349565b60405180910390a16111ea565b600080600080600080610fb3610abc565b9550955095509550955095506000861415610fd3575050505050506111ea565b436010819055506000851461100f5761100e600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168661283c565b5b6000841461104457611043600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561283c565b5b6000831461107957611078600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461283c565b5b600082146110ae576110ad600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361283c565b5b600081146110d05780601260008282546110c89190613478565b925050819055505b7fd48591c0b38848057d65c072802d9172b5a51fd2c4ea6e6729276c0efe2399d54387836110fc610899565b60125460405161111095949392919061338d565b60405180910390a16000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111e2578073ffffffffffffffffffffffffffffffffffffffff1663bd4f2391896040518263ffffffff1660e01b81526004016111ac9190613008565b600060405180830381600087803b1580156111c657600080fd5b505af19250505080156111d7575060015b6111e0576111e1565b5b5b505050505050505b50565b6111f56121b9565b73ffffffffffffffffffffffffffffffffffffffff166112136118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126090613249565b60405180910390fd5b601160009054906101000a900460ff16156112b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b0906131c9565b60405180910390fd5b6001601160006101000a81548160ff0219169083151502179055507f32fb7c9891bc4f963c7de9f1186d2a7755c7d6e9f4604dabe1d8bb3027c2f49e436040516113039190613349565b60405180910390a1565b600c5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113636121b9565b73ffffffffffffffffffffffffffffffffffffffff166113816118a8565b73ffffffffffffffffffffffffffffffffffffffff16146113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90613249565b60405180910390fd5b6113e1600061299c565b565b6012600a6113f19190613552565b60586113fd9190613670565b81565b6114086121b9565b73ffffffffffffffffffffffffffffffffffffffff166114266118a8565b73ffffffffffffffffffffffffffffffffffffffff161461147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390613249565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3eddc3ecdb7edab86ef5743e7e6ecf78dfbf01f8830eb26a8acdb522fb2bfc34338260405161159b929190613023565b60405180910390a150565b601160009054906101000a900460ff1681565b600e5481565b6115c76121b9565b73ffffffffffffffffffffffffffffffffffffffff166115e56118a8565b73ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290613249565b60405180910390fd5b60646116748261166685611658888a61262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b11156116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac906131e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611750576000831461174f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174690613129565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117eb57600082146117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e190613149565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156118865760008114611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90613309565b60405180910390fd5b5b83600c8190555082600d8190555081600e8190555080600f8190555050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546118e190613824565b80601f016020809104026020016040519081016040528092919081815260200182805461190d90613824565b801561195a5780601f1061192f5761010080835404028352916020019161195a565b820191906000526020600020905b81548152906001019060200180831161193d57829003601f168201915b5050505050905090565b61196e6000610f43565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600160006119a56121b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a59906132e9565b60405180910390fd5b611a76611a6d6121b9565b858584036121c1565b600191505092915050565b6000611a95611a8e6121b9565b848461238c565b6001905092915050565b80601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa0ff2fa6909fe4ddd94349fc9d8e2932f3dfe666216f3cc2aa3a72f5a03b655e3382604051611b4e929190613023565b60405180910390a150565b600f5481565b60136020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c216121b9565b73ffffffffffffffffffffffffffffffffffffffff16611c3f6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c90613249565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc906131a9565b60405180910390fd5b83600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e69576000600d819055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ec9576000600e819055505b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f29576000600f819055505b50505050565b60146020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f6a6121b9565b73ffffffffffffffffffffffffffffffffffffffff16611f886118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590613249565b60405180910390fd5b6012600a611fec9190613552565b6001611ff89190613670565b81101561203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190613089565b60405180910390fd5b600654811061207e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612075906132a9565b60405180910390fd5b806006819055507fa5359383b26e4fd2b6525f3aff6b32383b448d64ef960787d0f9a30e343e7c6643826040516120b6929190613364565b60405180910390a150565b6120c96121b9565b73ffffffffffffffffffffffffffffffffffffffff166120e76118a8565b73ffffffffffffffffffffffffffffffffffffffff161461213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490613249565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a4906130e9565b60405180910390fd5b6121b68161299c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612231576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612228906132c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890613109565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161237f9190613349565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f390613289565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561246c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612463906130a9565b60405180910390fd5b612477838383612a62565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490613189565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125909190613478565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125f49190613349565b60405180910390a3612607848484612a67565b50505050565b6000818361261b9190613670565b905092915050565b600081836126319190613478565b905092915050565b60008183612647919061375e565b905092915050565b6000818361265d91906134ce565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cc90613269565b60405180910390fd5b6126e182600083612a62565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e906130c9565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546127be919061375e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128239190613349565b60405180910390a361283783600084612a67565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390613329565b60405180910390fd5b6128b860008383612a62565b80600260008282546128ca9190613478565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461291f9190613478565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129849190613349565b60405180910390a361299860008383612a67565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081359050612a7b81613e08565b92915050565b600081359050612a9081613e1f565b92915050565b600060208284031215612aac57612aab6138e3565b5b6000612aba84828501612a6c565b91505092915050565b60008060408385031215612ada57612ad96138e3565b5b6000612ae885828601612a6c565b9250506020612af985828601612a6c565b9150509250929050565b60008060008060808587031215612b1d57612b1c6138e3565b5b6000612b2b87828801612a6c565b9450506020612b3c87828801612a6c565b9350506040612b4d87828801612a6c565b9250506060612b5e87828801612a6c565b91505092959194509250565b600080600060608486031215612b8357612b826138e3565b5b6000612b9186828701612a6c565b9350506020612ba286828701612a6c565b9250506040612bb386828701612a81565b9150509250925092565b60008060408385031215612bd457612bd36138e3565b5b6000612be285828601612a6c565b9250506020612bf385828601612a81565b9150509250929050565b600060208284031215612c1357612c126138e3565b5b6000612c2184828501612a81565b91505092915050565b60008060008060808587031215612c4457612c436138e3565b5b6000612c5287828801612a81565b9450506020612c6387828801612a81565b9350506040612c7487828801612a81565b9250506060612c8587828801612a81565b91505092959194509250565b612c9a81613792565b82525050565b612ca9816137a4565b82525050565b6000612cba8261345c565b612cc48185613467565b9350612cd48185602086016137f1565b612cdd816138e8565b840191505092915050565b6000612cf5601283613467565b9150612d0082613906565b602082019050919050565b6000612d18602383613467565b9150612d238261392f565b604082019050919050565b6000612d3b602283613467565b9150612d468261397e565b604082019050919050565b6000612d5e602683613467565b9150612d69826139cd565b604082019050919050565b6000612d81602283613467565b9150612d8c82613a1c565b604082019050919050565b6000612da4601d83613467565b9150612daf82613a6b565b602082019050919050565b6000612dc7601d83613467565b9150612dd282613a94565b602082019050919050565b6000612dea601183613467565b9150612df582613abd565b602082019050919050565b6000612e0d602683613467565b9150612e1882613ae6565b604082019050919050565b6000612e30602083613467565b9150612e3b82613b35565b602082019050919050565b6000612e53601583613467565b9150612e5e82613b5e565b602082019050919050565b6000612e76601083613467565b9150612e8182613b87565b602082019050919050565b6000612e99600883613467565b9150612ea482613bb0565b602082019050919050565b6000612ebc602883613467565b9150612ec782613bd9565b604082019050919050565b6000612edf602083613467565b9150612eea82613c28565b602082019050919050565b6000612f02602183613467565b9150612f0d82613c51565b604082019050919050565b6000612f25602583613467565b9150612f3082613ca0565b604082019050919050565b6000612f48601f83613467565b9150612f5382613cef565b602082019050919050565b6000612f6b602483613467565b9150612f7682613d18565b604082019050919050565b6000612f8e602583613467565b9150612f9982613d67565b604082019050919050565b6000612fb1601d83613467565b9150612fbc82613db6565b602082019050919050565b6000612fd4601f83613467565b9150612fdf82613ddf565b602082019050919050565b612ff3816137da565b82525050565b613002816137e4565b82525050565b600060208201905061301d6000830184612c91565b92915050565b60006040820190506130386000830185612c91565b6130456020830184612c91565b9392505050565b60006020820190506130616000830184612ca0565b92915050565b600060208201905081810360008301526130818184612caf565b905092915050565b600060208201905081810360008301526130a281612ce8565b9050919050565b600060208201905081810360008301526130c281612d0b565b9050919050565b600060208201905081810360008301526130e281612d2e565b9050919050565b6000602082019050818103600083015261310281612d51565b9050919050565b6000602082019050818103600083015261312281612d74565b9050919050565b6000602082019050818103600083015261314281612d97565b9050919050565b6000602082019050818103600083015261316281612dba565b9050919050565b6000602082019050818103600083015261318281612ddd565b9050919050565b600060208201905081810360008301526131a281612e00565b9050919050565b600060208201905081810360008301526131c281612e23565b9050919050565b600060208201905081810360008301526131e281612e46565b9050919050565b6000602082019050818103600083015261320281612e69565b9050919050565b6000602082019050818103600083015261322281612e8c565b9050919050565b6000602082019050818103600083015261324281612eaf565b9050919050565b6000602082019050818103600083015261326281612ed2565b9050919050565b6000602082019050818103600083015261328281612ef5565b9050919050565b600060208201905081810360008301526132a281612f18565b9050919050565b600060208201905081810360008301526132c281612f3b565b9050919050565b600060208201905081810360008301526132e281612f5e565b9050919050565b6000602082019050818103600083015261330281612f81565b9050919050565b6000602082019050818103600083015261332281612fa4565b9050919050565b6000602082019050818103600083015261334281612fc7565b9050919050565b600060208201905061335e6000830184612fea565b92915050565b60006040820190506133796000830185612fea565b6133866020830184612fea565b9392505050565b600060a0820190506133a26000830188612fea565b6133af6020830187612fea565b6133bc6040830186612fea565b6133c96060830185612fea565b6133d66080830184612fea565b9695505050505050565b600060c0820190506133f56000830189612fea565b6134026020830188612fea565b61340f6040830187612fea565b61341c6060830186612fea565b6134296080830185612fea565b61343660a0830184612fea565b979650505050505050565b60006020820190506134566000830184612ff9565b92915050565b600081519050919050565b600082825260208201905092915050565b6000613483826137da565b915061348e836137da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134c3576134c2613856565b5b828201905092915050565b60006134d9826137da565b91506134e4836137da565b9250826134f4576134f3613885565b5b828204905092915050565b6000808291508390505b60018511156135495780860481111561352557613524613856565b5b60018516156135345780820291505b8081029050613542856138f9565b9450613509565b94509492505050565b600061355d826137da565b9150613568836137e4565b92506135957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461359d565b905092915050565b6000826135ad5760019050613669565b816135bb5760009050613669565b81600181146135d157600281146135db5761360a565b6001915050613669565b60ff8411156135ed576135ec613856565b5b8360020a91508482111561360457613603613856565b5b50613669565b5060208310610133831016604e8410600b841016171561363f5782820a90508381111561363a57613639613856565b5b613669565b61364c84848460016134ff565b9250905081840481111561366357613662613856565b5b81810290505b9392505050565b600061367b826137da565b9150613686836137da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136bf576136be613856565b5b828202905092915050565b60006136d5826137b0565b91506136e0836137b0565b9250827f80000000000000000000000000000000000000000000000000000000000000000182126000841215161561371b5761371a613856565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561375357613752613856565b5b828203905092915050565b6000613769826137da565b9150613774836137da565b92508282101561378757613786613856565b5b828203905092915050565b600061379d826137ba565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561380f5780820151818401526020810190506137f4565b8381111561381e576000848401525b50505050565b6000600282049050600182168061383c57607f821691505b602082108114156138505761384f6138b4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f616d6f756e74203c206f6e6520746f6b656e0000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e7420746f207a65726f20616464726573732032000000600082015250565b7f63616e6e6f74206d696e7420746f207a65726f20616464726573732033000000600082015250565b7f6d696e696e67206e6f7420706175736564000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f6164647265737320312063616e6e6f74206265207a65726f2061646472657373600082015250565b7f6d696e696e6720616c7265616479207061757365640000000000000000000000600082015250565b7f7061727473206578636565642031303000000000000000000000000000000000600082015250565b7f6d69736d61746368000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f616d6f756e74203e3d2063757272656e7420656d697373696f6e207261746500600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e7420746f207a65726f20616464726573732034000000600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613e1181613792565b8114613e1c57600080fd5b50565b613e28816137da565b8114613e3357600080fd5b5056fea26469706673582212206250ad630003e7455e55e8c56180a899b55e5a6579dee451e3a6e12adc60d61e64736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102695760003560e01c80637546fcb511610151578063a044c987116100c3578063c18b9c1311610087578063c18b9c13146106d9578063dd62ed3e14610709578063e640f64014610739578063ea32189c14610755578063ef8e293714610785578063f2fde38b146107a157610269565b8063a044c98714610621578063a457c2d71461063f578063a9059cbb1461066f578063b31e1d4d1461069f578063b90d5b99146106bb57610269565b806386e87ae01161011557806386e87ae0146105835780638bf6e410146105a15780638c63555c146105bf5780638da5cb5b146105db57806395d89b41146105f957806399f4b2511461061757610269565b80637546fcb5146104f157806375f890ab1461050f5780637bdb72371461052b5780637e44755b1461054957806381bb642d1461056757610269565b80633906f560116101ea5780635290d773116101ae5780635290d77314610455578063533d0bce146104735780636c33bced1461048f5780636ca5b5b01461049957806370a08231146104b7578063715018a6146104e757610269565b80633906f560146103be57806339509351146103dc5780633d370b4e1461040c57806342966c681461042f5780634b8a03e81461044b57610269565b806323b872dd1161023157806323b872dd146103165780632ff2e9dc14610346578063313ce56714610364578063355fc6c9146103825780633602deb2146103a057610269565b806303cf8a201461026e57806306fdde031461028c578063095ea7b3146102aa5780630bcbbd21146102da57806318160ddd146102f8575b600080fd5b6102766107bd565b6040516102839190613008565b60405180910390f35b6102946107e3565b6040516102a19190613067565b60405180910390f35b6102c460048036038101906102bf9190612bbd565b610875565b6040516102d1919061304c565b60405180910390f35b6102e2610893565b6040516102ef9190613349565b60405180910390f35b610300610899565b60405161030d9190613349565b60405180910390f35b610330600480360381019061032b9190612b6a565b6108a3565b60405161033d919061304c565b60405180910390f35b61034e61099b565b60405161035b9190613349565b60405180910390f35b61036c6109bb565b6040516103799190613441565b60405180910390f35b61038a6109c4565b6040516103979190613349565b60405180910390f35b6103a86109ca565b6040516103b59190613008565b60405180910390f35b6103c66109f0565b6040516103d39190613349565b60405180910390f35b6103f660048036038101906103f19190612bbd565b610a10565b604051610403919061304c565b60405180910390f35b610414610abc565b604051610426969594939291906133e0565b60405180910390f35b61044960048036038101906104449190612bfd565b610dd2565b005b610453610dff565b005b61045d610f3d565b60405161046a9190613349565b60405180910390f35b61048d60048036038101906104889190612a96565b610f43565b005b6104976111ed565b005b6104a161130d565b6040516104ae9190613349565b60405180910390f35b6104d160048036038101906104cc9190612a96565b611313565b6040516104de9190613349565b60405180910390f35b6104ef61135b565b005b6104f96113e3565b6040516105069190613349565b60405180910390f35b61052960048036038101906105249190612a96565b611400565b005b6105336114c0565b6040516105409190613349565b60405180910390f35b6105516114c6565b60405161055e9190613008565b60405180910390f35b610581600480360381019061057c9190612a96565b6114ec565b005b61058b6115a6565b604051610598919061304c565b60405180910390f35b6105a96115b9565b6040516105b69190613349565b60405180910390f35b6105d960048036038101906105d49190612c2a565b6115bf565b005b6105e36118a8565b6040516105f09190613008565b60405180910390f35b6106016118d2565b60405161060e9190613067565b60405180910390f35b61061f611964565b005b610629611970565b6040516106369190613008565b60405180910390f35b61065960048036038101906106549190612bbd565b611996565b604051610666919061304c565b60405180910390f35b61068960048036038101906106849190612bbd565b611a81565b604051610696919061304c565b60405180910390f35b6106b960048036038101906106b49190612a96565b611a9f565b005b6106c3611b59565b6040516106d09190613349565b60405180910390f35b6106f360048036038101906106ee9190612a96565b611b5f565b6040516107009190613008565b60405180910390f35b610723600480360381019061071e9190612ac3565b611b92565b6040516107309190613349565b60405180910390f35b610753600480360381019061074e9190612b03565b611c19565b005b61076f600480360381019061076a9190612a96565b611f2f565b60405161077c9190613008565b60405180910390f35b61079f600480360381019061079a9190612bfd565b611f62565b005b6107bb60048036038101906107b69190612a96565b6120c1565b005b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600380546107f290613824565b80601f016020809104026020016040519081016040528092919081815260200182805461081e90613824565b801561086b5780601f106108405761010080835404028352916020019161086b565b820191906000526020600020905b81548152906001019060200180831161084e57829003601f168201915b5050505050905090565b60006108896108826121b9565b84846121c1565b6001905092915050565b600d5481565b6000600254905090565b60006108b084848461238c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108fb6121b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561097b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097290613229565b60405180910390fd5b61098f856109876121b9565b8584036121c1565b60019150509392505050565b6012600a6109a99190613552565b631e61299b6109b89190613670565b81565b60006012905090565b60105481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6012600a6109fe9190613552565b6356cc76e1610a0d9190613670565b81565b6000610ab2610a1d6121b9565b848460016000610a2b6121b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610aad9190613478565b6121c1565b6001905092915050565b600080600080600080600060105443610ad591906136ca565b9050600081131580610af35750601160009054906101000a900460ff165b15610b135760008060008060008096509650965096509650965050610dca565b6000610b2a8260065461260d90919063ffffffff16565b90506000610b4a601254610b3c610899565b61262390919063ffffffff16565b9050806012600a610b5b9190613552565b6356cc76e1610b6a9190613670565b11610b8c57600080600080600080985098509850985098509850505050610dca565b6012600a610b9a9190613552565b6356cc76e1610ba99190613670565b610bbc828461262390919063ffffffff16565b1115610bf457610bf1816012600a610bd49190613552565b6356cc76e1610be39190613670565b61263990919063ffffffff16565b91505b6000821415610c1a57600080600080600080985098509850985098509850505050610dca565b6000610c446064610c36600c548661260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610c706064610c62600d548761260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610c9c6064610c8e600e548861260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610cc86064610cba600f548961260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610d0382610cf585610ce7888a61262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b90506000878214610d2457610d21828961263990919063ffffffff16565b90505b610d6d83610d5f86610d5189610d438c8861262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b8814610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590613209565b60405180910390fd5b8786868686859e509e509e509e509e509e505050505050505050505b909192939495565b610de3610ddd6121b9565b82612665565b8060126000828254610df59190613478565b9250508190555050565b610e076121b9565b73ffffffffffffffffffffffffffffffffffffffff16610e256118a8565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290613249565b60405180910390fd5b601160009054906101000a900460ff16610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190613169565b60405180910390fd5b600a43610ed79190613478565b6010819055506000601160006101000a81548160ff0219169083151502179055507f9dd715fed52c25e642f97653bb4c4339ad98fe6d6e130348be82ae5d86383a8c600a43610f269190613478565b604051610f339190613349565b60405180910390a1565b60125481565b601160009054906101000a900460ff1615610f5d576111ea565b4360105410610fa2577f51d2682485acc6068bd190da22f9954f8e19fe326f379c160cb532256ee9878343604051610f959190613349565b60405180910390a16111ea565b600080600080600080610fb3610abc565b9550955095509550955095506000861415610fd3575050505050506111ea565b436010819055506000851461100f5761100e600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168661283c565b5b6000841461104457611043600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561283c565b5b6000831461107957611078600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461283c565b5b600082146110ae576110ad600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361283c565b5b600081146110d05780601260008282546110c89190613478565b925050819055505b7fd48591c0b38848057d65c072802d9172b5a51fd2c4ea6e6729276c0efe2399d54387836110fc610899565b60125460405161111095949392919061338d565b60405180910390a16000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111e2578073ffffffffffffffffffffffffffffffffffffffff1663bd4f2391896040518263ffffffff1660e01b81526004016111ac9190613008565b600060405180830381600087803b1580156111c657600080fd5b505af19250505080156111d7575060015b6111e0576111e1565b5b5b505050505050505b50565b6111f56121b9565b73ffffffffffffffffffffffffffffffffffffffff166112136118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126090613249565b60405180910390fd5b601160009054906101000a900460ff16156112b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b0906131c9565b60405180910390fd5b6001601160006101000a81548160ff0219169083151502179055507f32fb7c9891bc4f963c7de9f1186d2a7755c7d6e9f4604dabe1d8bb3027c2f49e436040516113039190613349565b60405180910390a1565b600c5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113636121b9565b73ffffffffffffffffffffffffffffffffffffffff166113816118a8565b73ffffffffffffffffffffffffffffffffffffffff16146113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90613249565b60405180910390fd5b6113e1600061299c565b565b6012600a6113f19190613552565b60586113fd9190613670565b81565b6114086121b9565b73ffffffffffffffffffffffffffffffffffffffff166114266118a8565b73ffffffffffffffffffffffffffffffffffffffff161461147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390613249565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3eddc3ecdb7edab86ef5743e7e6ecf78dfbf01f8830eb26a8acdb522fb2bfc34338260405161159b929190613023565b60405180910390a150565b601160009054906101000a900460ff1681565b600e5481565b6115c76121b9565b73ffffffffffffffffffffffffffffffffffffffff166115e56118a8565b73ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290613249565b60405180910390fd5b60646116748261166685611658888a61262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b11156116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac906131e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611750576000831461174f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174690613129565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117eb57600082146117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e190613149565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156118865760008114611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90613309565b60405180910390fd5b5b83600c8190555082600d8190555081600e8190555080600f8190555050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546118e190613824565b80601f016020809104026020016040519081016040528092919081815260200182805461190d90613824565b801561195a5780601f1061192f5761010080835404028352916020019161195a565b820191906000526020600020905b81548152906001019060200180831161193d57829003601f168201915b5050505050905090565b61196e6000610f43565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600160006119a56121b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a59906132e9565b60405180910390fd5b611a76611a6d6121b9565b858584036121c1565b600191505092915050565b6000611a95611a8e6121b9565b848461238c565b6001905092915050565b80601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa0ff2fa6909fe4ddd94349fc9d8e2932f3dfe666216f3cc2aa3a72f5a03b655e3382604051611b4e929190613023565b60405180910390a150565b600f5481565b60136020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c216121b9565b73ffffffffffffffffffffffffffffffffffffffff16611c3f6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c90613249565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc906131a9565b60405180910390fd5b83600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e69576000600d819055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ec9576000600e819055505b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f29576000600f819055505b50505050565b60146020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f6a6121b9565b73ffffffffffffffffffffffffffffffffffffffff16611f886118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590613249565b60405180910390fd5b6012600a611fec9190613552565b6001611ff89190613670565b81101561203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190613089565b60405180910390fd5b600654811061207e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612075906132a9565b60405180910390fd5b806006819055507fa5359383b26e4fd2b6525f3aff6b32383b448d64ef960787d0f9a30e343e7c6643826040516120b6929190613364565b60405180910390a150565b6120c96121b9565b73ffffffffffffffffffffffffffffffffffffffff166120e76118a8565b73ffffffffffffffffffffffffffffffffffffffff161461213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490613249565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a4906130e9565b60405180910390fd5b6121b68161299c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612231576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612228906132c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890613109565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161237f9190613349565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f390613289565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561246c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612463906130a9565b60405180910390fd5b612477838383612a62565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490613189565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125909190613478565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125f49190613349565b60405180910390a3612607848484612a67565b50505050565b6000818361261b9190613670565b905092915050565b600081836126319190613478565b905092915050565b60008183612647919061375e565b905092915050565b6000818361265d91906134ce565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cc90613269565b60405180910390fd5b6126e182600083612a62565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e906130c9565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546127be919061375e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128239190613349565b60405180910390a361283783600084612a67565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390613329565b60405180910390fd5b6128b860008383612a62565b80600260008282546128ca9190613478565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461291f9190613478565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129849190613349565b60405180910390a361299860008383612a67565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081359050612a7b81613e08565b92915050565b600081359050612a9081613e1f565b92915050565b600060208284031215612aac57612aab6138e3565b5b6000612aba84828501612a6c565b91505092915050565b60008060408385031215612ada57612ad96138e3565b5b6000612ae885828601612a6c565b9250506020612af985828601612a6c565b9150509250929050565b60008060008060808587031215612b1d57612b1c6138e3565b5b6000612b2b87828801612a6c565b9450506020612b3c87828801612a6c565b9350506040612b4d87828801612a6c565b9250506060612b5e87828801612a6c565b91505092959194509250565b600080600060608486031215612b8357612b826138e3565b5b6000612b9186828701612a6c565b9350506020612ba286828701612a6c565b9250506040612bb386828701612a81565b9150509250925092565b60008060408385031215612bd457612bd36138e3565b5b6000612be285828601612a6c565b9250506020612bf385828601612a81565b9150509250929050565b600060208284031215612c1357612c126138e3565b5b6000612c2184828501612a81565b91505092915050565b60008060008060808587031215612c4457612c436138e3565b5b6000612c5287828801612a81565b9450506020612c6387828801612a81565b9350506040612c7487828801612a81565b9250506060612c8587828801612a81565b91505092959194509250565b612c9a81613792565b82525050565b612ca9816137a4565b82525050565b6000612cba8261345c565b612cc48185613467565b9350612cd48185602086016137f1565b612cdd816138e8565b840191505092915050565b6000612cf5601283613467565b9150612d0082613906565b602082019050919050565b6000612d18602383613467565b9150612d238261392f565b604082019050919050565b6000612d3b602283613467565b9150612d468261397e565b604082019050919050565b6000612d5e602683613467565b9150612d69826139cd565b604082019050919050565b6000612d81602283613467565b9150612d8c82613a1c565b604082019050919050565b6000612da4601d83613467565b9150612daf82613a6b565b602082019050919050565b6000612dc7601d83613467565b9150612dd282613a94565b602082019050919050565b6000612dea601183613467565b9150612df582613abd565b602082019050919050565b6000612e0d602683613467565b9150612e1882613ae6565b604082019050919050565b6000612e30602083613467565b9150612e3b82613b35565b602082019050919050565b6000612e53601583613467565b9150612e5e82613b5e565b602082019050919050565b6000612e76601083613467565b9150612e8182613b87565b602082019050919050565b6000612e99600883613467565b9150612ea482613bb0565b602082019050919050565b6000612ebc602883613467565b9150612ec782613bd9565b604082019050919050565b6000612edf602083613467565b9150612eea82613c28565b602082019050919050565b6000612f02602183613467565b9150612f0d82613c51565b604082019050919050565b6000612f25602583613467565b9150612f3082613ca0565b604082019050919050565b6000612f48601f83613467565b9150612f5382613cef565b602082019050919050565b6000612f6b602483613467565b9150612f7682613d18565b604082019050919050565b6000612f8e602583613467565b9150612f9982613d67565b604082019050919050565b6000612fb1601d83613467565b9150612fbc82613db6565b602082019050919050565b6000612fd4601f83613467565b9150612fdf82613ddf565b602082019050919050565b612ff3816137da565b82525050565b613002816137e4565b82525050565b600060208201905061301d6000830184612c91565b92915050565b60006040820190506130386000830185612c91565b6130456020830184612c91565b9392505050565b60006020820190506130616000830184612ca0565b92915050565b600060208201905081810360008301526130818184612caf565b905092915050565b600060208201905081810360008301526130a281612ce8565b9050919050565b600060208201905081810360008301526130c281612d0b565b9050919050565b600060208201905081810360008301526130e281612d2e565b9050919050565b6000602082019050818103600083015261310281612d51565b9050919050565b6000602082019050818103600083015261312281612d74565b9050919050565b6000602082019050818103600083015261314281612d97565b9050919050565b6000602082019050818103600083015261316281612dba565b9050919050565b6000602082019050818103600083015261318281612ddd565b9050919050565b600060208201905081810360008301526131a281612e00565b9050919050565b600060208201905081810360008301526131c281612e23565b9050919050565b600060208201905081810360008301526131e281612e46565b9050919050565b6000602082019050818103600083015261320281612e69565b9050919050565b6000602082019050818103600083015261322281612e8c565b9050919050565b6000602082019050818103600083015261324281612eaf565b9050919050565b6000602082019050818103600083015261326281612ed2565b9050919050565b6000602082019050818103600083015261328281612ef5565b9050919050565b600060208201905081810360008301526132a281612f18565b9050919050565b600060208201905081810360008301526132c281612f3b565b9050919050565b600060208201905081810360008301526132e281612f5e565b9050919050565b6000602082019050818103600083015261330281612f81565b9050919050565b6000602082019050818103600083015261332281612fa4565b9050919050565b6000602082019050818103600083015261334281612fc7565b9050919050565b600060208201905061335e6000830184612fea565b92915050565b60006040820190506133796000830185612fea565b6133866020830184612fea565b9392505050565b600060a0820190506133a26000830188612fea565b6133af6020830187612fea565b6133bc6040830186612fea565b6133c96060830185612fea565b6133d66080830184612fea565b9695505050505050565b600060c0820190506133f56000830189612fea565b6134026020830188612fea565b61340f6040830187612fea565b61341c6060830186612fea565b6134296080830185612fea565b61343660a0830184612fea565b979650505050505050565b60006020820190506134566000830184612ff9565b92915050565b600081519050919050565b600082825260208201905092915050565b6000613483826137da565b915061348e836137da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134c3576134c2613856565b5b828201905092915050565b60006134d9826137da565b91506134e4836137da565b9250826134f4576134f3613885565b5b828204905092915050565b6000808291508390505b60018511156135495780860481111561352557613524613856565b5b60018516156135345780820291505b8081029050613542856138f9565b9450613509565b94509492505050565b600061355d826137da565b9150613568836137e4565b92506135957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461359d565b905092915050565b6000826135ad5760019050613669565b816135bb5760009050613669565b81600181146135d157600281146135db5761360a565b6001915050613669565b60ff8411156135ed576135ec613856565b5b8360020a91508482111561360457613603613856565b5b50613669565b5060208310610133831016604e8410600b841016171561363f5782820a90508381111561363a57613639613856565b5b613669565b61364c84848460016134ff565b9250905081840481111561366357613662613856565b5b81810290505b9392505050565b600061367b826137da565b9150613686836137da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136bf576136be613856565b5b828202905092915050565b60006136d5826137b0565b91506136e0836137b0565b9250827f80000000000000000000000000000000000000000000000000000000000000000182126000841215161561371b5761371a613856565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561375357613752613856565b5b828203905092915050565b6000613769826137da565b9150613774836137da565b92508282101561378757613786613856565b5b828203905092915050565b600061379d826137ba565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561380f5780820151818401526020810190506137f4565b8381111561381e576000848401525b50505050565b6000600282049050600182168061383c57607f821691505b602082108114156138505761384f6138b4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f616d6f756e74203c206f6e6520746f6b656e0000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e7420746f207a65726f20616464726573732032000000600082015250565b7f63616e6e6f74206d696e7420746f207a65726f20616464726573732033000000600082015250565b7f6d696e696e67206e6f7420706175736564000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f6164647265737320312063616e6e6f74206265207a65726f2061646472657373600082015250565b7f6d696e696e6720616c7265616479207061757365640000000000000000000000600082015250565b7f7061727473206578636565642031303000000000000000000000000000000000600082015250565b7f6d69736d61746368000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f616d6f756e74203e3d2063757272656e7420656d697373696f6e207261746500600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e7420746f207a65726f20616464726573732034000000600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613e1181613792565b8114613e1c57600080fd5b50565b613e28816137da565b8114613e3357600080fd5b5056fea26469706673582212206250ad630003e7455e55e8c56180a899b55e5a6579dee451e3a6e12adc60d61e64736f6c63430008070033
Deployed Bytecode Sourcemap
37537:9358:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38088:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18287:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20454:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38180:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19407:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21105:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37737:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38782:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38264:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38126:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37658:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22006:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40756:1502;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;38960:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45988:236;;;:::i;:::-;;38327:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42769:1305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45751:161;;;:::i;:::-;;38161:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19578:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29872:94;;;:::i;:::-;;37865:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46798:94;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37944:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38069:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39743:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38298:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38199:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45154:453;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29221:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18506:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42343:54;;;:::i;:::-;;38107:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22724:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19918:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40044:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38218:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39565:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20156:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44427:384;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39874:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46351:294;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30121:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38088:17;;;;;;;;;;;;;:::o;18287:100::-;18341:13;18374:5;18367:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18287:100;:::o;20454:169::-;20537:4;20554:39;20563:12;:10;:12::i;:::-;20577:7;20586:6;20554:8;:39::i;:::-;20611:4;20604:11;;20454:169;;;;:::o;38180:17::-;;;;:::o;19407:108::-;19468:7;19495:12;;19488:19;;19407:108;:::o;21105:492::-;21245:4;21262:36;21272:6;21280:9;21291:6;21262:9;:36::i;:::-;21311:24;21338:11;:19;21350:6;21338:19;;;;;;;;;;;;;;;:33;21358:12;:10;:12::i;:::-;21338:33;;;;;;;;;;;;;;;;21311:60;;21410:6;21390:16;:26;;21382:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;21497:57;21506:6;21514:12;:10;:12::i;:::-;21547:6;21528:16;:25;21497:8;:57::i;:::-;21585:4;21578:11;;;21105:492;;;;;:::o;37737:74::-;37651:2;37797;:14;;;;:::i;:::-;37785:9;:26;;;;:::i;:::-;37737:74;:::o;38782:84::-;38832:5;37651:2;38845:15;;38782:84;:::o;38264:29::-;;;;:::o;38126:17::-;;;;;;;;;;;;;:::o;37658:74::-;37651:2;37718;:14;;;;:::i;:::-;37705:10;:27;;;;:::i;:::-;37658:74;:::o;22006:215::-;22094:4;22111:80;22120:12;:10;:12::i;:::-;22134:7;22180:10;22143:11;:25;22155:12;:10;:12::i;:::-;22143:25;;;;;;;;;;;;;;;:34;22169:7;22143:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;22111:8;:80::i;:::-;22209:4;22202:11;;22006:215;;;;:::o;40756:1502::-;40803:7;40812;40821;40830;40839;40848;40943:12;40988:14;;40965:12;40958:45;;;;:::i;:::-;40943:60;;41023:1;41014:5;:10;;:26;;;;41028:12;;;;;;;;;;;41014:26;41010:69;;;41059:1;41061;41063;41065;41067;41069;41051:20;;;;;;;;;;;;;;;41010:69;41118:15;41136:39;41168:5;41136:19;;:23;;:39;;;;:::i;:::-;41118:57;;41231:14;41248:31;41266:12;;41248:13;:11;:13::i;:::-;:17;;:31;;;;:::i;:::-;41231:48;;41306:6;37651:2;37718;:14;;;;:::i;:::-;37705:10;:27;;;;:::i;:::-;41290:22;41286:65;;41331:1;41333;41335;41337;41339;41341;41323:20;;;;;;;;;;;;;;;;;41286:65;37651:2;37718;:14;;;;:::i;:::-;37705:10;:27;;;;:::i;:::-;41474:19;41486:6;41474:7;:11;;:19;;;;:::i;:::-;:34;41470:91;;;41529:24;41546:6;37651:2;37718;:14;;;;:::i;:::-;37705:10;:27;;;;:::i;:::-;41529:16;;:24;;;;:::i;:::-;41519:34;;41470:91;41628:1;41617:7;:12;41613:55;;;41648:1;41650;41652;41654;41656;41658;41640:20;;;;;;;;;;;;;;;;;41613:55;41709:12;41724:24;41744:3;41724:15;41736:2;;41724:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;41709:39;;41755:12;41770:24;41790:3;41770:15;41782:2;;41770:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;41755:39;;41801:12;41816:24;41836:3;41816:15;41828:2;;41816:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;41801:39;;41847:12;41862:24;41882:3;41862:15;41874:2;;41862:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;41847:39;;41893:14;41910:34;41939:4;41910:24;41929:4;41910:14;41919:4;41910;:8;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;:28;;:34;;;;:::i;:::-;41893:51;;41976:18;42015:7;42005:6;:17;42001:73;;42047:19;42059:6;42047:7;:11;;:19;;;;:::i;:::-;42034:32;;42001:73;42130:50;42175:4;42130:40;42165:4;42130:30;42155:4;42130:20;42145:4;42130:10;:14;;:20;;;;:::i;:::-;:24;;:30;;;;:::i;:::-;:34;;:40;;;;:::i;:::-;:44;;:50;;;;:::i;:::-;42119:7;:61;42111:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;42208:7;42217:4;42223;42229;42235;42241:10;42200:52;;;;;;;;;;;;;;;;;;;;;40756:1502;;;;;;;:::o;38960:155::-;39006:27;39012:12;:10;:12::i;:::-;39026:6;39006:5;:27::i;:::-;39058:6;39042:12;;:22;;;;;;;:::i;:::-;;;;;;;;38960:155;:::o;45988:236::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46048:12:::1;;;;;;;;;;;46040:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;46121:2;46106:12;:17;;;;:::i;:::-;46089:14;:34;;;;46174:5;46159:12;;:20;;;;;;;;;;;;;;;;;;46191:27;46215:2;46200:12;:17;;;;:::i;:::-;46191:27;;;;;;:::i;:::-;;;;;;;;45988:236::o:0;38327:27::-;;;;:::o;42769:1305::-;42821:12;;;;;;;;;;;42817:41;;;42844:7;;42817:41;42995:12;42977:14;;:30;42973:99;;43023:26;43036:12;43023:26;;;;;;:::i;:::-;;;;;;;;43058:7;;42973:99;43126:16;43144:15;43161;43178;43195;43212:16;43232:12;:10;:12::i;:::-;43125:119;;;;;;;;;;;;43267:1;43255:8;:13;43251:42;;;43279:7;;;;;;;;43251:42;43316:12;43299:14;:29;;;;43402:1;43391:7;:12;43387:41;;43407:18;43413:2;;;;;;;;;;;43417:7;43407:5;:18::i;:::-;43387:41;43449:1;43438:7;:12;43434:41;;43454:18;43460:2;;;;;;;;;;;43464:7;43454:5;:18::i;:::-;43434:41;43496:1;43485:7;:12;43481:41;;43501:18;43507:2;;;;;;;;;;;43511:7;43501:5;:18::i;:::-;43481:41;43543:1;43532:7;:12;43528:41;;43548:18;43554:2;;;;;;;;;;;43558:7;43548:5;:18::i;:::-;43528:41;43747:1;43735:8;:13;43731:61;;43775:8;43759:12;;:24;;;;;;;:::i;:::-;;;;;;;;43731:61;43803:68;43809:12;43823:8;43833;43843:13;:11;:13::i;:::-;43858:12;;43803:68;;;;;;;;;;:::i;:::-;;;;;;;;43949:15;43967:11;;;;;;;;;;;43949:29;;44013:1;43989:26;;43997:3;43989:26;;;43985:84;;44032:3;:8;;;44041;44032:18;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44028:34;;;;;;43985:84;42810:1264;;;;;;;42769:1305;;:::o;45751:161::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45810:12:::1;;;;;;;;;;;45809:13;45801:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;45870:4;45855:12;;:19;;;;;;;;;;;;;;;;;;45886:20;45893:12;45886:20;;;;;;:::i;:::-;;;;;;;;45751:161::o:0;38161:17::-;;;;:::o;19578:127::-;19652:7;19679:9;:18;19689:7;19679:18;;;;;;;;;;;;;;;;19672:25;;19578:127;;;:::o;29872:94::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29937:21:::1;29955:1;29937:9;:21::i;:::-;29872:94::o:0;37865:74::-;37651:2;37925;:14;;;;:::i;:::-;37920:2;:19;;;;:::i;:::-;37865:74;:::o;46798:94::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46882:3:::1;46856:11;;:30;;;;;;;;;;;;;;;;;;46798:94:::0;:::o;37944:74::-;;;;:::o;38069:17::-;;;;;;;;;;;;;:::o;39743:125::-;39819:2;39791:13;:25;39805:10;39791:25;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;39833:29;39847:10;39859:2;39833:29;;;;;;;:::i;:::-;;;;;;;;39743:125;:::o;38298:24::-;;;;;;;;;;;;;:::o;38199:17::-;;;;:::o;45154:453::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45293:3:::1;45263:26;45286:2;45263:18;45278:2;45263:10;45270:2;45263;:6;;:10;;;;:::i;:::-;:14;;:18;;;;:::i;:::-;:22;;:26;;;;:::i;:::-;:33;;45255:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;45342:1;45328:16;;:2;;;;;;;;;;;:16;;;45324:75;;;45361:1;45355:2;:7;45347:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;45324:75;45423:1;45409:16;;:2;;;;;;;;;;;:16;;;45405:75;;;45442:1;45436:2;:7;45428:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;45405:75;45504:1;45490:16;;:2;;;;;;;;;;;:16;;;45486:75;;;45523:1;45517:2;:7;45509:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;45486:75;45572:2;45567;:7;;;;45581:2;45576;:7;;;;45590:2;45585;:7;;;;45599:2;45594;:7;;;;45154:453:::0;;;;:::o;29221:87::-;29267:7;29294:6;;;;;;;;;;;29287:13;;29221:87;:::o;18506:104::-;18562:13;18595:7;18588:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18506:104;:::o;42343:54::-;42373:18;42388:1;42373:6;:18::i;:::-;42343:54::o;38107:17::-;;;;;;;;;;;;;:::o;22724:413::-;22817:4;22834:24;22861:11;:25;22873:12;:10;:12::i;:::-;22861:25;;;;;;;;;;;;;;;:34;22887:7;22861:34;;;;;;;;;;;;;;;;22834:61;;22934:15;22914:16;:35;;22906:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;23027:67;23036:12;:10;:12::i;:::-;23050:7;23078:15;23059:16;:34;23027:8;:67::i;:::-;23125:4;23118:11;;;22724:413;;;;:::o;19918:175::-;20004:4;20021:42;20031:12;:10;:12::i;:::-;20045:9;20056:6;20021:9;:42::i;:::-;20081:4;20074:11;;19918:175;;;;:::o;40044:125::-;40120:2;40092:13;:25;40106:10;40092:25;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;40134:29;40148:10;40160:2;40134:29;;;;;;;:::i;:::-;;;;;;;;40044:125;:::o;38218:17::-;;;;:::o;39565:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;20156:151::-;20245:7;20272:11;:18;20284:5;20272:18;;;;;;;;;;;;;;;:27;20291:7;20272:27;;;;;;;;;;;;;;;;20265:34;;20156:151;;;;:::o;44427:384::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44544:1:::1;44530:16;;:2;:16;;;;44522:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;44595:2;44590;;:7;;;;;;;;;;;;;;;;;;44604:2;44599;;:7;;;;;;;;;;;;;;;;;;44613:2;44608;;:7;;;;;;;;;;;;;;;;;;44622:2;44617;;:7;;;;;;;;;;;;;;;;;;44713:1;44699:16;;:2;;;;;;;;;;;:16;;;44695:33;;;44724:1;44719:2;:6;;;;44695:33;44752:1;44738:16;;:2;;;;;;;;;;;:16;;;44734:33;;;44763:1;44758:2;:6;;;;44734:33;44791:1;44777:16;;:2;;;;;;;;;;;:16;;;44773:33;;;44802:1;44797:2;:6;;;;44773:33;44427:384:::0;;;;:::o;39874:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;46351:294::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37651:2:::1;46440;:12;;;;:::i;:::-;46436:1;:16;;;;:::i;:::-;46426:6;:26;;46418:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;46499:19;;46490:6;:28;46482:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;46583:6;46561:19;:28;;;;46601:38;46618:12;46632:6;46601:38;;;;;;;:::i;:::-;;;;;;;;46351:294:::0;:::o;30121:192::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30230:1:::1;30210:22;;:8;:22;;;;30202:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30286:19;30296:8;30286:9;:19::i;:::-;30121:192:::0;:::o;16029:98::-;16082:7;16109:10;16102:17;;16029:98;:::o;26408:380::-;26561:1;26544:19;;:5;:19;;;;26536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26642:1;26623:21;;:7;:21;;;;26615:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26726:6;26696:11;:18;26708:5;26696:18;;;;;;;;;;;;;;;:27;26715:7;26696:27;;;;;;;;;;;;;;;:36;;;;26764:7;26748:32;;26757:5;26748:32;;;26773:6;26748:32;;;;;;:::i;:::-;;;;;;;;26408:380;;;:::o;23627:733::-;23785:1;23767:20;;:6;:20;;;;23759:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23869:1;23848:23;;:9;:23;;;;23840:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23924:47;23945:6;23953:9;23964:6;23924:20;:47::i;:::-;23984:21;24008:9;:17;24018:6;24008:17;;;;;;;;;;;;;;;;23984:41;;24061:6;24044:13;:23;;24036:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24182:6;24166:13;:22;24146:9;:17;24156:6;24146:17;;;;;;;;;;;;;;;:42;;;;24234:6;24210:9;:20;24220:9;24210:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;24275:9;24258:35;;24267:6;24258:35;;;24286:6;24258:35;;;;;;:::i;:::-;;;;;;;;24306:46;24326:6;24334:9;24345:6;24306:19;:46::i;:::-;23748:612;23627:733;;;:::o;34008:98::-;34066:7;34097:1;34093;:5;;;;:::i;:::-;34086:12;;34008:98;;;;:::o;33270:::-;33328:7;33359:1;33355;:5;;;;:::i;:::-;33348:12;;33270:98;;;;:::o;33651:::-;33709:7;33740:1;33736;:5;;;;:::i;:::-;33729:12;;33651:98;;;;:::o;34407:::-;34465:7;34496:1;34492;:5;;;;:::i;:::-;34485:12;;34407:98;;;;:::o;25379:591::-;25482:1;25463:21;;:7;:21;;;;25455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25535:49;25556:7;25573:1;25577:6;25535:20;:49::i;:::-;25597:22;25622:9;:18;25632:7;25622:18;;;;;;;;;;;;;;;;25597:43;;25677:6;25659:14;:24;;25651:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25796:6;25779:14;:23;25758:9;:18;25768:7;25758:18;;;;;;;;;;;;;;;:44;;;;25840:6;25824:12;;:22;;;;;;;:::i;:::-;;;;;;;;25890:1;25864:37;;25873:7;25864:37;;;25894:6;25864:37;;;;;;:::i;:::-;;;;;;;;25914:48;25934:7;25951:1;25955:6;25914:19;:48::i;:::-;25444:526;25379:591;;:::o;24647:399::-;24750:1;24731:21;;:7;:21;;;;24723:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24801:49;24830:1;24834:7;24843:6;24801:20;:49::i;:::-;24879:6;24863:12;;:22;;;;;;;:::i;:::-;;;;;;;;24918:6;24896:9;:18;24906:7;24896:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;24961:7;24940:37;;24957:1;24940:37;;;24970:6;24940:37;;;;;;:::i;:::-;;;;;;;;24990:48;25018:1;25022:7;25031:6;24990:19;:48::i;:::-;24647:399;;:::o;30321:173::-;30377:16;30396:6;;;;;;;;;;;30377:25;;30422:8;30413:6;;:17;;;;;;;;;;;;;;;;;;30477:8;30446:40;;30467:8;30446:40;;;;;;;;;;;;30366:128;30321:173;:::o;27388:125::-;;;;:::o;28117:124::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;152:139;;;;:::o;297:329::-;356:6;405:2;393:9;384:7;380:23;376:32;373:119;;;411:79;;:::i;:::-;373:119;531:1;556:53;601:7;592:6;581:9;577:22;556:53;:::i;:::-;546:63;;502:117;297:329;;;;:::o;632:474::-;700:6;708;757:2;745:9;736:7;732:23;728:32;725:119;;;763:79;;:::i;:::-;725:119;883:1;908:53;953:7;944:6;933:9;929:22;908:53;:::i;:::-;898:63;;854:117;1010:2;1036:53;1081:7;1072:6;1061:9;1057:22;1036:53;:::i;:::-;1026:63;;981:118;632:474;;;;;:::o;1112:765::-;1198:6;1206;1214;1222;1271:3;1259:9;1250:7;1246:23;1242:33;1239:120;;;1278:79;;:::i;:::-;1239:120;1398:1;1423:53;1468:7;1459:6;1448:9;1444:22;1423:53;:::i;:::-;1413:63;;1369:117;1525:2;1551:53;1596:7;1587:6;1576:9;1572:22;1551:53;:::i;:::-;1541:63;;1496:118;1653:2;1679:53;1724:7;1715:6;1704:9;1700:22;1679:53;:::i;:::-;1669:63;;1624:118;1781:2;1807:53;1852:7;1843:6;1832:9;1828:22;1807:53;:::i;:::-;1797:63;;1752:118;1112:765;;;;;;;:::o;1883:619::-;1960:6;1968;1976;2025:2;2013:9;2004:7;2000:23;1996:32;1993:119;;;2031:79;;:::i;:::-;1993:119;2151:1;2176:53;2221:7;2212:6;2201:9;2197:22;2176:53;:::i;:::-;2166:63;;2122:117;2278:2;2304:53;2349:7;2340:6;2329:9;2325:22;2304:53;:::i;:::-;2294:63;;2249:118;2406:2;2432:53;2477:7;2468:6;2457:9;2453:22;2432:53;:::i;:::-;2422:63;;2377:118;1883:619;;;;;:::o;2508:474::-;2576:6;2584;2633:2;2621:9;2612:7;2608:23;2604:32;2601:119;;;2639:79;;:::i;:::-;2601:119;2759:1;2784:53;2829:7;2820:6;2809:9;2805:22;2784:53;:::i;:::-;2774:63;;2730:117;2886:2;2912:53;2957:7;2948:6;2937:9;2933:22;2912:53;:::i;:::-;2902:63;;2857:118;2508:474;;;;;:::o;2988:329::-;3047:6;3096:2;3084:9;3075:7;3071:23;3067:32;3064:119;;;3102:79;;:::i;:::-;3064:119;3222:1;3247:53;3292:7;3283:6;3272:9;3268:22;3247:53;:::i;:::-;3237:63;;3193:117;2988:329;;;;:::o;3323:765::-;3409:6;3417;3425;3433;3482:3;3470:9;3461:7;3457:23;3453:33;3450:120;;;3489:79;;:::i;:::-;3450:120;3609:1;3634:53;3679:7;3670:6;3659:9;3655:22;3634:53;:::i;:::-;3624:63;;3580:117;3736:2;3762:53;3807:7;3798:6;3787:9;3783:22;3762:53;:::i;:::-;3752:63;;3707:118;3864:2;3890:53;3935:7;3926:6;3915:9;3911:22;3890:53;:::i;:::-;3880:63;;3835:118;3992:2;4018:53;4063:7;4054:6;4043:9;4039:22;4018:53;:::i;:::-;4008:63;;3963:118;3323:765;;;;;;;:::o;4094:118::-;4181:24;4199:5;4181:24;:::i;:::-;4176:3;4169:37;4094:118;;:::o;4218:109::-;4299:21;4314:5;4299:21;:::i;:::-;4294:3;4287:34;4218:109;;:::o;4333:364::-;4421:3;4449:39;4482:5;4449:39;:::i;:::-;4504:71;4568:6;4563:3;4504:71;:::i;:::-;4497:78;;4584:52;4629:6;4624:3;4617:4;4610:5;4606:16;4584:52;:::i;:::-;4661:29;4683:6;4661:29;:::i;:::-;4656:3;4652:39;4645:46;;4425:272;4333:364;;;;:::o;4703:366::-;4845:3;4866:67;4930:2;4925:3;4866:67;:::i;:::-;4859:74;;4942:93;5031:3;4942:93;:::i;:::-;5060:2;5055:3;5051:12;5044:19;;4703:366;;;:::o;5075:::-;5217:3;5238:67;5302:2;5297:3;5238:67;:::i;:::-;5231:74;;5314:93;5403:3;5314:93;:::i;:::-;5432:2;5427:3;5423:12;5416:19;;5075:366;;;:::o;5447:::-;5589:3;5610:67;5674:2;5669:3;5610:67;:::i;:::-;5603:74;;5686:93;5775:3;5686:93;:::i;:::-;5804:2;5799:3;5795:12;5788:19;;5447:366;;;:::o;5819:::-;5961:3;5982:67;6046:2;6041:3;5982:67;:::i;:::-;5975:74;;6058:93;6147:3;6058:93;:::i;:::-;6176:2;6171:3;6167:12;6160:19;;5819:366;;;:::o;6191:::-;6333:3;6354:67;6418:2;6413:3;6354:67;:::i;:::-;6347:74;;6430:93;6519:3;6430:93;:::i;:::-;6548:2;6543:3;6539:12;6532:19;;6191:366;;;:::o;6563:::-;6705:3;6726:67;6790:2;6785:3;6726:67;:::i;:::-;6719:74;;6802:93;6891:3;6802:93;:::i;:::-;6920:2;6915:3;6911:12;6904:19;;6563:366;;;:::o;6935:::-;7077:3;7098:67;7162:2;7157:3;7098:67;:::i;:::-;7091:74;;7174:93;7263:3;7174:93;:::i;:::-;7292:2;7287:3;7283:12;7276:19;;6935:366;;;:::o;7307:::-;7449:3;7470:67;7534:2;7529:3;7470:67;:::i;:::-;7463:74;;7546:93;7635:3;7546:93;:::i;:::-;7664:2;7659:3;7655:12;7648:19;;7307:366;;;:::o;7679:::-;7821:3;7842:67;7906:2;7901:3;7842:67;:::i;:::-;7835:74;;7918:93;8007:3;7918:93;:::i;:::-;8036:2;8031:3;8027:12;8020:19;;7679:366;;;:::o;8051:::-;8193:3;8214:67;8278:2;8273:3;8214:67;:::i;:::-;8207:74;;8290:93;8379:3;8290:93;:::i;:::-;8408:2;8403:3;8399:12;8392:19;;8051:366;;;:::o;8423:::-;8565:3;8586:67;8650:2;8645:3;8586:67;:::i;:::-;8579:74;;8662:93;8751:3;8662:93;:::i;:::-;8780:2;8775:3;8771:12;8764:19;;8423:366;;;:::o;8795:::-;8937:3;8958:67;9022:2;9017:3;8958:67;:::i;:::-;8951:74;;9034:93;9123:3;9034:93;:::i;:::-;9152:2;9147:3;9143:12;9136:19;;8795:366;;;:::o;9167:365::-;9309:3;9330:66;9394:1;9389:3;9330:66;:::i;:::-;9323:73;;9405:93;9494:3;9405:93;:::i;:::-;9523:2;9518:3;9514:12;9507:19;;9167:365;;;:::o;9538:366::-;9680:3;9701:67;9765:2;9760:3;9701:67;:::i;:::-;9694:74;;9777:93;9866:3;9777:93;:::i;:::-;9895:2;9890:3;9886:12;9879:19;;9538:366;;;:::o;9910:::-;10052:3;10073:67;10137:2;10132:3;10073:67;:::i;:::-;10066:74;;10149:93;10238:3;10149:93;:::i;:::-;10267:2;10262:3;10258:12;10251:19;;9910:366;;;:::o;10282:::-;10424:3;10445:67;10509:2;10504:3;10445:67;:::i;:::-;10438:74;;10521:93;10610:3;10521:93;:::i;:::-;10639:2;10634:3;10630:12;10623:19;;10282:366;;;:::o;10654:::-;10796:3;10817:67;10881:2;10876:3;10817:67;:::i;:::-;10810:74;;10893:93;10982:3;10893:93;:::i;:::-;11011:2;11006:3;11002:12;10995:19;;10654:366;;;:::o;11026:::-;11168:3;11189:67;11253:2;11248:3;11189:67;:::i;:::-;11182:74;;11265:93;11354:3;11265:93;:::i;:::-;11383:2;11378:3;11374:12;11367:19;;11026:366;;;:::o;11398:::-;11540:3;11561:67;11625:2;11620:3;11561:67;:::i;:::-;11554:74;;11637:93;11726:3;11637:93;:::i;:::-;11755:2;11750:3;11746:12;11739:19;;11398:366;;;:::o;11770:::-;11912:3;11933:67;11997:2;11992:3;11933:67;:::i;:::-;11926:74;;12009:93;12098:3;12009:93;:::i;:::-;12127:2;12122:3;12118:12;12111:19;;11770:366;;;:::o;12142:::-;12284:3;12305:67;12369:2;12364:3;12305:67;:::i;:::-;12298:74;;12381:93;12470:3;12381:93;:::i;:::-;12499:2;12494:3;12490:12;12483:19;;12142:366;;;:::o;12514:::-;12656:3;12677:67;12741:2;12736:3;12677:67;:::i;:::-;12670:74;;12753:93;12842:3;12753:93;:::i;:::-;12871:2;12866:3;12862:12;12855:19;;12514:366;;;:::o;12886:118::-;12973:24;12991:5;12973:24;:::i;:::-;12968:3;12961:37;12886:118;;:::o;13010:112::-;13093:22;13109:5;13093:22;:::i;:::-;13088:3;13081:35;13010:112;;:::o;13128:222::-;13221:4;13259:2;13248:9;13244:18;13236:26;;13272:71;13340:1;13329:9;13325:17;13316:6;13272:71;:::i;:::-;13128:222;;;;:::o;13356:332::-;13477:4;13515:2;13504:9;13500:18;13492:26;;13528:71;13596:1;13585:9;13581:17;13572:6;13528:71;:::i;:::-;13609:72;13677:2;13666:9;13662:18;13653:6;13609:72;:::i;:::-;13356:332;;;;;:::o;13694:210::-;13781:4;13819:2;13808:9;13804:18;13796:26;;13832:65;13894:1;13883:9;13879:17;13870:6;13832:65;:::i;:::-;13694:210;;;;:::o;13910:313::-;14023:4;14061:2;14050:9;14046:18;14038:26;;14110:9;14104:4;14100:20;14096:1;14085:9;14081:17;14074:47;14138:78;14211:4;14202:6;14138:78;:::i;:::-;14130:86;;13910:313;;;;:::o;14229:419::-;14395:4;14433:2;14422:9;14418:18;14410:26;;14482:9;14476:4;14472:20;14468:1;14457:9;14453:17;14446:47;14510:131;14636:4;14510:131;:::i;:::-;14502:139;;14229:419;;;:::o;14654:::-;14820:4;14858:2;14847:9;14843:18;14835:26;;14907:9;14901:4;14897:20;14893:1;14882:9;14878:17;14871:47;14935:131;15061:4;14935:131;:::i;:::-;14927:139;;14654:419;;;:::o;15079:::-;15245:4;15283:2;15272:9;15268:18;15260:26;;15332:9;15326:4;15322:20;15318:1;15307:9;15303:17;15296:47;15360:131;15486:4;15360:131;:::i;:::-;15352:139;;15079:419;;;:::o;15504:::-;15670:4;15708:2;15697:9;15693:18;15685:26;;15757:9;15751:4;15747:20;15743:1;15732:9;15728:17;15721:47;15785:131;15911:4;15785:131;:::i;:::-;15777:139;;15504:419;;;:::o;15929:::-;16095:4;16133:2;16122:9;16118:18;16110:26;;16182:9;16176:4;16172:20;16168:1;16157:9;16153:17;16146:47;16210:131;16336:4;16210:131;:::i;:::-;16202:139;;15929:419;;;:::o;16354:::-;16520:4;16558:2;16547:9;16543:18;16535:26;;16607:9;16601:4;16597:20;16593:1;16582:9;16578:17;16571:47;16635:131;16761:4;16635:131;:::i;:::-;16627:139;;16354:419;;;:::o;16779:::-;16945:4;16983:2;16972:9;16968:18;16960:26;;17032:9;17026:4;17022:20;17018:1;17007:9;17003:17;16996:47;17060:131;17186:4;17060:131;:::i;:::-;17052:139;;16779:419;;;:::o;17204:::-;17370:4;17408:2;17397:9;17393:18;17385:26;;17457:9;17451:4;17447:20;17443:1;17432:9;17428:17;17421:47;17485:131;17611:4;17485:131;:::i;:::-;17477:139;;17204:419;;;:::o;17629:::-;17795:4;17833:2;17822:9;17818:18;17810:26;;17882:9;17876:4;17872:20;17868:1;17857:9;17853:17;17846:47;17910:131;18036:4;17910:131;:::i;:::-;17902:139;;17629:419;;;:::o;18054:::-;18220:4;18258:2;18247:9;18243:18;18235:26;;18307:9;18301:4;18297:20;18293:1;18282:9;18278:17;18271:47;18335:131;18461:4;18335:131;:::i;:::-;18327:139;;18054:419;;;:::o;18479:::-;18645:4;18683:2;18672:9;18668:18;18660:26;;18732:9;18726:4;18722:20;18718:1;18707:9;18703:17;18696:47;18760:131;18886:4;18760:131;:::i;:::-;18752:139;;18479:419;;;:::o;18904:::-;19070:4;19108:2;19097:9;19093:18;19085:26;;19157:9;19151:4;19147:20;19143:1;19132:9;19128:17;19121:47;19185:131;19311:4;19185:131;:::i;:::-;19177:139;;18904:419;;;:::o;19329:::-;19495:4;19533:2;19522:9;19518:18;19510:26;;19582:9;19576:4;19572:20;19568:1;19557:9;19553:17;19546:47;19610:131;19736:4;19610:131;:::i;:::-;19602:139;;19329:419;;;:::o;19754:::-;19920:4;19958:2;19947:9;19943:18;19935:26;;20007:9;20001:4;19997:20;19993:1;19982:9;19978:17;19971:47;20035:131;20161:4;20035:131;:::i;:::-;20027:139;;19754:419;;;:::o;20179:::-;20345:4;20383:2;20372:9;20368:18;20360:26;;20432:9;20426:4;20422:20;20418:1;20407:9;20403:17;20396:47;20460:131;20586:4;20460:131;:::i;:::-;20452:139;;20179:419;;;:::o;20604:::-;20770:4;20808:2;20797:9;20793:18;20785:26;;20857:9;20851:4;20847:20;20843:1;20832:9;20828:17;20821:47;20885:131;21011:4;20885:131;:::i;:::-;20877:139;;20604:419;;;:::o;21029:::-;21195:4;21233:2;21222:9;21218:18;21210:26;;21282:9;21276:4;21272:20;21268:1;21257:9;21253:17;21246:47;21310:131;21436:4;21310:131;:::i;:::-;21302:139;;21029:419;;;:::o;21454:::-;21620:4;21658:2;21647:9;21643:18;21635:26;;21707:9;21701:4;21697:20;21693:1;21682:9;21678:17;21671:47;21735:131;21861:4;21735:131;:::i;:::-;21727:139;;21454:419;;;:::o;21879:::-;22045:4;22083:2;22072:9;22068:18;22060:26;;22132:9;22126:4;22122:20;22118:1;22107:9;22103:17;22096:47;22160:131;22286:4;22160:131;:::i;:::-;22152:139;;21879:419;;;:::o;22304:::-;22470:4;22508:2;22497:9;22493:18;22485:26;;22557:9;22551:4;22547:20;22543:1;22532:9;22528:17;22521:47;22585:131;22711:4;22585:131;:::i;:::-;22577:139;;22304:419;;;:::o;22729:::-;22895:4;22933:2;22922:9;22918:18;22910:26;;22982:9;22976:4;22972:20;22968:1;22957:9;22953:17;22946:47;23010:131;23136:4;23010:131;:::i;:::-;23002:139;;22729:419;;;:::o;23154:::-;23320:4;23358:2;23347:9;23343:18;23335:26;;23407:9;23401:4;23397:20;23393:1;23382:9;23378:17;23371:47;23435:131;23561:4;23435:131;:::i;:::-;23427:139;;23154:419;;;:::o;23579:222::-;23672:4;23710:2;23699:9;23695:18;23687:26;;23723:71;23791:1;23780:9;23776:17;23767:6;23723:71;:::i;:::-;23579:222;;;;:::o;23807:332::-;23928:4;23966:2;23955:9;23951:18;23943:26;;23979:71;24047:1;24036:9;24032:17;24023:6;23979:71;:::i;:::-;24060:72;24128:2;24117:9;24113:18;24104:6;24060:72;:::i;:::-;23807:332;;;;;:::o;24145:664::-;24350:4;24388:3;24377:9;24373:19;24365:27;;24402:71;24470:1;24459:9;24455:17;24446:6;24402:71;:::i;:::-;24483:72;24551:2;24540:9;24536:18;24527:6;24483:72;:::i;:::-;24565;24633:2;24622:9;24618:18;24609:6;24565:72;:::i;:::-;24647;24715:2;24704:9;24700:18;24691:6;24647:72;:::i;:::-;24729:73;24797:3;24786:9;24782:19;24773:6;24729:73;:::i;:::-;24145:664;;;;;;;;:::o;24815:775::-;25048:4;25086:3;25075:9;25071:19;25063:27;;25100:71;25168:1;25157:9;25153:17;25144:6;25100:71;:::i;:::-;25181:72;25249:2;25238:9;25234:18;25225:6;25181:72;:::i;:::-;25263;25331:2;25320:9;25316:18;25307:6;25263:72;:::i;:::-;25345;25413:2;25402:9;25398:18;25389:6;25345:72;:::i;:::-;25427:73;25495:3;25484:9;25480:19;25471:6;25427:73;:::i;:::-;25510;25578:3;25567:9;25563:19;25554:6;25510:73;:::i;:::-;24815:775;;;;;;;;;:::o;25596:214::-;25685:4;25723:2;25712:9;25708:18;25700:26;;25736:67;25800:1;25789:9;25785:17;25776:6;25736:67;:::i;:::-;25596:214;;;;:::o;25897:99::-;25949:6;25983:5;25977:12;25967:22;;25897:99;;;:::o;26002:169::-;26086:11;26120:6;26115:3;26108:19;26160:4;26155:3;26151:14;26136:29;;26002:169;;;;:::o;26177:305::-;26217:3;26236:20;26254:1;26236:20;:::i;:::-;26231:25;;26270:20;26288:1;26270:20;:::i;:::-;26265:25;;26424:1;26356:66;26352:74;26349:1;26346:81;26343:107;;;26430:18;;:::i;:::-;26343:107;26474:1;26471;26467:9;26460:16;;26177:305;;;;:::o;26488:185::-;26528:1;26545:20;26563:1;26545:20;:::i;:::-;26540:25;;26579:20;26597:1;26579:20;:::i;:::-;26574:25;;26618:1;26608:35;;26623:18;;:::i;:::-;26608:35;26665:1;26662;26658:9;26653:14;;26488:185;;;;:::o;26679:848::-;26740:5;26747:4;26771:6;26762:15;;26795:5;26786:14;;26809:712;26830:1;26820:8;26817:15;26809:712;;;26925:4;26920:3;26916:14;26910:4;26907:24;26904:50;;;26934:18;;:::i;:::-;26904:50;26984:1;26974:8;26970:16;26967:451;;;27399:4;27392:5;27388:16;27379:25;;26967:451;27449:4;27443;27439:15;27431:23;;27479:32;27502:8;27479:32;:::i;:::-;27467:44;;26809:712;;;26679:848;;;;;;;:::o;27533:281::-;27591:5;27615:23;27633:4;27615:23;:::i;:::-;27607:31;;27659:25;27675:8;27659:25;:::i;:::-;27647:37;;27703:104;27740:66;27730:8;27724:4;27703:104;:::i;:::-;27694:113;;27533:281;;;;:::o;27820:1073::-;27874:5;28065:8;28055:40;;28086:1;28077:10;;28088:5;;28055:40;28114:4;28104:36;;28131:1;28122:10;;28133:5;;28104:36;28200:4;28248:1;28243:27;;;;28284:1;28279:191;;;;28193:277;;28243:27;28261:1;28252:10;;28263:5;;;28279:191;28324:3;28314:8;28311:17;28308:43;;;28331:18;;:::i;:::-;28308:43;28380:8;28377:1;28373:16;28364:25;;28415:3;28408:5;28405:14;28402:40;;;28422:18;;:::i;:::-;28402:40;28455:5;;;28193:277;;28579:2;28569:8;28566:16;28560:3;28554:4;28551:13;28547:36;28529:2;28519:8;28516:16;28511:2;28505:4;28502:12;28498:35;28482:111;28479:246;;;28635:8;28629:4;28625:19;28616:28;;28670:3;28663:5;28660:14;28657:40;;;28677:18;;:::i;:::-;28657:40;28710:5;;28479:246;28750:42;28788:3;28778:8;28772:4;28769:1;28750:42;:::i;:::-;28735:57;;;;28824:4;28819:3;28815:14;28808:5;28805:25;28802:51;;;28833:18;;:::i;:::-;28802:51;28882:4;28875:5;28871:16;28862:25;;27820:1073;;;;;;:::o;28899:348::-;28939:7;28962:20;28980:1;28962:20;:::i;:::-;28957:25;;28996:20;29014:1;28996:20;:::i;:::-;28991:25;;29184:1;29116:66;29112:74;29109:1;29106:81;29101:1;29094:9;29087:17;29083:105;29080:131;;;29191:18;;:::i;:::-;29080:131;29239:1;29236;29232:9;29221:20;;28899:348;;;;:::o;29253:527::-;29292:4;29312:19;29329:1;29312:19;:::i;:::-;29307:24;;29345:19;29362:1;29345:19;:::i;:::-;29340:24;;29534:1;29466:66;29462:74;29459:1;29455:82;29450:1;29447;29443:9;29436:17;29432:106;29429:132;;;29541:18;;:::i;:::-;29429:132;29720:1;29652:66;29648:74;29645:1;29641:82;29637:1;29634;29630:9;29626:98;29623:124;;;29727:18;;:::i;:::-;29623:124;29772:1;29769;29765:9;29757:17;;29253:527;;;;:::o;29786:191::-;29826:4;29846:20;29864:1;29846:20;:::i;:::-;29841:25;;29880:20;29898:1;29880:20;:::i;:::-;29875:25;;29919:1;29916;29913:8;29910:34;;;29924:18;;:::i;:::-;29910:34;29969:1;29966;29962:9;29954:17;;29786:191;;;;:::o;29983:96::-;30020:7;30049:24;30067:5;30049:24;:::i;:::-;30038:35;;29983:96;;;:::o;30085:90::-;30119:7;30162:5;30155:13;30148:21;30137:32;;30085:90;;;:::o;30181:76::-;30217:7;30246:5;30235:16;;30181:76;;;:::o;30263:126::-;30300:7;30340:42;30333:5;30329:54;30318:65;;30263:126;;;:::o;30395:77::-;30432:7;30461:5;30450:16;;30395:77;;;:::o;30478:86::-;30513:7;30553:4;30546:5;30542:16;30531:27;;30478:86;;;:::o;30570:307::-;30638:1;30648:113;30662:6;30659:1;30656:13;30648:113;;;30747:1;30742:3;30738:11;30732:18;30728:1;30723:3;30719:11;30712:39;30684:2;30681:1;30677:10;30672:15;;30648:113;;;30779:6;30776:1;30773:13;30770:101;;;30859:1;30850:6;30845:3;30841:16;30834:27;30770:101;30619:258;30570:307;;;:::o;30883:320::-;30927:6;30964:1;30958:4;30954:12;30944:22;;31011:1;31005:4;31001:12;31032:18;31022:81;;31088:4;31080:6;31076:17;31066:27;;31022:81;31150:2;31142:6;31139:14;31119:18;31116:38;31113:84;;;31169:18;;:::i;:::-;31113:84;30934:269;30883:320;;;:::o;31209:180::-;31257:77;31254:1;31247:88;31354:4;31351:1;31344:15;31378:4;31375:1;31368:15;31395:180;31443:77;31440:1;31433:88;31540:4;31537:1;31530:15;31564:4;31561:1;31554:15;31581:180;31629:77;31626:1;31619:88;31726:4;31723:1;31716:15;31750:4;31747:1;31740:15;31890:117;31999:1;31996;31989:12;32013:102;32054:6;32105:2;32101:7;32096:2;32089:5;32085:14;32081:28;32071:38;;32013:102;;;:::o;32121:::-;32163:8;32210:5;32207:1;32203:13;32182:34;;32121:102;;;:::o;32229:168::-;32369:20;32365:1;32357:6;32353:14;32346:44;32229:168;:::o;32403:222::-;32543:34;32539:1;32531:6;32527:14;32520:58;32612:5;32607:2;32599:6;32595:15;32588:30;32403:222;:::o;32631:221::-;32771:34;32767:1;32759:6;32755:14;32748:58;32840:4;32835:2;32827:6;32823:15;32816:29;32631:221;:::o;32858:225::-;32998:34;32994:1;32986:6;32982:14;32975:58;33067:8;33062:2;33054:6;33050:15;33043:33;32858:225;:::o;33089:221::-;33229:34;33225:1;33217:6;33213:14;33206:58;33298:4;33293:2;33285:6;33281:15;33274:29;33089:221;:::o;33316:179::-;33456:31;33452:1;33444:6;33440:14;33433:55;33316:179;:::o;33501:::-;33641:31;33637:1;33629:6;33625:14;33618:55;33501:179;:::o;33686:167::-;33826:19;33822:1;33814:6;33810:14;33803:43;33686:167;:::o;33859:225::-;33999:34;33995:1;33987:6;33983:14;33976:58;34068:8;34063:2;34055:6;34051:15;34044:33;33859:225;:::o;34090:182::-;34230:34;34226:1;34218:6;34214:14;34207:58;34090:182;:::o;34278:171::-;34418:23;34414:1;34406:6;34402:14;34395:47;34278:171;:::o;34455:166::-;34595:18;34591:1;34583:6;34579:14;34572:42;34455:166;:::o;34627:158::-;34767:10;34763:1;34755:6;34751:14;34744:34;34627:158;:::o;34791:227::-;34931:34;34927:1;34919:6;34915:14;34908:58;35000:10;34995:2;34987:6;34983:15;34976:35;34791:227;:::o;35024:182::-;35164:34;35160:1;35152:6;35148:14;35141:58;35024:182;:::o;35212:220::-;35352:34;35348:1;35340:6;35336:14;35329:58;35421:3;35416:2;35408:6;35404:15;35397:28;35212:220;:::o;35438:224::-;35578:34;35574:1;35566:6;35562:14;35555:58;35647:7;35642:2;35634:6;35630:15;35623:32;35438:224;:::o;35668:181::-;35808:33;35804:1;35796:6;35792:14;35785:57;35668:181;:::o;35855:223::-;35995:34;35991:1;35983:6;35979:14;35972:58;36064:6;36059:2;36051:6;36047:15;36040:31;35855:223;:::o;36084:224::-;36224:34;36220:1;36212:6;36208:14;36201:58;36293:7;36288:2;36280:6;36276:15;36269:32;36084:224;:::o;36314:179::-;36454:31;36450:1;36442:6;36438:14;36431:55;36314:179;:::o;36499:181::-;36639:33;36635:1;36627:6;36623:14;36616:57;36499:181;:::o;36686:122::-;36759:24;36777:5;36759:24;:::i;:::-;36752:5;36749:35;36739:63;;36798:1;36795;36788:12;36739:63;36686:122;:::o;36814:::-;36887:24;36905:5;36887:24;:::i;:::-;36880:5;36877:35;36867:63;;36926:1;36923;36916:12;36867:63;36814:122;:::o
Swarm Source
ipfs://6250ad630003e7455e55e8c56180a899b55e5a6579dee451e3a6e12adc60d61e
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.