Latest 25 from a total of 76,538 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 40176809 | 18 days ago | IN | 0 ETH | 0.00000005 | ||||
| Transfer | 39318226 | 38 days ago | IN | 0 ETH | 0.00000011 | ||||
| Transfer | 39316477 | 38 days ago | IN | 0 ETH | 0.00000016 | ||||
| Transfer | 39316395 | 38 days ago | IN | 0 ETH | 0.00000012 | ||||
| Transfer | 39315984 | 38 days ago | IN | 0 ETH | 0.00000017 | ||||
| Approve | 38528005 | 56 days ago | IN | 0 ETH | 0.00000024 | ||||
| Approve | 36517171 | 103 days ago | IN | 0 ETH | 0.00000007 | ||||
| Approve | 36517169 | 103 days ago | IN | 0 ETH | 0.00000007 | ||||
| Approve | 36302907 | 108 days ago | IN | 0 ETH | 0.00000002 | ||||
| Approve | 36269418 | 109 days ago | IN | 0 ETH | 0.00000034 | ||||
| Approve | 36236814 | 110 days ago | IN | 0 ETH | 0.00000013 | ||||
| Approve | 35974415 | 116 days ago | IN | 0 ETH | 0.00000029 | ||||
| Transfer | 35974369 | 116 days ago | IN | 0 ETH | 0.00000037 | ||||
| Approve | 35899312 | 117 days ago | IN | 0 ETH | 0.00000008 | ||||
| Approve | 35899304 | 117 days ago | IN | 0 ETH | 0.00000008 | ||||
| Approve | 35825484 | 119 days ago | IN | 0 ETH | 0.00000025 | ||||
| Transfer | 35820338 | 119 days ago | IN | 0 ETH | 0.00000038 | ||||
| Approve | 35567887 | 125 days ago | IN | 0 ETH | 0.00000033 | ||||
| Approve | 35516226 | 126 days ago | IN | 0 ETH | 0.00000027 | ||||
| Approve | 35509951 | 126 days ago | IN | 0 ETH | 0.0000003 | ||||
| Approve | 35509681 | 126 days ago | IN | 0 ETH | 0.00000051 | ||||
| Approve | 35483549 | 127 days ago | IN | 0 ETH | 0.00000005 | ||||
| Approve | 34818892 | 142 days ago | IN | 0 ETH | 0.00000006 | ||||
| Approve | 34348270 | 153 days ago | IN | 0 ETH | 0.0000002 | ||||
| Approve | 34253423 | 155 days ago | IN | 0 ETH | 0.00000007 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
RAFLToken
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at basescan.org on 2024-04-11
*/
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.17;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.17;
/**
* @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: contracts/lib/LibCommon.sol
pragma solidity ^0.8.17;
library LibCommon {
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* CUSTOM ERRORS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev The ETH transfer has failed.
error ETHTransferFailed();
/// @dev The address is the zero address.
error ZeroAddress();
/// @notice raised when an ERC20 transfer fails
error TransferFailed();
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* ETH OPERATIONS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @notice Taken from Solady (https://github.com/vectorized/solady/blob/main/src/utils/SafeTransferLib.sol)
/// @dev Sends `amount` (in wei) ETH to `to`.
/// Reverts upon failure.
function safeTransferETH(address to, uint256 amount) internal {
// solhint-disable-next-line no-inline-assembly
assembly {
// Transfer the ETH and check if it succeeded or not.
if iszero(call(gas(), to, amount, 0, 0, 0, 0)) {
// Store the function selector of `ETHTransferFailed()`.
// bytes4(keccak256(bytes("ETHTransferFailed()"))) = 0xb12d13eb
mstore(0x00, 0xb12d13eb)
// Revert with (offset, size).
revert(0x1c, 0x04)
}
}
}
/// @notice Validates that the address is not the zero address using assembly.
/// @dev Reverts if the address is the zero address.
function validateAddress(address addr) internal pure {
// solhint-disable-next-line no-inline-assembly
assembly {
if iszero(shl(96, addr)) {
// Store the function selector of `ZeroAddress()`.
// bytes4(keccak256(bytes("ZeroAddress()"))) = 0xd92e233d
mstore(0x00, 0xd92e233d)
// Revert with (offset, size).
revert(0x1c, 0x04)
}
}
}
/// @notice Helper function to transfer ERC20 tokens without the need for SafeERC20.
/// @dev Reverts if the ERC20 transfer fails.
/// @param tokenAddress The address of the ERC20 token.
/// @param from The address to transfer the tokens from.
/// @param to The address to transfer the tokens to.
/// @param amount The amount of tokens to transfer.
function safeTransferFrom(
address tokenAddress,
address from,
address to,
uint256 amount
) internal returns (bool) {
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory data) = tokenAddress.call(
abi.encodeWithSignature(
"transferFrom(address,address,uint256)",
from,
to,
amount
)
);
if (!success) {
if (data.length != 0) {
// bubble up error
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(data)
revert(add(32, data), returndata_size)
}
} else {
revert TransferFailed();
}
}
return true;
}
/// @notice Helper function to transfer ERC20 tokens without the need for SafeERC20.
/// @dev Reverts if the ERC20 transfer fails.
/// @param tokenAddress The address of the ERC20 token.
/// @param to The address to transfer the tokens to.
/// @param amount The amount of tokens to transfer.
function safeTransfer(
address tokenAddress,
address to,
uint256 amount
) internal returns (bool) {
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory data) = tokenAddress.call(
abi.encodeWithSignature("transfer(address,uint256)", to, amount)
);
if (!success) {
if (data.length != 0) {
// bubble up error
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(data)
revert(add(32, data), returndata_size)
}
} else {
revert TransferFailed();
}
}
return true;
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.17;
/**
* @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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
pragma solidity ^0.8.17;
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* 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}.
*
* 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 default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(address from, address to, uint256 amount) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}
// File: contracts/ReflectiveERC20.sol
pragma solidity ^0.8.17;
/// @title A ERC20 implementation with extended reflection token functionalities
/// @notice Implements ERC20 standards with additional token holder reward feature
abstract contract ReflectiveERC20 is ERC20 {
// Constants
uint256 private constant BPS_DIVISOR = 10_000;
mapping(address => uint256) private _rOwned;
mapping(address => uint256) private _tOwned;
uint256 private constant UINT_256_MAX = type(uint256).max;
uint256 private _rTotal;
uint256 private _tFeeTotal;
uint256 public tFeeBPS;
bool private immutable isReflective;
// custom errors
error TokenIsNotReflective();
error TotalReflectionTooSmall();
error ZeroTransferError();
error MintingNotEnabled();
error BurningNotEnabled();
error ERC20InsufficientBalance(
address recipient,
uint256 fromBalance,
uint256 balance
);
/// @notice Gets total supply of the erc20 token
/// @return Token total supply
function _tTotal() public view virtual returns (uint256) {
return totalSupply();
}
/// @notice Constructor to initialize the ReflectionErc20 token
/// @param name_ Name of the token
/// @param symbol_ Symbol of the token
/// @param tokenOwner Address of the token owner
/// @param totalSupply_ Initial total supply
/// @param decimalsToSet Token decimal number
/// @param decimalsToSet Token reward (reflection fee BPS value
constructor(
string memory name_,
string memory symbol_,
address tokenOwner,
uint256 totalSupply_,
uint8 decimalsToSet,
uint256 tFeeBPS_,
bool isReflective_
) ERC20(name_, symbol_) {
if (totalSupply_ != 0) {
super._mint(tokenOwner, totalSupply_ * 10 ** decimalsToSet);
_rTotal = (UINT_256_MAX - (UINT_256_MAX % totalSupply_));
}
_rOwned[tokenOwner] = _rTotal;
tFeeBPS = tFeeBPS_;
isReflective = isReflective_;
}
// public standard ERC20 functions
/// @notice Gets balance the erc20 token for specific address
/// @param account Account address
/// @return Token balance
function balanceOf(address account) public view override returns (uint256) {
if (isReflective) {
return tokenFromReflection(_rOwned[account]);
} else {
return super.balanceOf(account);
}
}
/// @notice Transfers allowed tokens between accounts
/// @param from From account
/// @param to To account
/// @param value Transferred value
/// @return Success
function transferFrom(
address from,
address to,
uint256 value
) public virtual override returns (bool) {
address spender = super._msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
/// @notice Transfers tokens from owner to an account
/// @param to To account
/// @param value Transferred value
/// @return Success
function transfer(
address to,
uint256 value
) public virtual override returns (bool) {
address owner = super._msgSender();
_transfer(owner, to, value);
return true;
}
// override internal OZ standard ERC20 functions related to transfer
/// @notice Transfers tokens from owner to an account
/// @param to To account
/// @param amount Transferred amount
function _transfer(
address from,
address to,
uint256 amount
) internal override {
if (isReflective) {
LibCommon.validateAddress(from);
LibCommon.validateAddress(to);
if (amount == 0) {
revert ZeroTransferError();
}
_transferReflected(from, to, amount);
} else {
super._transfer(from, to, amount);
}
}
// override incompatible internal OZ standard ERC20 functions to disable them in case
// reflection mechanism is used, ie. tFeeBPS is non zero
/// @notice Creates specified amount of tokens, it either uses standard OZ ERC function
/// or in case of reflection logic, it is prohibited
/// @param account Account new tokens will be transferred to
/// @param value Created tokens value
function _mint(address account, uint256 value) internal override {
if (isReflective) {
revert MintingNotEnabled();
} else {
super._mint(account, value);
}
}
/// @notice Destroys specified amount of tokens, it either uses standard OZ ERC function
/// or in case of reflection logic, it is prohibited
/// @param account Account in which tokens will be destroyed
/// @param value Destroyed tokens value
function _burn(address account, uint256 value) internal override {
if (isReflective) {
revert BurningNotEnabled();
} else {
super._burn(account, value);
}
}
// public reflection custom functions
/// @notice Sets a new reflection fee
/// @dev Should only be called by the contract owner
/// @param _tFeeBPS The reflection fee in basis points
function _setReflectionFee(uint256 _tFeeBPS) internal {
if (!isReflective) {
revert TokenIsNotReflective();
}
tFeeBPS = _tFeeBPS;
}
/// @notice Calculates number of tokens from reflection amount
/// @param rAmount Reflection token amount
function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
if (rAmount > _rTotal) {
revert TotalReflectionTooSmall();
}
uint256 currentRate = _getRate();
return rAmount / currentRate;
}
// private reflection custom functions
/// @notice Transfers reflected amount of tokens
/// @param sender Account to transfer tokens from
/// @param recipient Account to transfer tokens to
/// @param tAmount Total token amount
function _transferReflected(
address sender,
address recipient,
uint256 tAmount
) private {
uint256 tFee = calculateFee(tAmount);
uint256 tTransferAmount = tAmount - tFee;
(uint256 rAmount, uint256 rFee, uint256 rTransferAmount) = _getRValues(
tAmount,
tFee,
tTransferAmount
);
if (tAmount != 0) {
_rUpdate(sender, recipient, rAmount, rTransferAmount);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tAmount);
}
}
/// @notice Deducts reflection fee from reflection supply to 'distribute' token holder rewards
/// @param rFee Reflection fee
/// @param tFee Token fee
function _reflectFee(uint256 rFee, uint256 tFee) private {
_rTotal = _rTotal - rFee;
_tFeeTotal = _tFeeTotal + tFee;
}
/// @notice Calculates the reflection fee from token amount
/// @param _amount Amount of tokens to calculate fee from
function calculateFee(uint256 _amount) private view returns (uint256) {
return (_amount * tFeeBPS) / BPS_DIVISOR;
}
/// @notice Transfers Tax related tokens and do not apply reflection fees
/// @param from Account to transfer tokens from
/// @param to Account to transfer tokens to
/// @param tAmount Total token amount
function _transferNonReflectedTax(
address from,
address to,
uint256 tAmount
) internal {
if (isReflective) {
if (tAmount != 0) {
uint256 currentRate = _getRate();
uint256 rAmount = tAmount * currentRate;
_rUpdate(from, to, rAmount, rAmount);
emit Transfer(from, to, tAmount);
}
} else {
super._transfer(from, to, tAmount);
}
}
/// @notice Get reflective values from token values
/// @param tAmount Token amount
/// @param tFee Token fee
/// @param tTransferAmount Transfer amount
function _getRValues(
uint256 tAmount,
uint256 tFee,
uint256 tTransferAmount
) private view returns (uint256, uint256, uint256) {
uint256 currentRate = _getRate();
uint256 rAmount = tAmount * currentRate;
uint256 rFee = tFee * currentRate;
uint256 rTransferAmount = tTransferAmount * currentRate;
return (rAmount, rFee, rTransferAmount);
}
/// @notice Get ratio rate between reflective and token supply
/// @return Reflective rate
function _getRate() private view returns (uint256) {
(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
return rSupply / tSupply;
}
/// @notice Get reflective and token supplies
/// @return Reflective and token supplies
function _getCurrentSupply() private view returns (uint256, uint256) {
return (_rTotal, _tTotal());
}
/// @notice Update reflective balances to reflect amount transfer,
/// with or without a fee applied. If a fee is applied,
/// the amount deducted from the sender will differ
/// from amount added to the recipient
/// @param sender Sender address
/// @param recipient Recipient address
/// @param rSubAmount Amount to be deducted from sender
/// @param rTransferAmount Amount to be added to recipient
function _rUpdate(
address sender,
address recipient,
uint256 rSubAmount,
uint256 rTransferAmount
) private {
uint256 fromBalance = _rOwned[sender];
if (fromBalance < rSubAmount) {
revert ERC20InsufficientBalance(recipient, fromBalance, rSubAmount);
}
_rOwned[sender] = _rOwned[sender] - rSubAmount;
_rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
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() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: contracts/RAFLToken.sol
pragma solidity ^0.8.17;
/// @title A Defi Token implementation with extended functionalities
/// @notice Implements ERC20 standards with additional features like tax and deflation
contract RAFLToken is ReflectiveERC20, Ownable {
// Constants
// 100%
uint256 private constant MAX_BPS_AMOUNT = 10_000;
// 5% maximum tax
uint256 private constant MAX_ALLOWED_TAX = 500;
// 20%
uint256 private constant MAX_ALLOWED_BPS = 2_000;
string public constant VERSION = "rafl_v_1";
string public constant CONTRACT_NAME = "RAFLToken";
bytes32 public constant CONTRACT_HASH = 0x10f8c53b9d200f962270bc9b54f78fa99c99ee7cdfafa82dafef9f2a9b7f31fb;
// State Variables
string public initialDocumentUri;
string public documentUri;
uint256 public immutable initialSupply;
uint256 public immutable initialMaxTokenAmountPerAddress;
uint256 public maxTokenAmountPerAddress;
uint256 public maxTotalSupply;
/// @notice Configuration properties for the ERC20 token
// [false,true,true,false,false,true,false,false] // [250,0,0] // [0,0]
struct ERC20ConfigProps {
bool _isMintable; // FALSE
bool _isBurnable; // TRUE
bool _isDocumentAllowed; // TRUE
bool _isMaxAmountOfTokensSet; // FALSE
bool _isMaxSupplySet; // FALSE
bool _isTaxable; // TRUE
bool _isDeflationary; // FALSE
bool _isReflective; // FALSE
}
ERC20ConfigProps private configProps;
address public immutable initialTokenOwner;
uint8 private immutable _decimals;
address public taxAddress;
uint256 public maxTaxBPS;
uint256 public taxBPS;
uint256 public deflationBPS;
// Whitelist for fee exclusions
mapping(address => bool) feeExclusionList;
// Events
event DocumentUriSet(string newDocUri);
event MaxTokenAmountPerSet(uint256 newMaxTokenAmount);
event MaxTaxSet(uint256 indexed _taxBPS);
event TaxConfigSet(address indexed _taxAddress, uint256 indexed _taxBPS);
event DeflationConfigSet(uint256 indexed _deflationBPS);
event ReflectionConfigSet(uint256 indexed _feeBPS);
// Custom Errors
error InvalidMaxTokenAmount(uint256 maxTokenAmount);
error InvalidDecimals(uint8 decimals);
error MaxTokenAmountPerAddrLtPrevious();
error DestBalanceExceedsMaxAllowed(address addr);
error DocumentUriNotAllowed();
error MaxTokenAmountNotAllowed();
error TokenIsNotTaxable();
error TokenIsNotDeflationary();
error InvalidMaxTaxBPS(uint256 bps);
error InvalidTaxBPS(uint256 bps);
error InvalidTotalBPS(uint256 bps);
error InvalidReflectiveConfig();
error InvalidMaxSupplyConfig();
error TotalSupplyExceedsMaxAllowedAmount();
/// @notice Constructor to initialize the DeFi token
/// @param name_ Name of the token
/// @param symbol_ Symbol of the token
/// @param initialSupplyToSet Initial supply of tokens
/// @param decimalsToSet Number of decimals for the token
/// @param tokenOwner Address of the initial token owner
/// @param customConfigProps Configuration properties for the token
/// @param newDocumentUri URI for the document associated with the token
/// @param _taxAddress Address where tax will be sent
/// @param bpsParams array of BPS values in this order:
/// taxBPS = bpsParams[0],
/// deflationBPS = bpsParams[1],
/// rewardFeeBPS = bpsParams[2],
/// @param amountParams array of amounts for amount specific config:
/// maxTokenAmount = amountParams[0], Maximum token amount per address
/// maxSupplyAmount = amountParams[1], Maximum token token supply amount
constructor(
string memory name_,
string memory symbol_,
uint256 initialSupplyToSet,
uint8 decimalsToSet,
address tokenOwner,
ERC20ConfigProps memory customConfigProps,
string memory newDocumentUri,
address _taxAddress,
uint256[3] memory bpsParams,
uint256[2] memory amountParams
)
ReflectiveERC20(
name_,
symbol_,
tokenOwner,
initialSupplyToSet,
decimalsToSet,
initialSupplyToSet != 0 ? bpsParams[2] : 0,
customConfigProps._isReflective
)
{
// reflection feature can't be used in combination with burning/minting/deflation
// or reflection config is invalid if no reflection BPS amount is provided
if (
(customConfigProps._isReflective &&
(customConfigProps._isBurnable ||
customConfigProps._isMintable ||
customConfigProps._isDeflationary)) ||
(!customConfigProps._isReflective && bpsParams[2] != 0)
) {
revert InvalidReflectiveConfig();
}
if (customConfigProps._isMaxAmountOfTokensSet) {
if (amountParams[0] == 0) {
revert InvalidMaxTokenAmount(amountParams[0]);
}
}
if (decimalsToSet > 18) {
revert InvalidDecimals(decimalsToSet);
}
if (
customConfigProps._isMaxSupplySet &&
(!customConfigProps._isMintable || (totalSupply() > amountParams[1]))
) {
revert InvalidMaxSupplyConfig();
}
bpsInitChecks(customConfigProps, bpsParams, _taxAddress);
LibCommon.validateAddress(tokenOwner);
taxAddress = _taxAddress;
maxTaxBPS = MAX_ALLOWED_TAX;
taxBPS = bpsParams[0];
deflationBPS = bpsParams[1];
initialSupply = initialSupplyToSet;
initialMaxTokenAmountPerAddress = amountParams[0];
initialDocumentUri = newDocumentUri;
initialTokenOwner = tokenOwner;
_decimals = decimalsToSet;
configProps = customConfigProps;
documentUri = newDocumentUri;
maxTokenAmountPerAddress = amountParams[0];
maxTotalSupply = amountParams[1];
if (tokenOwner != msg.sender) {
transferOwnership(tokenOwner);
}
}
function bpsInitChecks(
ERC20ConfigProps memory customConfigProps,
uint256[3] memory bpsParams,
address _taxAddress
) private pure {
uint256 totalBPS = 0;
if (customConfigProps._isTaxable) {
LibCommon.validateAddress(_taxAddress);
totalBPS += bpsParams[0];
}
if (customConfigProps._isDeflationary) {
totalBPS += bpsParams[1];
}
if (customConfigProps._isReflective) {
totalBPS += bpsParams[2];
}
if (totalBPS > MAX_ALLOWED_BPS) {
revert InvalidTotalBPS(totalBPS);
}
}
// Public and External Functions
// Add wallet to whitelist
function excludeFromFee(address _addressToWhitelist) external onlyOwner {
feeExclusionList[_addressToWhitelist] = true;
}
// Remove wallet from whitelist
function unexcludeFromFee(address _addressToWhitelist) external onlyOwner {
if ( feeExclusionList[_addressToWhitelist] ) {
delete feeExclusionList[_addressToWhitelist];
}
}
// Verify wallet is whitelisted
function isExcludedFromFee(address _whitelistedAddress) public view returns(bool) {
bool walletIsWhitelisted = feeExclusionList[_whitelistedAddress];
return walletIsWhitelisted;
}
/// @notice Checks if the token is mintable
/// @return True if the token can be minted
function isMintable() public view returns (bool) {
return configProps._isMintable;
}
/// @notice Checks if the token is burnable
/// @return True if the token can be burned
function isBurnable() public view returns (bool) {
return configProps._isBurnable;
}
/// @notice Checks if the maximum amount of tokens per address is set
/// @return True if there is a maximum limit for token amount per address
function isMaxAmountOfTokensSet() public view returns (bool) {
return configProps._isMaxAmountOfTokensSet;
}
/// @notice Checks if the maximum amount of token supply is set
/// @return True if there is a maximum limit for token supply
function isMaxSupplySet() public view returns (bool) {
return configProps._isMaxSupplySet;
}
/// @notice Checks if setting a document URI is allowed
/// @return True if setting a document URI is allowed
function isDocumentUriAllowed() public view returns (bool) {
return configProps._isDocumentAllowed;
}
/// @notice Returns the number of decimals used for the token
/// @return The number of decimals
function decimals() public view virtual override returns (uint8) {
return _decimals;
}
/// @notice Checks if the token is taxable
/// @return True if the token has tax applied on transfers
function isTaxable() public view returns (bool) {
return configProps._isTaxable;
}
/// @notice Checks if the token is deflationary
/// @return True if the token has deflation applied on transfers
function isDeflationary() public view returns (bool) {
return configProps._isDeflationary;
}
/// @notice Checks if the token is reflective
/// @return True if the token has reflection (ie. holder rewards) applied on transfers
function isReflective() public view returns (bool) {
return configProps._isReflective;
}
/// @notice Sets a new document URI
/// @dev Can only be called by the contract owner
/// @param newDocumentUri The new URI to be set
function setDocumentUri(string memory newDocumentUri) external onlyOwner {
if (!isDocumentUriAllowed()) {
revert DocumentUriNotAllowed();
}
documentUri = newDocumentUri;
emit DocumentUriSet(newDocumentUri);
}
/// @notice Sets a new maximum token amount per address
/// @dev Can only be called by the contract owner
/// @param newMaxTokenAmount The new maximum token amount per address
function setMaxTokenAmountPerAddress(
uint256 newMaxTokenAmount
) external onlyOwner {
if (!isMaxAmountOfTokensSet()) {
revert MaxTokenAmountNotAllowed();
}
if (newMaxTokenAmount <= maxTokenAmountPerAddress) {
revert MaxTokenAmountPerAddrLtPrevious();
}
maxTokenAmountPerAddress = newMaxTokenAmount;
emit MaxTokenAmountPerSet(newMaxTokenAmount);
}
/// @notice Sets a new reflection fee
/// @dev Can only be called by the contract owner
/// @param _feeBPS The reflection fee in basis points
function setReflectionConfig(uint256 _feeBPS) external onlyOwner {
if (!isReflective()) {
revert TokenIsNotReflective();
}
super._setReflectionFee(_feeBPS);
emit ReflectionConfigSet(_feeBPS);
}
/// @notice Sets a new tax configuration
/// @dev Can only be called by the contract owner
/// @param _maxTaxBPS The tax rate in basis points
function setMaxTax(
uint256 _maxTaxBPS
) external onlyOwner {
if (!isTaxable()) {
revert TokenIsNotTaxable();
}
// Prevent tax from going over the max amount
if ( _maxTaxBPS > MAX_ALLOWED_TAX ) {
revert InvalidMaxTaxBPS(_maxTaxBPS);
}
maxTaxBPS = _maxTaxBPS;
emit MaxTaxSet(_maxTaxBPS);
}
/// @notice Sets a new tax configuration
/// @dev Can only be called by the contract owner
/// @param _taxAddress The address where tax will be sent
/// @param _taxBPS The tax rate in basis points
function setTaxConfig(
address _taxAddress,
uint256 _taxBPS
) external onlyOwner {
if (!isTaxable()) {
revert TokenIsNotTaxable();
}
// Prevent tax from going over the max amount
if ( _taxBPS > maxTaxBPS || _taxBPS > MAX_ALLOWED_TAX ) {
revert InvalidTaxBPS(_taxBPS);
}
uint256 totalBPS = deflationBPS + tFeeBPS + _taxBPS;
if (totalBPS > MAX_ALLOWED_BPS) {
revert InvalidTotalBPS(totalBPS);
}
LibCommon.validateAddress(_taxAddress);
taxAddress = _taxAddress;
taxBPS = _taxBPS;
emit TaxConfigSet(_taxAddress, _taxBPS);
}
/// @notice Sets a new deflation configuration
/// @dev Can only be called by the contract owner
/// @param _deflationBPS The deflation rate in basis points
function setDeflationConfig(uint256 _deflationBPS) external onlyOwner {
if (!isDeflationary()) {
revert TokenIsNotDeflationary();
}
uint256 totalBPS = deflationBPS + tFeeBPS + _deflationBPS;
if (totalBPS > MAX_ALLOWED_BPS) {
revert InvalidTotalBPS(totalBPS);
}
deflationBPS = _deflationBPS;
emit DeflationConfigSet(_deflationBPS);
}
/// @notice Transfers tokens to a specified address
/// @dev Overrides the ERC20 transfer function with added tax and deflation logic
/// @param to The address to transfer tokens to
/// @param amount The amount of tokens to be transferred
/// @return True if the transfer was successful
function transfer(
address to,
uint256 amount
) public virtual override returns (bool) {
uint256 taxAmount = _taxAmount(msg.sender, amount);
uint256 deflationAmount = _deflationAmount(amount);
uint256 amountToTransfer = amount - taxAmount - deflationAmount;
// Bypass taxes for whitelisted wallets (both sender, and receiver)
if ( isExcludedFromFee(msg.sender) || isExcludedFromFee(to) ) {
return super.transfer(to, amount);
}
if (isMaxAmountOfTokensSet()) {
if (balanceOf(to) + amountToTransfer > maxTokenAmountPerAddress) {
revert DestBalanceExceedsMaxAllowed(to);
}
}
if (taxAmount != 0) {
_transferNonReflectedTax(msg.sender, taxAddress, taxAmount);
}
if (deflationAmount != 0) {
_burn(msg.sender, deflationAmount);
}
return super.transfer(to, amountToTransfer);
}
/// @notice Transfers tokens from one address to another
/// @dev Overrides the ERC20 transferFrom function with added tax and deflation logic
/// @param from The address which you want to send tokens from
/// @param to The address which you want to transfer to
/// @param amount The amount of tokens to be transferred
/// @return True if the transfer was successful
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
uint256 taxAmount = _taxAmount(from, amount);
uint256 deflationAmount = _deflationAmount(amount);
uint256 amountToTransfer = amount - taxAmount - deflationAmount;
// Bypass taxes for whitelisted wallets (both sender, and receiver)
if ( isExcludedFromFee(from) || isExcludedFromFee(to) ) {
return super.transferFrom(from, to, amount);
}
if (isMaxAmountOfTokensSet()) {
if (balanceOf(to) + amountToTransfer > maxTokenAmountPerAddress) {
revert DestBalanceExceedsMaxAllowed(to);
}
}
if (taxAmount != 0) {
_transferNonReflectedTax(from, taxAddress, taxAmount);
}
if (deflationAmount != 0) {
_burn(from, deflationAmount);
}
return super.transferFrom(from, to, amountToTransfer);
}
/// @notice Mints new tokens to a specified address
/// @dev Can only be called by the contract owner and if minting is enabled
/// @param to The address to mint tokens to
/// @param amount The amount of tokens to mint
function mint(address to, uint256 amount) external onlyOwner {
if (!isMintable()) {
revert MintingNotEnabled();
}
if (isMaxAmountOfTokensSet()) {
if (balanceOf(to) + amount > maxTokenAmountPerAddress) {
revert DestBalanceExceedsMaxAllowed(to);
}
}
if (isMaxSupplySet()) {
if (totalSupply() + amount > maxTotalSupply) {
revert TotalSupplyExceedsMaxAllowedAmount();
}
}
super._mint(to, amount);
}
/// @notice Burns a specific amount of tokens
/// @dev Can only be called by the contract owner and if burning is enabled
/// @param amount The amount of tokens to be burned
function burn(uint256 amount) external onlyOwner {
if (!isBurnable()) {
revert BurningNotEnabled();
}
_burn(msg.sender, amount);
}
/// @notice Renounces ownership of the contract
/// @dev Leaves the contract without an owner, disabling any functions that require the owner's authorization
function renounceOwnership() public override onlyOwner {
super.renounceOwnership();
}
/// @notice Transfers ownership of the contract to a new account
/// @dev Can only be called by the current owner
/// @param newOwner The address of the new owner
function transferOwnership(address newOwner) public override onlyOwner {
super.transferOwnership(newOwner);
}
// Internal Functions
/// @notice Calculates the tax amount for a transfer
/// @param sender The address initiating the transfer
/// @param amount The amount of tokens being transferred
/// @return taxAmount The calculated tax amount
function _taxAmount(
address sender,
uint256 amount
) internal view returns (uint256 taxAmount) {
taxAmount = 0;
if (taxBPS != 0 && sender != taxAddress) {
taxAmount = (amount * taxBPS) / MAX_BPS_AMOUNT;
}
}
/// @notice Calculates the deflation amount for a transfer
/// @param amount The amount of tokens being transferred
/// @return deflationAmount The calculated deflation amount
function _deflationAmount(
uint256 amount
) internal view returns (uint256 deflationAmount) {
deflationAmount = 0;
if (deflationBPS != 0) {
deflationAmount = (amount * deflationBPS) / MAX_BPS_AMOUNT;
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"initialSupplyToSet","type":"uint256"},{"internalType":"uint8","name":"decimalsToSet","type":"uint8"},{"internalType":"address","name":"tokenOwner","type":"address"},{"components":[{"internalType":"bool","name":"_isMintable","type":"bool"},{"internalType":"bool","name":"_isBurnable","type":"bool"},{"internalType":"bool","name":"_isDocumentAllowed","type":"bool"},{"internalType":"bool","name":"_isMaxAmountOfTokensSet","type":"bool"},{"internalType":"bool","name":"_isMaxSupplySet","type":"bool"},{"internalType":"bool","name":"_isTaxable","type":"bool"},{"internalType":"bool","name":"_isDeflationary","type":"bool"},{"internalType":"bool","name":"_isReflective","type":"bool"}],"internalType":"struct RAFLToken.ERC20ConfigProps","name":"customConfigProps","type":"tuple"},{"internalType":"string","name":"newDocumentUri","type":"string"},{"internalType":"address","name":"_taxAddress","type":"address"},{"internalType":"uint256[3]","name":"bpsParams","type":"uint256[3]"},{"internalType":"uint256[2]","name":"amountParams","type":"uint256[2]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BurningNotEnabled","type":"error"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"DestBalanceExceedsMaxAllowed","type":"error"},{"inputs":[],"name":"DocumentUriNotAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"fromBalance","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"uint8","name":"decimals","type":"uint8"}],"name":"InvalidDecimals","type":"error"},{"inputs":[],"name":"InvalidMaxSupplyConfig","type":"error"},{"inputs":[{"internalType":"uint256","name":"bps","type":"uint256"}],"name":"InvalidMaxTaxBPS","type":"error"},{"inputs":[{"internalType":"uint256","name":"maxTokenAmount","type":"uint256"}],"name":"InvalidMaxTokenAmount","type":"error"},{"inputs":[],"name":"InvalidReflectiveConfig","type":"error"},{"inputs":[{"internalType":"uint256","name":"bps","type":"uint256"}],"name":"InvalidTaxBPS","type":"error"},{"inputs":[{"internalType":"uint256","name":"bps","type":"uint256"}],"name":"InvalidTotalBPS","type":"error"},{"inputs":[],"name":"MaxTokenAmountNotAllowed","type":"error"},{"inputs":[],"name":"MaxTokenAmountPerAddrLtPrevious","type":"error"},{"inputs":[],"name":"MintingNotEnabled","type":"error"},{"inputs":[],"name":"TokenIsNotDeflationary","type":"error"},{"inputs":[],"name":"TokenIsNotReflective","type":"error"},{"inputs":[],"name":"TokenIsNotTaxable","type":"error"},{"inputs":[],"name":"TotalReflectionTooSmall","type":"error"},{"inputs":[],"name":"TotalSupplyExceedsMaxAllowedAmount","type":"error"},{"inputs":[],"name":"ZeroTransferError","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_deflationBPS","type":"uint256"}],"name":"DeflationConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"newDocUri","type":"string"}],"name":"DocumentUriSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_taxBPS","type":"uint256"}],"name":"MaxTaxSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxTokenAmount","type":"uint256"}],"name":"MaxTokenAmountPerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_feeBPS","type":"uint256"}],"name":"ReflectionConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_taxAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"_taxBPS","type":"uint256"}],"name":"TaxConfigSet","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":"CONTRACT_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"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":"deflationBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"documentUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addressToWhitelist","type":"address"}],"name":"excludeFromFee","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":[],"name":"initialDocumentUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialMaxTokenAmountPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialTokenOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBurnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDeflationary","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDocumentUriAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelistedAddress","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMaxAmountOfTokensSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMaxSupplySet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isReflective","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTaxable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTaxBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deflationBPS","type":"uint256"}],"name":"setDeflationConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newDocumentUri","type":"string"}],"name":"setDocumentUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTaxBPS","type":"uint256"}],"name":"setMaxTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTokenAmount","type":"uint256"}],"name":"setMaxTokenAmountPerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeBPS","type":"uint256"}],"name":"setReflectionConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxAddress","type":"address"},{"internalType":"uint256","name":"_taxBPS","type":"uint256"}],"name":"setTaxConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tFeeBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addressToWhitelist","type":"address"}],"name":"unexcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6101206040523480156200001257600080fd5b5060405162005651380380620056518339818101604052810190620000389190620010a0565b8989878a8a60008d036200004e5760006200006b565b86600260038110620000655762000064620011f5565b5b60200201515b8a60e001518686816003908162000083919062001465565b50806004908162000095919062001465565b505050600084146200013557620000d38584600a620000b59190620016cf565b86620000c2919062001720565b6200069160201b62001aa81760201c565b837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200010191906200179a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200012e9190620017d2565b6007819055505b600754600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160098190555080151560808115158152505050505050505050620001b5620001a9620007fe60201b60201c565b6200080660201b60201c565b8460e001518015620001e25750846020015180620001d4575084600001515b80620001e157508460c001515b5b806200021957508460e0015115801562000218575060008260026003811062000210576200020f620011f5565b5b602002015114155b5b1562000251576040517f30a870cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846060015115620002db57600081600060028110620002755762000274620011f5565b5b602002015103620002da5780600060028110620002975762000296620011f5565b5b60200201516040517f64824b8d000000000000000000000000000000000000000000000000000000008152600401620002d191906200181e565b60405180910390fd5b5b60128760ff1611156200032757866040517fca9503910000000000000000000000000000000000000000000000000000000081526004016200031e91906200184c565b60405180910390fd5b84608001518015620003705750846000015115806200036f575080600160028110620003585762000357620011f5565b5b60200201516200036d620008cc60201b60201c565b115b5b15620003a8576040517fb51a848200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620003bb858385620008d660201b60201c565b620003d186620009e360201b62001bfe1760201c565b82601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101f460118190555081600060038110620004325762000431620011f5565b5b602002015160128190555081600160038110620004545762000453620011f5565b5b60200201516013819055508760a08181525050806000600281106200047e576200047d620011f5565b5b602002015160c0818152505083600b90816200049b919062001465565b508573ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250508660ff166101008160ff168152505084600f60008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548160ff02191690831515021790555060808201518160000160046101000a81548160ff02191690831515021790555060a08201518160000160056101000a81548160ff02191690831515021790555060c08201518160000160066101000a81548160ff02191690831515021790555060e08201518160000160076101000a81548160ff02191690831515021790555090505083600c9081620005f6919062001465565b50806000600281106200060e576200060d620011f5565b5b6020020151600d819055508060016002811062000630576200062f620011f5565b5b6020020151600e819055503373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161462000681576200068086620009fd60201b60201c565b5b5050505050505050505062001a31565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000703576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006fa90620018ca565b60405180910390fd5b620007176000838362000a2660201b60201c565b80600260008282546200072b9190620018ec565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007de91906200181e565b60405180910390a3620007fa6000838362000a2b60201b60201c565b5050565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600254905090565b60008360a00151156200092557620008f982620009e360201b62001bfe1760201c565b8260006003811062000910576200090f620011f5565b5b602002015181620009229190620018ec565b90505b8360c00151156200095c5782600160038110620009475762000946620011f5565b5b602002015181620009599190620018ec565b90505b8360e00151156200099357826002600381106200097e576200097d620011f5565b5b602002015181620009909190620018ec565b90505b6107d0811115620009dd57806040517f3e474e0d000000000000000000000000000000000000000000000000000000008152600401620009d491906200181e565b60405180910390fd5b50505050565b8060601b620009fa5763d92e233d6000526004601cfd5b50565b62000a0d62000a3060201b60201c565b62000a238162000ac160201b62001c171760201c565b50565b505050565b505050565b62000a40620007fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a6662000b5760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000abf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ab69062001977565b60405180910390fd5b565b62000ad162000a3060201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000b43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b3a9062001a0f565b60405180910390fd5b62000b54816200080660201b60201c565b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000bea8262000b9f565b810181811067ffffffffffffffff8211171562000c0c5762000c0b62000bb0565b5b80604052505050565b600062000c2162000b81565b905062000c2f828262000bdf565b919050565b600067ffffffffffffffff82111562000c525762000c5162000bb0565b5b62000c5d8262000b9f565b9050602081019050919050565b60005b8381101562000c8a57808201518184015260208101905062000c6d565b60008484015250505050565b600062000cad62000ca78462000c34565b62000c15565b90508281526020810184848401111562000ccc5762000ccb62000b9a565b5b62000cd984828562000c6a565b509392505050565b600082601f83011262000cf95762000cf862000b95565b5b815162000d0b84826020860162000c96565b91505092915050565b6000819050919050565b62000d298162000d14565b811462000d3557600080fd5b50565b60008151905062000d498162000d1e565b92915050565b600060ff82169050919050565b62000d678162000d4f565b811462000d7357600080fd5b50565b60008151905062000d878162000d5c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000dba8262000d8d565b9050919050565b62000dcc8162000dad565b811462000dd857600080fd5b50565b60008151905062000dec8162000dc1565b92915050565b600080fd5b60008115159050919050565b62000e0e8162000df7565b811462000e1a57600080fd5b50565b60008151905062000e2e8162000e03565b92915050565b6000610100828403121562000e4e5762000e4d62000df2565b5b62000e5b61010062000c15565b9050600062000e6d8482850162000e1d565b600083015250602062000e838482850162000e1d565b602083015250604062000e998482850162000e1d565b604083015250606062000eaf8482850162000e1d565b606083015250608062000ec58482850162000e1d565b60808301525060a062000edb8482850162000e1d565b60a08301525060c062000ef18482850162000e1d565b60c08301525060e062000f078482850162000e1d565b60e08301525092915050565b600067ffffffffffffffff82111562000f315762000f3062000bb0565b5b602082029050919050565b600080fd5b600062000f5862000f528462000f13565b62000c15565b9050806020840283018581111562000f755762000f7462000f3c565b5b835b8181101562000fa2578062000f8d888262000d38565b84526020840193505060208101905062000f77565b5050509392505050565b600082601f83011262000fc45762000fc362000b95565b5b600362000fd384828562000f41565b91505092915050565b600067ffffffffffffffff82111562000ffa5762000ff962000bb0565b5b602082029050919050565b60006200101c620010168462000fdc565b62000c15565b9050806020840283018581111562001039576200103862000f3c565b5b835b8181101562001066578062001051888262000d38565b8452602084019350506020810190506200103b565b5050509392505050565b600082601f83011262001088576200108762000b95565b5b60026200109784828562001005565b91505092915050565b6000806000806000806000806000806102808b8d031215620010c757620010c662000b8b565b5b60008b015167ffffffffffffffff811115620010e857620010e762000b90565b5b620010f68d828e0162000ce1565b9a505060208b015167ffffffffffffffff8111156200111a576200111962000b90565b5b620011288d828e0162000ce1565b99505060406200113b8d828e0162000d38565b98505060606200114e8d828e0162000d76565b9750506080620011618d828e0162000ddb565b96505060a0620011748d828e0162000e34565b9550506101a08b015167ffffffffffffffff81111562001199576200119862000b90565b5b620011a78d828e0162000ce1565b9450506101c0620011bb8d828e0162000ddb565b9350506101e0620011cf8d828e0162000fac565b925050610240620011e38d828e0162001070565b9150509295989b9194979a5092959850565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200127757607f821691505b6020821081036200128d576200128c6200122f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620012f77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620012b8565b620013038683620012b8565b95508019841693508086168417925050509392505050565b6000819050919050565b600062001346620013406200133a8462000d14565b6200131b565b62000d14565b9050919050565b6000819050919050565b620013628362001325565b6200137a62001371826200134d565b848454620012c5565b825550505050565b600090565b6200139162001382565b6200139e81848462001357565b505050565b5b81811015620013c657620013ba60008262001387565b600181019050620013a4565b5050565b601f8211156200141557620013df8162001293565b620013ea84620012a8565b81016020851015620013fa578190505b620014126200140985620012a8565b830182620013a3565b50505b505050565b600082821c905092915050565b60006200143a600019846008026200141a565b1980831691505092915050565b600062001455838362001427565b9150826002028217905092915050565b620014708262001224565b67ffffffffffffffff8111156200148c576200148b62000bb0565b5b6200149882546200125e565b620014a5828285620013ca565b600060209050601f831160018114620014dd5760008415620014c8578287015190505b620014d4858262001447565b86555062001544565b601f198416620014ed8662001293565b60005b828110156200151757848901518255600182019150602085019450602081019050620014f0565b8683101562001537578489015162001533601f89168262001427565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620015da57808604811115620015b257620015b16200154c565b5b6001851615620015c25780820291505b8081029050620015d2856200157b565b945062001592565b94509492505050565b600082620015f55760019050620016c8565b81620016055760009050620016c8565b81600181146200161e576002811462001629576200165f565b6001915050620016c8565b60ff8411156200163e576200163d6200154c565b5b8360020a9150848211156200165857620016576200154c565b5b50620016c8565b5060208310610133831016604e8410600b8410161715620016995782820a9050838111156200169357620016926200154c565b5b620016c8565b620016a8848484600162001588565b92509050818404811115620016c257620016c16200154c565b5b81810290505b9392505050565b6000620016dc8262000d14565b9150620016e98362000d4f565b9250620017187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620015e3565b905092915050565b60006200172d8262000d14565b91506200173a8362000d14565b92508282026200174a8162000d14565b915082820484148315176200176457620017636200154c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620017a78262000d14565b9150620017b48362000d14565b925082620017c757620017c66200176b565b5b828206905092915050565b6000620017df8262000d14565b9150620017ec8362000d14565b92508282039050818111156200180757620018066200154c565b5b92915050565b620018188162000d14565b82525050565b60006020820190506200183560008301846200180d565b92915050565b620018468162000d4f565b82525050565b60006020820190506200186360008301846200183b565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620018b2601f8362001869565b9150620018bf826200187a565b602082019050919050565b60006020820190508181036000830152620018e581620018a3565b9050919050565b6000620018f98262000d14565b9150620019068362000d14565b92508282019050808211156200192157620019206200154c565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200195f60208362001869565b91506200196c8262001927565b602082019050919050565b60006020820190508181036000830152620019928162001950565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620019f760268362001869565b915062001a048262001999565b604082019050919050565b6000602082019050818103600083015262001a2a81620019e8565b9050919050565b60805160a05160c05160e05161010051613bb862001a996000396000610dbd015260006111d2015260006112a801526000610de30152600081816110f601528181611fd3015281816120a7015281816121310152818161221601526123d30152613bb86000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c8063883356d911610182578063b7bda68f116100e9578063de0060ca116100a2578063f2fde38b1161007c578063f2fde38b146108bb578063f820f567146108d7578063f91f825d146108f5578063ffa1ad7414610911576102d6565b8063de0060ca14610863578063e338083d14610881578063f19c4e3b1461089f576102d6565b8063b7bda68f146107a1578063bfcf7355146107bf578063d48e4127146107dd578063d8f67851146107fb578063dcb7e5d614610817578063dd62ed3e14610833576102d6565b8063a32f69761161013b578063a32f6976146106cb578063a457c2d7146106e9578063a476df6114610719578063a9059cbb14610735578063a9d8668514610765578063af465a2714610783576102d6565b8063883356d9146106175780638da5cb5b146106355780638dac7191146106535780638e8c10a21461067157806395d89b411461068f5780639703a19d146106ad576102d6565b8063378dc3dc116102415780634ac0bc32116101fa5780635a3990ce116101d45780635a3990ce146105a1578063614d08f8146105bf57806370a08231146105dd578063715018a61461060d576102d6565b80634ac0bc32146105355780635342acb414610553578063542e966714610583576102d6565b8063378dc3dc14610475578063395093511461049357806340c10f19146104c357806342966c68146104df578063437823ec146104fb57806346b45af714610517576102d6565b806328bc35c11161029357806328bc35c1146103b15780632ab4d052146103cd5780632d838119146103eb5780632e0ee48e1461041b5780632fa782eb14610439578063313ce56714610457576102d6565b806302252c4d146102db578063044ab74e146102f757806306fdde0314610315578063095ea7b31461033357806318160ddd1461036357806323b872dd14610381575b600080fd5b6102f560048036038101906102f09190612c1e565b61092f565b005b6102ff6109f1565b60405161030c9190612cdb565b60405180910390f35b61031d610a7f565b60405161032a9190612cdb565b60405180910390f35b61034d60048036038101906103489190612d5b565b610b11565b60405161035a9190612db6565b60405180910390f35b61036b610b34565b6040516103789190612de0565b60405180910390f35b61039b60048036038101906103969190612dfb565b610b3e565b6040516103a89190612db6565b60405180910390f35b6103cb60048036038101906103c69190612c1e565b610c71565b005b6103d5610d35565b6040516103e29190612de0565b60405180910390f35b61040560048036038101906104009190612c1e565b610d3b565b6040516104129190612de0565b60405180910390f35b610423610d99565b6040516104309190612db6565b60405180910390f35b610441610db3565b60405161044e9190612de0565b60405180910390f35b61045f610db9565b60405161046c9190612e6a565b60405180910390f35b61047d610de1565b60405161048a9190612de0565b60405180910390f35b6104ad60048036038101906104a89190612d5b565b610e05565b6040516104ba9190612db6565b60405180910390f35b6104dd60048036038101906104d89190612d5b565b610e3c565b005b6104f960048036038101906104f49190612c1e565b610f54565b005b61051560048036038101906105109190612e85565b610fa7565b005b61051f61100a565b60405161052c9190612db6565b60405180910390f35b61053d611024565b60405161054a9190612db6565b60405180910390f35b61056d60048036038101906105689190612e85565b61103e565b60405161057a9190612db6565b60405180910390f35b61058b611099565b6040516105989190612de0565b60405180910390f35b6105a961109f565b6040516105b69190612db6565b60405180910390f35b6105c76110b9565b6040516105d49190612cdb565b60405180910390f35b6105f760048036038101906105f29190612e85565b6110f2565b6040516106049190612de0565b60405180910390f35b61061561117a565b005b61061f61118c565b60405161062c9190612db6565b60405180910390f35b61063d6111a6565b60405161064a9190612ec1565b60405180910390f35b61065b6111d0565b6040516106689190612ec1565b60405180910390f35b6106796111f4565b6040516106869190612db6565b60405180910390f35b61069761120e565b6040516106a49190612cdb565b60405180910390f35b6106b56112a0565b6040516106c29190612de0565b60405180910390f35b6106d36112a6565b6040516106e09190612de0565b60405180910390f35b61070360048036038101906106fe9190612d5b565b6112ca565b6040516107109190612db6565b60405180910390f35b610733600480360381019061072e9190613011565b611341565b005b61074f600480360381019061074a9190612d5b565b6113d1565b60405161075c9190612db6565b60405180910390f35b61076d611501565b60405161077a9190612cdb565b60405180910390f35b61078b61158f565b6040516107989190612de0565b60405180910390f35b6107a961159e565b6040516107b69190612ec1565b60405180910390f35b6107c76115c4565b6040516107d49190613073565b60405180910390f35b6107e56115eb565b6040516107f29190612de0565b60405180910390f35b61081560048036038101906108109190612c1e565b6115f1565b005b610831600480360381019061082c9190612e85565b6116d5565b005b61084d6004803603810190610848919061308e565b611782565b60405161085a9190612de0565b60405180910390f35b61086b611809565b6040516108789190612db6565b60405180910390f35b610889611823565b6040516108969190612de0565b60405180910390f35b6108b960048036038101906108b49190612d5b565b611829565b005b6108d560048036038101906108d09190612e85565b6119c2565b005b6108df6119d6565b6040516108ec9190612db6565b60405180910390f35b61090f600480360381019061090a9190612c1e565b6119f0565b005b610919611a6f565b6040516109269190612cdb565b60405180910390f35b610937611c9a565b61093f61109f565b610975576040517f6273340f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d5481116109b0576040517fa43d2d7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d819055507f2905481c6fd1a037492016c4760435a52203d82a6f34dc3de40f464c1bf42d59816040516109e69190612de0565b60405180910390a150565b600c80546109fe906130fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a906130fd565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b505050505081565b606060038054610a8e906130fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba906130fd565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b5050505050905090565b600080610b1c611d18565b9050610b29818585611d20565b600191505092915050565b6000600254905090565b600080610b4b8584611ee9565b90506000610b5884611f74565b90506000818386610b69919061315d565b610b73919061315d565b9050610b7e8761103e565b80610b8e5750610b8d8661103e565b5b15610ba857610b9e878787611fa2565b9350505050610c6a565b610bb061109f565b15610c1057600d5481610bc2886110f2565b610bcc9190613191565b1115610c0f57856040517ff6202a8f000000000000000000000000000000000000000000000000000000008152600401610c069190612ec1565b60405180910390fd5b5b60008314610c4657610c4587601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611fd1565b5b60008214610c5957610c5887836120a5565b5b610c64878783611fa2565b93505050505b9392505050565b610c79611c9a565b610c81611024565b610cb7576040517fc8a478a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101f4811115610cfe57806040517f4972030b000000000000000000000000000000000000000000000000000000008152600401610cf59190612de0565b60405180910390fd5b80601181905550807fbecc0e0d7b6ee2a84cc6c1fa34516080bae4e16237a95d21de2b304697a92d6860405160405180910390a250565b600e5481565b6000600754821115610d79576040517fc91fa8bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d8361210b565b90508083610d9191906131f4565b915050919050565b6000600f60000160079054906101000a900460ff16905090565b60125481565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610e10611d18565b9050610e31818585610e228589611782565b610e2c9190613191565b611d20565b600191505092915050565b610e44611c9a565b610e4c61100a565b610e82576040517f3990ac6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e8a61109f565b15610eea57600d5481610e9c846110f2565b610ea69190613191565b1115610ee957816040517ff6202a8f000000000000000000000000000000000000000000000000000000008152600401610ee09190612ec1565b60405180910390fd5b5b610ef2611809565b15610f4657600e5481610f03610b34565b610f0d9190613191565b1115610f45576040517f44ea8ea500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610f50828261212f565b5050565b610f5c611c9a565b610f6461118c565b610f9a576040517f6cb5913900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fa433826120a5565b50565b610faf611c9a565b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600f60000160009054906101000a900460ff16905090565b6000600f60000160059054906101000a900460ff16905090565b600080601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080915050919050565b60135481565b6000600f60000160039054906101000a900460ff16905090565b6040518060400160405280600981526020017f5241464c546f6b656e000000000000000000000000000000000000000000000081525081565b60007f00000000000000000000000000000000000000000000000000000000000000001561116957611162600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d3b565b9050611175565b61117282612195565b90505b919050565b611182611c9a565b61118a6121dd565b565b6000600f60000160019054906101000a900460ff16905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600f60000160069054906101000a900460ff16905090565b60606004805461121d906130fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611249906130fd565b80156112965780601f1061126b57610100808354040283529160200191611296565b820191906000526020600020905b81548152906001019060200180831161127957829003601f168201915b5050505050905090565b60095481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806112d5611d18565b905060006112e38286611782565b905083811015611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f90613297565b60405180910390fd5b6113358286868403611d20565b60019250505092915050565b611349611c9a565b6113516119d6565b611387576040517f70a43fce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c90816113969190613463565b507f4456a0b562609d67398ddb488f136db285cd3c92343e0a7ba684925669237ade816040516113c69190612cdb565b60405180910390a150565b6000806113de3384611ee9565b905060006113eb84611f74565b905060008183866113fc919061315d565b611406919061315d565b90506114113361103e565b8061142157506114208661103e565b5b1561143a5761143086866121f1565b93505050506114fb565b61144261109f565b156114a257600d5481611454886110f2565b61145e9190613191565b11156114a157856040517ff6202a8f0000000000000000000000000000000000000000000000000000000081526004016114989190612ec1565b60405180910390fd5b5b600083146114d8576114d733601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611fd1565b5b600082146114eb576114ea33836120a5565b5b6114f586826121f1565b93505050505b92915050565b600b805461150e906130fd565b80601f016020809104026020016040519081016040528092919081815260200182805461153a906130fd565b80156115875780601f1061155c57610100808354040283529160200191611587565b820191906000526020600020905b81548152906001019060200180831161156a57829003601f168201915b505050505081565b6000611599610b34565b905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f10f8c53b9d200f962270bc9b54f78fa99c99ee7cdfafa82dafef9f2a9b7f31fb60001b81565b600d5481565b6115f9611c9a565b6116016111f4565b611637576040517fcd9e529800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008160095460135461164a9190613191565b6116549190613191565b90506107d081111561169d57806040517f3e474e0d0000000000000000000000000000000000000000000000000000000081526004016116949190612de0565b60405180910390fd5b81601381905550817fc1ff65ee907dc079b64ed9913d53f4bd593bd6ebd9b2a2708db2916d49e17ec360405160405180910390a25050565b6116dd611c9a565b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561177f57601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600f60000160049054906101000a900460ff16905090565b60115481565b611831611c9a565b611839611024565b61186f576040517fc8a478a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60115481118061188057506101f481115b156118c257806040517fcb400e960000000000000000000000000000000000000000000000000000000081526004016118b99190612de0565b60405180910390fd5b6000816009546013546118d59190613191565b6118df9190613191565b90506107d081111561192857806040517f3e474e0d00000000000000000000000000000000000000000000000000000000815260040161191f9190612de0565b60405180910390fd5b61193183611bfe565b82601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601281905550818373ffffffffffffffffffffffffffffffffffffffff167facc44e32fd5ca4240f6dbe6e8cf4eb49349c17c5ce5f80f1919a9c97b50d398a60405160405180910390a3505050565b6119ca611c9a565b6119d381611c17565b50565b6000600f60000160029054906101000a900460ff16905090565b6119f8611c9a565b611a00610d99565b611a36576040517f800e34b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a3f81612214565b807f76e1296412dac7b50002658bf9aab02d0cfe366f373222d5c14d0168ee8199e360405160405180910390a250565b6040518060400160405280600881526020017f7261666c5f765f3100000000000000000000000000000000000000000000000081525081565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e90613581565b60405180910390fd5b611b2360008383612275565b8060026000828254611b359190613191565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611be69190612de0565b60405180910390a3611bfa6000838361227a565b5050565b8060601b611c145763d92e233d6000526004601cfd5b50565b611c1f611c9a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613613565b60405180910390fd5b611c978161227f565b50565b611ca2611d18565b73ffffffffffffffffffffffffffffffffffffffff16611cc06111a6565b73ffffffffffffffffffffffffffffffffffffffff1614611d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0d9061367f565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690613711565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df5906137a3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611edc9190612de0565b60405180910390a3505050565b60008060125414158015611f4b5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611f6e5761271060125483611f6191906137c3565b611f6b91906131f4565b90505b92915050565b60008060135414611f9d5761271060135483611f9091906137c3565b611f9a91906131f4565b90505b919050565b600080611fad611d18565b9050611fba858285612345565b611fc58585856123d1565b60019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000000015612094576000811461208f57600061200961210b565b90506000818361201991906137c3565b905061202785858384612464565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120849190612de0565b60405180910390a350505b6120a0565b61209f838383612614565b5b505050565b7f0000000000000000000000000000000000000000000000000000000000000000156120fd576040517f6cb5913900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107828261288a565b5050565b6000806000612118612a57565b91509150808261212891906131f4565b9250505090565b7f000000000000000000000000000000000000000000000000000000000000000015612187576040517f3990ac6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121918282611aa8565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6121e5611c9a565b6121ef600061227f565b565b6000806121fc611d18565b90506122098185856123d1565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000061226b576040517f800e34b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060098190555050565b505050565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006123518484611782565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123cb57818110156123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b490613851565b60405180910390fd5b6123ca8484848403611d20565b5b50505050565b7f0000000000000000000000000000000000000000000000000000000000000000156124535761240083611bfe565b61240982611bfe565b60008103612443576040517f76c4f5b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61244e838383612a6d565b61245f565b61245e838383612614565b5b505050565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156124f1578381846040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016124e893929190613871565b60405180910390fd5b82600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461253c919061315d565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ca9190613191565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a9061391a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e9906139ac565b60405180910390fd5b6126fd838383612275565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277a90613a3e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128719190612de0565b60405180910390a361288484848461227a565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090613ad0565b60405180910390fd5b61290582600083612275565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561298b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298290613b62565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a3e9190612de0565b60405180910390a3612a528360008461227a565b505050565b600080600754612a6561158f565b915091509091565b6000612a7882612b2e565b905060008183612a88919061315d565b90506000806000612a9a868686612b52565b92509250925060008614612b2457612ab488888584612464565b612abe8286612ba8565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051612b1b9190612de0565b60405180910390a35b5050505050505050565b600061271060095483612b4191906137c3565b612b4b91906131f4565b9050919050565b600080600080612b6061210b565b905060008188612b7091906137c3565b905060008288612b8091906137c3565b905060008388612b9091906137c3565b90508282829650965096505050505093509350939050565b81600754612bb6919061315d565b60078190555080600854612bca9190613191565b6008819055505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612bfb81612be8565b8114612c0657600080fd5b50565b600081359050612c1881612bf2565b92915050565b600060208284031215612c3457612c33612bde565b5b6000612c4284828501612c09565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c85578082015181840152602081019050612c6a565b60008484015250505050565b6000601f19601f8301169050919050565b6000612cad82612c4b565b612cb78185612c56565b9350612cc7818560208601612c67565b612cd081612c91565b840191505092915050565b60006020820190508181036000830152612cf58184612ca2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d2882612cfd565b9050919050565b612d3881612d1d565b8114612d4357600080fd5b50565b600081359050612d5581612d2f565b92915050565b60008060408385031215612d7257612d71612bde565b5b6000612d8085828601612d46565b9250506020612d9185828601612c09565b9150509250929050565b60008115159050919050565b612db081612d9b565b82525050565b6000602082019050612dcb6000830184612da7565b92915050565b612dda81612be8565b82525050565b6000602082019050612df56000830184612dd1565b92915050565b600080600060608486031215612e1457612e13612bde565b5b6000612e2286828701612d46565b9350506020612e3386828701612d46565b9250506040612e4486828701612c09565b9150509250925092565b600060ff82169050919050565b612e6481612e4e565b82525050565b6000602082019050612e7f6000830184612e5b565b92915050565b600060208284031215612e9b57612e9a612bde565b5b6000612ea984828501612d46565b91505092915050565b612ebb81612d1d565b82525050565b6000602082019050612ed66000830184612eb2565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f1e82612c91565b810181811067ffffffffffffffff82111715612f3d57612f3c612ee6565b5b80604052505050565b6000612f50612bd4565b9050612f5c8282612f15565b919050565b600067ffffffffffffffff821115612f7c57612f7b612ee6565b5b612f8582612c91565b9050602081019050919050565b82818337600083830152505050565b6000612fb4612faf84612f61565b612f46565b905082815260208101848484011115612fd057612fcf612ee1565b5b612fdb848285612f92565b509392505050565b600082601f830112612ff857612ff7612edc565b5b8135613008848260208601612fa1565b91505092915050565b60006020828403121561302757613026612bde565b5b600082013567ffffffffffffffff81111561304557613044612be3565b5b61305184828501612fe3565b91505092915050565b6000819050919050565b61306d8161305a565b82525050565b60006020820190506130886000830184613064565b92915050565b600080604083850312156130a5576130a4612bde565b5b60006130b385828601612d46565b92505060206130c485828601612d46565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061311557607f821691505b602082108103613128576131276130ce565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061316882612be8565b915061317383612be8565b925082820390508181111561318b5761318a61312e565b5b92915050565b600061319c82612be8565b91506131a783612be8565b92508282019050808211156131bf576131be61312e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131ff82612be8565b915061320a83612be8565b92508261321a576132196131c5565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613281602583612c56565b915061328c82613225565b604082019050919050565b600060208201905081810360008301526132b081613274565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026133197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826132dc565b61332386836132dc565b95508019841693508086168417925050509392505050565b6000819050919050565b600061336061335b61335684612be8565b61333b565b612be8565b9050919050565b6000819050919050565b61337a83613345565b61338e61338682613367565b8484546132e9565b825550505050565b600090565b6133a3613396565b6133ae818484613371565b505050565b5b818110156133d2576133c760008261339b565b6001810190506133b4565b5050565b601f821115613417576133e8816132b7565b6133f1846132cc565b81016020851015613400578190505b61341461340c856132cc565b8301826133b3565b50505b505050565b600082821c905092915050565b600061343a6000198460080261341c565b1980831691505092915050565b60006134538383613429565b9150826002028217905092915050565b61346c82612c4b565b67ffffffffffffffff81111561348557613484612ee6565b5b61348f82546130fd565b61349a8282856133d6565b600060209050601f8311600181146134cd57600084156134bb578287015190505b6134c58582613447565b86555061352d565b601f1984166134db866132b7565b60005b82811015613503578489015182556001820191506020850194506020810190506134de565b86831015613520578489015161351c601f891682613429565b8355505b6001600288020188555050505b505050505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061356b601f83612c56565b915061357682613535565b602082019050919050565b6000602082019050818103600083015261359a8161355e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135fd602683612c56565b9150613608826135a1565b604082019050919050565b6000602082019050818103600083015261362c816135f0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613669602083612c56565b915061367482613633565b602082019050919050565b600060208201905081810360008301526136988161365c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006136fb602483612c56565b91506137068261369f565b604082019050919050565b6000602082019050818103600083015261372a816136ee565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061378d602283612c56565b915061379882613731565b604082019050919050565b600060208201905081810360008301526137bc81613780565b9050919050565b60006137ce82612be8565b91506137d983612be8565b92508282026137e781612be8565b915082820484148315176137fe576137fd61312e565b5b5092915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061383b601d83612c56565b915061384682613805565b602082019050919050565b6000602082019050818103600083015261386a8161382e565b9050919050565b60006060820190506138866000830186612eb2565b6138936020830185612dd1565b6138a06040830184612dd1565b949350505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613904602583612c56565b915061390f826138a8565b604082019050919050565b60006020820190508181036000830152613933816138f7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613996602383612c56565b91506139a18261393a565b604082019050919050565b600060208201905081810360008301526139c581613989565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613a28602683612c56565b9150613a33826139cc565b604082019050919050565b60006020820190508181036000830152613a5781613a1b565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613aba602183612c56565b9150613ac582613a5e565b604082019050919050565b60006020820190508181036000830152613ae981613aad565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b4c602283612c56565b9150613b5782613af0565b604082019050919050565b60006020820190508181036000830152613b7b81613b3f565b905091905056fea2646970667358221220653b556219ce1aed90c2f03ee5c1f4f1ff13263510f455eff129fa16fa2c176f64736f6c63430008110033000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000ff8010dcaa8b11b3d2882563d84aa3530c7852e5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000fa2a815ff6e13a016de69a2ae9164436b4dc787400000000000000000000000000000000000000000000000000000000000000fa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241464c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241464c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f68747470733a2f2f7261666c2e636f0000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102d65760003560e01c8063883356d911610182578063b7bda68f116100e9578063de0060ca116100a2578063f2fde38b1161007c578063f2fde38b146108bb578063f820f567146108d7578063f91f825d146108f5578063ffa1ad7414610911576102d6565b8063de0060ca14610863578063e338083d14610881578063f19c4e3b1461089f576102d6565b8063b7bda68f146107a1578063bfcf7355146107bf578063d48e4127146107dd578063d8f67851146107fb578063dcb7e5d614610817578063dd62ed3e14610833576102d6565b8063a32f69761161013b578063a32f6976146106cb578063a457c2d7146106e9578063a476df6114610719578063a9059cbb14610735578063a9d8668514610765578063af465a2714610783576102d6565b8063883356d9146106175780638da5cb5b146106355780638dac7191146106535780638e8c10a21461067157806395d89b411461068f5780639703a19d146106ad576102d6565b8063378dc3dc116102415780634ac0bc32116101fa5780635a3990ce116101d45780635a3990ce146105a1578063614d08f8146105bf57806370a08231146105dd578063715018a61461060d576102d6565b80634ac0bc32146105355780635342acb414610553578063542e966714610583576102d6565b8063378dc3dc14610475578063395093511461049357806340c10f19146104c357806342966c68146104df578063437823ec146104fb57806346b45af714610517576102d6565b806328bc35c11161029357806328bc35c1146103b15780632ab4d052146103cd5780632d838119146103eb5780632e0ee48e1461041b5780632fa782eb14610439578063313ce56714610457576102d6565b806302252c4d146102db578063044ab74e146102f757806306fdde0314610315578063095ea7b31461033357806318160ddd1461036357806323b872dd14610381575b600080fd5b6102f560048036038101906102f09190612c1e565b61092f565b005b6102ff6109f1565b60405161030c9190612cdb565b60405180910390f35b61031d610a7f565b60405161032a9190612cdb565b60405180910390f35b61034d60048036038101906103489190612d5b565b610b11565b60405161035a9190612db6565b60405180910390f35b61036b610b34565b6040516103789190612de0565b60405180910390f35b61039b60048036038101906103969190612dfb565b610b3e565b6040516103a89190612db6565b60405180910390f35b6103cb60048036038101906103c69190612c1e565b610c71565b005b6103d5610d35565b6040516103e29190612de0565b60405180910390f35b61040560048036038101906104009190612c1e565b610d3b565b6040516104129190612de0565b60405180910390f35b610423610d99565b6040516104309190612db6565b60405180910390f35b610441610db3565b60405161044e9190612de0565b60405180910390f35b61045f610db9565b60405161046c9190612e6a565b60405180910390f35b61047d610de1565b60405161048a9190612de0565b60405180910390f35b6104ad60048036038101906104a89190612d5b565b610e05565b6040516104ba9190612db6565b60405180910390f35b6104dd60048036038101906104d89190612d5b565b610e3c565b005b6104f960048036038101906104f49190612c1e565b610f54565b005b61051560048036038101906105109190612e85565b610fa7565b005b61051f61100a565b60405161052c9190612db6565b60405180910390f35b61053d611024565b60405161054a9190612db6565b60405180910390f35b61056d60048036038101906105689190612e85565b61103e565b60405161057a9190612db6565b60405180910390f35b61058b611099565b6040516105989190612de0565b60405180910390f35b6105a961109f565b6040516105b69190612db6565b60405180910390f35b6105c76110b9565b6040516105d49190612cdb565b60405180910390f35b6105f760048036038101906105f29190612e85565b6110f2565b6040516106049190612de0565b60405180910390f35b61061561117a565b005b61061f61118c565b60405161062c9190612db6565b60405180910390f35b61063d6111a6565b60405161064a9190612ec1565b60405180910390f35b61065b6111d0565b6040516106689190612ec1565b60405180910390f35b6106796111f4565b6040516106869190612db6565b60405180910390f35b61069761120e565b6040516106a49190612cdb565b60405180910390f35b6106b56112a0565b6040516106c29190612de0565b60405180910390f35b6106d36112a6565b6040516106e09190612de0565b60405180910390f35b61070360048036038101906106fe9190612d5b565b6112ca565b6040516107109190612db6565b60405180910390f35b610733600480360381019061072e9190613011565b611341565b005b61074f600480360381019061074a9190612d5b565b6113d1565b60405161075c9190612db6565b60405180910390f35b61076d611501565b60405161077a9190612cdb565b60405180910390f35b61078b61158f565b6040516107989190612de0565b60405180910390f35b6107a961159e565b6040516107b69190612ec1565b60405180910390f35b6107c76115c4565b6040516107d49190613073565b60405180910390f35b6107e56115eb565b6040516107f29190612de0565b60405180910390f35b61081560048036038101906108109190612c1e565b6115f1565b005b610831600480360381019061082c9190612e85565b6116d5565b005b61084d6004803603810190610848919061308e565b611782565b60405161085a9190612de0565b60405180910390f35b61086b611809565b6040516108789190612db6565b60405180910390f35b610889611823565b6040516108969190612de0565b60405180910390f35b6108b960048036038101906108b49190612d5b565b611829565b005b6108d560048036038101906108d09190612e85565b6119c2565b005b6108df6119d6565b6040516108ec9190612db6565b60405180910390f35b61090f600480360381019061090a9190612c1e565b6119f0565b005b610919611a6f565b6040516109269190612cdb565b60405180910390f35b610937611c9a565b61093f61109f565b610975576040517f6273340f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d5481116109b0576040517fa43d2d7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d819055507f2905481c6fd1a037492016c4760435a52203d82a6f34dc3de40f464c1bf42d59816040516109e69190612de0565b60405180910390a150565b600c80546109fe906130fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a906130fd565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b505050505081565b606060038054610a8e906130fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba906130fd565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b5050505050905090565b600080610b1c611d18565b9050610b29818585611d20565b600191505092915050565b6000600254905090565b600080610b4b8584611ee9565b90506000610b5884611f74565b90506000818386610b69919061315d565b610b73919061315d565b9050610b7e8761103e565b80610b8e5750610b8d8661103e565b5b15610ba857610b9e878787611fa2565b9350505050610c6a565b610bb061109f565b15610c1057600d5481610bc2886110f2565b610bcc9190613191565b1115610c0f57856040517ff6202a8f000000000000000000000000000000000000000000000000000000008152600401610c069190612ec1565b60405180910390fd5b5b60008314610c4657610c4587601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611fd1565b5b60008214610c5957610c5887836120a5565b5b610c64878783611fa2565b93505050505b9392505050565b610c79611c9a565b610c81611024565b610cb7576040517fc8a478a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101f4811115610cfe57806040517f4972030b000000000000000000000000000000000000000000000000000000008152600401610cf59190612de0565b60405180910390fd5b80601181905550807fbecc0e0d7b6ee2a84cc6c1fa34516080bae4e16237a95d21de2b304697a92d6860405160405180910390a250565b600e5481565b6000600754821115610d79576040517fc91fa8bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d8361210b565b90508083610d9191906131f4565b915050919050565b6000600f60000160079054906101000a900460ff16905090565b60125481565b60007f0000000000000000000000000000000000000000000000000000000000000008905090565b7f000000000000000000000000000000000000000000000000000000003b9aca0081565b600080610e10611d18565b9050610e31818585610e228589611782565b610e2c9190613191565b611d20565b600191505092915050565b610e44611c9a565b610e4c61100a565b610e82576040517f3990ac6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e8a61109f565b15610eea57600d5481610e9c846110f2565b610ea69190613191565b1115610ee957816040517ff6202a8f000000000000000000000000000000000000000000000000000000008152600401610ee09190612ec1565b60405180910390fd5b5b610ef2611809565b15610f4657600e5481610f03610b34565b610f0d9190613191565b1115610f45576040517f44ea8ea500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610f50828261212f565b5050565b610f5c611c9a565b610f6461118c565b610f9a576040517f6cb5913900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fa433826120a5565b50565b610faf611c9a565b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600f60000160009054906101000a900460ff16905090565b6000600f60000160059054906101000a900460ff16905090565b600080601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080915050919050565b60135481565b6000600f60000160039054906101000a900460ff16905090565b6040518060400160405280600981526020017f5241464c546f6b656e000000000000000000000000000000000000000000000081525081565b60007f00000000000000000000000000000000000000000000000000000000000000001561116957611162600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d3b565b9050611175565b61117282612195565b90505b919050565b611182611c9a565b61118a6121dd565b565b6000600f60000160019054906101000a900460ff16905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000ff8010dcaa8b11b3d2882563d84aa3530c7852e581565b6000600f60000160069054906101000a900460ff16905090565b60606004805461121d906130fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611249906130fd565b80156112965780601f1061126b57610100808354040283529160200191611296565b820191906000526020600020905b81548152906001019060200180831161127957829003601f168201915b5050505050905090565b60095481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806112d5611d18565b905060006112e38286611782565b905083811015611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f90613297565b60405180910390fd5b6113358286868403611d20565b60019250505092915050565b611349611c9a565b6113516119d6565b611387576040517f70a43fce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c90816113969190613463565b507f4456a0b562609d67398ddb488f136db285cd3c92343e0a7ba684925669237ade816040516113c69190612cdb565b60405180910390a150565b6000806113de3384611ee9565b905060006113eb84611f74565b905060008183866113fc919061315d565b611406919061315d565b90506114113361103e565b8061142157506114208661103e565b5b1561143a5761143086866121f1565b93505050506114fb565b61144261109f565b156114a257600d5481611454886110f2565b61145e9190613191565b11156114a157856040517ff6202a8f0000000000000000000000000000000000000000000000000000000081526004016114989190612ec1565b60405180910390fd5b5b600083146114d8576114d733601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611fd1565b5b600082146114eb576114ea33836120a5565b5b6114f586826121f1565b93505050505b92915050565b600b805461150e906130fd565b80601f016020809104026020016040519081016040528092919081815260200182805461153a906130fd565b80156115875780601f1061155c57610100808354040283529160200191611587565b820191906000526020600020905b81548152906001019060200180831161156a57829003601f168201915b505050505081565b6000611599610b34565b905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f10f8c53b9d200f962270bc9b54f78fa99c99ee7cdfafa82dafef9f2a9b7f31fb60001b81565b600d5481565b6115f9611c9a565b6116016111f4565b611637576040517fcd9e529800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008160095460135461164a9190613191565b6116549190613191565b90506107d081111561169d57806040517f3e474e0d0000000000000000000000000000000000000000000000000000000081526004016116949190612de0565b60405180910390fd5b81601381905550817fc1ff65ee907dc079b64ed9913d53f4bd593bd6ebd9b2a2708db2916d49e17ec360405160405180910390a25050565b6116dd611c9a565b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561177f57601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600f60000160049054906101000a900460ff16905090565b60115481565b611831611c9a565b611839611024565b61186f576040517fc8a478a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60115481118061188057506101f481115b156118c257806040517fcb400e960000000000000000000000000000000000000000000000000000000081526004016118b99190612de0565b60405180910390fd5b6000816009546013546118d59190613191565b6118df9190613191565b90506107d081111561192857806040517f3e474e0d00000000000000000000000000000000000000000000000000000000815260040161191f9190612de0565b60405180910390fd5b61193183611bfe565b82601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601281905550818373ffffffffffffffffffffffffffffffffffffffff167facc44e32fd5ca4240f6dbe6e8cf4eb49349c17c5ce5f80f1919a9c97b50d398a60405160405180910390a3505050565b6119ca611c9a565b6119d381611c17565b50565b6000600f60000160029054906101000a900460ff16905090565b6119f8611c9a565b611a00610d99565b611a36576040517f800e34b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a3f81612214565b807f76e1296412dac7b50002658bf9aab02d0cfe366f373222d5c14d0168ee8199e360405160405180910390a250565b6040518060400160405280600881526020017f7261666c5f765f3100000000000000000000000000000000000000000000000081525081565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e90613581565b60405180910390fd5b611b2360008383612275565b8060026000828254611b359190613191565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611be69190612de0565b60405180910390a3611bfa6000838361227a565b5050565b8060601b611c145763d92e233d6000526004601cfd5b50565b611c1f611c9a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613613565b60405180910390fd5b611c978161227f565b50565b611ca2611d18565b73ffffffffffffffffffffffffffffffffffffffff16611cc06111a6565b73ffffffffffffffffffffffffffffffffffffffff1614611d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0d9061367f565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690613711565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df5906137a3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611edc9190612de0565b60405180910390a3505050565b60008060125414158015611f4b5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611f6e5761271060125483611f6191906137c3565b611f6b91906131f4565b90505b92915050565b60008060135414611f9d5761271060135483611f9091906137c3565b611f9a91906131f4565b90505b919050565b600080611fad611d18565b9050611fba858285612345565b611fc58585856123d1565b60019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000000015612094576000811461208f57600061200961210b565b90506000818361201991906137c3565b905061202785858384612464565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120849190612de0565b60405180910390a350505b6120a0565b61209f838383612614565b5b505050565b7f0000000000000000000000000000000000000000000000000000000000000000156120fd576040517f6cb5913900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107828261288a565b5050565b6000806000612118612a57565b91509150808261212891906131f4565b9250505090565b7f000000000000000000000000000000000000000000000000000000000000000015612187576040517f3990ac6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121918282611aa8565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6121e5611c9a565b6121ef600061227f565b565b6000806121fc611d18565b90506122098185856123d1565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000061226b576040517f800e34b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060098190555050565b505050565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006123518484611782565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123cb57818110156123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b490613851565b60405180910390fd5b6123ca8484848403611d20565b5b50505050565b7f0000000000000000000000000000000000000000000000000000000000000000156124535761240083611bfe565b61240982611bfe565b60008103612443576040517f76c4f5b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61244e838383612a6d565b61245f565b61245e838383612614565b5b505050565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156124f1578381846040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016124e893929190613871565b60405180910390fd5b82600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461253c919061315d565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ca9190613191565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a9061391a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e9906139ac565b60405180910390fd5b6126fd838383612275565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277a90613a3e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128719190612de0565b60405180910390a361288484848461227a565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090613ad0565b60405180910390fd5b61290582600083612275565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561298b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298290613b62565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a3e9190612de0565b60405180910390a3612a528360008461227a565b505050565b600080600754612a6561158f565b915091509091565b6000612a7882612b2e565b905060008183612a88919061315d565b90506000806000612a9a868686612b52565b92509250925060008614612b2457612ab488888584612464565b612abe8286612ba8565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051612b1b9190612de0565b60405180910390a35b5050505050505050565b600061271060095483612b4191906137c3565b612b4b91906131f4565b9050919050565b600080600080612b6061210b565b905060008188612b7091906137c3565b905060008288612b8091906137c3565b905060008388612b9091906137c3565b90508282829650965096505050505093509350939050565b81600754612bb6919061315d565b60078190555080600854612bca9190613191565b6008819055505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612bfb81612be8565b8114612c0657600080fd5b50565b600081359050612c1881612bf2565b92915050565b600060208284031215612c3457612c33612bde565b5b6000612c4284828501612c09565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c85578082015181840152602081019050612c6a565b60008484015250505050565b6000601f19601f8301169050919050565b6000612cad82612c4b565b612cb78185612c56565b9350612cc7818560208601612c67565b612cd081612c91565b840191505092915050565b60006020820190508181036000830152612cf58184612ca2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d2882612cfd565b9050919050565b612d3881612d1d565b8114612d4357600080fd5b50565b600081359050612d5581612d2f565b92915050565b60008060408385031215612d7257612d71612bde565b5b6000612d8085828601612d46565b9250506020612d9185828601612c09565b9150509250929050565b60008115159050919050565b612db081612d9b565b82525050565b6000602082019050612dcb6000830184612da7565b92915050565b612dda81612be8565b82525050565b6000602082019050612df56000830184612dd1565b92915050565b600080600060608486031215612e1457612e13612bde565b5b6000612e2286828701612d46565b9350506020612e3386828701612d46565b9250506040612e4486828701612c09565b9150509250925092565b600060ff82169050919050565b612e6481612e4e565b82525050565b6000602082019050612e7f6000830184612e5b565b92915050565b600060208284031215612e9b57612e9a612bde565b5b6000612ea984828501612d46565b91505092915050565b612ebb81612d1d565b82525050565b6000602082019050612ed66000830184612eb2565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f1e82612c91565b810181811067ffffffffffffffff82111715612f3d57612f3c612ee6565b5b80604052505050565b6000612f50612bd4565b9050612f5c8282612f15565b919050565b600067ffffffffffffffff821115612f7c57612f7b612ee6565b5b612f8582612c91565b9050602081019050919050565b82818337600083830152505050565b6000612fb4612faf84612f61565b612f46565b905082815260208101848484011115612fd057612fcf612ee1565b5b612fdb848285612f92565b509392505050565b600082601f830112612ff857612ff7612edc565b5b8135613008848260208601612fa1565b91505092915050565b60006020828403121561302757613026612bde565b5b600082013567ffffffffffffffff81111561304557613044612be3565b5b61305184828501612fe3565b91505092915050565b6000819050919050565b61306d8161305a565b82525050565b60006020820190506130886000830184613064565b92915050565b600080604083850312156130a5576130a4612bde565b5b60006130b385828601612d46565b92505060206130c485828601612d46565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061311557607f821691505b602082108103613128576131276130ce565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061316882612be8565b915061317383612be8565b925082820390508181111561318b5761318a61312e565b5b92915050565b600061319c82612be8565b91506131a783612be8565b92508282019050808211156131bf576131be61312e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131ff82612be8565b915061320a83612be8565b92508261321a576132196131c5565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613281602583612c56565b915061328c82613225565b604082019050919050565b600060208201905081810360008301526132b081613274565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026133197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826132dc565b61332386836132dc565b95508019841693508086168417925050509392505050565b6000819050919050565b600061336061335b61335684612be8565b61333b565b612be8565b9050919050565b6000819050919050565b61337a83613345565b61338e61338682613367565b8484546132e9565b825550505050565b600090565b6133a3613396565b6133ae818484613371565b505050565b5b818110156133d2576133c760008261339b565b6001810190506133b4565b5050565b601f821115613417576133e8816132b7565b6133f1846132cc565b81016020851015613400578190505b61341461340c856132cc565b8301826133b3565b50505b505050565b600082821c905092915050565b600061343a6000198460080261341c565b1980831691505092915050565b60006134538383613429565b9150826002028217905092915050565b61346c82612c4b565b67ffffffffffffffff81111561348557613484612ee6565b5b61348f82546130fd565b61349a8282856133d6565b600060209050601f8311600181146134cd57600084156134bb578287015190505b6134c58582613447565b86555061352d565b601f1984166134db866132b7565b60005b82811015613503578489015182556001820191506020850194506020810190506134de565b86831015613520578489015161351c601f891682613429565b8355505b6001600288020188555050505b505050505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061356b601f83612c56565b915061357682613535565b602082019050919050565b6000602082019050818103600083015261359a8161355e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135fd602683612c56565b9150613608826135a1565b604082019050919050565b6000602082019050818103600083015261362c816135f0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613669602083612c56565b915061367482613633565b602082019050919050565b600060208201905081810360008301526136988161365c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006136fb602483612c56565b91506137068261369f565b604082019050919050565b6000602082019050818103600083015261372a816136ee565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061378d602283612c56565b915061379882613731565b604082019050919050565b600060208201905081810360008301526137bc81613780565b9050919050565b60006137ce82612be8565b91506137d983612be8565b92508282026137e781612be8565b915082820484148315176137fe576137fd61312e565b5b5092915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061383b601d83612c56565b915061384682613805565b602082019050919050565b6000602082019050818103600083015261386a8161382e565b9050919050565b60006060820190506138866000830186612eb2565b6138936020830185612dd1565b6138a06040830184612dd1565b949350505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613904602583612c56565b915061390f826138a8565b604082019050919050565b60006020820190508181036000830152613933816138f7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613996602383612c56565b91506139a18261393a565b604082019050919050565b600060208201905081810360008301526139c581613989565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613a28602683612c56565b9150613a33826139cc565b604082019050919050565b60006020820190508181036000830152613a5781613a1b565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613aba602183612c56565b9150613ac582613a5e565b604082019050919050565b60006020820190508181036000830152613ae981613aad565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b4c602283612c56565b9150613b5782613af0565b604082019050919050565b60006020820190508181036000830152613b7b81613b3f565b905091905056fea2646970667358221220653b556219ce1aed90c2f03ee5c1f4f1ff13263510f455eff129fa16fa2c176f64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000ff8010dcaa8b11b3d2882563d84aa3530c7852e5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000fa2a815ff6e13a016de69a2ae9164436b4dc787400000000000000000000000000000000000000000000000000000000000000fa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241464c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241464c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f68747470733a2f2f7261666c2e636f0000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): RAFL
Arg [1] : symbol_ (string): RAFL
Arg [2] : initialSupplyToSet (uint256): 1000000000
Arg [3] : decimalsToSet (uint8): 8
Arg [4] : tokenOwner (address): 0xfF8010DCaA8b11B3d2882563D84aA3530c7852E5
Arg [5] : customConfigProps (tuple):
Arg [1] : _isMintable (bool): False
Arg [2] : _isBurnable (bool): True
Arg [3] : _isDocumentAllowed (bool): True
Arg [4] : _isMaxAmountOfTokensSet (bool): False
Arg [5] : _isMaxSupplySet (bool): False
Arg [6] : _isTaxable (bool): True
Arg [7] : _isDeflationary (bool): False
Arg [8] : _isReflective (bool): False
Arg [6] : newDocumentUri (string): https://rafl.co
Arg [7] : _taxAddress (address): 0xFA2A815fF6e13A016DE69a2Ae9164436B4dC7874
Arg [8] : bpsParams (uint256[3]): 250,0,0
Arg [9] : amountParams (uint256[2]): 0,0
-----Encoded View---------------
26 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [1] : 00000000000000000000000000000000000000000000000000000000000002c0
Arg [2] : 000000000000000000000000000000000000000000000000000000003b9aca00
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [4] : 000000000000000000000000ff8010dcaa8b11b3d2882563d84aa3530c7852e5
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000300
Arg [14] : 000000000000000000000000fa2a815ff6e13a016de69a2ae9164436b4dc7874
Arg [15] : 00000000000000000000000000000000000000000000000000000000000000fa
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [21] : 5241464c00000000000000000000000000000000000000000000000000000000
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [23] : 5241464c00000000000000000000000000000000000000000000000000000000
Arg [24] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [25] : 68747470733a2f2f7261666c2e636f0000000000000000000000000000000000
Deployed Bytecode Sourcemap
34241:17198:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43669:404;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34786:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10910:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13270:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12039:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47959:922;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44612:352;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34964:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27217:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42995:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35637:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42327:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34816:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14721:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49118:487;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49794:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40496:129;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41193:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42535:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40899:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35663:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41633:116;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34559:50;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24060:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50119:93;;;:::i;:::-;;41385:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32553:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35493:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42750:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11129:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22482:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34859:56;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15462:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43240:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46665:903;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34749:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22930:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35578:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34614:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34920:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45973:384;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40666:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12799:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41887:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35608:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45179:622;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50390:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42109:109;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44230:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34511:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43669:404;32439:13;:11;:13::i;:::-;43774:24:::1;:22;:24::i;:::-;43769:81;;43816:26;;;;;;;;;;;;;;43769:81;43881:24;;43860:17;:45;43856:108;;43923:33;;;;;;;;;;;;;;43856:108;43999:17;43972:24;:44;;;;44028:39;44049:17;44028:39;;;;;;:::i;:::-;;;;;;;;43669:404:::0;:::o;34786:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10910:100::-;10964:13;10997:5;10990:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10910:100;:::o;13270:201::-;13353:4;13370:13;13386:12;:10;:12::i;:::-;13370:28;;13409:32;13418:5;13425:7;13434:6;13409:8;:32::i;:::-;13459:4;13452:11;;;13270:201;;;;:::o;12039:108::-;12100:7;12127:12;;12120:19;;12039:108;:::o;47959:922::-;48076:4;48089:17;48109:24;48120:4;48126:6;48109:10;:24::i;:::-;48089:44;;48140:23;48166:24;48183:6;48166:16;:24::i;:::-;48140:50;;48197:24;48245:15;48233:9;48224:6;:18;;;;:::i;:::-;:36;;;;:::i;:::-;48197:63;;48347:23;48365:4;48347:17;:23::i;:::-;:48;;;;48374:21;48392:2;48374:17;:21::i;:::-;48347:48;48342:116;;;48414:36;48433:4;48439:2;48443:6;48414:18;:36::i;:::-;48407:43;;;;;;;48342:116;48470:24;:22;:24::i;:::-;48466:171;;;48544:24;;48525:16;48509:13;48519:2;48509:9;:13::i;:::-;:32;;;;:::i;:::-;:59;48505:125;;;48617:2;48588:32;;;;;;;;;;;:::i;:::-;;;;;;;;48505:125;48466:171;48662:1;48649:9;:14;48645:90;;48674:53;48699:4;48705:10;;;;;;;;;;;48717:9;48674:24;:53::i;:::-;48645:90;48766:1;48747:15;:20;48743:71;;48778:28;48784:4;48790:15;48778:5;:28::i;:::-;48743:71;48829:46;48848:4;48854:2;48858:16;48829:18;:46::i;:::-;48822:53;;;;;47959:922;;;;;;:::o;44612:352::-;32439:13;:11;:13::i;:::-;44692:11:::1;:9;:11::i;:::-;44687:61;;44721:19;;;;;;;;;;;;;;44687:61;34438:3;44812:10;:28;44807:88;;;44876:10;44859:28;;;;;;;;;;;:::i;:::-;;;;;;;;44807:88;44915:10;44903:9;:22;;;;44947:10;44937:21;;;;;;;;;;44612:352:::0;:::o;34964:29::-;;;;:::o;27217:236::-;27284:7;27314;;27304;:17;27300:72;;;27339:25;;;;;;;;;;;;;;27300:72;27380:19;27402:10;:8;:10::i;:::-;27380:32;;27436:11;27426:7;:21;;;;:::i;:::-;27419:28;;;27217:236;;;:::o;42995:96::-;43040:4;43060:11;:25;;;;;;;;;;;;43053:32;;42995:96;:::o;35637:21::-;;;;:::o;42327:94::-;42385:5;42406:9;42399:16;;42327:94;:::o;34816:38::-;;;:::o;14721:238::-;14809:4;14826:13;14842:12;:10;:12::i;:::-;14826:28;;14865:64;14874:5;14881:7;14918:10;14890:25;14900:5;14907:7;14890:9;:25::i;:::-;:38;;;;:::i;:::-;14865:8;:64::i;:::-;14947:4;14940:11;;;14721:238;;;;:::o;49118:487::-;32439:13;:11;:13::i;:::-;49191:12:::1;:10;:12::i;:::-;49186:62;;49221:19;;;;;;;;;;;;;;49186:62;49258:24;:22;:24::i;:::-;49254:161;;;49322:24;;49313:6;49297:13;49307:2;49297:9;:13::i;:::-;:22;;;;:::i;:::-;:49;49293:115;;;49395:2;49366:32;;;;;;;;;;;:::i;:::-;;;;;;;;49293:115;49254:161;49425:16;:14;:16::i;:::-;49421:147;;;49481:14;;49472:6;49456:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:39;49452:109;;;49515:36;;;;;;;;;;;;;;49452:109;49421:147;49576:23;49588:2;49592:6;49576:11;:23::i;:::-;49118:487:::0;;:::o;49794:155::-;32439:13;:11;:13::i;:::-;49855:12:::1;:10;:12::i;:::-;49850:62;;49885:19;;;;;;;;;;;;;;49850:62;49918:25;49924:10;49936:6;49918:5;:25::i;:::-;49794:155:::0;:::o;40496:129::-;32439:13;:11;:13::i;:::-;40615:4:::1;40575:16;:37;40592:19;40575:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;40496:129:::0;:::o;41193:92::-;41236:4;41256:11;:23;;;;;;;;;;;;41249:30;;41193:92;:::o;42535:90::-;42577:4;42597:11;:22;;;;;;;;;;;;42590:29;;42535:90;:::o;40899:192::-;40975:4;40988:24;41015:16;:37;41032:19;41015:37;;;;;;;;;;;;;;;;;;;;;;;;;40988:64;;41066:19;41059:26;;;40899:192;;;:::o;35663:27::-;;;;:::o;41633:116::-;41688:4;41708:11;:35;;;;;;;;;;;;41701:42;;41633:116;:::o;34559:50::-;;;;;;;;;;;;;;;;;;;:::o;24060:220::-;24126:7;24146:12;24142:133;;;24176:37;24196:7;:16;24204:7;24196:16;;;;;;;;;;;;;;;;24176:19;:37::i;:::-;24169:44;;;;24142:133;24243:24;24259:7;24243:15;:24::i;:::-;24236:31;;24060:220;;;;:::o;50119:93::-;32439:13;:11;:13::i;:::-;50181:25:::1;:23;:25::i;:::-;50119:93::o:0;41385:92::-;41428:4;41448:11;:23;;;;;;;;;;;;41441:30;;41385:92;:::o;32553:87::-;32599:7;32626:6;;;;;;;;;;;32619:13;;32553:87;:::o;35493:42::-;;;:::o;42750:100::-;42797:4;42817:11;:27;;;;;;;;;;;;42810:34;;42750:100;:::o;11129:104::-;11185:13;11218:7;11211:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11129:104;:::o;22482:22::-;;;;:::o;34859:56::-;;;:::o;15462:436::-;15555:4;15572:13;15588:12;:10;:12::i;:::-;15572:28;;15611:24;15638:25;15648:5;15655:7;15638:9;:25::i;:::-;15611:52;;15702:15;15682:16;:35;;15674:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15795:60;15804:5;15811:7;15839:15;15820:16;:34;15795:8;:60::i;:::-;15886:4;15879:11;;;;15462:436;;;;:::o;43240:238::-;32439:13;:11;:13::i;:::-;43325:22:::1;:20;:22::i;:::-;43320:76;;43365:23;;;;;;;;;;;;;;43320:76;43416:14;43402:11;:28;;;;;;:::i;:::-;;43442:30;43457:14;43442:30;;;;;;:::i;:::-;;;;;;;;43240:238:::0;:::o;46665:903::-;46759:4;46772:17;46792:30;46803:10;46815:6;46792:10;:30::i;:::-;46772:50;;46829:23;46855:24;46872:6;46855:16;:24::i;:::-;46829:50;;46886:24;46934:15;46922:9;46913:6;:18;;;;:::i;:::-;:36;;;;:::i;:::-;46886:63;;47036:29;47054:10;47036:17;:29::i;:::-;:54;;;;47069:21;47087:2;47069:17;:21::i;:::-;47036:54;47031:112;;;47109:26;47124:2;47128:6;47109:14;:26::i;:::-;47102:33;;;;;;;47031:112;47155:24;:22;:24::i;:::-;47151:171;;;47229:24;;47210:16;47194:13;47204:2;47194:9;:13::i;:::-;:32;;;;:::i;:::-;:59;47190:125;;;47302:2;47273:32;;;;;;;;;;;:::i;:::-;;;;;;;;47190:125;47151:171;47347:1;47334:9;:14;47330:96;;47359:59;47384:10;47396;;;;;;;;;;;47408:9;47359:24;:59::i;:::-;47330:96;47457:1;47438:15;:20;47434:77;;47469:34;47475:10;47487:15;47469:5;:34::i;:::-;47434:77;47526:36;47541:2;47545:16;47526:14;:36::i;:::-;47519:43;;;;;46665:903;;;;;:::o;34749:32::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22930:90::-;22978:7;23001:13;:11;:13::i;:::-;22994:20;;22930:90;:::o;35578:25::-;;;;;;;;;;;;;:::o;34614:106::-;34654:66;34614:106;;;:::o;34920:39::-;;;;:::o;45973:384::-;32439:13;:11;:13::i;:::-;46055:16:::1;:14;:16::i;:::-;46050:71;;46089:24;;;;;;;;;;;;;;46050:71;46127:16;46171:13;46161:7;;46146:12;;:22;;;;:::i;:::-;:38;;;;:::i;:::-;46127:57;;34500:5;46195:8;:26;46191:81;;;46255:8;46239:25;;;;;;;;;;;:::i;:::-;;;;;;;;46191:81;46293:13;46278:12;:28;;;;46337:13;46318:33;;;;;;;;;;46043:314;45973:384:::0;:::o;40666:192::-;32439:13;:11;:13::i;:::-;40752:16:::1;:37;40769:19;40752:37;;;;;;;;;;;;;;;;;;;;;;;;;40747:106;;;40808:16;:37;40825:19;40808:37;;;;;;;;;;;;;;;;40801:44;;;;;;;;;;;40747:106;40666:192:::0;:::o;12799:151::-;12888:7;12915:11;:18;12927:5;12915:18;;;;;;;;;;;;;;;:27;12934:7;12915:27;;;;;;;;;;;;;;;;12908:34;;12799:151;;;;:::o;41887:100::-;41934:4;41954:11;:27;;;;;;;;;;;;41947:34;;41887:100;:::o;35608:24::-;;;;:::o;45179:622::-;32439:13;:11;:13::i;:::-;45285:11:::1;:9;:11::i;:::-;45280:61;;45314:19;;;;;;;;;;;;;;45280:61;45415:9;;45405:7;:19;:48;;;;34438:3;45428:7;:25;45405:48;45400:102;;;45486:7;45472:22;;;;;;;;;;;:::i;:::-;;;;;;;;45400:102;45510:16;45554:7;45544;;45529:12;;:22;;;;:::i;:::-;:32;;;;:::i;:::-;45510:51;;34500:5;45572:8;:26;45568:83;;;45632:8;45616:25;;;;;;;;;;;:::i;:::-;;;;;;;;45568:83;45657:38;45683:11;45657:25;:38::i;:::-;45715:11;45702:10;;:24;;;;;;;;;;;;;;;;;;45742:7;45733:6;:16;;;;45787:7;45774:11;45761:34;;;;;;;;;;;;45273:528;45179:622:::0;;:::o;50390:117::-;32439:13;:11;:13::i;:::-;50468:33:::1;50492:8;50468:23;:33::i;:::-;50390:117:::0;:::o;42109:109::-;42162:4;42182:11;:30;;;;;;;;;;;;42175:37;;42109:109;:::o;44230:225::-;32439:13;:11;:13::i;:::-;44307:14:::1;:12;:14::i;:::-;44302:67;;44339:22;;;;;;;;;;;;;;44302:67;44375:32;44399:7;44375:23;:32::i;:::-;44441:7;44421:28;;;;;;;;;;44230:225:::0;:::o;34511:43::-;;;;;;;;;;;;;;;;;;;:::o;17461:548::-;17564:1;17545:21;;:7;:21;;;17537:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;17615:49;17644:1;17648:7;17657:6;17615:20;:49::i;:::-;17693:6;17677:12;;:22;;;;;;;:::i;:::-;;;;;;;;17870:6;17848:9;:18;17858:7;17848:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;17924:7;17903:37;;17920:1;17903:37;;;17933:6;17903:37;;;;;;:::i;:::-;;;;;;;;17953:48;17981:1;17985:7;17994:6;17953:19;:48::i;:::-;17461:548;;:::o;5302:407::-;5451:4;5447:2;5443:13;5433:264;;5609:10;5603:4;5596:24;5683:4;5677;5670:18;5433:264;5302:407;:::o;33452:201::-;32439:13;:11;:13::i;:::-;33561:1:::1;33541:22;;:8;:22;;::::0;33533:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33617:28;33636:8;33617:18;:28::i;:::-;33452:201:::0;:::o;32718:132::-;32793:12;:10;:12::i;:::-;32782:23;;:7;:5;:7::i;:::-;:23;;;32774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32718:132::o;8513:98::-;8566:7;8593:10;8586:17;;8513:98;:::o;19455:346::-;19574:1;19557:19;;:5;:19;;;19549:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19655:1;19636:21;;:7;:21;;;19628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19739:6;19709:11;:18;19721:5;19709:18;;;;;;;;;;;;;;;:27;19728:7;19709:27;;;;;;;;;;;;;;;:36;;;;19777:7;19761:32;;19770:5;19761:32;;;19786:6;19761:32;;;;;;:::i;:::-;;;;;;;;19455:346;;;:::o;50764:245::-;50854:17;50914:1;50904:6;;:11;;:35;;;;;50929:10;;;;;;;;;;;50919:20;;:6;:20;;;;50904:35;50900:104;;;34362:6;50972;;50963;:15;;;;:::i;:::-;50962:34;;;;:::i;:::-;50950:46;;50900:104;50764:245;;;;:::o;51200:236::-;51275:23;51353:1;51337:12;;:17;51333:98;;34362:6;51393:12;;51384:6;:21;;;;:::i;:::-;51383:40;;;;:::i;:::-;51365:58;;51333:98;51200:236;;;:::o;24464:266::-;24580:4;24593:15;24611:18;:16;:18::i;:::-;24593:36;;24636:37;24652:4;24658:7;24667:5;24636:15;:37::i;:::-;24680:26;24690:4;24696:2;24700:5;24680:9;:26::i;:::-;24720:4;24713:11;;;24464:266;;;;;:::o;28997:422::-;29114:12;29110:304;;;29152:1;29141:7;:12;29137:213;;29166:19;29188:10;:8;:10::i;:::-;29166:32;;29209:15;29237:11;29227:7;:21;;;;:::i;:::-;29209:39;;29261:36;29270:4;29276:2;29280:7;29289;29261:8;:36::i;:::-;29328:2;29313:27;;29322:4;29313:27;;;29332:7;29313:27;;;;;;:::i;:::-;;;;;;;;29155:195;;29137:213;29110:304;;;29372:34;29388:4;29394:2;29398:7;29372:15;:34::i;:::-;29110:304;28997:422;;;:::o;26549:188::-;26625:12;26621:111;;;26655:19;;;;;;;;;;;;;;26621:111;26697:27;26709:7;26718:5;26697:11;:27::i;:::-;26549:188;;:::o;30080:151::-;30122:7;30139:15;30156;30175:19;:17;:19::i;:::-;30138:56;;;;30218:7;30208;:17;;;;:::i;:::-;30201:24;;;;30080:151;:::o;26092:188::-;26168:12;26164:111;;;26198:19;;;;;;;;;;;;;;26164:111;26240:27;26252:7;26261:5;26240:11;:27::i;:::-;26092:188;;:::o;12210:127::-;12284:7;12311:9;:18;12321:7;12311:18;;;;;;;;;;;;;;;;12304:25;;12210:127;;;:::o;33194:103::-;32439:13;:11;:13::i;:::-;33259:30:::1;33286:1;33259:18;:30::i;:::-;33194:103::o:0;24882:198::-;24975:4;24988:13;25004:18;:16;:18::i;:::-;24988:34;;25029:27;25039:5;25046:2;25050:5;25029:9;:27::i;:::-;25070:4;25063:11;;;24882:198;;;;:::o;26941:158::-;27007:12;27002:65;;27037:22;;;;;;;;;;;;;;27002:65;27085:8;27075:7;:18;;;;26941:158;:::o;21111:91::-;;;;:::o;21806:90::-;;;;:::o;33813:191::-;33887:16;33906:6;;;;;;;;;;;33887:25;;33932:8;33923:6;;:17;;;;;;;;;;;;;;;;;;33987:8;33956:40;;33977:8;33956:40;;;;;;;;;;;;33876:128;33813:191;:::o;20092:419::-;20193:24;20220:25;20230:5;20237:7;20220:9;:25::i;:::-;20193:52;;20280:17;20260:16;:37;20256:248;;20342:6;20322:16;:26;;20314:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20426:51;20435:5;20442:7;20470:6;20451:16;:25;20426:8;:51::i;:::-;20256:248;20182:329;20092:419;;;:::o;25285:390::-;25395:12;25391:279;;;25418:31;25444:4;25418:25;:31::i;:::-;25458:29;25484:2;25458:25;:29::i;:::-;25510:1;25500:6;:11;25496:64;;25531:19;;;;;;;;;;;;;;25496:64;25570:36;25589:4;25595:2;25599:6;25570:18;:36::i;:::-;25391:279;;;25629:33;25645:4;25651:2;25655:6;25629:15;:33::i;:::-;25391:279;25285:390;;;:::o;30895:418::-;31033:19;31055:7;:15;31063:6;31055:15;;;;;;;;;;;;;;;;31033:37;;31095:10;31081:11;:24;31077:114;;;31148:9;31159:11;31172:10;31123:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;31077:114;31233:10;31215:7;:15;31223:6;31215:15;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;31197:7;:15;31205:6;31197:15;;;;;;;;;;;;;;;:46;;;;31292:15;31271:7;:18;31279:9;31271:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;31250:7;:18;31258:9;31250:18;;;;;;;;;;;;;;;:57;;;;31026:287;30895:418;;;;:::o;16368:806::-;16481:1;16465:18;;:4;:18;;;16457:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16558:1;16544:16;;:2;:16;;;16536:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16613:38;16634:4;16640:2;16644:6;16613:20;:38::i;:::-;16664:19;16686:9;:15;16696:4;16686:15;;;;;;;;;;;;;;;;16664:37;;16735:6;16720:11;:21;;16712:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;16852:6;16838:11;:20;16820:9;:15;16830:4;16820:15;;;;;;;;;;;;;;;:38;;;;17055:6;17038:9;:13;17048:2;17038:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;17105:2;17090:26;;17099:4;17090:26;;;17109:6;17090:26;;;;;;:::i;:::-;;;;;;;;17129:37;17149:4;17155:2;17159:6;17129:19;:37::i;:::-;16446:728;16368:806;;;:::o;18342:675::-;18445:1;18426:21;;:7;:21;;;18418:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18498:49;18519:7;18536:1;18540:6;18498:20;:49::i;:::-;18560:22;18585:9;:18;18595:7;18585:18;;;;;;;;;;;;;;;;18560:43;;18640:6;18622:14;:24;;18614:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18759:6;18742:14;:23;18721:9;:18;18731:7;18721:18;;;;;;;;;;;;;;;:44;;;;18876:6;18860:12;;:22;;;;;;;;;;;18937:1;18911:37;;18920:7;18911:37;;;18941:6;18911:37;;;;;;:::i;:::-;;;;;;;;18961:48;18981:7;18998:1;19002:6;18961:19;:48::i;:::-;18407:610;18342:675;;:::o;30331:109::-;30382:7;30391;30415;;30424:9;:7;:9::i;:::-;30407:27;;;;30331:109;;:::o;27703:521::-;27818:12;27833:21;27846:7;27833:12;:21::i;:::-;27818:36;;27861:23;27897:4;27887:7;:14;;;;:::i;:::-;27861:40;;27909:15;27926:12;27940:23;27967:71;27987:7;28003:4;28016:15;27967:11;:71::i;:::-;27908:130;;;;;;28062:1;28051:7;:12;28047:172;;28074:53;28083:6;28091:9;28102:7;28111:15;28074:8;:53::i;:::-;28138:23;28150:4;28156;28138:11;:23::i;:::-;28192:9;28175:36;;28184:6;28175:36;;;28203:7;28175:36;;;;;;:::i;:::-;;;;;;;;28047:172;27811:413;;;;;27703:521;;;:::o;28652:123::-;28713:7;22248:6;28747:7;;28737;:17;;;;:::i;:::-;28736:33;;;;:::i;:::-;28729:40;;28652:123;;;:::o;29590:387::-;29709:7;29718;29727;29743:19;29765:10;:8;:10::i;:::-;29743:32;;29782:15;29810:11;29800:7;:21;;;;:::i;:::-;29782:39;;29828:12;29850:11;29843:4;:18;;;;:::i;:::-;29828:33;;29868:23;29912:11;29894:15;:29;;;;:::i;:::-;29868:55;;29940:7;29949:4;29955:15;29932:39;;;;;;;;;;29590:387;;;;;;;:::o;28391:131::-;28475:4;28465:7;;:14;;;;:::i;:::-;28455:7;:24;;;;28512:4;28499:10;;:17;;;;:::i;:::-;28486:10;:30;;;;28391:131;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:246::-;1386:1;1396:113;1410:6;1407:1;1404:13;1396:113;;;1495:1;1490:3;1486:11;1480:18;1476:1;1471:3;1467:11;1460:39;1432:2;1429:1;1425:10;1420:15;;1396:113;;;1543:1;1534:6;1529:3;1525:16;1518:27;1367:184;1305:246;;;:::o;1557:102::-;1598:6;1649:2;1645:7;1640:2;1633:5;1629:14;1625:28;1615:38;;1557:102;;;:::o;1665:377::-;1753:3;1781:39;1814:5;1781:39;:::i;:::-;1836:71;1900:6;1895:3;1836:71;:::i;:::-;1829:78;;1916:65;1974:6;1969:3;1962:4;1955:5;1951:16;1916:65;:::i;:::-;2006:29;2028:6;2006:29;:::i;:::-;2001:3;1997:39;1990:46;;1757:285;1665:377;;;;:::o;2048:313::-;2161:4;2199:2;2188:9;2184:18;2176:26;;2248:9;2242:4;2238:20;2234:1;2223:9;2219:17;2212:47;2276:78;2349:4;2340:6;2276:78;:::i;:::-;2268:86;;2048:313;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:329::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:118::-;5610:24;5628:5;5610:24;:::i;:::-;5605:3;5598:37;5523:118;;:::o;5647:222::-;5740:4;5778:2;5767:9;5763:18;5755:26;;5791:71;5859:1;5848:9;5844:17;5835:6;5791:71;:::i;:::-;5647:222;;;;:::o;5875:117::-;5984:1;5981;5974:12;5998:117;6107:1;6104;6097:12;6121:180;6169:77;6166:1;6159:88;6266:4;6263:1;6256:15;6290:4;6287:1;6280:15;6307:281;6390:27;6412:4;6390:27;:::i;:::-;6382:6;6378:40;6520:6;6508:10;6505:22;6484:18;6472:10;6469:34;6466:62;6463:88;;;6531:18;;:::i;:::-;6463:88;6571:10;6567:2;6560:22;6350:238;6307:281;;:::o;6594:129::-;6628:6;6655:20;;:::i;:::-;6645:30;;6684:33;6712:4;6704:6;6684:33;:::i;:::-;6594:129;;;:::o;6729:308::-;6791:4;6881:18;6873:6;6870:30;6867:56;;;6903:18;;:::i;:::-;6867:56;6941:29;6963:6;6941:29;:::i;:::-;6933:37;;7025:4;7019;7015:15;7007:23;;6729:308;;;:::o;7043:146::-;7140:6;7135:3;7130;7117:30;7181:1;7172:6;7167:3;7163:16;7156:27;7043:146;;;:::o;7195:425::-;7273:5;7298:66;7314:49;7356:6;7314:49;:::i;:::-;7298:66;:::i;:::-;7289:75;;7387:6;7380:5;7373:21;7425:4;7418:5;7414:16;7463:3;7454:6;7449:3;7445:16;7442:25;7439:112;;;7470:79;;:::i;:::-;7439:112;7560:54;7607:6;7602:3;7597;7560:54;:::i;:::-;7279:341;7195:425;;;;;:::o;7640:340::-;7696:5;7745:3;7738:4;7730:6;7726:17;7722:27;7712:122;;7753:79;;:::i;:::-;7712:122;7870:6;7857:20;7895:79;7970:3;7962:6;7955:4;7947:6;7943:17;7895:79;:::i;:::-;7886:88;;7702:278;7640:340;;;;:::o;7986:509::-;8055:6;8104:2;8092:9;8083:7;8079:23;8075:32;8072:119;;;8110:79;;:::i;:::-;8072:119;8258:1;8247:9;8243:17;8230:31;8288:18;8280:6;8277:30;8274:117;;;8310:79;;:::i;:::-;8274:117;8415:63;8470:7;8461:6;8450:9;8446:22;8415:63;:::i;:::-;8405:73;;8201:287;7986:509;;;;:::o;8501:77::-;8538:7;8567:5;8556:16;;8501:77;;;:::o;8584:118::-;8671:24;8689:5;8671:24;:::i;:::-;8666:3;8659:37;8584:118;;:::o;8708:222::-;8801:4;8839:2;8828:9;8824:18;8816:26;;8852:71;8920:1;8909:9;8905:17;8896:6;8852:71;:::i;:::-;8708:222;;;;:::o;8936:474::-;9004:6;9012;9061:2;9049:9;9040:7;9036:23;9032:32;9029:119;;;9067:79;;:::i;:::-;9029:119;9187:1;9212:53;9257:7;9248:6;9237:9;9233:22;9212:53;:::i;:::-;9202:63;;9158:117;9314:2;9340:53;9385:7;9376:6;9365:9;9361:22;9340:53;:::i;:::-;9330:63;;9285:118;8936:474;;;;;:::o;9416:180::-;9464:77;9461:1;9454:88;9561:4;9558:1;9551:15;9585:4;9582:1;9575:15;9602:320;9646:6;9683:1;9677:4;9673:12;9663:22;;9730:1;9724:4;9720:12;9751:18;9741:81;;9807:4;9799:6;9795:17;9785:27;;9741:81;9869:2;9861:6;9858:14;9838:18;9835:38;9832:84;;9888:18;;:::i;:::-;9832:84;9653:269;9602:320;;;:::o;9928:180::-;9976:77;9973:1;9966:88;10073:4;10070:1;10063:15;10097:4;10094:1;10087:15;10114:194;10154:4;10174:20;10192:1;10174:20;:::i;:::-;10169:25;;10208:20;10226:1;10208:20;:::i;:::-;10203:25;;10252:1;10249;10245:9;10237:17;;10276:1;10270:4;10267:11;10264:37;;;10281:18;;:::i;:::-;10264:37;10114:194;;;;:::o;10314:191::-;10354:3;10373:20;10391:1;10373:20;:::i;:::-;10368:25;;10407:20;10425:1;10407:20;:::i;:::-;10402:25;;10450:1;10447;10443:9;10436:16;;10471:3;10468:1;10465:10;10462:36;;;10478:18;;:::i;:::-;10462:36;10314:191;;;;:::o;10511:180::-;10559:77;10556:1;10549:88;10656:4;10653:1;10646:15;10680:4;10677:1;10670:15;10697:185;10737:1;10754:20;10772:1;10754:20;:::i;:::-;10749:25;;10788:20;10806:1;10788:20;:::i;:::-;10783:25;;10827:1;10817:35;;10832:18;;:::i;:::-;10817:35;10874:1;10871;10867:9;10862:14;;10697:185;;;;:::o;10888:224::-;11028:34;11024:1;11016:6;11012:14;11005:58;11097:7;11092:2;11084:6;11080:15;11073:32;10888:224;:::o;11118:366::-;11260:3;11281:67;11345:2;11340:3;11281:67;:::i;:::-;11274:74;;11357:93;11446:3;11357:93;:::i;:::-;11475:2;11470:3;11466:12;11459:19;;11118:366;;;:::o;11490:419::-;11656:4;11694:2;11683:9;11679:18;11671:26;;11743:9;11737:4;11733:20;11729:1;11718:9;11714:17;11707:47;11771:131;11897:4;11771:131;:::i;:::-;11763:139;;11490:419;;;:::o;11915:141::-;11964:4;11987:3;11979:11;;12010:3;12007:1;12000:14;12044:4;12041:1;12031:18;12023:26;;11915:141;;;:::o;12062:93::-;12099:6;12146:2;12141;12134:5;12130:14;12126:23;12116:33;;12062:93;;;:::o;12161:107::-;12205:8;12255:5;12249:4;12245:16;12224:37;;12161:107;;;;:::o;12274:393::-;12343:6;12393:1;12381:10;12377:18;12416:97;12446:66;12435:9;12416:97;:::i;:::-;12534:39;12564:8;12553:9;12534:39;:::i;:::-;12522:51;;12606:4;12602:9;12595:5;12591:21;12582:30;;12655:4;12645:8;12641:19;12634:5;12631:30;12621:40;;12350:317;;12274:393;;;;;:::o;12673:60::-;12701:3;12722:5;12715:12;;12673:60;;;:::o;12739:142::-;12789:9;12822:53;12840:34;12849:24;12867:5;12849:24;:::i;:::-;12840:34;:::i;:::-;12822:53;:::i;:::-;12809:66;;12739:142;;;:::o;12887:75::-;12930:3;12951:5;12944:12;;12887:75;;;:::o;12968:269::-;13078:39;13109:7;13078:39;:::i;:::-;13139:91;13188:41;13212:16;13188:41;:::i;:::-;13180:6;13173:4;13167:11;13139:91;:::i;:::-;13133:4;13126:105;13044:193;12968:269;;;:::o;13243:73::-;13288:3;13243:73;:::o;13322:189::-;13399:32;;:::i;:::-;13440:65;13498:6;13490;13484:4;13440:65;:::i;:::-;13375:136;13322:189;;:::o;13517:186::-;13577:120;13594:3;13587:5;13584:14;13577:120;;;13648:39;13685:1;13678:5;13648:39;:::i;:::-;13621:1;13614:5;13610:13;13601:22;;13577:120;;;13517:186;;:::o;13709:543::-;13810:2;13805:3;13802:11;13799:446;;;13844:38;13876:5;13844:38;:::i;:::-;13928:29;13946:10;13928:29;:::i;:::-;13918:8;13914:44;14111:2;14099:10;14096:18;14093:49;;;14132:8;14117:23;;14093:49;14155:80;14211:22;14229:3;14211:22;:::i;:::-;14201:8;14197:37;14184:11;14155:80;:::i;:::-;13814:431;;13799:446;13709:543;;;:::o;14258:117::-;14312:8;14362:5;14356:4;14352:16;14331:37;;14258:117;;;;:::o;14381:169::-;14425:6;14458:51;14506:1;14502:6;14494:5;14491:1;14487:13;14458:51;:::i;:::-;14454:56;14539:4;14533;14529:15;14519:25;;14432:118;14381:169;;;;:::o;14555:295::-;14631:4;14777:29;14802:3;14796:4;14777:29;:::i;:::-;14769:37;;14839:3;14836:1;14832:11;14826:4;14823:21;14815:29;;14555:295;;;;:::o;14855:1395::-;14972:37;15005:3;14972:37;:::i;:::-;15074:18;15066:6;15063:30;15060:56;;;15096:18;;:::i;:::-;15060:56;15140:38;15172:4;15166:11;15140:38;:::i;:::-;15225:67;15285:6;15277;15271:4;15225:67;:::i;:::-;15319:1;15343:4;15330:17;;15375:2;15367:6;15364:14;15392:1;15387:618;;;;16049:1;16066:6;16063:77;;;16115:9;16110:3;16106:19;16100:26;16091:35;;16063:77;16166:67;16226:6;16219:5;16166:67;:::i;:::-;16160:4;16153:81;16022:222;15357:887;;15387:618;15439:4;15435:9;15427:6;15423:22;15473:37;15505:4;15473:37;:::i;:::-;15532:1;15546:208;15560:7;15557:1;15554:14;15546:208;;;15639:9;15634:3;15630:19;15624:26;15616:6;15609:42;15690:1;15682:6;15678:14;15668:24;;15737:2;15726:9;15722:18;15709:31;;15583:4;15580:1;15576:12;15571:17;;15546:208;;;15782:6;15773:7;15770:19;15767:179;;;15840:9;15835:3;15831:19;15825:26;15883:48;15925:4;15917:6;15913:17;15902:9;15883:48;:::i;:::-;15875:6;15868:64;15790:156;15767:179;15992:1;15988;15980:6;15976:14;15972:22;15966:4;15959:36;15394:611;;;15357:887;;14947:1303;;;14855:1395;;:::o;16256:181::-;16396:33;16392:1;16384:6;16380:14;16373:57;16256:181;:::o;16443:366::-;16585:3;16606:67;16670:2;16665:3;16606:67;:::i;:::-;16599:74;;16682:93;16771:3;16682:93;:::i;:::-;16800:2;16795:3;16791:12;16784:19;;16443:366;;;:::o;16815:419::-;16981:4;17019:2;17008:9;17004:18;16996:26;;17068:9;17062:4;17058:20;17054:1;17043:9;17039:17;17032:47;17096:131;17222:4;17096:131;:::i;:::-;17088:139;;16815:419;;;:::o;17240:225::-;17380:34;17376:1;17368:6;17364:14;17357:58;17449:8;17444:2;17436:6;17432:15;17425:33;17240:225;:::o;17471:366::-;17613:3;17634:67;17698:2;17693:3;17634:67;:::i;:::-;17627:74;;17710:93;17799:3;17710:93;:::i;:::-;17828:2;17823:3;17819:12;17812:19;;17471:366;;;:::o;17843:419::-;18009:4;18047:2;18036:9;18032:18;18024:26;;18096:9;18090:4;18086:20;18082:1;18071:9;18067:17;18060:47;18124:131;18250:4;18124:131;:::i;:::-;18116:139;;17843:419;;;:::o;18268:182::-;18408:34;18404:1;18396:6;18392:14;18385:58;18268:182;:::o;18456:366::-;18598:3;18619:67;18683:2;18678:3;18619:67;:::i;:::-;18612:74;;18695:93;18784:3;18695:93;:::i;:::-;18813:2;18808:3;18804:12;18797:19;;18456:366;;;:::o;18828:419::-;18994:4;19032:2;19021:9;19017:18;19009:26;;19081:9;19075:4;19071:20;19067:1;19056:9;19052:17;19045:47;19109:131;19235:4;19109:131;:::i;:::-;19101:139;;18828:419;;;:::o;19253:223::-;19393:34;19389:1;19381:6;19377:14;19370:58;19462:6;19457:2;19449:6;19445:15;19438:31;19253:223;:::o;19482:366::-;19624:3;19645:67;19709:2;19704:3;19645:67;:::i;:::-;19638:74;;19721:93;19810:3;19721:93;:::i;:::-;19839:2;19834:3;19830:12;19823:19;;19482:366;;;:::o;19854:419::-;20020:4;20058:2;20047:9;20043:18;20035:26;;20107:9;20101:4;20097:20;20093:1;20082:9;20078:17;20071:47;20135:131;20261:4;20135:131;:::i;:::-;20127:139;;19854:419;;;:::o;20279:221::-;20419:34;20415:1;20407:6;20403:14;20396:58;20488:4;20483:2;20475:6;20471:15;20464:29;20279:221;:::o;20506:366::-;20648:3;20669:67;20733:2;20728:3;20669:67;:::i;:::-;20662:74;;20745:93;20834:3;20745:93;:::i;:::-;20863:2;20858:3;20854:12;20847:19;;20506:366;;;:::o;20878:419::-;21044:4;21082:2;21071:9;21067:18;21059:26;;21131:9;21125:4;21121:20;21117:1;21106:9;21102:17;21095:47;21159:131;21285:4;21159:131;:::i;:::-;21151:139;;20878:419;;;:::o;21303:410::-;21343:7;21366:20;21384:1;21366:20;:::i;:::-;21361:25;;21400:20;21418:1;21400:20;:::i;:::-;21395:25;;21455:1;21452;21448:9;21477:30;21495:11;21477:30;:::i;:::-;21466:41;;21656:1;21647:7;21643:15;21640:1;21637:22;21617:1;21610:9;21590:83;21567:139;;21686:18;;:::i;:::-;21567:139;21351:362;21303:410;;;;:::o;21719:179::-;21859:31;21855:1;21847:6;21843:14;21836:55;21719:179;:::o;21904:366::-;22046:3;22067:67;22131:2;22126:3;22067:67;:::i;:::-;22060:74;;22143:93;22232:3;22143:93;:::i;:::-;22261:2;22256:3;22252:12;22245:19;;21904:366;;;:::o;22276:419::-;22442:4;22480:2;22469:9;22465:18;22457:26;;22529:9;22523:4;22519:20;22515:1;22504:9;22500:17;22493:47;22557:131;22683:4;22557:131;:::i;:::-;22549:139;;22276:419;;;:::o;22701:442::-;22850:4;22888:2;22877:9;22873:18;22865:26;;22901:71;22969:1;22958:9;22954:17;22945:6;22901:71;:::i;:::-;22982:72;23050:2;23039:9;23035:18;23026:6;22982:72;:::i;:::-;23064;23132:2;23121:9;23117:18;23108:6;23064:72;:::i;:::-;22701:442;;;;;;:::o;23149:224::-;23289:34;23285:1;23277:6;23273:14;23266:58;23358:7;23353:2;23345:6;23341:15;23334:32;23149:224;:::o;23379:366::-;23521:3;23542:67;23606:2;23601:3;23542:67;:::i;:::-;23535:74;;23618:93;23707:3;23618:93;:::i;:::-;23736:2;23731:3;23727:12;23720:19;;23379:366;;;:::o;23751:419::-;23917:4;23955:2;23944:9;23940:18;23932:26;;24004:9;23998:4;23994:20;23990:1;23979:9;23975:17;23968:47;24032:131;24158:4;24032:131;:::i;:::-;24024:139;;23751:419;;;:::o;24176:222::-;24316:34;24312:1;24304:6;24300:14;24293:58;24385:5;24380:2;24372:6;24368:15;24361:30;24176:222;:::o;24404:366::-;24546:3;24567:67;24631:2;24626:3;24567:67;:::i;:::-;24560:74;;24643:93;24732:3;24643:93;:::i;:::-;24761:2;24756:3;24752:12;24745:19;;24404:366;;;:::o;24776:419::-;24942:4;24980:2;24969:9;24965:18;24957:26;;25029:9;25023:4;25019:20;25015:1;25004:9;25000:17;24993:47;25057:131;25183:4;25057:131;:::i;:::-;25049:139;;24776:419;;;:::o;25201:225::-;25341:34;25337:1;25329:6;25325:14;25318:58;25410:8;25405:2;25397:6;25393:15;25386:33;25201:225;:::o;25432:366::-;25574:3;25595:67;25659:2;25654:3;25595:67;:::i;:::-;25588:74;;25671:93;25760:3;25671:93;:::i;:::-;25789:2;25784:3;25780:12;25773:19;;25432:366;;;:::o;25804:419::-;25970:4;26008:2;25997:9;25993:18;25985:26;;26057:9;26051:4;26047:20;26043:1;26032:9;26028:17;26021:47;26085:131;26211:4;26085:131;:::i;:::-;26077:139;;25804:419;;;:::o;26229:220::-;26369:34;26365:1;26357:6;26353:14;26346:58;26438:3;26433:2;26425:6;26421:15;26414:28;26229:220;:::o;26455:366::-;26597:3;26618:67;26682:2;26677:3;26618:67;:::i;:::-;26611:74;;26694:93;26783:3;26694:93;:::i;:::-;26812:2;26807:3;26803:12;26796:19;;26455:366;;;:::o;26827:419::-;26993:4;27031:2;27020:9;27016:18;27008:26;;27080:9;27074:4;27070:20;27066:1;27055:9;27051:17;27044:47;27108:131;27234:4;27108:131;:::i;:::-;27100:139;;26827:419;;;:::o;27252:221::-;27392:34;27388:1;27380:6;27376:14;27369:58;27461:4;27456:2;27448:6;27444:15;27437:29;27252:221;:::o;27479:366::-;27621:3;27642:67;27706:2;27701:3;27642:67;:::i;:::-;27635:74;;27718:93;27807:3;27718:93;:::i;:::-;27836:2;27831:3;27827:12;27820:19;;27479:366;;;:::o;27851:419::-;28017:4;28055:2;28044:9;28040:18;28032:26;;28104:9;28098:4;28094:20;28090:1;28079:9;28075:17;28068:47;28132:131;28258:4;28132:131;:::i;:::-;28124:139;;27851:419;;;:::o
Swarm Source
ipfs://653b556219ce1aed90c2f03ee5c1f4f1ff13263510f455eff129fa16fa2c176f
Loading...
Loading
Loading...
Loading
OVERVIEW
RAFL is decentralized Variable Revenue Share token on BASE, with a 2.5% transaction fee and 3x weekly distribution of fees collected.Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.