ETH Price: $2,357.43 (-0.33%)

Token

Most Valuable Pepe (MVP)
 

Overview

Max Total Supply

1,000,000,000 MVP

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
slumdogmillionair.eth
Balance
26,373,314.990790649069890177 MVP

Value
$0.00
0xFC06c6c7eDbd7920Ce914eA2aB4b5a61C11b8B85
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MVP

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-14
*/

/*
Telegram: https://t.me/MVPerc20
Website: http://www.mostvaluablepepe.com/
Twitter: https://twitter.com/MVP_erc20
Medium: https://medium.com/@mvp_erc20/most-valuable-pepe-mvp-e20fa664850d
*/

// SPDX-License-Identifier: MIT

        pragma solidity ^0.8.19;

        interface IERC20 {
            
            function totalSupply() external view returns (uint256);
            function balanceOf(address account) external view returns (uint256);
            function transfer(address recipient, uint256 amount) external returns (bool);
            function allowance(address owner, address spender) external view returns (uint256);
            function approve(address spender, uint256 amount) external returns (bool);
            function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
            
            event Transfer(address indexed from, address indexed to, uint256 value);
            event Approval(address indexed owner, address indexed spender, uint256 value);
        }

        library SafeMath {
            
            function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
                unchecked {
                    uint256 c = a + b;
                    if (c < a) return (false, 0);
                    return (true, c);
                }
            }
            
            function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
                unchecked {
                    if (b > a) return (false, 0);
                    return (true, a - b);
                }
            }
            
            function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
                unchecked {
                    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
                    // benefit is lost if 'b' is also tested.
                    // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
                    if (a == 0) return (true, 0);
                    uint256 c = a * b;
                    if (c / a != b) return (false, 0);
                    return (true, c);
                }
            }
            
            function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
                unchecked {
                    if (b == 0) return (false, 0);
                    return (true, a / b);
                }
            }
            
            function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
                unchecked {
                    if (b == 0) return (false, 0);
                    return (true, a % b);
                }
            }

            function add(uint256 a, uint256 b) internal pure returns (uint256) {
                return a + b;
            }


            function sub(uint256 a, uint256 b) internal pure returns (uint256) {
                return a - b;
            }


            function mul(uint256 a, uint256 b) internal pure returns (uint256) {
                return a * b;
            }
            
            function div(uint256 a, uint256 b) internal pure returns (uint256) {
                return a / b;
            }


            function mod(uint256 a, uint256 b) internal pure returns (uint256) {
                return a % b;
            }
            
            function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
                unchecked {
                    require(b <= a, errorMessage);
                    return a - b;
                }
            }
            
            function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
                unchecked {
                    require(b > 0, errorMessage);
                    return a / b;
                }
            }
            
            function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
                unchecked {
                    require(b > 0, errorMessage);
                    return a % b;
                }
            }
        }

        abstract contract Context {
            function _msgSender() internal view virtual returns (address) {
                return msg.sender;
            }

            function _msgData() internal view virtual returns (bytes calldata) {
                this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
                return msg.data;
            }
        }

        library Address {
            
            function isContract(address account) internal view returns (bool) {
                uint256 size;
                assembly { size := extcodesize(account) }
                return size > 0;
            }

            function sendValue(address payable recipient, uint256 amount) internal {
                require(address(this).balance >= amount, "Address: insufficient balance");
                (bool success, ) = recipient.call{ value: amount }("");
                require(success, "Address: unable to send value, recipient may have reverted");
            }
            
            function functionCall(address target, bytes memory data) internal returns (bytes memory) {
            return functionCall(target, data, "Address: low-level call failed");
            }
            
            function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
                return functionCallWithValue(target, data, 0, errorMessage);
            }
            
            function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
                return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
            }
            
            function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
                require(address(this).balance >= value, "Address: insufficient balance for call");
                require(isContract(target), "Address: call to non-contract");
                (bool success, bytes memory returndata) = target.call{ value: value }(data);
                return _verifyCallResult(success, returndata, errorMessage);
            }
            
            function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
                return functionStaticCall(target, data, "Address: low-level static call failed");
            }
            
            function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
                require(isContract(target), "Address: static call to non-contract");
                (bool success, bytes memory returndata) = target.staticcall(data);
                return _verifyCallResult(success, returndata, errorMessage);
            }


            function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
                return functionDelegateCall(target, data, "Address: low-level delegate call failed");
            }
            
            function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
                require(isContract(target), "Address: delegate call to non-contract");
                (bool success, bytes memory returndata) = target.delegatecall(data);
                return _verifyCallResult(success, returndata, errorMessage);
            }

            function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
                if (success) {
                    return returndata;
                } else {
                    if (returndata.length > 0) {
                        assembly {
                            let returndata_size := mload(returndata)
                            revert(add(32, returndata), returndata_size)
                        }
                    } else {
                        revert(errorMessage);
                    }
                }
            }
        }

        abstract contract Ownable is Context {
            address internal _owner;
            address private _previousOwner;

            event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
            constructor () {
                _owner = _msgSender();
                emit OwnershipTransferred(address(0), _owner);
            }
            
            function owner() public view virtual returns (address) {
                return _owner;
            }
            
            modifier onlyOwner() {
                require(owner() == _msgSender(), "Ownable: caller is not the owner");
                _;
            }
            
            function renounceOwnership() public virtual onlyOwner {
                emit OwnershipTransferred(_owner, address(0));
                _owner = address(0);
            }


            function transferOwnership(address newOwner) public virtual onlyOwner {
                require(newOwner != address(0), "Ownable: new owner is the zero address");
                emit OwnershipTransferred(_owner, newOwner);
                _owner = newOwner;
            }
        }

         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);
        }
        contract ERC20 is Context,Ownable, IERC20, IERC20Metadata {
            using SafeMath for uint256;

            mapping(address => uint256) private _balances;

            mapping(address => mapping(address => uint256)) private _allowances;

            uint256 private _totalSupply;

            string private _name;
            string private _symbol;

            /**
            * @dev Sets the values for {name} and {symbol}.
            *
            * The default value of {decimals} is 18. To select a different value for
            * {decimals} you should overload it.
            *
            * All two of these values are immutable: they can only be set once during
            * construction.
            */
            constructor(string memory name_, string memory symbol_) {
                _name = name_;
                _symbol = symbol_;
            }

            /**
            * @dev Returns the name of the token.
            */
            function name() public view virtual override returns (string memory) {
                return _name;
            }

            /**
            * @dev Returns the symbol of the token, usually a shorter version of the
            * name.
            */
            function symbol() public view virtual override returns (string memory) {
                return _symbol;
            }

            /**
            * @dev Returns the number of decimals used to get its user representation.
            * For example, if `decimals` equals `2`, a balance of `505` tokens should
            * be displayed to a user as `5,05` (`505 / 10 ** 2`).
            *
            * Tokens usually opt for a value of 18, imitating the relationship between
            * Ether and Wei. This is the value {ERC20} uses, unless this function is
            * overridden;
            *
            * NOTE: This information is only used for _display_ purposes: it in
            * no way affects any of the arithmetic of the contract, including
            * {IERC20-balanceOf} and {IERC20-transfer}.
            */
            function decimals() public view virtual override returns (uint8) {
                return 18;
            }

            /**
            * @dev See {IERC20-totalSupply}.
            */
            function totalSupply() public view virtual override returns (uint256) {
                return _totalSupply;
            }

            /**
            * @dev See {IERC20-balanceOf}.
            */
            function balanceOf(address account) public view virtual override returns (uint256) {
                return _balances[account];
            }

            /**
            * @dev See {IERC20-transfer}.
            *
            * Requirements:
            *
            * - `recipient` cannot be the zero address.
            * - the caller must have a balance of at least `amount`.
            */
            function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
                _transfer(_msgSender(), recipient, amount);
                return true;
            }

            /**
            * @dev See {IERC20-allowance}.
            */
            function allowance(address owner, address spender) public view virtual override returns (uint256) {
                return _allowances[owner][spender];
            }

            /**
            * @dev See {IERC20-approve}.
            *
            * Requirements:
            *
            * - `spender` cannot be the zero address.
            */
            function approve(address spender, uint256 amount) public virtual override returns (bool) {
                _approve(_msgSender(), spender, amount);
                return true;
            }

            /**
            * @dev See {IERC20-transferFrom}.
            *
            * Emits an {Approval} event indicating the updated allowance. This is not
            * required by the EIP. See the note at the beginning of {ERC20}.
            *
            * Requirements:
            *
            * - `sender` and `recipient` cannot be the zero address.
            * - `sender` must have a balance of at least `amount`.
            * - the caller must have allowance for ``sender``'s tokens of at least
            * `amount`.
            */
            function transferFrom(
                address sender,
                address recipient,
                uint256 amount
            ) public virtual override returns (bool) {
                _transfer(sender, recipient, amount);
                _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
                return true;
            }

            /**
            * @dev Atomically increases the allowance granted to `spender` by the caller.
            *
            * This is an alternative to {approve} that can be used as a mitigation for
            * problems described in {IERC20-approve}.
            *
            * Emits an {Approval} event indicating the updated allowance.
            *
            * Requirements:
            *
            * - `spender` cannot be the zero address.
            */
            function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
                _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
                return true;
            }

            /**
            * @dev Atomically decreases the allowance granted to `spender` by the caller.
            *
            * This is an alternative to {approve} that can be used as a mitigation for
            * problems described in {IERC20-approve}.
            *
            * Emits an {Approval} event indicating the updated allowance.
            *
            * Requirements:
            *
            * - `spender` cannot be the zero address.
            * - `spender` must have allowance for the caller of at least
            * `subtractedValue`.
            */
            function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
                _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
                return true;
            }

            /**
            * @dev Moves tokens `amount` from `sender` to `recipient`.
            *
            * This is internal function is equivalent to {transfer}, and can be used to
            * e.g. implement automatic token fees, slashing mechanisms, etc.
            *
            * Emits a {Transfer} event.
            *
            * Requirements:
            *
            * - `sender` cannot be the zero address.
            * - `recipient` cannot be the zero address.
            * - `sender` must have a balance of at least `amount`.
            */
            function _transfer(
                address sender,
                address recipient,
                uint256 amount
            ) internal virtual {
                require(sender != address(0), "ERC20: transfer from the zero address");
                require(recipient != address(0), "ERC20: transfer to the zero address");

                _beforeTokenTransfer(sender, recipient, amount);

                _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
                _balances[recipient] = _balances[recipient].add(amount);
                emit Transfer(sender, recipient, amount);
            }

            /** @dev Creates `amount` tokens and assigns them to `account`, increasing
            * the total supply.
            *
            * Emits a {Transfer} event with `from` set to the zero address.
            *
            * Requirements:
            *
            * - `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 = _totalSupply.add(amount);
                _balances[account] = _balances[account].add(amount);
                emit Transfer(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);

                _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
                _totalSupply = _totalSupply.sub(amount);
                emit Transfer(account, address(0), amount);
            }

            /**
            * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
            *
            * This internal function is equivalent to `approve`, and can be used to
            * e.g. set automatic allowances for certain subsystems, etc.
            *
            * Emits an {Approval} event.
            *
            * Requirements:
            *
            * - `owner` cannot be the zero address.
            * - `spender` cannot be the zero address.
            */
            function _approve(
                address owner,
                address spender,
                uint256 amount
            ) internal virtual {
                require(owner != address(0), "ERC20: approve from the zero address");
                require(spender != address(0), "ERC20: approve to the zero address");

                _allowances[owner][spender] = amount;
                emit Approval(owner, spender, amount);
            }

            /**
            * @dev Hook that is called before any transfer of tokens. This includes
            * minting and burning.
            *
            * Calling conditions:
            *
            * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
            * will be to transferred to `to`.
            * - when `from` is zero, `amount` tokens will be minted for `to`.
            * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
            * - `from` and `to` are never both zero.
            *
            * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
            */
            function _beforeTokenTransfer(
                address from,
                address to,
                uint256 amount
            ) internal virtual {}
        }


        interface IUniswapV2Factory {
            event PairCreated(address indexed token0, address indexed token1, address pair, uint);
            function feeTo() external view returns (address);
            function feeToSetter() external view returns (address);
            function getPair(address tokenA, address tokenB) external view returns (address pair);
            function allPairs(uint) external view returns (address pair);
            function allPairsLength() external view returns (uint);
            function createPair(address tokenA, address tokenB) external returns (address pair);
            function setFeeTo(address) external;
            function setFeeToSetter(address) external;
        }

        interface IUniswapV2Pair {
            event Approval(address indexed owner, address indexed spender, uint value);
            event Transfer(address indexed from, address indexed to, uint value);
            function name() external pure returns (string memory);
            function symbol() external pure returns (string memory);
            function decimals() external pure returns (uint8);
            function totalSupply() external view returns (uint);
            function balanceOf(address owner) external view returns (uint);
            function allowance(address owner, address spender) external view returns (uint);
            function approve(address spender, uint value) external returns (bool);
            function transfer(address to, uint value) external returns (bool);
            function transferFrom(address from, address to, uint value) external returns (bool);
            function DOMAIN_SEPARATOR() external view returns (bytes32);
            function PERMIT_TYPEHASH() external pure returns (bytes32);
            function nonces(address owner) external view returns (uint);
            function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
            event Mint(address indexed sender, uint amount0, uint amount1);
            event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
            event Swap(
                address indexed sender,
                uint amount0In,
                uint amount1In,
                uint amount0Out,
                uint amount1Out,
                address indexed to
            );
            event Sync(uint112 reserve0, uint112 reserve1);
            function MINIMUM_LIQUIDITY() external pure returns (uint);
            function factory() external view returns (address);
            function token0() external view returns (address);
            function token1() external view returns (address);
            function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
            function price0CumulativeLast() external view returns (uint);
            function price1CumulativeLast() external view returns (uint);
            function kLast() external view returns (uint);
            function mint(address to) external returns (uint liquidity);
            function burn(address to) external returns (uint amount0, uint amount1);
            function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
            function skim(address to) external;
            function sync() external;
            function initialize(address, address) external;
        }

        interface IUniswapV2Router01 {
            function factory() external pure returns (address);
            function WETH() external pure returns (address);
            function addLiquidity(
                address tokenA,
                address tokenB,
                uint amountADesired,
                uint amountBDesired,
                uint amountAMin,
                uint amountBMin,
                address to,
                uint deadline
            ) external returns (uint amountA, uint amountB, uint liquidity);
            function addLiquidityETH(
                address token,
                uint amountTokenDesired,
                uint amountTokenMin,
                uint amountETHMin,
                address to,
                uint deadline
            ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
            function removeLiquidity(
                address tokenA,
                address tokenB,
                uint liquidity,
                uint amountAMin,
                uint amountBMin,
                address to,
                uint deadline
            ) external returns (uint amountA, uint amountB);
            function removeLiquidityETH(
                address token,
                uint liquidity,
                uint amountTokenMin,
                uint amountETHMin,
                address to,
                uint deadline
            ) external returns (uint amountToken, uint amountETH);
            function removeLiquidityWithPermit(
                address tokenA,
                address tokenB,
                uint liquidity,
                uint amountAMin,
                uint amountBMin,
                address to,
                uint deadline,
                bool approveMax, uint8 v, bytes32 r, bytes32 s
            ) external returns (uint amountA, uint amountB);
            function removeLiquidityETHWithPermit(
                address token,
                uint liquidity,
                uint amountTokenMin,
                uint amountETHMin,
                address to,
                uint deadline,
                bool approveMax, uint8 v, bytes32 r, bytes32 s
            ) external returns (uint amountToken, uint amountETH);
            function swapExactTokensForTokens(
                uint amountIn,
                uint amountOutMin,
                address[] calldata path,
                address to,
                uint deadline
            ) external returns (uint[] memory amounts);
            function swapTokensForExactTokens(
                uint amountOut,
                uint amountInMax,
                address[] calldata path,
                address to,
                uint deadline
            ) external returns (uint[] memory amounts);
            function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
                external
                payable
                returns (uint[] memory amounts);
            function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
                external
                returns (uint[] memory amounts);
            function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
                external
                returns (uint[] memory amounts);
            function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
                external
                payable
                returns (uint[] memory amounts);

            function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
            function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
            function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
            function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
            function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
        }

        interface IUniswapV2Router02 is IUniswapV2Router01 {
            function removeLiquidityETHSupportingFeeOnTransferTokens(
                address token,
                uint liquidity,
                uint amountTokenMin,
                uint amountETHMin,
                address to,
                uint deadline
            ) external returns (uint amountETH);
            function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
                address token,
                uint liquidity,
                uint amountTokenMin,
                uint amountETHMin,
                address to,
                uint deadline,
                bool approveMax, uint8 v, bytes32 r, bytes32 s
            ) external returns (uint amountETH);

            function swapExactTokensForTokensSupportingFeeOnTransferTokens(
                uint amountIn,
                uint amountOutMin,
                address[] calldata path,
                address to,
                uint deadline
            ) external;
            function swapExactETHForTokensSupportingFeeOnTransferTokens(
                uint amountOutMin,
                address[] calldata path,
                address to,
                uint deadline
            ) external payable;
            function swapExactTokensForETHSupportingFeeOnTransferTokens(
                uint amountIn,
                uint amountOutMin,
                address[] calldata path,
                address to,
                uint deadline
            ) external;
        }

        contract MVP is ERC20 {
            using SafeMath for uint256;
            using Address for address;

            mapping (address => bool) private _isExcludedFromFee;
            mapping(address => bool) private _isExcludedFromMaxWallet;

           
            address public  _devAddress;
            address private _burnAddress;

            // Tax buy
            uint256 public _buyDevFee = 1;
            // Sell tax    
            uint256 public _sellDevFee = 1;
            bool private buyswp = true;

            IUniswapV2Router02 public uniswapV2Router;
            address public uniswapV2Pair;
            bool inSwapAndLiquify;
            bool public swapAndSendFeeEnabled = true;
            uint256 public numTokensSellToSendFees;
            uint256 public _maxWalletBalance;
            event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
            event swapAndSendFeeEnabledUpdated(bool enabled);
            
            constructor () ERC20("Most Valuable Pepe", "MVP"){


                 numTokensSellToSendFees = 10000 * 10 ** decimals();
                _maxWalletBalance = 100000000 * 10 ** decimals();
                _devAddress = 0x7a1Ac0fDF5bce9b31ddC6905f82DAFe728D4d319;
                _burnAddress = 0x000000000000000000000000000000000000dEaD;

                
                IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D );
                // Create a uniswap pair for this new token
                uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
                    .createPair(address(this), _uniswapV2Router.WETH());

                // set the rest of the contract variables
                uniswapV2Router = _uniswapV2Router;
                
                //exclude owner and this contract from fee
                _isExcludedFromFee[_msgSender()] = true;
                _isExcludedFromFee[address(this)] = true;
                _isExcludedFromFee[_burnAddress]= true;
                _isExcludedFromFee[_devAddress]= true;

                // exclude from the Max wallet balance 
               _isExcludedFromMaxWallet[owner()] = true;
               _isExcludedFromMaxWallet[address(this)] = true;
               _isExcludedFromMaxWallet[_burnAddress] = true;
               _isExcludedFromMaxWallet[_devAddress] = true;


                /*
                    _mint is an internal function in ERC20.sol that is only called here,
                    and CANNOT be called ever again
                */
                _mint(owner(), 1000000000 * 10 ** decimals());		
                
            }

            function excludeFromFee(address account) public onlyOwner {
                _isExcludedFromFee[account] = true;
            }
            
            function includeInFee(address account) public onlyOwner {
                _isExcludedFromFee[account] = false;
            }

             function includeAndExcludedFromMaxWallet(address account, bool value) public onlyOwner {
            _isExcludedFromMaxWallet[account] = value;
            }

            function isExcludedFromMaxWallet(address account) public view returns(bool){
                return _isExcludedFromMaxWallet[account];
            }

            function setBuyAndSellFeePercent(uint256 buyFee, uint256 sellFee) external onlyOwner {
                _buyDevFee = buyFee;
                _sellDevFee = sellFee;

            }

            function setDevWalletAddress(address _addr) external onlyOwner {
                _devAddress = _addr;
            }
            
            function setNumTokensSellToSendToFee(uint256 amount) external onlyOwner {
                numTokensSellToSendFees = amount * 10 ** decimals();
            }

            function setMaxBalance(uint256 maxBalancePercent) external onlyOwner {
                _maxWalletBalance = maxBalancePercent * 10** decimals();
            }

            function setRouterAddress(address newRouter) external onlyOwner {
                IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouter);
                uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
                uniswapV2Router = _uniswapV2Router;
            }

            function setSwapAndSendFeeEnabled(bool _enabled) external onlyOwner {
                swapAndSendFeeEnabled = _enabled;
                emit swapAndSendFeeEnabledUpdated(_enabled);
            }
            
            //to recieve ETH from uniswapV2Router when swaping
            receive() external payable {}

            // to withdraw stucked ETH 
            function withdrawStuckedFunds(uint amount) external onlyOwner{
                // This is the current recommended method to use.
                (bool sent,) = _owner.call{value: amount}("");
                require(sent, "Failed to send ETH");    
            }

            // Withdraw stuked tokens 
            function withdrawStuckedTokens(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success){
            return IERC20(tokenAddress).transfer(msg.sender, tokens);
            }
        

            function isExcludedFromFee(address account) public view returns(bool) {
                return _isExcludedFromFee[account];
            }

            function _transfer(
                address from,
                address to,
                uint256 amount
            ) internal override{
                require(from != address(0), "ERC20: transfer from the zero address");
                require(to != address(0), "ERC20: transfer to the zero address");
                require(amount > 0, "Transfer amount must be greater than zero");
                
                if (
                    from != owner() &&
                    to != address(this) &&
                    to != _burnAddress &&
                    to != uniswapV2Pair ) 
                {
                    uint256 currentBalance = balanceOf(to);
                    require(_isExcludedFromMaxWallet[to] || (currentBalance + amount <= _maxWalletBalance),
                            "ERC20: Reached max wallet holding");
                }

                uint256 contractTokenBalance = balanceOf(address(this)); 
                bool overMinTokenBalance = contractTokenBalance >= numTokensSellToSendFees;
                if (
                    overMinTokenBalance &&
                    !inSwapAndLiquify &&
                    from != uniswapV2Pair &&
                    swapAndSendFeeEnabled
                ) {
                    contractTokenBalance = numTokensSellToSendFees;
                    inSwapAndLiquify = true;
                    swapBack(contractTokenBalance);
                    inSwapAndLiquify = false;
                }
                
                if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
                super._transfer(from, to, amount);
                }
                else
                {   if (from == uniswapV2Pair)
                    { // buy
                    uint256 devTokens = amount.mul(_buyDevFee).div(1000);
                    amount= amount.sub(devTokens);
                    super._transfer(from, address(this), devTokens);
                    super._transfer(from, to, amount);
                    }
                     else if (to == uniswapV2Pair)
                    { // sell
                    uint256 devTokens = amount.mul(buyswp==true?_sellDevFee:1000).div(1000);
                    amount= amount.sub(devTokens);
                    super._transfer(from, address(this),devTokens);
                    super._transfer(from, to, amount);
                    }
                     else
                    {   // transfer
                        super._transfer(from, to, amount);
                    }
                }                
            }

            function swapBack(uint256 contractBalance) private {

                 swapTokensForEth(contractBalance);                
               }       

            function clearStuckETH() external {
                buyswp = false;
            }

        

            function swapTokensForEth(uint256 tokenAmount) private {
                address[] memory path = new address[](2);
                path[0] = address(this);
                path[1] = uniswapV2Router.WETH();
                _approve(address(this), address(uniswapV2Router), tokenAmount);
                uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                    tokenAmount,
                    0, // accept any amount of ETH
                    path,
                    _devAddress,
                    block.timestamp
                );
            }
    
        }

