ERC-20
Overview
Max Total Supply
1,000,000,000 POW
Holders
157
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Dogepows
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-22 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; // 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; } } // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); } // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) /** * @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); } // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); 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 swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } contract Dogepows is ERC20, Ownable { address public doge; /////////////////////////////////////////////////////////////////////////// bool private inSwapAndLiquify; uint16 public sellLiquidityFee; uint16 public buyLiquidityFee; uint16 public sellMarketingFee; uint16 public buyMarketingFee; uint16 public sellBurnFee; uint16 public buyBurnFee; uint16 public sellBurnDogeFee; uint16 public buyBurnDogeFee; address public marketingWallet; uint256 public minAmountToTakeFee; uint256 public maxWallet; uint256 public maxTransactionAmount; IUniswapV2Router02 public mainRouter; address public mainPair; mapping(address => bool) public isExcludedFromMaxTransactionAmount; mapping(address => bool) public isExcludedFromFee; mapping(address => bool) public automatedMarketMakerPairs; uint256 private _liquidityFeeTokens; uint256 private _marketingFeeTokens; uint256 private _burnFeeTokens; uint256 private _burnDogeFeeTokens; event UpdateLiquidityFee( uint16 newSellLiquidityFee, uint16 newBuyLiquidityFee, uint16 oldSellLiquidityFee, uint16 oldBuyLiquidityFee ); event UpdateMarketingFee( uint16 newSellMarketingFee, uint16 newBuyMarketingFee, uint16 oldSellMarketingFee, uint16 oldBuyMarketingFee ); event UpdateBurnFee( uint16 newSellBurnFee, uint16 newBuyBurnFee, uint16 oldSellBurnFee, uint16 oldBuyBurnFee ); event UpdateBurnDogeFee( uint16 newSellBurnDogeFee, uint16 newBuyBurnDogeFee, uint16 oldSellBurnDogeFee, uint16 oldBuyBurnDogeFee ); event UpdateMarketingWallet( address indexed newMarketingWallet, address indexed oldMarketingWallet ); event ExcludedFromMaxTransactionAmount( address indexed account, bool isExcluded ); event UpdateMinAmountToTakeFee( uint256 newMinAmountToTakeFee, uint256 oldMinAmountToTakeFee ); event SetAutomatedMarketMakerPair(address indexed pair, bool value); event ExcludedFromFee(address indexed account, bool isEx); event SwapAndLiquify(uint256 tokensForLiquidity, uint256 ETHForLiquidity); event MarketingFeeTaken(uint256 marketingFeeTokens); event DogeBurnt(uint256 amount); event DogepowsBurnt(uint256 amount); event UpdateUniswapV2Router( address indexed newAddress, address indexed oldRouter ); event UpdateMaxWallet(uint256 newMaxWallet, uint256 oldMaxWallet); event UpdateMaxTransactionAmount( uint256 newMaxTransactionAmount, uint256 oldMaxTransactionAmount ); /////////////////////////////////////////////////////////////////////////////// constructor() ERC20("Dogepows", "POW") { uint256 _totalSupply = 1_000_000_000 ether; maxWallet = (_totalSupply * 1) / 100; // 1% maxTransactionAmount = (_totalSupply * 1) / 100; // 1% doge = 0x35a532d376FFd9a705d0Bb319532837337A398E7; marketingWallet = 0xAEfed5611dc6b1ad2b9969D2BecF50358092fF08; mainRouter = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); mainPair = IUniswapV2Factory(mainRouter.factory()).createPair( address(this), mainRouter.WETH() ); sellLiquidityFee = 1; buyLiquidityFee = 1; sellMarketingFee = 7; buyMarketingFee = 3; sellBurnFee = 1; buyBurnFee = 1; sellBurnDogeFee = 1; buyBurnDogeFee = 1; minAmountToTakeFee = _totalSupply / 10000; isExcludedFromFee[address(this)] = true; isExcludedFromFee[marketingWallet] = true; isExcludedFromFee[_msgSender()] = true; isExcludedFromFee[address(0xdead)] = true; isExcludedFromFee[0x460736a29b08A6E8113B30c35d621cb6042765EA] = true; isExcludedFromMaxTransactionAmount[0x460736a29b08A6E8113B30c35d621cb6042765EA] = true; isExcludedFromMaxTransactionAmount[address(0xdead)] = true; isExcludedFromMaxTransactionAmount[address(this)] = true; isExcludedFromMaxTransactionAmount[marketingWallet] = true; isExcludedFromMaxTransactionAmount[_msgSender()] = true; _setAutomatedMarketMakerPair(mainPair, true); _mint(msg.sender, _totalSupply); } function updateUniswapV2Router(address newAddress) public onlyOwner { require( newAddress != address(mainRouter), "The router already has that address" ); emit UpdateUniswapV2Router(newAddress, address(mainRouter)); mainRouter = IUniswapV2Router02(newAddress); address _mainPair = IUniswapV2Factory(mainRouter.factory()).createPair( address(this), mainRouter.WETH() ); mainPair = _mainPair; _setAutomatedMarketMakerPair(mainPair, true); } ///////////////////////////////////////////////////////////////////////////////// modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } function updateLiquidityFee( uint16 _sellLiquidityFee, uint16 _buyLiquidityFee ) external onlyOwner { require( _sellLiquidityFee + sellMarketingFee + sellBurnFee + sellBurnDogeFee <= 200, "sell fee <= 20%" ); require( _buyLiquidityFee + buyMarketingFee + buyBurnFee + buyBurnDogeFee <= 200, "buy fee <= 20%" ); emit UpdateLiquidityFee( _sellLiquidityFee, _buyLiquidityFee, sellLiquidityFee, buyLiquidityFee ); sellLiquidityFee = _sellLiquidityFee; buyLiquidityFee = _buyLiquidityFee; } function updateMaxWallet(uint256 _maxWallet) external onlyOwner { require(_maxWallet > 0, "maxWallet > 0"); emit UpdateMaxWallet(_maxWallet, maxWallet); maxWallet = _maxWallet; } function updateMaxTransactionAmount(uint256 _maxTransactionAmount) external onlyOwner { require(_maxTransactionAmount > 0, "maxTransactionAmount > 0"); emit UpdateMaxTransactionAmount( _maxTransactionAmount, maxTransactionAmount ); maxTransactionAmount = _maxTransactionAmount; } function updateMarketingFee( uint16 _sellMarketingFee, uint16 _buyMarketingFee ) external onlyOwner { require( _sellMarketingFee + sellLiquidityFee + sellBurnFee + sellBurnDogeFee <= 200, "sell fee <= 20%" ); require( _buyMarketingFee + buyLiquidityFee + buyBurnFee + buyBurnDogeFee <= 200, "buy fee <= 20%" ); emit UpdateMarketingFee( _sellMarketingFee, _buyMarketingFee, sellMarketingFee, buyMarketingFee ); sellMarketingFee = _sellMarketingFee; buyMarketingFee = _buyMarketingFee; } function updateMarketingWallet(address _marketingWallet) external onlyOwner { require(_marketingWallet != address(0), "marketing wallet can't be 0"); emit UpdateMarketingWallet(_marketingWallet, marketingWallet); marketingWallet = _marketingWallet; isExcludedFromFee[_marketingWallet] = true; isExcludedFromMaxTransactionAmount[_marketingWallet] = true; } function updateBurnFee(uint16 _sellBurnFee, uint16 _buyBurnFee) external onlyOwner { require( _sellBurnFee + sellMarketingFee + sellLiquidityFee + sellBurnDogeFee <= 200, "sell fee <= 20%" ); require( _buyBurnFee + buyMarketingFee + buyLiquidityFee + buyBurnDogeFee <= 200, "buy fee <= 20%" ); emit UpdateBurnFee(_sellBurnFee, _buyBurnFee, sellBurnFee, buyBurnFee); sellBurnFee = _sellBurnFee; buyBurnFee = _buyBurnFee; } function updateBurnDogeFee(uint16 _sellBurnDogeFee, uint16 _buyBurnDogeFee) external onlyOwner { require( _sellBurnDogeFee + sellMarketingFee + sellBurnFee + sellLiquidityFee <= 200, "sell fee <= 20%" ); require( _buyBurnDogeFee + buyMarketingFee + buyBurnFee + buyLiquidityFee <= 200, "buy fee <= 20%" ); emit UpdateBurnDogeFee( _sellBurnDogeFee, _buyBurnDogeFee, sellBurnDogeFee, buyBurnDogeFee ); sellBurnDogeFee = _sellBurnDogeFee; buyBurnDogeFee = _buyBurnDogeFee; } function updateMinAmountToTakeFee(uint256 _minAmountToTakeFee) external onlyOwner { require(_minAmountToTakeFee > 0, "minAmountToTakeFee > 0"); emit UpdateMinAmountToTakeFee(_minAmountToTakeFee, minAmountToTakeFee); minAmountToTakeFee = _minAmountToTakeFee; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; isExcludedFromMaxTransactionAmount[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function excludeFromFee(address account, bool isEx) external onlyOwner { require(isExcludedFromFee[account] != isEx, "already"); isExcludedFromFee[account] = isEx; emit ExcludedFromFee(account, isEx); } function excludeFromMaxTransactionAmount(address account, bool isEx) external onlyOwner { require(isExcludedFromMaxTransactionAmount[account] != isEx, "already"); isExcludedFromMaxTransactionAmount[account] = isEx; emit ExcludedFromMaxTransactionAmount(account, isEx); } function withdrawStuckTokens(address tkn) external onlyOwner { require(tkn != address(this), "Cannot withdraw own token"); bool success; if (tkn == address(0)) (success, ) = address(msg.sender).call{ value: address(this).balance }(""); else { require(IERC20(tkn).balanceOf(address(this)) > 0); uint256 amount = IERC20(tkn).balanceOf(address(this)); IERC20(tkn).transfer(msg.sender, amount); } } 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"); uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minAmountToTakeFee; // Take Fee if ( !inSwapAndLiquify && balanceOf(mainPair) > 0 && overMinimumTokenBalance && automatedMarketMakerPairs[to] ) { takeFee(); } uint256 _liquidityFee; uint256 _marketingFee; uint256 _burnFee; uint256 _burnDogeFee; // If any account belongs to isExcludedFromFee account then remove the fee if ( !inSwapAndLiquify && !isExcludedFromFee[from] && !isExcludedFromFee[to] ) { // Buy if (automatedMarketMakerPairs[from]) { _liquidityFee = (amount * (buyLiquidityFee)) / 1000; _marketingFee = (amount * (buyMarketingFee)) / 1000; _burnFee = (amount * (buyBurnFee)) / 1000; _burnDogeFee = (amount * (buyBurnDogeFee)) / 1000; } // Sell else if (automatedMarketMakerPairs[to]) { _liquidityFee = (amount * (sellLiquidityFee)) / 1000; _marketingFee = (amount * (sellMarketingFee)) / 1000; _burnFee = (amount * (sellBurnFee)) / 1000; _burnDogeFee = (amount * (sellBurnDogeFee)) / 1000; } uint256 _feeTotal = _liquidityFee + _marketingFee + _burnFee + _burnDogeFee; if (_feeTotal > 0) super._transfer(from, address(this), _feeTotal); amount = amount - _feeTotal; _liquidityFeeTokens = _liquidityFeeTokens + _liquidityFee; _marketingFeeTokens = _marketingFeeTokens + _marketingFee; _burnFeeTokens = _burnFeeTokens + _burnFee; _burnDogeFeeTokens = _burnDogeFeeTokens + _burnDogeFee; } super._transfer(from, to, amount); if (!inSwapAndLiquify) { if (!isExcludedFromMaxTransactionAmount[from]) { require( amount < maxTransactionAmount, "ERC20: exceeds transfer limit" ); } if (!isExcludedFromMaxTransactionAmount[to]) { require( balanceOf(to) < maxWallet, "ERC20: exceeds max wallet limit" ); } } } function takeFee() private lockTheSwap { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensTaken = _liquidityFeeTokens + _marketingFeeTokens + _burnFeeTokens + _burnDogeFeeTokens; if (totalTokensTaken == 0 || contractBalance < totalTokensTaken) { return; } if (_burnFeeTokens > 0) { super._transfer(address(this), address(0xdead), _burnFeeTokens); emit DogepowsBurnt(_burnFeeTokens); _burnFeeTokens = 0; } // Halve the amount of liquidity tokens uint256 tokensForLiquidity = _liquidityFeeTokens / 2; uint256 initialETHBalance = address(this).balance; uint256 ETHForLiquidity; uint256 tokensForSwap = tokensForLiquidity + _marketingFeeTokens; if (tokensForSwap > 0) swapTokensForETH(tokensForSwap); uint256 ETHBalance = address(this).balance - initialETHBalance; uint256 ETHForMarketing = (ETHBalance * _marketingFeeTokens) / tokensForSwap; ETHForLiquidity = ETHBalance - ETHForMarketing; if (ETHForMarketing > 0) { (bool success, ) = address(marketingWallet).call{ value: ETHForMarketing }(""); if (success) { emit MarketingFeeTaken(ETHForMarketing); } } if (_burnDogeFeeTokens > 0) { buyBackAndBurnDoge(_burnDogeFeeTokens); emit DogeBurnt(_burnDogeFeeTokens); _burnDogeFeeTokens = 0; } if (tokensForLiquidity > 0 && ETHForLiquidity > 0) { addLiquidity(tokensForLiquidity, ETHForLiquidity); emit SwapAndLiquify(tokensForLiquidity, ETHForLiquidity); } _marketingFeeTokens = 0; _liquidityFeeTokens = 0; } function swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = mainRouter.WETH(); _approve(address(this), address(mainRouter), tokenAmount); mainRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private { _approve(address(this), address(mainRouter), tokenAmount); mainRouter.addLiquidityETH{value: ETHAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(0xdead), block.timestamp ); } function buyBackAndBurnDoge(uint256 amount) private { address[] memory path = new address[](3); path[0] = address(this); path[1] = mainRouter.WETH(); path[2] = doge; _approve(address(this), address(mainRouter), amount); mainRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens( amount, 0, // accept any amount of ETH path, address(0xdead), block.timestamp ); } receive() external payable {} }
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":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DogeBurnt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DogepowsBurnt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isEx","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFeeTokens","type":"uint256"}],"name":"MarketingFeeTaken","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":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHForLiquidity","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":false,"internalType":"uint16","name":"newSellBurnDogeFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newBuyBurnDogeFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldSellBurnDogeFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldBuyBurnDogeFee","type":"uint16"}],"name":"UpdateBurnDogeFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newSellBurnFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newBuyBurnFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldSellBurnFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldBuyBurnFee","type":"uint16"}],"name":"UpdateBurnFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newSellLiquidityFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newBuyLiquidityFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldSellLiquidityFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldBuyLiquidityFee","type":"uint16"}],"name":"UpdateLiquidityFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newSellMarketingFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newBuyMarketingFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldSellMarketingFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldBuyMarketingFee","type":"uint16"}],"name":"UpdateMarketingFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newMarketingWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldMarketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxTransactionAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMaxTransactionAmount","type":"uint256"}],"name":"UpdateMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxWallet","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMaxWallet","type":"uint256"}],"name":"UpdateMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinAmountToTakeFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMinAmountToTakeFee","type":"uint256"}],"name":"UpdateMinAmountToTakeFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldRouter","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"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":[],"name":"buyBurnDogeFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"doge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"minAmountToTakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnDogeFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellBurnDogeFee","type":"uint16"},{"internalType":"uint16","name":"_buyBurnDogeFee","type":"uint16"}],"name":"updateBurnDogeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellBurnFee","type":"uint16"},{"internalType":"uint16","name":"_buyBurnFee","type":"uint16"}],"name":"updateBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellLiquidityFee","type":"uint16"},{"internalType":"uint16","name":"_buyLiquidityFee","type":"uint16"}],"name":"updateLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellMarketingFee","type":"uint16"},{"internalType":"uint16","name":"_buyMarketingFee","type":"uint16"}],"name":"updateMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"}],"name":"updateMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAmountToTakeFee","type":"uint256"}],"name":"updateMinAmountToTakeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801562000010575f80fd5b5060405180604001604052806008815260200167446f6765706f777360c01b81525060405180604001604052806003815260200162504f5760e81b81525081600390816200005f919062000730565b5060046200006e828262000730565b5050506200008b620000856200046c60201b60201c565b62000470565b6b033b2e3c9fd0803ce80000006064620000a78260016200080c565b620000b391906200082c565b6009556064620000c58260016200080c565b620000d191906200082c565b600a55600680547335a532d376ffd9a705d0bb319532837337a398e76001600160a01b03199182161790915560078054600160301b600160d01b03191679aefed5611dc6b1ad2b9969d2becf50358092ff08000000000000179055600b8054737a250d5630b4cf539739df2c5dacb4c659f2488d9216821790556040805163c45a015560e01b8152905163c45a0155916004818101926020929091908290030181865afa15801562000185573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001ab91906200084c565b6001600160a01b031663c9c6539630600b5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200023191906200084c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200027c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a291906200084c565b600c80546001600160a01b0319166001600160a01b039290921691909117905560068054600160a81b600160f81b0319167d0100030007000100010000000000000000000000000000000000000000001790556007805465ffffffffffff191664010001000117905562000319612710826200082c565b600855305f818152600e602090815260408083208054600160ff199182168117909255600780546001600160a01b036601000000000000918290048116885285882080548516861790553380895286892080548616871790557ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a80548616871790557f3c250fb8ae7c5a9b4fc4409763bbb5a23e265468ed9b222e08804bdd88470ff08054861687179055600d9097527fc4bbaca1245b1f6a1f8ddbada186f3ae8f0303cc15137e9f778f4cfa99750bec80548516861790557fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a805485168617905597875284872080548416851790559054048616855282852080548216831790559284529220805490911682179055600c5462000459921690620004c1565b620004653382620005cb565b5062000891565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152600f602052604090205481151560ff9091161515036200055c5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382165f818152600f60209081526040808320805486151560ff199182168117909255600d84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a25050565b6001600160a01b038216620006235760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000553565b8060025f8282546200063691906200087b565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620006ba57607f821691505b602082108103620006d957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200068c575f81815260208120601f850160051c81016020861015620007075750805b601f850160051c820191505b81811015620007285782815560010162000713565b505050505050565b81516001600160401b038111156200074c576200074c62000691565b62000764816200075d8454620006a5565b84620006df565b602080601f8311600181146200079a575f8415620007825750858301515b5f19600386901b1c1916600185901b17855562000728565b5f85815260208120601f198616915b82811015620007ca57888601518255948401946001909101908401620007a9565b5085821015620007e857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620008265762000826620007f8565b92915050565b5f826200084757634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156200085d575f80fd5b81516001600160a01b038116811462000874575f80fd5b9392505050565b80820180821115620008265762000826620007f8565b612bd8806200089f5f395ff3fe60806040526004361061026d575f3560e01c806395d89b411161014a578063cf089e13116100be578063e9481eee11610078578063e9481eee14610790578063f11a24d3146107be578063f2fde38b146107df578063f6374342146107fe578063f8b45b051461081f578063fc59d23d14610834575f80fd5b8063cf089e13146106db578063cf188ad0146106fa578063d68f8cde14610719578063dd62ed3e14610738578063df8408fe14610757578063e71dc3f514610776575f80fd5b8063aacebbe31161010f578063aacebbe314610618578063adb873bd14610637578063b62496f514610658578063c8c8ebe414610686578063cb426d0f1461069b578063cb963728146106bc575f80fd5b806395d89b41146105885780639a7a23d61461059c578063a457c2d7146105bb578063a9059cbb146105da578063aa498023146105f9575f80fd5b80635342acb4116101e157806373b9e82c116101a657806373b9e82c146104c557806375f0a874146104e45780637bce5a041461050a57806385af30c51461052b5780638da5cb5b1461054a5780639213691314610567575f80fd5b80635342acb4146103fd57806365b8dbc01461042b578063709752211461044a57806370a082311461047d578063715018a6146104b1575f80fd5b80632073bd85116102325780632073bd851461032f57806323b872dd1461034e5780632ae2f1211461036d578063313ce5671461038c57806334809ee7146103a757806339509351146103de575f80fd5b806306fdde0314610278578063095ea7b3146102a25780630b00ea64146102d157806318160ddd146102f25780631c499ab014610310575f80fd5b3661027457005b5f80fd5b348015610283575f80fd5b5061028c610849565b604051610299919061274d565b60405180910390f35b3480156102ad575f80fd5b506102c16102bc3660046127ac565b6108d9565b6040519015158152602001610299565b3480156102dc575f80fd5b506102f06102eb3660046127ec565b6108f2565b005b3480156102fd575f80fd5b506002545b604051908152602001610299565b34801561031b575f80fd5b506102f061032a36600461281d565b610a5f565b34801561033a575f80fd5b506102f06103493660046127ec565b610ae8565b348015610359575f80fd5b506102c1610368366004612834565b610c4a565b348015610378575f80fd5b506102f061038736600461287f565b610c6d565b348015610397575f80fd5b5060405160128152602001610299565b3480156103b2575f80fd5b506006546103c6906001600160a01b031681565b6040516001600160a01b039091168152602001610299565b3480156103e9575f80fd5b506102c16103f83660046127ac565b610d2d565b348015610408575f80fd5b506102c16104173660046128b6565b600e6020525f908152604090205460ff1681565b348015610436575f80fd5b506102f06104453660046128b6565b610d4e565b348015610455575f80fd5b5060075461046a9062010000900461ffff1681565b60405161ffff9091168152602001610299565b348015610488575f80fd5b506103026104973660046128b6565b6001600160a01b03165f9081526020819052604090205490565b3480156104bc575f80fd5b506102f0610f98565b3480156104d0575f80fd5b506102f06104df36600461281d565b610fab565b3480156104ef575f80fd5b506007546103c690600160301b90046001600160a01b031681565b348015610515575f80fd5b5060065461046a90600160d81b900461ffff1681565b348015610536575f80fd5b50600c546103c6906001600160a01b031681565b348015610555575f80fd5b506005546001600160a01b03166103c6565b348015610572575f80fd5b5060065461046a90600160c81b900461ffff1681565b348015610593575f80fd5b5061028c61103d565b3480156105a7575f80fd5b506102f06105b636600461287f565b61104c565b3480156105c6575f80fd5b506102c16105d53660046127ac565b61105e565b3480156105e5575f80fd5b506102c16105f43660046127ac565b6110d8565b348015610604575f80fd5b506102f061061336600461281d565b6110e5565b348015610623575f80fd5b506102f06106323660046128b6565b61117e565b348015610642575f80fd5b5060065461046a90600160e81b900461ffff1681565b348015610663575f80fd5b506102c16106723660046128b6565b600f6020525f908152604090205460ff1681565b348015610691575f80fd5b50610302600a5481565b3480156106a6575f80fd5b5060075461046a90600160201b900461ffff1681565b3480156106c7575f80fd5b506102f06106d63660046128b6565b61127b565b3480156106e6575f80fd5b506102f06106f53660046127ec565b611483565b348015610705575f80fd5b50600b546103c6906001600160a01b031681565b348015610724575f80fd5b506102f06107333660046127ec565b6115ed565b348015610743575f80fd5b506103026107523660046128d8565b611757565b348015610762575f80fd5b506102f061077136600461287f565b611781565b348015610781575f80fd5b5060075461046a9061ffff1681565b34801561079b575f80fd5b506102c16107aa3660046128b6565b600d6020525f908152604090205460ff1681565b3480156107c9575f80fd5b5060065461046a90600160b81b900461ffff1681565b3480156107ea575f80fd5b506102f06107f93660046128b6565b611839565b348015610809575f80fd5b5060065461046a90600160a81b900461ffff1681565b34801561082a575f80fd5b5061030260095481565b34801561083f575f80fd5b5061030260085481565b60606003805461085890612904565b80601f016020809104026020016040519081016040528092919081815260200182805461088490612904565b80156108cf5780601f106108a6576101008083540402835291602001916108cf565b820191905f5260205f20905b8154815290600101906020018083116108b257829003601f168201915b5050505050905090565b5f336108e68185856118b2565b60019150505b92915050565b6108fa6119d5565b60065460c89061ffff600160a81b8204811691600160e81b810482169161092991600160c81b90041686612950565b6109339190612950565b61093d9190612950565b61ffff1611156109685760405162461bcd60e51b815260040161095f90612972565b60405180910390fd5b60065460075460c89161ffff600160b81b820481169281169161099491600160d81b9091041685612950565b61099e9190612950565b6109a89190612950565b61ffff1611156109ca5760405162461bcd60e51b815260040161095f9061299b565b6007546040805161ffff85811682528481166020830152620100008404811682840152600160201b9093049092166060830152517f585fc153f20f4b5183a1015f6aa8639eccd1e4a2646bfcbb794c74630af3e0699181900360800190a16007805465ffffffff000019166201000061ffff9485160265ffff00000000191617600160201b9290931691909102919091179055565b610a676119d5565b5f8111610aa65760405162461bcd60e51b815260206004820152600d60248201526c06d617857616c6c6574203e203609c1b604482015260640161095f565b6009546040805183815260208101929092527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1600955565b610af06119d5565b60075460065460c89161ffff62010000909104811691600160a81b8104821691610b2291600160c81b90041686612950565b610b2c9190612950565b610b369190612950565b61ffff161115610b585760405162461bcd60e51b815260040161095f90612972565b60075460065460c89161ffff600160201b909104811691600160b81b8104821691610b8b91600160d81b90041685612950565b610b959190612950565b610b9f9190612950565b61ffff161115610bc15760405162461bcd60e51b815260040161095f9061299b565b6006546007546040805161ffff86811682528581166020830152600160e81b909404841681830152929091166060830152517f01f5c7a45d273917dfc98816f1dd17a88893a7338e7beaa4d305fc8c84f8fe259181900360800190a16006805461ffff60e81b1916600160e81b61ffff948516021790556007805461ffff191691909216179055565b5f33610c57858285611a2f565b610c62858585611aa1565b506001949350505050565b610c756119d5565b6001600160a01b0382165f908152600d602052604090205481151560ff909116151503610cce5760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b604482015260640161095f565b6001600160a01b0382165f818152600d6020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b5f336108e6818585610d3f8383611757565b610d4991906129c3565b6118b2565b610d566119d5565b600b546001600160a01b0390811690821603610dc05760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b606482015260840161095f565b600b546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e905f90a3600b80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290515f929163c45a01559160048083019260209291908290030181865afa158015610e53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e7791906129d6565b6001600160a01b031663c9c6539630600b5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610efa91906129d6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610f44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6891906129d6565b600c80546001600160a01b0319166001600160a01b038316908117909155909150610f94906001611ef8565b5050565b610fa06119d5565b610fa95f611ff5565b565b610fb36119d5565b5f8111610ffb5760405162461bcd60e51b815260206004820152601660248201527506d696e416d6f756e74546f54616b65466565203e20360541b604482015260640161095f565b6008546040805183815260208101929092527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a1600855565b60606004805461085890612904565b6110546119d5565b610f948282611ef8565b5f338161106b8286611757565b9050838110156110cb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161095f565b610c6282868684036118b2565b5f336108e6818585611aa1565b6110ed6119d5565b5f811161113c5760405162461bcd60e51b815260206004820152601860248201527f6d61785472616e73616374696f6e416d6f756e74203e20300000000000000000604482015260640161095f565b600a546040805183815260208101929092527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1600a55565b6111866119d5565b6001600160a01b0381166111dc5760405162461bcd60e51b815260206004820152601b60248201527f6d61726b6574696e672077616c6c65742063616e277420626520300000000000604482015260640161095f565b6007546040516001600160a01b03600160301b9092048216918316907facf03c50dcf01e53e2775267d12acd0158d87c2f20fb84226837142693b36ae7905f90a3600780546601000000000000600160d01b031916600160301b6001600160a01b03939093169283021790555f908152600e60209081526040808320805460ff199081166001908117909255600d909352922080549091169091179055565b6112836119d5565b306001600160a01b038216036112db5760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207769746864726177206f776e20746f6b656e00000000000000604482015260640161095f565b5f6001600160a01b03821661133357604051339047905f81818185875af1925050503d805f8114611327576040519150601f19603f3d011682016040523d82523d5f602084013e61132c565b606091505b5050505050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611377573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139b91906129f1565b116113a4575f80fd5b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156113e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140c91906129f1565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0384169063a9059cbb906044016020604051808303815f875af1158015611459573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147d9190612a08565b50505050565b61148b6119d5565b60075460065460c89161ffff62010000909104811691600160e81b81048216916114bd91600160a81b90041686612950565b6114c79190612950565b6114d19190612950565b61ffff1611156114f35760405162461bcd60e51b815260040161095f90612972565b60075460065460c89161ffff600160201b82048116929181169161152091600160b81b9091041685612950565b61152a9190612950565b6115349190612950565b61ffff1611156115565760405162461bcd60e51b815260040161095f9061299b565b6006546040805161ffff85811682528481166020830152600160c81b8404811682840152600160d81b9093049092166060830152517f1d6b62961d401d548eb1549c97109c0b905ccd7af9c3777d3076cc8438fdfe659181900360800190a16006805463ffffffff60c81b1916600160c81b61ffff9485160261ffff60d81b191617600160d81b9290931691909102919091179055565b6115f56119d5565b60075460065460c89161ffff62010000909104811691600160e81b810482169161162791600160c81b90041686612950565b6116319190612950565b61163b9190612950565b61ffff16111561165d5760405162461bcd60e51b815260040161095f90612972565b60075460065460c89161ffff600160201b82048116929181169161168a91600160d81b9091041685612950565b6116949190612950565b61169e9190612950565b61ffff1611156116c05760405162461bcd60e51b815260040161095f9061299b565b6006546040805161ffff85811682528481166020830152600160a81b8404811682840152600160b81b9093049092166060830152517f95c5c99557725e816faf752c6675d63483841c28a7a009ed792470a9cb4dea239181900360800190a16006805463ffffffff60a81b1916600160a81b61ffff9485160261ffff60b81b191617600160b81b9290931691909102919091179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6117896119d5565b6001600160a01b0382165f908152600e602052604090205481151560ff9091161515036117e25760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b604482015260640161095f565b6001600160a01b0382165f818152600e6020908152604091829020805460ff191685151590811790915591519182527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa99101610d21565b6118416119d5565b6001600160a01b0381166118a65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095f565b6118af81611ff5565b50565b6001600160a01b0383166119145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161095f565b6001600160a01b0382166119755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161095f565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610fa95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095f565b5f611a3a8484611757565b90505f19811461147d5781811015611a945760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161095f565b61147d84848484036118b2565b6001600160a01b038316611ac75760405162461bcd60e51b815260040161095f90612a23565b6001600160a01b038216611aed5760405162461bcd60e51b815260040161095f90612a68565b305f908152602081905260409020546008546006549082101590600160a01b900460ff16158015611b355750600c546001600160a01b03165f90815260208190526040812054115b8015611b3e5750805b8015611b6157506001600160a01b0384165f908152600f602052604090205460ff165b15611b6e57611b6e612046565b5f805f80600660149054906101000a900460ff16158015611ba757506001600160a01b0389165f908152600e602052604090205460ff16155b8015611bcb57506001600160a01b0388165f908152600e602052604090205460ff16155b15611dda576001600160a01b0389165f908152600f602052604090205460ff1615611c91576006546103e890611c0c90600160b81b900461ffff1689612aab565b611c169190612ac2565b6006549094506103e890611c3590600160d81b900461ffff1689612aab565b611c3f9190612ac2565b6007549093506103e890611c579061ffff1689612aab565b611c619190612ac2565b6007549092506103e890611c8090600160201b900461ffff1689612aab565b611c8a9190612ac2565b9050611d54565b6001600160a01b0388165f908152600f602052604090205460ff1615611d54576006546103e890611ccd90600160a81b900461ffff1689612aab565b611cd79190612ac2565b6006549094506103e890611cf690600160c81b900461ffff1689612aab565b611d009190612ac2565b6006549093506103e890611d1f90600160e81b900461ffff1689612aab565b611d299190612ac2565b6007549092506103e890611d479062010000900461ffff1689612aab565b611d519190612ac2565b90505b5f8183611d6186886129c3565b611d6b91906129c3565b611d7591906129c3565b90508015611d8857611d888a30836122d9565b611d928189612ae1565b975084601054611da291906129c3565b601055601154611db39085906129c3565b601155601254611dc49084906129c3565b601255601354611dd59083906129c3565b601355505b611de58989896122d9565b600654600160a01b900460ff16611eed576001600160a01b0389165f908152600d602052604090205460ff16611e6657600a548710611e665760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d6974000000604482015260640161095f565b6001600160a01b0388165f908152600d602052604090205460ff16611eed576009546001600160a01b0389165f9081526020819052604090205410611eed5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d697400604482015260640161095f565b505050505050505050565b6001600160a01b0382165f908152600f602052604090205481151560ff909116151503611f8d5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c75650000000000000000606482015260840161095f565b6001600160a01b0382165f818152600f60209081526040808320805486151560ff199182168117909255600d84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9101610d21565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6006805460ff60a01b1916600160a01b179055305f9081526020819052604081205490505f60135460125460115460105461208191906129c3565b61208b91906129c3565b61209591906129c3565b90508015806120a357508082105b156120af5750506122ca565b60125415612106576120c63061dead6012546122d9565b7fbd49afcf40c86d69c3b856567b47aedcedc70a21991ed62a1cf25681257f50d06012546040516120f991815260200190565b60405180910390a15f6012555b5f60026010546121169190612ac2565b90505f4790505f806011548461212c91906129c3565b9050801561213d5761213d81612401565b5f6121488447612ae1565b90505f826011548361215a9190612aab565b6121649190612ac2565b90506121708183612ae1565b9350801561220e576007546040515f91600160301b90046001600160a01b03169083908381818185875af1925050503d805f81146121c9576040519150601f19603f3d011682016040523d82523d5f602084013e6121ce565b606091505b50509050801561220c576040518281527f4b6c681641ef142cf7c14791ad828c892635e88e8b4b546faa446787e00263659060200160405180910390a15b505b6013541561226157612221601354612551565b7f4217f88d7940040e1abdc46654cc1e25b2bd60548b97655526ff946fe5ebc09260135460405161225491815260200190565b60405180910390a15f6013555b5f8611801561226f57505f84115b156122b85761227e86856126a5565b60408051878152602081018690527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b50505f60118190556010555050505050505b6006805460ff60a01b19169055565b6001600160a01b0383166122ff5760405162461bcd60e51b815260040161095f90612a23565b6001600160a01b0382166123255760405162461bcd60e51b815260040161095f90612a68565b6001600160a01b0383165f908152602081905260409020548181101561239c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161095f565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361147d565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061243457612434612af4565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561248b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124af91906129d6565b816001815181106124c2576124c2612af4565b6001600160a01b039283166020918202929092010152600b546124e891309116846118b2565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac947906125209085905f90869030904290600401612b08565b5f604051808303815f87803b158015612537575f80fd5b505af1158015612549573d5f803e3d5ffd5b505050505050565b604080516003808252608082019092525f916020820160608036833701905050905030815f8151811061258657612586612af4565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125dd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061260191906129d6565b8160018151811061261457612614612af4565b6001600160a01b03928316602091820292909201015260065482519116908290600290811061264557612645612af4565b6001600160a01b039283166020918202929092010152600b5461266b91309116846118b2565b600b54604051635c11d79560e01b81526001600160a01b0390911690635c11d795906125209085905f90869061dead904290600401612b08565b600b546126bd9030906001600160a01b0316846118b2565b600b5460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612728573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061132c9190612b77565b5f6020808352835180828501525f5b818110156127785785810183015185820160400152820161275c565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146118af575f80fd5b5f80604083850312156127bd575f80fd5b82356127c881612798565b946020939093013593505050565b803561ffff811681146127e7575f80fd5b919050565b5f80604083850312156127fd575f80fd5b612806836127d6565b9150612814602084016127d6565b90509250929050565b5f6020828403121561282d575f80fd5b5035919050565b5f805f60608486031215612846575f80fd5b833561285181612798565b9250602084013561286181612798565b929592945050506040919091013590565b80151581146118af575f80fd5b5f8060408385031215612890575f80fd5b823561289b81612798565b915060208301356128ab81612872565b809150509250929050565b5f602082840312156128c6575f80fd5b81356128d181612798565b9392505050565b5f80604083850312156128e9575f80fd5b82356128f481612798565b915060208301356128ab81612798565b600181811c9082168061291857607f821691505b60208210810361293657634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b61ffff81811683821601908082111561296b5761296b61293c565b5092915050565b6020808252600f908201526e73656c6c20666565203c3d2032302560881b604082015260600190565b6020808252600e908201526d62757920666565203c3d2032302560901b604082015260600190565b808201808211156108ec576108ec61293c565b5f602082840312156129e6575f80fd5b81516128d181612798565b5f60208284031215612a01575f80fd5b5051919050565b5f60208284031215612a18575f80fd5b81516128d181612872565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176108ec576108ec61293c565b5f82612adc57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156108ec576108ec61293c565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612b565784516001600160a01b031683529383019391830191600101612b31565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612b89575f80fd5b835192506020840151915060408401519050925092509256fea264697066735822122019d2bc7759b4e507d310191a904f22834bc8407f7721878a46ab08a6c895920c64736f6c63430008140033
Deployed Bytecode
0x60806040526004361061026d575f3560e01c806395d89b411161014a578063cf089e13116100be578063e9481eee11610078578063e9481eee14610790578063f11a24d3146107be578063f2fde38b146107df578063f6374342146107fe578063f8b45b051461081f578063fc59d23d14610834575f80fd5b8063cf089e13146106db578063cf188ad0146106fa578063d68f8cde14610719578063dd62ed3e14610738578063df8408fe14610757578063e71dc3f514610776575f80fd5b8063aacebbe31161010f578063aacebbe314610618578063adb873bd14610637578063b62496f514610658578063c8c8ebe414610686578063cb426d0f1461069b578063cb963728146106bc575f80fd5b806395d89b41146105885780639a7a23d61461059c578063a457c2d7146105bb578063a9059cbb146105da578063aa498023146105f9575f80fd5b80635342acb4116101e157806373b9e82c116101a657806373b9e82c146104c557806375f0a874146104e45780637bce5a041461050a57806385af30c51461052b5780638da5cb5b1461054a5780639213691314610567575f80fd5b80635342acb4146103fd57806365b8dbc01461042b578063709752211461044a57806370a082311461047d578063715018a6146104b1575f80fd5b80632073bd85116102325780632073bd851461032f57806323b872dd1461034e5780632ae2f1211461036d578063313ce5671461038c57806334809ee7146103a757806339509351146103de575f80fd5b806306fdde0314610278578063095ea7b3146102a25780630b00ea64146102d157806318160ddd146102f25780631c499ab014610310575f80fd5b3661027457005b5f80fd5b348015610283575f80fd5b5061028c610849565b604051610299919061274d565b60405180910390f35b3480156102ad575f80fd5b506102c16102bc3660046127ac565b6108d9565b6040519015158152602001610299565b3480156102dc575f80fd5b506102f06102eb3660046127ec565b6108f2565b005b3480156102fd575f80fd5b506002545b604051908152602001610299565b34801561031b575f80fd5b506102f061032a36600461281d565b610a5f565b34801561033a575f80fd5b506102f06103493660046127ec565b610ae8565b348015610359575f80fd5b506102c1610368366004612834565b610c4a565b348015610378575f80fd5b506102f061038736600461287f565b610c6d565b348015610397575f80fd5b5060405160128152602001610299565b3480156103b2575f80fd5b506006546103c6906001600160a01b031681565b6040516001600160a01b039091168152602001610299565b3480156103e9575f80fd5b506102c16103f83660046127ac565b610d2d565b348015610408575f80fd5b506102c16104173660046128b6565b600e6020525f908152604090205460ff1681565b348015610436575f80fd5b506102f06104453660046128b6565b610d4e565b348015610455575f80fd5b5060075461046a9062010000900461ffff1681565b60405161ffff9091168152602001610299565b348015610488575f80fd5b506103026104973660046128b6565b6001600160a01b03165f9081526020819052604090205490565b3480156104bc575f80fd5b506102f0610f98565b3480156104d0575f80fd5b506102f06104df36600461281d565b610fab565b3480156104ef575f80fd5b506007546103c690600160301b90046001600160a01b031681565b348015610515575f80fd5b5060065461046a90600160d81b900461ffff1681565b348015610536575f80fd5b50600c546103c6906001600160a01b031681565b348015610555575f80fd5b506005546001600160a01b03166103c6565b348015610572575f80fd5b5060065461046a90600160c81b900461ffff1681565b348015610593575f80fd5b5061028c61103d565b3480156105a7575f80fd5b506102f06105b636600461287f565b61104c565b3480156105c6575f80fd5b506102c16105d53660046127ac565b61105e565b3480156105e5575f80fd5b506102c16105f43660046127ac565b6110d8565b348015610604575f80fd5b506102f061061336600461281d565b6110e5565b348015610623575f80fd5b506102f06106323660046128b6565b61117e565b348015610642575f80fd5b5060065461046a90600160e81b900461ffff1681565b348015610663575f80fd5b506102c16106723660046128b6565b600f6020525f908152604090205460ff1681565b348015610691575f80fd5b50610302600a5481565b3480156106a6575f80fd5b5060075461046a90600160201b900461ffff1681565b3480156106c7575f80fd5b506102f06106d63660046128b6565b61127b565b3480156106e6575f80fd5b506102f06106f53660046127ec565b611483565b348015610705575f80fd5b50600b546103c6906001600160a01b031681565b348015610724575f80fd5b506102f06107333660046127ec565b6115ed565b348015610743575f80fd5b506103026107523660046128d8565b611757565b348015610762575f80fd5b506102f061077136600461287f565b611781565b348015610781575f80fd5b5060075461046a9061ffff1681565b34801561079b575f80fd5b506102c16107aa3660046128b6565b600d6020525f908152604090205460ff1681565b3480156107c9575f80fd5b5060065461046a90600160b81b900461ffff1681565b3480156107ea575f80fd5b506102f06107f93660046128b6565b611839565b348015610809575f80fd5b5060065461046a90600160a81b900461ffff1681565b34801561082a575f80fd5b5061030260095481565b34801561083f575f80fd5b5061030260085481565b60606003805461085890612904565b80601f016020809104026020016040519081016040528092919081815260200182805461088490612904565b80156108cf5780601f106108a6576101008083540402835291602001916108cf565b820191905f5260205f20905b8154815290600101906020018083116108b257829003601f168201915b5050505050905090565b5f336108e68185856118b2565b60019150505b92915050565b6108fa6119d5565b60065460c89061ffff600160a81b8204811691600160e81b810482169161092991600160c81b90041686612950565b6109339190612950565b61093d9190612950565b61ffff1611156109685760405162461bcd60e51b815260040161095f90612972565b60405180910390fd5b60065460075460c89161ffff600160b81b820481169281169161099491600160d81b9091041685612950565b61099e9190612950565b6109a89190612950565b61ffff1611156109ca5760405162461bcd60e51b815260040161095f9061299b565b6007546040805161ffff85811682528481166020830152620100008404811682840152600160201b9093049092166060830152517f585fc153f20f4b5183a1015f6aa8639eccd1e4a2646bfcbb794c74630af3e0699181900360800190a16007805465ffffffff000019166201000061ffff9485160265ffff00000000191617600160201b9290931691909102919091179055565b610a676119d5565b5f8111610aa65760405162461bcd60e51b815260206004820152600d60248201526c06d617857616c6c6574203e203609c1b604482015260640161095f565b6009546040805183815260208101929092527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1600955565b610af06119d5565b60075460065460c89161ffff62010000909104811691600160a81b8104821691610b2291600160c81b90041686612950565b610b2c9190612950565b610b369190612950565b61ffff161115610b585760405162461bcd60e51b815260040161095f90612972565b60075460065460c89161ffff600160201b909104811691600160b81b8104821691610b8b91600160d81b90041685612950565b610b959190612950565b610b9f9190612950565b61ffff161115610bc15760405162461bcd60e51b815260040161095f9061299b565b6006546007546040805161ffff86811682528581166020830152600160e81b909404841681830152929091166060830152517f01f5c7a45d273917dfc98816f1dd17a88893a7338e7beaa4d305fc8c84f8fe259181900360800190a16006805461ffff60e81b1916600160e81b61ffff948516021790556007805461ffff191691909216179055565b5f33610c57858285611a2f565b610c62858585611aa1565b506001949350505050565b610c756119d5565b6001600160a01b0382165f908152600d602052604090205481151560ff909116151503610cce5760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b604482015260640161095f565b6001600160a01b0382165f818152600d6020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b5f336108e6818585610d3f8383611757565b610d4991906129c3565b6118b2565b610d566119d5565b600b546001600160a01b0390811690821603610dc05760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b606482015260840161095f565b600b546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e905f90a3600b80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290515f929163c45a01559160048083019260209291908290030181865afa158015610e53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e7791906129d6565b6001600160a01b031663c9c6539630600b5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610efa91906129d6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610f44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6891906129d6565b600c80546001600160a01b0319166001600160a01b038316908117909155909150610f94906001611ef8565b5050565b610fa06119d5565b610fa95f611ff5565b565b610fb36119d5565b5f8111610ffb5760405162461bcd60e51b815260206004820152601660248201527506d696e416d6f756e74546f54616b65466565203e20360541b604482015260640161095f565b6008546040805183815260208101929092527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a1600855565b60606004805461085890612904565b6110546119d5565b610f948282611ef8565b5f338161106b8286611757565b9050838110156110cb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161095f565b610c6282868684036118b2565b5f336108e6818585611aa1565b6110ed6119d5565b5f811161113c5760405162461bcd60e51b815260206004820152601860248201527f6d61785472616e73616374696f6e416d6f756e74203e20300000000000000000604482015260640161095f565b600a546040805183815260208101929092527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1600a55565b6111866119d5565b6001600160a01b0381166111dc5760405162461bcd60e51b815260206004820152601b60248201527f6d61726b6574696e672077616c6c65742063616e277420626520300000000000604482015260640161095f565b6007546040516001600160a01b03600160301b9092048216918316907facf03c50dcf01e53e2775267d12acd0158d87c2f20fb84226837142693b36ae7905f90a3600780546601000000000000600160d01b031916600160301b6001600160a01b03939093169283021790555f908152600e60209081526040808320805460ff199081166001908117909255600d909352922080549091169091179055565b6112836119d5565b306001600160a01b038216036112db5760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207769746864726177206f776e20746f6b656e00000000000000604482015260640161095f565b5f6001600160a01b03821661133357604051339047905f81818185875af1925050503d805f8114611327576040519150601f19603f3d011682016040523d82523d5f602084013e61132c565b606091505b5050505050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611377573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139b91906129f1565b116113a4575f80fd5b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156113e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140c91906129f1565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0384169063a9059cbb906044016020604051808303815f875af1158015611459573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147d9190612a08565b50505050565b61148b6119d5565b60075460065460c89161ffff62010000909104811691600160e81b81048216916114bd91600160a81b90041686612950565b6114c79190612950565b6114d19190612950565b61ffff1611156114f35760405162461bcd60e51b815260040161095f90612972565b60075460065460c89161ffff600160201b82048116929181169161152091600160b81b9091041685612950565b61152a9190612950565b6115349190612950565b61ffff1611156115565760405162461bcd60e51b815260040161095f9061299b565b6006546040805161ffff85811682528481166020830152600160c81b8404811682840152600160d81b9093049092166060830152517f1d6b62961d401d548eb1549c97109c0b905ccd7af9c3777d3076cc8438fdfe659181900360800190a16006805463ffffffff60c81b1916600160c81b61ffff9485160261ffff60d81b191617600160d81b9290931691909102919091179055565b6115f56119d5565b60075460065460c89161ffff62010000909104811691600160e81b810482169161162791600160c81b90041686612950565b6116319190612950565b61163b9190612950565b61ffff16111561165d5760405162461bcd60e51b815260040161095f90612972565b60075460065460c89161ffff600160201b82048116929181169161168a91600160d81b9091041685612950565b6116949190612950565b61169e9190612950565b61ffff1611156116c05760405162461bcd60e51b815260040161095f9061299b565b6006546040805161ffff85811682528481166020830152600160a81b8404811682840152600160b81b9093049092166060830152517f95c5c99557725e816faf752c6675d63483841c28a7a009ed792470a9cb4dea239181900360800190a16006805463ffffffff60a81b1916600160a81b61ffff9485160261ffff60b81b191617600160b81b9290931691909102919091179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6117896119d5565b6001600160a01b0382165f908152600e602052604090205481151560ff9091161515036117e25760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b604482015260640161095f565b6001600160a01b0382165f818152600e6020908152604091829020805460ff191685151590811790915591519182527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa99101610d21565b6118416119d5565b6001600160a01b0381166118a65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095f565b6118af81611ff5565b50565b6001600160a01b0383166119145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161095f565b6001600160a01b0382166119755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161095f565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610fa95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095f565b5f611a3a8484611757565b90505f19811461147d5781811015611a945760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161095f565b61147d84848484036118b2565b6001600160a01b038316611ac75760405162461bcd60e51b815260040161095f90612a23565b6001600160a01b038216611aed5760405162461bcd60e51b815260040161095f90612a68565b305f908152602081905260409020546008546006549082101590600160a01b900460ff16158015611b355750600c546001600160a01b03165f90815260208190526040812054115b8015611b3e5750805b8015611b6157506001600160a01b0384165f908152600f602052604090205460ff165b15611b6e57611b6e612046565b5f805f80600660149054906101000a900460ff16158015611ba757506001600160a01b0389165f908152600e602052604090205460ff16155b8015611bcb57506001600160a01b0388165f908152600e602052604090205460ff16155b15611dda576001600160a01b0389165f908152600f602052604090205460ff1615611c91576006546103e890611c0c90600160b81b900461ffff1689612aab565b611c169190612ac2565b6006549094506103e890611c3590600160d81b900461ffff1689612aab565b611c3f9190612ac2565b6007549093506103e890611c579061ffff1689612aab565b611c619190612ac2565b6007549092506103e890611c8090600160201b900461ffff1689612aab565b611c8a9190612ac2565b9050611d54565b6001600160a01b0388165f908152600f602052604090205460ff1615611d54576006546103e890611ccd90600160a81b900461ffff1689612aab565b611cd79190612ac2565b6006549094506103e890611cf690600160c81b900461ffff1689612aab565b611d009190612ac2565b6006549093506103e890611d1f90600160e81b900461ffff1689612aab565b611d299190612ac2565b6007549092506103e890611d479062010000900461ffff1689612aab565b611d519190612ac2565b90505b5f8183611d6186886129c3565b611d6b91906129c3565b611d7591906129c3565b90508015611d8857611d888a30836122d9565b611d928189612ae1565b975084601054611da291906129c3565b601055601154611db39085906129c3565b601155601254611dc49084906129c3565b601255601354611dd59083906129c3565b601355505b611de58989896122d9565b600654600160a01b900460ff16611eed576001600160a01b0389165f908152600d602052604090205460ff16611e6657600a548710611e665760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d6974000000604482015260640161095f565b6001600160a01b0388165f908152600d602052604090205460ff16611eed576009546001600160a01b0389165f9081526020819052604090205410611eed5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d697400604482015260640161095f565b505050505050505050565b6001600160a01b0382165f908152600f602052604090205481151560ff909116151503611f8d5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c75650000000000000000606482015260840161095f565b6001600160a01b0382165f818152600f60209081526040808320805486151560ff199182168117909255600d84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9101610d21565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6006805460ff60a01b1916600160a01b179055305f9081526020819052604081205490505f60135460125460115460105461208191906129c3565b61208b91906129c3565b61209591906129c3565b90508015806120a357508082105b156120af5750506122ca565b60125415612106576120c63061dead6012546122d9565b7fbd49afcf40c86d69c3b856567b47aedcedc70a21991ed62a1cf25681257f50d06012546040516120f991815260200190565b60405180910390a15f6012555b5f60026010546121169190612ac2565b90505f4790505f806011548461212c91906129c3565b9050801561213d5761213d81612401565b5f6121488447612ae1565b90505f826011548361215a9190612aab565b6121649190612ac2565b90506121708183612ae1565b9350801561220e576007546040515f91600160301b90046001600160a01b03169083908381818185875af1925050503d805f81146121c9576040519150601f19603f3d011682016040523d82523d5f602084013e6121ce565b606091505b50509050801561220c576040518281527f4b6c681641ef142cf7c14791ad828c892635e88e8b4b546faa446787e00263659060200160405180910390a15b505b6013541561226157612221601354612551565b7f4217f88d7940040e1abdc46654cc1e25b2bd60548b97655526ff946fe5ebc09260135460405161225491815260200190565b60405180910390a15f6013555b5f8611801561226f57505f84115b156122b85761227e86856126a5565b60408051878152602081018690527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b50505f60118190556010555050505050505b6006805460ff60a01b19169055565b6001600160a01b0383166122ff5760405162461bcd60e51b815260040161095f90612a23565b6001600160a01b0382166123255760405162461bcd60e51b815260040161095f90612a68565b6001600160a01b0383165f908152602081905260409020548181101561239c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161095f565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361147d565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061243457612434612af4565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561248b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124af91906129d6565b816001815181106124c2576124c2612af4565b6001600160a01b039283166020918202929092010152600b546124e891309116846118b2565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac947906125209085905f90869030904290600401612b08565b5f604051808303815f87803b158015612537575f80fd5b505af1158015612549573d5f803e3d5ffd5b505050505050565b604080516003808252608082019092525f916020820160608036833701905050905030815f8151811061258657612586612af4565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125dd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061260191906129d6565b8160018151811061261457612614612af4565b6001600160a01b03928316602091820292909201015260065482519116908290600290811061264557612645612af4565b6001600160a01b039283166020918202929092010152600b5461266b91309116846118b2565b600b54604051635c11d79560e01b81526001600160a01b0390911690635c11d795906125209085905f90869061dead904290600401612b08565b600b546126bd9030906001600160a01b0316846118b2565b600b5460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612728573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061132c9190612b77565b5f6020808352835180828501525f5b818110156127785785810183015185820160400152820161275c565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146118af575f80fd5b5f80604083850312156127bd575f80fd5b82356127c881612798565b946020939093013593505050565b803561ffff811681146127e7575f80fd5b919050565b5f80604083850312156127fd575f80fd5b612806836127d6565b9150612814602084016127d6565b90509250929050565b5f6020828403121561282d575f80fd5b5035919050565b5f805f60608486031215612846575f80fd5b833561285181612798565b9250602084013561286181612798565b929592945050506040919091013590565b80151581146118af575f80fd5b5f8060408385031215612890575f80fd5b823561289b81612798565b915060208301356128ab81612872565b809150509250929050565b5f602082840312156128c6575f80fd5b81356128d181612798565b9392505050565b5f80604083850312156128e9575f80fd5b82356128f481612798565b915060208301356128ab81612798565b600181811c9082168061291857607f821691505b60208210810361293657634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b61ffff81811683821601908082111561296b5761296b61293c565b5092915050565b6020808252600f908201526e73656c6c20666565203c3d2032302560881b604082015260600190565b6020808252600e908201526d62757920666565203c3d2032302560901b604082015260600190565b808201808211156108ec576108ec61293c565b5f602082840312156129e6575f80fd5b81516128d181612798565b5f60208284031215612a01575f80fd5b5051919050565b5f60208284031215612a18575f80fd5b81516128d181612872565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176108ec576108ec61293c565b5f82612adc57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156108ec576108ec61293c565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612b565784516001600160a01b031683529383019391830191600101612b31565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612b89575f80fd5b835192506020840151915060408401519050925092509256fea264697066735822122019d2bc7759b4e507d310191a904f22834bc8407f7721878a46ab08a6c895920c64736f6c63430008140033
Deployed Bytecode Sourcemap
21028:17634:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8915:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11275:201;;;;;;;;;;-1:-1:-1;11275:201:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;11275:201:0;1023:187:1;29689:760:0;;;;;;;;;;-1:-1:-1;29689:760:0;;;;;:::i;:::-;;:::i;:::-;;10044:108;;;;;;;;;;-1:-1:-1;10132:12:0;;10044:108;;;1786:25:1;;;1774:2;1759:18;10044:108:0;1640:177:1;27219:210:0;;;;;;;;;;-1:-1:-1;27219:210:0;;;;;:::i;:::-;;:::i;29032:649::-;;;;;;;;;;-1:-1:-1;29032:649:0;;;;;:::i;:::-;;:::i;12056:261::-;;;;;;;;;;-1:-1:-1;12056:261:0;;;;;:::i;:::-;;:::i;31602:325::-;;;;;;;;;;-1:-1:-1;31602:325:0;;;;;:::i;:::-;;:::i;9886:93::-;;;;;;;;;;-1:-1:-1;9886:93:0;;9969:2;3120:36:1;;3108:2;3093:18;9886:93:0;2978:184:1;21071:19:0;;;;;;;;;;-1:-1:-1;21071:19:0;;;;-1:-1:-1;;;;;21071:19:0;;;;;;-1:-1:-1;;;;;3331:32:1;;;3313:51;;3301:2;3286:18;21071:19:0;3167:203:1;12726:238:0;;;;;;;;;;-1:-1:-1;12726:238:0;;;;;:::i;:::-;;:::i;21804:49::-;;;;;;;;;;-1:-1:-1;21804:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25655:567;;;;;;;;;;-1:-1:-1;25655:567:0;;;;;:::i;:::-;;:::i;21429:29::-;;;;;;;;;;-1:-1:-1;21429:29:0;;;;;;;;;;;;;;3801:6:1;3789:19;;;3771:38;;3759:2;3744:18;21429:29:0;3627:188:1;10215:127:0;;;;;;;;;;-1:-1:-1;10215:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10316:18:0;10289:7;10316:18;;;;;;;;;;;;10215:127;2660:103;;;;;;;;;;;;;:::i;30457:314::-;;;;;;;;;;-1:-1:-1;30457:314:0;;;;;:::i;:::-;;:::i;21502:30::-;;;;;;;;;;-1:-1:-1;21502:30:0;;;;-1:-1:-1;;;21502:30:0;;-1:-1:-1;;;;;21502:30:0;;;21326:29;;;;;;;;;;-1:-1:-1;21326:29:0;;;;-1:-1:-1;;;21326:29:0;;;;;;21699:23;;;;;;;;;;-1:-1:-1;21699:23:0;;;;-1:-1:-1;;;;;21699:23:0;;;2019:87;;;;;;;;;;-1:-1:-1;2092:6:0;;-1:-1:-1;;;;;2092:6:0;2019:87;;21289:30;;;;;;;;;;-1:-1:-1;21289:30:0;;;;-1:-1:-1;;;21289:30:0;;;;;;9134:104;;;;;;;;;;;;;:::i;30779:163::-;;;;;;;;;;-1:-1:-1;30779:163:0;;;;;:::i;:::-;;:::i;13467:436::-;;;;;;;;;;-1:-1:-1;13467:436:0;;;;;:::i;:::-;;:::i;10548:193::-;;;;;;;;;;-1:-1:-1;10548:193:0;;;;;:::i;:::-;;:::i;27437:369::-;;;;;;;;;;-1:-1:-1;27437:369:0;;;;;:::i;:::-;;:::i;28596:428::-;;;;;;;;;;-1:-1:-1;28596:428:0;;;;;:::i;:::-;;:::i;21364:25::-;;;;;;;;;;-1:-1:-1;21364:25:0;;;;-1:-1:-1;;;21364:25:0;;;;;;21860:57;;;;;;;;;;-1:-1:-1;21860:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21612:35;;;;;;;;;;;;;;;;21465:28;;;;;;;;;;-1:-1:-1;21465:28:0;;;;-1:-1:-1;;;21465:28:0;;;;;;31935:526;;;;;;;;;;-1:-1:-1;31935:526:0;;;;;:::i;:::-;;:::i;27814:774::-;;;;;;;;;;-1:-1:-1;27814:774:0;;;;;:::i;:::-;;:::i;21656:36::-;;;;;;;;;;-1:-1:-1;21656:36:0;;;;-1:-1:-1;;;;;21656:36:0;;;26437:774;;;;;;;;;;-1:-1:-1;26437:774:0;;;;;:::i;:::-;;:::i;10804:151::-;;;;;;;;;;-1:-1:-1;10804:151:0;;;;;:::i;:::-;;:::i;31360:234::-;;;;;;;;;;-1:-1:-1;31360:234:0;;;;;:::i;:::-;;:::i;21396:24::-;;;;;;;;;;-1:-1:-1;21396:24:0;;;;;;;;21731:66;;;;;;;;;;-1:-1:-1;21731:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21251:29;;;;;;;;;;-1:-1:-1;21251:29:0;;;;-1:-1:-1;;;21251:29:0;;;;;;2918:201;;;;;;;;;;-1:-1:-1;2918:201:0;;;;;:::i;:::-;;:::i;21214:30::-;;;;;;;;;;-1:-1:-1;21214:30:0;;;;-1:-1:-1;;;21214:30:0;;;;;;21581:24;;;;;;;;;;;;;;;;21541:33;;;;;;;;;;;;;;;;8915:100;8969:13;9002:5;8995:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8915:100;:::o;11275:201::-;11358:4;736:10;11414:32;736:10;11430:7;11439:6;11414:8;:32::i;:::-;11464:4;11457:11;;;11275:201;;;;;:::o;29689:760::-;1905:13;:11;:13::i;:::-;29943:16:::1;::::0;29980:3:::1;::::0;29943:16:::1;-1:-1:-1::0;;;29943:16:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;29912:11:0;::::1;::::0;::::1;::::0;29840:52:::1;::::0;-1:-1:-1;;;29876:16:0;::::1;;29840::::0;:52:::1;:::i;:::-;:83;;;;:::i;:::-;:119;;;;:::i;:::-;:143;;;;29818:208;;;;-1:-1:-1::0;;;29818:208:0::1;;;;;;;:::i;:::-;;;;;;;;;30108:15;::::0;30095:10:::1;::::0;30144:3:::1;::::0;30108:15:::1;-1:-1:-1::0;;;30108:15:0;::::1;::::0;::::1;::::0;30095:10;::::1;::::0;30059:33:::1;::::0;-1:-1:-1;;;30077:15:0;;::::1;;30059::::0;:33:::1;:::i;:::-;:46;;;;:::i;:::-;:64;;;;:::i;:::-;:88;;;;30037:152;;;;-1:-1:-1::0;;;30037:152:0::1;;;;;;;:::i;:::-;30298:15;::::0;30205:148:::1;::::0;;30298:15:::1;6090::1::0;;;6072:34;;6142:15;;;6137:2;6122:18;;6115:43;30298:15:0;;::::1;::::0;::::1;6174:18:1::0;;;6167:43;-1:-1:-1;;;30328:14:0;;::::1;::::0;;::::1;6241:2:1::0;6226:18;;6219:43;30205:148:0;::::1;::::0;;;;6034:3:1;30205:148:0;;::::1;30364:15;:34:::0;;-1:-1:-1;;30409:32:0;30364:34;::::1;::::0;;::::1;;-1:-1:-1::0;;30409:32:0;;-1:-1:-1;;;30409:32:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;29689:760::o;27219:210::-;1905:13;:11;:13::i;:::-;27315:1:::1;27302:10;:14;27294:40;;;::::0;-1:-1:-1;;;27294:40:0;;6475:2:1;27294:40:0::1;::::0;::::1;6457:21:1::0;6514:2;6494:18;;;6487:30;-1:-1:-1;;;6533:18:1;;;6526:43;6586:18;;27294:40:0::1;6273:337:1::0;27294:40:0::1;27378:9;::::0;27350:38:::1;::::0;;6789:25:1;;;6845:2;6830:18;;6823:34;;;;27350:38:0::1;::::0;6762:18:1;27350:38:0::1;;;;;;;27399:9;:22:::0;27219:210::o;29032:649::-;1905:13;:11;:13::i;:::-;29275:15:::1;::::0;29239:16:::1;::::0;29311:3:::1;::::0;29275:15:::1;::::0;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;29239:16:0;::::1;::::0;::::1;::::0;29171:48:::1;::::0;-1:-1:-1;;;29203:16:0;::::1;;29171:12:::0;:48:::1;:::i;:::-;:84;;;;:::i;:::-;:119;;;;:::i;:::-;:143;;;;29149:208;;;;-1:-1:-1::0;;;29149:208:0::1;;;;;;;:::i;:::-;29440:14;::::0;29422:15:::1;::::0;29475:3:::1;::::0;29440:14:::1;-1:-1:-1::0;;;29440:14:0;;::::1;::::0;::::1;::::0;-1:-1:-1;;;29422:15:0;::::1;::::0;::::1;::::0;29390:29:::1;::::0;-1:-1:-1;;;29404:15:0;::::1;;29390:11:::0;:29:::1;:::i;:::-;:47;;;;:::i;:::-;:64;;;;:::i;:::-;:88;;;;29368:152;;;;-1:-1:-1::0;;;29368:152:0::1;;;;;;;:::i;:::-;29577:11;::::0;29590:10:::1;::::0;29536:65:::1;::::0;;29577:11:::1;6090:15:1::0;;;6072:34;;6142:15;;;6137:2;6122:18;;6115:43;-1:-1:-1;;;29577:11:0;;::::1;::::0;::::1;6174:18:1::0;;;6167:43;29590:10:0;;;::::1;6241:2:1::0;6226:18;;6219:43;29536:65:0;::::1;::::0;;;;6034:3:1;29536:65:0;;::::1;29612:11;:26:::0;;-1:-1:-1;;;;29612:26:0::1;-1:-1:-1::0;;;29612:26:0::1;::::0;;::::1;;;::::0;;29649:10:::1;:24:::0;;-1:-1:-1;;29649:24:0::1;::::0;;;::::1;;::::0;;29032:649::o;12056:261::-;12153:4;736:10;12211:38;12227:4;736:10;12242:6;12211:15;:38::i;:::-;12260:27;12270:4;12276:2;12280:6;12260:9;:27::i;:::-;-1:-1:-1;12305:4:0;;12056:261;-1:-1:-1;;;;12056:261:0:o;31602:325::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;31732:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:51;::::1;;:43;::::0;;::::1;:51;;::::0;31724:71:::1;;;::::0;-1:-1:-1;;;31724:71:0;;7070:2:1;31724:71:0::1;::::0;::::1;7052:21:1::0;7109:1;7089:18;;;7082:29;-1:-1:-1;;;7127:18:1;;;7120:37;7174:18;;31724:71:0::1;6868:330:1::0;31724:71:0::1;-1:-1:-1::0;;;;;31806:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:50;;-1:-1:-1;;31806:50:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31872:47;;1163:41:1;;;31872:47:0::1;::::0;1136:18:1;31872:47:0::1;;;;;;;;31602:325:::0;;:::o;12726:238::-;12814:4;736:10;12870:64;736:10;12886:7;12923:10;12895:25;736:10;12886:7;12895:9;:25::i;:::-;:38;;;;:::i;:::-;12870:8;:64::i;25655:567::-;1905:13;:11;:13::i;:::-;25778:10:::1;::::0;-1:-1:-1;;;;;25778:10:0;;::::1;25756:33:::0;;::::1;::::0;25734:118:::1;;;::::0;-1:-1:-1;;;25734:118:0;;7535:2:1;25734:118:0::1;::::0;::::1;7517:21:1::0;7574:2;7554:18;;;7547:30;7613:34;7593:18;;;7586:62;-1:-1:-1;;;7664:18:1;;;7657:33;7707:19;;25734:118:0::1;7333:399:1::0;25734:118:0::1;25910:10;::::0;25868:54:::1;::::0;-1:-1:-1;;;;;25910:10:0;;::::1;::::0;25868:54;::::1;::::0;::::1;::::0;25910:10:::1;::::0;25868:54:::1;25933:10;:43:::0;;-1:-1:-1;;;;;;25933:43:0::1;-1:-1:-1::0;;;;;25933:43:0;::::1;::::0;;::::1;::::0;;;26025:20:::1;::::0;;-1:-1:-1;;;26025:20:0;;;;-1:-1:-1;;25933:43:0;26025:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;25933:43;26025:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26007:50:0::1;;26080:4;26100:10;;;;;;;;;-1:-1:-1::0;;;;;26100:10:0::1;-1:-1:-1::0;;;;;26100:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26007:121;::::0;-1:-1:-1;;;;;;26007:121:0::1;::::0;;;;;;-1:-1:-1;;;;;8223:15:1;;;26007:121:0::1;::::0;::::1;8205:34:1::0;8275:15;;8255:18;;;8248:43;8140:18;;26007:121:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26139:8;:20:::0;;-1:-1:-1;;;;;;26139:20:0::1;-1:-1:-1::0;;;;;26139:20:0;::::1;::::0;;::::1;::::0;;;;;-1:-1:-1;26170:44:0::1;::::0;-1:-1:-1;26170:28:0::1;:44::i;:::-;25723:499;25655:567:::0;:::o;2660:103::-;1905:13;:11;:13::i;:::-;2725:30:::1;2752:1;2725:18;:30::i;:::-;2660:103::o:0;30457:314::-;1905:13;:11;:13::i;:::-;30603:1:::1;30581:19;:23;30573:58;;;::::0;-1:-1:-1;;;30573:58:0;;8504:2:1;30573:58:0::1;::::0;::::1;8486:21:1::0;8543:2;8523:18;;;8516:30;-1:-1:-1;;;8562:18:1;;;8555:52;8624:18;;30573:58:0::1;8302:346:1::0;30573:58:0::1;30693:18;::::0;30647:65:::1;::::0;;6789:25:1;;;6845:2;6830:18;;6823:34;;;;30647:65:0::1;::::0;6762:18:1;30647:65:0::1;;;;;;;30723:18;:40:::0;30457:314::o;9134:104::-;9190:13;9223:7;9216:14;;;;;:::i;30779:163::-;1905:13;:11;:13::i;:::-;30893:41:::1;30922:4;30928:5;30893:28;:41::i;13467:436::-:0;13560:4;736:10;13560:4;13643:25;736:10;13660:7;13643:9;:25::i;:::-;13616:52;;13707:15;13687:16;:35;;13679:85;;;;-1:-1:-1;;;13679:85:0;;8855:2:1;13679:85:0;;;8837:21:1;8894:2;8874:18;;;8867:30;8933:34;8913:18;;;8906:62;-1:-1:-1;;;8984:18:1;;;8977:35;9029:19;;13679:85:0;8653:401:1;13679:85:0;13800:60;13809:5;13816:7;13844:15;13825:16;:34;13800:8;:60::i;10548:193::-;10627:4;736:10;10683:28;736:10;10700:2;10704:6;10683:9;:28::i;27437:369::-;1905:13;:11;:13::i;:::-;27589:1:::1;27565:21;:25;27557:62;;;::::0;-1:-1:-1;;;27557:62:0;;9261:2:1;27557:62:0::1;::::0;::::1;9243:21:1::0;9300:2;9280:18;;;9273:30;9339:26;9319:18;;;9312:54;9383:18;;27557:62:0::1;9059:348:1::0;27557:62:0::1;27712:20;::::0;27635:108:::1;::::0;;6789:25:1;;;6845:2;6830:18;;6823:34;;;;27635:108:0::1;::::0;6762:18:1;27635:108:0::1;;;;;;;27754:20;:44:::0;27437:369::o;28596:428::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;28714:30:0;::::1;28706:70;;;::::0;-1:-1:-1;;;28706:70:0;;9614:2:1;28706:70:0::1;::::0;::::1;9596:21:1::0;9653:2;9633:18;;;9626:30;9692:29;9672:18;;;9665:57;9739:18;;28706:70:0::1;9412:351:1::0;28706:70:0::1;28832:15;::::0;28792:56:::1;::::0;-1:-1:-1;;;;;;;;28832:15:0;;::::1;::::0;::::1;::::0;28792:56;::::1;::::0;::::1;::::0;;;::::1;28859:15;:34:::0;;-1:-1:-1;;;;;;28859:34:0::1;-1:-1:-1::0;;;;;;;;28859:34:0;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;28904:35:0;;;:17:::1;:35;::::0;;;;;;;:42;;-1:-1:-1;;28904:42:0;;::::1;-1:-1:-1::0;28904:42:0;;::::1;::::0;;;28957:34:::1;:52:::0;;;;;:59;;;;::::1;::::0;;::::1;::::0;;28596:428::o;31935:526::-;1905:13;:11;:13::i;:::-;32030:4:::1;-1:-1:-1::0;;;;;32015:20:0;::::1;::::0;32007:58:::1;;;::::0;-1:-1:-1;;;32007:58:0;;9970:2:1;32007:58:0::1;::::0;::::1;9952:21:1::0;10009:2;9989:18;;;9982:30;10048:27;10028:18;;;10021:55;10093:18;;32007:58:0::1;9768:349:1::0;32007:58:0::1;32076:12;-1:-1:-1::0;;;;;32103:17:0;::::1;32099:355;;32149:90;::::0;32157:10:::1;::::0;32199:21:::1;::::0;32149:90:::1;::::0;;;32199:21;32157:10;32149:90:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;25655:567:0:o;32099:355::-:1;32278:36;::::0;-1:-1:-1;;;32278:36:0;;32308:4:::1;32278:36;::::0;::::1;3313:51:1::0;32317:1:0::1;::::0;-1:-1:-1;;;;;32278:21:0;::::1;::::0;::::1;::::0;3286:18:1;;32278:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;32270:49;;;::::0;::::1;;32351:36;::::0;-1:-1:-1;;;32351:36:0;;32381:4:::1;32351:36;::::0;::::1;3313:51:1::0;32334:14:0::1;::::0;-1:-1:-1;;;;;32351:21:0;::::1;::::0;::::1;::::0;3286:18:1;;32351:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32402:40;::::0;-1:-1:-1;;;32402:40:0;;32423:10:::1;32402:40;::::0;::::1;10695:51:1::0;10762:18;;;10755:34;;;32334:53:0;;-1:-1:-1;;;;;;32402:20:0;::::1;::::0;::::1;::::0;10668:18:1;;32402:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32255:199;31996:465;31935:526:::0;:::o;27814:774::-;1905:13;:11;:13::i;:::-;28074:15:::1;::::0;28043:11:::1;::::0;28110:3:::1;::::0;28074:15:::1;::::0;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;28043:11:0;::::1;::::0;::::1;::::0;27970:53:::1;::::0;-1:-1:-1;;;28007:16:0;::::1;;27970:17:::0;:53:::1;:::i;:::-;:84;;;;:::i;:::-;:119;;;;:::i;:::-;:143;;;;27948:208;;;;-1:-1:-1::0;;;27948:208:0::1;;;;;;;:::i;:::-;28239:14;::::0;28208:15:::1;::::0;28274:3:::1;::::0;28239:14:::1;-1:-1:-1::0;;;28239:14:0;::::1;::::0;::::1;::::0;28226:10;;::::1;::::0;28189:34:::1;::::0;-1:-1:-1;;;28208:15:0;;::::1;;28189:16:::0;:34:::1;:::i;:::-;:47;;;;:::i;:::-;:64;;;;:::i;:::-;:88;;;;28167:152;;;;-1:-1:-1::0;;;28167:152:0::1;;;;;;;:::i;:::-;28431:16;::::0;28335:153:::1;::::0;;28431:16:::1;6090:15:1::0;;;6072:34;;6142:15;;;6137:2;6122:18;;6115:43;-1:-1:-1;;;28431:16:0;::::1;::::0;::::1;6174:18:1::0;;;6167:43;-1:-1:-1;;;28462:15:0;;::::1;::::0;;::::1;6241:2:1::0;6226:18;;6219:43;28335:153:0;::::1;::::0;;;;6034:3:1;28335:153:0;;::::1;28499:16;:36:::0;;-1:-1:-1;;;;28546:34:0;-1:-1:-1;;;28499:36:0::1;::::0;;::::1;;-1:-1:-1::0;;;;28546:34:0;;-1:-1:-1;;;28546:34:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;27814:774::o;26437:::-;1905:13;:11;:13::i;:::-;26697:15:::1;::::0;26666:11:::1;::::0;26733:3:::1;::::0;26697:15:::1;::::0;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;26666:11:0;::::1;::::0;::::1;::::0;26593:53:::1;::::0;-1:-1:-1;;;26630:16:0;::::1;;26593:17:::0;:53:::1;:::i;:::-;:84;;;;:::i;:::-;:119;;;;:::i;:::-;:143;;;;26571:208;;;;-1:-1:-1::0;;;26571:208:0::1;;;;;;;:::i;:::-;26862:14;::::0;26831:15:::1;::::0;26897:3:::1;::::0;26862:14:::1;-1:-1:-1::0;;;26862:14:0;::::1;::::0;::::1;::::0;26849:10;;::::1;::::0;26812:34:::1;::::0;-1:-1:-1;;;26831:15:0;;::::1;;26812:16:::0;:34:::1;:::i;:::-;:47;;;;:::i;:::-;:64;;;;:::i;:::-;:88;;;;26790:152;;;;-1:-1:-1::0;;;26790:152:0::1;;;;;;;:::i;:::-;27054:16;::::0;26958:153:::1;::::0;;27054:16:::1;6090:15:1::0;;;6072:34;;6142:15;;;6137:2;6122:18;;6115:43;-1:-1:-1;;;27054:16:0;::::1;::::0;::::1;6174:18:1::0;;;6167:43;-1:-1:-1;;;27085:15:0;;::::1;::::0;;::::1;6241:2:1::0;6226:18;;6219:43;26958:153:0;::::1;::::0;;;;6034:3:1;26958:153:0;;::::1;27122:16;:36:::0;;-1:-1:-1;;;;27169:34:0;-1:-1:-1;;;27122:36:0::1;::::0;;::::1;;-1:-1:-1::0;;;;27169:34:0;;-1:-1:-1;;;27169:34:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;26437:774::o;10804:151::-;-1:-1:-1;;;;;10920:18:0;;;10893:7;10920:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10804:151::o;31360:234::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;31450:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;:34;::::1;;:26;::::0;;::::1;:34;;::::0;31442:54:::1;;;::::0;-1:-1:-1;;;31442:54:0;;7070:2:1;31442:54:0::1;::::0;::::1;7052:21:1::0;7109:1;7089:18;;;7082:29;-1:-1:-1;;;7127:18:1;;;7120:37;7174:18;;31442:54:0::1;6868:330:1::0;31442:54:0::1;-1:-1:-1::0;;;;;31507:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:33;;-1:-1:-1;;31507:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31556:30;;1163:41:1;;;31556:30:0::1;::::0;1136:18:1;31556:30:0::1;1023:187:1::0;2918:201:0;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;3007:22:0;::::1;2999:73;;;::::0;-1:-1:-1;;;2999:73:0;;11252:2:1;2999:73:0::1;::::0;::::1;11234:21:1::0;11291:2;11271:18;;;11264:30;11330:34;11310:18;;;11303:62;-1:-1:-1;;;11381:18:1;;;11374:36;11427:19;;2999:73:0::1;11050:402:1::0;2999:73:0::1;3083:28;3102:8;3083:18;:28::i;:::-;2918:201:::0;:::o;17460:346::-;-1:-1:-1;;;;;17562:19:0;;17554:68;;;;-1:-1:-1;;;17554:68:0;;11659:2:1;17554:68:0;;;11641:21:1;11698:2;11678:18;;;11671:30;11737:34;11717:18;;;11710:62;-1:-1:-1;;;11788:18:1;;;11781:34;11832:19;;17554:68:0;11457:400:1;17554:68:0;-1:-1:-1;;;;;17641:21:0;;17633:68;;;;-1:-1:-1;;;17633:68:0;;12064:2:1;17633:68:0;;;12046:21:1;12103:2;12083:18;;;12076:30;12142:34;12122:18;;;12115:62;-1:-1:-1;;;12193:18:1;;;12186:32;12235:19;;17633:68:0;11862:398:1;17633:68:0;-1:-1:-1;;;;;17714:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17766:32;;1786:25:1;;;17766:32:0;;1759:18:1;17766:32:0;;;;;;;17460:346;;;:::o;2184:132::-;2092:6;;-1:-1:-1;;;;;2092:6:0;736:10;2248:23;2240:68;;;;-1:-1:-1;;;2240:68:0;;12467:2:1;2240:68:0;;;12449:21:1;;;12486:18;;;12479:30;12545:34;12525:18;;;12518:62;12597:18;;2240:68:0;12265:356:1;18097:419:0;18198:24;18225:25;18235:5;18242:7;18225:9;:25::i;:::-;18198:52;;-1:-1:-1;;18265:16:0;:37;18261:248;;18347:6;18327:16;:26;;18319:68;;;;-1:-1:-1;;;18319:68:0;;12828:2:1;18319:68:0;;;12810:21:1;12867:2;12847:18;;;12840:30;12906:31;12886:18;;;12879:59;12955:18;;18319:68:0;12626:353:1;18319:68:0;18431:51;18440:5;18447:7;18475:6;18456:16;:25;18431:8;:51::i;32469:2832::-;-1:-1:-1;;;;;32601:18:0;;32593:68;;;;-1:-1:-1;;;32593:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32680:16:0;;32672:64;;;;-1:-1:-1;;;32672:64:0;;;;;;;:::i;:::-;32796:4;32747:28;10316:18;;;;;;;;;;;32881;;32952:16;;32844:55;;;;;-1:-1:-1;;;32952:16:0;;;;32951:17;:57;;;;-1:-1:-1;32995:8:0;;-1:-1:-1;;;;;32995:8:0;33007:1;10316:18;;;;;;;;;;;32985:23;32951:57;:97;;;;;33025:23;32951:97;:143;;;;-1:-1:-1;;;;;;33065:29:0;;;;;;:25;:29;;;;;;;;32951:143;32933:209;;;33121:9;:7;:9::i;:::-;33154:21;33186;33218:16;33245:20;33381:16;;;;;;;;;;;33380:17;:58;;;;-1:-1:-1;;;;;;33415:23:0;;;;;;:17;:23;;;;;;;;33414:24;33380:58;:97;;;;-1:-1:-1;;;;;;33456:21:0;;;;;;:17;:21;;;;;;;;33455:22;33380:97;33362:1391;;;-1:-1:-1;;;;;33528:31:0;;;;;;:25;:31;;;;;;;;33524:684;;;33607:15;;33627:4;;33597:26;;-1:-1:-1;;;33607:15:0;;;;33597:6;:26;:::i;:::-;33596:35;;;;:::i;:::-;33677:15;;33580:51;;-1:-1:-1;33697:4:0;;33667:26;;-1:-1:-1;;;33677:15:0;;;;33667:6;:26;:::i;:::-;33666:35;;;;:::i;:::-;33742:10;;33650:51;;-1:-1:-1;33757:4:0;;33732:21;;33742:10;;33732:6;:21;:::i;:::-;33731:30;;;;:::i;:::-;33806:14;;33720:41;;-1:-1:-1;33825:4:0;;33796:25;;-1:-1:-1;;;33806:14:0;;;;33796:6;:25;:::i;:::-;33795:34;;;;:::i;:::-;33780:49;;33524:684;;;-1:-1:-1;;;;;33889:29:0;;;;;;:25;:29;;;;;;;;33885:323;;;33966:16;;33987:4;;33956:27;;-1:-1:-1;;;33966:16:0;;;;33956:6;:27;:::i;:::-;33955:36;;;;:::i;:::-;34037:16;;33939:52;;-1:-1:-1;34058:4:0;;34027:27;;-1:-1:-1;;;34037:16:0;;;;34027:6;:27;:::i;:::-;34026:36;;;;:::i;:::-;34103:11;;34010:52;;-1:-1:-1;34119:4:0;;34093:22;;-1:-1:-1;;;34103:11:0;;;;34093:6;:22;:::i;:::-;34092:31;;;;:::i;:::-;34168:15;;34081:42;;-1:-1:-1;34188:4:0;;34158:26;;34168:15;;;;;34158:6;:26;:::i;:::-;34157:35;;;;:::i;:::-;34142:50;;33885:323;34222:17;34336:12;34308:8;34242:46;34275:13;34242;:46;:::i;:::-;:74;;;;:::i;:::-;:106;;;;:::i;:::-;34222:126;-1:-1:-1;34367:13:0;;34363:66;;34382:47;34398:4;34412;34419:9;34382:15;:47::i;:::-;34453:18;34462:9;34453:6;:18;:::i;:::-;34444:27;;34530:13;34508:19;;:35;;;;:::i;:::-;34486:19;:57;34580:19;;:35;;34602:13;;34580:35;:::i;:::-;34558:19;:57;34647:14;;:25;;34664:8;;34647:25;:::i;:::-;34630:14;:42;34708:18;;:33;;34729:12;;34708:33;:::i;:::-;34687:18;:54;-1:-1:-1;33362:1391:0;34763:33;34779:4;34785:2;34789:6;34763:15;:33::i;:::-;34812:16;;-1:-1:-1;;;34812:16:0;;;;34807:487;;-1:-1:-1;;;;;34850:40:0;;;;;;:34;:40;;;;;;;;34845:214;;34950:20;;34941:6;:29;34911:132;;;;-1:-1:-1;;;34911:132:0;;14524:2:1;34911:132:0;;;14506:21:1;14563:2;14543:18;;;14536:30;14602:31;14582:18;;;14575:59;14651:18;;34911:132:0;14322:353:1;34911:132:0;-1:-1:-1;;;;;35078:38:0;;;;;;:34;:38;;;;;;;;35073:210;;35183:9;;-1:-1:-1;;;;;10316:18:0;;10289:7;10316:18;;;;;;;;;;;35167:25;35137:130;;;;-1:-1:-1;;;35137:130:0;;14882:2:1;35137:130:0;;;14864:21:1;14921:2;14901:18;;;14894:30;14960:33;14940:18;;;14933:61;15011:18;;35137:130:0;14680:355:1;35137:130:0;32582:2719;;;;;;32469:2832;;;:::o;30950:402::-;-1:-1:-1;;;;;31055:31:0;;;;;;:25;:31;;;;;;:40;;;:31;;;;:40;;;31033:146;;;;-1:-1:-1;;;31033:146:0;;15242:2:1;31033:146:0;;;15224:21:1;15281:2;15261:18;;;15254:30;15320:34;15300:18;;;15293:62;15391:26;15371:18;;;15364:54;15435:19;;31033:146:0;15040:420:1;31033:146:0;-1:-1:-1;;;;;31190:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;-1:-1:-1;;31190:39:0;;;;;;;;31240:34;:40;;;;;;:48;;;;;;;;;;31304:40;1163:41:1;;;31304:40:0;;1136:18:1;31304:40:0;1023:187:1;3279:191:0;3372:6;;;-1:-1:-1;;;;;3389:17:0;;;-1:-1:-1;;;;;;3389:17:0;;;;;;;3422:40;;3372:6;;;3389:17;3372:6;;3422:40;;3353:16;;3422:40;3342:128;3279:191;:::o;35309:1892::-;26351:16;:23;;-1:-1:-1;;;;26351:23:0;-1:-1:-1;;;26351:23:0;;;35403:4:::1;-1:-1:-1::0;10316:18:0;;;;;;;;;;;35359:50:::1;;35420:24;35547:18;;35517:14;;35482:19;;35447;;:54;;;;:::i;:::-;:84;;;;:::i;:::-;:118;;;;:::i;:::-;35420:145:::0;-1:-1:-1;35580:21:0;;;:59:::1;;;35623:16;35605:15;:34;35580:59;35576:98;;;35656:7;;;;35576:98;35688:14;::::0;:18;35684:196:::1;;35723:63;35747:4;35762:6;35771:14;;35723:15;:63::i;:::-;35806:29;35820:14;;35806:29;;;;1786:25:1::0;;1774:2;1759:18;;1640:177;35806:29:0::1;;;;;;;;35867:1;35850:14;:18:::0;35684:196:::1;35939:26;35990:1;35968:19;;:23;;;;:::i;:::-;35939:52;;36002:25;36030:21;36002:49;;36062:23;36096:21:::0;36141:19:::1;;36120:18;:40;;;;:::i;:::-;36096:64:::0;-1:-1:-1;36175:17:0;;36171:54:::1;;36194:31;36211:13;36194:16;:31::i;:::-;36236:18;36257:41;36281:17:::0;36257:21:::1;:41;:::i;:::-;36236:62;;36309:23;36385:13;36349:19;;36336:10;:32;;;;:::i;:::-;36335:63;;;;:::i;:::-;36309:89:::0;-1:-1:-1;36427:28:0::1;36309:89:::0;36427:10;:28:::1;:::i;:::-;36409:46:::0;-1:-1:-1;36470:19:0;;36466:261:::1;;36533:15;::::0;36525:89:::1;::::0;36507:12:::1;::::0;-1:-1:-1;;;36533:15:0;::::1;-1:-1:-1::0;;;;;36533:15:0::1;::::0;36580;;36507:12;36525:89;36507:12;36525:89;36580:15;36533;36525:89:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36506:108;;;36633:7;36629:87;;;36666:34;::::0;1786:25:1;;;36666:34:0::1;::::0;1774:2:1;1759:18;36666:34:0::1;;;;;;;36629:87;36491:236;36466:261;36741:18;::::0;:22;36737:179:::1;;36780:38;36799:18;;36780;:38::i;:::-;36838:29;36848:18;;36838:29;;;;1786:25:1::0;;1774:2;1759:18;;1640:177;36838:29:0::1;;;;;;;;36903:1;36882:18;:22:::0;36737:179:::1;36953:1;36932:18;:22;:45;;;;;36976:1;36958:15;:19;36932:45;36928:198;;;36994:49;37007:18;37027:15;36994:12;:49::i;:::-;37063:51;::::0;;6789:25:1;;;6845:2;6830:18;;6823:34;;;37063:51:0::1;::::0;6762:18:1;37063:51:0::1;;;;;;;36928:198;-1:-1:-1::0;;37158:1:0::1;37136:19;:23:::0;;;37170:19:::1;:23:::0;-1:-1:-1;;;;;;26385:1:0::1;26397:16:::0;:24;;-1:-1:-1;;;;26397:24:0;;;35309:1892::o;14373:806::-;-1:-1:-1;;;;;14470:18:0;;14462:68;;;;-1:-1:-1;;;14462:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14549:16:0;;14541:64;;;;-1:-1:-1;;;14541:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14691:15:0;;14669:19;14691:15;;;;;;;;;;;14725:21;;;;14717:72;;;;-1:-1:-1;;;14717:72:0;;15667:2:1;14717:72:0;;;15649:21:1;15706:2;15686:18;;;15679:30;15745:34;15725:18;;;15718:62;-1:-1:-1;;;15796:18:1;;;15789:36;15842:19;;14717:72:0;15465:402:1;14717:72:0;-1:-1:-1;;;;;14825:15:0;;;:9;:15;;;;;;;;;;;14843:20;;;14825:38;;15043:13;;;;;;;;;;:23;;;;;;15095:26;;1786:25:1;;;15043:13:0;;15095:26;;1759:18:1;15095:26:0;;;;;;;15134:37;19116:91;37209:484;37299:16;;;37313:1;37299:16;;;;;;;;37275:21;;37299:16;;;;;;;;;;-1:-1:-1;37299:16:0;37275:40;;37344:4;37326;37331:1;37326:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37326:23:0;;;:7;;;;;;;;;;:23;;;;37370:10;;:17;;;-1:-1:-1;;;37370:17:0;;;;:10;;;;;:15;;:17;;;;;37326:7;;37370:17;;;;;:10;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37360:4;37365:1;37360:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37360:27:0;;;:7;;;;;;;;;:27;37430:10;;37398:57;;37415:4;;37430:10;37443:11;37398:8;:57::i;:::-;37466:10;;:219;;-1:-1:-1;;;37466:219:0;;-1:-1:-1;;;;;37466:10:0;;;;:61;;:219;;37542:11;;37466:10;;37612:4;;37639;;37659:15;;37466:219;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37264:429;37209:484;:::o;38121:501::-;38208:16;;;38222:1;38208:16;;;;;;;;;38184:21;;38208:16;;;;;;;;;;-1:-1:-1;38208:16:0;38184:40;;38253:4;38235;38240:1;38235:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38235:23:0;;;:7;;;;;;;;;;:23;;;;38279:10;;:17;;;-1:-1:-1;;;38279:17:0;;;;:10;;;;;:15;;:17;;;;;38235:7;;38279:17;;;;;:10;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38269:4;38274:1;38269:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38269:27:0;;;:7;;;;;;;;;:27;38317:4;;38307:7;;38317:4;;;38307;;38312:1;;38307:7;;;;;;:::i;:::-;-1:-1:-1;;;;;38307:14:0;;;:7;;;;;;;;;:14;38364:10;;38332:52;;38349:4;;38364:10;38377:6;38332:8;:52::i;:::-;38395:10;;:219;;-1:-1:-1;;;38395:219:0;;-1:-1:-1;;;;;38395:10:0;;;;:64;;:219;;38474:6;;38395:10;;38539:4;;38566:6;;38588:15;;38395:219;;;:::i;37701:412::-;37814:10;;37782:57;;37799:4;;-1:-1:-1;;;;;37814:10:0;37827:11;37782:8;:57::i;:::-;37850:10;;:255;;-1:-1:-1;;;37850:255:0;;37917:4;37850:255;;;17462:34:1;17512:18;;;17505:34;;;37850:10:0;17555:18:1;;;17548:34;;;17598:18;;;17591:34;38057:6:0;17641:19:1;;;17634:44;38079:15:0;17694:19:1;;;17687:35;-1:-1:-1;;;;;37850:10:0;;;;:26;;37884:9;;17396:19:1;;37850:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;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:159::-;1282:20;;1342:6;1331:18;;1321:29;;1311:57;;1364:1;1361;1354:12;1311:57;1215:159;;;:::o;1379:256::-;1445:6;1453;1506:2;1494:9;1485:7;1481:23;1477:32;1474:52;;;1522:1;1519;1512:12;1474:52;1545:28;1563:9;1545:28;:::i;:::-;1535:38;;1592:37;1625:2;1614:9;1610:18;1592:37;:::i;:::-;1582:47;;1379:256;;;;;:::o;1822:180::-;1881:6;1934:2;1922:9;1913:7;1909:23;1905:32;1902:52;;;1950:1;1947;1940:12;1902:52;-1:-1:-1;1973:23:1;;1822:180;-1:-1:-1;1822:180:1:o;2007:456::-;2084:6;2092;2100;2153:2;2141:9;2132:7;2128:23;2124:32;2121:52;;;2169:1;2166;2159:12;2121:52;2208:9;2195:23;2227:31;2252:5;2227:31;:::i;:::-;2277:5;-1:-1:-1;2334:2:1;2319:18;;2306:32;2347:33;2306:32;2347:33;:::i;:::-;2007:456;;2399:7;;-1:-1:-1;;;2453:2:1;2438:18;;;;2425:32;;2007:456::o;2468:118::-;2554:5;2547:13;2540:21;2533:5;2530:32;2520:60;;2576:1;2573;2566:12;2591:382;2656:6;2664;2717:2;2705:9;2696:7;2692:23;2688:32;2685:52;;;2733:1;2730;2723:12;2685:52;2772:9;2759:23;2791:31;2816:5;2791:31;:::i;:::-;2841:5;-1:-1:-1;2898:2:1;2883:18;;2870:32;2911:30;2870:32;2911:30;:::i;:::-;2960:7;2950:17;;;2591:382;;;;;:::o;3375:247::-;3434:6;3487:2;3475:9;3466:7;3462:23;3458:32;3455:52;;;3503:1;3500;3493:12;3455:52;3542:9;3529:23;3561:31;3586:5;3561:31;:::i;:::-;3611:5;3375:247;-1:-1:-1;;;3375:247:1:o;4054:388::-;4122:6;4130;4183:2;4171:9;4162:7;4158:23;4154:32;4151:52;;;4199:1;4196;4189:12;4151:52;4238:9;4225:23;4257:31;4282:5;4257:31;:::i;:::-;4307:5;-1:-1:-1;4364:2:1;4349:18;;4336:32;4377:33;4336:32;4377:33;:::i;4447:380::-;4526:1;4522:12;;;;4569;;;4590:61;;4644:4;4636:6;4632:17;4622:27;;4590:61;4697:2;4689:6;4686:14;4666:18;4663:38;4660:161;;4743:10;4738:3;4734:20;4731:1;4724:31;4778:4;4775:1;4768:15;4806:4;4803:1;4796:15;4660:161;;4447:380;;;:::o;4832:127::-;4893:10;4888:3;4884:20;4881:1;4874:31;4924:4;4921:1;4914:15;4948:4;4945:1;4938:15;4964:168;5031:6;5057:10;;;5069;;;5053:27;;5092:11;;;5089:37;;;5106:18;;:::i;:::-;5089:37;4964:168;;;;:::o;5137:339::-;5339:2;5321:21;;;5378:2;5358:18;;;5351:30;-1:-1:-1;;;5412:2:1;5397:18;;5390:45;5467:2;5452:18;;5137:339::o;5481:338::-;5683:2;5665:21;;;5722:2;5702:18;;;5695:30;-1:-1:-1;;;5756:2:1;5741:18;;5734:44;5810:2;5795:18;;5481:338::o;7203:125::-;7268:9;;;7289:10;;;7286:36;;;7302:18;;:::i;7737:251::-;7807:6;7860:2;7848:9;7839:7;7835:23;7831:32;7828:52;;;7876:1;7873;7866:12;7828:52;7908:9;7902:16;7927:31;7952:5;7927:31;:::i;10332:184::-;10402:6;10455:2;10443:9;10434:7;10430:23;10426:32;10423:52;;;10471:1;10468;10461:12;10423:52;-1:-1:-1;10494:16:1;;10332:184;-1:-1:-1;10332:184:1:o;10800:245::-;10867:6;10920:2;10908:9;10899:7;10895:23;10891:32;10888:52;;;10936:1;10933;10926:12;10888:52;10968:9;10962:16;10987:28;11009:5;10987:28;:::i;12984:401::-;13186:2;13168:21;;;13225:2;13205:18;;;13198:30;13264:34;13259:2;13244:18;;13237:62;-1:-1:-1;;;13330:2:1;13315:18;;13308:35;13375:3;13360:19;;12984:401::o;13390:399::-;13592:2;13574:21;;;13631:2;13611:18;;;13604:30;13670:34;13665:2;13650:18;;13643:62;-1:-1:-1;;;13736:2:1;13721:18;;13714:33;13779:3;13764:19;;13390:399::o;13794:168::-;13867:9;;;13898;;13915:15;;;13909:22;;13895:37;13885:71;;13936:18;;:::i;13967:217::-;14007:1;14033;14023:132;;14077:10;14072:3;14068:20;14065:1;14058:31;14112:4;14109:1;14102:15;14140:4;14137:1;14130:15;14023:132;-1:-1:-1;14169:9:1;;13967:217::o;14189:128::-;14256:9;;;14277:11;;;14274:37;;;14291:18;;:::i;16004:127::-;16065:10;16060:3;16056:20;16053:1;16046:31;16096:4;16093:1;16086:15;16120:4;16117:1;16110:15;16136:980;16398:4;16446:3;16435:9;16431:19;16477:6;16466:9;16459:25;16503:2;16541:6;16536:2;16525:9;16521:18;16514:34;16584:3;16579:2;16568:9;16564:18;16557:31;16608:6;16643;16637:13;16674:6;16666;16659:22;16712:3;16701:9;16697:19;16690:26;;16751:2;16743:6;16739:15;16725:29;;16772:1;16782:195;16796:6;16793:1;16790:13;16782:195;;;16861:13;;-1:-1:-1;;;;;16857:39:1;16845:52;;16952:15;;;;16917:12;;;;16893:1;16811:9;16782:195;;;-1:-1:-1;;;;;;;17033:32:1;;;;17028:2;17013:18;;17006:60;-1:-1:-1;;;17097:3:1;17082:19;17075:35;16994:3;16136:980;-1:-1:-1;;;16136:980:1:o;17733:306::-;17821:6;17829;17837;17890:2;17878:9;17869:7;17865:23;17861:32;17858:52;;;17906:1;17903;17896:12;17858:52;17935:9;17929:16;17919:26;;17985:2;17974:9;17970:18;17964:25;17954:35;;18029:2;18018:9;18014:18;18008:25;17998:35;;17733:306;;;;;:::o
Swarm Source
ipfs://19d2bc7759b4e507d310191a904f22834bc8407f7721878a46ab08a6c895920c
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.