Overview
Max Total Supply
9,170,519.664144531285921673 AURORA
Holders
6,713 (0.00%)
Market
Price
$0.00 @ 0.000000 FTM
Onchain Market Cap
$0.00
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
13,851.303339217776093652 AURORAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
HyperAurora
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2021-04-25 */ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity =0.6.12; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an FTM balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // token timelock for burn vault contract TokenTimelock { using SafeERC20 for IERC20; address public immutable beneficiary; uint256 public immutable releaseTime; constructor( address _beneficiary, uint256 _releaseTime ) public { // solium-disable-next-line security/no-block-members require(_releaseTime > block.timestamp); beneficiary = _beneficiary; releaseTime = _releaseTime; } function release(IERC20 _token) public { // solium-disable-next-line security/no-block-members require(block.timestamp >= releaseTime); uint256 amount = _token.balanceOf(address(this)); require(amount > 0); _token.safeTransfer(beneficiary, amount); } } // /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // ERC20 lib abstract contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) internal _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 internal _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * 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 returns (uint8) { return _decimals; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` 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 = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is 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 Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @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 to 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 { } } interface IHyperSwapPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format)) library FixedPoint { // range: [0, 2**112 - 1] // resolution: 1 / 2**112 struct uq112x112 { uint224 _x; } // range: [0, 2**144 - 1] // resolution: 1 / 2**112 struct uq144x112 { uint _x; } uint8 private constant RESOLUTION = 112; // encode a uint112 as a UQ112x112 function encode(uint112 x) internal pure returns (uq112x112 memory) { return uq112x112(uint224(x) << RESOLUTION); } // encodes a uint144 as a UQ144x112 function encode144(uint144 x) internal pure returns (uq144x112 memory) { return uq144x112(uint256(x) << RESOLUTION); } // divide a UQ112x112 by a uint112, returning a UQ112x112 function div(uq112x112 memory self, uint112 x) internal pure returns (uq112x112 memory) { require(x != 0, 'FixedPoint: DIV_BY_ZERO'); return uq112x112(self._x / uint224(x)); } // multiply a UQ112x112 by a uint, returning a UQ144x112 // reverts on overflow function mul(uq112x112 memory self, uint y) internal pure returns (uq144x112 memory) { uint z; require(y == 0 || (z = uint(self._x) * y) / y == uint(self._x), "FixedPoint: MULTIPLICATION_OVERFLOW"); return uq144x112(z); } // returns a UQ112x112 which represents the ratio of the numerator to the denominator // equivalent to encode(numerator).div(denominator) function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) { require(denominator > 0, "FixedPoint: DIV_BY_ZERO"); return uq112x112((uint224(numerator) << RESOLUTION) / denominator); } // decode a UQ112x112 into a uint112 by truncating after the radix point function decode(uq112x112 memory self) internal pure returns (uint112) { return uint112(self._x >> RESOLUTION); } // decode a UQ144x112 into a uint144 by truncating after the radix point function decode144(uq144x112 memory self) internal pure returns (uint144) { return uint144(self._x >> RESOLUTION); } } // library with helper methods for oracles that are concerned with computing average prices library HyperSwapOracleLibrary { using FixedPoint for *; // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1] function currentBlockTimestamp() internal view returns (uint32) { return uint32(block.timestamp % 2 ** 32); } // produces the cumulative price using counterfactuals to save gas and avoid a call to sync. function currentCumulativePrices( address pair ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) { blockTimestamp = currentBlockTimestamp(); price0Cumulative = IHyperSwapPair(pair).price0CumulativeLast(); price1Cumulative = IHyperSwapPair(pair).price1CumulativeLast(); // if time has elapsed since the last update on the pair, mock the accumulated price values (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IHyperSwapPair(pair).getReserves(); if (blockTimestampLast != blockTimestamp) { // subtraction overflow is desired uint32 timeElapsed = blockTimestamp - blockTimestampLast; // addition overflow is desired // counterfactual price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed; // counterfactual price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed; } } } library HyperSwapLibrary { using SafeMath for uint; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'HyperSwapLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'HyperSwapLibrary: ZERO_ADDRESS'); } // calculates the CREATE2 address for a pair without making any external calls function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address(uint(keccak256(abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), hex'c7afa4a3485a5e46a8e6c01f3d79956707846c2145019cf4004d190147370afe' // init code hash )))); } } contract HyperAurora is ERC20, Ownable, Pausable { using SafeMath for uint256; /// @dev hyperSwap listing rate uint256 private constant INITIAL_TOKENS_PER_FTM = 1 ether; /// @dev max burn percentage uint256 private constant BURN_PCT = 15; /// @dev min burn percentage uint256 private constant MIN_BURN_PCT = 5; /// @dev reserve percentage of the burn percentage uint256 private constant BURN_RESERVE_PCT = 25; /// @dev redist pct uint256 private constant REDIST_PCT = 50; /// @notice WFTM token address address public constant WFTM = address(0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83); /// @notice self-explanatory address public constant hyperSwapFactory = address(0x991152411A7B5A14A8CF0cDDE8439435328070dF); address public immutable burnReservesAddress; address public immutable initialDistributionAddress; TokenTimelock public burnReservesVault; /// @notice liquidity sources (e.g. HyperSwapRouter) mapping(address => bool) public whitelistedSenders; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => bool) private _isExcluded; address[] private _excluded; address public hyperSwapPair; /// @notice Whether or not this token is first in streetswap pair bool public isThisToken0; /// @notice last TWAP update time uint32 public blockTimestampLast; /// @notice last TWAP cumulative price uint256 public priceCumulativeLast; /// @notice last TWAP average price uint256 public priceAverageLast; /// @notice TWAP min delta (2-min) uint256 public minDeltaTwap; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1 * 1e7 * 1e18; uint256 private _rTotal = (MAX - _tTotal.mul(2)); uint256 private _tFeeTotal; event TwapUpdated(uint256 priceCumulativeLast, uint256 blockTimestampLast, uint256 priceAverageLast); constructor( uint256 _minDeltaTwap, address _initialDistributionAddress, address _burnReservesAddress ) public Ownable() ERC20("HyperAurora", "AURORA") { setMinDeltaTwap(_minDeltaTwap); initialDistributionAddress = _initialDistributionAddress; burnReservesAddress = _burnReservesAddress; _createBurnReservesVault(_burnReservesAddress); _distributeTokens(_initialDistributionAddress); _initializePair(); _pause(); } modifier whenNotPausedOrInitialDistribution() { require(!paused() || msg.sender == initialDistributionAddress, "!paused && !initialDistributionAddress"); _; } // display total redistributions function totalHyperDrops() public view returns (uint256) { return _tFeeTotal; } /** * @dev RFI Style Distributions. */ function totalSupply() public view override returns (uint256) { return _tTotal; } /** * @notice total burnt from supply */ function totalBurn() public view returns (uint256) { return ((1 * 1e7 * 1e18) - _tTotal); } /** * @dev Balance Of Using RFI distribution */ function balanceOf(address account) public view override returns (uint256) { if (_isWhitelistedSender(account)) return _tOwned[account]; return _tokenFromReflection(_rOwned[account]); } modifier onlyInitialDistributionAddress() { require(msg.sender == initialDistributionAddress, "!initialDistributionAddress"); _; } // re-distribution rfi logic function _tokenFromReflection(uint256 rAmount) internal view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } /** * @dev Unpauses all transfers from the distribution address (initial liquidity pool). */ function unpause() external virtual onlyInitialDistributionAddress { super._unpause(); } /** * @dev Min time elapsed before twap is updated. */ function setMinDeltaTwap(uint256 _minDeltaTwap) public onlyOwner { minDeltaTwap = _minDeltaTwap; } /** * @dev Initializes the TWAP cumulative values for the burn curve. */ function initializeTwap() external onlyInitialDistributionAddress { require(blockTimestampLast == 0, "twap already initialized"); (uint256 price0Cumulative, uint256 price1Cumulative, uint32 blockTimestamp) = HyperSwapOracleLibrary.currentCumulativePrices(hyperSwapPair); uint256 priceCumulative = isThisToken0 ? price1Cumulative : price0Cumulative; blockTimestampLast = blockTimestamp; priceCumulativeLast = priceCumulative; priceAverageLast = INITIAL_TOKENS_PER_FTM; } /** * @dev whitelist and exclude */ function setWhitelistedSender(address _address, bool _whitelisted) public onlyOwner { if(_whitelisted == true) { whitelistedSenders[_address] = _whitelisted; if(_rOwned[_address] > 0) { _tOwned[_address] = _tokenFromReflection(_rOwned[_address]); } _isExcluded[_address] = _whitelisted; _excluded.push(_address); } else { whitelistedSenders[_address] = _whitelisted; for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == _address) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[_address] = 0; _isExcluded[_address] = _whitelisted; _excluded.pop(); break; } } } } function _distributeTokens( address _initialDistributionAddress ) internal { // Initial Supply setWhitelistedSender(_initialDistributionAddress, true); _tOwned[_initialDistributionAddress] = _tTotal; _rOwned[_initialDistributionAddress] = _rTotal; emit Transfer(address(0), _initialDistributionAddress, _tTotal); } function _createBurnReservesVault(address _burnReservesAddress) internal { burnReservesVault = new TokenTimelock(_burnReservesAddress, block.timestamp + 14 days); setWhitelistedSender(address(burnReservesVault), true); } function _initializePair() internal { (address token0, address token1) = HyperSwapLibrary.sortTokens(address(this), address(WFTM)); isThisToken0 = (token0 == address(this)); hyperSwapPair = HyperSwapLibrary.pairFor(hyperSwapFactory, token0, token1); setWhitelistedSender(hyperSwapPair, true); } /** * @dev RFI compatible burns */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); uint256 currentRate = _getRate(); uint256 rBurningAmount = amount.mul(currentRate); _tTotal = _tTotal.sub(amount); _rTotal = _rTotal.sub(rBurningAmount); emit Transfer(account, address(0), amount); } //Set pair contract address manually function setPairAddr(address pairaddr) public onlyOwner { (address token0, address token1) = HyperSwapLibrary.sortTokens(address(this), address(WFTM)); require(token1 != address(0),"token1 is address 0"); isThisToken0 = (token0 == address(this)); hyperSwapPair = pairaddr; setWhitelistedSender(hyperSwapPair, true); } function _isWhitelistedSender(address _sender) internal view returns (bool) { return whitelistedSenders[_sender]; } function _updateTwap() internal virtual returns (uint256) { (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) = HyperSwapOracleLibrary.currentCumulativePrices(hyperSwapPair); uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired if (timeElapsed > minDeltaTwap) { uint256 priceCumulative = isThisToken0 ? price1Cumulative : price0Cumulative; // cumulative price is in (uq112x112 price * seconds) units so we simply wrap it after division by time elapsed FixedPoint.uq112x112 memory priceAverage = FixedPoint.uq112x112( uint224((priceCumulative - priceCumulativeLast) / timeElapsed) ); priceCumulativeLast = priceCumulative; blockTimestampLast = blockTimestamp; priceAverageLast = FixedPoint.decode144(FixedPoint.mul(priceAverage, 1 ether)); emit TwapUpdated(priceCumulativeLast, blockTimestampLast, priceAverageLast); } return priceAverageLast; } function _transfer(address sender, address recipient, uint256 amount) internal virtual override whenNotPausedOrInitialDistribution() { uint256 currentRate = _getRate(); if (!_isWhitelistedSender(sender) && !_isWhitelistedSender(recipient)) { uint256 scaleFactor = 1e18; uint256 currentAmountOutPerEth = _updateTwap(); uint256 currentBurnPct = BURN_PCT.mul(scaleFactor); if (currentAmountOutPerEth < INITIAL_TOKENS_PER_FTM) { // 50 / (INITIAL_TOKENS_PER_FTM / currentAmountOutPerEth) scaleFactor = 1e9; currentBurnPct = currentBurnPct.mul(scaleFactor) .div(INITIAL_TOKENS_PER_FTM.mul(1e18) .div(currentAmountOutPerEth)); uint256 minBurnPct = MIN_BURN_PCT * scaleFactor / 10; currentBurnPct = currentBurnPct > minBurnPct ? currentBurnPct : minBurnPct; } uint256 totalBurnAmount = amount.mul(currentBurnPct).div(100).div(scaleFactor); uint256 burnReserveAmount = totalBurnAmount.mul(BURN_RESERVE_PCT).div(100); uint256 tFee = totalBurnAmount.mul(REDIST_PCT).div(100); uint256 burnAmount = burnReserveAmount; uint256 redistributionAmount = tFee.mul(currentRate); _rOwned[sender] = _rOwned[sender].sub(amount.mul(currentRate)); uint256 amount2 = amount.sub(totalBurnAmount); _rOwned[recipient] = _rOwned[recipient].add(amount2.mul(currentRate)); _distributeFee(redistributionAmount, tFee); _tOwned[address(burnReservesVault)] = _tOwned[address(burnReservesVault)].add(burnReserveAmount); _rOwned[address(burnReservesVault)] = _rOwned[address(burnReservesVault)].add(burnReserveAmount.mul(currentRate)); emit Transfer(sender, address(burnReservesVault), burnReserveAmount); _burn(sender, burnAmount); emit Transfer(sender, recipient, amount2); } else if (!_isWhitelistedSender(sender) && _isWhitelistedSender(recipient)) { uint256 scaleFactor = 1e18; uint256 currentAmountOutPerEth = _updateTwap(); uint256 currentBurnPct = BURN_PCT.mul(scaleFactor); if (currentAmountOutPerEth < INITIAL_TOKENS_PER_FTM) { // 50 / (INITIAL_TOKENS_PER_FTM / currentAmountOutPerEth) scaleFactor = 1e9; currentBurnPct = currentBurnPct.mul(scaleFactor) .div(INITIAL_TOKENS_PER_FTM.mul(1e18) .div(currentAmountOutPerEth)); uint256 minBurnPct = MIN_BURN_PCT * scaleFactor / 10; currentBurnPct = currentBurnPct > minBurnPct ? currentBurnPct : minBurnPct; } uint256 totalBurnAmount = amount.mul(currentBurnPct).div(100).div(scaleFactor); uint256 burnReserveAmount = totalBurnAmount.mul(BURN_RESERVE_PCT).div(100); uint256 tFee = totalBurnAmount.mul(REDIST_PCT).div(100); uint256 burnAmount = burnReserveAmount; uint256 redistributionAmount = tFee.mul(currentRate); _rOwned[sender] = _rOwned[sender].sub(amount.mul(currentRate)); uint256 amount2 = amount.sub(totalBurnAmount); _tOwned[recipient] = _tOwned[recipient].add(amount2); _rOwned[recipient] = _rOwned[recipient].add(amount2.mul(currentRate)); _distributeFee(redistributionAmount, tFee); _tOwned[address(burnReservesVault)] = _tOwned[address(burnReservesVault)].add(burnReserveAmount); _rOwned[address(burnReservesVault)] = _rOwned[address(burnReservesVault)].add(burnReserveAmount.mul(currentRate)); emit Transfer(sender, address(burnReservesVault), burnReserveAmount); _burn(sender, burnAmount); emit Transfer(sender, recipient, amount2); } else if (_isWhitelistedSender(sender) && _isWhitelistedSender(recipient)) { _tOwned[sender] = _tOwned[sender].sub(amount); _rOwned[sender] = _rOwned[sender].sub(amount.mul(currentRate)); _tOwned[recipient] = _tOwned[recipient].add(amount); _rOwned[recipient] = _rOwned[recipient].add(amount.mul(currentRate)); emit Transfer(sender, recipient, amount); } else { _tOwned[sender] = _tOwned[sender].sub(amount); _rOwned[sender] = _rOwned[sender].sub(amount.mul(currentRate)); _rOwned[recipient] = _rOwned[recipient].add(amount.mul(currentRate)); emit Transfer(sender, recipient, amount); } } function _distributeFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } // view burn percentage function currentBurnPercent() public view returns (uint256) { uint256 scaleFactor = 1e18; uint256 currentAmountOutPerEth = getLastTwap(); uint256 currentBurnPct = BURN_PCT.mul(scaleFactor); if (currentAmountOutPerEth < INITIAL_TOKENS_PER_FTM) { // 50 / (INITIAL_TOKENS_PER_FTM / currentAmountOutPerEth) scaleFactor = 1e9; currentBurnPct = currentBurnPct.mul(scaleFactor) .div(INITIAL_TOKENS_PER_FTM.mul(1e18) .div(currentAmountOutPerEth)); uint256 minBurnPct = MIN_BURN_PCT * scaleFactor / 10; currentBurnPct = currentBurnPct > minBurnPct ? currentBurnPct : minBurnPct; } return currentBurnPct; } function getCurrentTwap() public view returns (uint256) { (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) = HyperSwapOracleLibrary.currentCumulativePrices(hyperSwapPair); uint32 timeElapsed = blockTimestamp - blockTimestampLast; uint256 priceCumulative = isThisToken0 ? price1Cumulative : price0Cumulative; FixedPoint.uq112x112 memory priceAverage = FixedPoint.uq112x112( uint224((priceCumulative - priceCumulativeLast) / timeElapsed) ); return FixedPoint.decode144(FixedPoint.mul(priceAverage, 1 ether)); } function getLastTwap() public view returns (uint256) { return priceAverageLast; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_minDeltaTwap","type":"uint256"},{"internalType":"address","name":"_initialDistributionAddress","type":"address"},{"internalType":"address","name":"_burnReservesAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"priceCumulativeLast","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"blockTimestampLast","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"priceAverageLast","type":"uint256"}],"name":"TwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"WFTM","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"blockTimestampLast","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnReservesAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnReservesVault","outputs":[{"internalType":"contract TokenTimelock","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentBurnPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentTwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastTwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hyperSwapFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hyperSwapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialDistributionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initializeTwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isThisToken0","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDeltaTwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceAverageLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceCumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minDeltaTwap","type":"uint256"}],"name":"setMinDeltaTwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pairaddr","type":"address"}],"name":"setPairAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalHyperDrops","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedSenders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c06040526a084595161401484a000000601055620000306002601054620001b960201b620013c71790919060201c565b196011553480156200004157600080fd5b5060405162003e2b38038062003e2b833981810160405260608110156200006757600080fd5b50805160208083015160409384015184518086018652600b81526a48797065724175726f726160a81b818501908152865180880190975260068752654155524f524160d01b948701949094528051949592949193909291620000cc9160039162000cd8565b508051620000e290600490602084019062000cd8565b50506005805460ff19166012179055506000620000fe62000220565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506005805460ff60a81b191690556200016c8362000224565b6001600160601b0319606083811b821660a05282901b1660805262000191816200028a565b6200019c8262000301565b620001a662000377565b620001b062000427565b50505062000d82565b600082620001ca575060006200021a565b82820282848281620001d857fe5b0414620002175760405162461bcd60e51b815260040180806020018281038252602181526020018062003dc56021913960400191505060405180910390fd5b90505b92915050565b3390565b6200022e62000220565b60055461010090046001600160a01b0390811691161462000285576040805162461bcd60e51b8152602060048201819052602482015260008051602062003de6833981519152604482015290519081900360640190fd5b600f55565b804262127500016040516200029f9062000d5d565b6001600160a01b0390921682526020820152604080519182900301906000f080158015620002d1573d6000803e3d6000fd5b50600680546001600160a01b0319166001600160a01b039283161790819055620002fe91166001620004d5565b50565b6200030e816001620004d5565b601080546001600160a01b0383166000818152600960209081526040808320949094556011546008825284832055935483519081529251919390927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a350565b600080620003a5307321be370d5312f44cb42ce377bc9b8a0cef1a4c836200074960201b620014271760201c565b600c805460ff60a01b1916306001600160a01b03851614600160a01b021790559092509050620003f773991152411a7b5a14a8cf0cdde8439435328070df83836200082c602090811b6200150517901c565b600c80546001600160a01b0319166001600160a01b0392831617908190556200042391166001620004d5565b5050565b600554600160a81b900460ff16156200047a576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005805460ff60a81b1916600160a81b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620004b862000220565b604080516001600160a01b039092168252519081900360200190a1565b620004df62000220565b60055461010090046001600160a01b0390811691161462000536576040805162461bcd60e51b8152602060048201819052602482015260008051602062003de6833981519152604482015290519081900360640190fd5b600181151514156200061e576001600160a01b0382166000908152600760209081526040808320805460ff1916851515179055600890915290205415620005b5576001600160a01b0382166000908152600860205260409020546200059b9062000900565b6001600160a01b0383166000908152600960205260409020555b6001600160a01b0382166000818152600a60205260408120805460ff1916841515179055600b805460018101825591527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b031916909117905562000423565b6001600160a01b0382166000908152600760205260408120805460ff19168315151790555b600b548110156200074457826001600160a01b0316600b82815481106200066657fe5b6000918252602090912001546001600160a01b031614156200073b57600b805460001981019081106200069557fe5b600091825260209091200154600b80546001600160a01b039092169183908110620006bc57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600982526040808220829055600a90925220805460ff1916831515179055600b8054806200071357fe5b600082815260209020810160001990810180546001600160a01b031916905501905562000744565b60010162000643565b505050565b600080826001600160a01b0316846001600160a01b031614156200079f5760405162461bcd60e51b815260040180806020018281038252602581526020018062003e066025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610620007c1578284620007c4565b83835b90925090506001600160a01b03821662000825576040805162461bcd60e51b815260206004820152601e60248201527f4879706572537761704c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b600080806200083c858562000749565b604080516001600160601b0319606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fc7afa4a3485a5e46a8e6c01f3d79956707846c2145019cf4004d190147370afe609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6000601154821115620009455760405162461bcd60e51b815260040180806020018281038252602a81526020018062003d9b602a913960400191505060405180910390fd5b60006200095162000974565b90506200096d8184620009a760201b620015dd1790919060201c565b9392505050565b6000808062000982620009f1565b91509150620009a08183620009a760201b620015dd1790919060201c565b9250505090565b60006200021783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000b8a60201b60201c565b6011546010546000918291825b600b5481101562000b47578260086000600b848154811062000a1c57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000a8357508160096000600b848154811062000a5c57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000a9c576011546010549450945050505062000b86565b62000aeb60086000600b848154811062000ab257fe5b60009182526020808320909101546001600160a01b0316835282810193909352604090910190205485916200161f62000c31821b17901c565b925062000b3c60096000600b848154811062000b0357fe5b60009182526020808320909101546001600160a01b0316835282810193909352604090910190205484916200161f62000c31821b17901c565b9150600101620009fe565b5062000b66601054601154620009a760201b620015dd1790919060201c565b82101562000b805760115460105493509350505062000b86565b90925090505b9091565b6000818362000c1a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000bde57818101518382015260200162000bc4565b50505050905090810190601f16801562000c0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000c2757fe5b0495945050505050565b60006200021783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000c7b60201b60201c565b6000818484111562000cd05760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831562000bde57818101518382015260200162000bc4565b505050900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000d1b57805160ff191683800117855562000d4b565b8280016001018555821562000d4b579182015b8281111562000d4b57825182559160200191906001019062000d2e565b5062000d5992915062000d6b565b5090565b610602806200379983390190565b5b8082111562000d59576000815560010162000d6c565b60805160601c60a05160601c6129de62000dbb600039806106245280610b7b5280611152528061176b525080610cbb52506129de6000f3fe608060405234801561001057600080fd5b50600436106102765760003560e01c806355f443fd11610160578063a457c2d7116100d8578063c5700a021161008c578063dd62ed3e11610071578063dd62ed3e146105c6578063e379c31b146105f4578063f2fde38b146105fc57610276565b8063c5700a021461059d578063cfc2d3d2146105be57610276565b8063a9059cbb116100bd578063a9059cbb14610561578063aaf3a6961461058d578063ab4d125f1461059557610276565b8063a457c2d71461050f578063a858edff1461053b57610276565b8063665269eb1161012f578063715018a611610114578063715018a6146104f75780638da5cb5b146104ff57806395d89b411461050757610276565b8063665269eb146104c957806370a08231146104d157610276565b806355f443fd146104945780635c975abb1461049c5780635f8ee763146104a4578063655cf043146104ac57610276565b80632f43c1bc116101f35780633a014f70116101c25780633f4ba83a116101a75780633f4ba83a1461047c5780634539c423146104845780634f0da73b1461048c57610276565b80633a014f701461046c5780633c9f861d1461047457610276565b80632f43c1bc14610412578063313ce5671461041a57806331bdda9914610438578063395093511461044057610276565b806318160ddd1161024a57806323b872dd1161022f57806323b872dd14610386578063272efc69146103bc57806329923838146103e257610276565b806318160ddd1461036457806321dbe8761461037e57610276565b8062c2f35e1461027b57806306fdde031461029f578063095ea7b31461031c5780630af85b7d1461035c575b600080fd5b610283610622565b604080516001600160a01b039092168252519081900360200190f35b6102a7610646565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102e15781810151838201526020016102c9565b50505050905090810190601f16801561030e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103486004803603604081101561033257600080fd5b506001600160a01b0381351690602001356106dc565b604080519115158252519081900360200190f35b6102836106fa565b61036c610709565b60408051918252519081900360200190f35b61028361070f565b6103486004803603606081101561039c57600080fd5b506001600160a01b03813581169160208101359091169060400135610727565b610348600480360360208110156103d257600080fd5b50356001600160a01b03166107ae565b610410600480360360408110156103f857600080fd5b506001600160a01b03813516906020013515156107c3565b005b61036c610a60565b610422610a66565b6040805160ff9092168252519081900360200190f35b61036c610a6f565b6103486004803603604081101561045657600080fd5b506001600160a01b038135169060200135610af7565b610283610b45565b61036c610b5d565b610410610b70565b61036c610bf7565b610283610cb9565b61036c610cdd565b610348610ce3565b61036c610cf3565b610410600480360360208110156104c257600080fd5b5035610cf9565b610283610d6d565b61036c600480360360208110156104e757600080fd5b50356001600160a01b0316610d7c565b610410610dd5565b610283610ea1565b6102a7610eb5565b6103486004803603604081101561052557600080fd5b506001600160a01b038135169060200135610f16565b6104106004803603602081101561055157600080fd5b50356001600160a01b0316610f7e565b6103486004803603604081101561057757600080fd5b506001600160a01b0381351690602001356110d9565b6103486110ed565b61036c6110fd565b6105a5611103565b6040805163ffffffff9092168252519081900360200190f35b61036c611116565b61036c600480360360408110156105dc57600080fd5b506001600160a01b038135811691602001351661111c565b610410611147565b6104106004803603602081101561061257600080fd5b50356001600160a01b031661129f565b7f000000000000000000000000000000000000000000000000000000000000000081565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106d25780601f106106a7576101008083540402835291602001916106d2565b820191906000526020600020905b8154815290600101906020018083116106b557829003601f168201915b5050505050905090565b60006106f06106e9611661565b8484611665565b5060015b92915050565b6006546001600160a01b031681565b60105490565b7321be370d5312f44cb42ce377bc9b8a0cef1a4c8381565b6000610734848484611751565b6107a484610740611661565b61079f856040518060600160405280602881526020016128cf602891396001600160a01b038a1660009081526001602052604081209061077e611661565b6001600160a01b031681526020810191909152604001600020549190611e47565b611665565b5060019392505050565b60076020526000908152604090205460ff1681565b6107cb611661565b60055461010090046001600160a01b03908116911614610832576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60018115151415610922576001600160a01b0382166000908152600760209081526040808320805460ff19168515151790556008909152902054156108ad576001600160a01b03821660009081526008602052604090205461089390611ede565b6001600160a01b0383166000908152600960205260409020555b6001600160a01b0382166000818152600a60205260408120805460ff1916841515179055600b805460018101825591527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901805473ffffffffffffffffffffffffffffffffffffffff19169091179055610a5c565b6001600160a01b0382166000908152600760205260408120805460ff19168315151790555b600b54811015610a5a57826001600160a01b0316600b828154811061096857fe5b6000918252602090912001546001600160a01b03161415610a5257600b8054600019810190811061099557fe5b600091825260209091200154600b80546001600160a01b0390921691839081106109bb57fe5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600982526040808220829055600a90925220805460ff1916831515179055600b805480610a1e57fe5b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055610a5a565b600101610947565b505b5050565b600d5481565b60055460ff1690565b6000670de0b6b3a764000081610a83611116565b90506000610a92600f846113c7565b9050670de0b6b3a7640000821015610af057633b9aca009250610ad4610aca83610ac4670de0b6b3a7640000806113c7565b906115dd565b610ac483866113c7565b9050600a6005840204808211610aea5780610aec565b815b9150505b9250505090565b60006106f0610b04611661565b8461079f8560016000610b15611661565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611f37565b73991152411a7b5a14a8cf0cdde8439435328070df81565b6010546a084595161401484a0000000390565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bed576040805162461bcd60e51b815260206004820152601b60248201527f21696e697469616c446973747269627574696f6e416464726573730000000000604482015290519081900360640190fd5b610bf5611f91565b565b600c54600090819081908190610c15906001600160a01b031661205d565b600c549295509093509150600160a81b810463ffffffff16820390600090600160a01b900460ff16610c475784610c49565b835b9050610c536127f0565b60405180602001604052808463ffffffff16600d54850381610c7157fe5b046001600160e01b03168152509050610c9a610c9582670de0b6b3a764000061225e565b6122dc565b71ffffffffffffffffffffffffffffffffffff16965050505050505090565b7f000000000000000000000000000000000000000000000000000000000000000081565b60125490565b600554600160a81b900460ff1690565b600e5481565b610d01611661565b60055461010090046001600160a01b03908116911614610d68576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600f55565b600c546001600160a01b031681565b6000610d87826122e3565b15610dab57506001600160a01b038116600090815260096020526040902054610dd0565b6001600160a01b038216600090815260086020526040902054610dcd90611ede565b90505b919050565b610ddd611661565b60055461010090046001600160a01b03908116911614610e44576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805474ffffffffffffffffffffffffffffffffffffffff0019169055565b60055461010090046001600160a01b031690565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106d25780601f106106a7576101008083540402835291602001916106d2565b60006106f0610f23611661565b8461079f856040518060600160405280602581526020016129846025913960016000610f4d611661565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611e47565b610f86611661565b60055461010090046001600160a01b03908116911614610fed576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60008061100e307321be370d5312f44cb42ce377bc9b8a0cef1a4c83611427565b90925090506001600160a01b03811661106e576040805162461bcd60e51b815260206004820152601360248201527f746f6b656e312069732061646472657373203000000000000000000000000000604482015290519081900360640190fd5b600c80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16306001600160a01b0385811691909114600160a01b029190911773ffffffffffffffffffffffffffffffffffffffff19168582161791829055610a5a911660016107c3565b60006106f06110e6611661565b8484611751565b600c54600160a01b900460ff1681565b600f5481565b600c54600160a81b900463ffffffff1681565b600e5490565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111c4576040805162461bcd60e51b815260206004820152601b60248201527f21696e697469616c446973747269627574696f6e416464726573730000000000604482015290519081900360640190fd5b600c54600160a81b900463ffffffff1615611226576040805162461bcd60e51b815260206004820152601860248201527f7477617020616c726561647920696e697469616c697a65640000000000000000604482015290519081900360640190fd5b600c5460009081908190611242906001600160a01b031661205d565b9250925092506000600c60149054906101000a900460ff166112645783611266565b825b600c805463ffffffff909416600160a81b0263ffffffff60a81b199094169390931790925550600d555050670de0b6b3a7640000600e55565b6112a7611661565b60055461010090046001600160a01b0390811691161461130e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166113535760405162461bcd60e51b81526004018080602001828103825260268152602001806128406026913960400191505060405180910390fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6000826113d6575060006106f4565b828202828482816113e357fe5b04146114205760405162461bcd60e51b81526004018080602001828103825260218152602001806128ae6021913960400191505060405180910390fd5b9392505050565b600080826001600160a01b0316846001600160a01b0316141561147b5760405162461bcd60e51b815260040180806020018281038252602581526020018061295f6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061149b57828461149e565b83835b90925090506001600160a01b0382166114fe576040805162461bcd60e51b815260206004820152601e60248201527f4879706572537761704c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b60008060006115148585611427565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fc7afa4a3485a5e46a8e6c01f3d79956707846c2145019cf4004d190147370afe609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b600061142083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612301565b600061142083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e47565b3390565b6001600160a01b0383166116aa5760405162461bcd60e51b815260040180806020018281038252602481526020018061293b6024913960400191505060405180910390fd5b6001600160a01b0382166116ef5760405162461bcd60e51b81526004018080602001828103825260228152602001806128666022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b611759610ce3565b158061178d5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6117c85760405162461bcd60e51b81526004018080602001828103825260268152602001806128886026913960400191505060405180910390fd5b60006117d2612366565b90506117dd846122e3565b1580156117f057506117ee836122e3565b155b15611ac357670de0b6b3a76400006000611808612382565b90506000611817600f846113c7565b9050670de0b6b3a764000082101561186557633b9aca009250611849610aca83610ac4670de0b6b3a7640000806113c7565b9050600a600584020480821161185f5780611861565b815b9150505b600061187884610ac46064818a876113c7565b9050600061188c6064610ac48460196113c7565b905060006118a06064610ac48560326113c7565b90508160006118af838a6113c7565b90506118dd6118be8b8b6113c7565b6001600160a01b038e166000908152600860205260409020549061161f565b6001600160a01b038d166000908152600860205260408120919091556119038b8761161f565b9050611931611912828c6113c7565b6001600160a01b038e1660009081526008602052604090205490611f37565b6001600160a01b038d1660009081526008602052604090205561195482856124cf565b6006546001600160a01b03166000908152600960205260409020546119799086611f37565b6006546001600160a01b03166000908152600960205260409020556119c26119a1868c6113c7565b6006546001600160a01b031660009081526008602052604090205490611f37565b60086000600660009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550600660009054906101000a90046001600160a01b03166001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a3611a6a8d846124f3565b8b6001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050505050505050611e41565b611acc846122e3565b158015611add5750611add836122e3565b15611c1d57670de0b6b3a76400006000611af5612382565b90506000611b04600f846113c7565b9050670de0b6b3a7640000821015611b5257633b9aca009250611b36610aca83610ac4670de0b6b3a7640000806113c7565b9050600a6005840204808211611b4c5780611b4e565b815b9150505b6000611b6584610ac46064818a876113c7565b90506000611b796064610ac48460196113c7565b90506000611b8d6064610ac48560326113c7565b9050816000611b9c838a6113c7565b9050611bab6118be8b8b6113c7565b6001600160a01b038d16600090815260086020526040812091909155611bd18b8761161f565b6001600160a01b038d16600090815260096020526040902054909150611bf79082611f37565b6001600160a01b038d16600090815260096020526040902055611931611912828c6113c7565b611c26846122e3565b8015611c365750611c36836122e3565b15611d7a576001600160a01b038416600090815260096020526040902054611c5e908361161f565b6001600160a01b038516600090815260096020526040902055611ca3611c8483836113c7565b6001600160a01b0386166000908152600860205260409020549061161f565b6001600160a01b03808616600090815260086020908152604080832094909455918616815260099091522054611cd99083611f37565b6001600160a01b038416600090815260096020526040902055611d1e611cff83836113c7565b6001600160a01b03851660009081526008602052604090205490611f37565b6001600160a01b0380851660008181526008602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3611e41565b6001600160a01b038416600090815260096020526040902054611d9d908361161f565b6001600160a01b038516600090815260096020526040902055611dc3611c8483836113c7565b6001600160a01b038516600090815260086020526040902055611de9611cff83836113c7565b6001600160a01b0380851660008181526008602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35b50505050565b60008184841115611ed65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e9b578181015183820152602001611e83565b50505050905090810190601f168015611ec85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000601154821115611f215760405162461bcd60e51b815260040180806020018281038252602a815260200180612816602a913960400191505060405180910390fd5b6000611f2b612366565b905061142083826115dd565b600082820183811015611420576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600554600160a81b900460ff16611fef576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612040611661565b604080516001600160a01b039092168252519081900360200190a1565b600080600061206a6125ba565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b1580156120a557600080fd5b505afa1580156120b9573d6000803e3d6000fd5b505050506040513d60208110156120cf57600080fd5b5051604080517f5a3d549300000000000000000000000000000000000000000000000000000000815290519194506001600160a01b03861691635a3d549391600480820192602092909190829003018186803b15801561212e57600080fd5b505afa158015612142573d6000803e3d6000fd5b505050506040513d602081101561215857600080fd5b5051604080517f0902f1ac0000000000000000000000000000000000000000000000000000000081529051919350600091829182916001600160a01b03891691630902f1ac916004808301926060929190829003018186803b1580156121bd57600080fd5b505afa1580156121d1573d6000803e3d6000fd5b505050506040513d60608110156121e757600080fd5b5080516020820151604090920151909450909250905063ffffffff808216908516146122545780840363ffffffff811661222184866125c4565b516001600160e01b031602969096019563ffffffff811661224285856125c4565b516001600160e01b0316029590950194505b5050509193909250565b612266612802565b600082158061228c57505082516001600160e01b03168281029083828161228957fe5b04145b6122c75760405162461bcd60e51b81526004018080602001828103825260238152602001806129186023913960400191505060405180910390fd5b60408051602081019091529081529392505050565b5160701c90565b6001600160a01b031660009081526007602052604090205460ff1690565b600081836123505760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e9b578181015183820152602001611e83565b50600083858161235c57fe5b0495945050505050565b600080600061237361268d565b9092509050610af082826115dd565b600c546000908190819081906123a0906001600160a01b031661205d565b600c54600f54939650919450925063ffffffff600160a81b909104811683039190821611156124c357600c54600090600160a01b900460ff166123e357846123e5565b835b90506123ef6127f0565b60405180602001604052808463ffffffff16600d5485038161240d57fe5b046001600160e01b03169052600d839055600c805463ffffffff60a81b1916600160a81b63ffffffff8816021790559050612453610c9582670de0b6b3a764000061225e565b71ffffffffffffffffffffffffffffffffffff16600e819055600d54600c5460408051928352600160a81b90910463ffffffff1660208301528181019290925290517f9cfe07a59ebb9a772e1fee2abd40b53001de7c2f0b2e713de333f564118c32c4916060908290030190a150505b600e5494505050505090565b6011546124dc908361161f565b6011556012546124ec9082611f37565b6012555050565b6001600160a01b0382166125385760405162461bcd60e51b81526004018080602001828103825260218152602001806128f76021913960400191505060405180910390fd5b6000612542612366565b9050600061255083836113c7565b601054909150612560908461161f565b601055601154612570908261161f565b6011556040805184815290516000916001600160a01b038716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350505050565b63ffffffff421690565b6125cc6127f0565b6000826dffffffffffffffffffffffffffff1611612631576040805162461bcd60e51b815260206004820152601760248201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604482015290519081900360640190fd5b6040805160208101909152806dffffffffffffffffffffffffffff84167bffffffffffffffffffffffffffff0000000000000000000000000000607087901b168161267857fe5b046001600160e01b0316815250905092915050565b6011546010546000918291825b600b548110156127be578260086000600b84815481106126b657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061271b57508160096000600b84815481106126f457fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561273257601154601054945094505050506127ec565b61277260086000600b848154811061274657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061161f565b92506127b460096000600b848154811061278857fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061161f565b915060010161269a565b506010546011546127ce916115dd565b8210156127e6576011546010549350935050506127ec565b90925090505b9091565b60408051602081019091526000815290565b604051806020016040528060008152509056fe416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373217061757365642026262021696e697469616c446973747269627574696f6e41646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f20616464726573734669786564506f696e743a204d554c5449504c49434154494f4e5f4f564552464c4f5745524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734879706572537761704c6962726172793a204944454e544943414c5f41444452455353455345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cf113d12075769f7eb0d253a21bc7178167f801fc6cf920f8c20ded54dd37fa864736f6c634300060c003360c060405234801561001057600080fd5b506040516106023803806106028339818101604052604081101561003357600080fd5b50805160209091015142811161004857600080fd5b606082901b6001600160601b03191660805260a08190526001600160a01b03909116906105716100916000398060ae52806101be52508061016f528061019a52506105716000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063191655871461004657806338af3eed1461006e578063b91d400114610092575b600080fd5b61006c6004803603602081101561005c57600080fd5b50356001600160a01b03166100ac565b005b610076610198565b604080516001600160a01b039092168252519081900360200190f35b61009a6101bc565b60408051918252519081900360200190f35b7f00000000000000000000000000000000000000000000000000000000000000004210156100d957600080fd5b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561012857600080fd5b505afa15801561013c573d6000803e3d6000fd5b505050506040513d602081101561015257600080fd5b505190508061016057600080fd5b6101946001600160a01b0383167f0000000000000000000000000000000000000000000000000000000000000000836101e0565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610260908490610265565b505050565b60606102ba826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166103169092919063ffffffff16565b805190915015610260578080602001905160208110156102d957600080fd5b50516102605760405162461bcd60e51b815260040180806020018281038252602a815260200180610512602a913960400191505060405180910390fd5b6060610325848460008561032d565b949350505050565b6060610338856104d8565b610389576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106103c85780518252601f1990920191602091820191016103a9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461042a576040519150601f19603f3d011682016040523d82523d6000602084013e61042f565b606091505b509150915081156104435791506103259050565b8051156104535780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561049d578181015183820152602001610485565b50505050905090810190601f1680156104ca5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061032557505015159291505056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220d66d11deb566e04b0b69ef8b8e963d8319bf1c89db799253582c70b200afd75d64736f6c634300060c0033416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724879706572537761704c6962726172793a204944454e544943414c5f414444524553534553000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000c880a9b8a06c4a24245795d585a04ebdadb28c790000000000000000000000006b2818f074b901726a83d9bcf577cb33ea711510
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102765760003560e01c806355f443fd11610160578063a457c2d7116100d8578063c5700a021161008c578063dd62ed3e11610071578063dd62ed3e146105c6578063e379c31b146105f4578063f2fde38b146105fc57610276565b8063c5700a021461059d578063cfc2d3d2146105be57610276565b8063a9059cbb116100bd578063a9059cbb14610561578063aaf3a6961461058d578063ab4d125f1461059557610276565b8063a457c2d71461050f578063a858edff1461053b57610276565b8063665269eb1161012f578063715018a611610114578063715018a6146104f75780638da5cb5b146104ff57806395d89b411461050757610276565b8063665269eb146104c957806370a08231146104d157610276565b806355f443fd146104945780635c975abb1461049c5780635f8ee763146104a4578063655cf043146104ac57610276565b80632f43c1bc116101f35780633a014f70116101c25780633f4ba83a116101a75780633f4ba83a1461047c5780634539c423146104845780634f0da73b1461048c57610276565b80633a014f701461046c5780633c9f861d1461047457610276565b80632f43c1bc14610412578063313ce5671461041a57806331bdda9914610438578063395093511461044057610276565b806318160ddd1161024a57806323b872dd1161022f57806323b872dd14610386578063272efc69146103bc57806329923838146103e257610276565b806318160ddd1461036457806321dbe8761461037e57610276565b8062c2f35e1461027b57806306fdde031461029f578063095ea7b31461031c5780630af85b7d1461035c575b600080fd5b610283610622565b604080516001600160a01b039092168252519081900360200190f35b6102a7610646565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102e15781810151838201526020016102c9565b50505050905090810190601f16801561030e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103486004803603604081101561033257600080fd5b506001600160a01b0381351690602001356106dc565b604080519115158252519081900360200190f35b6102836106fa565b61036c610709565b60408051918252519081900360200190f35b61028361070f565b6103486004803603606081101561039c57600080fd5b506001600160a01b03813581169160208101359091169060400135610727565b610348600480360360208110156103d257600080fd5b50356001600160a01b03166107ae565b610410600480360360408110156103f857600080fd5b506001600160a01b03813516906020013515156107c3565b005b61036c610a60565b610422610a66565b6040805160ff9092168252519081900360200190f35b61036c610a6f565b6103486004803603604081101561045657600080fd5b506001600160a01b038135169060200135610af7565b610283610b45565b61036c610b5d565b610410610b70565b61036c610bf7565b610283610cb9565b61036c610cdd565b610348610ce3565b61036c610cf3565b610410600480360360208110156104c257600080fd5b5035610cf9565b610283610d6d565b61036c600480360360208110156104e757600080fd5b50356001600160a01b0316610d7c565b610410610dd5565b610283610ea1565b6102a7610eb5565b6103486004803603604081101561052557600080fd5b506001600160a01b038135169060200135610f16565b6104106004803603602081101561055157600080fd5b50356001600160a01b0316610f7e565b6103486004803603604081101561057757600080fd5b506001600160a01b0381351690602001356110d9565b6103486110ed565b61036c6110fd565b6105a5611103565b6040805163ffffffff9092168252519081900360200190f35b61036c611116565b61036c600480360360408110156105dc57600080fd5b506001600160a01b038135811691602001351661111c565b610410611147565b6104106004803603602081101561061257600080fd5b50356001600160a01b031661129f565b7f000000000000000000000000c880a9b8a06c4a24245795d585a04ebdadb28c7981565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106d25780601f106106a7576101008083540402835291602001916106d2565b820191906000526020600020905b8154815290600101906020018083116106b557829003601f168201915b5050505050905090565b60006106f06106e9611661565b8484611665565b5060015b92915050565b6006546001600160a01b031681565b60105490565b7321be370d5312f44cb42ce377bc9b8a0cef1a4c8381565b6000610734848484611751565b6107a484610740611661565b61079f856040518060600160405280602881526020016128cf602891396001600160a01b038a1660009081526001602052604081209061077e611661565b6001600160a01b031681526020810191909152604001600020549190611e47565b611665565b5060019392505050565b60076020526000908152604090205460ff1681565b6107cb611661565b60055461010090046001600160a01b03908116911614610832576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60018115151415610922576001600160a01b0382166000908152600760209081526040808320805460ff19168515151790556008909152902054156108ad576001600160a01b03821660009081526008602052604090205461089390611ede565b6001600160a01b0383166000908152600960205260409020555b6001600160a01b0382166000818152600a60205260408120805460ff1916841515179055600b805460018101825591527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901805473ffffffffffffffffffffffffffffffffffffffff19169091179055610a5c565b6001600160a01b0382166000908152600760205260408120805460ff19168315151790555b600b54811015610a5a57826001600160a01b0316600b828154811061096857fe5b6000918252602090912001546001600160a01b03161415610a5257600b8054600019810190811061099557fe5b600091825260209091200154600b80546001600160a01b0390921691839081106109bb57fe5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600982526040808220829055600a90925220805460ff1916831515179055600b805480610a1e57fe5b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055610a5a565b600101610947565b505b5050565b600d5481565b60055460ff1690565b6000670de0b6b3a764000081610a83611116565b90506000610a92600f846113c7565b9050670de0b6b3a7640000821015610af057633b9aca009250610ad4610aca83610ac4670de0b6b3a7640000806113c7565b906115dd565b610ac483866113c7565b9050600a6005840204808211610aea5780610aec565b815b9150505b9250505090565b60006106f0610b04611661565b8461079f8560016000610b15611661565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611f37565b73991152411a7b5a14a8cf0cdde8439435328070df81565b6010546a084595161401484a0000000390565b336001600160a01b037f000000000000000000000000c880a9b8a06c4a24245795d585a04ebdadb28c791614610bed576040805162461bcd60e51b815260206004820152601b60248201527f21696e697469616c446973747269627574696f6e416464726573730000000000604482015290519081900360640190fd5b610bf5611f91565b565b600c54600090819081908190610c15906001600160a01b031661205d565b600c549295509093509150600160a81b810463ffffffff16820390600090600160a01b900460ff16610c475784610c49565b835b9050610c536127f0565b60405180602001604052808463ffffffff16600d54850381610c7157fe5b046001600160e01b03168152509050610c9a610c9582670de0b6b3a764000061225e565b6122dc565b71ffffffffffffffffffffffffffffffffffff16965050505050505090565b7f0000000000000000000000006b2818f074b901726a83d9bcf577cb33ea71151081565b60125490565b600554600160a81b900460ff1690565b600e5481565b610d01611661565b60055461010090046001600160a01b03908116911614610d68576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600f55565b600c546001600160a01b031681565b6000610d87826122e3565b15610dab57506001600160a01b038116600090815260096020526040902054610dd0565b6001600160a01b038216600090815260086020526040902054610dcd90611ede565b90505b919050565b610ddd611661565b60055461010090046001600160a01b03908116911614610e44576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805474ffffffffffffffffffffffffffffffffffffffff0019169055565b60055461010090046001600160a01b031690565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106d25780601f106106a7576101008083540402835291602001916106d2565b60006106f0610f23611661565b8461079f856040518060600160405280602581526020016129846025913960016000610f4d611661565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611e47565b610f86611661565b60055461010090046001600160a01b03908116911614610fed576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60008061100e307321be370d5312f44cb42ce377bc9b8a0cef1a4c83611427565b90925090506001600160a01b03811661106e576040805162461bcd60e51b815260206004820152601360248201527f746f6b656e312069732061646472657373203000000000000000000000000000604482015290519081900360640190fd5b600c80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16306001600160a01b0385811691909114600160a01b029190911773ffffffffffffffffffffffffffffffffffffffff19168582161791829055610a5a911660016107c3565b60006106f06110e6611661565b8484611751565b600c54600160a01b900460ff1681565b600f5481565b600c54600160a81b900463ffffffff1681565b600e5490565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b336001600160a01b037f000000000000000000000000c880a9b8a06c4a24245795d585a04ebdadb28c7916146111c4576040805162461bcd60e51b815260206004820152601b60248201527f21696e697469616c446973747269627574696f6e416464726573730000000000604482015290519081900360640190fd5b600c54600160a81b900463ffffffff1615611226576040805162461bcd60e51b815260206004820152601860248201527f7477617020616c726561647920696e697469616c697a65640000000000000000604482015290519081900360640190fd5b600c5460009081908190611242906001600160a01b031661205d565b9250925092506000600c60149054906101000a900460ff166112645783611266565b825b600c805463ffffffff909416600160a81b0263ffffffff60a81b199094169390931790925550600d555050670de0b6b3a7640000600e55565b6112a7611661565b60055461010090046001600160a01b0390811691161461130e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166113535760405162461bcd60e51b81526004018080602001828103825260268152602001806128406026913960400191505060405180910390fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6000826113d6575060006106f4565b828202828482816113e357fe5b04146114205760405162461bcd60e51b81526004018080602001828103825260218152602001806128ae6021913960400191505060405180910390fd5b9392505050565b600080826001600160a01b0316846001600160a01b0316141561147b5760405162461bcd60e51b815260040180806020018281038252602581526020018061295f6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061149b57828461149e565b83835b90925090506001600160a01b0382166114fe576040805162461bcd60e51b815260206004820152601e60248201527f4879706572537761704c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b60008060006115148585611427565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fc7afa4a3485a5e46a8e6c01f3d79956707846c2145019cf4004d190147370afe609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b600061142083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612301565b600061142083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e47565b3390565b6001600160a01b0383166116aa5760405162461bcd60e51b815260040180806020018281038252602481526020018061293b6024913960400191505060405180910390fd5b6001600160a01b0382166116ef5760405162461bcd60e51b81526004018080602001828103825260228152602001806128666022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b611759610ce3565b158061178d5750336001600160a01b037f000000000000000000000000c880a9b8a06c4a24245795d585a04ebdadb28c7916145b6117c85760405162461bcd60e51b81526004018080602001828103825260268152602001806128886026913960400191505060405180910390fd5b60006117d2612366565b90506117dd846122e3565b1580156117f057506117ee836122e3565b155b15611ac357670de0b6b3a76400006000611808612382565b90506000611817600f846113c7565b9050670de0b6b3a764000082101561186557633b9aca009250611849610aca83610ac4670de0b6b3a7640000806113c7565b9050600a600584020480821161185f5780611861565b815b9150505b600061187884610ac46064818a876113c7565b9050600061188c6064610ac48460196113c7565b905060006118a06064610ac48560326113c7565b90508160006118af838a6113c7565b90506118dd6118be8b8b6113c7565b6001600160a01b038e166000908152600860205260409020549061161f565b6001600160a01b038d166000908152600860205260408120919091556119038b8761161f565b9050611931611912828c6113c7565b6001600160a01b038e1660009081526008602052604090205490611f37565b6001600160a01b038d1660009081526008602052604090205561195482856124cf565b6006546001600160a01b03166000908152600960205260409020546119799086611f37565b6006546001600160a01b03166000908152600960205260409020556119c26119a1868c6113c7565b6006546001600160a01b031660009081526008602052604090205490611f37565b60086000600660009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550600660009054906101000a90046001600160a01b03166001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a3611a6a8d846124f3565b8b6001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050505050505050611e41565b611acc846122e3565b158015611add5750611add836122e3565b15611c1d57670de0b6b3a76400006000611af5612382565b90506000611b04600f846113c7565b9050670de0b6b3a7640000821015611b5257633b9aca009250611b36610aca83610ac4670de0b6b3a7640000806113c7565b9050600a6005840204808211611b4c5780611b4e565b815b9150505b6000611b6584610ac46064818a876113c7565b90506000611b796064610ac48460196113c7565b90506000611b8d6064610ac48560326113c7565b9050816000611b9c838a6113c7565b9050611bab6118be8b8b6113c7565b6001600160a01b038d16600090815260086020526040812091909155611bd18b8761161f565b6001600160a01b038d16600090815260096020526040902054909150611bf79082611f37565b6001600160a01b038d16600090815260096020526040902055611931611912828c6113c7565b611c26846122e3565b8015611c365750611c36836122e3565b15611d7a576001600160a01b038416600090815260096020526040902054611c5e908361161f565b6001600160a01b038516600090815260096020526040902055611ca3611c8483836113c7565b6001600160a01b0386166000908152600860205260409020549061161f565b6001600160a01b03808616600090815260086020908152604080832094909455918616815260099091522054611cd99083611f37565b6001600160a01b038416600090815260096020526040902055611d1e611cff83836113c7565b6001600160a01b03851660009081526008602052604090205490611f37565b6001600160a01b0380851660008181526008602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3611e41565b6001600160a01b038416600090815260096020526040902054611d9d908361161f565b6001600160a01b038516600090815260096020526040902055611dc3611c8483836113c7565b6001600160a01b038516600090815260086020526040902055611de9611cff83836113c7565b6001600160a01b0380851660008181526008602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35b50505050565b60008184841115611ed65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e9b578181015183820152602001611e83565b50505050905090810190601f168015611ec85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000601154821115611f215760405162461bcd60e51b815260040180806020018281038252602a815260200180612816602a913960400191505060405180910390fd5b6000611f2b612366565b905061142083826115dd565b600082820183811015611420576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600554600160a81b900460ff16611fef576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612040611661565b604080516001600160a01b039092168252519081900360200190a1565b600080600061206a6125ba565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b1580156120a557600080fd5b505afa1580156120b9573d6000803e3d6000fd5b505050506040513d60208110156120cf57600080fd5b5051604080517f5a3d549300000000000000000000000000000000000000000000000000000000815290519194506001600160a01b03861691635a3d549391600480820192602092909190829003018186803b15801561212e57600080fd5b505afa158015612142573d6000803e3d6000fd5b505050506040513d602081101561215857600080fd5b5051604080517f0902f1ac0000000000000000000000000000000000000000000000000000000081529051919350600091829182916001600160a01b03891691630902f1ac916004808301926060929190829003018186803b1580156121bd57600080fd5b505afa1580156121d1573d6000803e3d6000fd5b505050506040513d60608110156121e757600080fd5b5080516020820151604090920151909450909250905063ffffffff808216908516146122545780840363ffffffff811661222184866125c4565b516001600160e01b031602969096019563ffffffff811661224285856125c4565b516001600160e01b0316029590950194505b5050509193909250565b612266612802565b600082158061228c57505082516001600160e01b03168281029083828161228957fe5b04145b6122c75760405162461bcd60e51b81526004018080602001828103825260238152602001806129186023913960400191505060405180910390fd5b60408051602081019091529081529392505050565b5160701c90565b6001600160a01b031660009081526007602052604090205460ff1690565b600081836123505760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e9b578181015183820152602001611e83565b50600083858161235c57fe5b0495945050505050565b600080600061237361268d565b9092509050610af082826115dd565b600c546000908190819081906123a0906001600160a01b031661205d565b600c54600f54939650919450925063ffffffff600160a81b909104811683039190821611156124c357600c54600090600160a01b900460ff166123e357846123e5565b835b90506123ef6127f0565b60405180602001604052808463ffffffff16600d5485038161240d57fe5b046001600160e01b03169052600d839055600c805463ffffffff60a81b1916600160a81b63ffffffff8816021790559050612453610c9582670de0b6b3a764000061225e565b71ffffffffffffffffffffffffffffffffffff16600e819055600d54600c5460408051928352600160a81b90910463ffffffff1660208301528181019290925290517f9cfe07a59ebb9a772e1fee2abd40b53001de7c2f0b2e713de333f564118c32c4916060908290030190a150505b600e5494505050505090565b6011546124dc908361161f565b6011556012546124ec9082611f37565b6012555050565b6001600160a01b0382166125385760405162461bcd60e51b81526004018080602001828103825260218152602001806128f76021913960400191505060405180910390fd5b6000612542612366565b9050600061255083836113c7565b601054909150612560908461161f565b601055601154612570908261161f565b6011556040805184815290516000916001600160a01b038716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350505050565b63ffffffff421690565b6125cc6127f0565b6000826dffffffffffffffffffffffffffff1611612631576040805162461bcd60e51b815260206004820152601760248201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604482015290519081900360640190fd5b6040805160208101909152806dffffffffffffffffffffffffffff84167bffffffffffffffffffffffffffff0000000000000000000000000000607087901b168161267857fe5b046001600160e01b0316815250905092915050565b6011546010546000918291825b600b548110156127be578260086000600b84815481106126b657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061271b57508160096000600b84815481106126f457fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561273257601154601054945094505050506127ec565b61277260086000600b848154811061274657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061161f565b92506127b460096000600b848154811061278857fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061161f565b915060010161269a565b506010546011546127ce916115dd565b8210156127e6576011546010549350935050506127ec565b90925090505b9091565b60408051602081019091526000815290565b604051806020016040528060008152509056fe416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373217061757365642026262021696e697469616c446973747269627574696f6e41646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f20616464726573734669786564506f696e743a204d554c5449504c49434154494f4e5f4f564552464c4f5745524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734879706572537761704c6962726172793a204944454e544943414c5f41444452455353455345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cf113d12075769f7eb0d253a21bc7178167f801fc6cf920f8c20ded54dd37fa864736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000c880a9b8a06c4a24245795d585a04ebdadb28c790000000000000000000000006b2818f074b901726a83d9bcf577cb33ea711510
-----Decoded View---------------
Arg [0] : _minDeltaTwap (uint256): 60
Arg [1] : _initialDistributionAddress (address): 0xc880a9b8a06c4a24245795D585a04ebDAdB28c79
Arg [2] : _burnReservesAddress (address): 0x6B2818f074b901726a83d9BCf577Cb33eA711510
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000003c
Arg [1] : 000000000000000000000000c880a9b8a06c4a24245795d585a04ebdadb28c79
Arg [2] : 0000000000000000000000006b2818f074b901726a83d9bcf577cb33ea711510
Deployed Bytecode Sourcemap
38908:16330:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39769:51;;;:::i;:::-;;;;-1:-1:-1;;;;;39769:51:0;;;;;;;;;;;;;;23881:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25640:161;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25640:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39833:38;;;:::i;41883:95::-;;;:::i;:::-;;;;;;;;;;;;;;;;39488:82;;;:::i;26275:313::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26275:313:0;;;;;;;;;;;;;;;;;:::i;39939:50::-;;;;;;;;;;;;;;;;-1:-1:-1;39939:50:0;-1:-1:-1;;;;;39939:50:0;;:::i;44021:870::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;44021:870:0;;;;;;;;;;:::i;:::-;;40453:34;;;:::i;24808:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;53747:756;;;:::i;26997:218::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26997:218:0;;;;;;;;:::i;39613:94::-;;;:::i;42048:106::-;;;:::i;43014:102::-;;;:::i;54511:621::-;;;:::i;39716:44::-;;;:::i;41722:93::-;;;:::i;21774:78::-;;;:::i;40537:31::-;;;:::i;43196:112::-;;;;;;;;;;;;;;;;-1:-1:-1;43196:112:0;;:::i;40188:28::-;;;:::i;42227:208::-;;;;;;;;;;;;;;;;-1:-1:-1;42227:208:0;-1:-1:-1;;;;;42227:208:0;;:::i;1606:148::-;;;:::i;964:79::-;;;:::i;24083:87::-;;;:::i;27718:269::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27718:269:0;;;;;;;;:::i;46397:379::-;;;;;;;;;;;;;;;;-1:-1:-1;46397:379:0;-1:-1:-1;;;;;46397:379:0;;:::i;25104:175::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25104:175:0;;;;;;;;:::i;40296:24::-;;;:::i;40617:27::-;;;:::i;40368:32::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;55140:95;;;:::i;25342:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25342:151:0;;;;;;;;;;:::i;43406:554::-;;;:::i;1909:244::-;;;;;;;;;;;;;;;;-1:-1:-1;1909:244:0;-1:-1:-1;;;;;1909:244:0;;:::i;39769:51::-;;;:::o;23881:83::-;23951:5;23944:12;;;;;;;;-1:-1:-1;;23944:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23918:13;;23944:12;;23951:5;;23944:12;;23951:5;23944:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23881:83;:::o;25640:161::-;25715:4;25732:39;25741:12;:10;:12::i;:::-;25755:7;25764:6;25732:8;:39::i;:::-;-1:-1:-1;25789:4:0;25640:161;;;;;:::o;39833:38::-;;;-1:-1:-1;;;;;39833:38:0;;:::o;41883:95::-;41963:7;;41883:95;:::o;39488:82::-;39527:42;39488:82;:::o;26275:313::-;26373:4;26390:36;26400:6;26408:9;26419:6;26390:9;:36::i;:::-;26437:121;26446:6;26454:12;:10;:12::i;:::-;26468:89;26506:6;26468:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26468:19:0;;;;;;:11;:19;;;;;;26488:12;:10;:12::i;:::-;-1:-1:-1;;;;;26468:33:0;;;;;;;;;;;;-1:-1:-1;26468:33:0;;;:89;:37;:89::i;:::-;26437:8;:121::i;:::-;-1:-1:-1;26576:4:0;26275:313;;;;;:::o;39939:50::-;;;;;;;;;;;;;;;:::o;44021:870::-;1186:12;:10;:12::i;:::-;1176:6;;;;;-1:-1:-1;;;;;1176:6:0;;;:22;;;1168:67;;;;;-1:-1:-1;;;1168:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44135:4:::1;44119:20:::0;::::1;;;44116:768;;;-1:-1:-1::0;;;;;44156:28:0;::::1;;::::0;;;:18:::1;:28;::::0;;;;;;;:43;;-1:-1:-1;;44156:43:0::1;::::0;::::1;;;::::0;;44217:7:::1;:17:::0;;;;;;:21;44214:120:::1;;-1:-1:-1::0;;;;;44300:17:0;::::1;;::::0;;;:7:::1;:17;::::0;;;;;44279:39:::1;::::0;:20:::1;:39::i;:::-;-1:-1:-1::0;;;;;44259:17:0;::::1;;::::0;;;:7:::1;:17;::::0;;;;:59;44214:120:::1;-1:-1:-1::0;;;;;44348:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:36;;-1:-1:-1;;44348:36:0::1;::::0;::::1;;;::::0;;44399:9:::1;:24:::0;;-1:-1:-1;44399:24:0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;44399:24:0::1;::::0;;::::1;::::0;;44116:768:::1;;;-1:-1:-1::0;;;;;44456:28:0;::::1;;::::0;;;:18:::1;:28;::::0;;;;:43;;-1:-1:-1;;44456:43:0::1;::::0;::::1;;;::::0;;44514:359:::1;44538:9;:16:::0;44534:20;::::1;44514:359;;;44599:8;-1:-1:-1::0;;;;;44583:24:0::1;:9;44593:1;44583:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;44583:12:0::1;:24;44579:279;;;44645:9;44655:16:::0;;-1:-1:-1;;44655:20:0;;;44645:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;44630:9:::1;:12:::0;;-1:-1:-1;;;;;44645:31:0;;::::1;::::0;44640:1;;44630:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;44630:46:0::1;-1:-1:-1::0;;;;;44630:46:0;;::::1;;::::0;;44697:17;;::::1;::::0;;:7:::1;:17:::0;;;;;;:21;;;44739:11:::1;:21:::0;;;;:36;;-1:-1:-1;;44739:36:0::1;::::0;::::1;;;::::0;;44796:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;44796:15:0;;;;;-1:-1:-1;;44796:15:0::1;::::0;;;;;44833:5:::1;;44579:279;44556:3;;44514:359;;;;44116:768;44021:870:::0;;:::o;40453:34::-;;;;:::o;24808:83::-;24874:9;;;;24808:83;:::o;53747:756::-;53798:7;53840:4;53798:7;53888:13;:11;:13::i;:::-;53855:46;-1:-1:-1;53912:22:0;53937:25;39172:2;53950:11;53937:12;:25::i;:::-;53912:50;;39086:7;53987:22;:47;53983:481;;;54136:3;;-1:-1:-1;54171:125:0;54221:74;54272:22;54221:32;54248:4;;54221:26;:32::i;:::-;:50;;:74::i;:::-;54171:31;:14;54190:11;54171:18;:31::i;:125::-;54154:142;-1:-1:-1;54361:2:0;39257:1;54332:26;;:31;54395:27;;;:57;;54442:10;54395:57;;;54425:14;54395:57;54378:74;;53983:481;;54481:14;-1:-1:-1;;;53747:756:0;:::o;26997:218::-;27085:4;27102:83;27111:12;:10;:12::i;:::-;27125:7;27134:50;27173:10;27134:11;:25;27146:12;:10;:12::i;:::-;-1:-1:-1;;;;;27134:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;27134:25:0;;;:34;;;;;;;;;;;:38;:50::i;39613:94::-;39664:42;39613:94;:::o;42048:106::-;42138:7;;42120:14;42119:26;42048:106;:::o;43014:102::-;42504:10;-1:-1:-1;;;;;42518:26:0;42504:40;;42496:80;;;;;-1:-1:-1;;;42496:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43092:16:::1;:14;:16::i;:::-;43014:102::o:0;54511:621::-;54711:13;;54558:7;;;;;;;;54664:61;;-1:-1:-1;;;;;54711:13:0;54664:46;:61::i;:::-;54774:18;;54578:147;;-1:-1:-1;54578:147:0;;-1:-1:-1;54578:147:0;-1:-1:-1;;;;54774:18:0;;;;54757:35;;;54736:18;;-1:-1:-1;;;54831:12:0;;;;:50;;54865:16;54831:50;;;54846:16;54831:50;54805:76;;54894:40;;:::i;:::-;54937:108;;;;;;;;55022:11;54980:53;;54999:19;;54981:15;:37;54980:53;;;;;;-1:-1:-1;;;;;54937:108:0;;;;54894:151;;55065:59;55086:37;55101:12;55115:7;55086:14;:37::i;:::-;55065:20;:59::i;:::-;55058:66;;;;;;;;;;54511:621;:::o;39716:44::-;;;:::o;41722:93::-;41797:10;;41722:93;:::o;21774:78::-;21837:7;;-1:-1:-1;;;21837:7:0;;;;;21774:78::o;40537:31::-;;;;:::o;43196:112::-;1186:12;:10;:12::i;:::-;1176:6;;;;;-1:-1:-1;;;;;1176:6:0;;;:22;;;1168:67;;;;;-1:-1:-1;;;1168:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43272:12:::1;:28:::0;43196:112::o;40188:28::-;;;-1:-1:-1;;;;;40188:28:0;;:::o;42227:208::-;42293:7;42317:29;42338:7;42317:20;:29::i;:::-;42313:58;;;-1:-1:-1;;;;;;42355:16:0;;;;;;:7;:16;;;;;;42348:23;;42313:58;-1:-1:-1;;;;;42410:16:0;;;;;;:7;:16;;;;;;42389:38;;:20;:38::i;:::-;42382:45;;42227:208;;;;:::o;1606:148::-;1186:12;:10;:12::i;:::-;1176:6;;;;;-1:-1:-1;;;;;1176:6:0;;;:22;;;1168:67;;;;;-1:-1:-1;;;1168:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1697:6:::1;::::0;1676:40:::1;::::0;1713:1:::1;::::0;1697:6:::1;::::0;::::1;-1:-1:-1::0;;;;;1697:6:0::1;::::0;1676:40:::1;::::0;1713:1;;1676:40:::1;1727:6;:19:::0;;-1:-1:-1;;1727:19:0::1;::::0;;1606:148::o;964:79::-;1029:6;;;;;-1:-1:-1;;;;;1029:6:0;;964:79::o;24083:87::-;24155:7;24148:14;;;;;;;;-1:-1:-1;;24148:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24122:13;;24148:14;;24155:7;;24148:14;;24155:7;24148:14;;;;;;;;;;;;;;;;;;;;;;;;27718:269;27811:4;27828:129;27837:12;:10;:12::i;:::-;27851:7;27860:96;27899:15;27860:96;;;;;;;;;;;;;;;;;:11;:25;27872:12;:10;:12::i;:::-;-1:-1:-1;;;;;27860:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;27860:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;46397:379::-;1186:12;:10;:12::i;:::-;1176:6;;;;;-1:-1:-1;;;;;1176:6:0;;;:22;;;1168:67;;;;;-1:-1:-1;;;1168:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46465:14:::1;46481::::0;46499:57:::1;46535:4;39527:42;46499:27;:57::i;:::-;46464:92:::0;;-1:-1:-1;46464:92:0;-1:-1:-1;;;;;;46575:20:0;::::1;46567:51;;;::::0;;-1:-1:-1;;;46567:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;46639:12;:40:::0;;;::::1;46673:4;-1:-1:-1::0;;;;;46655:23:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;46639:40:0::1;::::0;;;::::1;-1:-1:-1::0;;46690:24:0::1;::::0;;::::1;;::::0;;;;46727:41:::1;::::0;46748:13:::1;-1:-1:-1::0;46727:20:0::1;:41::i;25104:175::-:0;25190:4;25207:42;25217:12;:10;:12::i;:::-;25231:9;25242:6;25207:9;:42::i;40296:24::-;;;-1:-1:-1;;;40296:24:0;;;;;:::o;40617:27::-;;;;:::o;40368:32::-;;;-1:-1:-1;;;40368:32:0;;;;;:::o;55140:95::-;55211:16;;55140:95;:::o;25342:151::-;-1:-1:-1;;;;;25458:18:0;;;25431:7;25458:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;25342:151::o;43406:554::-;42504:10;-1:-1:-1;;;;;42518:26:0;42504:40;;42496:80;;;;;-1:-1:-1;;;42496:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43491:18:::1;::::0;-1:-1:-1;;;43491:18:0;::::1;;;:23:::0;43483:60:::1;;;::::0;;-1:-1:-1;;;43483:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;43693:13;::::0;43555:24:::1;::::0;;;;;43646:61:::1;::::0;-1:-1:-1;;;;;43693:13:0::1;43646:46;:61::i;:::-;43554:153;;;;;;43720:23;43746:12;;;;;;;;;;;:50;;43780:16;43746:50;;;43761:16;43746:50;43817:18;:35:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;43817:35:0::1;-1:-1:-1::0;;;;43817:35:0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;43863:19:0::1;:37:::0;-1:-1:-1;;39086:7:0::1;43911:16;:41:::0;43406:554::o;1909:244::-;1186:12;:10;:12::i;:::-;1176:6;;;;;-1:-1:-1;;;;;1176:6:0;;;:22;;;1168:67;;;;;-1:-1:-1;;;1168:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1998:22:0;::::1;1990:73;;;;-1:-1:-1::0;;;1990:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2100:6;::::0;2079:38:::1;::::0;-1:-1:-1;;;;;2079:38:0;;::::1;::::0;2100:6:::1;::::0;::::1;;::::0;2079:38:::1;::::0;;;::::1;2128:6;:17:::0;;-1:-1:-1;;;;;2128:17:0;;::::1;;;-1:-1:-1::0;;2128:17:0;;::::1;::::0;;;::::1;::::0;;1909:244::o;7077:471::-;7135:7;7380:6;7376:47;;-1:-1:-1;7410:1:0;7403:8;;7376:47;7447:5;;;7451:1;7447;:5;:1;7471:5;;;;;:10;7463:56;;;;-1:-1:-1;;;7463:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7539:1;7077:471;-1:-1:-1;;;7077:471:0:o;37982:349::-;38057:14;38073;38118:6;-1:-1:-1;;;;;38108:16:0;:6;-1:-1:-1;;;;;38108:16:0;;;38100:66;;;;-1:-1:-1;;;38100:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38205:6;-1:-1:-1;;;;;38196:15:0;:6;-1:-1:-1;;;;;38196:15:0;;:53;;38234:6;38242;38196:53;;;38215:6;38223;38196:53;38177:72;;-1:-1:-1;38177:72:0;-1:-1:-1;;;;;;38268:20:0;;38260:63;;;;;-1:-1:-1;;;38260:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37982:349;;;;;:::o;38423:478::-;38512:12;38538:14;38554;38572:26;38583:6;38591;38572:10;:26::i;:::-;38736:32;;;-1:-1:-1;;38736:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38726:43;;;;;;38639:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38629:262;;;;;;;;;38423:478;-1:-1:-1;;;;;38423:478:0:o;8024:132::-;8082:7;8109:39;8113:1;8116;8109:39;;;;;;;;;;;;;;;;;:3;:39::i;6187:136::-;6245:7;6272:43;6276:1;6279;6272:43;;;;;;;;;;;;;;;;;:3;:43::i;109:106::-;197:10;109:106;:::o;30115:346::-;-1:-1:-1;;;;;30217:19:0;;30209:68;;;;-1:-1:-1;;;30209:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30296:21:0;;30288:68;;;;-1:-1:-1;;;30288:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30369:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30421:32;;;;;;;;;;;;;;;;;30115:346;;;:::o;48019:4795::-;41561:8;:6;:8::i;:::-;41560:9;:53;;;-1:-1:-1;41573:10:0;-1:-1:-1;;;;;41587:26:0;41573:40;;41560:53;41552:104;;;;-1:-1:-1;;;41552:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48204:19:::1;48227:10;:8;:10::i;:::-;48204:33;;48263:28;48284:6;48263:20;:28::i;:::-;48262:29;:65;;;;;48296:31;48317:9;48296:20;:31::i;:::-;48295:32;48262:65;48258:4549;;;48366:4;48344:19;48418:13;:11;:13::i;:::-;48385:46:::0;-1:-1:-1;48446:22:0::1;48471:25;39172:2;48484:11:::0;48471:12:::1;:25::i;:::-;48446:50;;39086:7;48515:22;:47;48511:525;;;48672:3;::::0;-1:-1:-1;48711:145:0::1;48769:86;48832:22:::0;48769:32:::1;48796:4;::::0;48769:26:::1;:32::i;48711:145::-;48694:162:::0;-1:-1:-1;48925:2:0::1;39257:1;48896:26:::0;::::1;:31;48963:27:::0;;::::1;:57;;49010:10;48963:57;;;48993:14;48963:57;48946:74;;48511:525;;49052:23;49078:52;49118:11:::0;49078:35:::1;49109:3;49078:35:::0;:6;49089:14;49078:10:::1;:26::i;:52::-;49052:78:::0;-1:-1:-1;49145:25:0::1;49173:46;49215:3;49173:37;49052:78:::0;39367:2:::1;49173:19;:37::i;:46::-;49145:74:::0;-1:-1:-1;49234:12:0::1;49249:40;49285:3;49249:31;:15:::0;39441:2:::1;49249:19;:31::i;:40::-;49234:55:::0;-1:-1:-1;49325:17:0;49304:18:::1;49388:21;49234:55:::0;49397:11;49388:8:::1;:21::i;:::-;49357:52:::0;-1:-1:-1;49444:44:0::1;49464:23;:6:::0;49475:11;49464:10:::1;:23::i;:::-;-1:-1:-1::0;;;;;49444:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;;:19:::1;:44::i;:::-;-1:-1:-1::0;;;;;49426:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;:62;;;;49535:27:::1;:6:::0;49546:15;49535:10:::1;:27::i;:::-;49517:45:::0;-1:-1:-1;49598:48:0::1;49621:24;49517:45:::0;49633:11;49621::::1;:24::i;:::-;-1:-1:-1::0;;;;;49598:18:0;::::1;;::::0;;;:7:::1;:18;::::0;;;;;;:22:::1;:48::i;:::-;-1:-1:-1::0;;;;;49577:18:0;::::1;;::::0;;;:7:::1;:18;::::0;;;;:69;49661:42:::1;49676:20:::0;49698:4;49661:14:::1;:42::i;:::-;49772:17;::::0;-1:-1:-1;;;;;49772:17:0::1;49756:35;::::0;;;:7:::1;:35;::::0;;;;;:58:::1;::::0;49796:17;49756:39:::1;:58::i;:::-;49734:17;::::0;-1:-1:-1;;;;;49734:17:0::1;49718:35;::::0;;;:7:::1;:35;::::0;;;;:96;49867:75:::1;49907:34;:17:::0;49929:11;49907:21:::1;:34::i;:::-;49883:17;::::0;-1:-1:-1;;;;;49883:17:0::1;49867:35;::::0;;;:7:::1;:35;::::0;;;;;;:39:::1;:75::i;:::-;49829:7;:35;49845:17;;;;;;;;;-1:-1:-1::0;;;;;49845:17:0::1;-1:-1:-1::0;;;;;49829:35:0::1;-1:-1:-1::0;;;;;49829:35:0::1;;;;;;;;;;;;:113;;;;49989:17;;;;;;;;;-1:-1:-1::0;;;;;49989:17:0::1;-1:-1:-1::0;;;;;49964:63:0::1;49973:6;-1:-1:-1::0;;;;;49964:63:0::1;;50009:17;49964:63;;;;;;;;;;;;;;;;;;50042:25;50048:6;50056:10;50042:5;:25::i;:::-;50104:9;-1:-1:-1::0;;;;;50087:36:0::1;50096:6;-1:-1:-1::0;;;;;50087:36:0::1;;50115:7;50087:36;;;;;;;;;;;;;;;;;;48258:4549;;;;;;;;;;;;50146:28;50167:6;50146:20;:28::i;:::-;50145:29;:64;;;;;50178:31;50199:9;50178:20;:31::i;:::-;50141:2666;;;50248:4;50226:19;50300:13;:11;:13::i;:::-;50267:46:::0;-1:-1:-1;50328:22:0::1;50353:25;39172:2;50366:11:::0;50353:12:::1;:25::i;:::-;50328:50;;39086:7;50397:22;:47;50393:525;;;50554:3;::::0;-1:-1:-1;50593:145:0::1;50651:86;50714:22:::0;50651:32:::1;50678:4;::::0;50651:26:::1;:32::i;50593:145::-;50576:162:::0;-1:-1:-1;50807:2:0::1;39257:1;50778:26:::0;::::1;:31;50845:27:::0;;::::1;:57;;50892:10;50845:57;;;50875:14;50845:57;50828:74;;50393:525;;50934:23;50960:52;51000:11:::0;50960:35:::1;50991:3;50960:35:::0;:6;50971:14;50960:10:::1;:26::i;:52::-;50934:78:::0;-1:-1:-1;51027:25:0::1;51055:46;51097:3;51055:37;50934:78:::0;39367:2:::1;51055:19;:37::i;:46::-;51027:74:::0;-1:-1:-1;51116:12:0::1;51131:40;51167:3;51131:31;:15:::0;39441:2:::1;51131:19;:31::i;:40::-;51116:55:::0;-1:-1:-1;51207:17:0;51186:18:::1;51270:21;51116:55:::0;51279:11;51270:8:::1;:21::i;:::-;51239:52:::0;-1:-1:-1;51326:44:0::1;51346:23;:6:::0;51357:11;51346:10:::1;:23::i;51326:44::-;-1:-1:-1::0;;;;;51308:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;:62;;;;51417:27:::1;:6:::0;51428:15;51417:10:::1;:27::i;:::-;-1:-1:-1::0;;;;;51480:18:0;::::1;;::::0;;;:7:::1;:18;::::0;;;;;51399:45;;-1:-1:-1;51480:31:0::1;::::0;51399:45;51480:22:::1;:31::i;:::-;-1:-1:-1::0;;;;;51459:18:0;::::1;;::::0;;;:7:::1;:18;::::0;;;;:52;51547:48:::1;51570:24;:7:::0;51582:11;51570::::1;:24::i;50141:2666::-;52096:28;52117:6;52096:20;:28::i;:::-;:63;;;;;52128:31;52149:9;52128:20;:31::i;:::-;52092:715;;;-1:-1:-1::0;;;;;52194:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;:27:::1;::::0;52214:6;52194:19:::1;:27::i;:::-;-1:-1:-1::0;;;;;52176:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;:45;52254:44:::1;52274:23;:6:::0;52285:11;52274:10:::1;:23::i;:::-;-1:-1:-1::0;;;;;52254:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;;:19:::1;:44::i;:::-;-1:-1:-1::0;;;;;52236:15:0;;::::1;;::::0;;;:7:::1;:15;::::0;;;;;;;:62;;;;52334:18;;::::1;::::0;;:7:::1;:18:::0;;;;;:30:::1;::::0;52357:6;52334:22:::1;:30::i;:::-;-1:-1:-1::0;;;;;52313:18:0;::::1;;::::0;;;:7:::1;:18;::::0;;;;:51;52400:47:::1;52423:23;:6:::0;52434:11;52423:10:::1;:23::i;:::-;-1:-1:-1::0;;;;;52400:18:0;::::1;;::::0;;;:7:::1;:18;::::0;;;;;;:22:::1;:47::i;:::-;-1:-1:-1::0;;;;;52379:18:0;;::::1;;::::0;;;:7:::1;:18;::::0;;;;;;;;:68;;;;52467:35;;;;;;;52379:18;;52467:35;;::::1;::::0;::::1;::::0;;;;;;;::::1;52092:715;;;-1:-1:-1::0;;;;;52553:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;:27:::1;::::0;52573:6;52553:19:::1;:27::i;:::-;-1:-1:-1::0;;;;;52535:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;:45;52613:44:::1;52633:23;:6:::0;52644:11;52633:10:::1;:23::i;52613:44::-;-1:-1:-1::0;;;;;52595:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;:62;52693:47:::1;52716:23;:6:::0;52727:11;52716:10:::1;:23::i;52693:47::-;-1:-1:-1::0;;;;;52672:18:0;;::::1;;::::0;;;:7:::1;:18;::::0;;;;;;;;:68;;;;52760:35;;;;;;;52672:18;;52760:35;;::::1;::::0;::::1;::::0;;;;;;;::::1;52092:715;41667:1;48019:4795:::0;;;:::o;6626:192::-;6712:7;6748:12;6740:6;;;;6732:29;;;;-1:-1:-1;;;6732:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6784:5:0;;;6626:192::o;42638:256::-;42707:7;42746;;42735;:18;;42727:73;;;;-1:-1:-1;;;42727:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42811:19;42834:10;:8;:10::i;:::-;42811:33;-1:-1:-1;42862:24:0;:7;42811:33;42862:11;:24::i;5723:181::-;5781:7;5813:5;;;5837:6;;;;5829:46;;;;;-1:-1:-1;;;5829:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;22823:120;22368:7;;-1:-1:-1;;;22368:7:0;;;;22360:40;;;;;-1:-1:-1;;;22360:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22882:7:::1;:15:::0;;;::::1;::::0;;22913:22:::1;22922:12;:10;:12::i;:::-;22913:22;::::0;;-1:-1:-1;;;;;22913:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;22823:120::o:0;36754:1058::-;36840:21;36863;36886;36937:23;:21;:23::i;:::-;36920:40;;37005:4;-1:-1:-1;;;;;36990:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36990:43:0;37063;;;;;;;;36990;;-1:-1:-1;;;;;;37063:41:0;;;;;:43;;;;;36990;;37063;;;;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37063:43:0;37286:34;;;;;;;;37063:43;;-1:-1:-1;37221:16:0;;;;;;-1:-1:-1;;;;;37286:32:0;;;;;:34;;;;;;;;;;;;;;:32;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37286:34:0;;;;;;;;;;;;;-1:-1:-1;37286:34:0;;-1:-1:-1;37286:34:0;-1:-1:-1;37335:36:0;;;;;;;;37331:474;;37457:35;;;37603:62;;;37608:39;37628:8;37638;37608:19;:39::i;:::-;:42;-1:-1:-1;;;;;37603:48:0;:62;37583:82;;;;;37731:62;;;37736:39;37756:8;37766;37736:19;:39::i;:::-;:42;-1:-1:-1;;;;;37731:48:0;:62;37711:82;;;;;-1:-1:-1;37331:474:0;36754:1058;;;;;;;;:::o;35159:253::-;35226:16;;:::i;:::-;35255:6;35280;;;:54;;-1:-1:-1;;35326:7:0;;-1:-1:-1;;;;;35321:13:0;35295:17;;;;35316:1;35295:17;35316:1;35290:27;;;;;:44;35280:54;35272:102;;;;-1:-1:-1;;;35272:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35392:12;;;;;;;;;;;;;35159:253;-1:-1:-1;;;35159:253:0:o;36113:130::-;36213:7;34430:3;36213:21;;36113:130::o;46786:129::-;-1:-1:-1;;;;;46880:27:0;46856:4;46880:27;;;:18;:27;;;;;;;;;46786:129::o;8652:278::-;8738:7;8773:12;8766:5;8758:28;;;;-1:-1:-1;;;8758:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8797:9;8813:1;8809;:5;;;;;;;8652:278;-1:-1:-1;;;;;8652:278:0:o;52980:163::-;53021:7;53042:15;53059;53078:19;:17;:19::i;:::-;53041:56;;-1:-1:-1;53041:56:0;-1:-1:-1;53115:20:0;53041:56;;53115:11;:20::i;46923:1088::-;47124:13;;46972:7;;;;;;;;47077:61;;-1:-1:-1;;;;;47124:13:0;47077:46;:61::i;:::-;47187:18;;47259:12;;46992:146;;-1:-1:-1;46992:146:0;;-1:-1:-1;46992:146:0;-1:-1:-1;47187:18:0;-1:-1:-1;;;47187:18:0;;;;;47170:35;;;47245:26;;;;47241:727;;;47314:12;;47288:23;;-1:-1:-1;;;47314:12:0;;;;:50;;47348:16;47314:50;;;47329:16;47314:50;47288:76;;47506:40;;:::i;:::-;47549:116;;;;;;;;47638:11;47596:53;;47615:19;;47597:15;:37;47596:53;;;;;;-1:-1:-1;;;;;47549:116:0;;;47682:19;:37;;;47734:18;:35;;-1:-1:-1;;;;47734:35:0;-1:-1:-1;;;47734:35:0;;;;;;;47506:159;-1:-1:-1;47805:59:0;47826:37;47506:159;47855:7;47826:14;:37::i;47805:59::-;47786:78;;:16;:78;;;47898:19;;47919:18;;47886:70;;;;;;-1:-1:-1;;;47919:18:0;;;;;47886:70;;;;;;;;;;;;;;;;;;;;;;;47241:727;;;47987:16;;47980:23;;;;;;46923:1088;:::o;52822:150::-;52903:7;;:17;;52915:4;52903:11;:17::i;:::-;52893:7;:27;52944:10;;:20;;52959:4;52944:14;:20::i;:::-;52931:10;:33;-1:-1:-1;;52822:150:0:o;45950:397::-;-1:-1:-1;;;;;46034:21:0;;46026:67;;;;-1:-1:-1;;;46026:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46106:19;46129:10;:8;:10::i;:::-;46106:33;-1:-1:-1;46150:22:0;46175:23;:6;46106:33;46175:10;:23::i;:::-;46219:7;;46150:48;;-1:-1:-1;46219:19:0;;46231:6;46219:11;:19::i;:::-;46209:7;:29;46259:7;;:27;;46271:14;46259:11;:27::i;:::-;46249:7;:37;46302;;;;;;;;46328:1;;-1:-1:-1;;;;;46302:37:0;;;;;;;;;;;;45950:397;;;;:::o;36525:123::-;36614:25;:15;:25;;36525:123::o;35568:246::-;35649:16;;:::i;:::-;35700:1;35686:11;:15;;;35678:51;;;;;-1:-1:-1;;;35678:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35747:59;;;;;;;;;;35757:48;;;35758:32;34430:3;35758:32;;;;35757:48;;;;;;-1:-1:-1;;;;;35747:59:0;;;;35740:66;;35568:246;;;;:::o;53151:555::-;53248:7;;53284;;53201;;;;;53302:289;53326:9;:16;53322:20;;53302:289;;;53392:7;53368;:21;53376:9;53386:1;53376:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;53376:12:0;53368:21;;;;;;;;;;;;;:31;;:66;;;53427:7;53403;:21;53411:9;53421:1;53411:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;53411:12:0;53403:21;;;;;;;;;;;;;:31;53368:66;53364:97;;;53444:7;;53453;;53436:25;;;;;;;;;53364:97;53486:34;53498:7;:21;53506:9;53516:1;53506:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;53506:12:0;53498:21;;;;;;;;;;;;;53486:7;;:11;:34::i;:::-;53476:44;;53545:34;53557:7;:21;53565:9;53575:1;53565:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;53565:12:0;53557:21;;;;;;;;;;;;;53545:7;;:11;:34::i;:::-;53535:44;-1:-1:-1;53344:3:0;;53302:289;;;-1:-1:-1;53627:7:0;;53615;;:20;;:11;:20::i;:::-;53605:7;:30;53601:61;;;53645:7;;53654;;53637:25;;;;;;;;53601:61;53681:7;;-1:-1:-1;53690:7:0;-1:-1:-1;53151:555:0;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://d66d11deb566e04b0b69ef8b8e963d8319bf1c89db799253582c70b200afd75d
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.