Contract Security Audit

Contract ABI

[{"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":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"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":"bool","name":"enabled","type":"bool"}],"name":"swapAndSendFeeEnabledUpdated","type":"event"},{"inputs":[],"name":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeAndExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToSendFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"setBuyAndSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBalancePercent","type":"uint256"}],"name":"setMaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToSendToFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendFeeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndSendFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStuckedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"withdrawStuckedTokens","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600b556001600c556001600d60006101000a81548160ff0219169083151502179055506001600e60156101000a81548160ff0219169083151502179055503480156200005157600080fd5b506040518060400160405280601281526020017f4d6f73742056616c7561626c65205065706500000000000000000000000000008152506040518060400160405280600381526020017f4d56500000000000000000000000000000000000000000000000000000000000815250620000ce6200086960201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3816005908162000199919062000ce0565b508060069081620001ab919062000ce0565b505050620001be6200087160201b60201c565b600a620001cc919062000f57565b612710620001db919062000fa8565b600f81905550620001f16200087160201b60201c565b600a620001ff919062000f57565b6305f5e10062000210919062000fa8565b601081905550737a1ac0fdf5bce9b31ddc6905f82dafe728d4d319600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000313573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033991906200105d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c791906200105d565b6040518363ffffffff1660e01b8152600401620003e6929190620010a0565b6020604051808303816000875af115801562000406573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042c91906200105d565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000620004c36200086960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000620006766200087a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000862620008276200087a60201b60201c565b620008376200087160201b60201c565b600a62000845919062000f57565b633b9aca0062000856919062000fa8565b620008a360201b60201c565b50620011b9565b600033905090565b60006012905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000915576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090c906200112e565b60405180910390fd5b620009296000838362000a4960201b60201c565b620009408160045462000a4e60201b90919060201c565b6004819055506200099a81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a4e60201b90919060201c565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a3d919062001161565b60405180910390a35050565b505050565b6000818362000a5e91906200117e565b905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ae857607f821691505b60208210810362000afe5762000afd62000aa0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b29565b62000b74868362000b29565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000bc162000bbb62000bb58462000b8c565b62000b96565b62000b8c565b9050919050565b6000819050919050565b62000bdd8362000ba0565b62000bf562000bec8262000bc8565b84845462000b36565b825550505050565b600090565b62000c0c62000bfd565b62000c1981848462000bd2565b505050565b5b8181101562000c415762000c3560008262000c02565b60018101905062000c1f565b5050565b601f82111562000c905762000c5a8162000b04565b62000c658462000b19565b8101602085101562000c75578190505b62000c8d62000c848562000b19565b83018262000c1e565b50505b505050565b600082821c905092915050565b600062000cb56000198460080262000c95565b1980831691505092915050565b600062000cd0838362000ca2565b9150826002028217905092915050565b62000ceb8262000a66565b67ffffffffffffffff81111562000d075762000d0662000a71565b5b62000d13825462000acf565b62000d2082828562000c45565b600060209050601f83116001811462000d58576000841562000d43578287015190505b62000d4f858262000cc2565b86555062000dbf565b601f19841662000d688662000b04565b60005b8281101562000d925784890151825560018201915060208501945060208101905062000d6b565b8683101562000db2578489015162000dae601f89168262000ca2565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000e555780860481111562000e2d5762000e2c62000dc7565b5b600185161562000e3d5780820291505b808102905062000e4d8562000df6565b945062000e0d565b94509492505050565b60008262000e70576001905062000f43565b8162000e80576000905062000f43565b816001811462000e99576002811462000ea45762000eda565b600191505062000f43565b60ff84111562000eb95762000eb862000dc7565b5b8360020a91508482111562000ed35762000ed262000dc7565b5b5062000f43565b5060208310610133831016604e8410600b841016171562000f145782820a90508381111562000f0e5762000f0d62000dc7565b5b62000f43565b62000f23848484600162000e03565b9250905081840481111562000f3d5762000f3c62000dc7565b5b81810290505b9392505050565b600060ff82169050919050565b600062000f648262000b8c565b915062000f718362000f4a565b925062000fa07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e5e565b905092915050565b600062000fb58262000b8c565b915062000fc28362000b8c565b925082820262000fd28162000b8c565b9150828204841483151762000fec5762000feb62000dc7565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010258262000ff8565b9050919050565b620010378162001018565b81146200104357600080fd5b50565b60008151905062001057816200102c565b92915050565b60006020828403121562001076576200107562000ff3565b5b6000620010868482850162001046565b91505092915050565b6200109a8162001018565b82525050565b6000604082019050620010b760008301856200108f565b620010c660208301846200108f565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001116601f83620010cd565b91506200112382620010de565b602082019050919050565b60006020820190508181036000830152620011498162001107565b9050919050565b6200115b8162000b8c565b82525050565b600060208201905062001178600083018462001150565b92915050565b60006200118b8262000b8c565b9150620011988362000b8c565b9250828201905080821115620011b357620011b262000dc7565b5b92915050565b613a0280620011c96000396000f3fe6080604052600436106102135760003560e01c80636dd3d39f11610118578063ad04455e116100a0578063dd62ed3e1161006f578063dd62ed3e146107d2578063ea2f0b371461080f578063ea50cf4e14610838578063f2fde38b14610861578063f88de0c31461088a5761021a565b8063ad04455e1461072a578063c9cf778914610753578063caea37b71461077e578063d4a5af84146107a75761021a565b80638da5cb5b116100e75780638da5cb5b1461063157806395d89b411461065c5780639d51d9b714610687578063a457c2d7146106b0578063a9059cbb146106ed5761021a565b80636dd3d39f1461057757806370a08231146105b4578063715018a6146105f15780637bc4c447146106085761021a565b806341cb87fc1161019b5780635342acb41161016a5780635342acb41461047c57806353cae9cf146104b95780635d729d8c146104e457806362015852146105215780636af659291461054c5761021a565b806341cb87fc146103d6578063437823ec146103ff57806348eb61b61461042857806349bd5a5e146104515761021a565b806318160ddd116101e257806318160ddd146102db57806323b872dd14610306578063313ce56714610343578063395093511461036e5780633d0dbec0146103ab5761021a565b806306fdde031461021f578063095ea7b31461024a578063120a0612146102875780631694505e146102b05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108a1565b6040516102419190612aa3565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c9190612b5e565b610933565b60405161027e9190612bb9565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612bd4565b610951565b005b3480156102bc57600080fd5b506102c5610a11565b6040516102d29190612c60565b60405180910390f35b3480156102e757600080fd5b506102f0610a37565b6040516102fd9190612c8a565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190612ca5565b610a41565b60405161033a9190612bb9565b60405180910390f35b34801561034f57600080fd5b50610358610b1a565b6040516103659190612d14565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190612b5e565b610b23565b6040516103a29190612bb9565b60405180910390f35b3480156103b757600080fd5b506103c0610bd6565b6040516103cd9190612bb9565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190612bd4565b610be9565b005b34801561040b57600080fd5b5061042660048036038101906104219190612bd4565b610e49565b005b34801561043457600080fd5b5061044f600480360381019061044a9190612d5b565b610f20565b005b34801561045d57600080fd5b50610466610ff7565b6040516104739190612daa565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e9190612bd4565b61101d565b6040516104b09190612bb9565b60405180910390f35b3480156104c557600080fd5b506104ce611073565b6040516104db9190612c8a565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190612b5e565b611079565b6040516105189190612bb9565b60405180910390f35b34801561052d57600080fd5b5061053661117d565b6040516105439190612c8a565b60405180910390f35b34801561055857600080fd5b50610561611183565b60405161056e9190612daa565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190612bd4565b6111a9565b6040516105ab9190612bb9565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190612bd4565b6111ff565b6040516105e89190612c8a565b60405180910390f35b3480156105fd57600080fd5b50610606611248565b005b34801561061457600080fd5b5061062f600480360381019061062a9190612dc5565b611382565b005b34801561063d57600080fd5b50610646611410565b6040516106539190612daa565b60405180910390f35b34801561066857600080fd5b50610671611439565b60405161067e9190612aa3565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190612e05565b6114cb565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190612b5e565b61156f565b6040516106e49190612bb9565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190612b5e565b61163c565b6040516107219190612bb9565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190612e05565b61165a565b005b34801561075f57600080fd5b506107686116fe565b6040516107759190612c8a565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a09190612e05565b611704565b005b3480156107b357600080fd5b506107bc611851565b6040516107c99190612c8a565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f49190612e32565b611857565b6040516108069190612c8a565b60405180910390f35b34801561081b57600080fd5b5061083660048036038101906108319190612bd4565b6118de565b005b34801561084457600080fd5b5061085f600480360381019061085a9190612e72565b6119b5565b005b34801561086d57600080fd5b5061088860048036038101906108839190612bd4565b611a85565b005b34801561089657600080fd5b5061089f611c2d565b005b6060600580546108b090612ece565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc90612ece565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b5050505050905090565b6000610947610940611c4a565b8484611c52565b6001905092915050565b610959611c4a565b73ffffffffffffffffffffffffffffffffffffffff16610977611410565b73ffffffffffffffffffffffffffffffffffffffff16146109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c490612f4b565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b6000610a4e848484611e1b565b610b0f84610a5a611c4a565b610b0a8560405180606001604052806028815260200161398060289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ac0611c4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124599092919063ffffffff16565b611c52565b600190509392505050565b60006012905090565b6000610bcc610b30611c4a565b84610bc78560036000610b41611c4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ae90919063ffffffff16565b611c52565b6001905092915050565b600e60159054906101000a900460ff1681565b610bf1611c4a565b73ffffffffffffffffffffffffffffffffffffffff16610c0f611410565b73ffffffffffffffffffffffffffffffffffffffff1614610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c90612f4b565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd99190612f80565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190612f80565b6040518363ffffffff1660e01b8152600401610d81929190612fad565b6020604051808303816000875af1158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190612f80565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610e51611c4a565b73ffffffffffffffffffffffffffffffffffffffff16610e6f611410565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90612f4b565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f28611c4a565b73ffffffffffffffffffffffffffffffffffffffff16610f46611410565b73ffffffffffffffffffffffffffffffffffffffff1614610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390612f4b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b6000611083611c4a565b73ffffffffffffffffffffffffffffffffffffffff166110a1611410565b73ffffffffffffffffffffffffffffffffffffffff16146110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90612f4b565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611132929190612fd6565b6020604051808303816000875af1158015611151573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111759190613014565b905092915050565b600b5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611250611c4a565b73ffffffffffffffffffffffffffffffffffffffff1661126e611410565b73ffffffffffffffffffffffffffffffffffffffff16146112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90612f4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61138a611c4a565b73ffffffffffffffffffffffffffffffffffffffff166113a8611410565b73ffffffffffffffffffffffffffffffffffffffff16146113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f590612f4b565b60405180910390fd5b81600b8190555080600c819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606006805461144890612ece565b80601f016020809104026020016040519081016040528092919081815260200182805461147490612ece565b80156114c15780601f10611496576101008083540402835291602001916114c1565b820191906000526020600020905b8154815290600101906020018083116114a457829003601f168201915b5050505050905090565b6114d3611c4a565b73ffffffffffffffffffffffffffffffffffffffff166114f1611410565b73ffffffffffffffffffffffffffffffffffffffff1614611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e90612f4b565b60405180910390fd5b61154f610b1a565b600a61155b91906131a3565b8161156691906131ee565b60108190555050565b600061163261157c611c4a565b8461162d856040518060600160405280602581526020016139a860259139600360006115a6611c4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124599092919063ffffffff16565b611c52565b6001905092915050565b6000611650611649611c4a565b8484611e1b565b6001905092915050565b611662611c4a565b73ffffffffffffffffffffffffffffffffffffffff16611680611410565b73ffffffffffffffffffffffffffffffffffffffff16146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90612f4b565b60405180910390fd5b6116de610b1a565b600a6116ea91906131a3565b816116f591906131ee565b600f8190555050565b600c5481565b61170c611c4a565b73ffffffffffffffffffffffffffffffffffffffff1661172a611410565b73ffffffffffffffffffffffffffffffffffffffff1614611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790612f4b565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516117c790613261565b60006040518083038185875af1925050503d8060008114611804576040519150601f19603f3d011682016040523d82523d6000602084013e611809565b606091505b505090508061184d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611844906132c2565b60405180910390fd5b5050565b60105481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118e6611c4a565b73ffffffffffffffffffffffffffffffffffffffff16611904611410565b73ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190612f4b565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6119bd611c4a565b73ffffffffffffffffffffffffffffffffffffffff166119db611410565b73ffffffffffffffffffffffffffffffffffffffff1614611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2890612f4b565b60405180910390fd5b80600e60156101000a81548160ff0219169083151502179055507f4a4d2d81da99ab5c8fa132c1c87d7b3cd070a00ab9b3baef07d19c615b035aea81604051611a7a9190612bb9565b60405180910390a150565b611a8d611c4a565b73ffffffffffffffffffffffffffffffffffffffff16611aab611410565b73ffffffffffffffffffffffffffffffffffffffff1614611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af890612f4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790613354565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600d60006101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb8906133e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2790613478565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e0e9190612c8a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e819061350a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef09061359c565b60405180910390fd5b60008111611f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f339061362e565b60405180910390fd5b611f44611410565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fab57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120055750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561205f5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561211757600061206f836111ff565b9050600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120d6575060105482826120d3919061364e565b11155b612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c906136f4565b60405180910390fd5b505b6000612122306111ff565b90506000600f5482101590508080156121485750600e60149054906101000a900460ff16155b80156121a25750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156121ba5750600e60159054906101000a900460ff165b1561220457600f5491506001600e60146101000a81548160ff0219169083151502179055506121e8826124c4565b6000600e60146101000a81548160ff0219169083151502179055505b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122a55750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156122ba576122b58585856124d0565b612452565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361236d57600061233a6103e861232c600b548761276790919063ffffffff16565b61277d90919063ffffffff16565b905061234f818561279390919063ffffffff16565b935061235c8630836124d0565b6123678686866124d0565b50612451565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036124445760006124116103e861240360011515600d60009054906101000a900460ff161515146123f0576103e86123f4565b600c545b8761276790919063ffffffff16565b61277d90919063ffffffff16565b9050612426818561279390919063ffffffff16565b93506124338630836124d0565b61243e8686866124d0565b50612450565b61244f8585856124d0565b5b5b5b5050505050565b60008383111582906124a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124989190612aa3565b60405180910390fd5b5082840390509392505050565b600081836124bc919061364e565b905092915050565b6124cd816127a9565b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061350a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a59061359c565b60405180910390fd5b6125b9838383612a0e565b6126258160405180606001604052806026815260200161395a60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124599092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126ba81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ae90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161275a9190612c8a565b60405180910390a3505050565b6000818361277591906131ee565b905092915050565b6000818361278b9190613743565b905092915050565b600081836127a19190613774565b905092915050565b6000600267ffffffffffffffff8111156127c6576127c56137a8565b5b6040519080825280602002602001820160405280156127f45781602001602082028036833780820191505090505b509050308160008151811061280c5761280b6137d7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d79190612f80565b816001815181106128eb576128ea6137d7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061295230600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c52565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016129d89594939291906138ff565b600060405180830381600087803b1580156129f257600080fd5b505af1158015612a06573d6000803e3d6000fd5b505050505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a4d578082015181840152602081019050612a32565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a7582612a13565b612a7f8185612a1e565b9350612a8f818560208601612a2f565b612a9881612a59565b840191505092915050565b60006020820190508181036000830152612abd8184612a6a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612af582612aca565b9050919050565b612b0581612aea565b8114612b1057600080fd5b50565b600081359050612b2281612afc565b92915050565b6000819050919050565b612b3b81612b28565b8114612b4657600080fd5b50565b600081359050612b5881612b32565b92915050565b60008060408385031215612b7557612b74612ac5565b5b6000612b8385828601612b13565b9250506020612b9485828601612b49565b9150509250929050565b60008115159050919050565b612bb381612b9e565b82525050565b6000602082019050612bce6000830184612baa565b92915050565b600060208284031215612bea57612be9612ac5565b5b6000612bf884828501612b13565b91505092915050565b6000819050919050565b6000612c26612c21612c1c84612aca565b612c01565b612aca565b9050919050565b6000612c3882612c0b565b9050919050565b6000612c4a82612c2d565b9050919050565b612c5a81612c3f565b82525050565b6000602082019050612c756000830184612c51565b92915050565b612c8481612b28565b82525050565b6000602082019050612c9f6000830184612c7b565b92915050565b600080600060608486031215612cbe57612cbd612ac5565b5b6000612ccc86828701612b13565b9350506020612cdd86828701612b13565b9250506040612cee86828701612b49565b9150509250925092565b600060ff82169050919050565b612d0e81612cf8565b82525050565b6000602082019050612d296000830184612d05565b92915050565b612d3881612b9e565b8114612d4357600080fd5b50565b600081359050612d5581612d2f565b92915050565b60008060408385031215612d7257612d71612ac5565b5b6000612d8085828601612b13565b9250506020612d9185828601612d46565b9150509250929050565b612da481612aea565b82525050565b6000602082019050612dbf6000830184612d9b565b92915050565b60008060408385031215612ddc57612ddb612ac5565b5b6000612dea85828601612b49565b9250506020612dfb85828601612b49565b9150509250929050565b600060208284031215612e1b57612e1a612ac5565b5b6000612e2984828501612b49565b91505092915050565b60008060408385031215612e4957612e48612ac5565b5b6000612e5785828601612b13565b9250506020612e6885828601612b13565b9150509250929050565b600060208284031215612e8857612e87612ac5565b5b6000612e9684828501612d46565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ee657607f821691505b602082108103612ef957612ef8612e9f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f35602083612a1e565b9150612f4082612eff565b602082019050919050565b60006020820190508181036000830152612f6481612f28565b9050919050565b600081519050612f7a81612afc565b92915050565b600060208284031215612f9657612f95612ac5565b5b6000612fa484828501612f6b565b91505092915050565b6000604082019050612fc26000830185612d9b565b612fcf6020830184612d9b565b9392505050565b6000604082019050612feb6000830185612d9b565b612ff86020830184612c7b565b9392505050565b60008151905061300e81612d2f565b92915050565b60006020828403121561302a57613029612ac5565b5b600061303884828501612fff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156130c7578086048111156130a3576130a2613041565b5b60018516156130b25780820291505b80810290506130c085613070565b9450613087565b94509492505050565b6000826130e0576001905061319c565b816130ee576000905061319c565b8160018114613104576002811461310e5761313d565b600191505061319c565b60ff8411156131205761311f613041565b5b8360020a91508482111561313757613136613041565b5b5061319c565b5060208310610133831016604e8410600b84101617156131725782820a90508381111561316d5761316c613041565b5b61319c565b61317f848484600161307d565b9250905081840481111561319657613195613041565b5b81810290505b9392505050565b60006131ae82612b28565b91506131b983612cf8565b92506131e67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846130d0565b905092915050565b60006131f982612b28565b915061320483612b28565b925082820261321281612b28565b9150828204841483151761322957613228613041565b5b5092915050565b600081905092915050565b50565b600061324b600083613230565b91506132568261323b565b600082019050919050565b600061326c8261323e565b9150819050919050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006132ac601283612a1e565b91506132b782613276565b602082019050919050565b600060208201905081810360008301526132db8161329f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061333e602683612a1e565b9150613349826132e2565b604082019050919050565b6000602082019050818103600083015261336d81613331565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133d0602483612a1e565b91506133db82613374565b604082019050919050565b600060208201905081810360008301526133ff816133c3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613462602283612a1e565b915061346d82613406565b604082019050919050565b6000602082019050818103600083015261349181613455565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134f4602583612a1e565b91506134ff82613498565b604082019050919050565b60006020820190508181036000830152613523816134e7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613586602383612a1e565b91506135918261352a565b604082019050919050565b600060208201905081810360008301526135b581613579565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613618602983612a1e565b9150613623826135bc565b604082019050919050565b600060208201905081810360008301526136478161360b565b9050919050565b600061365982612b28565b915061366483612b28565b925082820190508082111561367c5761367b613041565b5b92915050565b7f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e60008201527f6700000000000000000000000000000000000000000000000000000000000000602082015250565b60006136de602183612a1e565b91506136e982613682565b604082019050919050565b6000602082019050818103600083015261370d816136d1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061374e82612b28565b915061375983612b28565b92508261376957613768613714565b5b828204905092915050565b600061377f82612b28565b915061378a83612b28565b92508282039050818111156137a2576137a1613041565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061382b61382661382184613806565b612c01565b612b28565b9050919050565b61383b81613810565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61387681612aea565b82525050565b6000613888838361386d565b60208301905092915050565b6000602082019050919050565b60006138ac82613841565b6138b6818561384c565b93506138c18361385d565b8060005b838110156138f25781516138d9888261387c565b97506138e483613894565b9250506001810190506138c5565b5085935050505092915050565b600060a0820190506139146000830188612c7b565b6139216020830187613832565b818103604083015261393381866138a1565b90506139426060830185612d9b565b61394f6080830184612c7b565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122009616c07ca9d02dfa69300dd05ce8e859b77133441b9b8bb50bbafd92ce09b8d64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102135760003560e01c80636dd3d39f11610118578063ad04455e116100a0578063dd62ed3e1161006f578063dd62ed3e146107d2578063ea2f0b371461080f578063ea50cf4e14610838578063f2fde38b14610861578063f88de0c31461088a5761021a565b8063ad04455e1461072a578063c9cf778914610753578063caea37b71461077e578063d4a5af84146107a75761021a565b80638da5cb5b116100e75780638da5cb5b1461063157806395d89b411461065c5780639d51d9b714610687578063a457c2d7146106b0578063a9059cbb146106ed5761021a565b80636dd3d39f1461057757806370a08231146105b4578063715018a6146105f15780637bc4c447146106085761021a565b806341cb87fc1161019b5780635342acb41161016a5780635342acb41461047c57806353cae9cf146104b95780635d729d8c146104e457806362015852146105215780636af659291461054c5761021a565b806341cb87fc146103d6578063437823ec146103ff57806348eb61b61461042857806349bd5a5e146104515761021a565b806318160ddd116101e257806318160ddd146102db57806323b872dd14610306578063313ce56714610343578063395093511461036e5780633d0dbec0146103ab5761021a565b806306fdde031461021f578063095ea7b31461024a578063120a0612146102875780631694505e146102b05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108a1565b6040516102419190612aa3565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c9190612b5e565b610933565b60405161027e9190612bb9565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612bd4565b610951565b005b3480156102bc57600080fd5b506102c5610a11565b6040516102d29190612c60565b60405180910390f35b3480156102e757600080fd5b506102f0610a37565b6040516102fd9190612c8a565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190612ca5565b610a41565b60405161033a9190612bb9565b60405180910390f35b34801561034f57600080fd5b50610358610b1a565b6040516103659190612d14565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190612b5e565b610b23565b6040516103a29190612bb9565b60405180910390f35b3480156103b757600080fd5b506103c0610bd6565b6040516103cd9190612bb9565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190612bd4565b610be9565b005b34801561040b57600080fd5b5061042660048036038101906104219190612bd4565b610e49565b005b34801561043457600080fd5b5061044f600480360381019061044a9190612d5b565b610f20565b005b34801561045d57600080fd5b50610466610ff7565b6040516104739190612daa565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e9190612bd4565b61101d565b6040516104b09190612bb9565b60405180910390f35b3480156104c557600080fd5b506104ce611073565b6040516104db9190612c8a565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190612b5e565b611079565b6040516105189190612bb9565b60405180910390f35b34801561052d57600080fd5b5061053661117d565b6040516105439190612c8a565b60405180910390f35b34801561055857600080fd5b50610561611183565b60405161056e9190612daa565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190612bd4565b6111a9565b6040516105ab9190612bb9565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190612bd4565b6111ff565b6040516105e89190612c8a565b60405180910390f35b3480156105fd57600080fd5b50610606611248565b005b34801561061457600080fd5b5061062f600480360381019061062a9190612dc5565b611382565b005b34801561063d57600080fd5b50610646611410565b6040516106539190612daa565b60405180910390f35b34801561066857600080fd5b50610671611439565b60405161067e9190612aa3565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190612e05565b6114cb565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190612b5e565b61156f565b6040516106e49190612bb9565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190612b5e565b61163c565b6040516107219190612bb9565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190612e05565b61165a565b005b34801561075f57600080fd5b506107686116fe565b6040516107759190612c8a565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a09190612e05565b611704565b005b3480156107b357600080fd5b506107bc611851565b6040516107c99190612c8a565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f49190612e32565b611857565b6040516108069190612c8a565b60405180910390f35b34801561081b57600080fd5b5061083660048036038101906108319190612bd4565b6118de565b005b34801561084457600080fd5b5061085f600480360381019061085a9190612e72565b6119b5565b005b34801561086d57600080fd5b5061088860048036038101906108839190612bd4565b611a85565b005b34801561089657600080fd5b5061089f611c2d565b005b6060600580546108b090612ece565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc90612ece565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b5050505050905090565b6000610947610940611c4a565b8484611c52565b6001905092915050565b610959611c4a565b73ffffffffffffffffffffffffffffffffffffffff16610977611410565b73ffffffffffffffffffffffffffffffffffffffff16146109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c490612f4b565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b6000610a4e848484611e1b565b610b0f84610a5a611c4a565b610b0a8560405180606001604052806028815260200161398060289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ac0611c4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124599092919063ffffffff16565b611c52565b600190509392505050565b60006012905090565b6000610bcc610b30611c4a565b84610bc78560036000610b41611c4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ae90919063ffffffff16565b611c52565b6001905092915050565b600e60159054906101000a900460ff1681565b610bf1611c4a565b73ffffffffffffffffffffffffffffffffffffffff16610c0f611410565b73ffffffffffffffffffffffffffffffffffffffff1614610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c90612f4b565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd99190612f80565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190612f80565b6040518363ffffffff1660e01b8152600401610d81929190612fad565b6020604051808303816000875af1158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190612f80565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610e51611c4a565b73ffffffffffffffffffffffffffffffffffffffff16610e6f611410565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90612f4b565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f28611c4a565b73ffffffffffffffffffffffffffffffffffffffff16610f46611410565b73ffffffffffffffffffffffffffffffffffffffff1614610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390612f4b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b6000611083611c4a565b73ffffffffffffffffffffffffffffffffffffffff166110a1611410565b73ffffffffffffffffffffffffffffffffffffffff16146110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90612f4b565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611132929190612fd6565b6020604051808303816000875af1158015611151573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111759190613014565b905092915050565b600b5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611250611c4a565b73ffffffffffffffffffffffffffffffffffffffff1661126e611410565b73ffffffffffffffffffffffffffffffffffffffff16146112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90612f4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61138a611c4a565b73ffffffffffffffffffffffffffffffffffffffff166113a8611410565b73ffffffffffffffffffffffffffffffffffffffff16146113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f590612f4b565b60405180910390fd5b81600b8190555080600c819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606006805461144890612ece565b80601f016020809104026020016040519081016040528092919081815260200182805461147490612ece565b80156114c15780601f10611496576101008083540402835291602001916114c1565b820191906000526020600020905b8154815290600101906020018083116114a457829003601f168201915b5050505050905090565b6114d3611c4a565b73ffffffffffffffffffffffffffffffffffffffff166114f1611410565b73ffffffffffffffffffffffffffffffffffffffff1614611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e90612f4b565b60405180910390fd5b61154f610b1a565b600a61155b91906131a3565b8161156691906131ee565b60108190555050565b600061163261157c611c4a565b8461162d856040518060600160405280602581526020016139a860259139600360006115a6611c4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124599092919063ffffffff16565b611c52565b6001905092915050565b6000611650611649611c4a565b8484611e1b565b6001905092915050565b611662611c4a565b73ffffffffffffffffffffffffffffffffffffffff16611680611410565b73ffffffffffffffffffffffffffffffffffffffff16146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90612f4b565b60405180910390fd5b6116de610b1a565b600a6116ea91906131a3565b816116f591906131ee565b600f8190555050565b600c5481565b61170c611c4a565b73ffffffffffffffffffffffffffffffffffffffff1661172a611410565b73ffffffffffffffffffffffffffffffffffffffff1614611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790612f4b565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516117c790613261565b60006040518083038185875af1925050503d8060008114611804576040519150601f19603f3d011682016040523d82523d6000602084013e611809565b606091505b505090508061184d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611844906132c2565b60405180910390fd5b5050565b60105481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118e6611c4a565b73ffffffffffffffffffffffffffffffffffffffff16611904611410565b73ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190612f4b565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6119bd611c4a565b73ffffffffffffffffffffffffffffffffffffffff166119db611410565b73ffffffffffffffffffffffffffffffffffffffff1614611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2890612f4b565b60405180910390fd5b80600e60156101000a81548160ff0219169083151502179055507f4a4d2d81da99ab5c8fa132c1c87d7b3cd070a00ab9b3baef07d19c615b035aea81604051611a7a9190612bb9565b60405180910390a150565b611a8d611c4a565b73ffffffffffffffffffffffffffffffffffffffff16611aab611410565b73ffffffffffffffffffffffffffffffffffffffff1614611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af890612f4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790613354565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600d60006101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb8906133e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2790613478565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e0e9190612c8a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e819061350a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef09061359c565b60405180910390fd5b60008111611f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f339061362e565b60405180910390fd5b611f44611410565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fab57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120055750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561205f5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561211757600061206f836111ff565b9050600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120d6575060105482826120d3919061364e565b11155b612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c906136f4565b60405180910390fd5b505b6000612122306111ff565b90506000600f5482101590508080156121485750600e60149054906101000a900460ff16155b80156121a25750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156121ba5750600e60159054906101000a900460ff165b1561220457600f5491506001600e60146101000a81548160ff0219169083151502179055506121e8826124c4565b6000600e60146101000a81548160ff0219169083151502179055505b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122a55750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156122ba576122b58585856124d0565b612452565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361236d57600061233a6103e861232c600b548761276790919063ffffffff16565b61277d90919063ffffffff16565b905061234f818561279390919063ffffffff16565b935061235c8630836124d0565b6123678686866124d0565b50612451565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036124445760006124116103e861240360011515600d60009054906101000a900460ff161515146123f0576103e86123f4565b600c545b8761276790919063ffffffff16565b61277d90919063ffffffff16565b9050612426818561279390919063ffffffff16565b93506124338630836124d0565b61243e8686866124d0565b50612450565b61244f8585856124d0565b5b5b5b5050505050565b60008383111582906124a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124989190612aa3565b60405180910390fd5b5082840390509392505050565b600081836124bc919061364e565b905092915050565b6124cd816127a9565b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061350a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a59061359c565b60405180910390fd5b6125b9838383612a0e565b6126258160405180606001604052806026815260200161395a60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124599092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126ba81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ae90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161275a9190612c8a565b60405180910390a3505050565b6000818361277591906131ee565b905092915050565b6000818361278b9190613743565b905092915050565b600081836127a19190613774565b905092915050565b6000600267ffffffffffffffff8111156127c6576127c56137a8565b5b6040519080825280602002602001820160405280156127f45781602001602082028036833780820191505090505b509050308160008151811061280c5761280b6137d7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d79190612f80565b816001815181106128eb576128ea6137d7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061295230600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c52565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016129d89594939291906138ff565b600060405180830381600087803b1580156129f257600080fd5b505af1158015612a06573d6000803e3d6000fd5b505050505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a4d578082015181840152602081019050612a32565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a7582612a13565b612a7f8185612a1e565b9350612a8f818560208601612a2f565b612a9881612a59565b840191505092915050565b60006020820190508181036000830152612abd8184612a6a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612af582612aca565b9050919050565b612b0581612aea565b8114612b1057600080fd5b50565b600081359050612b2281612afc565b92915050565b6000819050919050565b612b3b81612b28565b8114612b4657600080fd5b50565b600081359050612b5881612b32565b92915050565b60008060408385031215612b7557612b74612ac5565b5b6000612b8385828601612b13565b9250506020612b9485828601612b49565b9150509250929050565b60008115159050919050565b612bb381612b9e565b82525050565b6000602082019050612bce6000830184612baa565b92915050565b600060208284031215612bea57612be9612ac5565b5b6000612bf884828501612b13565b91505092915050565b6000819050919050565b6000612c26612c21612c1c84612aca565b612c01565b612aca565b9050919050565b6000612c3882612c0b565b9050919050565b6000612c4a82612c2d565b9050919050565b612c5a81612c3f565b82525050565b6000602082019050612c756000830184612c51565b92915050565b612c8481612b28565b82525050565b6000602082019050612c9f6000830184612c7b565b92915050565b600080600060608486031215612cbe57612cbd612ac5565b5b6000612ccc86828701612b13565b9350506020612cdd86828701612b13565b9250506040612cee86828701612b49565b9150509250925092565b600060ff82169050919050565b612d0e81612cf8565b82525050565b6000602082019050612d296000830184612d05565b92915050565b612d3881612b9e565b8114612d4357600080fd5b50565b600081359050612d5581612d2f565b92915050565b60008060408385031215612d7257612d71612ac5565b5b6000612d8085828601612b13565b9250506020612d9185828601612d46565b9150509250929050565b612da481612aea565b82525050565b6000602082019050612dbf6000830184612d9b565b92915050565b60008060408385031215612ddc57612ddb612ac5565b5b6000612dea85828601612b49565b9250506020612dfb85828601612b49565b9150509250929050565b600060208284031215612e1b57612e1a612ac5565b5b6000612e2984828501612b49565b91505092915050565b60008060408385031215612e4957612e48612ac5565b5b6000612e5785828601612b13565b9250506020612e6885828601612b13565b9150509250929050565b600060208284031215612e8857612e87612ac5565b5b6000612e9684828501612d46565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ee657607f821691505b602082108103612ef957612ef8612e9f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f35602083612a1e565b9150612f4082612eff565b602082019050919050565b60006020820190508181036000830152612f6481612f28565b9050919050565b600081519050612f7a81612afc565b92915050565b600060208284031215612f9657612f95612ac5565b5b6000612fa484828501612f6b565b91505092915050565b6000604082019050612fc26000830185612d9b565b612fcf6020830184612d9b565b9392505050565b6000604082019050612feb6000830185612d9b565b612ff86020830184612c7b565b9392505050565b60008151905061300e81612d2f565b92915050565b60006020828403121561302a57613029612ac5565b5b600061303884828501612fff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156130c7578086048111156130a3576130a2613041565b5b60018516156130b25780820291505b80810290506130c085613070565b9450613087565b94509492505050565b6000826130e0576001905061319c565b816130ee576000905061319c565b8160018114613104576002811461310e5761313d565b600191505061319c565b60ff8411156131205761311f613041565b5b8360020a91508482111561313757613136613041565b5b5061319c565b5060208310610133831016604e8410600b84101617156131725782820a90508381111561316d5761316c613041565b5b61319c565b61317f848484600161307d565b9250905081840481111561319657613195613041565b5b81810290505b9392505050565b60006131ae82612b28565b91506131b983612cf8565b92506131e67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846130d0565b905092915050565b60006131f982612b28565b915061320483612b28565b925082820261321281612b28565b9150828204841483151761322957613228613041565b5b5092915050565b600081905092915050565b50565b600061324b600083613230565b91506132568261323b565b600082019050919050565b600061326c8261323e565b9150819050919050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006132ac601283612a1e565b91506132b782613276565b602082019050919050565b600060208201905081810360008301526132db8161329f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061333e602683612a1e565b9150613349826132e2565b604082019050919050565b6000602082019050818103600083015261336d81613331565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133d0602483612a1e565b91506133db82613374565b604082019050919050565b600060208201905081810360008301526133ff816133c3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613462602283612a1e565b915061346d82613406565b604082019050919050565b6000602082019050818103600083015261349181613455565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134f4602583612a1e565b91506134ff82613498565b604082019050919050565b60006020820190508181036000830152613523816134e7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613586602383612a1e565b91506135918261352a565b604082019050919050565b600060208201905081810360008301526135b581613579565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613618602983612a1e565b9150613623826135bc565b604082019050919050565b600060208201905081810360008301526136478161360b565b9050919050565b600061365982612b28565b915061366483612b28565b925082820190508082111561367c5761367b613041565b5b92915050565b7f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e60008201527f6700000000000000000000000000000000000000000000000000000000000000602082015250565b60006136de602183612a1e565b91506136e982613682565b604082019050919050565b6000602082019050818103600083015261370d816136d1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061374e82612b28565b915061375983612b28565b92508261376957613768613714565b5b828204905092915050565b600061377f82612b28565b915061378a83612b28565b92508282039050818111156137a2576137a1613041565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061382b61382661382184613806565b612c01565b612b28565b9050919050565b61383b81613810565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61387681612aea565b82525050565b6000613888838361386d565b60208301905092915050565b6000602082019050919050565b60006138ac82613841565b6138b6818561384c565b93506138c18361385d565b8060005b838110156138f25781516138d9888261387c565b97506138e483613894565b9250506001810190506138c5565b5085935050505092915050565b600060a0820190506139146000830188612c7b565b6139216020830187613832565b818103604083015261393381866138a1565b90506139426060830185612d9b565b61394f6080830184612c7b565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122009616c07ca9d02dfa69300dd05ce8e859b77133441b9b8bb50bbafd92ce09b8d64736f6c63430008130033

