ERC-20
Overview
Max Total Supply
1,005,740.008085648148144924 PENCIL
Holders
879
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Pencil
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-31 */ /********************************************************************************************** $$$$$$\ $$$$$$\ $$$$$$$\ $$$$$$$$\ $$\ $$\ $$$$$$\ $$$$$$\ $$\ $$ __$$\ $$\ $$ __$$\ $$ __$$\ $$ _____|$$$\ $$ |$$ __$$\ \_$$ _|$$ | \__/ $$ | $$ | \__/ $$ | $$ | $$ |$$ | $$$$\ $$ |$$ / \__| $$ | $$ | $$$$$$ |$$$$$$$$\ $$$$$$ | $$$$$$$ |$$$$$\ $$ $$\$$ |$$ | $$ | $$ | $$ ____/ \__$$ __|$$ ____/ $$ ____/ $$ __| $$ \$$$$ |$$ | $$ | $$ | $$ | $$ | $$ | $$ | $$ | $$ |\$$$ |$$ | $$\ $$ | $$ | $$$$$$$$\ \__| $$$$$$$$\ $$ | $$$$$$$$\ $$ | \$$ |\$$$$$$ |$$$$$$\ $$$$$$$$\ \________| \________| \__| \________|\__| \__| \______/ \______|\________| **********************************************************************************************/ // Powered by NFT Artisans (nftartisans.io) - [email protected] // Sources flattened with hardhat v2.6.8 https://hardhat.org // SPDX-License-Identifier: MIT // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @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/access/[email protected] pragma solidity ^0.8.0; /** * @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/token/ERC20/[email protected] pragma solidity ^0.8.0; /** * @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] pragma solidity ^0.8.0; /** * @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/token/ERC20/[email protected] pragma solidity ^0.8.0; /** * @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 contracts/Pencil.sol pragma solidity ^0.8.4; interface TPT { function balanceOf(address owner) external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); } interface TPTM is TPT { function balancesOfOwnerByRarity(address owner) external view returns (uint8[] memory); } /** * $PENCIL utility token for 2+2 ecosystem. * * Rewards system based on 2+2 Genesis NFT (addition) rarity levels and Gen2 (subtraction) NFT ownership. * When Gen3 (multiplication) NFT is deployed, multipliers will be applied based upon those rarity levels. * Future 2+2 ecosystem contracts will be authorized to burn tokens as part of the claiming process. * * We have followed the Solidity general layout of state variables in storage to compact the data and reduce gas. * Multiple, contiguous items that need less than 256 bits are packed into single storage slots when possible. */ contract Pencil is ERC20, Ownable { TPT public TPTGen1; TPT public TPTGen2; TPTM public TPTGen3; bool public accumulationActive = false; bool public accumulationMultiplier = false; uint48 public start; uint192 public cap; struct Level { uint64 dailyReward; uint64 multiplier; uint128 baseClaim; } struct TokenLengths { uint8 level0; uint8 level1; uint8 level2; uint8 level3; uint8 level4; uint8 level5; } bool[1953] private _gen1BaseClaimed; bool[1953] private _gen2BaseClaimed; uint8[1953] private _rewardLevel = [4,4,3,2,4,5,5,1,1,3,2,5,5,5,3,0,4,5,4,4,5,4,1,4,4,0,2,3,0,3,3,3,2,3,2,5,4,5,5,5,3,3,0,2,1,4,4,2,0,3,4,5,5,0,4,3,5,1,4,3,2,3,5,1,2,5,5,5,3,5,5,1,3,0,5,4,3,2,5,5,5,5,0,5,5,2,2,5,5,4,5,3,3,3,4,3,4,4,1,5,3,4,4,2,1,4,0,3,5,3,2,3,5,4,3,4,3,5,5,2,5,4,4,5,5,4,3,5,3,3,1,1,0,5,5,4,5,3,4,4,5,5,4,5,5,2,3,1,3,1,4,2,1,3,3,5,4,5,3,5,5,2,2,5,3,3,4,4,3,1,4,4,2,4,0,5,3,4,2,0,0,3,5,2,5,5,4,3,5,4,4,4,5,5,5,4,3,5,4,5,5,3,2,1,5,2,3,4,4,2,5,4,4,5,5,3,3,4,5,5,1,1,3,5,4,1,3,4,3,5,3,2,4,1,2,5,4,0,0,4,1,0,0,2,5,5,5,4,2,3,5,5,3,4,5,4,3,2,2,4,4,1,4,3,4,4,3,4,5,3,4,4,3,2,5,2,3,3,4,4,4,4,1,5,4,0,4,4,2,3,1,5,3,5,4,3,1,3,5,2,4,1,5,4,2,5,4,3,3,1,5,1,3,4,3,2,5,2,5,5,3,5,1,3,1,5,4,4,4,5,4,1,5,5,0,4,5,1,3,5,2,3,1,4,4,5,4,4,4,5,4,2,3,1,3,4,2,3,1,5,2,3,1,3,4,1,5,2,4,2,5,5,5,1,4,1,4,5,5,4,2,3,2,4,4,3,4,3,0,2,2,4,1,2,1,3,2,3,1,4,4,4,3,3,3,1,3,4,4,4,1,5,3,2,4,4,3,5,4,1,4,2,2,3,3,0,5,5,4,5,5,4,0,4,5,3,3,3,4,4,5,4,2,2,2,1,2,3,3,5,4,5,3,4,4,5,5,5,3,4,1,4,3,4,4,5,4,5,5,3,3,2,2,5,5,4,2,3,3,4,1,4,4,0,2,3,5,5,3,4,4,3,3,5,5,2,4,0,4,2,2,2,5,2,4,1,5,5,4,5,0,5,5,4,5,5,3,0,4,1,5,3,5,1,3,5,5,5,2,3,1,1,2,3,3,5,4,5,2,5,2,1,1,1,3,2,5,3,1,4,2,5,5,2,5,4,4,5,2,5,5,4,5,5,5,1,4,4,5,3,5,4,3,2,1,2,5,5,2,4,0,3,3,4,1,3,3,4,2,5,5,5,4,5,5,4,4,5,3,4,5,4,2,4,3,3,2,0,5,0,3,5,3,3,5,0,3,2,3,3,5,4,1,2,4,2,5,3,0,4,1,1,5,5,3,5,1,3,5,5,4,3,0,1,5,0,5,2,5,4,1,1,5,4,5,3,1,3,5,5,1,4,4,4,1,2,3,1,3,3,3,4,1,5,0,2,5,2,4,5,5,5,3,4,2,0,2,3,3,2,4,3,3,4,2,0,1,4,5,5,4,4,3,1,1,4,3,5,4,1,5,5,4,0,4,4,2,2,5,4,5,4,5,4,3,2,5,4,2,5,5,3,5,1,1,5,3,4,1,5,2,4,5,2,5,2,2,4,5,5,0,1,3,1,4,5,5,5,4,5,3,2,3,4,3,4,2,3,4,2,5,1,2,4,3,4,4,2,4,4,5,4,2,4,2,4,5,5,4,4,4,1,5,1,1,2,1,2,5,5,4,3,2,5,5,3,4,5,0,1,5,3,4,5,5,2,1,5,4,4,5,3,0,1,2,2,1,5,1,5,4,3,5,5,5,4,2,4,4,1,3,3,5,4,0,5,5,5,4,2,2,1,5,4,2,5,4,3,1,3,3,5,2,4,3,5,2,4,5,5,3,2,4,2,5,3,5,5,4,2,4,3,5,3,5,4,0,3,3,4,3,5,2,5,4,1,3,4,0,4,1,5,5,5,4,3,4,4,0,2,5,5,1,3,4,3,5,4,3,2,3,3,2,4,2,4,4,0,5,2,4,2,5,5,4,2,5,0,3,4,5,5,3,5,2,5,2,5,2,5,5,5,5,2,3,4,4,5,1,5,4,4,5,5,5,1,3,5,4,2,1,5,3,3,2,2,5,2,5,0,3,3,4,3,5,3,4,5,5,0,5,5,2,4,5,5,5,4,1,5,5,4,3,5,3,2,5,5,5,3,2,3,5,3,3,5,2,4,1,5,5,3,3,3,4,4,3,5,1,5,3,5,1,3,5,2,5,1,4,5,2,4,3,3,2,3,4,2,5,4,4,0,4,5,1,3,4,4,0,5,5,4,4,4,4,2,3,4,4,0,5,5,3,2,5,3,1,3,3,5,3,5,4,3,5,2,5,5,1,4,3,5,4,5,4,3,4,3,1,3,2,4,3,4,3,4,2,1,1,1,1,2,1,3,2,5,0,3,4,1,3,2,4,4,4,5,4,5,0,2,4,3,2,4,3,3,4,5,5,2,3,4,2,3,1,3,2,3,2,2,1,2,4,3,4,5,2,5,0,4,2,4,5,1,4,2,5,5,4,0,4,4,4,5,4,3,2,4,5,3,3,2,3,5,5,3,4,5,5,5,5,2,2,1,3,5,2,4,2,3,5,0,4,3,5,0,5,4,3,4,4,1,4,4,5,3,2,2,3,2,5,3,1,5,5,5,1,1,0,1,3,2,1,4,2,2,3,2,1,5,2,4,3,3,2,3,0,5,5,5,0,1,5,5,5,3,5,3,4,5,2,0,4,3,3,5,5,2,4,2,3,4,3,3,2,2,1,5,2,5,4,5,5,5,1,3,4,1,5,2,2,5,2,5,2,4,3,3,3,5,4,2,4,4,3,5,4,5,5,5,1,5,4,4,2,3,4,2,3,5,4,3,1,4,3,3,5,4,4,4,5,3,3,3,4,3,4,3,5,5,5,3,3,2,5,3,3,5,2,4,3,1,0,2,5,2,3,4,5,2,5,3,4,4,2,2,5,1,3,5,4,5,0,5,3,4,4,4,2,2,3,5,5,4,3,3,4,2,3,4,3,2,4,2,4,4,4,2,5,5,4,4,2,1,2,2,3,4,3,1,4,4,5,2,5,3,5,5,4,0,4,5,4,5,4,4,5,4,4,5,1,4,2,4,2,0,2,4,3,3,3,1,2,4,4,4,5,5,5,3,4,4,4,5,5,5,2,3,3,2,3,5,4,4,3,0,3,5,3,2,2,1,1,5,3,4,4,5,5,1,3,5,2,4,2,4,5,3,4,5,4,3,0,2,3,2,1,3,5,2,3,5,5,2,2,4,1,3,4,0,4,4,5,2,4,1,5,4,2,3,2,4,1,2,4,3,4,5,2,1,4,3,3,2,3,4,2,3,0,5,4,5,3,3,0,4,4,5,1,4,2,5,4,1,4,3,3,0,0,3,2,4,1,2,5,5,1,5,1,5,3,4,3,5,5,5,5,4,3,5,5,4,5,3,5,2,5,2,5,5,5,4,3,4,4,4,1,1,5,5,4,4,4,4,5,4,4,1,5,0,5,3,5,4,4,4,4,0,0,4,5,5,4,4,3,4,3,5,5,2,3,3,1,3,5,3,0,1,4,3,0,3,5,1,4,3,5,4,5,5,4,1,5,2,1,5,3,4,4,2,4,1,0,2,0,1,4,4,2,4,2,5,5,1,4,3,4,1,2,3,5,5,4,5,4,3,1,3,5,2,3,2,5,1,3,1,4,5,4,4,4,4,3,0,2,2,0,1,2,0,2,5,4,5,2,1,2,4,3,3,2,0,3,2,2,4,5,2,4,3,2,5,1,4,2,4,4,4,4,2,5,4,5,4,4,3,3,5,5,5,1,4,1,5,2,1,4,3,5,1,3,4,3,4,1,0,3,2,5,3,3,4,5,0,5,5,3,3,5,5,3,5,2,4,3,2,3,5,3,3,4,2,4,5,4,5,5,5,1,5,5,4,2,4,1,5,4,5,3,5,4,4,4,4,3,4,2,5,4,5,5,0,0,2,1,1,2,5,4,3,3,5,4,4,5,4,2,3,2,2,3,4,4,3,5,3,3,5,5,1,1,4,1,2,5,2,2,5,3,3,3,4,4,5,4,5,0,5,5,4,5,5,1,4,0,4,4,3,4,2,4,2,5,3,5,4,4,5,5,3,2,4,5,2,4,1,0,2,4,5,3,3,5,1,5,4,5,3,4,5,2,4,3,5,3,3,5,2,4,3,4,4,4,2,2,4,2,3,4,3,5,3,3,5,4,5,5,5,5,5,0,5,3,2,2,4,4,5,5,4,3,4,1]; uint48[1953] private _lastClaimed; mapping(uint256 => Level) public levels; mapping(address => bool) public allowedToBurn; event BaseRewardClaimed(uint256 gen1TokenId, uint256 gen2TokenId, uint256 amount); event RewardClaimed(uint256 gen1TokenId, uint256 amount); constructor(address gen1, address gen2) ERC20("Pencil", "PENCIL") { TPTGen1 = TPT(gen1); TPTGen2 = TPT(gen2); cap = 20000000 * 10 ** 18; _setLevel(0, 10, 60, 400); // Einstein _setLevel(1, 9, 50, 360); // Pythagoras _setLevel(2, 8, 40, 320); // Euclid _setLevel(3, 7, 30, 280); // Archimedes _setLevel(4, 6, 20, 240); // Aristotle _setLevel(5, 5, 10, 200); // Gauss _mint(_msgSender(), 20000 * 10 ** 18); } function burn(address user, uint256 amount) external { require(allowedToBurn[msg.sender], "Address does not have permission to burn"); _burn(user, amount); } // Checks an address for the total amount of base rewards they can claim for owning one or more Gen1 & Gen2 NFTs. // Note these NFTs may have already been claimed by a previous owner, as the base claim is tracked by token id. function checkBaseReward(address recipient) external view returns (uint256) { uint256 gen1Count = TPTGen1.balanceOf(recipient); require(gen1Count > 0, "Wallet must own a Genesis NFT"); uint256 gen2Count = TPTGen2.balanceOf(recipient); require(gen2Count > 0, "Wallet must own a Gen2 NFT"); uint256[] memory gen2TokenIds = new uint256[](gen2Count); uint256 gen2TokenIdsLength; for (uint256 i; i < gen2Count; i++) { uint256 gen2TokenId = TPTGen2.tokenOfOwnerByIndex(recipient, i); if (_gen2BaseClaimed[gen2TokenId] == false) { gen2TokenIds[gen2TokenIdsLength] = gen2TokenId; gen2TokenIdsLength++; } } require(gen2TokenIdsLength > 0, "No unclaimed Gen2 NFTs available"); uint256 total; for (uint256 i; i < gen1Count; i++) { uint256 gen1TokenId = TPTGen1.tokenOfOwnerByIndex(recipient, i); if (_gen1BaseClaimed[gen1TokenId] == false && gen2TokenIdsLength > 0) { gen2TokenIdsLength--; total += levels[_rewardLevel[gen1TokenId]].baseClaim; } } return total; } // Check if the base reward has been claimed for the given token id on either the gen1 or gen2 NFTs function checkBaseRewardByTokenId(uint256 nftId, uint8 gen) external view returns (bool) { require(nftId < 1953, "Invalid Token ID"); if (gen == 2) { return _gen1BaseClaimed[nftId]; } return _gen2BaseClaimed[nftId]; } // Checks an address for the total amount of accumulated daily rewards, but without any multipliers added function checkReward(address recipient) external view returns (uint256) { require(accumulationActive == true, "Reward claiming not active"); uint256 gen1Count = TPTGen1.balanceOf(recipient); require(gen1Count > 0, "Wallet must own a Genesis NFT"); uint256 total; for (uint256 i; i < gen1Count; i++) { uint256 gen1TokenId = TPTGen1.tokenOfOwnerByIndex(recipient, i); total += levels[_rewardLevel[gen1TokenId]].dailyReward * (block.timestamp - (_lastClaimed[gen1TokenId] > 0 ? _lastClaimed[gen1TokenId] : start)) / 86400; } return total; } // Claim the base $PENCIL rewards for all unclaimed Gen1 + Gen2 NFTs owned by the sender. Each NFT token must not // have already been claimed, and rewards based on Gen1 rarity level paired with an available Gen2. function claimBaseReward() external { uint256 gen1Count = TPTGen1.balanceOf(msg.sender); require(gen1Count > 0, "Wallet must own a Genesis NFT"); uint256 gen2Count = TPTGen2.balanceOf(msg.sender); require(gen2Count > 0, "Wallet must own a Gen2 NFT"); uint256[] memory gen2TokenIds = new uint256[](gen2Count); uint256 gen2TokenIdsLength; for (uint256 i; i < gen2Count; i++) { uint256 gen2TokenId = TPTGen2.tokenOfOwnerByIndex(msg.sender, i); if (_gen2BaseClaimed[gen2TokenId] == false) { gen2TokenIds[gen2TokenIdsLength] = gen2TokenId; gen2TokenIdsLength++; } } require(gen2TokenIdsLength > 0, "No unclaimed Gen2 NFTs available"); bool rewarded; for (uint256 i; i < gen1Count; i++) { uint256 gen1TokenId = TPTGen1.tokenOfOwnerByIndex(msg.sender, i); if (_gen1BaseClaimed[gen1TokenId] == false && gen2TokenIdsLength > 0) { gen2TokenIdsLength--; uint256 amount = levels[_rewardLevel[gen1TokenId]].baseClaim; _mint(_msgSender(), amount); _gen1BaseClaimed[gen1TokenId] = true; _gen2BaseClaimed[gen2TokenIds[gen2TokenIdsLength]] = true; rewarded = true; emit BaseRewardClaimed(gen1TokenId, gen2TokenIds[gen2TokenIdsLength], amount); } } require(rewarded == true, "No unclaimed Gen1 NFTs available"); } function claimReward() external { require(accumulationActive == true, "Reward claiming not active"); uint8[] memory multipliers = new uint8[](6); TokenLengths memory gen1TokenLengths; uint256 gen1Count = TPTGen1.balanceOf(msg.sender); uint256 gen3Count; uint256 total; uint256[] memory gen1TokenIdsLevel0 = new uint256[](gen1Count); uint256[] memory gen1TokenIdsLevel1 = new uint256[](gen1Count); uint256[] memory gen1TokenIdsLevel2 = new uint256[](gen1Count); uint256[] memory gen1TokenIdsLevel3 = new uint256[](gen1Count); uint256[] memory gen1TokenIdsLevel4 = new uint256[](gen1Count); uint256[] memory gen1TokenIdsLevel5 = new uint256[](gen1Count); require(gen1Count > 0, "Wallet must own a Genesis NFT"); // Capped due to possible stack limitations later on if (gen1Count > 40) { gen1Count = 40; } if (accumulationMultiplier == true) { gen3Count = TPTGen3.balanceOf(msg.sender); if (gen3Count > 0) { multipliers = TPTGen3.balancesOfOwnerByRarity(msg.sender); } } for (uint256 i; i < gen1Count; i++) { uint256 gen1TokenId = TPTGen1.tokenOfOwnerByIndex(msg.sender, i); if (_rewardLevel[gen1TokenId] == 5) { gen1TokenIdsLevel5[gen1TokenLengths.level5] = gen1TokenId; gen1TokenLengths.level5++; } else if (_rewardLevel[gen1TokenId] == 4) { gen1TokenIdsLevel4[gen1TokenLengths.level4] = gen1TokenId; gen1TokenLengths.level4++; } else if (_rewardLevel[gen1TokenId] == 3) { gen1TokenIdsLevel3[gen1TokenLengths.level3] = gen1TokenId; gen1TokenLengths.level3++; } else if (_rewardLevel[gen1TokenId] == 2) { gen1TokenIdsLevel2[gen1TokenLengths.level2] = gen1TokenId; gen1TokenLengths.level2++; } else if (_rewardLevel[gen1TokenId] == 1) { gen1TokenIdsLevel1[gen1TokenLengths.level1] = gen1TokenId; gen1TokenLengths.level1++; } else { gen1TokenIdsLevel0[gen1TokenLengths.level0] = gen1TokenId; gen1TokenLengths.level0++; } } // Einstein rewards if (gen1TokenLengths.level0 > 0) { total += _getClaim(gen1TokenIdsLevel0, multipliers, gen1TokenLengths, gen3Count, 0); } // Pythagoras rewards if (gen1TokenLengths.level1 > 0) { total += _getClaim(gen1TokenIdsLevel1, multipliers, gen1TokenLengths, gen3Count, 1); } // Euclid rewards if (gen1TokenLengths.level2 > 0) { total += _getClaim(gen1TokenIdsLevel2, multipliers, gen1TokenLengths, gen3Count, 2); } // Archimedes rewards if (gen1TokenLengths.level3 > 0) { total += _getClaim(gen1TokenIdsLevel3, multipliers, gen1TokenLengths, gen3Count, 3); } // Aristotle rewards if (gen1TokenLengths.level4 > 0) { total += _getClaim(gen1TokenIdsLevel4, multipliers, gen1TokenLengths, gen3Count, 4); } // Gauss rewards if (gen1TokenLengths.level5 > 0) { total += _getClaim(gen1TokenIdsLevel5, multipliers, gen1TokenLengths, gen3Count, 5); } _mint(_msgSender(), total); } function flipState() external onlyOwner { accumulationActive = !accumulationActive; if (start == 0) { start = uint48(block.timestamp); } } function flipStateMultiplier() external onlyOwner { accumulationMultiplier = !accumulationMultiplier; } function _getClaim(uint256[] memory _gen1TokenIds, uint8[] memory _multipliers, TokenLengths memory _gen1TokenLengths, uint256 _gen3Count, uint256 _levelIdx) internal returns (uint256) { uint256 total; uint256 gen1Count; uint256 multiplierIdx; if (_levelIdx == 5) { multiplierIdx = _gen1TokenLengths.level4 + _gen1TokenLengths.level3 + _gen1TokenLengths.level2 + _gen1TokenLengths.level1 + _gen1TokenLengths.level0; gen1Count = _gen1TokenLengths.level5; } else if (_levelIdx == 4) { multiplierIdx = _gen1TokenLengths.level3 + _gen1TokenLengths.level2 + _gen1TokenLengths.level1 + _gen1TokenLengths.level0; gen1Count = _gen1TokenLengths.level4; } else if (_levelIdx == 3) { multiplierIdx = _gen1TokenLengths.level2 + _gen1TokenLengths.level1 + _gen1TokenLengths.level0; gen1Count = _gen1TokenLengths.level3; } else if (_levelIdx == 2) { multiplierIdx = _gen1TokenLengths.level1 + _gen1TokenLengths.level0; gen1Count = _gen1TokenLengths.level2; } else if (_levelIdx == 1) { multiplierIdx = _gen1TokenLengths.level0; gen1Count = _gen1TokenLengths.level1; } else { gen1Count = _gen1TokenLengths.level0; } for (uint256 i; i < gen1Count; i++) { uint256 amount = levels[_levelIdx].dailyReward * (block.timestamp - (_lastClaimed[_gen1TokenIds[i]] > 0 ? _lastClaimed[_gen1TokenIds[i]] : start)) / 86400; if (multiplierIdx < _gen3Count) { for (uint256 l; l < 6; l++) { if (_multipliers[l] > 0) { amount += (amount * uint256(levels[l].multiplier)) / 100; _multipliers[l]--; break; } } multiplierIdx++; } total += amount; _lastClaimed[_gen1TokenIds[i]] = uint48(block.timestamp); emit RewardClaimed(_gen1TokenIds[i], amount); } return total; } function _mint(address account, uint256 amount) internal virtual override { require(totalSupply() + amount <= cap, "Cap exceeded"); super._mint(account, amount); } function setCap(uint192 amount) external onlyOwner { require(amount > 0, "Invalid cap"); cap = amount * 10 ** 18; } function setAllowedToBurn(address account, bool allowed) public onlyOwner { allowedToBurn[account] = allowed; } function setLevel(uint256 idx, uint64 dailyReward, uint64 multiplier, uint128 baseClaim) external onlyOwner { require(idx >= 0 && idx <= 6, "Invalid level index"); require(baseClaim > 0, "Base claim must be greater than 0"); require(dailyReward > 0, "Daily reward must be greater than 0"); require(multiplier >= 0, "Invalid multiplier bonus"); _setLevel(idx, dailyReward, multiplier, baseClaim); } function _setLevel(uint256 _idx, uint64 _dailyReward, uint64 _multiplier, uint128 _baseClaim) internal { levels[_idx] = Level(_dailyReward * 10 ** 18, _multiplier, _baseClaim * 10 ** 18); } function setMultiplierAddress(address account) external onlyOwner { TPTGen3 = TPTM(account); setAllowedToBurn(account, true); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"gen1","type":"address"},{"internalType":"address","name":"gen2","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gen1TokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gen2TokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BaseRewardClaimed","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":"gen1TokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"TPTGen1","outputs":[{"internalType":"contract TPT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TPTGen2","outputs":[{"internalType":"contract TPT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TPTGen3","outputs":[{"internalType":"contract TPTM","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accumulationActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accumulationMultiplier","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedToBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint192","name":"","type":"uint192"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"checkBaseReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint8","name":"gen","type":"uint8"}],"name":"checkBaseRewardByTokenId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"checkReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimBaseReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipStateMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"levels","outputs":[{"internalType":"uint64","name":"dailyReward","type":"uint64"},{"internalType":"uint64","name":"multiplier","type":"uint64"},{"internalType":"uint128","name":"baseClaim","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setAllowedToBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint192","name":"amount","type":"uint192"}],"name":"setCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"},{"internalType":"uint64","name":"dailyReward","type":"uint64"},{"internalType":"uint64","name":"multiplier","type":"uint64"},{"internalType":"uint128","name":"baseClaim","type":"uint128"}],"name":"setLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setMultiplierAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6008805461ffff60a01b1916905561f4a06040526004608081815260a0829052600360c0819052600260e0819052610100849052600561012081905261014081905260016101608190526101808190526101a08490526101c08390526101e082905261020082905261022082905261024084905260006102608190526102808790526102a08390526102c08790526102e08790526103008390526103208790526103408290526103608790526103808790526103a08190526103c08490526103e08590526104008190526104208590526104408590526104608590526104808490526104a08590526104c08490526104e08390526105008790526105208390526105408390526105608390526105808590526105a08590526105c08190526105e08490526106008290526106208790526106408790526106608490526106808190526106a08590526106c08790526106e08390526107008390526107208190526107408790526107608590526107808390526107a08290526107c08790526107e08590526108008490526108208590526108408390526108608290526108808490526108a08390526108c08390526108e08390526109008590526109208390526109408390526109608290526109808590526109a08190526109c08390526109e0879052610a00859052610a20849052610a40839052610a60839052610a80839052610aa0839052610ac0819052610ae0839052610b00839052610b20849052610b40849052610b60839052610b80839052610ba0879052610bc0839052610be0859052610c00859052610c20859052610c40879052610c60859052610c80879052610ca0879052610cc0829052610ce0839052610d00859052610d20879052610d40879052610d60849052610d80829052610da0879052610dc0819052610de0859052610e00839052610e20859052610e40849052610e60859052610e80839052610ea0879052610ec0859052610ee0879052610f00859052610f20839052610f40839052610f60849052610f80839052610fa0879052610fc0879052610fe08390526110008390526110208790526110408590526110608390526110808590526110a08590526110c08290526110e08290526111008190526111208390526111408390526111608790526111808390526111a08590526111c08790526111e08790526112008390526112208390526112408790526112608390526112808390526112a08490526112c08590526112e08290526113008590526113208290526113408790526113608490526113808290526113a08590526113c08590526113e08390526114008790526114208390526114408590526114608390526114808390526114a08490526114c08490526114e08390526115008590526115208590526115408790526115608790526115808590526115a08290526115c08790526115e08790526116008490526116208790526116408190526116608390526116808590526116a08790526116c08490526116e08190526117008190526117208590526117408390526117608490526117808390526117a08390526117c08790526117e08590526118008390526118208790526118408790526118608790526118808390526118a08390526118c08390526118e08790526119008590526119208390526119408790526119608390526119808390526119a08590526119c08490526119e0829052611a00839052611a20849052611a40859052611a60879052611a80879052611aa0849052611ac0839052611ae0879052611b00879052611b20839052611b40839052611b60859052611b80859052611ba0879052611bc0839052611be0839052611c00829052611c20829052611c40859052611c60839052611c80879052611ca0829052611cc0859052611ce0879052611d00859052611d20839052611d40859052611d60849052611d80879052611da0829052611dc0849052611de0839052611e00879052611e20819052611e40819052611e60879052611e80829052611ea0819052611ec0819052611ee0849052611f00839052611f20839052611f40839052611f60879052611f80849052611fa0859052611fc0839052611fe08390526120008590526120208790526120408390526120608790526120808590526120a08490526120c08490526120e08790526121008790526121208290526121408790526121608590526121808790526121a08790526121c08590526121e08790526122008390526122208590526122408790526122608790526122808590526122a08490526122c08390526122e08490526123008590526123208590526123408790526123608790526123808790526123a08790526123c08290526123e08390526124008790526124208190526124408790526124608790526124808490526124a08590526124c08290526124e08390526125008590526125208390526125408790526125608590526125808290526125a08590526125c08390526125e08490526126008790526126208290526126408390526126608790526126808490526126a08390526126c08790526126e08590526127008590526127208290526127408390526127608290526127808590526127a08790526127c08590526127e08490526128008390526128208490526128408390526128608390526128808590526128a08390526128c08290526128e08590526129008290526129208390526129408790526129608790526129808790526129a08390526129c08790526129e0829052612a00839052612a20839052612a40819052612a60879052612a80839052612aa0829052612ac0859052612ae0839052612b00849052612b20859052612b40829052612b60879052612b80879052612ba0839052612bc0879052612be0879052612c00879052612c20839052612c40879052612c60849052612c80859052612ca0829052612cc0859052612ce0879052612d00849052612d20859052612d40829052612d60839052612d80849052612da0859052612dc0829052612de0859052612e00879052612e20829052612e40839052612e60849052612e80879052612ea0849052612ec0839052612ee0839052612f00839052612f20829052612f40879052612f60829052612f80879052612fa0839052612fc0839052612fe08790526130008490526130208590526130408490526130608790526130808790526130a08590526130c08790526130e08590526131008190526131208490526131408490526131608790526131808290526131a08490526131c08290526131e08590526132008490526132208590526132408290526132608790526132808790526132a08790526132c08590526132e08590526133008590526133208290526133408590526133608790526133808790526133a08790526133c08290526133e08390526134008590526134208490526134408790526134608790526134808590526134a08390526134c08790526134e08290526135008790526135208490526135408490526135608590526135808590526135a08190526135c08390526135e08390526136008790526136208390526136408390526136608790526136808190526136a08790526136c08390526136e08590526137008590526137208590526137408790526137608790526137808390526137a08790526137c08490526137e08490526138008490526138208290526138408490526138608590526138808590526138a08390526138c08790526138e08390526139008590526139208790526139408790526139608390526139808390526139a08390526139c08590526139e0879052613a00829052613a20879052613a40859052613a60879052613a80879052613aa0839052613ac0879052613ae0839052613b00839052613b20859052613b40859052613b60849052613b80849052613ba0839052613bc0839052613be0879052613c00849052613c20859052613c40859052613c60879052613c80829052613ca0879052613cc0879052613ce0819052613d00849052613d20859052613d40839052613d60839052613d80859052613da0879052613dc0879052613de0859052613e00859052613e20839052613e40839052613e60849052613e80879052613ea0819052613ec0879052613ee0849052613f00849052613f20849052613f40839052613f60849052613f80879052613fa0829052613fc0839052613fe08390526140008790526140208390526140408190526140608390526140808390526140a08790526140c08390526140e08390526141008590526141208190526141408790526141608290526141808390526141a08590526141c08390526141e08290526142008590526142208390526142408390526142608390526142808490526142a08590526142c08290526142e08290526143008490526143208590526143408590526143608390526143808790526143a08390526143c08490526143e08390526144008490526144208290526144408290526144608290526144808590526144a08490526144c08390526144e08590526145008290526145208790526145408490526145608390526145808390526145a08490526145c08390526145e08790526146008790526146208390526146408490526146608390526146808390526146a08790526146c08390526146e08390526147008390526147208290526147408790526147608790526147808390526147a08590526147c08390526147e08790526148008590526148208490526148408290526148608490526148808390526148a08390526148c08490526148e08790526149008190526149208590526149408590526149608790526149808290526149a08590526149c08590526149e0879052614a00849052614a20839052614a40839052614a60839052614a80879052614aa0839052614ac0839052614ae0879052614b00879052614b20839052614b40859052614b60879052614b80839052614ba0879052614bc0849052614be0879052614c00859052614c20859052614c40849052614c60819052614c80839052614ca0819052614cc0859052614ce0839052614d00859052614d20859052614d40839052614d60819052614d80859052614da0849052614dc0859052614de0859052614e00839052614e20879052614e40829052614e60849052614e80879052614ea0849052614ec0839052614ee0859052614f00819052614f20879052614f40829052614f60829052614f80839052614fa0839052614fc0859052614fe08390526150008290526150208590526150408390526150608390526150808790526150a08590526150c08190526150e08290526151008390526151208190526151408390526151608490526151808390526151a08790526151c08290526151e08290526152008390526152208790526152408390526152608590526152808290526152a08590526152c08390526152e08390526153008290526153208790526153408790526153608790526153808290526153a08490526153c08590526153e08290526154008590526154208590526154408590526154608790526154808290526154a08390526154c08190526154e08490526155008390526155208490526155408790526155608390526155808390526155a08390526155c08590526155e08790526156008490526156208190526156408490526156608590526156808590526156a08490526156c08790526156e08590526157008590526157208790526157408490526157608190526157808290526157a08790526157c08390526157e08390526158008790526158208790526158408590526158608290526158808290526158a08790526158c08590526158e08390526159008790526159208290526159408390526159608390526159808790526159a08190526159c08790526159e0879052615a00849052615a20849052615a40839052615a60879052615a80839052615aa0879052615ac0839052615ae0879052615b00859052615b20849052615b40839052615b60879052615b80849052615ba0839052615bc0839052615be0859052615c00839052615c20829052615c40829052615c60839052615c80859052615ca0879052615cc0829052615ce0839052615d00849052615d20879052615d40839052615d60849052615d80839052615da0849052615dc0849052615de0879052615e00839052615e20839052615e40819052615e60829052615e80859052615ea0829052615ec0879052615ee0839052615f00839052615f20839052615f40879052615f60839052615f80859052615fa0849052615fc0859052615fe08790526160008590526160208790526160408490526160608590526160808790526160a08490526160c08390526160e08290526161008490526161208790526161408590526161608790526161808790526161a08490526161c08790526161e08790526162008390526162208790526162408490526162608790526162808490526162a08790526162c08390526162e08390526163008790526163208790526163408790526163608290526163808390526163a08290526163c08290526163e08490526164008290526164208490526164408390526164608390526164808790526164a08590526164c08490526164e08390526165008390526165208590526165408790526165608390526165808190526165a08290526165c08390526165e08590526166008790526166208390526166408390526166608490526166808290526166a08390526166c08790526166e08790526167008390526167208590526167408190526167608290526167808490526167a08490526167c08290526167e08390526168008290526168208390526168408790526168608590526168808390526168a08390526168c08390526168e08790526169008490526169208790526169408790526169608290526169808590526169a08590526169c08390526169e0879052616a00819052616a20839052616a40839052616a60839052616a80879052616aa0849052616ac0849052616ae0829052616b00839052616b20879052616b40849052616b60839052616b80879052616ba0859052616bc0829052616be0859052616c00859052616c20839052616c40849052616c60879052616c80859052616ca0839052616cc0849052616ce0879052616d00839052616d20839052616d40859052616d60849052616d80879052616da0849052616dc0839052616de0859052616e00839052616e20839052616e40879052616e60849052616e80879052616ea0859052616ec0839052616ee0859052616f00839052616f20879052616f40819052616f60859052616f80859052616fa0879052616fc0859052616fe08390526170008490526170208390526170408790526170608290526170808590526170a08790526170c08190526170e08790526171008290526171208390526171408390526171608390526171808790526171a08590526171c08790526171e08790526172008190526172208490526172408390526172608390526172808290526172a08590526172c08790526172e08590526173008390526173208790526173408590526173608490526173808590526173a08590526173c08490526173e08790526174008490526174208790526174408790526174608190526174808390526174a08490526174c08790526174e08490526175008390526175208390526175408790526175608490526175808390526175a08190526175c08590526175e08790526176008390526176208390526176408590526176608390526176808490526176a08390526176c08490526176e08390526177008490526177208390526177408390526177608390526177808390526177a08490526177c08590526177e08790526178008790526178208390526178408290526178608390526178808790526178a08790526178c08390526178e08390526179008390526179208290526179408590526179608390526179808790526179a08490526179c08290526179e0839052617a00859052617a20859052617a40849052617a60849052617a80839052617aa0849052617ac0839052617ae0819052617b00859052617b20859052617b40879052617b60859052617b80839052617ba0859052617bc0879052617be0839052617c00839052617c20819052617c40839052617c60839052617c80849052617ca0879052617cc0839052617ce0839052617d00839052617d20879052617d40829052617d60839052617d80839052617da0879052617dc0859052617de0839052617e00859052617e20849052617e40839052617e60839052617e80839052617ea0859052617ec0849052617ee0859052617f00839052617f20859052617f40859052617f60839052617f80849052617fa0879052617fc0829052617fe08390526180008390526180208590526180408590526180608590526180808790526180a08790526180c08590526180e08390526181008290526181208390526181408590526181608390526181808290526181a08590526181c08390526181e08490526182008390526182208290526182408790526182608390526182808490526182a08790526182c08590526182e08590526183008490526183208590526183408790526183608490526183808390526183a08790526183c08790526183e08190526184008790526184208390526184408290526184608590526184808790526184a08790526184c08190526184e08390526185008390526185208790526185408790526185608790526185808790526185a08490526185c08590526185e08790526186008790526186208190526186408390526186608390526186808590526186a08490526186c08390526186e08590526187008290526187208590526187408590526187608390526187808590526187a08390526187c08790526187e08590526188008390526188208490526188408390526188608390526188808290526188a08790526188c08590526188e08390526189008790526189208390526189408790526189608590526189808790526189a08590526189c08290526189e0859052618a00849052618a20879052618a40859052618a60879052618a80859052618aa0879052618ac0849052618ae0829052618b00829052618b20829052618b40829052618b60849052618b80829052618ba0859052618bc0849052618be0839052618c00819052618c20859052618c40879052618c60829052618c80859052618ca0849052618cc0879052618ce0879052618d00879052618d20839052618d40879052618d60839052618d80819052618da0849052618dc0879052618de0859052618e00849052618e20879052618e40859052618e60859052618e80879052618ea0839052618ec0839052618ee0849052618f00859052618f20879052618f40849052618f60859052618f80829052618fa0859052618fc0849052618fe08590526190008490526190208490526190408290526190608490526190808790526190a08590526190c08790526190e08390526191008490526191208390526191408190526191608790526191808490526191a08790526191c08390526191e08290526192008790526192208490526192408390526192608390526192808790526192a08190526192c08790526192e08790526193008790526193208390526193408790526193608590526193808490526193a08790526193c08390526193e08590526194008590526194208490526194408590526194608390526194808390526194a08590526194c08790526194e08390526195008390526195208390526195408390526195608490526195808490526195a08290526195c08590526195e08390526196008490526196208790526196408490526196608590526196808390526196a08190526196c08790526196e08590526197008390526197208190526197408390526197608790526197808590526197a08790526197c08790526197e08290526198008790526198208790526198408390526198608590526198808490526198a08490526198c08590526198e08490526199008390526199208590526199408290526199608390526199808390526199a08390526199c08290526199e0829052619a00819052619a20829052619a40859052619a60849052619a80829052619aa0879052619ac0849052619ae0849052619b00859052619b20849052619b40829052619b60839052619b80849052619ba0879052619bc0859052619be0859052619c00849052619c20859052619c40819052619c60839052619c80839052619ca0839052619cc0819052619ce0829052619d00839052619d20839052619d40839052619d60859052619d80839052619da0859052619dc0879052619de0839052619e00849052619e20819052619e40879052619e60859052619e80859052619ea0839052619ec0839052619ee0849052619f00879052619f20849052619f40859052619f60879052619f80859052619fa0859052619fc0849052619fe084905261a00082905261a02083905261a04084905261a06083905261a08087905261a0a083905261a0c083905261a0e083905261a10082905261a12085905261a14087905261a16082905261a18083905261a1a084905261a1c084905261a1e083905261a20084905261a22083905261a24084905261a26087905261a28085905261a2a085905261a2c085905261a2e083905261a30087905261a32084905261a34087905261a36087905261a38085905261a3a083905261a3c087905261a3e083905261a40083905261a42083905261a44082905261a46083905261a48087905261a4a087905261a4c084905261a4e085905261a50087905261a52084905261a54085905261a56083905261a58087905261a5a085905261a5c082905261a5e087905261a60085905261a62085905261a64083905261a66087905261a68087905261a6a087905261a6c083905261a6e085905261a70085905261a72085905261a74087905261a76085905261a78087905261a7a085905261a7c083905261a7e083905261a80083905261a82085905261a84085905261a86084905261a88083905261a8a085905261a8c085905261a8e083905261a90084905261a92087905261a94085905261a96082905261a98081905261a9a084905261a9c083905261a9e084905261aa0085905261aa2087905261aa4083905261aa6084905261aa8083905261aaa085905261aac087905261aae087905261ab0084905261ab2084905261ab4083905261ab6082905261ab8085905261aba083905261abc087905261abe083905261ac0081905261ac2083905261ac4085905261ac6087905261ac8087905261aca087905261acc084905261ace084905261ad0085905261ad2083905261ad4083905261ad6087905261ad8085905261ada085905261adc087905261ade084905261ae0085905261ae2087905261ae4085905261ae6084905261ae8087905261aea084905261aec087905261aee087905261af0087905261af2084905261af4083905261af6083905261af8087905261afa087905261afc084905261afe082905261b00084905261b02084905261b04085905261b06087905261b08085905261b0a082905261b0c087905261b0e087905261b10083905261b12084905261b14083905261b16085905261b18083905261b1a083905261b1c087905261b1e081905261b20087905261b22083905261b24087905261b26083905261b28087905261b2a087905261b2c083905261b2e087905261b30087905261b32083905261b34082905261b36087905261b38084905261b3a087905261b3c084905261b3e081905261b40084905261b42087905261b44085905261b46085905261b48085905261b4a082905261b4c084905261b4e087905261b50087905261b52087905261b54083905261b56083905261b58083905261b5a085905261b5c087905261b5e087905261b60087905261b62083905261b64083905261b66083905261b68084905261b6a085905261b6c085905261b6e084905261b70085905261b72083905261b74087905261b76087905261b78085905261b7a081905261b7c085905261b7e083905261b80085905261b82084905261b84084905261b86082905261b88082905261b8a083905261b8c085905261b8e087905261b90087905261b92083905261b94083905261b96082905261b98085905261b9a083905261b9c084905261b9e087905261ba0084905261ba2087905261ba4083905261ba6085905261ba8087905261baa083905261bac087905261bae085905261bb0081905261bb2084905261bb4085905261bb6084905261bb8082905261bba085905261bbc083905261bbe084905261bc0085905261bc2083905261bc4083905261bc6084905261bc8084905261bca087905261bcc082905261bce085905261bd0087905261bd2081905261bd4087905261bd6087905261bd8083905261bda084905261bdc087905261bde082905261be0083905261be2087905261be4084905261be6085905261be8084905261bea087905261bec082905261bee084905261bf0087905261bf2085905261bf4087905261bf6083905261bf8084905261bfa082905261bfc087905261bfe085905261c00085905261c02084905261c04085905261c06087905261c08084905261c0a085905261c0c081905261c0e083905261c10087905261c12083905261c14085905261c16085905261c18081905261c1a087905261c1c087905261c1e083905261c20082905261c22087905261c24084905261c26083905261c28087905261c2a082905261c2c087905261c2e085905261c30085905261c32081905261c34081905261c36085905261c38084905261c3a087905261c3c082905261c3e084905261c40083905261c42083905261c44082905261c46083905261c48082905261c4a083905261c4c085905261c4e087905261c50085905261c52083905261c54083905261c56083905261c58083905261c5a087905261c5c085905261c5e083905261c60083905261c62087905261c64083905261c66085905261c68083905261c6a084905261c6c083905261c6e084905261c70083905261c72083905261c74083905261c76087905261c78085905261c7a087905261c7c087905261c7e087905261c80082905261c82082905261c84083905261c86083905261c88087905261c8a087905261c8c087905261c8e087905261c90083905261c92087905261c94087905261c96082905261c98083905261c9a081905261c9c083905261c9e085905261ca0083905261ca2087905261ca4087905261ca6087905261ca8087905261caa081905261cac081905261cae087905261cb0083905261cb2083905261cb4087905261cb6087905261cb8085905261cba087905261cbc085905261cbe083905261cc0083905261cc2084905261cc4085905261cc6085905261cc8082905261cca085905261ccc083905261cce085905261cd0081905261cd2082905261cd4087905261cd6085905261cd8081905261cda085905261cdc083905261cde082905261ce0087905261ce2085905261ce4083905261ce6087905261ce8083905261cea083905261cec087905261cee082905261cf0083905261cf2084905261cf4082905261cf6083905261cf8085905261cfa087905261cfc087905261cfe084905261d00087905261d02082905261d04081905261d06084905261d08081905261d0a082905261d0c087905261d0e087905261d10084905261d12087905261d14084905261d16083905261d18083905261d1a082905261d1c087905261d1e085905261d20087905261d22082905261d24084905261d26085905261d28083905261d2a083905261d2c087905261d2e083905261d30087905261d32085905261d34082905261d36085905261d38083905261d3a084905261d3c085905261d3e084905261d40083905261d42082905261d44085905261d46082905261d48087905261d4a083905261d4c087905261d4e087905261d50087905261d52087905261d54085905261d56081905261d58084905261d5a084905261d5c081905261d5e082905261d60084905261d62081905261d64084905261d66083905261d68087905261d6a083905261d6c084905261d6e082905261d70084905261d72087905261d74085905261d76085905261d78084905261d7a081905261d7c085905261d7e084905261d80084905261d82087905261d84083905261d86084905261d88087905261d8a085905261d8c084905261d8e083905261d90082905261d92087905261d94084905261d96087905261d98087905261d9a087905261d9c087905261d9e084905261da0083905261da2087905261da4083905261da6087905261da8087905261daa085905261dac085905261dae083905261db0083905261db2083905261db4082905261db6087905261db8082905261dba083905261dbc084905261dbe082905261dc0087905261dc2085905261dc4083905261dc6082905261dc8085905261dca087905261dcc085905261dce087905261dd0082905261dd2081905261dd4085905261dd6084905261dd8083905261dda085905261ddc085905261dde087905261de0083905261de2081905261de4083905261de6083905261de8085905261dea085905261dec083905261dee083905261df0085905261df2083905261df4084905261df6087905261df8085905261dfa084905261dfc085905261dfe083905261e00085905261e02085905261e04087905261e06084905261e08087905261e0a083905261e0c087905261e0e083905261e10083905261e12083905261e14082905261e16083905261e18083905261e1a087905261e1c084905261e1e087905261e20082905261e22083905261e24087905261e26083905261e28085905261e2a083905261e2c087905261e2e087905261e30087905261e32087905261e34085905261e36087905261e38084905261e3a083905261e3c087905261e3e083905261e40083905261e42081905261e44081905261e46084905261e48082905261e4a082905261e4c084905261e4e083905261e50087905261e52085905261e54085905261e56083905261e58087905261e5a087905261e5c083905261e5e087905261e60084905261e62085905261e64084905261e66084905261e68085905261e6a087905261e6c087905261e6e085905261e70083905261e72085905261e74085905261e76083905261e78083905261e7a082905261e7c082905261e7e087905261e80082905261e82084905261e84083905261e86084905261e88084905261e8a083905261e8c085905261e8e085905261e90085905261e92087905261e94087905261e96083905261e98087905261e9a083905261e9c081905261e9e083905261ea0083905261ea2087905261ea4083905261ea6083905261ea8082905261eaa087905261eac081905261eae087905261eb0087905261eb2085905261eb4087905261eb6084905261eb8087905261eba084905261ebc083905261ebe085905261ec0083905261ec2087905261ec4087905261ec6083905261ec8083905261eca085905261ecc084905261ece087905261ed0083905261ed2084905261ed4087905261ed6082905261ed8081905261eda084905261edc087905261ede083905261ee0085905261ee2085905261ee4083905261ee6082905261ee8083905261eea087905261eec083905261eee085905261ef0087905261ef2083905261ef4084905261ef6087905261ef8085905261efa083905261efc085905261efe085905261f00083905261f02084905261f04087905261f06085905261f08087905261f0a087905261f0c087905261f0e084905261f10084905261f12087905261f14084905261f16085905261f18087905261f1a085905261f1c083905261f1e085905261f20085905261f22083905261f24087905261f26083905261f28083905261f2a083905261f2c083905261f2e083905261f3005261f32082905261f34084905261f36083905261f3809290925261f3a085905261f3c085905261f3e081905261f4005261f42084905261f4409190915261f4609290925261f4809190915262002df2906086906107a1620031fe565b5034801562002e0057600080fd5b50604051620068fe380380620068fe83398101604081905262002e239162003349565b6040518060400160405280600681526020016514195b98da5b60d21b8152506040518060400160405280600681526020016514115390d25360d21b815250816003908051906020019062002e7992919062003298565b50805162002e8f90600490602084019062003298565b50505062002eac62002ea662002f8660201b60201c565b62002f8a565b600680546001600160a01b038085166001600160a01b0319928316179092556007805492841692909116919091179055600980546001600160c01b0319166a108b2a2c2802909400000017905562002f0c6000600a603c61019062002fdc565b62002f1f60016009603261016862002fdc565b62002f3260026008602861014062002fdc565b62002f4560036007601e61011862002fdc565b62002f5760046006601460f062002fdc565b62002f68600580600a60c862002fdc565b62002f7e3369043c33c193756480000062003096565b505062003449565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051806060016040528084670de0b6b3a764000062002ffd9190620033cd565b6001600160401b039081168252841660208201526040016200302883670de0b6b3a76400006200339b565b6001600160801b03908116909152600095865261024b6020908152604096879020835181549285015194909801518316600160801b026001600160401b0394851668010000000000000000026001600160801b03199093169490981693909317171694909417909355505050565b6009546001600160c01b031681620030ad60025490565b620030b9919062003380565b1115620030fc5760405162461bcd60e51b815260206004820152600c60248201526b10d85c08195e18d95959195960a21b60448201526064015b60405180910390fd5b6200311382826200311760201b620023ec1760201c565b5050565b6001600160a01b0382166200316f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620030f3565b806002600082825462003183919062003380565b90915550506001600160a01b03821660009081526020819052604081208054839290620031b290849062003380565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a362003113565b603e83019183908215620032865791602002820160005b838211156200325557835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030262003215565b8015620032845782816101000a81549060ff021916905560010160208160000104928301926001030262003255565b505b506200329492915062003315565b5090565b828054620032a690620033f6565b90600052602060002090601f016020900481019282620032ca576000855562003286565b82601f10620032e557805160ff191683800117855562003286565b8280016001018555821562003286579182015b8281111562003286578251825591602001919060010190620032f8565b5b8082111562003294576000815560010162003316565b80516001600160a01b03811681146200334457600080fd5b919050565b600080604083850312156200335c578182fd5b62003367836200332c565b915062003377602084016200332c565b90509250929050565b6000821982111562003396576200339662003433565b500190565b60006001600160801b0382811684821681151582840482111615620033c457620033c462003433565b02949350505050565b60006001600160401b0382811684821681151582840482111615620033c457620033c462003433565b600181811c908216806200340b57607f821691505b602082108114156200342d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6134a580620034596000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c806381ed418511610125578063be9a6555116100ad578063dd62ed3e1161007c578063dd62ed3e146104f6578063f2fde38b1461052f578063fc0b230214610542578063fe75ac5d14610555578063ff7f6c701461056857600080fd5b8063be9a65551461048d578063c3c90e64146104bd578063cd980c8a146104d0578063d3bd77d9146104e357600080fd5b80639dc29fac116100f45780639dc29fac146103d5578063a457c2d7146103e8578063a9059cbb146103fb578063b2596a671461040e578063b88a802f1461048557600080fd5b806381ed4185146103985780638da5cb5b146103a05780638e920351146103c557806395d89b41146103cd57600080fd5b80632e8683f2116101a85780633e89726d116101775780633e89726d1461032d578063527535d51461034157806353e9e27a1461035457806370a0823114610367578063715018a61461039057600080fd5b80632e8683f2146102cc578063313ce567146102e0578063355274ea146102ef578063395093511461031a57600080fd5b806312f68c97116101e457806312f68c971461028a57806318160ddd1461029457806323b872dd146102a65780632c864c69146102b957600080fd5b806301a647ce146102165780630466c4f81461023e57806306fdde0314610262578063095ea7b314610277575b600080fd5b610229610224366004613199565b61057b565b60405190151581526020015b60405180910390f35b61022961024c366004612f32565b61024c6020526000908152604090205460ff1681565b61026a610652565b60405161023591906131bd565b610229610285366004612ffa565b6106e4565b6102926106fa565b005b6002545b604051908152602001610235565b6102296102b4366004612f85565b610d02565b6102926102c7366004613140565b610dac565b60085461022990600160a01b900460ff1681565b60405160128152602001610235565b600954610302906001600160c01b031681565b6040516001600160c01b039091168152602001610235565b610229610328366004612ffa565b610ef7565b60085461022990600160a81b900460ff1681565b61029261034f366004612fc0565b610f33565b6102926103623660046130e9565b610f89565b610298610375366004612f32565b6001600160a01b031660009081526020819052604090205490565b61029261102f565b610292611065565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610235565b6102926110b0565b61026a611132565b6102926103e3366004612ffa565b611141565b6102296103f6366004612ffa565b6111c0565b610229610409366004612ffa565b611259565b61045661041c366004613110565b61024b602052600090815260409020546001600160401b0380821691600160401b810490911690600160801b90046001600160801b031683565b604080516001600160401b0394851681529390921660208401526001600160801b031690820152606001610235565b610292611266565b6008546104a690600160b01b900465ffffffffffff1681565b60405165ffffffffffff9091168152602001610235565b6102986104cb366004612f32565b611b77565b6102926104de366004612f32565b611e5a565b6008546103ad906001600160a01b031681565b610298610504366004612f53565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61029261053d366004612f32565b611ead565b6007546103ad906001600160a01b031681565b610298610563366004612f32565b611f45565b6006546103ad906001600160a01b031681565b60006107a183106105c65760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a5908151bdad95b88125160821b60448201526064015b60405180910390fd5b8160ff166002141561061157600a836107a181106105f457634e487b7160e01b600052603260045260246000fd5b602081049091015460ff601f9092166101000a900416905061064c565b6048836107a1811061063357634e487b7160e01b600052603260045260246000fd5b602081049091015460ff601f9092166101000a90041690505b92915050565b606060038054610661906133be565b80601f016020809104026020016040519081016040528092919081815260200182805461068d906133be565b80156106da5780601f106106af576101008083540402835291602001916106da565b820191906000526020600020905b8154815290600101906020018083116106bd57829003601f168201915b5050505050905090565b60006106f13384846124cb565b50600192915050565b6006546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561073e57600080fd5b505afa158015610752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107769190613128565b9050600081116107985760405162461bcd60e51b81526004016105bd90613210565b6007546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156107dc57600080fd5b505afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108149190613128565b9050600081116108665760405162461bcd60e51b815260206004820152601a60248201527f57616c6c6574206d757374206f776e20612047656e32204e465400000000000060448201526064016105bd565b6000816001600160401b0381111561088e57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156108b7578160200160208202803683370190505b5090506000805b838110156109d457600754604051632f745c5960e01b8152336004820152602481018390526000916001600160a01b031690632f745c599060440160206040518083038186803b15801561091157600080fd5b505afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109499190613128565b90506048816107a1811061096d57634e487b7160e01b600052603260045260246000fd5b602081049091015460ff601f9092166101000a9004166109c157808484815181106109a857634e487b7160e01b600052603260045260246000fd5b6020908102919091010152826109bd816133f9565b9350505b50806109cc816133f9565b9150506108be565b5060008111610a255760405162461bcd60e51b815260206004820181905260248201527f4e6f20756e636c61696d65642047656e32204e46547320617661696c61626c6560448201526064016105bd565b6000805b85811015610ca857600654604051632f745c5960e01b8152336004820152602481018390526000916001600160a01b031690632f745c599060440160206040518083038186803b158015610a7c57600080fd5b505afa158015610a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab49190613128565b9050600a816107a18110610ad857634e487b7160e01b600052603260045260246000fd5b602081049091015460ff601f9092166101000a900416158015610afb5750600084115b15610c955783610b0a8161338a565b945050600061024b60006086846107a18110610b3657634e487b7160e01b600052603260045260246000fd5b60208082049290920154601f9091166101000a900460ff16825281019190915260400160002054600160801b90046001600160801b03169050610b7933826125f0565b6001600a836107a18110610b9d57634e487b7160e01b600052603260045260246000fd5b602091828204019190066101000a81548160ff02191690831515021790555060016048878781518110610be057634e487b7160e01b600052603260045260246000fd5b60200260200101516107a18110610c0757634e487b7160e01b600052603260045260246000fd5b602091828204019190066101000a81548160ff021916908315150217905550600193507f2205d06ec3dc622ca752138e77fbd835b843ca1d7659d1bd8e269ccbe8fb3a2082878781518110610c6c57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516040805193845291830152810183905260600160405180910390a1505b5080610ca0816133f9565b915050610a29565b50600181151514610cfb5760405162461bcd60e51b815260206004820181905260248201527f4e6f20756e636c61696d65642047656e31204e46547320617661696c61626c6560448201526064016105bd565b5050505050565b6000610d0f848484612657565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d945760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016105bd565b610da185338584036124cb565b506001949350505050565b6005546001600160a01b03163314610dd65760405162461bcd60e51b81526004016105bd90613247565b6006841115610e1d5760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840d8caeccad840d2dcc8caf606b1b60448201526064016105bd565b6000816001600160801b031611610e805760405162461bcd60e51b815260206004820152602160248201527f4261736520636c61696d206d7573742062652067726561746572207468616e206044820152600360fc1b60648201526084016105bd565b6000836001600160401b031611610ee55760405162461bcd60e51b815260206004820152602360248201527f4461696c7920726577617264206d75737420626520677265617465722074686160448201526206e20360ec1b60648201526084016105bd565b610ef184848484612825565b50505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106f1918590610f2e90869061327c565b6124cb565b6005546001600160a01b03163314610f5d5760405162461bcd60e51b81526004016105bd90613247565b6001600160a01b0391909116600090815261024c60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610fb35760405162461bcd60e51b81526004016105bd90613247565b6000816001600160c01b031611610ffa5760405162461bcd60e51b815260206004820152600b60248201526a0496e76616c6964206361760ac1b60448201526064016105bd565b61100c81670de0b6b3a7640000613308565b600980546001600160c01b0319166001600160c01b039290921691909117905550565b6005546001600160a01b031633146110595760405162461bcd60e51b81526004016105bd90613247565b61106360006128df565b565b6005546001600160a01b0316331461108f5760405162461bcd60e51b81526004016105bd90613247565b6008805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6005546001600160a01b031633146110da5760405162461bcd60e51b81526004016105bd90613247565b6008805460ff60a01b198116600160a01b9182900460ff16159091021790819055600160b01b900465ffffffffffff16611063576008805465ffffffffffff60b01b1916600160b01b4265ffffffffffff1602179055565b606060048054610661906133be565b33600090815261024c602052604090205460ff166111b25760405162461bcd60e51b815260206004820152602860248201527f4164647265737320646f6573206e6f742068617665207065726d697373696f6e604482015267103a3790313ab93760c11b60648201526084016105bd565b6111bc8282612931565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112425760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105bd565b61124f33858584036124cb565b5060019392505050565b60006106f1338484612657565b600854600160a01b900460ff1615156001146112c45760405162461bcd60e51b815260206004820152601a60248201527f52657761726420636c61696d696e67206e6f742061637469766500000000000060448201526064016105bd565b60408051600680825260e082019092526000916020820160c080368337019050506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529091506006546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561135e57600080fd5b505afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113969190613128565b90506000806000836001600160401b038111156113c357634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156113ec578160200160208202803683370190505b5090506000846001600160401b0381111561141757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611440578160200160208202803683370190505b5090506000856001600160401b0381111561146b57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611494578160200160208202803683370190505b5090506000866001600160401b038111156114bf57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156114e8578160200160208202803683370190505b5090506000876001600160401b0381111561151357634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561153c578160200160208202803683370190505b5090506000886001600160401b0381111561156757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611590578160200160208202803683370190505b509050600089116115b35760405162461bcd60e51b81526004016105bd90613210565b60288911156115c157602898505b600854600160a81b900460ff161515600114156116dd576008546040516370a0823160e01b81523360048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561161b57600080fd5b505afa15801561162f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116539190613128565b975087156116dd57600854604051631c15acef60e21b81523360048201526001600160a01b0390911690637056b3bc9060240160006040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116da9190810190613023565b9a505b60005b89811015611a7257600654604051632f745c5960e01b8152336004820152602481018390526000916001600160a01b031690632f745c599060440160206040518083038186803b15801561173357600080fd5b505afa158015611747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176b9190613128565b90506086816107a1811061178f57634e487b7160e01b600052603260045260246000fd5b602091828204019190069054906101000a900460ff1660ff16600514156117fe5780838d60a0015160ff16815181106117d857634e487b7160e01b600052603260045260246000fd5b602090810291909101015260a08c018051906117f382613414565b60ff16905250611a5f565b6086816107a1811061182057634e487b7160e01b600052603260045260246000fd5b602091828204019190069054906101000a900460ff1660ff16600414156118845780848d6080015160ff168151811061186957634e487b7160e01b600052603260045260246000fd5b602090810291909101015260808c018051906117f382613414565b6086816107a181106118a657634e487b7160e01b600052603260045260246000fd5b602091828204019190069054906101000a900460ff1660ff166003141561190a5780858d6060015160ff16815181106118ef57634e487b7160e01b600052603260045260246000fd5b602090810291909101015260608c018051906117f382613414565b6086816107a1811061192c57634e487b7160e01b600052603260045260246000fd5b602091828204019190069054906101000a900460ff1660ff16600214156119905780868d6040015160ff168151811061197557634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408c018051906117f382613414565b6086816107a181106119b257634e487b7160e01b600052603260045260246000fd5b602091828204019190069054906101000a900460ff1660ff1660011415611a195780878d6020015160ff16815181106119fb57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250508b60200180518091906117f390613414565b80888d6000015160ff1681518110611a4157634e487b7160e01b600052603260045260246000fd5b60209081029190910101528b518c611a5882613414565b60ff169052505b5080611a6a816133f9565b9150506116e0565b50895160ff1615611a9857611a8b868c8c8b6000612a77565b611a95908861327c565b96505b60208a015160ff1615611ac057611ab3858c8c8b6001612a77565b611abd908861327c565b96505b60408a015160ff1615611ae857611adb848c8c8b6002612a77565b611ae5908861327c565b96505b60608a015160ff1615611b1057611b03838c8c8b6003612a77565b611b0d908861327c565b96505b60808a015160ff1615611b3857611b2b828c8c8b6004612a77565b611b35908861327c565b96505b60a08a015160ff1615611b6057611b53818c8c8b6005612a77565b611b5d908861327c565b96505b611b6a33886125f0565b5050505050505050505050565b600854600090600160a01b900460ff161515600114611bd85760405162461bcd60e51b815260206004820152601a60248201527f52657761726420636c61696d696e67206e6f742061637469766500000000000060448201526064016105bd565b6006546040516370a0823160e01b81526001600160a01b03848116600483015260009216906370a082319060240160206040518083038186803b158015611c1e57600080fd5b505afa158015611c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c569190613128565b905060008111611c785760405162461bcd60e51b81526004016105bd90613210565b6000805b82811015611e5257600654604051632f745c5960e01b81526001600160a01b038781166004830152602482018490526000921690632f745c599060440160206040518083038186803b158015611cd157600080fd5b505afa158015611ce5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d099190613128565b905062015180600060c4836107a18110611d3357634e487b7160e01b600052603260045260246000fd5b600591828204019190066006029054906101000a900465ffffffffffff1665ffffffffffff1611611d7557600854600160b01b900465ffffffffffff16611db6565b60c4826107a18110611d9757634e487b7160e01b600052603260045260246000fd5b600591828204019190066006029054906101000a900465ffffffffffff165b611dc89065ffffffffffff1642613373565b61024b60006086856107a18110611def57634e487b7160e01b600052603260045260246000fd5b60208082049092015460ff601f9092166101000a900416825281019190915260400160002054611e2891906001600160401b031661332e565b611e3291906132b9565b611e3c908461327c565b9250508080611e4a906133f9565b915050611c7c565b509392505050565b6005546001600160a01b03163314611e845760405162461bcd60e51b81526004016105bd90613247565b600880546001600160a01b0319166001600160a01b038316179055611eaa816001610f33565b50565b6005546001600160a01b03163314611ed75760405162461bcd60e51b81526004016105bd90613247565b6001600160a01b038116611f3c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105bd565b611eaa816128df565b6006546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a082319060240160206040518083038186803b158015611f8e57600080fd5b505afa158015611fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc69190613128565b905060008111611fe85760405162461bcd60e51b81526004016105bd90613210565b6007546040516370a0823160e01b81526001600160a01b03858116600483015260009216906370a082319060240160206040518083038186803b15801561202e57600080fd5b505afa158015612042573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120669190613128565b9050600081116120b85760405162461bcd60e51b815260206004820152601a60248201527f57616c6c6574206d757374206f776e20612047656e32204e465400000000000060448201526064016105bd565b6000816001600160401b038111156120e057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612109578160200160208202803683370190505b5090506000805b8381101561222857600754604051632f745c5960e01b81526001600160a01b038981166004830152602482018490526000921690632f745c599060440160206040518083038186803b15801561216557600080fd5b505afa158015612179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219d9190613128565b90506048816107a181106121c157634e487b7160e01b600052603260045260246000fd5b602081049091015460ff601f9092166101000a90041661221557808484815181106121fc57634e487b7160e01b600052603260045260246000fd5b602090810291909101015282612211816133f9565b9350505b5080612220816133f9565b915050612110565b50600081116122795760405162461bcd60e51b815260206004820181905260248201527f4e6f20756e636c61696d65642047656e32204e46547320617661696c61626c6560448201526064016105bd565b6000805b858110156123e157600654604051632f745c5960e01b81526001600160a01b038a81166004830152602482018490526000921690632f745c599060440160206040518083038186803b1580156122d257600080fd5b505afa1580156122e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230a9190613128565b9050600a816107a1811061232e57634e487b7160e01b600052603260045260246000fd5b602081049091015460ff601f9092166101000a9004161580156123515750600084115b156123ce57836123608161338a565b94505061024b60006086836107a1811061238a57634e487b7160e01b600052603260045260246000fd5b60208082049092015460ff601f9092166101000a9004168252810191909152604001600020546123cb906001600160801b03600160801b909104168461327c565b92505b50806123d9816133f9565b91505061227d565b509695505050505050565b6001600160a01b0382166124425760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105bd565b8060026000828254612454919061327c565b90915550506001600160a01b0382166000908152602081905260408120805483929061248190849061327c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03831661252d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105bd565b6001600160a01b03821661258e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105bd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6009546001600160c01b03168161260660025490565b612610919061327c565b111561264d5760405162461bcd60e51b815260206004820152600c60248201526b10d85c08195e18d95959195960a21b60448201526064016105bd565b6111bc82826123ec565b6001600160a01b0383166126bb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105bd565b6001600160a01b03821661271d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105bd565b6001600160a01b038316600090815260208190526040902054818110156127955760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105bd565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906127cc90849061327c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161281891815260200190565b60405180910390a3610ef1565b604051806060016040528084670de0b6b3a7640000612844919061334d565b6001600160401b0390811682528416602082015260400161286d83670de0b6b3a76400006132d9565b6001600160801b03908116909152600095865261024b6020908152604096879020835181549285015194909801518316600160801b026001600160401b03948516600160401b026fffffffffffffffffffffffffffffffff199093169490981693909317171694909417909355505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166129915760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105bd565b6001600160a01b03821660009081526020819052604090205481811015612a055760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105bd565b6001600160a01b0383166000908152602081905260408120838303905560028054849290612a34908490613373565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016125e3565b6000806000808460051415612ad85786516020880151604089015160608a015160808b0151612aa69190613294565b612ab09190613294565b612aba9190613294565b612ac49190613294565b60ff1690508660a0015160ff169150612bb5565b8460041415612b245786516020880151604089015160608a0151612afc9190613294565b612b069190613294565b612b109190613294565b60ff169050866080015160ff169150612bb5565b8460031415612b6157865160208801516040890151612b439190613294565b612b4d9190613294565b60ff169050866060015160ff169150612bb5565b8460021415612b8f5786516020880151612b7b9190613294565b60ff169050866040015160ff169150612bb5565b8460011415612bad5750508451602086015160ff9081169116612bb5565b865160ff1691505b60005b82811015612ee657600062015180600060c48d8581518110612bea57634e487b7160e01b600052603260045260246000fd5b60200260200101516107a18110612c1157634e487b7160e01b600052603260045260246000fd5b600591828204019190066006029054906101000a900465ffffffffffff1665ffffffffffff1611612c5357600854600160b01b900465ffffffffffff16612cbb565b60c48c8481518110612c7557634e487b7160e01b600052603260045260246000fd5b60200260200101516107a18110612c9c57634e487b7160e01b600052603260045260246000fd5b600591828204019190066006029054906101000a900465ffffffffffff165b612ccd9065ffffffffffff1642613373565b600089815261024b6020526040902054612cf091906001600160401b031661332e565b612cfa91906132b9565b905087831015612de75760005b6006811015612dd85760008b8281518110612d3257634e487b7160e01b600052603260045260246000fd5b602002602001015160ff161115612dc657600081815261024b6020526040902054606490612d7090600160401b90046001600160401b03168461332e565b612d7a91906132b9565b612d84908361327c565b91508a8181518110612da657634e487b7160e01b600052603260045260246000fd5b602002602001018051809190612dbb906133a1565b60ff16905250612dd8565b80612dd0816133f9565b915050612d07565b5082612de3816133f9565b9350505b612df1818661327c565b94504260c48c8481518110612e1657634e487b7160e01b600052603260045260246000fd5b60200260200101516107a18110612e3d57634e487b7160e01b600052603260045260246000fd5b600591828204019190066006026101000a81548165ffffffffffff021916908365ffffffffffff1602179055507f47b0878030426a9511b1cd915a0ac34bd29f33d4f846616b55847303ff8ebcbe8b8381518110612eab57634e487b7160e01b600052603260045260246000fd5b602002602001015182604051612ecb929190918252602082015260400190565b60405180910390a15080612ede816133f9565b915050612bb8565b509198975050505050505050565b80356001600160a01b0381168114612f0b57600080fd5b919050565b80356001600160401b0381168114612f0b57600080fd5b8051612f0b81613460565b600060208284031215612f43578081fd5b612f4c82612ef4565b9392505050565b60008060408385031215612f65578081fd5b612f6e83612ef4565b9150612f7c60208401612ef4565b90509250929050565b600080600060608486031215612f99578081fd5b612fa284612ef4565b9250612fb060208501612ef4565b9150604084013590509250925092565b60008060408385031215612fd2578182fd5b612fdb83612ef4565b915060208301358015158114612fef578182fd5b809150509250929050565b6000806040838503121561300c578182fd5b61301583612ef4565b946020939093013593505050565b60006020808385031215613035578182fd5b82516001600160401b038082111561304b578384fd5b818501915085601f83011261305e578384fd5b8151818111156130705761307061344a565b8060051b604051601f19603f830116810181811085821117156130955761309561344a565b604052828152858101935084860182860187018a10156130b3578788fd5b8795505b838610156130dc576130c881612f27565b8552600195909501949386019386016130b7565b5098975050505050505050565b6000602082840312156130fa578081fd5b81356001600160c01b0381168114612f4c578182fd5b600060208284031215613121578081fd5b5035919050565b600060208284031215613139578081fd5b5051919050565b60008060008060808587031215613155578081fd5b8435935061316560208601612f10565b925061317360408601612f10565b915060608501356001600160801b038116811461318e578182fd5b939692955090935050565b600080604083850312156131ab578182fd5b823591506020830135612fef81613460565b6000602080835283518082850152825b818110156131e9578581018301518582016040015282016131cd565b818111156131fa5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601d908201527f57616c6c6574206d757374206f776e20612047656e65736973204e4654000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561328f5761328f613434565b500190565b600060ff821660ff84168060ff038211156132b1576132b1613434565b019392505050565b6000826132d457634e487b7160e01b81526012600452602481fd5b500490565b60006001600160801b03808316818516818304811182151516156132ff576132ff613434565b02949350505050565b60006001600160c01b03828116848216811515828404821116156132ff576132ff613434565b600081600019048311821515161561334857613348613434565b500290565b60006001600160401b03808316818516818304811182151516156132ff576132ff613434565b60008282101561338557613385613434565b500390565b60008161339957613399613434565b506000190190565b600060ff8216806133b4576133b4613434565b6000190192915050565b600181811c908216806133d257607f821691505b602082108114156133f357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561340d5761340d613434565b5060010190565b600060ff821660ff81141561342b5761342b613434565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60ff81168114611eaa57600080fdfea26469706673582212201289246ab87be52d283dec6c941645edb5a2bb2ec6722812c0fe4f35ef54946464736f6c63430008040033000000000000000000000000ed6c62794e4ed3dec82d00c7ca58ae9512b13eb1000000000000000000000000a844b918f0c362068e3894c68af5b2adbd37ed2c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c806381ed418511610125578063be9a6555116100ad578063dd62ed3e1161007c578063dd62ed3e146104f6578063f2fde38b1461052f578063fc0b230214610542578063fe75ac5d14610555578063ff7f6c701461056857600080fd5b8063be9a65551461048d578063c3c90e64146104bd578063cd980c8a146104d0578063d3bd77d9146104e357600080fd5b80639dc29fac116100f45780639dc29fac146103d5578063a457c2d7146103e8578063a9059cbb146103fb578063b2596a671461040e578063b88a802f1461048557600080fd5b806381ed4185146103985780638da5cb5b146103a05780638e920351146103c557806395d89b41146103cd57600080fd5b80632e8683f2116101a85780633e89726d116101775780633e89726d1461032d578063527535d51461034157806353e9e27a1461035457806370a0823114610367578063715018a61461039057600080fd5b80632e8683f2146102cc578063313ce567146102e0578063355274ea146102ef578063395093511461031a57600080fd5b806312f68c97116101e457806312f68c971461028a57806318160ddd1461029457806323b872dd146102a65780632c864c69146102b957600080fd5b806301a647ce146102165780630466c4f81461023e57806306fdde0314610262578063095ea7b314610277575b600080fd5b610229610224366004613199565b61057b565b60405190151581526020015b60405180910390f35b61022961024c366004612f32565b61024c6020526000908152604090205460ff1681565b61026a610652565b60405161023591906131bd565b610229610285366004612ffa565b6106e4565b6102926106fa565b005b6002545b604051908152602001610235565b6102296102b4366004612f85565b610d02565b6102926102c7366004613140565b610dac565b60085461022990600160a01b900460ff1681565b60405160128152602001610235565b600954610302906001600160c01b031681565b6040516001600160c01b039091168152602001610235565b610229610328366004612ffa565b610ef7565b60085461022990600160a81b900460ff1681565b61029261034f366004612fc0565b610f33565b6102926103623660046130e9565b610f89565b610298610375366004612f32565b6001600160a01b031660009081526020819052604090205490565b61029261102f565b610292611065565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610235565b6102926110b0565b61026a611132565b6102926103e3366004612ffa565b611141565b6102296103f6366004612ffa565b6111c0565b610229610409366004612ffa565b611259565b61045661041c366004613110565b61024b602052600090815260409020546001600160401b0380821691600160401b810490911690600160801b90046001600160801b031683565b604080516001600160401b0394851681529390921660208401526001600160801b031690820152606001610235565b610292611266565b6008546104a690600160b01b900465ffffffffffff1681565b60405165ffffffffffff9091168152602001610235565b6102986104cb366004612f32565b611b77565b6102926104de366004612f32565b611e5a565b6008546103ad906001600160a01b031681565b610298610504366004612f53565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61029261053d366004612f32565b611ead565b6007546103ad906001600160a01b031681565b610298610563366004612f32565b611f45565b6006546103ad906001600160a01b031681565b60006107a183106105c65760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a5908151bdad95b88125160821b60448201526064015b60405180910390fd5b8160ff166002141561061157600a836107a181106105f457634e487b7160e01b600052603260045260246000fd5b602081049091015460ff601f9092166101000a900416905061064c565b6048836107a1811061063357634e487b7160e01b600052603260045260246000fd5b602081049091015460ff601f9092166101000a90041690505b92915050565b606060038054610661906133be565b80601f016020809104026020016040519081016040528092919081815260200182805461068d906133be565b80156106da5780601f106106af576101008083540402835291602001916106da565b820191906000526020600020905b8154815290600101906020018083116106bd57829003601f168201915b5050505050905090565b60006106f13384846124cb565b50600192915050565b6006546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561073e57600080fd5b505afa158015610752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107769190613128565b9050600081116107985760405162461bcd60e51b81526004016105bd90613210565b6007546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156107dc57600080fd5b505afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108149190613128565b9050600081116108665760405162461bcd60e51b815260206004820152601a60248201527f57616c6c6574206d757374206f776e20612047656e32204e465400000000000060448201526064016105bd565b6000816001600160401b0381111561088e57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156108b7578160200160208202803683370190505b5090506000805b838110156109d457600754604051632f745c5960e01b8152336004820152602481018390526000916001600160a01b031690632f745c599060440160206040518083038186803b15801561091157600080fd5b505afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109499190613128565b90506048816107a1811061096d57634e487b7160e01b600052603260045260246000fd5b602081049091015460ff601f9092166101000a9004166109c157808484815181106109a857634e487b7160e01b600052603260045260246000fd5b6020908102919091010152826109bd816133f9565b9350505b50806109cc816133f9565b9150506108be565b5060008111610a255760405162461bcd60e51b815260206004820181905260248201527f4e6f20756e636c61696d65642047656e32204e46547320617661696c61626c6560448201526064016105bd565b6000805b85811015610ca857600654604051632f745c5960e01b8152336004820152602481018390526000916001600160a01b031690632f745c599060440160206040518083038186803b158015610a7c57600080fd5b505afa158015610a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab49190613128565b9050600a816107a18110610ad857634e487b7160e01b600052603260045260246000fd5b602081049091015460ff601f9092166101000a900416158015610afb5750600084115b15610c955783610b0a8161338a565b945050600061024b60006086846107a18110610b3657634e487b7160e01b600052603260045260246000fd5b60208082049290920154601f9091166101000a900460ff16825281019190915260400160002054600160801b90046001600160801b03169050610b7933826125f0565b6001600a836107a18110610b9d57634e487b7160e01b600052603260045260246000fd5b602091828204019190066101000a81548160ff02191690831515021790555060016048878781518110610be057634e487b7160e01b600052603260045260246000fd5b60200260200101516107a18110610c0757634e487b7160e01b600052603260045260246000fd5b602091828204019190066101000a81548160ff021916908315150217905550600193507f2205d06ec3dc622ca752138e77fbd835b843ca1d7659d1bd8e269ccbe8fb3a2082878781518110610c6c57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516040805193845291830152810183905260600160405180910390a1505b5080610ca0816133f9565b915050610a29565b50600181151514610cfb5760405162461bcd60e51b815260206004820181905260248201527f4e6f20756e636c61696d65642047656e31204e46547320617661696c61626c6560448201526064016105bd565b5050505050565b6000610d0f848484612657565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d945760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016105bd565b610da185338584036124cb565b506001949350505050565b6005546001600160a01b03163314610dd65760405162461bcd60e51b81526004016105bd90613247565b6006841115610e1d5760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840d8caeccad840d2dcc8caf606b1b60448201526064016105bd565b6000816001600160801b031611610e805760405162461bcd60e51b815260206004820152602160248201527f4261736520636c61696d206d7573742062652067726561746572207468616e206044820152600360fc1b60648201526084016105bd565b6000836001600160401b031611610ee55760405162461bcd60e51b815260206004820152602360248201527f4461696c7920726577617264206d75737420626520677265617465722074686160448201526206e20360ec1b60648201526084016105bd565b610ef184848484612825565b50505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106f1918590610f2e90869061327c565b6124cb565b6005546001600160a01b03163314610f5d5760405162461bcd60e51b81526004016105bd90613247565b6001600160a01b0391909116600090815261024c60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610fb35760405162461bcd60e51b81526004016105bd90613247565b6000816001600160c01b031611610ffa5760405162461bcd60e51b815260206004820152600b60248201526a0496e76616c6964206361760ac1b60448201526064016105bd565b61100c81670de0b6b3a7640000613308565b600980546001600160c01b0319166001600160c01b039290921691909117905550565b6005546001600160a01b031633146110595760405162461bcd60e51b81526004016105bd90613247565b61106360006128df565b565b6005546001600160a01b0316331461108f5760405162461bcd60e51b81526004016105bd90613247565b6008805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6005546001600160a01b031633146110da5760405162461bcd60e51b81526004016105bd90613247565b6008805460ff60a01b198116600160a01b9182900460ff16159091021790819055600160b01b900465ffffffffffff16611063576008805465ffffffffffff60b01b1916600160b01b4265ffffffffffff1602179055565b606060048054610661906133be565b33600090815261024c602052604090205460ff166111b25760405162461bcd60e51b815260206004820152602860248201527f4164647265737320646f6573206e6f742068617665207065726d697373696f6e604482015267103a3790313ab93760c11b60648201526084016105bd565b6111bc8282612931565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112425760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105bd565b61124f33858584036124cb565b5060019392505050565b60006106f1338484612657565b600854600160a01b900460ff1615156001146112c45760405162461bcd60e51b815260206004820152601a60248201527f52657761726420636c61696d696e67206e6f742061637469766500000000000060448201526064016105bd565b60408051600680825260e082019092526000916020820160c080368337019050506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529091506006546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561135e57600080fd5b505afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113969190613128565b90506000806000836001600160401b038111156113c357634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156113ec578160200160208202803683370190505b5090506000846001600160401b0381111561141757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611440578160200160208202803683370190505b5090506000856001600160401b0381111561146b57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611494578160200160208202803683370190505b5090506000866001600160401b038111156114bf57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156114e8578160200160208202803683370190505b5090506000876001600160401b0381111561151357634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561153c578160200160208202803683370190505b5090506000886001600160401b0381111561156757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611590578160200160208202803683370190505b509050600089116115b35760405162461bcd60e51b81526004016105bd90613210565b60288911156115c157602898505b600854600160a81b900460ff161515600114156116dd576008546040516370a0823160e01b81523360048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561161b57600080fd5b505afa15801561162f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116539190613128565b975087156116dd57600854604051631c15acef60e21b81523360048201526001600160a01b0390911690637056b3bc9060240160006040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116da9190810190613023565b9a505b60005b89811015611a7257600654604051632f745c5960e01b8152336004820152602481018390526000916001600160a01b031690632f745c599060440160206040518083038186803b15801561173357600080fd5b505afa158015611747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176b9190613128565b90506086816107a1811061178f57634e487b7160e01b600052603260045260246000fd5b602091828204019190069054906101000a900460ff1660ff16600514156117fe5780838d60a0015160ff16815181106117d857634e487b7160e01b600052603260045260246000fd5b602090810291909101015260a08c018051906117f382613414565b60ff16905250611a5f565b6086816107a1811061182057634e487b7160e01b600052603260045260246000fd5b602091828204019190069054906101000a900460ff1660ff16600414156118845780848d6080015160ff168151811061186957634e487b7160e01b600052603260045260246000fd5b602090810291909101015260808c018051906117f382613414565b6086816107a181106118a657634e487b7160e01b600052603260045260246000fd5b602091828204019190069054906101000a900460ff1660ff166003141561190a5780858d6060015160ff16815181106118ef57634e487b7160e01b600052603260045260246000fd5b602090810291909101015260608c018051906117f382613414565b6086816107a1811061192c57634e487b7160e01b600052603260045260246000fd5b602091828204019190069054906101000a900460ff1660ff16600214156119905780868d6040015160ff168151811061197557634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408c018051906117f382613414565b6086816107a181106119b257634e487b7160e01b600052603260045260246000fd5b602091828204019190069054906101000a900460ff1660ff1660011415611a195780878d6020015160ff16815181106119fb57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250508b60200180518091906117f390613414565b80888d6000015160ff1681518110611a4157634e487b7160e01b600052603260045260246000fd5b60209081029190910101528b518c611a5882613414565b60ff169052505b5080611a6a816133f9565b9150506116e0565b50895160ff1615611a9857611a8b868c8c8b6000612a77565b611a95908861327c565b96505b60208a015160ff1615611ac057611ab3858c8c8b6001612a77565b611abd908861327c565b96505b60408a015160ff1615611ae857611adb848c8c8b6002612a77565b611ae5908861327c565b96505b60608a015160ff1615611b1057611b03838c8c8b6003612a77565b611b0d908861327c565b96505b60808a015160ff1615611b3857611b2b828c8c8b6004612a77565b611b35908861327c565b96505b60a08a015160ff1615611b6057611b53818c8c8b6005612a77565b611b5d908861327c565b96505b611b6a33886125f0565b5050505050505050505050565b600854600090600160a01b900460ff161515600114611bd85760405162461bcd60e51b815260206004820152601a60248201527f52657761726420636c61696d696e67206e6f742061637469766500000000000060448201526064016105bd565b6006546040516370a0823160e01b81526001600160a01b03848116600483015260009216906370a082319060240160206040518083038186803b158015611c1e57600080fd5b505afa158015611c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c569190613128565b905060008111611c785760405162461bcd60e51b81526004016105bd90613210565b6000805b82811015611e5257600654604051632f745c5960e01b81526001600160a01b038781166004830152602482018490526000921690632f745c599060440160206040518083038186803b158015611cd157600080fd5b505afa158015611ce5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d099190613128565b905062015180600060c4836107a18110611d3357634e487b7160e01b600052603260045260246000fd5b600591828204019190066006029054906101000a900465ffffffffffff1665ffffffffffff1611611d7557600854600160b01b900465ffffffffffff16611db6565b60c4826107a18110611d9757634e487b7160e01b600052603260045260246000fd5b600591828204019190066006029054906101000a900465ffffffffffff165b611dc89065ffffffffffff1642613373565b61024b60006086856107a18110611def57634e487b7160e01b600052603260045260246000fd5b60208082049092015460ff601f9092166101000a900416825281019190915260400160002054611e2891906001600160401b031661332e565b611e3291906132b9565b611e3c908461327c565b9250508080611e4a906133f9565b915050611c7c565b509392505050565b6005546001600160a01b03163314611e845760405162461bcd60e51b81526004016105bd90613247565b600880546001600160a01b0319166001600160a01b038316179055611eaa816001610f33565b50565b6005546001600160a01b03163314611ed75760405162461bcd60e51b81526004016105bd90613247565b6001600160a01b038116611f3c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105bd565b611eaa816128df565b6006546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a082319060240160206040518083038186803b158015611f8e57600080fd5b505afa158015611fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc69190613128565b905060008111611fe85760405162461bcd60e51b81526004016105bd90613210565b6007546040516370a0823160e01b81526001600160a01b03858116600483015260009216906370a082319060240160206040518083038186803b15801561202e57600080fd5b505afa158015612042573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120669190613128565b9050600081116120b85760405162461bcd60e51b815260206004820152601a60248201527f57616c6c6574206d757374206f776e20612047656e32204e465400000000000060448201526064016105bd565b6000816001600160401b038111156120e057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612109578160200160208202803683370190505b5090506000805b8381101561222857600754604051632f745c5960e01b81526001600160a01b038981166004830152602482018490526000921690632f745c599060440160206040518083038186803b15801561216557600080fd5b505afa158015612179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219d9190613128565b90506048816107a181106121c157634e487b7160e01b600052603260045260246000fd5b602081049091015460ff601f9092166101000a90041661221557808484815181106121fc57634e487b7160e01b600052603260045260246000fd5b602090810291909101015282612211816133f9565b9350505b5080612220816133f9565b915050612110565b50600081116122795760405162461bcd60e51b815260206004820181905260248201527f4e6f20756e636c61696d65642047656e32204e46547320617661696c61626c6560448201526064016105bd565b6000805b858110156123e157600654604051632f745c5960e01b81526001600160a01b038a81166004830152602482018490526000921690632f745c599060440160206040518083038186803b1580156122d257600080fd5b505afa1580156122e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230a9190613128565b9050600a816107a1811061232e57634e487b7160e01b600052603260045260246000fd5b602081049091015460ff601f9092166101000a9004161580156123515750600084115b156123ce57836123608161338a565b94505061024b60006086836107a1811061238a57634e487b7160e01b600052603260045260246000fd5b60208082049092015460ff601f9092166101000a9004168252810191909152604001600020546123cb906001600160801b03600160801b909104168461327c565b92505b50806123d9816133f9565b91505061227d565b509695505050505050565b6001600160a01b0382166124425760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105bd565b8060026000828254612454919061327c565b90915550506001600160a01b0382166000908152602081905260408120805483929061248190849061327c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03831661252d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105bd565b6001600160a01b03821661258e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105bd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6009546001600160c01b03168161260660025490565b612610919061327c565b111561264d5760405162461bcd60e51b815260206004820152600c60248201526b10d85c08195e18d95959195960a21b60448201526064016105bd565b6111bc82826123ec565b6001600160a01b0383166126bb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105bd565b6001600160a01b03821661271d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105bd565b6001600160a01b038316600090815260208190526040902054818110156127955760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105bd565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906127cc90849061327c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161281891815260200190565b60405180910390a3610ef1565b604051806060016040528084670de0b6b3a7640000612844919061334d565b6001600160401b0390811682528416602082015260400161286d83670de0b6b3a76400006132d9565b6001600160801b03908116909152600095865261024b6020908152604096879020835181549285015194909801518316600160801b026001600160401b03948516600160401b026fffffffffffffffffffffffffffffffff199093169490981693909317171694909417909355505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166129915760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105bd565b6001600160a01b03821660009081526020819052604090205481811015612a055760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105bd565b6001600160a01b0383166000908152602081905260408120838303905560028054849290612a34908490613373565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016125e3565b6000806000808460051415612ad85786516020880151604089015160608a015160808b0151612aa69190613294565b612ab09190613294565b612aba9190613294565b612ac49190613294565b60ff1690508660a0015160ff169150612bb5565b8460041415612b245786516020880151604089015160608a0151612afc9190613294565b612b069190613294565b612b109190613294565b60ff169050866080015160ff169150612bb5565b8460031415612b6157865160208801516040890151612b439190613294565b612b4d9190613294565b60ff169050866060015160ff169150612bb5565b8460021415612b8f5786516020880151612b7b9190613294565b60ff169050866040015160ff169150612bb5565b8460011415612bad5750508451602086015160ff9081169116612bb5565b865160ff1691505b60005b82811015612ee657600062015180600060c48d8581518110612bea57634e487b7160e01b600052603260045260246000fd5b60200260200101516107a18110612c1157634e487b7160e01b600052603260045260246000fd5b600591828204019190066006029054906101000a900465ffffffffffff1665ffffffffffff1611612c5357600854600160b01b900465ffffffffffff16612cbb565b60c48c8481518110612c7557634e487b7160e01b600052603260045260246000fd5b60200260200101516107a18110612c9c57634e487b7160e01b600052603260045260246000fd5b600591828204019190066006029054906101000a900465ffffffffffff165b612ccd9065ffffffffffff1642613373565b600089815261024b6020526040902054612cf091906001600160401b031661332e565b612cfa91906132b9565b905087831015612de75760005b6006811015612dd85760008b8281518110612d3257634e487b7160e01b600052603260045260246000fd5b602002602001015160ff161115612dc657600081815261024b6020526040902054606490612d7090600160401b90046001600160401b03168461332e565b612d7a91906132b9565b612d84908361327c565b91508a8181518110612da657634e487b7160e01b600052603260045260246000fd5b602002602001018051809190612dbb906133a1565b60ff16905250612dd8565b80612dd0816133f9565b915050612d07565b5082612de3816133f9565b9350505b612df1818661327c565b94504260c48c8481518110612e1657634e487b7160e01b600052603260045260246000fd5b60200260200101516107a18110612e3d57634e487b7160e01b600052603260045260246000fd5b600591828204019190066006026101000a81548165ffffffffffff021916908365ffffffffffff1602179055507f47b0878030426a9511b1cd915a0ac34bd29f33d4f846616b55847303ff8ebcbe8b8381518110612eab57634e487b7160e01b600052603260045260246000fd5b602002602001015182604051612ecb929190918252602082015260400190565b60405180910390a15080612ede816133f9565b915050612bb8565b509198975050505050505050565b80356001600160a01b0381168114612f0b57600080fd5b919050565b80356001600160401b0381168114612f0b57600080fd5b8051612f0b81613460565b600060208284031215612f43578081fd5b612f4c82612ef4565b9392505050565b60008060408385031215612f65578081fd5b612f6e83612ef4565b9150612f7c60208401612ef4565b90509250929050565b600080600060608486031215612f99578081fd5b612fa284612ef4565b9250612fb060208501612ef4565b9150604084013590509250925092565b60008060408385031215612fd2578182fd5b612fdb83612ef4565b915060208301358015158114612fef578182fd5b809150509250929050565b6000806040838503121561300c578182fd5b61301583612ef4565b946020939093013593505050565b60006020808385031215613035578182fd5b82516001600160401b038082111561304b578384fd5b818501915085601f83011261305e578384fd5b8151818111156130705761307061344a565b8060051b604051601f19603f830116810181811085821117156130955761309561344a565b604052828152858101935084860182860187018a10156130b3578788fd5b8795505b838610156130dc576130c881612f27565b8552600195909501949386019386016130b7565b5098975050505050505050565b6000602082840312156130fa578081fd5b81356001600160c01b0381168114612f4c578182fd5b600060208284031215613121578081fd5b5035919050565b600060208284031215613139578081fd5b5051919050565b60008060008060808587031215613155578081fd5b8435935061316560208601612f10565b925061317360408601612f10565b915060608501356001600160801b038116811461318e578182fd5b939692955090935050565b600080604083850312156131ab578182fd5b823591506020830135612fef81613460565b6000602080835283518082850152825b818110156131e9578581018301518582016040015282016131cd565b818111156131fa5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601d908201527f57616c6c6574206d757374206f776e20612047656e65736973204e4654000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561328f5761328f613434565b500190565b600060ff821660ff84168060ff038211156132b1576132b1613434565b019392505050565b6000826132d457634e487b7160e01b81526012600452602481fd5b500490565b60006001600160801b03808316818516818304811182151516156132ff576132ff613434565b02949350505050565b60006001600160c01b03828116848216811515828404821116156132ff576132ff613434565b600081600019048311821515161561334857613348613434565b500290565b60006001600160401b03808316818516818304811182151516156132ff576132ff613434565b60008282101561338557613385613434565b500390565b60008161339957613399613434565b506000190190565b600060ff8216806133b4576133b4613434565b6000190192915050565b600181811c908216806133d257607f821691505b602082108114156133f357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561340d5761340d613434565b5060010190565b600060ff821660ff81141561342b5761342b613434565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60ff81168114611eaa57600080fdfea26469706673582212201289246ab87be52d283dec6c941645edb5a2bb2ec6722812c0fe4f35ef54946464736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ed6c62794e4ed3dec82d00c7ca58ae9512b13eb1000000000000000000000000a844b918f0c362068e3894c68af5b2adbd37ed2c
-----Decoded View---------------
Arg [0] : gen1 (address): 0xEd6C62794e4Ed3deC82D00c7cA58AE9512B13eb1
Arg [1] : gen2 (address): 0xa844b918F0C362068E3894C68AF5b2Adbd37eD2C
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000ed6c62794e4ed3dec82d00c7ca58ae9512b13eb1
Arg [1] : 000000000000000000000000a844b918f0c362068e3894c68af5b2adbd37ed2c
Deployed Bytecode Sourcemap
20718:17437:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27895:275;;;;;;:::i;:::-;;:::i;:::-;;;5375:14:1;;5368:22;5350:41;;5338:2;5323:18;27895:275:0;;;;;;;;25393:45;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9775:100;;;:::i;:::-;;;;;;;:::i;11942:169::-;;;;;;:::i;:::-;;:::i;29158:1564::-;;;:::i;:::-;;10895:108;10983:12;;10895:108;;;16308:25:1;;;16296:2;16281:18;10895:108:0;16263:76:1;12593:492:0;;;;;;:::i;:::-;;:::i;37336:447::-;;;;;;:::i;:::-;;:::i;20837:38::-;;;;;-1:-1:-1;;;20837:38:0;;;;;;10737:93;;;10820:2;17680:36:1;;17668:2;17653:18;10737:93:0;17635:87:1;20957:18:0;;;;;-1:-1:-1;;;;;20957:18:0;;;;;;-1:-1:-1;;;;;16118:32:1;;;16100:51;;16088:2;16073:18;20957::0;16055:102:1;13494:215:0;;;;;;:::i;:::-;;:::i;20882:42::-;;;;;-1:-1:-1;;;20882:42:0;;;;;;37203:125;;;;;;:::i;:::-;;:::i;37057:138::-;;;;;;:::i;:::-;;:::i;11066:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;11167:18:0;11140:7;11167:18;;;;;;;;;;;;11066:127;3581:94;;;:::i;34533:117::-;;;:::i;2930:87::-;3003:6;;-1:-1:-1;;;;;3003:6:0;2930:87;;;-1:-1:-1;;;;;4887:32:1;;;4869:51;;4857:2;4842:18;2930:87:0;4824:102:1;34342:183:0;;;:::i;9994:104::-;;;:::i;26124:180::-;;;;;;:::i;:::-;;:::i;14212:413::-;;;;;;:::i;:::-;;:::i;11406:175::-;;;;;;:::i;:::-;;:::i;25347:39::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;25347:39:0;;;;-1:-1:-1;;;25347:39:0;;;;;;-1:-1:-1;;;25347:39:0;;-1:-1:-1;;;;;25347:39:0;;;;;;;-1:-1:-1;;;;;17375:15:1;;;17357:34;;17427:15;;;;17422:2;17407:18;;17400:43;-1:-1:-1;;;;;17479:47:1;17459:18;;;17452:75;17308:2;17293:18;25347:39:0;17275:258:1;30730:3604:0;;;:::i;20931:19::-;;;;;-1:-1:-1;;;20931:19:0;;;;;;;;;17095:14:1;17083:27;;;17065:46;;17053:2;17038:18;20931:19:0;17020:97:1;28289:637:0;;;;;;:::i;:::-;;:::i;38002:150::-;;;;;;:::i;:::-;;:::i;20809:19::-;;;;;-1:-1:-1;;;;;20809:19:0;;;11644:151;;;;;;:::i;:::-;-1:-1:-1;;;;;11760:18:0;;;11733:7;11760:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11644:151;3830:192;;;;;;:::i;:::-;;:::i;20784:18::-;;;;;-1:-1:-1;;;;;20784:18:0;;;26548:1234;;;;;;:::i;:::-;;:::i;20759:18::-;;;;;-1:-1:-1;;;;;20759:18:0;;;27895:275;27978:4;28011;28003:5;:12;27995:41;;;;-1:-1:-1;;;27995:41:0;;9445:2:1;27995:41:0;;;9427:21:1;9484:2;9464:18;;;9457:30;-1:-1:-1;;;9503:18:1;;;9496:46;9559:18;;27995:41:0;;;;;;;;;28053:3;:8;;28060:1;28053:8;28049:71;;;28085:16;28102:5;28085:23;;;;;-1:-1:-1;;;28085:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28078:30:0;;28049:71;28139:16;28156:5;28139:23;;;;;-1:-1:-1;;;28139:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27895:275:0;;;;;:::o;9775:100::-;9829:13;9862:5;9855:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9775:100;:::o;11942:169::-;12025:4;12042:39;1800:10;12065:7;12074:6;12042:8;:39::i;:::-;-1:-1:-1;12099:4:0;11942:169;;;;:::o;29158:1564::-;29225:7;;:29;;-1:-1:-1;;;29225:29:0;;29243:10;29225:29;;;4869:51:1;29205:17:0;;-1:-1:-1;;;;;29225:7:0;;:17;;4842:18:1;;29225:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29205:49;;29285:1;29273:9;:13;29265:55;;;;-1:-1:-1;;;29265:55:0;;;;;;;:::i;:::-;29353:7;;:29;;-1:-1:-1;;;29353:29:0;;29371:10;29353:29;;;4869:51:1;29333:17:0;;-1:-1:-1;;;;;29353:7:0;;:17;;4842:18:1;;29353:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29333:49;;29413:1;29401:9;:13;29393:52;;;;-1:-1:-1;;;29393:52:0;;14354:2:1;29393:52:0;;;14336:21:1;14393:2;14373:18;;;14366:30;14432:28;14412:18;;;14405:56;14478:18;;29393:52:0;14326:176:1;29393:52:0;29458:29;29504:9;-1:-1:-1;;;;;29490:24:0;;;;;-1:-1:-1;;;29490:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29490:24:0;;29458:56;;29525:26;29569:9;29564:305;29584:9;29580:1;:13;29564:305;;;29637:7;;:42;;-1:-1:-1;;;29637:42:0;;29665:10;29637:42;;;5105:51:1;5172:18;;;5165:34;;;29615:19:0;;-1:-1:-1;;;;;29637:7:0;;:27;;5078:18:1;;29637:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29615:64;;29698:16;29715:11;29698:29;;;;;-1:-1:-1;;;29698:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;29694:164;;29792:11;29757:12;29770:18;29757:32;;;;;;-1:-1:-1;;;29757:32:0;;;;;;;;;;;;;;;;;;:46;29822:20;;;;:::i;:::-;;;;29694:164;-1:-1:-1;29595:3:0;;;;:::i;:::-;;;;29564:305;;;;29910:1;29889:18;:22;29881:67;;;;-1:-1:-1;;;29881:67:0;;11677:2:1;29881:67:0;;;11659:21:1;;;11696:18;;;11689:30;11755:34;11735:18;;;11728:62;11807:18;;29881:67:0;11649:182:1;29881:67:0;29961:13;29990:9;29985:656;30005:9;30001:1;:13;29985:656;;;30058:7;;:42;;-1:-1:-1;;;30058:42:0;;30086:10;30058:42;;;5105:51:1;5172:18;;;5165:34;;;30036:19:0;;-1:-1:-1;;;;;30058:7:0;;:27;;5078:18:1;;30058:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30036:64;;30119:16;30136:11;30119:29;;;;;-1:-1:-1;;;30119:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;:64;;;30182:1;30161:18;:22;30119:64;30115:515;;;30204:20;;;;:::i;:::-;;;;30243:14;30260:6;:33;30267:12;30280:11;30267:25;;;;;-1:-1:-1;;;30267:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30260:33;;;;;;;;;;-1:-1:-1;30260:33:0;:43;-1:-1:-1;;;30260:43:0;;-1:-1:-1;;;;;30260:43:0;;-1:-1:-1;30324:27:0;1800:10;30344:6;30324:5;:27::i;:::-;30402:4;30370:16;30387:11;30370:29;;;;;-1:-1:-1;;;30370:29:0;;;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30478:4;30425:16;30442:12;30455:18;30442:32;;;;;;-1:-1:-1;;;30442:32:0;;;;;;;;;;;;;;;30425:50;;;;;-1:-1:-1;;;30425:50:0;;;;;;;;;;;;;;;;;;:57;;;;;;;;;;;;;;;;;;30512:4;30501:15;;30542:72;30560:11;30573:12;30586:18;30573:32;;;;;;-1:-1:-1;;;30573:32:0;;;;;;;;;;;;;;;;;;;;30542:72;;;16799:25:1;;;16840:18;;;16833:34;16883:18;;16876:34;;;16787:2;16772:18;30542:72:0;;;;;;;30115:515;;-1:-1:-1;30016:3:0;;;;:::i;:::-;;;;29985:656;;;-1:-1:-1;30673:4:0;30661:16;;;;30653:61;;;;-1:-1:-1;;;30653:61:0;;9084:2:1;30653:61:0;;;9066:21:1;;;9103:18;;;9096:30;9162:34;9142:18;;;9135:62;9214:18;;30653:61:0;9056:182:1;30653:61:0;29158:1564;;;;;:::o;12593:492::-;12733:4;12750:36;12760:6;12768:9;12779:6;12750:9;:36::i;:::-;-1:-1:-1;;;;;12826:19:0;;12799:24;12826:19;;;:11;:19;;;;;;;;1800:10;12826:33;;;;;;;;12878:26;;;;12870:79;;;;-1:-1:-1;;;12870:79:0;;10907:2:1;12870:79:0;;;10889:21:1;10946:2;10926:18;;;10919:30;10985:34;10965:18;;;10958:62;-1:-1:-1;;;11036:18:1;;;11029:38;11084:19;;12870:79:0;10879:230:1;12870:79:0;12985:57;12994:6;1800:10;13035:6;13016:16;:25;12985:8;:57::i;:::-;-1:-1:-1;13073:4:0;;12593:492;-1:-1:-1;;;;12593:492:0:o;37336:447::-;3003:6;;-1:-1:-1;;;;;3003:6:0;1800:10;3150:23;3142:68;;;;-1:-1:-1;;;3142:68:0;;;;;;;:::i;:::-;37482:1:::1;37475:3;:8;;37455:52;;;::::0;-1:-1:-1;;;37455:52:0;;12846:2:1;37455:52:0::1;::::0;::::1;12828:21:1::0;12885:2;12865:18;;;12858:30;-1:-1:-1;;;12904:18:1;;;12897:49;12963:18;;37455:52:0::1;12818:169:1::0;37455:52:0::1;37538:1;37526:9;-1:-1:-1::0;;;;;37526:13:0::1;;37518:59;;;::::0;-1:-1:-1;;;37518:59:0;;13194:2:1;37518:59:0::1;::::0;::::1;13176:21:1::0;13233:2;13213:18;;;13206:30;13272:34;13252:18;;;13245:62;-1:-1:-1;;;13323:18:1;;;13316:31;13364:19;;37518:59:0::1;13166:223:1::0;37518:59:0::1;37610:1;37596:11;-1:-1:-1::0;;;;;37596:15:0::1;;37588:63;;;::::0;-1:-1:-1;;;37588:63:0;;10148:2:1;37588:63:0::1;::::0;::::1;10130:21:1::0;10187:2;10167:18;;;10160:30;10226:34;10206:18;;;10199:62;-1:-1:-1;;;10277:18:1;;;10270:33;10320:19;;37588:63:0::1;10120:225:1::0;37588:63:0::1;37725:50;37735:3;37740:11;37753:10;37765:9;37725;:50::i;:::-;37336:447:::0;;;;:::o;13494:215::-;1800:10;13582:4;13631:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13631:34:0;;;;;;;;;;13582:4;;13599:80;;13622:7;;13631:47;;13668:10;;13631:47;:::i;:::-;13599:8;:80::i;37203:125::-;3003:6;;-1:-1:-1;;;;;3003:6:0;1800:10;3150:23;3142:68;;;;-1:-1:-1;;;3142:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37288:22:0;;;::::1;;::::0;;;:13:::1;:22;::::0;;;;:32;;-1:-1:-1;;37288:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37203:125::o;37057:138::-;3003:6;;-1:-1:-1;;;;;3003:6:0;1800:10;3150:23;3142:68;;;;-1:-1:-1;;;3142:68:0;;;;;;;:::i;:::-;37136:1:::1;37127:6;-1:-1:-1::0;;;;;37127:10:0::1;;37119:34;;;::::0;-1:-1:-1;;;37119:34:0;;14709:2:1;37119:34:0::1;::::0;::::1;14691:21:1::0;14748:2;14728:18;;;14721:30;-1:-1:-1;;;14767:18:1;;;14760:41;14818:18;;37119:34:0::1;14681:161:1::0;37119:34:0::1;37170:17;:6:::0;37179:8:::1;37170:17;:::i;:::-;37164:3;:23:::0;;-1:-1:-1;;;;;;37164:23:0::1;-1:-1:-1::0;;;;;37164:23:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;37057:138:0:o;3581:94::-;3003:6;;-1:-1:-1;;;;;3003:6:0;1800:10;3150:23;3142:68;;;;-1:-1:-1;;;3142:68:0;;;;;;;:::i;:::-;3646:21:::1;3664:1;3646:9;:21::i;:::-;3581:94::o:0;34533:117::-;3003:6;;-1:-1:-1;;;;;3003:6:0;1800:10;3150:23;3142:68;;;;-1:-1:-1;;;3142:68:0;;;;;;;:::i;:::-;34620:22:::1;::::0;;-1:-1:-1;;;;34594:48:0;::::1;-1:-1:-1::0;;;34620:22:0;;;::::1;;;34619:23;34594:48:::0;;::::1;;::::0;;34533:117::o;34342:183::-;3003:6;;-1:-1:-1;;;;;3003:6:0;1800:10;3150:23;3142:68;;;;-1:-1:-1;;;3142:68:0;;;;;;;:::i;:::-;34415:18:::1;::::0;;-1:-1:-1;;;;34393:40:0;::::1;-1:-1:-1::0;;;34415:18:0;;;::::1;;;34414:19;34393:40:::0;;::::1;;::::0;;;;-1:-1:-1;;;34448:5:0;::::1;;;34444:74;;34475:5;:31:::0;;-1:-1:-1;;;;34475:31:0::1;-1:-1:-1::0;;;34490:15:0::1;34475:31;;;;::::0;;34342:183::o;9994:104::-;10050:13;10083:7;10076:14;;;;;:::i;26124:180::-;26210:10;26196:25;;;;:13;:25;;;;;;;;26188:78;;;;-1:-1:-1;;;26188:78:0;;8268:2:1;26188:78:0;;;8250:21:1;8307:2;8287:18;;;8280:30;8346:34;8326:18;;;8319:62;-1:-1:-1;;;8397:18:1;;;8390:38;8445:19;;26188:78:0;8240:230:1;26188:78:0;26277:19;26283:4;26289:6;26277:5;:19::i;:::-;26124:180;;:::o;14212:413::-;1800:10;14305:4;14349:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14349:34:0;;;;;;;;;;14402:35;;;;14394:85;;;;-1:-1:-1;;;14394:85:0;;15390:2:1;14394:85:0;;;15372:21:1;15429:2;15409:18;;;15402:30;15468:34;15448:18;;;15441:62;-1:-1:-1;;;15519:18:1;;;15512:35;15564:19;;14394:85:0;15362:227:1;14394:85:0;14515:67;1800:10;14538:7;14566:15;14547:16;:34;14515:8;:67::i;:::-;-1:-1:-1;14613:4:0;;14212:413;-1:-1:-1;;;14212:413:0:o;11406:175::-;11492:4;11509:42;1800:10;11533:9;11544:6;11509:9;:42::i;30730:3604::-;30781:18;;-1:-1:-1;;;30781:18:0;;;;:26;;30803:4;30781:26;30773:65;;;;-1:-1:-1;;;30773:65:0;;10552:2:1;30773:65:0;;;10534:21:1;10591:2;10571:18;;;10564:30;10630:28;10610:18;;;10603:56;10676:18;;30773:65:0;10524:176:1;30773:65:0;30880:14;;;30892:1;30880:14;;;;;;;;;30851:26;;30880:14;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30851:43:0;;-1:-1:-1;30972:7:0;;:29;;-1:-1:-1;;;30972:29:0;;30990:10;30972:29;;;4869:51:1;30952:17:0;;-1:-1:-1;;;;;30972:7:0;;:17;;4842:18:1;;30972:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30952:49;;31012:17;31040:13;31066:35;31118:9;-1:-1:-1;;;;;31104:24:0;;;;;-1:-1:-1;;;31104:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31104:24:0;;31066:62;;31139:35;31191:9;-1:-1:-1;;;;;31177:24:0;;;;;-1:-1:-1;;;31177:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31177:24:0;;31139:62;;31212:35;31264:9;-1:-1:-1;;;;;31250:24:0;;;;;-1:-1:-1;;;31250:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31250:24:0;;31212:62;;31285:35;31337:9;-1:-1:-1;;;;;31323:24:0;;;;;-1:-1:-1;;;31323:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31323:24:0;;31285:62;;31358:35;31410:9;-1:-1:-1;;;;;31396:24:0;;;;;-1:-1:-1;;;31396:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31396:24:0;;31358:62;;31431:35;31483:9;-1:-1:-1;;;;;31469:24:0;;;;;-1:-1:-1;;;31469:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31469:24:0;;31431:62;;31526:1;31514:9;:13;31506:55;;;;-1:-1:-1;;;31506:55:0;;;;;;;:::i;:::-;31652:2;31640:9;:14;31636:61;;;31683:2;31671:14;;31636:61;31713:22;;-1:-1:-1;;;31713:22:0;;;;:30;;31739:4;31713:30;31709:229;;;31772:7;;:29;;-1:-1:-1;;;31772:29:0;;31790:10;31772:29;;;4869:51:1;-1:-1:-1;;;;;31772:7:0;;;;:17;;4842:18:1;;31772:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31760:41;-1:-1:-1;31820:13:0;;31816:111;;31868:7;;:43;;-1:-1:-1;;;31868:43:0;;31900:10;31868:43;;;4869:51:1;-1:-1:-1;;;;;31868:7:0;;;;:31;;4842:18:1;;31868:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31868:43:0;;;;;;;;;;;;:::i;:::-;31854:57;;31816:111;31955:9;31950:1234;31970:9;31966:1;:13;31950:1234;;;32023:7;;:42;;-1:-1:-1;;;32023:42:0;;32051:10;32023:42;;;5105:51:1;5172:18;;;5165:34;;;32001:19:0;;-1:-1:-1;;;;;32023:7:0;;:27;;5078:18:1;;32023:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32001:64;;32086:12;32099:11;32086:25;;;;;-1:-1:-1;;;32086:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;32115:1;32086:30;32082:1091;;;32183:11;32137:18;32156:16;:23;;;32137:43;;;;;;;;-1:-1:-1;;;32137:43:0;;;;;;;;;;;;;;;;;;:57;32213:23;;;:25;;;;;;:::i;:::-;;;;;-1:-1:-1;32082:1091:0;;;32277:12;32290:11;32277:25;;;;;-1:-1:-1;;;32277:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;32306:1;32277:30;32273:900;;;32374:11;32328:18;32347:16;:23;;;32328:43;;;;;;;;-1:-1:-1;;;32328:43:0;;;;;;;;;;;;;;;;;;:57;32404:23;;;:25;;;;;;:::i;32273:900::-;32468:12;32481:11;32468:25;;;;;-1:-1:-1;;;32468:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;32497:1;32468:30;32464:709;;;32565:11;32519:18;32538:16;:23;;;32519:43;;;;;;;;-1:-1:-1;;;32519:43:0;;;;;;;;;;;;;;;;;;:57;32595:23;;;:25;;;;;;:::i;32464:709::-;32659:12;32672:11;32659:25;;;;;-1:-1:-1;;;32659:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;32688:1;32659:30;32655:518;;;32756:11;32710:18;32729:16;:23;;;32710:43;;;;;;;;-1:-1:-1;;;32710:43:0;;;;;;;;;;;;;;;;;;:57;32786:23;;;:25;;;;;;:::i;32655:518::-;32850:12;32863:11;32850:25;;;;;-1:-1:-1;;;32850:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;32879:1;32850:30;32846:327;;;32947:11;32901:18;32920:16;:23;;;32901:43;;;;;;;;-1:-1:-1;;;32901:43:0;;;;;;;;;;;;;;:57;;;;;32977:16;:23;;:25;;;;;;;;:::i;32846:327::-;33102:11;33056:18;33075:16;:23;;;33056:43;;;;;;;;-1:-1:-1;;;33056:43:0;;;;;;;;;;;;;;;;;;:57;33132:25;;:16;:25;;;:::i;:::-;;;;;-1:-1:-1;32846:327:0;-1:-1:-1;31981:3:0;;;;:::i;:::-;;;;31950:1234;;;-1:-1:-1;33229:23:0;;:27;;;33225:143;;33282:74;33292:18;33312:11;33325:16;33343:9;33354:1;33282:9;:74::i;:::-;33273:83;;;;:::i;:::-;;;33225:143;33415:23;;;;:27;;;33411:143;;33468:74;33478:18;33498:11;33511:16;33529:9;33540:1;33468:9;:74::i;:::-;33459:83;;;;:::i;:::-;;;33411:143;33597:23;;;;:27;;;33593:143;;33650:74;33660:18;33680:11;33693:16;33711:9;33722:1;33650:9;:74::i;:::-;33641:83;;;;:::i;:::-;;;33593:143;33783:23;;;;:27;;;33779:143;;33836:74;33846:18;33866:11;33879:16;33897:9;33908:1;33836:9;:74::i;:::-;33827:83;;;;:::i;:::-;;;33779:143;33968:23;;;;:27;;;33964:143;;34021:74;34031:18;34051:11;34064:16;34082:9;34093:1;34021:9;:74::i;:::-;34012:83;;;;:::i;:::-;;;33964:143;34149:23;;;;:27;;;34145:143;;34202:74;34212:18;34232:11;34245:16;34263:9;34274:1;34202:9;:74::i;:::-;34193:83;;;;:::i;:::-;;;34145:143;34300:26;1800:10;34320:5;34300;:26::i;:::-;30730:3604;;;;;;;;;;;:::o;28289:637::-;28380:18;;28352:7;;-1:-1:-1;;;28380:18:0;;;;:26;;28402:4;28380:26;28372:65;;;;-1:-1:-1;;;28372:65:0;;10552:2:1;28372:65:0;;;10534:21:1;10591:2;10571:18;;;10564:30;10630:28;10610:18;;;10603:56;10676:18;;28372:65:0;10524:176:1;28372:65:0;28470:7;;:28;;-1:-1:-1;;;28470:28:0;;-1:-1:-1;;;;;4887:32:1;;;28470:28:0;;;4869:51:1;28450:17:0;;28470:7;;:17;;4842:18:1;;28470:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28450:48;;28529:1;28517:9;:13;28509:55;;;;-1:-1:-1;;;28509:55:0;;;;;;;:::i;:::-;28577:13;28606:9;28601:293;28621:9;28617:1;:13;28601:293;;;28674:7;;:41;;-1:-1:-1;;;28674:41:0;;-1:-1:-1;;;;;5123:32:1;;;28674:41:0;;;5105:51:1;5172:18;;;5165:34;;;28652:19:0;;28674:7;;:27;;5078:18:1;;28674:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28652:63;;28877:5;28835:1;28807:12;28820:11;28807:25;;;;;-1:-1:-1;;;28807:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;:65;;28867:5;;-1:-1:-1;;;28867:5:0;;;;28807:65;;;28839:12;28852:11;28839:25;;;;;-1:-1:-1;;;28839:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28807:65;28788:85;;;;:15;:85;:::i;:::-;28739:6;:33;28746:12;28759:11;28746:25;;;;;-1:-1:-1;;;28746:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;28739:33;;;;;;;;;;-1:-1:-1;28739:33:0;:45;:135;;;-1:-1:-1;;;;;28739:45:0;:135;:::i;:::-;:143;;;;:::i;:::-;28730:152;;;;:::i;:::-;;;28601:293;28632:3;;;;;:::i;:::-;;;;28601:293;;;-1:-1:-1;28913:5:0;28289:637;-1:-1:-1;;;28289:637:0:o;38002:150::-;3003:6;;-1:-1:-1;;;;;3003:6:0;1800:10;3150:23;3142:68;;;;-1:-1:-1;;;3142:68:0;;;;;;;:::i;:::-;38079:7:::1;:23:::0;;-1:-1:-1;;;;;;38079:23:0::1;-1:-1:-1::0;;;;;38079:23:0;::::1;;::::0;;38113:31:::1;38079:23:::0;-1:-1:-1;38113:16:0::1;:31::i;:::-;38002:150:::0;:::o;3830:192::-;3003:6;;-1:-1:-1;;;;;3003:6:0;1800:10;3150:23;3142:68;;;;-1:-1:-1;;;3142:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3919:22:0;::::1;3911:73;;;::::0;-1:-1:-1;;;3911:73:0;;7458:2:1;3911:73:0::1;::::0;::::1;7440:21:1::0;7497:2;7477:18;;;7470:30;7536:34;7516:18;;;7509:62;-1:-1:-1;;;7587:18:1;;;7580:36;7633:19;;3911:73:0::1;7430:228:1::0;3911:73:0::1;3995:19;4005:8;3995:9;:19::i;26548:1234::-:0;26655:7;;:28;;-1:-1:-1;;;26655:28:0;;-1:-1:-1;;;;;4887:32:1;;;26655:28:0;;;4869:51:1;26615:7:0;;;;26655;;;:17;;4842:18:1;;26655:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26635:48;;26714:1;26702:9;:13;26694:55;;;;-1:-1:-1;;;26694:55:0;;;;;;;:::i;:::-;26782:7;;:28;;-1:-1:-1;;;26782:28:0;;-1:-1:-1;;;;;4887:32:1;;;26782:28:0;;;4869:51:1;26762:17:0;;26782:7;;:17;;4842:18:1;;26782:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26762:48;;26841:1;26829:9;:13;26821:52;;;;-1:-1:-1;;;26821:52:0;;14354:2:1;26821:52:0;;;14336:21:1;14393:2;14373:18;;;14366:30;14432:28;14412:18;;;14405:56;14478:18;;26821:52:0;14326:176:1;26821:52:0;26886:29;26932:9;-1:-1:-1;;;;;26918:24:0;;;;;-1:-1:-1;;;26918:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26918:24:0;;26886:56;;26953:26;26997:9;26992:304;27012:9;27008:1;:13;26992:304;;;27065:7;;:41;;-1:-1:-1;;;27065:41:0;;-1:-1:-1;;;;;5123:32:1;;;27065:41:0;;;5105:51:1;5172:18;;;5165:34;;;27043:19:0;;27065:7;;:27;;5078:18:1;;27065:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27043:63;;27125:16;27142:11;27125:29;;;;;-1:-1:-1;;;27125:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;27121:164;;27219:11;27184:12;27197:18;27184:32;;;;;;-1:-1:-1;;;27184:32:0;;;;;;;;;;;;;;;;;;:46;27249:20;;;;:::i;:::-;;;;27121:164;-1:-1:-1;27023:3:0;;;;:::i;:::-;;;;26992:304;;;;27337:1;27316:18;:22;27308:67;;;;-1:-1:-1;;;27308:67:0;;11677:2:1;27308:67:0;;;11659:21:1;;;11696:18;;;11689:30;11755:34;11735:18;;;11728:62;11807:18;;27308:67:0;11649:182:1;27308:67:0;27388:13;27419:9;27414:336;27434:9;27430:1;:13;27414:336;;;27487:7;;:41;;-1:-1:-1;;;27487:41:0;;-1:-1:-1;;;;;5123:32:1;;;27487:41:0;;;5105:51:1;5172:18;;;5165:34;;;27465:19:0;;27487:7;;:27;;5078:18:1;;27487:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27465:63;;27547:16;27564:11;27547:29;;;;;-1:-1:-1;;;27547:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;:64;;;27610:1;27589:18;:22;27547:64;27543:196;;;27632:20;;;;:::i;:::-;;;;27680:6;:33;27687:12;27700:11;27687:25;;;;;-1:-1:-1;;;27687:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;27680:33;;;;;;;;;;-1:-1:-1;27680:33:0;:43;27671:52;;-1:-1:-1;;;;;;;;27680:43:0;;;;27671:52;;:::i;:::-;;;27543:196;-1:-1:-1;27445:3:0;;;;:::i;:::-;;;;27414:336;;;-1:-1:-1;27769:5:0;26548:1234;-1:-1:-1;;;;;;26548:1234:0:o;16135:399::-;-1:-1:-1;;;;;16219:21:0;;16211:65;;;;-1:-1:-1;;;16211:65:0;;15796:2:1;16211:65:0;;;15778:21:1;15835:2;15815:18;;;15808:30;15874:33;15854:18;;;15847:61;15925:18;;16211:65:0;15768:181:1;16211:65:0;16367:6;16351:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;16384:18:0;;:9;:18;;;;;;;;;;:28;;16406:6;;16384:9;:28;;16406:6;;16384:28;:::i;:::-;;;;-1:-1:-1;;16428:37:0;;16308:25:1;;;-1:-1:-1;;;;;16428:37:0;;;16445:1;;16428:37;;16296:2:1;16281:18;16428:37:0;;;;;;;26124:180;;:::o;17896:380::-;-1:-1:-1;;;;;18032:19:0;;18024:68;;;;-1:-1:-1;;;18024:68:0;;13596:2:1;18024:68:0;;;13578:21:1;13635:2;13615:18;;;13608:30;13674:34;13654:18;;;13647:62;-1:-1:-1;;;13725:18:1;;;13718:34;13769:19;;18024:68:0;13568:226:1;18024:68:0;-1:-1:-1;;;;;18111:21:0;;18103:68;;;;-1:-1:-1;;;18103:68:0;;7865:2:1;18103:68:0;;;7847:21:1;7904:2;7884:18;;;7877:30;7943:34;7923:18;;;7916:62;-1:-1:-1;;;7994:18:1;;;7987:32;8036:19;;18103:68:0;7837:224:1;18103:68:0;-1:-1:-1;;;;;18184:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18236:32;;16308:25:1;;;18236:32:0;;16281:18:1;18236:32:0;;;;;;;;17896:380;;;:::o;36863:186::-;36982:3;;-1:-1:-1;;;;;36982:3:0;36972:6;36956:13;10983:12;;;10895:108;36956:13;:22;;;;:::i;:::-;:29;;36948:54;;;;-1:-1:-1;;;36948:54:0;;15049:2:1;36948:54:0;;;15031:21:1;15088:2;15068:18;;;15061:30;-1:-1:-1;;;15107:18:1;;;15100:42;15159:18;;36948:54:0;15021:162:1;36948:54:0;37013:28;37025:7;37034:6;37013:11;:28::i;15115:733::-;-1:-1:-1;;;;;15255:20:0;;15247:70;;;;-1:-1:-1;;;15247:70:0;;12440:2:1;15247:70:0;;;12422:21:1;12479:2;12459:18;;;12452:30;12518:34;12498:18;;;12491:62;-1:-1:-1;;;12569:18:1;;;12562:35;12614:19;;15247:70:0;12412:227:1;15247:70:0;-1:-1:-1;;;;;15336:23:0;;15328:71;;;;-1:-1:-1;;;15328:71:0;;6651:2:1;15328:71:0;;;6633:21:1;6690:2;6670:18;;;6663:30;6729:34;6709:18;;;6702:62;-1:-1:-1;;;6780:18:1;;;6773:33;6823:19;;15328:71:0;6623:225:1;15328:71:0;-1:-1:-1;;;;;15496:17:0;;15472:21;15496:17;;;;;;;;;;;15532:23;;;;15524:74;;;;-1:-1:-1;;;15524:74:0;;8677:2:1;15524:74:0;;;8659:21:1;8716:2;8696:18;;;8689:30;8755:34;8735:18;;;8728:62;-1:-1:-1;;;8806:18:1;;;8799:36;8852:19;;15524:74:0;8649:228:1;15524:74:0;-1:-1:-1;;;;;15634:17:0;;;:9;:17;;;;;;;;;;;15654:22;;;15634:42;;15698:20;;;;;;;;:30;;15670:6;;15634:9;15698:30;;15670:6;;15698:30;:::i;:::-;;;;;;;;15763:9;-1:-1:-1;;;;;15746:35:0;15755:6;-1:-1:-1;;;;;15746:35:0;;15774:6;15746:35;;;;16308:25:1;;16296:2;16281:18;;16263:76;15746:35:0;;;;;;;;15794:46;16867:591;37791:203;37920:66;;;;;;;;37926:12;37941:8;37926:23;;;;:::i;:::-;-1:-1:-1;;;;;37920:66:0;;;;;;;;;;;;;37964:21;:10;37977:8;37964:21;:::i;:::-;-1:-1:-1;;;;;37920:66:0;;;;;;37905:12;;;;:6;:12;;;;;;;;;:81;;;;;;;;;;;;;;;-1:-1:-1;;;37905:81:0;-1:-1:-1;;;;;37905:81:0;;;-1:-1:-1;;;37905:81:0;-1:-1:-1;;37905:81:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37791:203:0:o;4030:173::-;4105:6;;;-1:-1:-1;;;;;4122:17:0;;;-1:-1:-1;;;;;;4122:17:0;;;;;;;4155:40;;4105:6;;;4122:17;4105:6;;4155:40;;4086:16;;4155:40;4030:173;;:::o;16867:591::-;-1:-1:-1;;;;;16951:21:0;;16943:67;;;;-1:-1:-1;;;16943:67:0;;12038:2:1;16943:67:0;;;12020:21:1;12077:2;12057:18;;;12050:30;12116:34;12096:18;;;12089:62;-1:-1:-1;;;12167:18:1;;;12160:31;12208:19;;16943:67:0;12010:223:1;16943:67:0;-1:-1:-1;;;;;17110:18:0;;17085:22;17110:18;;;;;;;;;;;17147:24;;;;17139:71;;;;-1:-1:-1;;;17139:71:0;;7055:2:1;17139:71:0;;;7037:21:1;7094:2;7074:18;;;7067:30;7133:34;7113:18;;;7106:62;-1:-1:-1;;;7184:18:1;;;7177:32;7226:19;;17139:71:0;7027:224:1;17139:71:0;-1:-1:-1;;;;;17246:18:0;;:9;:18;;;;;;;;;;17267:23;;;17246:44;;17312:12;:22;;17284:6;;17246:9;17312:22;;17284:6;;17312:22;:::i;:::-;;;;-1:-1:-1;;17352:37:0;;16308:25:1;;;17378:1:0;;-1:-1:-1;;;;;17352:37:0;;;;;16296:2:1;16281:18;17352:37:0;16263:76:1;34658:2197:0;34834:7;34854:13;34878:17;34906:21;34944:9;34957:1;34944:14;34940:1098;;;35099:24;;35072;;;;35045;;;;35018;;;;34991;;;;:51;;35018:24;34991:51;:::i;:::-;:78;;;;:::i;:::-;:105;;;;:::i;:::-;:132;;;;:::i;:::-;34975:148;;;;35150:17;:24;;;35138:36;;;;34940:1098;;;35205:9;35218:1;35205:14;35201:837;;;35333:24;;35306;;;;35279;;;;35252;;;;:51;;35279:24;35252:51;:::i;:::-;:78;;;;:::i;:::-;:105;;;;:::i;:::-;35236:121;;;;35384:17;:24;;;35372:36;;;;35201:837;;;35439:9;35452:1;35439:14;35435:603;;;35540:24;;35513;;;;35486;;;;:51;;35513:24;35486:51;:::i;:::-;:78;;;;:::i;:::-;35470:94;;;;35591:17;:24;;;35579:36;;;;35435:603;;;35646:9;35659:1;35646:14;35642:396;;;35720:24;;35693;;;;:51;;35720:24;35693:51;:::i;:::-;35677:67;;;;35771:17;:24;;;35759:36;;;;35642:396;;;35826:9;35839:1;35826:14;35822:216;;;-1:-1:-1;;35873:24:0;;35924;;;;35857:40;35912:36;;;;35857:40;35822:216;;;36002:24;;35990:36;;;-1:-1:-1;35822:216:0;36055:9;36050:773;36070:9;36066:1;:13;36050:773;;;36101:14;36250:5;36203:1;36170:12;36183:13;36197:1;36183:16;;;;;;-1:-1:-1;;;36183:16:0;;;;;;;;;;;;;;;36170:30;;;;;-1:-1:-1;;;36170:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;:75;;36240:5;;-1:-1:-1;;;36240:5:0;;;;36170:75;;;36207:12;36220:13;36234:1;36220:16;;;;;;-1:-1:-1;;;36220:16:0;;;;;;;;;;;;;;;36207:30;;;;;-1:-1:-1;;;36207:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36170:75;36151:95;;;;:15;:95;:::i;:::-;36118:17;;;;:6;:17;;;;;:29;:129;;;-1:-1:-1;;;;;36118:29:0;:129;:::i;:::-;:137;;;;:::i;:::-;36101:154;;36292:10;36276:13;:26;36272:378;;;36328:9;36323:278;36343:1;36339;:5;36323:278;;;36396:1;36378:12;36391:1;36378:15;;;;;;-1:-1:-1;;;36378:15:0;;;;;;;;;;;;;;;:19;;;36374:208;;;36454:9;;;;:6;:9;;;;;:20;36479:3;;36437:38;;-1:-1:-1;;;36454:20:0;;-1:-1:-1;;;;;36454:20:0;36437:6;:38;:::i;:::-;36436:46;;;;:::i;:::-;36426:56;;;;:::i;:::-;;;36509:12;36522:1;36509:15;;;;;;-1:-1:-1;;;36509:15:0;;;;;;;;;;;;;;:17;;;;;;;;:::i;:::-;;;;;-1:-1:-1;36553:5:0;;36374:208;36346:3;;;;:::i;:::-;;;;36323:278;;;-1:-1:-1;36619:15:0;;;;:::i;:::-;;;;36272:378;36666:15;36675:6;36666:15;;:::i;:::-;;;36736;36696:12;36709:13;36723:1;36709:16;;;;;;-1:-1:-1;;;36709:16:0;;;;;;;;;;;;;;;36696:30;;;;;-1:-1:-1;;;36696:30:0;;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;36772:39;36786:13;36800:1;36786:16;;;;;;-1:-1:-1;;;36786:16:0;;;;;;;;;;;;;;;36804:6;36772:39;;;;;;16518:25:1;;;16574:2;16559:18;;16552:34;16506:2;16491:18;;16473:119;36772:39:0;;;;;;;;-1:-1:-1;36081:3:0;;;;:::i;:::-;;;;36050:773;;;-1:-1:-1;36842:5:0;;34658:2197;-1:-1:-1;;;;;;;;34658:2197:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:171::-;259:20;;-1:-1:-1;;;;;308:30:1;;298:41;;288:2;;353:1;350;343:12;368:134;445:13;;467:29;445:13;467:29;:::i;507:196::-;566:6;619:2;607:9;598:7;594:23;590:32;587:2;;;640:6;632;625:22;587:2;668:29;687:9;668:29;:::i;:::-;658:39;577:126;-1:-1:-1;;;577:126:1:o;708:270::-;776:6;784;837:2;825:9;816:7;812:23;808:32;805:2;;;858:6;850;843:22;805:2;886:29;905:9;886:29;:::i;:::-;876:39;;934:38;968:2;957:9;953:18;934:38;:::i;:::-;924:48;;795:183;;;;;:::o;983:338::-;1060:6;1068;1076;1129:2;1117:9;1108:7;1104:23;1100:32;1097:2;;;1150:6;1142;1135:22;1097:2;1178:29;1197:9;1178:29;:::i;:::-;1168:39;;1226:38;1260:2;1249:9;1245:18;1226:38;:::i;:::-;1216:48;;1311:2;1300:9;1296:18;1283:32;1273:42;;1087:234;;;;;:::o;1326:367::-;1391:6;1399;1452:2;1440:9;1431:7;1427:23;1423:32;1420:2;;;1473:6;1465;1458:22;1420:2;1501:29;1520:9;1501:29;:::i;:::-;1491:39;;1580:2;1569:9;1565:18;1552:32;1627:5;1620:13;1613:21;1606:5;1603:32;1593:2;;1654:6;1646;1639:22;1593:2;1682:5;1672:15;;;1410:283;;;;;:::o;1698:264::-;1766:6;1774;1827:2;1815:9;1806:7;1802:23;1798:32;1795:2;;;1848:6;1840;1833:22;1795:2;1876:29;1895:9;1876:29;:::i;:::-;1866:39;1952:2;1937:18;;;;1924:32;;-1:-1:-1;;;1785:177:1:o;1967:1181::-;2060:6;2091:2;2134;2122:9;2113:7;2109:23;2105:32;2102:2;;;2155:6;2147;2140:22;2102:2;2193:9;2187:16;-1:-1:-1;;;;;2263:2:1;2255:6;2252:14;2249:2;;;2284:6;2276;2269:22;2249:2;2327:6;2316:9;2312:22;2302:32;;2372:7;2365:4;2361:2;2357:13;2353:27;2343:2;;2399:6;2391;2384:22;2343:2;2433;2427:9;2455:2;2451;2448:10;2445:2;;;2461:18;;:::i;:::-;2507:2;2504:1;2500:10;2539:2;2533:9;2602:2;2598:7;2593:2;2589;2585:11;2581:25;2573:6;2569:38;2657:6;2645:10;2642:22;2637:2;2625:10;2622:18;2619:46;2616:2;;;2668:18;;:::i;:::-;2704:2;2697:22;2754:18;;;2788:15;;;;-1:-1:-1;2823:11:1;;;2853;;;2849:20;;2846:33;-1:-1:-1;2843:2:1;;;2897:6;2889;2882:22;2843:2;2924:6;2915:15;;2939:178;2953:2;2950:1;2947:9;2939:178;;;3010:32;3038:3;3010:32;:::i;:::-;2998:45;;2971:1;2964:9;;;;;3063:12;;;;3095;;2939:178;;;-1:-1:-1;3136:6:1;2071:1077;-1:-1:-1;;;;;;;;2071:1077:1:o;3153:306::-;3212:6;3265:2;3253:9;3244:7;3240:23;3236:32;3233:2;;;3286:6;3278;3271:22;3233:2;3317:23;;-1:-1:-1;;;;;3369:31:1;;3359:42;;3349:2;;3420:6;3412;3405:22;3464:190;3523:6;3576:2;3564:9;3555:7;3551:23;3547:32;3544:2;;;3597:6;3589;3582:22;3544:2;-1:-1:-1;3625:23:1;;3534:120;-1:-1:-1;3534:120:1:o;3659:194::-;3729:6;3782:2;3770:9;3761:7;3757:23;3753:32;3750:2;;;3803:6;3795;3788:22;3750:2;-1:-1:-1;3831:16:1;;3740:113;-1:-1:-1;3740:113:1:o;3858:534::-;3942:6;3950;3958;3966;4019:3;4007:9;3998:7;3994:23;3990:33;3987:2;;;4041:6;4033;4026:22;3987:2;4082:9;4069:23;4059:33;;4111:37;4144:2;4133:9;4129:18;4111:37;:::i;:::-;4101:47;;4167:37;4200:2;4189:9;4185:18;4167:37;:::i;:::-;4157:47;;4254:2;4243:9;4239:18;4226:32;-1:-1:-1;;;;;4291:5:1;4287:46;4280:5;4277:57;4267:2;;4353:6;4345;4338:22;4267:2;3977:415;;;;-1:-1:-1;3977:415:1;;-1:-1:-1;;3977:415:1:o;4397:321::-;4463:6;4471;4524:2;4512:9;4503:7;4499:23;4495:32;4492:2;;;4545:6;4537;4530:22;4492:2;4586:9;4573:23;4563:33;;4646:2;4635:9;4631:18;4618:32;4659:29;4682:5;4659:29;:::i;5841:603::-;5953:4;5982:2;6011;6000:9;5993:21;6043:6;6037:13;6086:6;6081:2;6070:9;6066:18;6059:34;6111:4;6124:140;6138:6;6135:1;6132:13;6124:140;;;6233:14;;;6229:23;;6223:30;6199:17;;;6218:2;6195:26;6188:66;6153:10;;6124:140;;;6282:6;6279:1;6276:13;6273:2;;;6352:4;6347:2;6338:6;6327:9;6323:22;6319:31;6312:45;6273:2;-1:-1:-1;6428:2:1;6407:15;-1:-1:-1;;6403:29:1;6388:45;;;;6435:2;6384:54;;5962:482;-1:-1:-1;;;5962:482:1:o;9588:353::-;9790:2;9772:21;;;9829:2;9809:18;;;9802:30;9868:31;9863:2;9848:18;;9841:59;9932:2;9917:18;;9762:179::o;11114:356::-;11316:2;11298:21;;;11335:18;;;11328:30;11394:34;11389:2;11374:18;;11367:62;11461:2;11446:18;;11288:182::o;17727:128::-;17767:3;17798:1;17794:6;17791:1;17788:13;17785:2;;;17804:18;;:::i;:::-;-1:-1:-1;17840:9:1;;17775:80::o;17860:204::-;17898:3;17934:4;17931:1;17927:12;17966:4;17963:1;17959:12;18001:3;17995:4;17991:14;17986:3;17983:23;17980:2;;;18009:18;;:::i;:::-;18045:13;;17906:158;-1:-1:-1;;;17906:158:1:o;18069:217::-;18109:1;18135;18125:2;;-1:-1:-1;;;18160:31:1;;18214:4;18211:1;18204:15;18242:4;18167:1;18232:15;18125:2;-1:-1:-1;18271:9:1;;18115:171::o;18291:287::-;18331:7;-1:-1:-1;;;;;18424:2:1;18421:1;18417:10;18454:2;18451:1;18447:10;18510:3;18506:2;18502:12;18497:3;18494:21;18487:3;18480:11;18473:19;18469:47;18466:2;;;18519:18;;:::i;:::-;18559:13;;18343:235;-1:-1:-1;;;;18343:235:1:o;18583:272::-;18623:7;-1:-1:-1;;;;;18694:10:1;;;18724;;;18757:11;;18750:19;18779:12;;;18771:21;;18746:47;18743:2;;;18796:18;;:::i;18860:168::-;18900:7;18966:1;18962;18958:6;18954:14;18951:1;18948:21;18943:1;18936:9;18929:17;18925:45;18922:2;;;18973:18;;:::i;:::-;-1:-1:-1;19013:9:1;;18912:116::o;19033:270::-;19072:7;-1:-1:-1;;;;;19149:2:1;19146:1;19142:10;19179:2;19176:1;19172:10;19235:3;19231:2;19227:12;19222:3;19219:21;19212:3;19205:11;19198:19;19194:47;19191:2;;;19244:18;;:::i;19308:125::-;19348:4;19376:1;19373;19370:8;19367:2;;;19381:18;;:::i;:::-;-1:-1:-1;19418:9:1;;19357:76::o;19438:136::-;19477:3;19505:5;19495:2;;19514:18;;:::i;:::-;-1:-1:-1;;;19550:18:1;;19485:89::o;19579:178::-;19616:3;19660:4;19653:5;19649:16;19684:7;19674:2;;19695:18;;:::i;:::-;-1:-1:-1;;19731:20:1;;19624:133;-1:-1:-1;;19624:133:1:o;19762:380::-;19841:1;19837:12;;;;19884;;;19905:2;;19959:4;19951:6;19947:17;19937:27;;19905:2;20012;20004:6;20001:14;19981:18;19978:38;19975:2;;;20058:10;20053:3;20049:20;20046:1;20039:31;20093:4;20090:1;20083:15;20121:4;20118:1;20111:15;19975:2;;19817:325;;;:::o;20147:135::-;20186:3;-1:-1:-1;;20207:17:1;;20204:2;;;20227:18;;:::i;:::-;-1:-1:-1;20274:1:1;20263:13;;20194:88::o;20287:175::-;20324:3;20368:4;20361:5;20357:16;20397:4;20388:7;20385:17;20382:2;;;20405:18;;:::i;:::-;20454:1;20441:15;;20332:130;-1:-1:-1;;20332:130:1:o;20467:127::-;20528:10;20523:3;20519:20;20516:1;20509:31;20559:4;20556:1;20549:15;20583:4;20580:1;20573:15;20599:127;20660:10;20655:3;20651:20;20648:1;20641:31;20691:4;20688:1;20681:15;20715:4;20712:1;20705:15;20731:114;20815:4;20808:5;20804:16;20797:5;20794:27;20784:2;;20835:1;20832;20825:12
Swarm Source
ipfs://1289246ab87be52d283dec6c941645edb5a2bb2ec6722812c0fe4f35ef549464
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.