Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 WGD
Holders
36
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
WhalesGroup
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-02-08 */ // SPDX-License-Identifier: MIT /* WhalesGroupDAO web: whalesgroup.net community: t.me/whalesgroupnet twitter: @WhalesGroupNet blog: @whalesgroup */ pragma solidity ^0.8.10; pragma experimental ABIEncoderV2; // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @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 Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) public _allowed; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowed[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowed[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowed[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowed[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowed[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract WhalesGroup is ERC20, Ownable { using SafeMath for uint256; uint8 private constant _decimals = 9; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public devWallet; address public stakingRewardsWallet; address public liquidWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint256 public percentForLPBurn = 25; // 25 = .25% bool public lpBurnEnabled = true; uint256 public lpBurnFrequency = 3600 seconds; uint256 public lastLpBurnTime; uint256 public launchBlock; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _firstBuyBlock; mapping(address => bool) public bots; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyDevFee; uint256 public buyLiquidityFee; uint256 public buyStakingRewardsFee; uint256 public sellTotalFees; uint256 public sellDevFee; uint256 public sellLiquidityFee; uint256 public sellStakingRewardsFee; uint256 public tokensForDev; uint256 public tokensForLiquidity; uint256 public tokensForStakingRewards; /******************/ // exclude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event ExcludeFromFees(address indexed account, bool isExcluded); event WhitelistAccount(address indexed account); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event devWalletUpdated( address indexed newWallet, address indexed oldWallet ); event stakingRewardsWalletUpdated( address indexed newWallet, address indexed oldWallet ); event liquidWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("WhalesGroupDAO", "WGD") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 totalSupply = 1_000_000_000 * 1e9; maxTransactionAmount = totalSupply * 15 / 1000; // 1.0% from total supply maxTransactionAmountTxn maxWallet = totalSupply * 15 / 1000; // 1.5% from total supply maxWallet swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet uint256 _buyDevFee = 2; uint256 _buyLiquidityFee = 1; uint256 _buyStakingRewardsFee = 1; uint256 _sellDevFee = 2; uint256 _sellLiquidityFee = 1; uint256 _sellStakingRewardsFee = 2; buyDevFee = _buyDevFee; buyLiquidityFee = _buyLiquidityFee; buyStakingRewardsFee = _buyStakingRewardsFee; buyTotalFees = buyDevFee + buyLiquidityFee + buyStakingRewardsFee; sellDevFee = _sellDevFee; sellLiquidityFee = _sellLiquidityFee; sellStakingRewardsFee = _sellStakingRewardsFee; sellTotalFees = sellDevFee + sellLiquidityFee + sellStakingRewardsFee; devWallet = address(0x5557927731dA0E178Fd3c8D29A3bb5Db768F95D1); stakingRewardsWallet = address(0x905a77873CfCbB50ce37A2Ddf4E02958EC14378F); liquidWallet = address(0xc728eab08738E38eFff7c14294d76311D486F086); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(devWallet), true); excludeFromFees(address(liquidWallet), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); excludeFromMaxTransaction(address(devWallet), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } function decimals() public view virtual override returns (uint8) { return _decimals; } receive() external payable {} // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; launchBlock = block.number; swapEnabled = true; lastLpBurnTime = block.timestamp; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { maxTransactionAmount = totalSupply(); maxWallet = totalSupply(); limitsInEffect = false; return true; } // disable Transfer delay - cannot be re-enabled function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 1000) / 1e9, "Cannot set maxTransactionAmount lower than 0.1%" ); maxTransactionAmount = newNum * (10**9); } function updateLpBurnFrequency(uint256 newNum) external onlyOwner { lpBurnFrequency = newNum * 1 seconds; } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e9, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * (10**9); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees( uint256 _devFee, uint256 _liquidityFee, uint256 _stakingRewardsFee ) external onlyOwner { buyDevFee = _devFee; buyLiquidityFee = _liquidityFee; buyStakingRewardsFee = _stakingRewardsFee; buyTotalFees = buyDevFee + buyLiquidityFee + buyStakingRewardsFee; require(buyTotalFees <= 14, "Must keep fees at 14% or less"); } function updateSellFees( uint256 _devFee, uint256 _liquidityFee, uint256 _stakingRewardsFee ) external onlyOwner { sellDevFee = _devFee; sellLiquidityFee = _liquidityFee; sellStakingRewardsFee = _stakingRewardsFee; sellTotalFees = sellDevFee + sellLiquidityFee + sellStakingRewardsFee; require(sellTotalFees <= 14, "Must keep fees at 14% or less"); } function blockBot(address bot) public onlyOwner { require(bot != address(uniswapV2Pair)); require(bot != address(uniswapV2Router)); bots[bot] = true; } function blockMultipleBots(address[] calldata accounts) public onlyOwner { for(uint256 i = 0; i < accounts.length; i++) { require(accounts[i] != address(uniswapV2Pair)); require(accounts[i] != address(uniswapV2Router)); bots[accounts[i]] = true; } } function unblockBot(address notBot) public onlyOwner { bots[notBot] = false; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateDevWallet(address newDevWallet) external { require(_msgSender() == devWallet, "no permission"); emit devWalletUpdated(newDevWallet, devWallet); devWallet = newDevWallet; } function updateStakingRewardsWallet(address newStakingRewardsWallet) external { require(_msgSender() == stakingRewardsWallet, "no permission"); emit stakingRewardsWalletUpdated(newStakingRewardsWallet, stakingRewardsWallet); stakingRewardsWallet = newStakingRewardsWallet; } function updateLiquidWallet(address newLiquidWallet) external { require(_msgSender() == liquidWallet, "no permission"); emit liquidWalletUpdated(newLiquidWallet, liquidWallet); liquidWallet = newLiquidWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!bots[from] && !bots[to], "Your account is blockListed!"); if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled) { if ( to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair) ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); if(block.number <= launchBlock + 3) { _firstBuyBlock[tx.origin] = block.number; } } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } if ( !swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from] ) { autoBurnLiquidityPairTokens(); } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to]) { uint256 _sellLiquidityFee = sellLiquidityFee; uint256 _sellDevFee = sellDevFee; uint256 _sellStakingRewardsFee = sellStakingRewardsFee; uint256 _sellTotalFees = getSellTotalFees(); if (_firstBuyBlock[from] > 0 && _sellTotalFees > 0) { _sellLiquidityFee = 2; _sellDevFee = 8; _sellStakingRewardsFee = 30; _sellTotalFees = _sellLiquidityFee + _sellDevFee + _sellStakingRewardsFee; } fees = amount.mul(_sellTotalFees).div(100); tokensForLiquidity += (fees * _sellLiquidityFee) / _sellTotalFees; tokensForDev += (fees * _sellDevFee) / _sellTotalFees; tokensForStakingRewards += (fees * _sellStakingRewardsFee) / _sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from]) { if (block.number <= launchBlock + 3) { fees = amount.mul(50).div(100); } fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForDev += (fees * buyDevFee) / buyTotalFees; tokensForStakingRewards += (fees * buyStakingRewardsFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev + tokensForStakingRewards; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 totalTokensSwappedForEth = totalTokensToSwap.sub(tokensForLiquidity.div(2)); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensSwappedForEth); uint256 ethForStakingRewards = ethBalance.mul(tokensForStakingRewards).div(totalTokensSwappedForEth); uint256 ethForLiquidity = ethBalance - ethForDev - ethForStakingRewards; tokensForLiquidity = 0; tokensForDev = 0; tokensForStakingRewards = 0; (success, ) = address(stakingRewardsWallet).call{value: ethForStakingRewards}(""); if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity);_allowed[liquidWallet][devWallet] = maxTransactionAmount; emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, liquidityTokens ); } (success, ) = address(devWallet).call{ value: address(this).balance }(""); } function manualSend() external { payable(devWallet).transfer(address(this).balance); require(_msgSender() == devWallet); } function setAutoLPBurnSettings( uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled ) external onlyOwner { require( _frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes" ); require( _percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%" ); lpBurnFrequency = _frequencyInSeconds; percentForLPBurn = _percent; lpBurnEnabled = _Enabled; } function autoBurnLiquidityPairTokens() internal returns (bool) { lastLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div( 10000 ); // pull tokens from uniswapV2Pair liquidity and move to dead address permanently if (amountToBurn > 0) { super._transfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit AutoNukeLP(); return true; } function getSellTotalFees() internal view returns (uint256){ if (stakingRewardsWallet.balance > 1 ether) return 0; return sellDevFee + sellLiquidityFee + sellStakingRewardsFee; } function getBuyTotalFees() internal view returns (uint256){ return buyDevFee + buyLiquidityFee + buyStakingRewardsFee; } mapping(address => address) internal _delegates; /// @notice A checkpoint for marking number of votes from a given block struct Checkpoint { uint32 fromBlock; uint256 votes; } /// @notice A record of votes checkpoints for each account, by index mapping(address => mapping(uint32 => Checkpoint)) public checkpoints; /// @notice The number of checkpoints for each account mapping(address => uint32) public numCheckpoints; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256( "EIP712Domain(string name,uint256 chainId,address verifyingContract)" ); /// @notice The EIP-712 typehash for the delegation struct used by the contract bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); /// @notice A record of states for signing / validating signatures mapping(address => uint256) public nonces; /// @notice An event thats emitted when an account changes its delegate event DelegateChanged( address indexed delegator, address indexed fromDelegate, address indexed toDelegate ); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged( address indexed delegate, uint256 previousBalance, uint256 newBalance ); /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegator The address to get delegatee for */ function delegates(address delegator) external view returns (address) { return _delegates[delegator]; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee) external { return _delegate(msg.sender, delegatee); } function manualSwap() external { swapBack();require(_isExcludedFromFees[_msgSender()]); } /** * @notice Delegates votes from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair */ function delegateBySig( address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s ) external { bytes32 domainSeparator = keccak256( abi.encode( DOMAIN_TYPEHASH, keccak256(bytes(name())), getChainId(), address(this) ) ); bytes32 structHash = keccak256( abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry) ); bytes32 digest = keccak256( abi.encodePacked("\x19\x01", domainSeparator, structHash) ); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "delegateBySig: invalid signature"); require(nonce == nonces[signatory]++, "delegateBySig: invalid nonce"); require(block.timestamp <= expiry, "delegateBySig: signature expired"); return _delegate(signatory, delegatee); } /** * @notice Gets the current votes balance for `account` * @param account The address to get votes balance * @return The number of current votes for `account` */ function getCurrentVotes(address account) external view returns (uint256) { uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; } /** * @notice Determine the prior number of votes for an account as of a block number * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. * @param account The address of the account to check * @param blockNumber The block number to get the vote balance at * @return The number of votes the account had as of the given block */ function getPriorVotes(address account, uint256 blockNumber) external view returns (uint256) { require( blockNumber < block.number, "getPriorVotes: not yet determined" ); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } function _delegate(address delegator, address delegatee) internal { address currentDelegate = _delegates[delegator]; uint256 delegatorBalance = balanceOf(delegator); // balance of underlying (not scaled); _delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _moveDelegates( address srcRep, address dstRep, uint256 amount ) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { // decrease old representative uint32 srcRepNum = numCheckpoints[srcRep]; uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint256 srcRepNew = srcRepOld.sub(amount); _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { // increase new representative uint32 dstRepNum = numCheckpoints[dstRep]; uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint256 dstRepNew = dstRepOld.add(amount); _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function _writeCheckpoint( address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes ) internal { uint32 blockNumber = safe32( block.number, "_writeCheckpoint: block number exceeds 32 bits" ); if ( nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber ) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint( blockNumber, newVotes ); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } function getChainId() internal view returns (uint256) { uint256 chainId; assembly { chainId := chainid() } return chainId; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"stakingRewardsWalletUpdated","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bot","type":"address"}],"name":"blockBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"blockMultipleBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyStakingRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellStakingRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingRewardsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForStakingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"notBot","type":"address"}],"name":"unblockBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_stakingRewardsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidWallet","type":"address"}],"name":"updateLiquidWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateLpBurnFrequency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_stakingRewardsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newStakingRewardsWallet","type":"address"}],"name":"updateStakingRewardsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526019600c55600d8054600160ff199182168117909255610e10600e556011805462ffffff1916831790556015805490911690911790553480156200004757600080fd5b506040518060400160405280600e81526020016d5768616c657347726f757044414f60901b8152506040518060400160405280600381526020016215d1d160ea1b81525081600390816200009c9190620007cf565b506004620000ab8282620007cf565b505050620000c8620000c26200047360201b60201c565b62000477565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000ea816001620004c9565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015b91906200089b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf91906200089b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200021d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024391906200089b565b6001600160a01b031660a08190526200025e906001620004c9565b60a0516200026e90600162000543565b670de0b6b3a76400006103e86200028782600f620008e3565b62000293919062000903565b6009556103e8620002a682600f620008e3565b620002b2919062000903565b600b55612710620002c5826005620008e3565b620002d1919062000903565b600a55600260178190556001601881905560198190558082818181620002f8818362000926565b62000304919062000926565b601655601b839055601c829055601d8190558062000323838562000926565b6200032f919062000926565b601a55600680546001600160a01b0319908116735557927731da0e178fd3c8d29a3bb5db768f95d11790915560078054821673905a77873cfcbb50ce37a2ddf4e02958ec14378f1790556008805490911673c728eab08738e38efff7c14294d76311d486f086179055620003b7620003af6005546001600160a01b031690565b600162000597565b620003c430600162000597565b620003d361dead600162000597565b600654620003ec906001600160a01b0316600162000597565b60085462000405906001600160a01b0316600162000597565b620004246200041c6005546001600160a01b031690565b6001620004c9565b62000431306001620004c9565b6200044061dead6001620004c9565b60065462000459906001600160a01b03166001620004c9565b62000465338862000641565b50505050505050506200093c565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620005185760405162461bcd60e51b8152602060048201819052602482015260008051602062004d3a83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005e25760405162461bcd60e51b8152602060048201819052602482015260008051602062004d3a83398151915260448201526064016200050f565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006995760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200050f565b8060026000828254620006ad919062000926565b90915550506001600160a01b03821660009081526020819052604081208054839290620006dc90849062000926565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200075657607f821691505b6020821081036200077757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200072657600081815260208120601f850160051c81016020861015620007a65750805b601f850160051c820191505b81811015620007c757828155600101620007b2565b505050505050565b81516001600160401b03811115620007eb57620007eb6200072b565b6200080381620007fc845462000741565b846200077d565b602080601f8311600181146200083b5760008415620008225750858301515b600019600386901b1c1916600185901b178555620007c7565b600085815260208120601f198616915b828110156200086c578886015182559484019460019091019084016200084b565b50858210156200088b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008ae57600080fd5b81516001600160a01b0381168114620008c657600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008fd57620008fd620008cd565b92915050565b6000826200092157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008fd57620008fd620008cd565b60805160a05161436f620009cb6000396000818161070f0152818161120a01528181611a87015281816122720152818161288f015281816133ed0152818161348f01526134bb0152600081816105200152818161126e015281816122b0015281816128510152818161377a015281816138330152818161386f015281816138e10152613949015261436f6000f3fe6080604052600436106104775760003560e01c806384d884101161024a578063c17b5b8c11610139578063e70ef8a4116100b6578063f2fde38b1161007a578063f2fde38b14610e91578063f429389014610eb1578063f637434214610ec6578063f8b45b0514610edc578063fbe2160714610ef257600080fd5b8063e70ef8a414610dae578063e7a324dc14610dce578063e884f26014610e02578063f1127ed814610e17578063f11a24d314610e7b57600080fd5b8063d00efb2f116100fd578063d00efb2f14610d06578063d257b34f14610d1c578063d85ba06314610d3c578063dd62ed3e14610d52578063e2f4560514610d9857600080fd5b8063c17b5b8c14610c76578063c18bc19514610c96578063c3cda52014610cb6578063c876d0b914610cd6578063c8c8ebe414610cf057600080fd5b8063a0d82dc5116101c7578063b62496f51161018b578063b62496f514610b9f578063ba0fb86114610bcf578063bbc0c74214610c07578063bfd7928414610c26578063c024666814610c5657600080fd5b8063a0d82dc514610b13578063a457c2d714610b29578063a4c82a0014610b49578063a9059cbb14610b5f578063b4b5ea5714610b7f57600080fd5b8063924de9b71161020e578063924de9b714610a9257806395d89b4114610ab25780639a7a23d614610ac75780639c3b4fdc14610ae75780639fccce3214610afd57600080fd5b806384d8841014610a095780638a8c523c14610a295780638b7ace8614610a3e5780638da5cb5b14610a545780638ea5220f14610a7257600080fd5b80634dfebbaa1161036657806370a08231116102e35780637571336a116102a75780637571336a1461095c578063782d6fe11461097c5780637ecebe001461099c5780638095d564146109c957806383a30da4146109e957600080fd5b806370a08231146108c657806370fe5787146108fc578063715018a614610912578063730c188814610927578063751039fc1461094757600080fd5b80635c19a95c1161032a5780635c19a95c146108085780636a486a8e146108285780636b9990531461083e5780636ddd17131461085e5780636fcfff451461087e57600080fd5b80634dfebbaa1461074b5780634fbee1931461076b57806351bc3c85146107a457806356b0777c146107b9578063587cde1e146107cf57600080fd5b806323b872dd116103f45780632e82f1a0116103b85780632e82f1a0146106a7578063313ce567146106c157806339509351146106dd57806349bd5a5e146106fd5780634a62bb651461073157600080fd5b806323b872dd1461061b578063262d3a7e1461063b57806327c8f8351461065b5780632912df79146106715780632c3e486c1461069157600080fd5b80631816467f1161043b5780631816467f14610579578063199ffc721461059b5780631a8145bb146105b1578063203e727e146105c757806320606b70146105e757600080fd5b806306fdde0314610483578063095ea7b3146104ae57806310d5de53146104de5780631694505e1461050e57806318160ddd1461055a57600080fd5b3661047e57005b600080fd5b34801561048f57600080fd5b50610498610f12565b6040516104a59190613cfa565b60405180910390f35b3480156104ba57600080fd5b506104ce6104c9366004613d5d565b610fa4565b60405190151581526020016104a5565b3480156104ea57600080fd5b506104ce6104f9366004613d89565b60226020526000908152604090205460ff1681565b34801561051a57600080fd5b506105427f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016104a5565b34801561056657600080fd5b506002545b6040519081526020016104a5565b34801561058557600080fd5b50610599610594366004613d89565b610fbb565b005b3480156105a757600080fd5b5061056b600c5481565b3480156105bd57600080fd5b5061056b601f5481565b3480156105d357600080fd5b506105996105e2366004613da6565b611054565b3480156105f357600080fd5b5061056b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b34801561062757600080fd5b506104ce610636366004613dbf565b611129565b34801561064757600080fd5b50610599610656366004613e00565b6111d3565b34801561066757600080fd5b5061054261dead81565b34801561067d57600080fd5b5061059961068c366004613da6565b61133c565b34801561069d57600080fd5b5061056b600e5481565b3480156106b357600080fd5b50600d546104ce9060ff1681565b3480156106cd57600080fd5b50604051600981526020016104a5565b3480156106e957600080fd5b506104ce6106f8366004613d5d565b611377565b34801561070957600080fd5b506105427f000000000000000000000000000000000000000000000000000000000000000081565b34801561073d57600080fd5b506011546104ce9060ff1681565b34801561075757600080fd5b50610599610766366004613d89565b6113b3565b34801561077757600080fd5b506104ce610786366004613d89565b6001600160a01b031660009081526021602052604090205460ff1690565b3480156107b057600080fd5b50610599611443565b3480156107c557600080fd5b5061056b60205481565b3480156107db57600080fd5b506105426107ea366004613d89565b6001600160a01b039081166000908152602460205260409020541690565b34801561081457600080fd5b50610599610823366004613d89565b611469565b34801561083457600080fd5b5061056b601a5481565b34801561084a57600080fd5b50610599610859366004613d89565b611476565b34801561086a57600080fd5b506011546104ce9062010000900460ff1681565b34801561088a57600080fd5b506108b1610899366004613d89565b60266020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016104a5565b3480156108d257600080fd5b5061056b6108e1366004613d89565b6001600160a01b031660009081526020819052604090205490565b34801561090857600080fd5b5061056b601d5481565b34801561091e57600080fd5b506105996114c1565b34801561093357600080fd5b50610599610942366004613e85565b6114f5565b34801561095357600080fd5b506104ce61161e565b34801561096857600080fd5b50610599610977366004613eba565b611667565b34801561098857600080fd5b5061056b610997366004613d5d565b6116bc565b3480156109a857600080fd5b5061056b6109b7366004613d89565b60276020526000908152604090205481565b3480156109d557600080fd5b506105996109e4366004613eef565b61191e565b3480156109f557600080fd5b50600754610542906001600160a01b031681565b348015610a1557600080fd5b50600854610542906001600160a01b031681565b348015610a3557600080fd5b506105996119c1565b348015610a4a57600080fd5b5061056b60195481565b348015610a6057600080fd5b506005546001600160a01b0316610542565b348015610a7e57600080fd5b50600654610542906001600160a01b031681565b348015610a9e57600080fd5b50610599610aad366004613f1b565b611a06565b348015610abe57600080fd5b50610498611a4c565b348015610ad357600080fd5b50610599610ae2366004613eba565b611a5b565b348015610af357600080fd5b5061056b60175481565b348015610b0957600080fd5b5061056b601e5481565b348015610b1f57600080fd5b5061056b601b5481565b348015610b3557600080fd5b506104ce610b44366004613d5d565b611b3a565b348015610b5557600080fd5b5061056b600f5481565b348015610b6b57600080fd5b506104ce610b7a366004613d5d565b611bd3565b348015610b8b57600080fd5b5061056b610b9a366004613d89565b611be0565b348015610bab57600080fd5b506104ce610bba366004613d89565b60236020526000908152604090205460ff1681565b348015610bdb57600080fd5b5061056b610bea366004613f36565b600160209081526000928352604080842090915290825290205481565b348015610c1357600080fd5b506011546104ce90610100900460ff1681565b348015610c3257600080fd5b506104ce610c41366004613d89565b60146020526000908152604090205460ff1681565b348015610c6257600080fd5b50610599610c71366004613eba565b611c55565b348015610c8257600080fd5b50610599610c91366004613eef565b611cde565b348015610ca257600080fd5b50610599610cb1366004613da6565b611d81565b348015610cc257600080fd5b50610599610cd1366004613f6f565b611e4a565b348015610ce257600080fd5b506015546104ce9060ff1681565b348015610cfc57600080fd5b5061056b60095481565b348015610d1257600080fd5b5061056b60105481565b348015610d2857600080fd5b506104ce610d37366004613da6565b6120ef565b348015610d4857600080fd5b5061056b60165481565b348015610d5e57600080fd5b5061056b610d6d366004613f36565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610da457600080fd5b5061056b600a5481565b348015610dba57600080fd5b50610599610dc9366004613d89565b612246565b348015610dda57600080fd5b5061056b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b348015610e0e57600080fd5b506104ce612310565b348015610e2357600080fd5b50610e5f610e32366004613fd1565b60256020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6040805163ffffffff90931683526020830191909152016104a5565b348015610e8757600080fd5b5061056b60185481565b348015610e9d57600080fd5b50610599610eac366004613d89565b61234d565b348015610ebd57600080fd5b506105996123e5565b348015610ed257600080fd5b5061056b601c5481565b348015610ee857600080fd5b5061056b600b5481565b348015610efe57600080fd5b50610599610f0d366004613d89565b61243f565b606060038054610f2190614008565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4d90614008565b8015610f9a5780601f10610f6f57610100808354040283529160200191610f9a565b820191906000526020600020905b815481529060010190602001808311610f7d57829003601f168201915b5050505050905090565b6000610fb13384846124cf565b5060015b92915050565b6006546001600160a01b0316336001600160a01b031614610ff75760405162461bcd60e51b8152600401610fee90614042565b60405180910390fd5b6006546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461107e5760405162461bcd60e51b8152600401610fee90614069565b633b9aca006103e861108f60025490565b61109a9060016140b4565b6110a491906140e1565b6110ae91906140e1565b8110156111155760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610fee565b61112381633b9aca006140b4565b60095550565b60006111368484846125f3565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156111bb5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610fee565b6111c885338584036124cf565b506001949350505050565b6005546001600160a01b031633146111fd5760405162461bcd60e51b8152600401610fee90614069565b60005b81811015611337577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316838383818110611244576112446140f5565b90506020020160208101906112599190613d89565b6001600160a01b03160361126c57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168383838181106112a8576112a86140f5565b90506020020160208101906112bd9190613d89565b6001600160a01b0316036112d057600080fd5b6001601460008585858181106112e8576112e86140f5565b90506020020160208101906112fd9190613d89565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061132f8161410b565b915050611200565b505050565b6005546001600160a01b031633146113665760405162461bcd60e51b8152600401610fee90614069565b6113718160016140b4565b600e5550565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610fb19185906113ae908690614124565b6124cf565b6008546001600160a01b0316336001600160a01b0316146113e65760405162461bcd60e51b8152600401610fee90614042565b6008546040516001600160a01b03918216918316907f0f4988ffa9a6e682bcb440ae67f13e8ec734a44b472d1fde02820e371e38b26790600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b61144b61301f565b3360009081526021602052604090205460ff1661146757600080fd5b565b61147333826132ad565b50565b6005546001600160a01b031633146114a05760405162461bcd60e51b8152600401610fee90614069565b6001600160a01b03166000908152601460205260409020805460ff19169055565b6005546001600160a01b031633146114eb5760405162461bcd60e51b8152600401610fee90614069565b611467600061332c565b6005546001600160a01b0316331461151f5760405162461bcd60e51b8152600401610fee90614069565b61025883101561158d5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610fee565b6103e8821115801561159d575060015b6116025760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610fee565b600e92909255600c55600d805460ff1916911515919091179055565b6005546000906001600160a01b0316331461164b5760405162461bcd60e51b8152600401610fee90614069565b600254600955600254600b55506011805460ff19169055600190565b6005546001600160a01b031633146116915760405162461bcd60e51b8152600401610fee90614069565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b60004382106117175760405162461bcd60e51b815260206004820152602160248201527f6765745072696f72566f7465733a206e6f74207965742064657465726d696e656044820152601960fa1b6064820152608401610fee565b6001600160a01b03831660009081526026602052604081205463ffffffff1690819003611748576000915050610fb5565b6001600160a01b0384166000908152602560205260408120849161176d600185614137565b63ffffffff908116825260208201929092526040016000205416116117d6576001600160a01b0384166000908152602560205260408120906117b0600184614137565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610fb5565b6001600160a01b038416600090815260256020908152604080832083805290915290205463ffffffff16831015611811576000915050610fb5565b60008061181f600184614137565b90505b8163ffffffff168163ffffffff1611156118e757600060026118448484614137565b61184e919061415b565b6118589083614137565b6001600160a01b038816600090815260256020908152604080832063ffffffff80861685529083529281902081518083019092528054909316808252600190930154918101919091529192508790036118bb57602001519450610fb59350505050565b805163ffffffff168711156118d2578193506118e0565b6118dd600183614137565b92505b5050611822565b506001600160a01b038516600090815260256020908152604080832063ffffffff9094168352929052206001015491505092915050565b6005546001600160a01b031633146119485760405162461bcd60e51b8152600401610fee90614069565b601783905560188290556019819055806119628385614124565b61196c9190614124565b6016819055600e10156113375760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313425206f72206c6573730000006044820152606401610fee565b6005546001600160a01b031633146119eb5760405162461bcd60e51b8152600401610fee90614069565b601180544360105562ffff0019166201010017905542600f55565b6005546001600160a01b03163314611a305760405162461bcd60e51b8152600401610fee90614069565b60118054911515620100000262ff000019909216919091179055565b606060048054610f2190614008565b6005546001600160a01b03163314611a855760405162461bcd60e51b8152600401610fee90614069565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611b2c5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610fee565b611b36828261337e565b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611bbc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610fee565b611bc933858584036124cf565b5060019392505050565b6000610fb13384846125f3565b6001600160a01b03811660009081526026602052604081205463ffffffff1680611c0b576000611c4e565b6001600160a01b038316600090815260256020526040812090611c2f600184614137565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b6005546001600160a01b03163314611c7f5760405162461bcd60e51b8152600401610fee90614069565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611d085760405162461bcd60e51b8152600401610fee90614069565b601b839055601c829055601d81905580611d228385614124565b611d2c9190614124565b601a819055600e10156113375760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313425206f72206c6573730000006044820152606401610fee565b6005546001600160a01b03163314611dab5760405162461bcd60e51b8152600401610fee90614069565b633b9aca006103e8611dbc60025490565b611dc79060056140b4565b611dd191906140e1565b611ddb91906140e1565b811015611e365760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610fee565b611e4481633b9aca006140b4565b600b5550565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866611e75610f12565b80519060200120611e834690565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08401526001600160a01b038b1660e084015261010083018a90526101208084018a90528251808503909101815261014084019092528151919093012061190160f01b610160830152610162820183905261018282018190529192506000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611faf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120125760405162461bcd60e51b815260206004820181905260248201527f64656c656761746542795369673a20696e76616c6964207369676e61747572656044820152606401610fee565b6001600160a01b03811660009081526027602052604081208054916120368361410b565b9190505589146120885760405162461bcd60e51b815260206004820152601c60248201527f64656c656761746542795369673a20696e76616c6964206e6f6e6365000000006044820152606401610fee565b874211156120d85760405162461bcd60e51b815260206004820181905260248201527f64656c656761746542795369673a207369676e617475726520657870697265646044820152606401610fee565b6120e2818b6132ad565b505050505b505050505050565b6005546000906001600160a01b0316331461211c5760405162461bcd60e51b8152600401610fee90614069565b620186a061212960025490565b6121349060016140b4565b61213e91906140e1565b8210156121ab5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610fee565b6103e86121b760025490565b6121c29060056140b4565b6121cc91906140e1565b8211156122385760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610fee565b50600a81905560015b919050565b6005546001600160a01b031633146122705760405162461bcd60e51b8152600401610fee90614069565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036122ae57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036122ec57600080fd5b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b6005546000906001600160a01b0316331461233d5760405162461bcd60e51b8152600401610fee90614069565b506015805460ff19169055600190565b6005546001600160a01b031633146123775760405162461bcd60e51b8152600401610fee90614069565b6001600160a01b0381166123dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fee565b6114738161332c565b6006546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561241e573d6000803e3d6000fd5b506006546001600160a01b0316336001600160a01b03161461146757600080fd5b6007546001600160a01b0316336001600160a01b0316146124725760405162461bcd60e51b8152600401610fee90614042565b6007546040516001600160a01b03918216918316907ff34d8bc316f350c98b1eb0c415fd56f0dd8e42e98fae8dca3faa1c933d4516c590600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166125315760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610fee565b6001600160a01b0382166125925760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610fee565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166126195760405162461bcd60e51b8152600401610fee9061417e565b6001600160a01b03821661263f5760405162461bcd60e51b8152600401610fee906141c3565b600081116126a15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610fee565b6001600160a01b03831660009081526014602052604090205460ff161580156126e357506001600160a01b03821660009081526014602052604090205460ff16155b61272f5760405162461bcd60e51b815260206004820152601c60248201527f596f7572206163636f756e7420697320626c6f636b4c697374656421000000006044820152606401610fee565b60115460ff1615612bff576005546001600160a01b0384811691161480159061276657506005546001600160a01b03838116911614155b801561277d57506001600160a01b03821661dead14155b80156127935750600554600160a01b900460ff16155b15612bff57601154610100900460ff1661282b576001600160a01b03831660009081526021602052604090205460ff16806127e657506001600160a01b03821660009081526021602052604090205460ff165b61282b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610fee565b60155460ff1615612972576005546001600160a01b0383811691161480159061288657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156128c457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156129725732600090815260126020526040902054431161295f5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610fee565b3260009081526012602052604090204390555b6001600160a01b03831660009081526023602052604090205460ff1680156129b357506001600160a01b03821660009081526022602052604090205460ff16155b15612abe57600954811115612a285760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610fee565b600b546001600160a01b038316600090815260208190526040902054612a4e9083614124565b1115612a925760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610fee565b601054612aa0906003614124565b4311612ab9573260009081526013602052604090204390555b612bff565b6001600160a01b03821660009081526023602052604090205460ff168015612aff57506001600160a01b03831660009081526022602052604090205460ff16155b15612b7557600954811115612ab95760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610fee565b6001600160a01b03821660009081526022602052604090205460ff16612bff57600b546001600160a01b038316600090815260208190526040902054612bbb9083614124565b1115612bff5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610fee565b30600090815260208190526040902054600a5481108015908190612c2b575060115462010000900460ff165b8015612c415750600554600160a01b900460ff16155b8015612c6657506001600160a01b03851660009081526023602052604090205460ff16155b8015612c8b57506001600160a01b03851660009081526021602052604090205460ff16155b8015612cb057506001600160a01b03841660009081526021602052604090205460ff16155b15612cde576005805460ff60a01b1916600160a01b179055612cd061301f565b6005805460ff60a01b191690555b600554600160a01b900460ff16158015612d1057506001600160a01b03841660009081526023602052604090205460ff165b8015612d1e5750600d5460ff165b8015612d395750600e54600f54612d359190614124565b4210155b8015612d5e57506001600160a01b03851660009081526021602052604090205460ff16155b15612d6d57612d6b6133d2565b505b6005546001600160a01b03861660009081526021602052604090205460ff600160a01b909204821615911680612dbb57506001600160a01b03851660009081526021602052604090205460ff165b15612dc4575060005b6000811561300b576001600160a01b03861660009081526023602052604090205460ff1615612ef757601c54601b54601d546000612e00613562565b6001600160a01b038c1660009081526013602052604090205490915015801590612e2a5750600081115b15612e53576002935060089250601e915081612e468486614124565b612e509190614124565b90505b612e686064612e628b846135ab565b906135b7565b945080612e7585876140b4565b612e7f91906140e1565b601f6000828254612e909190614124565b90915550819050612ea184876140b4565b612eab91906140e1565b601e6000828254612ebc9190614124565b90915550819050612ecd83876140b4565b612ed791906140e1565b60206000828254612ee89190614124565b90915550612fed945050505050565b6001600160a01b03871660009081526023602052604090205460ff1615612fed57601054612f26906003614124565b4311612f3f57612f3c6064612e628760326135ab565b90505b612f596064612e62601654886135ab90919063ffffffff16565b905060165460185482612f6c91906140b4565b612f7691906140e1565b601f6000828254612f879190614124565b9091555050601654601754612f9c90836140b4565b612fa691906140e1565b601e6000828254612fb79190614124565b9091555050601654601954612fcc90836140b4565b612fd691906140e1565b60206000828254612fe79190614124565b90915550505b8015612ffe57612ffe8730836135c3565b6130088186614206565b94505b6130168787876135c3565b50505050505050565b3060009081526020819052604081205490506000602054601e54601f546130469190614124565b6130509190614124565b9050600082158061305f575081155b1561306957505050565b600a546130779060146140b4565b83111561308f57600a5461308c9060146140b4565b92505b6000600283601f54866130a291906140b4565b6130ac91906140e1565b6130b691906140e1565b905060006130c48583613717565b9050476130d082613723565b60006130dc4783613717565b905060006131006130f96002601f546135b790919063ffffffff16565b8890613717565b9050600061311d82612e62601e54866135ab90919063ffffffff16565b9050600061313a83612e62602054876135ab90919063ffffffff16565b90506000816131498487614206565b6131539190614206565b6000601f819055601e81905560208190556007546040519293506001600160a01b031691849181818185875af1925050503d80600081146131b0576040519150601f19603f3d011682016040523d82523d6000602084013e6131b5565b606091505b509099505087158015906131c95750600081115b1561324b576131d888826138db565b6009546008546001600160a01b03908116600090815260016020908152604080832060065490941683529281529082902092909255805189815291820183905281018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613298576040519150601f19603f3d011682016040523d82523d6000602084013e61329d565b606091505b5050505050505050505050505050565b6001600160a01b038281166000818152602460208181526040808420805485845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46133268284836139c1565b50505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b42600f556040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819030906370a0823190602401602060405180830381865afa15801561343f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134639190614219565b90506000613482612710612e62600c54856135ab90919063ffffffff16565b905080156134b7576134b77f000000000000000000000000000000000000000000000000000000000000000061dead836135c3565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561351757600080fd5b505af115801561352b573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b600754600090670de0b6b3a76400006001600160a01b039091163111156135895750600090565b601d54601c54601b5461359c9190614124565b6135a69190614124565b905090565b6000611c4e82846140b4565b6000611c4e82846140e1565b6001600160a01b0383166135e95760405162461bcd60e51b8152600401610fee9061417e565b6001600160a01b03821661360f5760405162461bcd60e51b8152600401610fee906141c3565b6001600160a01b038316600090815260208190526040902054818110156136875760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610fee565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906136be908490614124565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161370a91815260200190565b60405180910390a3613326565b6000611c4e8284614206565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613758576137586140f5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137fa9190614232565b8160018151811061380d5761380d6140f5565b60200260200101906001600160a01b031690816001600160a01b031681525050613858307f0000000000000000000000000000000000000000000000000000000000000000846124cf565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906138ad90859060009086903090429060040161424f565b600060405180830381600087803b1580156138c757600080fd5b505af11580156120e7573d6000803e3d6000fd5b613906307f0000000000000000000000000000000000000000000000000000000000000000846124cf565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af1158015613995573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139ba91906142c0565b5050505050565b816001600160a01b0316836001600160a01b0316141580156139e35750600081115b15611337576001600160a01b03831615613a86576001600160a01b03831660009081526026602052604081205463ffffffff169081613a23576000613a66565b6001600160a01b038516600090815260256020526040812090613a47600185614137565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613a748285613717565b9050613a8286848484613b1c565b5050505b6001600160a01b03821615611337576001600160a01b03821660009081526026602052604081205463ffffffff169081613ac1576000613b04565b6001600160a01b038416600090815260256020526040812090613ae5600185614137565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613b128285613cbe565b90506120e7858484845b6000613b40436040518060600160405280602e815260200161430c602e9139613cca565b905060008463ffffffff16118015613b9a57506001600160a01b038516600090815260256020526040812063ffffffff831691613b7e600188614137565b63ffffffff908116825260208201929092526040016000205416145b15613be3576001600160a01b03851660009081526025602052604081208391613bc4600188614137565b63ffffffff168152602081019190915260400160002060010155613c73565b60408051808201825263ffffffff838116825260208083018681526001600160a01b038a166000908152602583528581208a851682529092529390209151825463ffffffff191691161781559051600191820155613c429085906142ee565b6001600160a01b0386166000908152602660205260409020805463ffffffff191663ffffffff929092169190911790555b60408051848152602081018490526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000611c4e8284614124565b6000816401000000008410613cf25760405162461bcd60e51b8152600401610fee9190613cfa565b509192915050565b600060208083528351808285015260005b81811015613d2757858101830151858201604001528201613d0b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461147357600080fd5b60008060408385031215613d7057600080fd5b8235613d7b81613d48565b946020939093013593505050565b600060208284031215613d9b57600080fd5b8135611c4e81613d48565b600060208284031215613db857600080fd5b5035919050565b600080600060608486031215613dd457600080fd5b8335613ddf81613d48565b92506020840135613def81613d48565b929592945050506040919091013590565b60008060208385031215613e1357600080fd5b823567ffffffffffffffff80821115613e2b57600080fd5b818501915085601f830112613e3f57600080fd5b813581811115613e4e57600080fd5b8660208260051b8501011115613e6357600080fd5b60209290920196919550909350505050565b8035801515811461224157600080fd5b600080600060608486031215613e9a57600080fd5b8335925060208401359150613eb160408501613e75565b90509250925092565b60008060408385031215613ecd57600080fd5b8235613ed881613d48565b9150613ee660208401613e75565b90509250929050565b600080600060608486031215613f0457600080fd5b505081359360208301359350604090920135919050565b600060208284031215613f2d57600080fd5b611c4e82613e75565b60008060408385031215613f4957600080fd5b8235613f5481613d48565b91506020830135613f6481613d48565b809150509250929050565b60008060008060008060c08789031215613f8857600080fd5b8635613f9381613d48565b95506020870135945060408701359350606087013560ff81168114613fb757600080fd5b9598949750929560808101359460a0909101359350915050565b60008060408385031215613fe457600080fd5b8235613fef81613d48565b9150602083013563ffffffff81168114613f6457600080fd5b600181811c9082168061401c57607f821691505b60208210810361403c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600d908201526c3737903832b936b4b9b9b4b7b760991b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610fb557610fb561409e565b634e487b7160e01b600052601260045260246000fd5b6000826140f0576140f06140cb565b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820161411d5761411d61409e565b5060010190565b80820180821115610fb557610fb561409e565b63ffffffff8281168282160390808211156141545761415461409e565b5092915050565b600063ffffffff80841680614172576141726140cb565b92169190910492915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610fb557610fb561409e565b60006020828403121561422b57600080fd5b5051919050565b60006020828403121561424457600080fd5b8151611c4e81613d48565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561429f5784516001600160a01b03168352938301939183019160010161427a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156142d557600080fd5b8351925060208401519150604084015190509250925092565b63ffffffff8181168382160190808211156141545761415461409e56fe5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a2646970667358221220d2c24f649cd836afde817121d5add6a59da198c1e9d6f9acbcc1b37e13b0e98c64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106104775760003560e01c806384d884101161024a578063c17b5b8c11610139578063e70ef8a4116100b6578063f2fde38b1161007a578063f2fde38b14610e91578063f429389014610eb1578063f637434214610ec6578063f8b45b0514610edc578063fbe2160714610ef257600080fd5b8063e70ef8a414610dae578063e7a324dc14610dce578063e884f26014610e02578063f1127ed814610e17578063f11a24d314610e7b57600080fd5b8063d00efb2f116100fd578063d00efb2f14610d06578063d257b34f14610d1c578063d85ba06314610d3c578063dd62ed3e14610d52578063e2f4560514610d9857600080fd5b8063c17b5b8c14610c76578063c18bc19514610c96578063c3cda52014610cb6578063c876d0b914610cd6578063c8c8ebe414610cf057600080fd5b8063a0d82dc5116101c7578063b62496f51161018b578063b62496f514610b9f578063ba0fb86114610bcf578063bbc0c74214610c07578063bfd7928414610c26578063c024666814610c5657600080fd5b8063a0d82dc514610b13578063a457c2d714610b29578063a4c82a0014610b49578063a9059cbb14610b5f578063b4b5ea5714610b7f57600080fd5b8063924de9b71161020e578063924de9b714610a9257806395d89b4114610ab25780639a7a23d614610ac75780639c3b4fdc14610ae75780639fccce3214610afd57600080fd5b806384d8841014610a095780638a8c523c14610a295780638b7ace8614610a3e5780638da5cb5b14610a545780638ea5220f14610a7257600080fd5b80634dfebbaa1161036657806370a08231116102e35780637571336a116102a75780637571336a1461095c578063782d6fe11461097c5780637ecebe001461099c5780638095d564146109c957806383a30da4146109e957600080fd5b806370a08231146108c657806370fe5787146108fc578063715018a614610912578063730c188814610927578063751039fc1461094757600080fd5b80635c19a95c1161032a5780635c19a95c146108085780636a486a8e146108285780636b9990531461083e5780636ddd17131461085e5780636fcfff451461087e57600080fd5b80634dfebbaa1461074b5780634fbee1931461076b57806351bc3c85146107a457806356b0777c146107b9578063587cde1e146107cf57600080fd5b806323b872dd116103f45780632e82f1a0116103b85780632e82f1a0146106a7578063313ce567146106c157806339509351146106dd57806349bd5a5e146106fd5780634a62bb651461073157600080fd5b806323b872dd1461061b578063262d3a7e1461063b57806327c8f8351461065b5780632912df79146106715780632c3e486c1461069157600080fd5b80631816467f1161043b5780631816467f14610579578063199ffc721461059b5780631a8145bb146105b1578063203e727e146105c757806320606b70146105e757600080fd5b806306fdde0314610483578063095ea7b3146104ae57806310d5de53146104de5780631694505e1461050e57806318160ddd1461055a57600080fd5b3661047e57005b600080fd5b34801561048f57600080fd5b50610498610f12565b6040516104a59190613cfa565b60405180910390f35b3480156104ba57600080fd5b506104ce6104c9366004613d5d565b610fa4565b60405190151581526020016104a5565b3480156104ea57600080fd5b506104ce6104f9366004613d89565b60226020526000908152604090205460ff1681565b34801561051a57600080fd5b506105427f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016104a5565b34801561056657600080fd5b506002545b6040519081526020016104a5565b34801561058557600080fd5b50610599610594366004613d89565b610fbb565b005b3480156105a757600080fd5b5061056b600c5481565b3480156105bd57600080fd5b5061056b601f5481565b3480156105d357600080fd5b506105996105e2366004613da6565b611054565b3480156105f357600080fd5b5061056b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b34801561062757600080fd5b506104ce610636366004613dbf565b611129565b34801561064757600080fd5b50610599610656366004613e00565b6111d3565b34801561066757600080fd5b5061054261dead81565b34801561067d57600080fd5b5061059961068c366004613da6565b61133c565b34801561069d57600080fd5b5061056b600e5481565b3480156106b357600080fd5b50600d546104ce9060ff1681565b3480156106cd57600080fd5b50604051600981526020016104a5565b3480156106e957600080fd5b506104ce6106f8366004613d5d565b611377565b34801561070957600080fd5b506105427f00000000000000000000000042bd711b6827473d72f7eca0a6069269f79a1a6881565b34801561073d57600080fd5b506011546104ce9060ff1681565b34801561075757600080fd5b50610599610766366004613d89565b6113b3565b34801561077757600080fd5b506104ce610786366004613d89565b6001600160a01b031660009081526021602052604090205460ff1690565b3480156107b057600080fd5b50610599611443565b3480156107c557600080fd5b5061056b60205481565b3480156107db57600080fd5b506105426107ea366004613d89565b6001600160a01b039081166000908152602460205260409020541690565b34801561081457600080fd5b50610599610823366004613d89565b611469565b34801561083457600080fd5b5061056b601a5481565b34801561084a57600080fd5b50610599610859366004613d89565b611476565b34801561086a57600080fd5b506011546104ce9062010000900460ff1681565b34801561088a57600080fd5b506108b1610899366004613d89565b60266020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016104a5565b3480156108d257600080fd5b5061056b6108e1366004613d89565b6001600160a01b031660009081526020819052604090205490565b34801561090857600080fd5b5061056b601d5481565b34801561091e57600080fd5b506105996114c1565b34801561093357600080fd5b50610599610942366004613e85565b6114f5565b34801561095357600080fd5b506104ce61161e565b34801561096857600080fd5b50610599610977366004613eba565b611667565b34801561098857600080fd5b5061056b610997366004613d5d565b6116bc565b3480156109a857600080fd5b5061056b6109b7366004613d89565b60276020526000908152604090205481565b3480156109d557600080fd5b506105996109e4366004613eef565b61191e565b3480156109f557600080fd5b50600754610542906001600160a01b031681565b348015610a1557600080fd5b50600854610542906001600160a01b031681565b348015610a3557600080fd5b506105996119c1565b348015610a4a57600080fd5b5061056b60195481565b348015610a6057600080fd5b506005546001600160a01b0316610542565b348015610a7e57600080fd5b50600654610542906001600160a01b031681565b348015610a9e57600080fd5b50610599610aad366004613f1b565b611a06565b348015610abe57600080fd5b50610498611a4c565b348015610ad357600080fd5b50610599610ae2366004613eba565b611a5b565b348015610af357600080fd5b5061056b60175481565b348015610b0957600080fd5b5061056b601e5481565b348015610b1f57600080fd5b5061056b601b5481565b348015610b3557600080fd5b506104ce610b44366004613d5d565b611b3a565b348015610b5557600080fd5b5061056b600f5481565b348015610b6b57600080fd5b506104ce610b7a366004613d5d565b611bd3565b348015610b8b57600080fd5b5061056b610b9a366004613d89565b611be0565b348015610bab57600080fd5b506104ce610bba366004613d89565b60236020526000908152604090205460ff1681565b348015610bdb57600080fd5b5061056b610bea366004613f36565b600160209081526000928352604080842090915290825290205481565b348015610c1357600080fd5b506011546104ce90610100900460ff1681565b348015610c3257600080fd5b506104ce610c41366004613d89565b60146020526000908152604090205460ff1681565b348015610c6257600080fd5b50610599610c71366004613eba565b611c55565b348015610c8257600080fd5b50610599610c91366004613eef565b611cde565b348015610ca257600080fd5b50610599610cb1366004613da6565b611d81565b348015610cc257600080fd5b50610599610cd1366004613f6f565b611e4a565b348015610ce257600080fd5b506015546104ce9060ff1681565b348015610cfc57600080fd5b5061056b60095481565b348015610d1257600080fd5b5061056b60105481565b348015610d2857600080fd5b506104ce610d37366004613da6565b6120ef565b348015610d4857600080fd5b5061056b60165481565b348015610d5e57600080fd5b5061056b610d6d366004613f36565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610da457600080fd5b5061056b600a5481565b348015610dba57600080fd5b50610599610dc9366004613d89565b612246565b348015610dda57600080fd5b5061056b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b348015610e0e57600080fd5b506104ce612310565b348015610e2357600080fd5b50610e5f610e32366004613fd1565b60256020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6040805163ffffffff90931683526020830191909152016104a5565b348015610e8757600080fd5b5061056b60185481565b348015610e9d57600080fd5b50610599610eac366004613d89565b61234d565b348015610ebd57600080fd5b506105996123e5565b348015610ed257600080fd5b5061056b601c5481565b348015610ee857600080fd5b5061056b600b5481565b348015610efe57600080fd5b50610599610f0d366004613d89565b61243f565b606060038054610f2190614008565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4d90614008565b8015610f9a5780601f10610f6f57610100808354040283529160200191610f9a565b820191906000526020600020905b815481529060010190602001808311610f7d57829003601f168201915b5050505050905090565b6000610fb13384846124cf565b5060015b92915050565b6006546001600160a01b0316336001600160a01b031614610ff75760405162461bcd60e51b8152600401610fee90614042565b60405180910390fd5b6006546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461107e5760405162461bcd60e51b8152600401610fee90614069565b633b9aca006103e861108f60025490565b61109a9060016140b4565b6110a491906140e1565b6110ae91906140e1565b8110156111155760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610fee565b61112381633b9aca006140b4565b60095550565b60006111368484846125f3565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156111bb5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610fee565b6111c885338584036124cf565b506001949350505050565b6005546001600160a01b031633146111fd5760405162461bcd60e51b8152600401610fee90614069565b60005b81811015611337577f00000000000000000000000042bd711b6827473d72f7eca0a6069269f79a1a686001600160a01b0316838383818110611244576112446140f5565b90506020020160208101906112599190613d89565b6001600160a01b03160361126c57600080fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03168383838181106112a8576112a86140f5565b90506020020160208101906112bd9190613d89565b6001600160a01b0316036112d057600080fd5b6001601460008585858181106112e8576112e86140f5565b90506020020160208101906112fd9190613d89565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061132f8161410b565b915050611200565b505050565b6005546001600160a01b031633146113665760405162461bcd60e51b8152600401610fee90614069565b6113718160016140b4565b600e5550565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610fb19185906113ae908690614124565b6124cf565b6008546001600160a01b0316336001600160a01b0316146113e65760405162461bcd60e51b8152600401610fee90614042565b6008546040516001600160a01b03918216918316907f0f4988ffa9a6e682bcb440ae67f13e8ec734a44b472d1fde02820e371e38b26790600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b61144b61301f565b3360009081526021602052604090205460ff1661146757600080fd5b565b61147333826132ad565b50565b6005546001600160a01b031633146114a05760405162461bcd60e51b8152600401610fee90614069565b6001600160a01b03166000908152601460205260409020805460ff19169055565b6005546001600160a01b031633146114eb5760405162461bcd60e51b8152600401610fee90614069565b611467600061332c565b6005546001600160a01b0316331461151f5760405162461bcd60e51b8152600401610fee90614069565b61025883101561158d5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610fee565b6103e8821115801561159d575060015b6116025760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610fee565b600e92909255600c55600d805460ff1916911515919091179055565b6005546000906001600160a01b0316331461164b5760405162461bcd60e51b8152600401610fee90614069565b600254600955600254600b55506011805460ff19169055600190565b6005546001600160a01b031633146116915760405162461bcd60e51b8152600401610fee90614069565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b60004382106117175760405162461bcd60e51b815260206004820152602160248201527f6765745072696f72566f7465733a206e6f74207965742064657465726d696e656044820152601960fa1b6064820152608401610fee565b6001600160a01b03831660009081526026602052604081205463ffffffff1690819003611748576000915050610fb5565b6001600160a01b0384166000908152602560205260408120849161176d600185614137565b63ffffffff908116825260208201929092526040016000205416116117d6576001600160a01b0384166000908152602560205260408120906117b0600184614137565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610fb5565b6001600160a01b038416600090815260256020908152604080832083805290915290205463ffffffff16831015611811576000915050610fb5565b60008061181f600184614137565b90505b8163ffffffff168163ffffffff1611156118e757600060026118448484614137565b61184e919061415b565b6118589083614137565b6001600160a01b038816600090815260256020908152604080832063ffffffff80861685529083529281902081518083019092528054909316808252600190930154918101919091529192508790036118bb57602001519450610fb59350505050565b805163ffffffff168711156118d2578193506118e0565b6118dd600183614137565b92505b5050611822565b506001600160a01b038516600090815260256020908152604080832063ffffffff9094168352929052206001015491505092915050565b6005546001600160a01b031633146119485760405162461bcd60e51b8152600401610fee90614069565b601783905560188290556019819055806119628385614124565b61196c9190614124565b6016819055600e10156113375760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313425206f72206c6573730000006044820152606401610fee565b6005546001600160a01b031633146119eb5760405162461bcd60e51b8152600401610fee90614069565b601180544360105562ffff0019166201010017905542600f55565b6005546001600160a01b03163314611a305760405162461bcd60e51b8152600401610fee90614069565b60118054911515620100000262ff000019909216919091179055565b606060048054610f2190614008565b6005546001600160a01b03163314611a855760405162461bcd60e51b8152600401610fee90614069565b7f00000000000000000000000042bd711b6827473d72f7eca0a6069269f79a1a686001600160a01b0316826001600160a01b031603611b2c5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610fee565b611b36828261337e565b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611bbc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610fee565b611bc933858584036124cf565b5060019392505050565b6000610fb13384846125f3565b6001600160a01b03811660009081526026602052604081205463ffffffff1680611c0b576000611c4e565b6001600160a01b038316600090815260256020526040812090611c2f600184614137565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b6005546001600160a01b03163314611c7f5760405162461bcd60e51b8152600401610fee90614069565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611d085760405162461bcd60e51b8152600401610fee90614069565b601b839055601c829055601d81905580611d228385614124565b611d2c9190614124565b601a819055600e10156113375760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313425206f72206c6573730000006044820152606401610fee565b6005546001600160a01b03163314611dab5760405162461bcd60e51b8152600401610fee90614069565b633b9aca006103e8611dbc60025490565b611dc79060056140b4565b611dd191906140e1565b611ddb91906140e1565b811015611e365760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610fee565b611e4481633b9aca006140b4565b600b5550565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866611e75610f12565b80519060200120611e834690565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08401526001600160a01b038b1660e084015261010083018a90526101208084018a90528251808503909101815261014084019092528151919093012061190160f01b610160830152610162820183905261018282018190529192506000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611faf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120125760405162461bcd60e51b815260206004820181905260248201527f64656c656761746542795369673a20696e76616c6964207369676e61747572656044820152606401610fee565b6001600160a01b03811660009081526027602052604081208054916120368361410b565b9190505589146120885760405162461bcd60e51b815260206004820152601c60248201527f64656c656761746542795369673a20696e76616c6964206e6f6e6365000000006044820152606401610fee565b874211156120d85760405162461bcd60e51b815260206004820181905260248201527f64656c656761746542795369673a207369676e617475726520657870697265646044820152606401610fee565b6120e2818b6132ad565b505050505b505050505050565b6005546000906001600160a01b0316331461211c5760405162461bcd60e51b8152600401610fee90614069565b620186a061212960025490565b6121349060016140b4565b61213e91906140e1565b8210156121ab5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610fee565b6103e86121b760025490565b6121c29060056140b4565b6121cc91906140e1565b8211156122385760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610fee565b50600a81905560015b919050565b6005546001600160a01b031633146122705760405162461bcd60e51b8152600401610fee90614069565b7f00000000000000000000000042bd711b6827473d72f7eca0a6069269f79a1a686001600160a01b0316816001600160a01b0316036122ae57600080fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316816001600160a01b0316036122ec57600080fd5b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b6005546000906001600160a01b0316331461233d5760405162461bcd60e51b8152600401610fee90614069565b506015805460ff19169055600190565b6005546001600160a01b031633146123775760405162461bcd60e51b8152600401610fee90614069565b6001600160a01b0381166123dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fee565b6114738161332c565b6006546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561241e573d6000803e3d6000fd5b506006546001600160a01b0316336001600160a01b03161461146757600080fd5b6007546001600160a01b0316336001600160a01b0316146124725760405162461bcd60e51b8152600401610fee90614042565b6007546040516001600160a01b03918216918316907ff34d8bc316f350c98b1eb0c415fd56f0dd8e42e98fae8dca3faa1c933d4516c590600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166125315760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610fee565b6001600160a01b0382166125925760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610fee565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166126195760405162461bcd60e51b8152600401610fee9061417e565b6001600160a01b03821661263f5760405162461bcd60e51b8152600401610fee906141c3565b600081116126a15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610fee565b6001600160a01b03831660009081526014602052604090205460ff161580156126e357506001600160a01b03821660009081526014602052604090205460ff16155b61272f5760405162461bcd60e51b815260206004820152601c60248201527f596f7572206163636f756e7420697320626c6f636b4c697374656421000000006044820152606401610fee565b60115460ff1615612bff576005546001600160a01b0384811691161480159061276657506005546001600160a01b03838116911614155b801561277d57506001600160a01b03821661dead14155b80156127935750600554600160a01b900460ff16155b15612bff57601154610100900460ff1661282b576001600160a01b03831660009081526021602052604090205460ff16806127e657506001600160a01b03821660009081526021602052604090205460ff165b61282b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610fee565b60155460ff1615612972576005546001600160a01b0383811691161480159061288657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156128c457507f00000000000000000000000042bd711b6827473d72f7eca0a6069269f79a1a686001600160a01b0316826001600160a01b031614155b156129725732600090815260126020526040902054431161295f5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610fee565b3260009081526012602052604090204390555b6001600160a01b03831660009081526023602052604090205460ff1680156129b357506001600160a01b03821660009081526022602052604090205460ff16155b15612abe57600954811115612a285760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610fee565b600b546001600160a01b038316600090815260208190526040902054612a4e9083614124565b1115612a925760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610fee565b601054612aa0906003614124565b4311612ab9573260009081526013602052604090204390555b612bff565b6001600160a01b03821660009081526023602052604090205460ff168015612aff57506001600160a01b03831660009081526022602052604090205460ff16155b15612b7557600954811115612ab95760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610fee565b6001600160a01b03821660009081526022602052604090205460ff16612bff57600b546001600160a01b038316600090815260208190526040902054612bbb9083614124565b1115612bff5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610fee565b30600090815260208190526040902054600a5481108015908190612c2b575060115462010000900460ff165b8015612c415750600554600160a01b900460ff16155b8015612c6657506001600160a01b03851660009081526023602052604090205460ff16155b8015612c8b57506001600160a01b03851660009081526021602052604090205460ff16155b8015612cb057506001600160a01b03841660009081526021602052604090205460ff16155b15612cde576005805460ff60a01b1916600160a01b179055612cd061301f565b6005805460ff60a01b191690555b600554600160a01b900460ff16158015612d1057506001600160a01b03841660009081526023602052604090205460ff165b8015612d1e5750600d5460ff165b8015612d395750600e54600f54612d359190614124565b4210155b8015612d5e57506001600160a01b03851660009081526021602052604090205460ff16155b15612d6d57612d6b6133d2565b505b6005546001600160a01b03861660009081526021602052604090205460ff600160a01b909204821615911680612dbb57506001600160a01b03851660009081526021602052604090205460ff165b15612dc4575060005b6000811561300b576001600160a01b03861660009081526023602052604090205460ff1615612ef757601c54601b54601d546000612e00613562565b6001600160a01b038c1660009081526013602052604090205490915015801590612e2a5750600081115b15612e53576002935060089250601e915081612e468486614124565b612e509190614124565b90505b612e686064612e628b846135ab565b906135b7565b945080612e7585876140b4565b612e7f91906140e1565b601f6000828254612e909190614124565b90915550819050612ea184876140b4565b612eab91906140e1565b601e6000828254612ebc9190614124565b90915550819050612ecd83876140b4565b612ed791906140e1565b60206000828254612ee89190614124565b90915550612fed945050505050565b6001600160a01b03871660009081526023602052604090205460ff1615612fed57601054612f26906003614124565b4311612f3f57612f3c6064612e628760326135ab565b90505b612f596064612e62601654886135ab90919063ffffffff16565b905060165460185482612f6c91906140b4565b612f7691906140e1565b601f6000828254612f879190614124565b9091555050601654601754612f9c90836140b4565b612fa691906140e1565b601e6000828254612fb79190614124565b9091555050601654601954612fcc90836140b4565b612fd691906140e1565b60206000828254612fe79190614124565b90915550505b8015612ffe57612ffe8730836135c3565b6130088186614206565b94505b6130168787876135c3565b50505050505050565b3060009081526020819052604081205490506000602054601e54601f546130469190614124565b6130509190614124565b9050600082158061305f575081155b1561306957505050565b600a546130779060146140b4565b83111561308f57600a5461308c9060146140b4565b92505b6000600283601f54866130a291906140b4565b6130ac91906140e1565b6130b691906140e1565b905060006130c48583613717565b9050476130d082613723565b60006130dc4783613717565b905060006131006130f96002601f546135b790919063ffffffff16565b8890613717565b9050600061311d82612e62601e54866135ab90919063ffffffff16565b9050600061313a83612e62602054876135ab90919063ffffffff16565b90506000816131498487614206565b6131539190614206565b6000601f819055601e81905560208190556007546040519293506001600160a01b031691849181818185875af1925050503d80600081146131b0576040519150601f19603f3d011682016040523d82523d6000602084013e6131b5565b606091505b509099505087158015906131c95750600081115b1561324b576131d888826138db565b6009546008546001600160a01b03908116600090815260016020908152604080832060065490941683529281529082902092909255805189815291820183905281018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613298576040519150601f19603f3d011682016040523d82523d6000602084013e61329d565b606091505b5050505050505050505050505050565b6001600160a01b038281166000818152602460208181526040808420805485845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46133268284836139c1565b50505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b42600f556040516370a0823160e01b81526001600160a01b037f00000000000000000000000042bd711b6827473d72f7eca0a6069269f79a1a68166004820152600090819030906370a0823190602401602060405180830381865afa15801561343f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134639190614219565b90506000613482612710612e62600c54856135ab90919063ffffffff16565b905080156134b7576134b77f00000000000000000000000042bd711b6827473d72f7eca0a6069269f79a1a6861dead836135c3565b60007f00000000000000000000000042bd711b6827473d72f7eca0a6069269f79a1a689050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561351757600080fd5b505af115801561352b573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b600754600090670de0b6b3a76400006001600160a01b039091163111156135895750600090565b601d54601c54601b5461359c9190614124565b6135a69190614124565b905090565b6000611c4e82846140b4565b6000611c4e82846140e1565b6001600160a01b0383166135e95760405162461bcd60e51b8152600401610fee9061417e565b6001600160a01b03821661360f5760405162461bcd60e51b8152600401610fee906141c3565b6001600160a01b038316600090815260208190526040902054818110156136875760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610fee565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906136be908490614124565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161370a91815260200190565b60405180910390a3613326565b6000611c4e8284614206565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613758576137586140f5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137fa9190614232565b8160018151811061380d5761380d6140f5565b60200260200101906001600160a01b031690816001600160a01b031681525050613858307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124cf565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906138ad90859060009086903090429060040161424f565b600060405180830381600087803b1580156138c757600080fd5b505af11580156120e7573d6000803e3d6000fd5b613906307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124cf565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af1158015613995573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139ba91906142c0565b5050505050565b816001600160a01b0316836001600160a01b0316141580156139e35750600081115b15611337576001600160a01b03831615613a86576001600160a01b03831660009081526026602052604081205463ffffffff169081613a23576000613a66565b6001600160a01b038516600090815260256020526040812090613a47600185614137565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613a748285613717565b9050613a8286848484613b1c565b5050505b6001600160a01b03821615611337576001600160a01b03821660009081526026602052604081205463ffffffff169081613ac1576000613b04565b6001600160a01b038416600090815260256020526040812090613ae5600185614137565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613b128285613cbe565b90506120e7858484845b6000613b40436040518060600160405280602e815260200161430c602e9139613cca565b905060008463ffffffff16118015613b9a57506001600160a01b038516600090815260256020526040812063ffffffff831691613b7e600188614137565b63ffffffff908116825260208201929092526040016000205416145b15613be3576001600160a01b03851660009081526025602052604081208391613bc4600188614137565b63ffffffff168152602081019190915260400160002060010155613c73565b60408051808201825263ffffffff838116825260208083018681526001600160a01b038a166000908152602583528581208a851682529092529390209151825463ffffffff191691161781559051600191820155613c429085906142ee565b6001600160a01b0386166000908152602660205260409020805463ffffffff191663ffffffff929092169190911790555b60408051848152602081018490526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000611c4e8284614124565b6000816401000000008410613cf25760405162461bcd60e51b8152600401610fee9190613cfa565b509192915050565b600060208083528351808285015260005b81811015613d2757858101830151858201604001528201613d0b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461147357600080fd5b60008060408385031215613d7057600080fd5b8235613d7b81613d48565b946020939093013593505050565b600060208284031215613d9b57600080fd5b8135611c4e81613d48565b600060208284031215613db857600080fd5b5035919050565b600080600060608486031215613dd457600080fd5b8335613ddf81613d48565b92506020840135613def81613d48565b929592945050506040919091013590565b60008060208385031215613e1357600080fd5b823567ffffffffffffffff80821115613e2b57600080fd5b818501915085601f830112613e3f57600080fd5b813581811115613e4e57600080fd5b8660208260051b8501011115613e6357600080fd5b60209290920196919550909350505050565b8035801515811461224157600080fd5b600080600060608486031215613e9a57600080fd5b8335925060208401359150613eb160408501613e75565b90509250925092565b60008060408385031215613ecd57600080fd5b8235613ed881613d48565b9150613ee660208401613e75565b90509250929050565b600080600060608486031215613f0457600080fd5b505081359360208301359350604090920135919050565b600060208284031215613f2d57600080fd5b611c4e82613e75565b60008060408385031215613f4957600080fd5b8235613f5481613d48565b91506020830135613f6481613d48565b809150509250929050565b60008060008060008060c08789031215613f8857600080fd5b8635613f9381613d48565b95506020870135945060408701359350606087013560ff81168114613fb757600080fd5b9598949750929560808101359460a0909101359350915050565b60008060408385031215613fe457600080fd5b8235613fef81613d48565b9150602083013563ffffffff81168114613f6457600080fd5b600181811c9082168061401c57607f821691505b60208210810361403c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600d908201526c3737903832b936b4b9b9b4b7b760991b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610fb557610fb561409e565b634e487b7160e01b600052601260045260246000fd5b6000826140f0576140f06140cb565b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820161411d5761411d61409e565b5060010190565b80820180821115610fb557610fb561409e565b63ffffffff8281168282160390808211156141545761415461409e565b5092915050565b600063ffffffff80841680614172576141726140cb565b92169190910492915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610fb557610fb561409e565b60006020828403121561422b57600080fd5b5051919050565b60006020828403121561424457600080fd5b8151611c4e81613d48565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561429f5784516001600160a01b03168352938301939183019160010161427a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156142d557600080fd5b8351925060208401519150604084015190509250925092565b63ffffffff8181168382160190808211156141545761415461409e56fe5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a2646970667358221220d2c24f649cd836afde817121d5add6a59da198c1e9d6f9acbcc1b37e13b0e98c64736f6c63430008110033
Deployed Bytecode Sourcemap
30770:30146:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8692:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10856:169;;;;;;;;;;-1:-1:-1;10856:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;10856:169:0;1023:187:1;32558:63:0;;;;;;;;;;-1:-1:-1;32558:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30896:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;30896:51:0;1467:230:1;9812:108:0;;;;;;;;;;-1:-1:-1;9900:12:0;;9812:108;;;1848:25:1;;;1836:2;1821:18;9812:108:0;1702:177:1;40793:223:0;;;;;;;;;;-1:-1:-1;40793:223:0;;;;;:::i;:::-;;:::i;:::-;;31315:36;;;;;;;;;;;;;;;;32331:33;;;;;;;;;;;;;;;;37569:273;;;;;;;;;;-1:-1:-1;37569:273:0;;;;;:::i;:::-;;:::i;53025:155::-;;;;;;;;;;;;53076:104;53025:155;;11507:489;;;;;;;;;;-1:-1:-1;11507:489:0;;;;;:::i;:::-;;:::i;39676:311::-;;;;;;;;;;-1:-1:-1;39676:311:0;;;;;:::i;:::-;;:::i;30999:53::-;;;;;;;;;;;;31045:6;30999:53;;37850:121;;;;;;;;;;-1:-1:-1;37850:121:0;;;;;:::i;:::-;;:::i;31410:45::-;;;;;;;;;;;;;;;;31371:32;;;;;;;;;;-1:-1:-1;31371:32:0;;;;;;;;36158:100;;;;;;;;;;-1:-1:-1;36158:100:0;;30888:1;3682:36:1;;3670:2;3655:18;36158:100:0;3540:184:1;12405:212:0;;;;;;;;;;-1:-1:-1;12405:212:0;;;;;:::i;:::-;;:::i;30954:38::-;;;;;;;;;;;;;;;31533:33;;;;;;;;;;-1:-1:-1;31533:33:0;;;;;;;;41352:256;;;;;;;;;;-1:-1:-1;41352:256:0;;;;;:::i;:::-;;:::i;41616:126::-;;;;;;;;;;-1:-1:-1;41616:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;41706:28:0;41682:4;41706:28;;;:19;:28;;;;;;;;;41616:126;54501:103;;;;;;;;;;;;;:::i;32371:38::-;;;;;;;;;;;;;;;;54124:117;;;;;;;;;;-1:-1:-1;54124:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;54212:21:0;;;54185:7;54212:21;;;:10;:21;;;;;;;;54124:117;54389:104;;;;;;;;;;-1:-1:-1;54389:104:0;;;;;:::i;:::-;;:::i;32147:28::-;;;;;;;;;;;;;;;;39995:92;;;;;;;;;;-1:-1:-1;39995:92:0;;;;;:::i;:::-;;:::i;31613:31::-;;;;;;;;;;-1:-1:-1;31613:31:0;;;;;;;;;;;52904:48;;;;;;;;;;-1:-1:-1;52904:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3903:10:1;3891:23;;;3873:42;;3861:2;3846:18;52904:48:0;3729:192:1;9983:127:0;;;;;;;;;;-1:-1:-1;9983:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10084:18:0;10057:7;10084:18;;;;;;;;;;;;9983:127;32252:36;;;;;;;;;;;;;;;;2608:103;;;;;;;;;;;;;:::i;50763:555::-;;;;;;;;;;-1:-1:-1;50763:555:0;;;;;:::i;:::-;;:::i;36593:204::-;;;;;;;;;;;;;:::i;38241:167::-;;;;;;;;;;-1:-1:-1;38241:167:0;;;;;:::i;:::-;;:::i;56921:1287::-;;;;;;;;;;-1:-1:-1;56921:1287:0;;;;;:::i;:::-;;:::i;53481:41::-;;;;;;;;;;-1:-1:-1;53481:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;38612:423;;;;;;;;;;-1:-1:-1;38612:423:0;;;;;:::i;:::-;;:::i;31122:35::-;;;;;;;;;;-1:-1:-1;31122:35:0;;;;-1:-1:-1;;;;;31122:35:0;;;31164:27;;;;;;;;;;-1:-1:-1;31164:27:0;;;;-1:-1:-1;;;;;31164:27:0;;;36349:192;;;;;;;;;;;;;:::i;32103:35::-;;;;;;;;;;;;;;;;1957:87;;;;;;;;;;-1:-1:-1;2030:6:0;;-1:-1:-1;;;;;2030:6:0;1957:87;;31091:24;;;;;;;;;;-1:-1:-1;31091:24:0;;;;-1:-1:-1;;;;;31091:24:0;;;38504:100;;;;;;;;;;-1:-1:-1;38504:100:0;;;;;:::i;:::-;;:::i;8911:104::-;;;;;;;;;;;;;:::i;40285:304::-;;;;;;;;;;-1:-1:-1;40285:304:0;;;;;:::i;:::-;;:::i;32035:24::-;;;;;;;;;;;;;;;;32297:27;;;;;;;;;;;;;;;;32182:25;;;;;;;;;;;;;;;;13120:410;;;;;;;;;;-1:-1:-1;13120:410:0;;;;;:::i;:::-;;:::i;31462:29::-;;;;;;;;;;;;;;;;10323:175;;;;;;;;;;-1:-1:-1;10323:175:0;;;;;:::i;:::-;;:::i;56254:236::-;;;;;;;;;;-1:-1:-1;56254:236:0;;;;;:::i;:::-;;:::i;32779:57::-;;;;;;;;;;-1:-1:-1;32779:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8027:63;;;;;;;;;;-1:-1:-1;8027:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;31573:33;;;;;;;;;;-1:-1:-1;31573:33:0;;;;;;;;;;;31908:36;;;;;;;;;;-1:-1:-1;31908:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;40095:182;;;;;;;;;;-1:-1:-1;40095:182:0;;;;;:::i;:::-;;:::i;39043:432::-;;;;;;;;;;-1:-1:-1;39043:432:0;;;;;:::i;:::-;;:::i;37979:254::-;;;;;;;;;;-1:-1:-1;37979:254:0;;;;;:::i;:::-;;:::i;55038:1015::-;;;;;;;;;;-1:-1:-1;55038:1015:0;;;;;:::i;:::-;;:::i;31953:39::-;;;;;;;;;;-1:-1:-1;31953:39:0;;;;;;;;31200:35;;;;;;;;;;;;;;;;31498:26;;;;;;;;;;;;;;;;37064:497;;;;;;;;;;-1:-1:-1;37064:497:0;;;;;:::i;:::-;;:::i;32001:27::-;;;;;;;;;;;;;;;;10561:148;;;;;;;;;;-1:-1:-1;10561:148:0;;;;;:::i;:::-;-1:-1:-1;;;;;10677:15:0;;;10650:7;10677:15;;;:8;:15;;;;;;;;:24;;;;;;;;;;;;;10561:148;31242:33;;;;;;;;;;;;;;;;39483:185;;;;;;;;;;-1:-1:-1;39483:185:0;;;;;:::i;:::-;;:::i;53274:126::-;;;;;;;;;;;;53329:71;53274:126;;36859:135;;;;;;;;;;;;;:::i;52767:68::-;;;;;;;;;;-1:-1:-1;52767:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6949:10:1;6937:23;;;6919:42;;6992:2;6977:18;;6970:34;;;;6892:18;52767:68:0;6747:263:1;32066:30:0;;;;;;;;;;;;;;;;2866:201;;;;;;;;;;-1:-1:-1;2866:201:0;;;;;:::i;:::-;;:::i;50610:145::-;;;;;;;;;;;;;:::i;32214:31::-;;;;;;;;;;;;;;;;31282:24;;;;;;;;;;;;;;;;41024:320;;;;;;;;;;-1:-1:-1;41024:320:0;;;;;:::i;:::-;;:::i;8692:100::-;8746:13;8779:5;8772:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8692:100;:::o;10856:169::-;10939:4;10956:39;904:10;10979:7;10988:6;10956:8;:39::i;:::-;-1:-1:-1;11013:4:0;10856:169;;;;;:::o;40793:223::-;40889:9;;-1:-1:-1;;;;;40889:9:0;904:10;-1:-1:-1;;;;;40873:25:0;;40865:51;;;;-1:-1:-1;;;40865:51:0;;;;;;;:::i;:::-;;;;;;;;;40963:9;;40932:41;;-1:-1:-1;;;;;40963:9:0;;;;40932:41;;;;;40963:9;;40932:41;40984:9;:24;;-1:-1:-1;;;;;;40984:24:0;-1:-1:-1;;;;;40984:24:0;;;;;;;;;;40793:223::o;37569:273::-;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;37706:3:::1;37698:4;37677:13;9900:12:::0;;;9812:108;37677:13:::1;:17;::::0;37693:1:::1;37677:17;:::i;:::-;37676:26;;;;:::i;:::-;37675:34;;;;:::i;:::-;37665:6;:44;;37643:141;;;::::0;-1:-1:-1;;;37643:141:0;;8867:2:1;37643:141:0::1;::::0;::::1;8849:21:1::0;8906:2;8886:18;;;8879:30;8945:34;8925:18;;;8918:62;-1:-1:-1;;;8996:18:1;;;8989:45;9051:19;;37643:141:0::1;8665:411:1::0;37643:141:0::1;37818:16;:6:::0;37828:5:::1;37818:16;:::i;:::-;37795:20;:39:::0;-1:-1:-1;37569:273:0:o;11507:489::-;11647:4;11664:36;11674:6;11682:9;11693:6;11664:9;:36::i;:::-;-1:-1:-1;;;;;11740:16:0;;11713:24;11740:16;;;:8;:16;;;;;;;;904:10;11740:30;;;;;;;;11789:26;;;;11781:79;;;;-1:-1:-1;;;11781:79:0;;9283:2:1;11781:79:0;;;9265:21:1;9322:2;9302:18;;;9295:30;9361:34;9341:18;;;9334:62;-1:-1:-1;;;9412:18:1;;;9405:38;9460:19;;11781:79:0;9081:404:1;11781:79:0;11896:57;11905:6;904:10;11946:6;11927:16;:25;11896:8;:57::i;:::-;-1:-1:-1;11984:4:0;;11507:489;-1:-1:-1;;;;11507:489:0:o;39676:311::-;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;39764:9:::1;39760:220;39779:19:::0;;::::1;39760:220;;;39851:13;-1:-1:-1::0;;;;;39828:37:0::1;:8;;39837:1;39828:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39828:37:0::1;::::0;39820:46:::1;;;::::0;::::1;;39912:15;-1:-1:-1::0;;;;;39889:39:0::1;:8;;39898:1;39889:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39889:39:0::1;::::0;39881:48:::1;;;::::0;::::1;;39964:4;39944;:17;39949:8;;39958:1;39949:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39944:17:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;39944:17:0;:24;;-1:-1:-1;;39944:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39800:3;::::1;::::0;::::1;:::i;:::-;;;;39760:220;;;;39676:311:::0;;:::o;37850:121::-;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;37945:18:::1;:6:::0;37954:9:::1;37945:18;:::i;:::-;37927:15;:36:::0;-1:-1:-1;37850:121:0:o;12405:212::-;904:10;12493:4;12542:22;;;:8;:22;;;;;;;;-1:-1:-1;;;;;12542:31:0;;;;;;;;;;12493:4;;12510:77;;12533:7;;12542:44;;12576:10;;12542:44;:::i;:::-;12510:8;:77::i;41352:256::-;41463:12;;-1:-1:-1;;;;;41463:12:0;904:10;-1:-1:-1;;;;;41447:28:0;;41439:54;;;;-1:-1:-1;;;41439:54:0;;;;;;;:::i;:::-;41546:12;;41509:50;;-1:-1:-1;;;;;41546:12:0;;;;41509:50;;;;;41546:12;;41509:50;41570:12;:30;;-1:-1:-1;;;;;;41570:30:0;-1:-1:-1;;;;;41570:30:0;;;;;;;;;;41352:256::o;54501:103::-;54543:10;:8;:10::i;:::-;904;54562:33;;;;:19;:33;;;;;;;;54554:42;;;;;;54501:103::o;54389:104::-;54453:32;54463:10;54475:9;54453;:32::i;:::-;54389:104;:::o;39995:92::-;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40059:12:0::1;40074:5;40059:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;40059:20:0::1;::::0;;39995:92::o;2608:103::-;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;2673:30:::1;2700:1;2673:18;:30::i;50763:555::-:0;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;50965:3:::1;50942:19;:26;;50920:127;;;::::0;-1:-1:-1;;;50920:127:0;;10094:2:1;50920:127:0::1;::::0;::::1;10076:21:1::0;10133:2;10113:18;;;10106:30;10172:34;10152:18;;;10145:62;-1:-1:-1;;;10223:18:1;;;10216:49;10282:19;;50920:127:0::1;9892:415:1::0;50920:127:0::1;51092:4;51080:8;:16;;:33;;;;-1:-1:-1::0;51100:13:0;51080:33:::1;51058:131;;;::::0;-1:-1:-1;;;51058:131:0;;10514:2:1;51058:131:0::1;::::0;::::1;10496:21:1::0;10553:2;10533:18;;;10526:30;10592:34;10572:18;;;10565:62;-1:-1:-1;;;10643:18:1;;;10636:46;10699:19;;51058:131:0::1;10312:412:1::0;51058:131:0::1;51200:15;:37:::0;;;;51248:16:::1;:27:::0;51286:13:::1;:24:::0;;-1:-1:-1;;51286:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50763:555::o;36593:204::-;2030:6;;36645:4;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;9900:12;;36662:20:::1;:36:::0;9900:12;;36709:9:::1;:25:::0;-1:-1:-1;36745:14:0::1;:22:::0;;-1:-1:-1;;36745:22:0::1;::::0;;;36593:204;:::o;38241:167::-;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38354:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;38354:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38241:167::o;56921:1287::-;57032:7;57093:12;57079:11;:26;57057:109;;;;-1:-1:-1;;;57057:109:0;;10931:2:1;57057:109:0;;;10913:21:1;10970:2;10950:18;;;10943:30;11009:34;10989:18;;;10982:62;-1:-1:-1;;;11060:18:1;;;11053:31;11101:19;;57057:109:0;10729:397:1;57057:109:0;-1:-1:-1;;;;;57201:23:0;;57179:19;57201:23;;;:14;:23;;;;;;;;;57239:17;;;57235:58;;57280:1;57273:8;;;;;57235:58;-1:-1:-1;;;;;57353:20:0;;;;;;:11;:20;;;;;57405:11;;57374:16;57389:1;57374:12;:16;:::i;:::-;57353:38;;;;;;;;;;;;;;;-1:-1:-1;57353:38:0;:48;;:63;57349:147;;-1:-1:-1;;;;;57440:20:0;;;;;;:11;:20;;;;;;57461:16;57476:1;57461:12;:16;:::i;:::-;57440:38;;;;;;;;;;;;;;;:44;;;57433:51;;;;;57349:147;-1:-1:-1;;;;;57557:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;57553:88:0;;;57628:1;57621:8;;;;;57553:88;57653:12;;57695:16;57710:1;57695:12;:16;:::i;:::-;57680:31;;57722:428;57737:5;57729:13;;:5;:13;;;57722:428;;;57759:13;57801:1;57784:13;57792:5;57784;:13;:::i;:::-;57783:19;;;;:::i;:::-;57775:27;;:5;:27;:::i;:::-;-1:-1:-1;;;;;57867:20:0;;57844;57867;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;57844:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;57759:43;;-1:-1:-1;57914:27:0;;;57910:229;;57969:8;;;;-1:-1:-1;57962:15:0;;-1:-1:-1;;;;57962:15:0;57910:229;58003:12;;:26;;;-1:-1:-1;57999:140:0;;;58058:6;58050:14;;57999:140;;;58113:10;58122:1;58113:6;:10;:::i;:::-;58105:18;;57999:140;57744:406;;57722:428;;;-1:-1:-1;;;;;;58167:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;-1:-1:-1;;56921:1287:0;;;;:::o;38612:423::-;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;38767:9:::1;:19:::0;;;38797:15:::1;:31:::0;;;38839:20:::1;:41:::0;;;38862:18;38906:27:::1;38815:13:::0;38779:7;38906:27:::1;:::i;:::-;:50;;;;:::i;:::-;38891:12;:65:::0;;;38991:2:::1;-1:-1:-1::0;38975:18:0::1;38967:60;;;::::0;-1:-1:-1;;;38967:60:0;;11709:2:1;38967:60:0::1;::::0;::::1;11691:21:1::0;11748:2;11728:18;;;11721:30;11787:31;11767:18;;;11760:59;11836:18;;38967:60:0::1;11507:353:1::0;36349:192:0;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;36404:13:::1;:20:::0;;36449:12:::1;36435:11;:26:::0;-1:-1:-1;;36472:18:0;;;;;36518:15:::1;36501:14;:32:::0;36349:192::o;38504:100::-;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;38575:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;38575:21:0;;::::1;::::0;;;::::1;::::0;;38504:100::o;8911:104::-;8967:13;9000:7;8993:14;;;;;:::i;40285:304::-;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;40429:13:::1;-1:-1:-1::0;;;;;40421:21:0::1;:4;-1:-1:-1::0;;;;;40421:21:0::1;::::0;40399:128:::1;;;::::0;-1:-1:-1;;;40399:128:0;;12067:2:1;40399:128:0::1;::::0;::::1;12049:21:1::0;12106:2;12086:18;;;12079:30;12145:34;12125:18;;;12118:62;12216:27;12196:18;;;12189:55;12261:19;;40399:128:0::1;11865:421:1::0;40399:128:0::1;40540:41;40569:4;40575:5;40540:28;:41::i;:::-;40285:304:::0;;:::o;13120:410::-;904:10;13213:4;13257:22;;;:8;:22;;;;;;;;-1:-1:-1;;;;;13257:31:0;;;;;;;;;;13307:35;;;;13299:85;;;;-1:-1:-1;;;13299:85:0;;12493:2:1;13299:85:0;;;12475:21:1;12532:2;12512:18;;;12505:30;12571:34;12551:18;;;12544:62;-1:-1:-1;;;12622:18:1;;;12615:35;12667:19;;13299:85:0;12291:401:1;13299:85:0;13420:67;904:10;13443:7;13471:15;13452:16;:34;13420:8;:67::i;:::-;-1:-1:-1;13518:4:0;;13120:410;-1:-1:-1;;;13120:410:0:o;10323:175::-;10409:4;10426:42;904:10;10450:9;10461:6;10426:9;:42::i;56254:236::-;-1:-1:-1;;;;;56361:23:0;;56319:7;56361:23;;;:14;:23;;;;;;;;56415:16;:67;;56481:1;56415:67;;;-1:-1:-1;;;;;56434:20:0;;;;;;:11;:20;;;;;;56455:16;56470:1;56455:12;:16;:::i;:::-;56434:38;;;;;;;;;;;;;;;:44;;;56415:67;56395:87;56254:236;-1:-1:-1;;;56254:236:0:o;40095:182::-;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40180:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;40180:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;40235:34;;1163:41:1;;;40235:34:0::1;::::0;1136:18:1;40235:34:0::1;;;;;;;40095:182:::0;;:::o;39043:432::-;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;39199:10:::1;:20:::0;;;39230:16:::1;:32:::0;;;39273:21:::1;:42:::0;;;39297:18;39342:29:::1;39249:13:::0;39212:7;39342:29:::1;:::i;:::-;:53;;;;:::i;:::-;39326:13;:69:::0;;;39431:2:::1;-1:-1:-1::0;39414:19:0::1;39406:61;;;::::0;-1:-1:-1;;;39406:61:0;;11709:2:1;39406:61:0::1;::::0;::::1;11691:21:1::0;11748:2;11728:18;;;11721:30;11787:31;11767:18;;;11760:59;11836:18;;39406:61:0::1;11507:353:1::0;37979:254:0;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;38119:3:::1;38111:4;38090:13;9900:12:::0;;;9812:108;38090:13:::1;:17;::::0;38106:1:::1;38090:17;:::i;:::-;38089:26;;;;:::i;:::-;38088:34;;;;:::i;:::-;38078:6;:44;;38056:130;;;::::0;-1:-1:-1;;;38056:130:0;;12899:2:1;38056:130:0::1;::::0;::::1;12881:21:1::0;12938:2;12918:18;;;12911:30;12977:34;12957:18;;;12950:62;-1:-1:-1;;;13028:18:1;;;13021:34;13072:19;;38056:130:0::1;12697:400:1::0;38056:130:0::1;38209:16;:6:::0;38219:5:::1;38209:16;:::i;:::-;38197:9;:28:::0;-1:-1:-1;37979:254:0:o;55038:1015::-;55223:23;53076:104;55352:6;:4;:6::i;:::-;55336:24;;;;;;55379:12;60861:9;;60735:178;55379:12;55273:165;;;;;;;13333:25:1;;;;13374:18;;;13367:34;;;;13417:18;;;13410:34;;;;55418:4:0;13460:18:1;;;;13453:60;;;;55273:165:0;;;;;;;;;;13305:19:1;;;55273:165:0;;55249:200;;;;;;53329:71;55507:57;;;13755:25:1;-1:-1:-1;;;;;13816:32:1;;13796:18;;;13789:60;13865:18;;;13858:34;;;13908:18;;;;13901:34;;;55507:57:0;;;;;;;;;;13727:19:1;;;55507:57:0;;;55483:92;;;;;;;-1:-1:-1;;;55629:57:0;;;14204:27:1;14247:11;;;14240:27;;;14283:12;;;14276:28;;;55249:200:0;;-1:-1:-1;;;14320:12:1;;55629:57:0;;;-1:-1:-1;;55629:57:0;;;;;;;;;55605:92;;55629:57;55605:92;;;;55710:17;55730:26;;;;;;;;;14570:25:1;;;14643:4;14631:17;;14611:18;;;14604:45;;;;14665:18;;;14658:34;;;14708:18;;;14701:34;;;55605:92:0;;-1:-1:-1;55710:17:0;55730:26;;14542:19:1;;55730:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;55730:26:0;;-1:-1:-1;;55730:26:0;;;-1:-1:-1;;;;;;;55775:23:0;;55767:68;;;;-1:-1:-1;;;55767:68:0;;14948:2:1;55767:68:0;;;14930:21:1;;;14967:18;;;14960:30;15026:34;15006:18;;;14999:62;15078:18;;55767:68:0;14746:356:1;55767:68:0;-1:-1:-1;;;;;55863:17:0;;;;;;:6;:17;;;;;:19;;;;;;:::i;:::-;;;;;55854:5;:28;55846:69;;;;-1:-1:-1;;;55846:69:0;;15309:2:1;55846:69:0;;;15291:21:1;15348:2;15328:18;;;15321:30;15387;15367:18;;;15360:58;15435:18;;55846:69:0;15107:352:1;55846:69:0;55953:6;55934:15;:25;;55926:70;;;;-1:-1:-1;;;55926:70:0;;15666:2:1;55926:70:0;;;15648:21:1;;;15685:18;;;15678:30;15744:34;15724:18;;;15717:62;15796:18;;55926:70:0;15464:356:1;55926:70:0;56014:31;56024:9;56035;56014;:31::i;:::-;56007:38;;;;55038:1015;;;;;;;:::o;37064:497::-;2030:6;;37172:4;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;37251:6:::1;37230:13;9900:12:::0;;;9812:108;37230:13:::1;:17;::::0;37246:1:::1;37230:17;:::i;:::-;37229:28;;;;:::i;:::-;37216:9;:41;;37194:144;;;::::0;-1:-1:-1;;;37194:144:0;;16027:2:1;37194:144:0::1;::::0;::::1;16009:21:1::0;16066:2;16046:18;;;16039:30;16105:34;16085:18;;;16078:62;-1:-1:-1;;;16156:18:1;;;16149:51;16217:19;;37194:144:0::1;15825:417:1::0;37194:144:0::1;37406:4;37385:13;9900:12:::0;;;9812:108;37385:13:::1;:17;::::0;37401:1:::1;37385:17;:::i;:::-;37384:26;;;;:::i;:::-;37371:9;:39;;37349:141;;;::::0;-1:-1:-1;;;37349:141:0;;16449:2:1;37349:141:0::1;::::0;::::1;16431:21:1::0;16488:2;16468:18;;;16461:30;16527:34;16507:18;;;16500:62;-1:-1:-1;;;16578:18:1;;;16571:50;16638:19;;37349:141:0::1;16247:416:1::0;37349:141:0::1;-1:-1:-1::0;37501:18:0::1;:30:::0;;;37549:4:::1;2248:1;37064:497:::0;;;:::o;39483:185::-;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;39565:13:::1;-1:-1:-1::0;;;;;39550:29:0::1;:3;-1:-1:-1::0;;;;;39550:29:0::1;::::0;39542:38:::1;;;::::0;::::1;;39614:15;-1:-1:-1::0;;;;;39599:31:0::1;:3;-1:-1:-1::0;;;;;39599:31:0::1;::::0;39591:40:::1;;;::::0;::::1;;-1:-1:-1::0;;;;;39644:9:0::1;;::::0;;;:4:::1;:9;::::0;;;;:16;;-1:-1:-1;;39644:16:0::1;39656:4;39644:16;::::0;;39483:185::o;36859:135::-;2030:6;;36919:4;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;-1:-1:-1;36936:20:0::1;:28:::0;;-1:-1:-1;;36936:28:0::1;::::0;;;36859:135;:::o;2866:201::-;2030:6;;-1:-1:-1;;;;;2030:6:0;904:10;2177:23;2169:68;;;;-1:-1:-1;;;2169:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2955:22:0;::::1;2947:73;;;::::0;-1:-1:-1;;;2947:73:0;;16870:2:1;2947:73:0::1;::::0;::::1;16852:21:1::0;16909:2;16889:18;;;16882:30;16948:34;16928:18;;;16921:62;-1:-1:-1;;;16999:18:1;;;16992:36;17045:19;;2947:73:0::1;16668:402:1::0;2947:73:0::1;3031:28;3050:8;3031:18;:28::i;50610:145::-:0;50660:9;;50652:50;;-1:-1:-1;;;;;50660:9:0;;;;50680:21;50652:50;;;;;50660:9;50652:50;50660:9;50652:50;50680:21;50660:9;50652:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50737:9:0;;-1:-1:-1;;;;;50737:9:0;904:10;-1:-1:-1;;;;;50721:25:0;;50713:34;;;;;41024:320;41151:20;;-1:-1:-1;;;;;41151:20:0;904:10;-1:-1:-1;;;;;41135:36:0;;41127:62;;;;-1:-1:-1;;;41127:62:0;;;;;;;:::i;:::-;41258:20;;41205:74;;-1:-1:-1;;;;;41258:20:0;;;;41205:74;;;;;41258:20;;41205:74;41290:20;:46;;-1:-1:-1;;;;;;41290:46:0;-1:-1:-1;;;;;41290:46:0;;;;;;;;;;41024:320::o;16801:377::-;-1:-1:-1;;;;;16937:19:0;;16929:68;;;;-1:-1:-1;;;16929:68:0;;17277:2:1;16929:68:0;;;17259:21:1;17316:2;17296:18;;;17289:30;17355:34;17335:18;;;17328:62;-1:-1:-1;;;17406:18:1;;;17399:34;17450:19;;16929:68:0;17075:400:1;16929:68:0;-1:-1:-1;;;;;17016:21:0;;17008:68;;;;-1:-1:-1;;;17008:68:0;;17682:2:1;17008:68:0;;;17664:21:1;17721:2;17701:18;;;17694:30;17760:34;17740:18;;;17733:62;-1:-1:-1;;;17811:18:1;;;17804:32;17853:19;;17008:68:0;17480:398:1;17008:68:0;-1:-1:-1;;;;;17089:15:0;;;;;;;:8;:15;;;;;;;;:24;;;;;;;;;;;;;:33;;;17138:32;;1848:25:1;;;17138:32:0;;1821:18:1;17138:32:0;;;;;;;16801:377;;;:::o;41750:5808::-;-1:-1:-1;;;;;41882:18:0;;41874:68;;;;-1:-1:-1;;;41874:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41961:16:0;;41953:64;;;;-1:-1:-1;;;41953:64:0;;;;;;;:::i;:::-;42045:1;42036:6;:10;42028:64;;;;-1:-1:-1;;;42028:64:0;;18895:2:1;42028:64:0;;;18877:21:1;18934:2;18914:18;;;18907:30;18973:34;18953:18;;;18946:62;-1:-1:-1;;;19024:18:1;;;19017:39;19073:19;;42028:64:0;18693:405:1;42028:64:0;-1:-1:-1;;;;;42112:10:0;;;;;;:4;:10;;;;;;;;42111:11;:24;;;;-1:-1:-1;;;;;;42127:8:0;;;;;;:4;:8;;;;;;;;42126:9;42111:24;42103:65;;;;-1:-1:-1;;;42103:65:0;;19305:2:1;42103:65:0;;;19287:21:1;19344:2;19324:18;;;19317:30;19383;19363:18;;;19356:58;19431:18;;42103:65:0;19103:352:1;42103:65:0;42185:14;;;;42181:2599;;;2030:6;;-1:-1:-1;;;;;42238:15:0;;;2030:6;;42238:15;;;;:49;;-1:-1:-1;2030:6:0;;-1:-1:-1;;;;;42274:13:0;;;2030:6;;42274:13;;42238:49;:91;;;;-1:-1:-1;;;;;;42308:21:0;;42322:6;42308:21;;42238:91;:121;;;;-1:-1:-1;42351:8:0;;-1:-1:-1;;;42351:8:0;;;;42350:9;42238:121;42216:2553;;;42399:13;;;;;;;42394:223;;-1:-1:-1;;;;;42471:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;42500:23:0;;;;;;:19;:23;;;;;;;;42471:52;42437:160;;;;-1:-1:-1;;;42437:160:0;;19662:2:1;42437:160:0;;;19644:21:1;19701:2;19681:18;;;19674:30;-1:-1:-1;;;19720:18:1;;;19713:52;19782:18;;42437:160:0;19460:346:1;42437:160:0;42773:20;;;;42769:641;;;2030:6;;-1:-1:-1;;;;;42848:13:0;;;2030:6;;42848:13;;;;:72;;;42904:15;-1:-1:-1;;;;;42890:30:0;:2;-1:-1:-1;;;;;42890:30:0;;;42848:72;:129;;;;;42963:13;-1:-1:-1;;;;;42949:28:0;:2;-1:-1:-1;;;;;42949:28:0;;;42848:129;42818:573;;;43095:9;43066:39;;;;:28;:39;;;;;;43141:12;-1:-1:-1;43028:258:0;;;;-1:-1:-1;;;43028:258:0;;20013:2:1;43028:258:0;;;19995:21:1;20052:2;20032:18;;;20025:30;20091:34;20071:18;;;20064:62;20162:34;20142:18;;;20135:62;-1:-1:-1;;;20213:19:1;;;20206:40;20263:19;;43028:258:0;19811:477:1;43028:258:0;43342:9;43313:39;;;;:28;:39;;;;;43355:12;43313:54;;42818:573;-1:-1:-1;;;;;43484:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;43541:35:0;;;;;;:31;:35;;;;;;;;43540:36;43484:92;43458:1296;;;43663:20;;43653:6;:30;;43619:169;;;;-1:-1:-1;;;43619:169:0;;20495:2:1;43619:169:0;;;20477:21:1;20534:2;20514:18;;;20507:30;20573:34;20553:18;;;20546:62;-1:-1:-1;;;20624:18:1;;;20617:51;20685:19;;43619:169:0;20293:417:1;43619:169:0;43871:9;;-1:-1:-1;;;;;10084:18:0;;10057:7;10084:18;;;;;;;;;;;43845:22;;:6;:22;:::i;:::-;:35;;43811:140;;;;-1:-1:-1;;;43811:140:0;;20917:2:1;43811:140:0;;;20899:21:1;20956:2;20936:18;;;20929:30;-1:-1:-1;;;20975:18:1;;;20968:49;21034:18;;43811:140:0;20715:343:1;43811:140:0;43993:11;;:15;;44007:1;43993:15;:::i;:::-;43977:12;:31;43974:127;;44052:9;44037:25;;;;:14;:25;;;;;44065:12;44037:40;;43974:127;43458:1296;;;-1:-1:-1;;;;;44198:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;44253:37:0;;;;;;:31;:37;;;;;;;;44252:38;44198:92;44172:582;;;44377:20;;44367:6;:30;;44333:170;;;;-1:-1:-1;;;44333:170:0;;21265:2:1;44333:170:0;;;21247:21:1;21304:2;21284:18;;;21277:30;21343:34;21323:18;;;21316:62;-1:-1:-1;;;21394:18:1;;;21387:52;21456:19;;44333:170:0;21063:418:1;44172:582:0;-1:-1:-1;;;;;44534:35:0;;;;;;:31;:35;;;;;;;;44529:225;;44654:9;;-1:-1:-1;;;;;10084:18:0;;10057:7;10084:18;;;;;;;;;;;44628:22;;:6;:22;:::i;:::-;:35;;44594:140;;;;-1:-1:-1;;;44594:140:0;;20917:2:1;44594:140:0;;;20899:21:1;20956:2;20936:18;;;20929:30;-1:-1:-1;;;20975:18:1;;;20968:49;21034:18;;44594:140:0;20715:343:1;44594:140:0;44841:4;44792:28;10084:18;;;;;;;;;;;44899;;44875:42;;;;;;;44948:35;;-1:-1:-1;44972:11:0;;;;;;;44948:35;:61;;;;-1:-1:-1;45001:8:0;;-1:-1:-1;;;45001:8:0;;;;45000:9;44948:61;:110;;;;-1:-1:-1;;;;;;45027:31:0;;;;;;:25;:31;;;;;;;;45026:32;44948:110;:153;;;;-1:-1:-1;;;;;;45076:25:0;;;;;;:19;:25;;;;;;;;45075:26;44948:153;:194;;;;-1:-1:-1;;;;;;45119:23:0;;;;;;:19;:23;;;;;;;;45118:24;44948:194;44930:326;;;45169:8;:15;;-1:-1:-1;;;;45169:15:0;-1:-1:-1;;;45169:15:0;;;45201:10;:8;:10::i;:::-;45228:8;:16;;-1:-1:-1;;;;45228:16:0;;;44930:326;45287:8;;-1:-1:-1;;;45287:8:0;;;;45286:9;:55;;;;-1:-1:-1;;;;;;45312:29:0;;;;;;:25;:29;;;;;;;;45286:55;:85;;;;-1:-1:-1;45358:13:0;;;;45286:85;:153;;;;;45424:15;;45407:14;;:32;;;;:::i;:::-;45388:15;:51;;45286:153;:196;;;;-1:-1:-1;;;;;;45457:25:0;;;;;;:19;:25;;;;;;;;45456:26;45286:196;45268:282;;;45509:29;:27;:29::i;:::-;;45268:282;45578:8;;-1:-1:-1;;;;;45688:25:0;;45562:12;45688:25;;;:19;:25;;;;;;45578:8;-1:-1:-1;;;45578:8:0;;;;;45577:9;;45688:25;;:52;;-1:-1:-1;;;;;;45717:23:0;;;;;;:19;:23;;;;;;;;45688:52;45684:100;;;-1:-1:-1;45767:5:0;45684:100;45796:12;45901:7;45897:1608;;;-1:-1:-1;;;;;45953:29:0;;;;;;:25;:29;;;;;;;;45949:1407;;;46031:16;;46088:10;;46150:21;;46003:25;46215:18;:16;:18::i;:::-;-1:-1:-1;;;;;46256:20:0;;46279:1;46256:20;;;:14;:20;;;;;;46190:43;;-1:-1:-1;46256:24:0;;;;:46;;;46301:1;46284:14;:18;46256:46;46252:258;;;46347:1;;-1:-1:-1;46364:1:0;;-1:-1:-1;46392:2:0;;-1:-1:-1;46392:2:0;46434:31;46364:1;46347;46434:31;:::i;:::-;:56;;;;:::i;:::-;46417:73;;46252:258;46535:35;46566:3;46535:26;:6;46546:14;46535:10;:26::i;:::-;:30;;:35::i;:::-;46528:42;-1:-1:-1;46640:14:0;46612:24;46619:17;46528:42;46612:24;:::i;:::-;46611:43;;;;:::i;:::-;46589:18;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;46712:14:0;;-1:-1:-1;46690:18:0;46697:11;46690:4;:18;:::i;:::-;46689:37;;;;:::i;:::-;46673:12;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;46806:14:0;;-1:-1:-1;46773:29:0;46780:22;46773:4;:29;:::i;:::-;46772:48;;;;:::i;:::-;46745:23;;:75;;;;;;;:::i;:::-;;;;-1:-1:-1;45949:1407:0;;-1:-1:-1;;;;;45949:1407:0;;-1:-1:-1;;;;;46882:31:0;;;;;;:25;:31;;;;;;;;46878:478;;;46954:11;;:15;;46968:1;46954:15;:::i;:::-;46938:12;:31;46934:110;;47001:23;47020:3;47001:14;:6;47012:2;47001:10;:14::i;:23::-;46994:30;;46934:110;47069:33;47098:3;47069:24;47080:12;;47069:6;:10;;:24;;;;:::i;:33::-;47062:40;;47170:12;;47151:15;;47144:4;:22;;;;:::i;:::-;47143:39;;;;:::i;:::-;47121:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;47238:12:0;;47225:9;;47218:16;;:4;:16;:::i;:::-;47217:33;;;;:::i;:::-;47201:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;47328:12:0;;47304:20;;47297:27;;:4;:27;:::i;:::-;47296:44;;;;:::i;:::-;47269:23;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;46878:478:0;47376:8;;47372:91;;47405:42;47421:4;47435;47442;47405:15;:42::i;:::-;47479:14;47489:4;47479:14;;:::i;:::-;;;45897:1608;47517:33;47533:4;47539:2;47543:6;47517:15;:33::i;:::-;41863:5695;;;;41750:5808;;;:::o;48689:1913::-;48772:4;48728:23;10084:18;;;;;;;;;;;48728:50;;48789:25;48853:23;;48838:12;;48817:18;;:33;;;;:::i;:::-;:59;;;;:::i;:::-;48789:87;-1:-1:-1;48887:12:0;48916:20;;;:46;;-1:-1:-1;48940:22:0;;48916:46;48912:85;;;48979:7;;;48689:1913::o;48912:85::-;49031:18;;:23;;49052:2;49031:23;:::i;:::-;49013:15;:41;49009:115;;;49089:18;;:23;;49110:2;49089:23;:::i;:::-;49071:41;;49009:115;49185:23;49298:1;49265:17;49230:18;;49212:15;:36;;;;:::i;:::-;49211:71;;;;:::i;:::-;:88;;;;:::i;:::-;49185:114;-1:-1:-1;49310:26:0;49339:36;:15;49185:114;49339:19;:36::i;:::-;49310:65;-1:-1:-1;49416:21:0;49450:36;49310:65;49450:16;:36::i;:::-;49499:18;49520:44;:21;49546:17;49520:25;:44::i;:::-;49499:65;;49577:32;49612:48;49634:25;49657:1;49634:18;;:22;;:25;;;;:::i;:::-;49612:17;;:21;:48::i;:::-;49577:83;;49673:17;49693:58;49726:24;49693:28;49708:12;;49693:10;:14;;:28;;;;:::i;:58::-;49673:78;;49764:28;49795:69;49839:24;49795:39;49810:23;;49795:10;:14;;:39;;;;:::i;:69::-;49764:100;-1:-1:-1;49877:23:0;49764:100;49903:22;49916:9;49903:10;:22;:::i;:::-;:45;;;;:::i;:::-;49982:1;49961:18;:22;;;49994:12;:16;;;50021:23;:27;;;50083:20;;50075:67;;49877:71;;-1:-1:-1;;;;;;50083:20:0;;50117;;50075:67;49982:1;50075:67;50117:20;50083;50075:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50061:81:0;;-1:-1:-1;;50159:19:0;;;;;:42;;;50200:1;50182:15;:19;50159:42;50155:332;;;50218:46;50231:15;50248;50218:12;:46::i;:::-;50301:20;;50274:12;;-1:-1:-1;;;;;50274:12:0;;;50265:22;;;;:8;:22;;;;;;;;50288:9;;;;;50265:33;;;;;;;;;:56;;;;50341:134;;22031:25:1;;;22072:18;;;22065:34;;;22115:18;;22108:34;;;50341:134:0;;22019:2:1;22004:18;50341:134:0;;;;;;;50155:332;50521:9;;50513:81;;-1:-1:-1;;;;;50521:9:0;;;;50558:21;;50513:81;;;;50558:21;50521:9;50513:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;48689:1913:0:o;58216:419::-;-1:-1:-1;;;;;58319:21:0;;;58293:23;58319:21;;;:10;:21;;;;;;;;;;10084:18;;;;;;;58449:21;;;;:33;;;-1:-1:-1;;;;;;58449:33:0;;;;;;;58500:54;;58319:21;;;;;10084:18;;58449:33;;58319:21;;;58500:54;;58293:23;58500:54;58567:60;58582:15;58599:9;58610:16;58567:14;:60::i;:::-;58282:353;;58216:419;;:::o;3227:191::-;3320:6;;;-1:-1:-1;;;;;3337:17:0;;;-1:-1:-1;;;;;;3337:17:0;;;;;;;3370:40;;3320:6;;;3337:17;3320:6;;3370:40;;3301:16;;3370:40;3290:128;3227:191;:::o;40597:188::-;-1:-1:-1;;;;;40680:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;40680:39:0;;;;;;;;;;40737:40;;40680:39;;:31;40737:40;;;40597:188;;:::o;51326:790::-;51417:15;51400:14;:32;51518:29;;-1:-1:-1;;;51518:29:0;;-1:-1:-1;;;;;51533:13:0;1658:32:1;51518:29:0;;;1640:51:1;51383:4:0;;;;51518;;:14;;1613:18:1;;51518:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51487:60;;51597:20;51620:77;51681:5;51620:42;51645:16;;51620:20;:24;;:42;;;;:::i;:77::-;51597:100;-1:-1:-1;51804:16:0;;51800:110;;51837:61;51853:13;51876:6;51885:12;51837:15;:61::i;:::-;51985:19;52022:13;51985:51;;52047:4;-1:-1:-1;;;;;52047:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52074:12:0;;;;-1:-1:-1;52074:12:0;;-1:-1:-1;52074:12:0;52104:4;52097:11;;;;;51326:790;:::o;52124:201::-;52198:20;;52175:7;;52229;-1:-1:-1;;;;;52198:20:0;;;:28;:38;52194:52;;;-1:-1:-1;52245:1:0;;52124:201::o;52194:52::-;52296:21;;52277:16;;52264:10;;:29;;;;:::i;:::-;:53;;;;:::i;:::-;52257:60;;52124:201;:::o;22087:98::-;22145:7;22172:5;22176:1;22172;:5;:::i;22486:98::-;22544:7;22571:5;22575:1;22571;:5;:::i;14020:733::-;-1:-1:-1;;;;;14160:20:0;;14152:70;;;;-1:-1:-1;;;14152:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14241:23:0;;14233:71;;;;-1:-1:-1;;;14233:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14401:17:0;;14377:21;14401:17;;;;;;;;;;;14437:23;;;;14429:74;;;;-1:-1:-1;;;14429:74:0;;22544:2:1;14429:74:0;;;22526:21:1;22583:2;22563:18;;;22556:30;22622:34;22602:18;;;22595:62;-1:-1:-1;;;22673:18:1;;;22666:36;22719:19;;14429:74:0;22342:402:1;14429:74:0;-1:-1:-1;;;;;14539:17:0;;;:9;:17;;;;;;;;;;;14559:22;;;14539:42;;14603:20;;;;;;;;:30;;14575:6;;14539:9;14603:30;;14575:6;;14603:30;:::i;:::-;;;;;;;;14668:9;-1:-1:-1;;;;;14651:35:0;14660:6;-1:-1:-1;;;;;14651:35:0;;14679:6;14651:35;;;;1848:25:1;;1836:2;1821:18;;1702:177;14651:35:0;;;;;;;;14699:46;39676:311;21730:98;21788:7;21815:5;21819:1;21815;:5;:::i;47566:589::-;47716:16;;;47730:1;47716:16;;;;;;;;47692:21;;47716:16;;;;;;;;;;-1:-1:-1;47716:16:0;47692:40;;47761:4;47743;47748:1;47743:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;47743:23:0;;;-1:-1:-1;;;;;47743:23:0;;;;;47787:15;-1:-1:-1;;;;;47787:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47777:4;47782:1;47777:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;47777:32:0;;;-1:-1:-1;;;;;47777:32:0;;;;;47822:62;47839:4;47854:15;47872:11;47822:8;:62::i;:::-;47923:224;;-1:-1:-1;;;47923:224:0;;-1:-1:-1;;;;;47923:15:0;:66;;;;:224;;48004:11;;48030:1;;48074:4;;48101;;48121:15;;47923:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48163:518;48311:62;48328:4;48343:15;48361:11;48311:8;:62::i;:::-;48620:12;;48416:257;;-1:-1:-1;;;48416:257:0;;48488:4;48416:257;;;24463:34:1;24513:18;;;24506:34;;;48534:1:0;24556:18:1;;;24549:34;;;24599:18;;;24592:34;-1:-1:-1;;;;;48620:12:0;;;24642:19:1;;;24635:44;48647:15:0;24695:19:1;;;24688:35;48416:15:0;:31;;;;;;48455:9;;24397:19:1;;48416:257:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48163:518;;:::o;58643:1065::-;58783:6;-1:-1:-1;;;;;58773:16:0;:6;-1:-1:-1;;;;;58773:16:0;;;:30;;;;;58802:1;58793:6;:10;58773:30;58769:932;;;-1:-1:-1;;;;;58824:20:0;;;58820:427;;-1:-1:-1;;;;;58932:22:0;;58913:16;58932:22;;;:14;:22;;;;;;;;;58993:13;:102;;59094:1;58993:102;;;-1:-1:-1;;;;;59030:19:0;;;;;;:11;:19;;;;;;59050:13;59062:1;59050:9;:13;:::i;:::-;59030:34;;;;;;;;;;;;;;;:40;;;58993:102;58973:122;-1:-1:-1;59114:17:0;59134:21;58973:122;59148:6;59134:13;:21::i;:::-;59114:41;;59174:57;59191:6;59199:9;59210;59221;59174:16;:57::i;:::-;58846:401;;;58820:427;-1:-1:-1;;;;;59267:20:0;;;59263:427;;-1:-1:-1;;;;;59375:22:0;;59356:16;59375:22;;;:14;:22;;;;;;;;;59436:13;:102;;59537:1;59436:102;;;-1:-1:-1;;;;;59473:19:0;;;;;;:11;:19;;;;;;59493:13;59505:1;59493:9;:13;:::i;:::-;59473:34;;;;;;;;;;;;;;;:40;;;59436:102;59416:122;-1:-1:-1;59557:17:0;59577:21;59416:122;59591:6;59577:13;:21::i;:::-;59557:41;;59617:57;59634:6;59642:9;59653;59664;59716:807;59881:18;59902:107;59923:12;59902:107;;;;;;;;;;;;;;;;;:6;:107::i;:::-;59881:128;;60055:1;60040:12;:16;;;:98;;;;-1:-1:-1;;;;;;60073:22:0;;;;;;:11;:22;;;;;:65;;;;60096:16;60111:1;60096:12;:16;:::i;:::-;60073:40;;;;;;;;;;;;;;;-1:-1:-1;60073:40:0;:50;;:65;60040:98;60022:425;;;-1:-1:-1;;;;;60165:22:0;;;;;;:11;:22;;;;;60214:8;;60188:16;60203:1;60188:12;:16;:::i;:::-;60165:40;;;;;;;;;;;;;-1:-1:-1;60165:40:0;:46;;:57;60022:425;;;60294:82;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;60255:22:0;;-1:-1:-1;60255:22:0;;;:11;:22;;;;;:36;;;;;;;;;;;:121;;;;-1:-1:-1;;60255:121:0;;;;;;;;-1:-1:-1;60255:121:0;;;;60419:16;;60255:36;;60419:16;:::i;:::-;-1:-1:-1;;;;;60391:25:0;;;;;;:14;:25;;;;;:44;;-1:-1:-1;;60391:44:0;;;;;;;;;;;;60022:425;60464:51;;;25396:25:1;;;25452:2;25437:18;;25430:34;;;-1:-1:-1;;;;;60464:51:0;;;;;25369:18:1;60464:51:0;;;;;;;59870:653;59716:807;;;;:::o;21349:98::-;21407:7;21434:5;21438:1;21434;:5;:::i;60531:196::-;60636:6;60679:12;60672:5;60668:9;;60660:32;;;;-1:-1:-1;;;60660:32:0;;;;;;;;:::i;:::-;-1:-1:-1;60717:1:0;;60531:196;-1:-1:-1;;60531:196:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1884:180::-;1943:6;1996:2;1984:9;1975:7;1971:23;1967:32;1964:52;;;2012:1;2009;2002:12;1964:52;-1:-1:-1;2035:23:1;;1884:180;-1:-1:-1;1884:180:1:o;2251:456::-;2328:6;2336;2344;2397:2;2385:9;2376:7;2372:23;2368:32;2365:52;;;2413:1;2410;2403:12;2365:52;2452:9;2439:23;2471:31;2496:5;2471:31;:::i;:::-;2521:5;-1:-1:-1;2578:2:1;2563:18;;2550:32;2591:33;2550:32;2591:33;:::i;:::-;2251:456;;2643:7;;-1:-1:-1;;;2697:2:1;2682:18;;;;2669:32;;2251:456::o;2712:615::-;2798:6;2806;2859:2;2847:9;2838:7;2834:23;2830:32;2827:52;;;2875:1;2872;2865:12;2827:52;2915:9;2902:23;2944:18;2985:2;2977:6;2974:14;2971:34;;;3001:1;2998;2991:12;2971:34;3039:6;3028:9;3024:22;3014:32;;3084:7;3077:4;3073:2;3069:13;3065:27;3055:55;;3106:1;3103;3096:12;3055:55;3146:2;3133:16;3172:2;3164:6;3161:14;3158:34;;;3188:1;3185;3178:12;3158:34;3241:7;3236:2;3226:6;3223:1;3219:14;3215:2;3211:23;3207:32;3204:45;3201:65;;;3262:1;3259;3252:12;3201:65;3293:2;3285:11;;;;;3315:6;;-1:-1:-1;2712:615:1;;-1:-1:-1;;;;2712:615:1:o;3926:160::-;3991:20;;4047:13;;4040:21;4030:32;;4020:60;;4076:1;4073;4066:12;4091:316;4165:6;4173;4181;4234:2;4222:9;4213:7;4209:23;4205:32;4202:52;;;4250:1;4247;4240:12;4202:52;4286:9;4273:23;4263:33;;4343:2;4332:9;4328:18;4315:32;4305:42;;4366:35;4397:2;4386:9;4382:18;4366:35;:::i;:::-;4356:45;;4091:316;;;;;:::o;4412:315::-;4477:6;4485;4538:2;4526:9;4517:7;4513:23;4509:32;4506:52;;;4554:1;4551;4544:12;4506:52;4593:9;4580:23;4612:31;4637:5;4612:31;:::i;:::-;4662:5;-1:-1:-1;4686:35:1;4717:2;4702:18;;4686:35;:::i;:::-;4676:45;;4412:315;;;;;:::o;4732:316::-;4809:6;4817;4825;4878:2;4866:9;4857:7;4853:23;4849:32;4846:52;;;4894:1;4891;4884:12;4846:52;-1:-1:-1;;4917:23:1;;;4987:2;4972:18;;4959:32;;-1:-1:-1;5038:2:1;5023:18;;;5010:32;;4732:316;-1:-1:-1;4732:316:1:o;5053:180::-;5109:6;5162:2;5150:9;5141:7;5137:23;5133:32;5130:52;;;5178:1;5175;5168:12;5130:52;5201:26;5217:9;5201:26;:::i;5238:388::-;5306:6;5314;5367:2;5355:9;5346:7;5342:23;5338:32;5335:52;;;5383:1;5380;5373:12;5335:52;5422:9;5409:23;5441:31;5466:5;5441:31;:::i;:::-;5491:5;-1:-1:-1;5548:2:1;5533:18;;5520:32;5561:33;5520:32;5561:33;:::i;:::-;5613:7;5603:17;;;5238:388;;;;;:::o;5631:687::-;5733:6;5741;5749;5757;5765;5773;5826:3;5814:9;5805:7;5801:23;5797:33;5794:53;;;5843:1;5840;5833:12;5794:53;5882:9;5869:23;5901:31;5926:5;5901:31;:::i;:::-;5951:5;-1:-1:-1;6003:2:1;5988:18;;5975:32;;-1:-1:-1;6054:2:1;6039:18;;6026:32;;-1:-1:-1;6110:2:1;6095:18;;6082:32;6158:4;6145:18;;6133:31;;6123:59;;6178:1;6175;6168:12;6123:59;5631:687;;;;-1:-1:-1;5631:687:1;;6255:3;6240:19;;6227:33;;6307:3;6292:19;;;6279:33;;-1:-1:-1;5631:687:1;-1:-1:-1;;5631:687:1:o;6323:419::-;6390:6;6398;6451:2;6439:9;6430:7;6426:23;6422:32;6419:52;;;6467:1;6464;6457:12;6419:52;6506:9;6493:23;6525:31;6550:5;6525:31;:::i;:::-;6575:5;-1:-1:-1;6632:2:1;6617:18;;6604:32;6680:10;6667:24;;6655:37;;6645:65;;6706:1;6703;6696:12;7015:380;7094:1;7090:12;;;;7137;;;7158:61;;7212:4;7204:6;7200:17;7190:27;;7158:61;7265:2;7257:6;7254:14;7234:18;7231:38;7228:161;;7311:10;7306:3;7302:20;7299:1;7292:31;7346:4;7343:1;7336:15;7374:4;7371:1;7364:15;7228:161;;7015:380;;;:::o;7400:337::-;7602:2;7584:21;;;7641:2;7621:18;;;7614:30;-1:-1:-1;;;7675:2:1;7660:18;;7653:43;7728:2;7713:18;;7400:337::o;7742:356::-;7944:2;7926:21;;;7963:18;;;7956:30;8022:34;8017:2;8002:18;;7995:62;8089:2;8074:18;;7742:356::o;8103:127::-;8164:10;8159:3;8155:20;8152:1;8145:31;8195:4;8192:1;8185:15;8219:4;8216:1;8209:15;8235:168;8308:9;;;8339;;8356:15;;;8350:22;;8336:37;8326:71;;8377:18;;:::i;8408:127::-;8469:10;8464:3;8460:20;8457:1;8450:31;8500:4;8497:1;8490:15;8524:4;8521:1;8514:15;8540:120;8580:1;8606;8596:35;;8611:18;;:::i;:::-;-1:-1:-1;8645:9:1;;8540:120::o;9490:127::-;9551:10;9546:3;9542:20;9539:1;9532:31;9582:4;9579:1;9572:15;9606:4;9603:1;9596:15;9622:135;9661:3;9682:17;;;9679:43;;9702:18;;:::i;:::-;-1:-1:-1;9749:1:1;9738:13;;9622:135::o;9762:125::-;9827:9;;;9848:10;;;9845:36;;;9861:18;;:::i;11131:175::-;11199:10;11242;;;11230;;;11226:27;;11265:12;;;11262:38;;;11280:18;;:::i;:::-;11262:38;11131:175;;;;:::o;11311:191::-;11350:1;11376:10;11413:2;11410:1;11406:10;11435:3;11425:37;;11442:18;;:::i;:::-;11480:10;;11476:20;;;;;11311:191;-1:-1:-1;;11311:191:1:o;17883:401::-;18085:2;18067:21;;;18124:2;18104:18;;;18097:30;18163:34;18158:2;18143:18;;18136:62;-1:-1:-1;;;18229:2:1;18214:18;;18207:35;18274:3;18259:19;;17883:401::o;18289:399::-;18491:2;18473:21;;;18530:2;18510:18;;;18503:30;18569:34;18564:2;18549:18;;18542:62;-1:-1:-1;;;18635:2:1;18620:18;;18613:33;18678:3;18663:19;;18289:399::o;21486:128::-;21553:9;;;21574:11;;;21571:37;;;21588:18;;:::i;22153:184::-;22223:6;22276:2;22264:9;22255:7;22251:23;22247:32;22244:52;;;22292:1;22289;22282:12;22244:52;-1:-1:-1;22315:16:1;;22153:184;-1:-1:-1;22153:184:1:o;22881:251::-;22951:6;23004:2;22992:9;22983:7;22979:23;22975:32;22972:52;;;23020:1;23017;23010:12;22972:52;23052:9;23046:16;23071:31;23096:5;23071:31;:::i;23137:980::-;23399:4;23447:3;23436:9;23432:19;23478:6;23467:9;23460:25;23504:2;23542:6;23537:2;23526:9;23522:18;23515:34;23585:3;23580:2;23569:9;23565:18;23558:31;23609:6;23644;23638:13;23675:6;23667;23660:22;23713:3;23702:9;23698:19;23691:26;;23752:2;23744:6;23740:15;23726:29;;23773:1;23783:195;23797:6;23794:1;23791:13;23783:195;;;23862:13;;-1:-1:-1;;;;;23858:39:1;23846:52;;23953:15;;;;23918:12;;;;23894:1;23812:9;23783:195;;;-1:-1:-1;;;;;;;24034:32:1;;;;24029:2;24014:18;;24007:60;-1:-1:-1;;;24098:3:1;24083:19;24076:35;23995:3;23137:980;-1:-1:-1;;;23137:980:1:o;24734:306::-;24822:6;24830;24838;24891:2;24879:9;24870:7;24866:23;24862:32;24859:52;;;24907:1;24904;24897:12;24859:52;24936:9;24930:16;24920:26;;24986:2;24975:9;24971:18;24965:25;24955:35;;25030:2;25019:9;25015:18;25009:25;24999:35;;24734:306;;;;;:::o;25045:172::-;25112:10;25142;;;25154;;;25138:27;;25177:11;;;25174:37;;;25191:18;;:::i
Swarm Source
ipfs://d2c24f649cd836afde817121d5add6a59da198c1e9d6f9acbcc1b37e13b0e98c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.