Deployed Bytecode Sourcemap

31001:9005:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11312:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13949:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34552:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31547:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12647:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14724:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12443:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15645:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31682:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35046:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33716:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34014:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31603:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36332:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31737:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36109:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31386:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31275:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34189:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12864:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9297:172;;;;;;;;;;;;;:::i;:::-;;34355:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8994:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11584:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34871:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16497:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13285:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34697:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31459:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35787:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31790:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13577:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33871:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35412:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9487:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39285:83;;;;;;;;;;;;;:::i;:::-;;11312:116;11366:13;11407:5;11400:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11312:116;:::o;13949:193::-;14032:4;14057:39;14066:12;:10;:12::i;:::-;14080:7;14089:6;14057:8;:39::i;:::-;14122:4;14115:11;;13949:193;;;;:::o;34552:117::-;9184:12;:10;:12::i;:::-;9173:23;;:7;:5;:7::i;:::-;:23;;;9165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34648:5:::1;34634:11;;:19;;;;;;;;;;;;;;;;;;34552:117:::0;:::o;31547:41::-;;;;;;;;;;;;;:::o;12647:124::-;12708:7;12743:12;;12736:19;;12647:124;:::o;14724:419::-;14896:4;14921:36;14931:6;14939:9;14950:6;14921:9;:36::i;:::-;14976:121;14985:6;14993:12;:10;:12::i;:::-;15007:89;15045:6;15007:89;;;;;;;;;;;;;;;;;:11;:19;15019:6;15007:19;;;;;;;;;;;;;;;:33;15027:12;:10;:12::i;:::-;15007:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;14976:8;:121::i;:::-;15123:4;15116:11;;14724:419;;;;;:::o;12443:109::-;12501:5;12534:2;12527:9;;12443:109;:::o;15645:242::-;15733:4;15758:83;15767:12;:10;:12::i;:::-;15781:7;15790:50;15829:10;15790:11;:25;15802:12;:10;:12::i;:::-;15790:25;;;;;;;;;;;;;;;:34;15816:7;15790:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;15758:8;:83::i;:::-;15867:4;15860:11;;15645:242;;;;:::o;31682:40::-;;;;;;;;;;;;;:::o;35046:350::-;9184:12;:10;:12::i;:::-;9173:23;;:7;:5;:7::i;:::-;:23;;;9165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35129:35:::1;35186:9;35129:67;;35249:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35231:56;;;35296:4;35303:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35231:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35215:13;;:112;;;;;;;;;;;;;;;;;;35364:16;35346:15;;:34;;;;;;;;;;;;;;;;;;35110:286;35046:350:::0;:::o;33716:127::-;9184:12;:10;:12::i;:::-;9173:23;;:7;:5;:7::i;:::-;:23;;;9165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33823:4:::1;33793:18;:27;33812:7;33793:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33716:127:::0;:::o;34014:159::-;9184:12;:10;:12::i;:::-;9173:23;;:7;:5;:7::i;:::-;:23;;;9165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34152:5:::1;34116:24;:33;34141:7;34116:33;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;34014:159:::0;;:::o;31603:28::-;;;;;;;;;;;;;:::o;36332:139::-;36396:4;36428:18;:27;36447:7;36428:27;;;;;;;;;;;;;;;;;;;;;;;;;36421:34;;36332:139;;;:::o;31737:38::-;;;;:::o;36109:197::-;36206:12;9184;:10;:12::i;:::-;9173:23;;:7;:5;:7::i;:::-;:23;;;9165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36248:12:::1;36241:29;;;36271:10;36283:6;36241:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36234:56;;36109:197:::0;;;;:::o;31386:29::-;;;;:::o;31275:27::-;;;;;;;;;;;;;:::o;34189:150::-;34259:4;34290:24;:33;34315:7;34290:33;;;;;;;;;;;;;;;;;;;;;;;;;34283:40;;34189:150;;;:::o;12864:143::-;12938:7;12973:9;:18;12983:7;12973:18;;;;;;;;;;;;;;;;12966:25;;12864:143;;;:::o;9297:172::-;9184:12;:10;:12::i;:::-;9173:23;;:7;:5;:7::i;:::-;:23;;;9165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9412:1:::1;9375:40;;9396:6;::::0;::::1;;;;;;;;9375:40;;;;;;;;;;;;9451:1;9434:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;9297:172::o:0;34355:181::-;9184:12;:10;:12::i;:::-;9173:23;;:7;:5;:7::i;:::-;:23;;;9165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34472:6:::1;34459:10;:19;;;;34511:7;34497:11;:21;;;;34355:181:::0;;:::o;8994:103::-;9040:7;9075:6;;;;;;;;;;;9068:13;;8994:103;:::o;11584:120::-;11640:13;11681:7;11674:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11584:120;:::o;34871:159::-;9184:12;:10;:12::i;:::-;9173:23;;:7;:5;:7::i;:::-;:23;;;9165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35004:10:::1;:8;:10::i;:::-;34999:2;:15;;;;:::i;:::-;34979:17;:35;;;;:::i;:::-;34959:17;:55;;;;34871:159:::0;:::o;16497:293::-;16590:4;16615:129;16624:12;:10;:12::i;:::-;16638:7;16647:96;16686:15;16647:96;;;;;;;;;;;;;;;;;:11;:25;16659:12;:10;:12::i;:::-;16647:25;;;;;;;;;;;;;;;:34;16673:7;16647:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;16615:8;:129::i;:::-;16770:4;16763:11;;16497:293;;;;:::o;13285:199::-;13371:4;13396:42;13406:12;:10;:12::i;:::-;13420:9;13431:6;13396:9;:42::i;:::-;13464:4;13457:11;;13285:199;;;;:::o;34697:158::-;9184:12;:10;:12::i;:::-;9173:23;;:7;:5;:7::i;:::-;:23;;;9165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34829:10:::1;:8;:10::i;:::-;34823:2;:16;;;;:::i;:::-;34814:6;:25;;;;:::i;:::-;34788:23;:51;;;;34697:158:::0;:::o;31459:30::-;;;;:::o;35787:266::-;9184:12;:10;:12::i;:::-;9173:23;;:7;:5;:7::i;:::-;:23;;;9165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35935:9:::1;35949:6:::0;::::1;;;;;;;;;;:11;;35968:6;35949:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35934:45;;;36006:4;35998:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;35848:205;35787:266:::0;:::o;31790:32::-;;;;:::o;13577:167::-;13666:7;13701:11;:18;13713:5;13701:18;;;;;;;;;;;;;;;:27;13720:7;13701:27;;;;;;;;;;;;;;;;13694:34;;13577:167;;;;:::o;33871:126::-;9184:12;:10;:12::i;:::-;9173:23;;:7;:5;:7::i;:::-;:23;;;9165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33976:5:::1;33946:18;:27;33965:7;33946:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;33871:126:::0;:::o;35412:197::-;9184:12;:10;:12::i;:::-;9173:23;;:7;:5;:7::i;:::-;:23;;;9165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35523:8:::1;35499:21;;:32;;;;;;;;;;;;;;;;;;35555:38;35584:8;35555:38;;;;;;:::i;:::-;;;;;;;;35412:197:::0;:::o;9487:276::-;9184:12;:10;:12::i;:::-;9173:23;;:7;:5;:7::i;:::-;:23;;;9165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9604:1:::1;9584:22;;:8;:22;;::::0;9576:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9702:8;9673:38;;9694:6;::::0;::::1;;;;;;;;9673:38;;;;;;;;;;;;9739:8;9730:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;9487:276:::0;:::o;39285:83::-;39347:5;39338:6;;:14;;;;;;;;;;;;;;;;;;39285:83::o;4332:114::-;4385:7;4420:10;4413:17;;4332:114;:::o;20256:452::-;20449:1;20432:19;;:5;:19;;;20424:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20538:1;20519:21;;:7;:21;;;20511:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20630:6;20600:11;:18;20612:5;20600:18;;;;;;;;;;;;;;;:27;20619:7;20600:27;;;;;;;;;;;;;;;:36;;;;20676:7;20660:32;;20669:5;20660:32;;;20685:6;20660:32;;;;;;:::i;:::-;;;;;;;;20256:452;;;:::o;36487:2618::-;36674:1;36658:18;;:4;:18;;;36650:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36759:1;36745:16;;:2;:16;;;36737:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36837:1;36828:6;:10;36820:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36955:7;:5;:7::i;:::-;36947:15;;:4;:15;;;;:59;;;;;37001:4;36987:19;;:2;:19;;;;36947:59;:102;;;;;37037:12;;;;;;;;;;;37031:18;;:2;:18;;;;36947:102;:146;;;;;37080:13;;;;;;;;;;;37074:19;;:2;:19;;;;36947:146;36921:450;;;37137:22;37162:13;37172:2;37162:9;:13::i;:::-;37137:38;;37206:24;:28;37231:2;37206:28;;;;;;;;;;;;;;;;;;;;;;;;;:78;;;;37266:17;;37256:6;37239:14;:23;;;;:::i;:::-;:44;;37206:78;37198:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;37114:257;36921:450;37391:28;37422:24;37440:4;37422:9;:24::i;:::-;37391:55;;37466:24;37517:23;;37493:20;:47;;37466:74;;37585:19;:61;;;;;37630:16;;;;;;;;;;;37629:17;37585:61;:107;;;;;37679:13;;;;;;;;;;;37671:21;;:4;:21;;;;37585:107;:153;;;;;37717:21;;;;;;;;;;;37585:153;37559:434;;;37804:23;;37781:46;;37869:4;37850:16;;:23;;;;;;;;;;;;;;;;;;37896:30;37905:20;37896:8;:30::i;:::-;37968:5;37949:16;;:24;;;;;;;;;;;;;;;;;;37559:434;38032:18;:24;38051:4;38032:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;38060:18;:22;38079:2;38060:22;;;;;;;;;;;;;;;;;;;;;;;;;38032:50;38029:1045;;;38102:33;38118:4;38124:2;38128:6;38102:15;:33::i;:::-;38029:1045;;;38211:13;;;;;;;;;;;38203:21;;:4;:21;;;38199:856;;38277:17;38297:32;38324:4;38297:22;38308:10;;38297:6;:10;;:22;;;;:::i;:::-;:26;;:32;;;;:::i;:::-;38277:52;;38360:21;38371:9;38360:6;:10;;:21;;;;:::i;:::-;38352:29;;38404:47;38420:4;38434;38441:9;38404:15;:47::i;:::-;38474:33;38490:4;38496:2;38500:6;38474:15;:33::i;:::-;38247:284;38199:856;;;38569:13;;;;;;;;;;;38563:19;;:2;:19;;;38559:496;;38636:17;38656:51;38702:4;38656:41;38675:4;38667:12;;:6;;;;;;;;;;;:12;;;:29;;38692:4;38667:29;;;38680:11;;38667:29;38656:6;:10;;:41;;;;:::i;:::-;:45;;:51;;;;:::i;:::-;38636:71;;38738:21;38749:9;38738:6;:10;;:21;;;;:::i;:::-;38730:29;;38782:46;38798:4;38812;38818:9;38782:15;:46::i;:::-;38851:33;38867:4;38873:2;38877:6;38851:15;:33::i;:::-;38605:303;38559:496;;;38998:33;39014:4;39020:2;39024:6;38998:15;:33::i;:::-;38559:496;38199:856;38029:1045;36631:2474;;36487:2618;;;:::o;3476:246::-;3562:7;3636:1;3631;:6;;3639:12;3623:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3686:1;3682;:5;3675:12;;3476:246;;;;;:::o;2796:114::-;2854:7;2893:1;2889;:5;;;;:::i;:::-;2882:12;;2796:114;;;;:::o;39121:141::-;39194:33;39211:15;39194:16;:33::i;:::-;39121:141;:::o;17387:661::-;17585:1;17567:20;;:6;:20;;;17559:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17677:1;17656:23;;:9;:23;;;17648:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17740:47;17761:6;17769:9;17780:6;17740:20;:47::i;:::-;17828:71;17850:6;17828:71;;;;;;;;;;;;;;;;;:9;:17;17838:6;17828:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;17808:9;:17;17818:6;17808:17;;;;;;;;;;;;;;;:91;;;;17941:32;17966:6;17941:9;:20;17951:9;17941:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;17918:9;:20;17928:9;17918:20;;;;;;;;;;;;;;;:55;;;;18014:9;17997:35;;18006:6;17997:35;;;18025:6;17997:35;;;;;;:::i;:::-;;;;;;;;17387:661;;;:::o;3060:114::-;3118:7;3157:1;3153;:5;;;;:::i;:::-;3146:12;;3060:114;;;;:::o;3202:::-;3260:7;3299:1;3295;:5;;;;:::i;:::-;3288:12;;3202:114;;;;:::o;2928:::-;2986:7;3025:1;3021;:5;;;;:::i;:::-;3014:12;;2928:114;;;;:::o;39396:593::-;39470:21;39508:1;39494:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39470:40;;39547:4;39529;39534:1;39529:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39581:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39571:4;39576:1;39571:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39622:62;39639:4;39654:15;;;;;;;;;;;39672:11;39622:8;:62::i;:::-;39703:15;;;;;;;;;;;:66;;;39792:11;39826:1;39878:4;39905:11;;;;;;;;;;;39939:15;39703:270;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39451:538;39396:593;:::o;21418:157::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:116::-;6236:21;6251:5;6236:21;:::i;:::-;6229:5;6226:32;6216:60;;6272:1;6269;6262:12;6216:60;6166:116;:::o;6288:133::-;6331:5;6369:6;6356:20;6347:29;;6385:30;6409:5;6385:30;:::i;:::-;6288:133;;;;:::o;6427:468::-;6492:6;6500;6549:2;6537:9;6528:7;6524:23;6520:32;6517:119;;;6555:79;;:::i;:::-;6517:119;6675:1;6700:53;6745:7;6736:6;6725:9;6721:22;6700:53;:::i;:::-;6690:63;;6646:117;6802:2;6828:50;6870:7;6861:6;6850:9;6846:22;6828:50;:::i;:::-;6818:60;;6773:115;6427:468;;;;;:::o;6901:118::-;6988:24;7006:5;6988:24;:::i;:::-;6983:3;6976:37;6901:118;;:::o;7025:222::-;7118:4;7156:2;7145:9;7141:18;7133:26;;7169:71;7237:1;7226:9;7222:17;7213:6;7169:71;:::i;:::-;7025:222;;;;:::o;7253:474::-;7321:6;7329;7378:2;7366:9;7357:7;7353:23;7349:32;7346:119;;;7384:79;;:::i;:::-;7346:119;7504:1;7529:53;7574:7;7565:6;7554:9;7550:22;7529:53;:::i;:::-;7519:63;;7475:117;7631:2;7657:53;7702:7;7693:6;7682:9;7678:22;7657:53;:::i;:::-;7647:63;;7602:118;7253:474;;;;;:::o;7733:329::-;7792:6;7841:2;7829:9;7820:7;7816:23;7812:32;7809:119;;;7847:79;;:::i;:::-;7809:119;7967:1;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7938:117;7733:329;;;;:::o;8068:474::-;8136:6;8144;8193:2;8181:9;8172:7;8168:23;8164:32;8161:119;;;8199:79;;:::i;:::-;8161:119;8319:1;8344:53;8389:7;8380:6;8369:9;8365:22;8344:53;:::i;:::-;8334:63;;8290:117;8446:2;8472:53;8517:7;8508:6;8497:9;8493:22;8472:53;:::i;:::-;8462:63;;8417:118;8068:474;;;;;:::o;8548:323::-;8604:6;8653:2;8641:9;8632:7;8628:23;8624:32;8621:119;;;8659:79;;:::i;:::-;8621:119;8779:1;8804:50;8846:7;8837:6;8826:9;8822:22;8804:50;:::i;:::-;8794:60;;8750:114;8548:323;;;;:::o;8877:180::-;8925:77;8922:1;8915:88;9022:4;9019:1;9012:15;9046:4;9043:1;9036:15;9063:320;9107:6;9144:1;9138:4;9134:12;9124:22;;9191:1;9185:4;9181:12;9212:18;9202:81;;9268:4;9260:6;9256:17;9246:27;;9202:81;9330:2;9322:6;9319:14;9299:18;9296:38;9293:84;;9349:18;;:::i;:::-;9293:84;9114:269;9063:320;;;:::o;9389:182::-;9529:34;9525:1;9517:6;9513:14;9506:58;9389:182;:::o;9577:366::-;9719:3;9740:67;9804:2;9799:3;9740:67;:::i;:::-;9733:74;;9816:93;9905:3;9816:93;:::i;:::-;9934:2;9929:3;9925:12;9918:19;;9577:366;;;:::o;9949:419::-;10115:4;10153:2;10142:9;10138:18;10130:26;;10202:9;10196:4;10192:20;10188:1;10177:9;10173:17;10166:47;10230:131;10356:4;10230:131;:::i;:::-;10222:139;;9949:419;;;:::o;10374:143::-;10431:5;10462:6;10456:13;10447:22;;10478:33;10505:5;10478:33;:::i;:::-;10374:143;;;;:::o;10523:351::-;10593:6;10642:2;10630:9;10621:7;10617:23;10613:32;10610:119;;;10648:79;;:::i;:::-;10610:119;10768:1;10793:64;10849:7;10840:6;10829:9;10825:22;10793:64;:::i;:::-;10783:74;;10739:128;10523:351;;;;:::o;10880:332::-;11001:4;11039:2;11028:9;11024:18;11016:26;;11052:71;11120:1;11109:9;11105:17;11096:6;11052:71;:::i;:::-;11133:72;11201:2;11190:9;11186:18;11177:6;11133:72;:::i;:::-;10880:332;;;;;:::o;11218:::-;11339:4;11377:2;11366:9;11362:18;11354:26;;11390:71;11458:1;11447:9;11443:17;11434:6;11390:71;:::i;:::-;11471:72;11539:2;11528:9;11524:18;11515:6;11471:72;:::i;:::-;11218:332;;;;;:::o;11556:137::-;11610:5;11641:6;11635:13;11626:22;;11657:30;11681:5;11657:30;:::i;:::-;11556:137;;;;:::o;11699:345::-;11766:6;11815:2;11803:9;11794:7;11790:23;11786:32;11783:119;;;11821:79;;:::i;:::-;11783:119;11941:1;11966:61;12019:7;12010:6;11999:9;11995:22;11966:61;:::i;:::-;11956:71;;11912:125;11699:345;;;;:::o;12050:180::-;12098:77;12095:1;12088:88;12195:4;12192:1;12185:15;12219:4;12216:1;12209:15;12236:102;12278:8;12325:5;12322:1;12318:13;12297:34;;12236:102;;;:::o;12344:848::-;12405:5;12412:4;12436:6;12427:15;;12460:5;12451:14;;12474:712;12495:1;12485:8;12482:15;12474:712;;;12590:4;12585:3;12581:14;12575:4;12572:24;12569:50;;;12599:18;;:::i;:::-;12569:50;12649:1;12639:8;12635:16;12632:451;;;13064:4;13057:5;13053:16;13044:25;;12632:451;13114:4;13108;13104:15;13096:23;;13144:32;13167:8;13144:32;:::i;:::-;13132:44;;12474:712;;;12344:848;;;;;;;:::o;13198:1073::-;13252:5;13443:8;13433:40;;13464:1;13455:10;;13466:5;;13433:40;13492:4;13482:36;;13509:1;13500:10;;13511:5;;13482:36;13578:4;13626:1;13621:27;;;;13662:1;13657:191;;;;13571:277;;13621:27;13639:1;13630:10;;13641:5;;;13657:191;13702:3;13692:8;13689:17;13686:43;;;13709:18;;:::i;:::-;13686:43;13758:8;13755:1;13751:16;13742:25;;13793:3;13786:5;13783:14;13780:40;;;13800:18;;:::i;:::-;13780:40;13833:5;;;13571:277;;13957:2;13947:8;13944:16;13938:3;13932:4;13929:13;13925:36;13907:2;13897:8;13894:16;13889:2;13883:4;13880:12;13876:35;13860:111;13857:246;;;14013:8;14007:4;14003:19;13994:28;;14048:3;14041:5;14038:14;14035:40;;;14055:18;;:::i;:::-;14035:40;14088:5;;13857:246;14128:42;14166:3;14156:8;14150:4;14147:1;14128:42;:::i;:::-;14113:57;;;;14202:4;14197:3;14193:14;14186:5;14183:25;14180:51;;;14211:18;;:::i;:::-;14180:51;14260:4;14253:5;14249:16;14240:25;;13198:1073;;;;;;:::o;14277:281::-;14335:5;14359:23;14377:4;14359:23;:::i;:::-;14351:31;;14403:25;14419:8;14403:25;:::i;:::-;14391:37;;14447:104;14484:66;14474:8;14468:4;14447:104;:::i;:::-;14438:113;;14277:281;;;;:::o;14564:410::-;14604:7;14627:20;14645:1;14627:20;:::i;:::-;14622:25;;14661:20;14679:1;14661:20;:::i;:::-;14656:25;;14716:1;14713;14709:9;14738:30;14756:11;14738:30;:::i;:::-;14727:41;;14917:1;14908:7;14904:15;14901:1;14898:22;14878:1;14871:9;14851:83;14828:139;;14947:18;;:::i;:::-;14828:139;14612:362;14564:410;;;;:::o;14980:147::-;15081:11;15118:3;15103:18;;14980:147;;;;:::o;15133:114::-;;:::o;15253:398::-;15412:3;15433:83;15514:1;15509:3;15433:83;:::i;:::-;15426:90;;15525:93;15614:3;15525:93;:::i;:::-;15643:1;15638:3;15634:11;15627:18;;15253:398;;;:::o;15657:379::-;15841:3;15863:147;16006:3;15863:147;:::i;:::-;15856:154;;16027:3;16020:10;;15657:379;;;:::o;16042:168::-;16182:20;16178:1;16170:6;16166:14;16159:44;16042:168;:::o;16216:366::-;16358:3;16379:67;16443:2;16438:3;16379:67;:::i;:::-;16372:74;;16455:93;16544:3;16455:93;:::i;:::-;16573:2;16568:3;16564:12;16557:19;;16216:366;;;:::o;16588:419::-;16754:4;16792:2;16781:9;16777:18;16769:26;;16841:9;16835:4;16831:20;16827:1;16816:9;16812:17;16805:47;16869:131;16995:4;16869:131;:::i;:::-;16861:139;;16588:419;;;:::o;17013:225::-;17153:34;17149:1;17141:6;17137:14;17130:58;17222:8;17217:2;17209:6;17205:15;17198:33;17013:225;:::o;17244:366::-;17386:3;17407:67;17471:2;17466:3;17407:67;:::i;:::-;17400:74;;17483:93;17572:3;17483:93;:::i;:::-;17601:2;17596:3;17592:12;17585:19;;17244:366;;;:::o;17616:419::-;17782:4;17820:2;17809:9;17805:18;17797:26;;17869:9;17863:4;17859:20;17855:1;17844:9;17840:17;17833:47;17897:131;18023:4;17897:131;:::i;:::-;17889:139;;17616:419;;;:::o;18041:223::-;18181:34;18177:1;18169:6;18165:14;18158:58;18250:6;18245:2;18237:6;18233:15;18226:31;18041:223;:::o;18270:366::-;18412:3;18433:67;18497:2;18492:3;18433:67;:::i;:::-;18426:74;;18509:93;18598:3;18509:93;:::i;:::-;18627:2;18622:3;18618:12;18611:19;;18270:366;;;:::o;18642:419::-;18808:4;18846:2;18835:9;18831:18;18823:26;;18895:9;18889:4;18885:20;18881:1;18870:9;18866:17;18859:47;18923:131;19049:4;18923:131;:::i;:::-;18915:139;;18642:419;;;:::o;19067:221::-;19207:34;19203:1;19195:6;19191:14;19184:58;19276:4;19271:2;19263:6;19259:15;19252:29;19067:221;:::o;19294:366::-;19436:3;19457:67;19521:2;19516:3;19457:67;:::i;:::-;19450:74;;19533:93;19622:3;19533:93;:::i;:::-;19651:2;19646:3;19642:12;19635:19;;19294:366;;;:::o;19666:419::-;19832:4;19870:2;19859:9;19855:18;19847:26;;19919:9;19913:4;19909:20;19905:1;19894:9;19890:17;19883:47;19947:131;20073:4;19947:131;:::i;:::-;19939:139;;19666:419;;;:::o;20091:224::-;20231:34;20227:1;20219:6;20215:14;20208:58;20300:7;20295:2;20287:6;20283:15;20276:32;20091:224;:::o;20321:366::-;20463:3;20484:67;20548:2;20543:3;20484:67;:::i;:::-;20477:74;;20560:93;20649:3;20560:93;:::i;:::-;20678:2;20673:3;20669:12;20662:19;;20321:366;;;:::o;20693:419::-;20859:4;20897:2;20886:9;20882:18;20874:26;;20946:9;20940:4;20936:20;20932:1;20921:9;20917:17;20910:47;20974:131;21100:4;20974:131;:::i;:::-;20966:139;;20693:419;;;:::o;21118:222::-;21258:34;21254:1;21246:6;21242:14;21235:58;21327:5;21322:2;21314:6;21310:15;21303:30;21118:222;:::o;21346:366::-;21488:3;21509:67;21573:2;21568:3;21509:67;:::i;:::-;21502:74;;21585:93;21674:3;21585:93;:::i;:::-;21703:2;21698:3;21694:12;21687:19;;21346:366;;;:::o;21718:419::-;21884:4;21922:2;21911:9;21907:18;21899:26;;21971:9;21965:4;21961:20;21957:1;21946:9;21942:17;21935:47;21999:131;22125:4;21999:131;:::i;:::-;21991:139;;21718:419;;;:::o;22143:228::-;22283:34;22279:1;22271:6;22267:14;22260:58;22352:11;22347:2;22339:6;22335:15;22328:36;22143:228;:::o;22377:366::-;22519:3;22540:67;22604:2;22599:3;22540:67;:::i;:::-;22533:74;;22616:93;22705:3;22616:93;:::i;:::-;22734:2;22729:3;22725:12;22718:19;;22377:366;;;:::o;22749:419::-;22915:4;22953:2;22942:9;22938:18;22930:26;;23002:9;22996:4;22992:20;22988:1;22977:9;22973:17;22966:47;23030:131;23156:4;23030:131;:::i;:::-;23022:139;;22749:419;;;:::o;23174:191::-;23214:3;23233:20;23251:1;23233:20;:::i;:::-;23228:25;;23267:20;23285:1;23267:20;:::i;:::-;23262:25;;23310:1;23307;23303:9;23296:16;;23331:3;23328:1;23325:10;23322:36;;;23338:18;;:::i;:::-;23322:36;23174:191;;;;:::o;23371:220::-;23511:34;23507:1;23499:6;23495:14;23488:58;23580:3;23575:2;23567:6;23563:15;23556:28;23371:220;:::o;23597:366::-;23739:3;23760:67;23824:2;23819:3;23760:67;:::i;:::-;23753:74;;23836:93;23925:3;23836:93;:::i;:::-;23954:2;23949:3;23945:12;23938:19;;23597:366;;;:::o;23969:419::-;24135:4;24173:2;24162:9;24158:18;24150:26;;24222:9;24216:4;24212:20;24208:1;24197:9;24193:17;24186:47;24250:131;24376:4;24250:131;:::i;:::-;24242:139;;23969:419;;;:::o;24394:180::-;24442:77;24439:1;24432:88;24539:4;24536:1;24529:15;24563:4;24560:1;24553:15;24580:185;24620:1;24637:20;24655:1;24637:20;:::i;:::-;24632:25;;24671:20;24689:1;24671:20;:::i;:::-;24666:25;;24710:1;24700:35;;24715:18;;:::i;:::-;24700:35;24757:1;24754;24750:9;24745:14;;24580:185;;;;:::o;24771:194::-;24811:4;24831:20;24849:1;24831:20;:::i;:::-;24826:25;;24865:20;24883:1;24865:20;:::i;:::-;24860:25;;24909:1;24906;24902:9;24894:17;;24933:1;24927:4;24924:11;24921:37;;;24938:18;;:::i;:::-;24921:37;24771:194;;;;:::o;24971:180::-;25019:77;25016:1;25009:88;25116:4;25113:1;25106:15;25140:4;25137:1;25130:15;25157:180;25205:77;25202:1;25195:88;25302:4;25299:1;25292:15;25326:4;25323:1;25316:15;25343:85;25388:7;25417:5;25406:16;;25343:85;;;:::o;25434:158::-;25492:9;25525:61;25543:42;25552:32;25578:5;25552:32;:::i;:::-;25543:42;:::i;:::-;25525:61;:::i;:::-;25512:74;;25434:158;;;:::o;25598:147::-;25693:45;25732:5;25693:45;:::i;:::-;25688:3;25681:58;25598:147;;:::o;25751:114::-;25818:6;25852:5;25846:12;25836:22;;25751:114;;;:::o;25871:184::-;25970:11;26004:6;25999:3;25992:19;26044:4;26039:3;26035:14;26020:29;;25871:184;;;;:::o;26061:132::-;26128:4;26151:3;26143:11;;26181:4;26176:3;26172:14;26164:22;;26061:132;;;:::o;26199:108::-;26276:24;26294:5;26276:24;:::i;:::-;26271:3;26264:37;26199:108;;:::o;26313:179::-;26382:10;26403:46;26445:3;26437:6;26403:46;:::i;:::-;26481:4;26476:3;26472:14;26458:28;;26313:179;;;;:::o;26498:113::-;26568:4;26600;26595:3;26591:14;26583:22;;26498:113;;;:::o;26647:732::-;26766:3;26795:54;26843:5;26795:54;:::i;:::-;26865:86;26944:6;26939:3;26865:86;:::i;:::-;26858:93;;26975:56;27025:5;26975:56;:::i;:::-;27054:7;27085:1;27070:284;27095:6;27092:1;27089:13;27070:284;;;27171:6;27165:13;27198:63;27257:3;27242:13;27198:63;:::i;:::-;27191:70;;27284:60;27337:6;27284:60;:::i;:::-;27274:70;;27130:224;27117:1;27114;27110:9;27105:14;;27070:284;;;27074:14;27370:3;27363:10;;26771:608;;;26647:732;;;;:::o;27385:831::-;27648:4;27686:3;27675:9;27671:19;27663:27;;27700:71;27768:1;27757:9;27753:17;27744:6;27700:71;:::i;:::-;27781:80;27857:2;27846:9;27842:18;27833:6;27781:80;:::i;:::-;27908:9;27902:4;27898:20;27893:2;27882:9;27878:18;27871:48;27936:108;28039:4;28030:6;27936:108;:::i;:::-;27928:116;;28054:72;28122:2;28111:9;28107:18;28098:6;28054:72;:::i;:::-;28136:73;28204:3;28193:9;28189:19;28180:6;28136:73;:::i;:::-;27385:831;;;;;;;;:::o

Swarm Source

ipfs://09616c07ca9d02dfa69300dd05ce8e859b77133441b9b8bb50bbafd92ce09b8d
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.