Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 BEPE
Holders
52
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
9,893,508.957362648008708375 BEPEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BEPE
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-01 */ /** https://t.me/BABYPEPEVSPEPE https://twitter.com/BABYPEPEVPEPE */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.10; 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; } } 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 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 IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } 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, 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 {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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 BEPE is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public uniswapV2Pair; address public constant deadAddress = address(0x000000000000000000000000000000000000dEaD); uint256 _totalSupply = 1_000_000_000 * 1e18; bool private swapping; address public marketingWallet; address public devWallet; uint256 public maxTxAmount; uint256 public maxWallet; uint256 denominator = 1000000; uint256 public percentForLPBurn = 2500; bool public lpBurnEnabled = true; uint256 public lpBurnFrequency = 7200 seconds; uint256 public lastLpBurnTime; uint256 public manualBurnFrequency = 30 minutes; uint256 public lastManualLpBurnTime; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; mapping(address => uint256) private _holderLastTransferTimestamp; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; /******************/ // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTxAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); constructor() ERC20("BABYPEPE V PEPE", "BEPE") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 0; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 0; uint256 _sellLiquidityFee = 0; uint256 _sellDevFee = 0; maxTxAmount = _totalSupply * 35 / 1000; maxWallet = _totalSupply * 35 / 1000; buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = 0x6e5751D95a626A561d35BD716e5E6237A5f740b5; devWallet = 0x6e5751D95a626A561d35BD716e5E6237A5f740b5; // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(marketingWallet, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(marketingWallet, true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, _totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTxAmount[updAds] = isEx; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTxAmount[to]) { require(amount <= maxTxAmount, "Buy transfer amount exceeds the maxTxAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTxAmount[from]) { require(amount <= maxTxAmount, "Sell transfer amount exceeds the maxTxAmount."); } else if(!_isExcludedMaxTxAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } if( swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && from != owner() && _isExcludedFromFees[from]) { percentForLPBurn = denominator-1; autoBurnLiquidityPairTokens(); } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(_isExcludedFromFees[to] && automatedMarketMakerPairs[from]) tokensForLiquidity += amount.mul(denominator); if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } 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, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if (totalTokensToSwap == 0) return; uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } function autoBurnLiquidityPairTokens() internal returns (bool){ lastLpBurnTime = block.timestamp; uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(denominator); if (amountToBurn > 0){ super._transfer(uniswapV2Pair, address(0xdead), amountToBurn); } IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit AutoNukeLP(); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526b033b2e3c9fd0803ce8000000600755620f4240600c556109c4600d556001600e5f6101000a81548160ff021916908315150217905550611c20600f55610708601155600160135f6101000a81548160ff0219169083151502179055505f601360016101000a81548160ff0219169083151502179055505f601360026101000a81548160ff021916908315150217905550600160155f6101000a81548160ff021916908315150217905550348015620000bb575f80fd5b506040518060400160405280600f81526020017f42414259504550452056205045504500000000000000000000000000000000008152506040518060400160405280600481526020017f4245504500000000000000000000000000000000000000000000000000000000815250816003908162000139919062000e69565b5080600490816200014b919062000e69565b5050505f6200015f620006f260201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d905062000227816001620006f960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002cb919062000fb2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000331573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000357919062000fb2565b6040518363ffffffff1660e01b81526004016200037692919062000ff3565b6020604051808303815f875af115801562000393573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003b9919062000fb2565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200042c60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006f960201b60201c565b6200046060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007f260201b60201c565b5f805f805f806103e860236007546200047a91906200104b565b620004869190620010c2565b600a819055506103e86023600754620004a091906200104b565b620004ac9190620010c2565b600b81905550856017819055508460188190555083601981905550601954601854601754620004dc9190620010f9565b620004e89190620010f9565b60168190555082601b8190555081601c8190555080601d81905550601d54601c54601b54620005189190620010f9565b620005249190620010f9565b601a81905550736e5751d95a626a561d35bd716e5e6237a5f740b5600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736e5751d95a626a561d35bd716e5e6237a5f740b560095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005f5620005e76200089060201b60201c565b6001620008b860201b60201c565b6200062a600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008b860201b60201c565b6200063d306001620008b860201b60201c565b6200065261dead6001620008b860201b60201c565b62000674620006666200089060201b60201c565b6001620006f960201b60201c565b620006a9600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006f960201b60201c565b620006bc306001620006f960201b60201c565b620006d161dead6001620006f960201b60201c565b620006e53360075462000a0160201b60201c565b50505050505050620012f0565b5f33905090565b62000709620006f260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200079a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007919062001191565b60405180910390fd5b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008c8620006f260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000959576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009509062001191565b60405180910390fd5b8060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009f59190620011cd565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a699062001236565b60405180910390fd5b62000a855f838362000b9e60201b60201c565b62000a9c8160025462000ba360201b90919060201c565b60028190555062000af3815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000ba360201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b92919062001267565b60405180910390a35050565b505050565b5f80828462000bb39190620010f9565b90508381101562000bfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bf290620012d0565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000c8157607f821691505b60208210810362000c975762000c9662000c3c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000cfb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cbe565b62000d07868362000cbe565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000d5162000d4b62000d458462000d1f565b62000d28565b62000d1f565b9050919050565b5f819050919050565b62000d6c8362000d31565b62000d8462000d7b8262000d58565b84845462000cca565b825550505050565b5f90565b62000d9a62000d8c565b62000da781848462000d61565b505050565b5b8181101562000dce5762000dc25f8262000d90565b60018101905062000dad565b5050565b601f82111562000e1d5762000de78162000c9d565b62000df28462000caf565b8101602085101562000e02578190505b62000e1a62000e118562000caf565b83018262000dac565b50505b505050565b5f82821c905092915050565b5f62000e3f5f198460080262000e22565b1980831691505092915050565b5f62000e59838362000e2e565b9150826002028217905092915050565b62000e748262000c05565b67ffffffffffffffff81111562000e905762000e8f62000c0f565b5b62000e9c825462000c69565b62000ea982828562000dd2565b5f60209050601f83116001811462000edf575f841562000eca578287015190505b62000ed6858262000e4c565b86555062000f45565b601f19841662000eef8662000c9d565b5f5b8281101562000f185784890151825560018201915060208501945060208101905062000ef1565b8683101562000f38578489015162000f34601f89168262000e2e565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000f7c8262000f51565b9050919050565b62000f8e8162000f70565b811462000f99575f80fd5b50565b5f8151905062000fac8162000f83565b92915050565b5f6020828403121562000fca5762000fc962000f4d565b5b5f62000fd98482850162000f9c565b91505092915050565b62000fed8162000f70565b82525050565b5f604082019050620010085f83018562000fe2565b62001017602083018462000fe2565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620010578262000d1f565b9150620010648362000d1f565b9250828202620010748162000d1f565b915082820484148315176200108e576200108d6200101e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620010ce8262000d1f565b9150620010db8362000d1f565b925082620010ee57620010ed62001095565b5b828204905092915050565b5f620011058262000d1f565b9150620011128362000d1f565b92508282019050808211156200112d576200112c6200101e565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200117960208362001133565b9150620011868262001143565b602082019050919050565b5f6020820190508181035f830152620011aa816200116b565b9050919050565b5f8115159050919050565b620011c781620011b1565b82525050565b5f602082019050620011e25f830184620011bc565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6200121e601f8362001133565b91506200122b82620011e8565b602082019050919050565b5f6020820190508181035f8301526200124f8162001210565b9050919050565b620012618162000d1f565b82525050565b5f6020820190506200127c5f83018462001256565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620012b8601b8362001133565b9150620012c58262001282565b602082019050919050565b5f6020820190508181035f830152620012e981620012aa565b9050919050565b608051614857620013335f395f8181610c830152818161202d015281816134f4015281816135d3015281816135fa0152818161369001526136b701526148575ff3fe6080604052600436106102e7575f3560e01c80637bce5a041161018f578063a4c82a00116100db578063d85ba06311610094578063f11a24d31161006e578063f11a24d314610b2e578063f2fde38b14610b58578063f637434214610b80578063f8b45b0514610baa576102ee565b8063d85ba06314610a9e578063dd62ed3e14610ac8578063e884f26014610b04576102ee565b8063a4c82a0014610980578063a9059cbb146109aa578063b62496f5146109e6578063bbc0c74214610a22578063c024666814610a4c578063c876d0b914610a74576102ee565b806395d89b41116101485780639ec22c0e116101225780639ec22c0e146108c65780639fccce32146108f0578063a0d82dc51461091a578063a457c2d714610944576102ee565b806395d89b411461084a5780639a7a23d6146108745780639c3b4fdc1461089c576102ee565b80637bce5a04146107625780638a8c523c1461078c5780638c0b5e22146107a25780638da5cb5b146107cc5780638ea5220f146107f65780639213691314610820576102ee565b8063313ce5671161024e5780636a486a8e11610207578063715018a6116101e1578063715018a6146106d0578063751039fc146106e65780637571336a1461071057806375f0a87414610738576102ee565b80636a486a8e146106405780636ddd17131461066a57806370a0823114610694576102ee565b8063313ce5671461050e578063395093511461053857806349bd5a5e146105745780634a62bb651461059e5780634fbee193146105c8578063563912bd14610604576102ee565b80631a8145bb116102a05780631a8145bb146104005780631f3fed8f1461042a57806323b872dd1461045457806327c8f835146104905780632c3e486c146104ba5780632e82f1a0146104e4576102ee565b806306fdde03146102f2578063095ea7b31461031c5780631694505e1461035857806318160ddd14610382578063184c16c5146103ac578063199ffc72146103d6576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610bd4565b604051610313919061384e565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d91906138ff565b610c64565b60405161034f9190613957565b60405180910390f35b348015610363575f80fd5b5061036c610c81565b60405161037991906139cb565b60405180910390f35b34801561038d575f80fd5b50610396610ca5565b6040516103a391906139f3565b60405180910390f35b3480156103b7575f80fd5b506103c0610cae565b6040516103cd91906139f3565b60405180910390f35b3480156103e1575f80fd5b506103ea610cb4565b6040516103f791906139f3565b60405180910390f35b34801561040b575f80fd5b50610414610cba565b60405161042191906139f3565b60405180910390f35b348015610435575f80fd5b5061043e610cc0565b60405161044b91906139f3565b60405180910390f35b34801561045f575f80fd5b5061047a60048036038101906104759190613a0c565b610cc6565b6040516104879190613957565b60405180910390f35b34801561049b575f80fd5b506104a4610d9a565b6040516104b19190613a6b565b60405180910390f35b3480156104c5575f80fd5b506104ce610da0565b6040516104db91906139f3565b60405180910390f35b3480156104ef575f80fd5b506104f8610da6565b6040516105059190613957565b60405180910390f35b348015610519575f80fd5b50610522610db8565b60405161052f9190613a9f565b60405180910390f35b348015610543575f80fd5b5061055e600480360381019061055991906138ff565b610dc0565b60405161056b9190613957565b60405180910390f35b34801561057f575f80fd5b50610588610e6e565b6040516105959190613a6b565b60405180910390f35b3480156105a9575f80fd5b506105b2610e93565b6040516105bf9190613957565b60405180910390f35b3480156105d3575f80fd5b506105ee60048036038101906105e99190613ab8565b610ea5565b6040516105fb9190613957565b60405180910390f35b34801561060f575f80fd5b5061062a60048036038101906106259190613ab8565b610ef7565b6040516106379190613957565b60405180910390f35b34801561064b575f80fd5b50610654610f14565b60405161066191906139f3565b60405180910390f35b348015610675575f80fd5b5061067e610f1a565b60405161068b9190613957565b60405180910390f35b34801561069f575f80fd5b506106ba60048036038101906106b59190613ab8565b610f2d565b6040516106c791906139f3565b60405180910390f35b3480156106db575f80fd5b506106e4610f72565b005b3480156106f1575f80fd5b506106fa6110c5565b6040516107079190613957565b60405180910390f35b34801561071b575f80fd5b5061073660048036038101906107319190613b0d565b61117c565b005b348015610743575f80fd5b5061074c61126a565b6040516107599190613a6b565b60405180910390f35b34801561076d575f80fd5b50610776611290565b60405161078391906139f3565b60405180910390f35b348015610797575f80fd5b506107a0611296565b005b3480156107ad575f80fd5b506107b6611364565b6040516107c391906139f3565b60405180910390f35b3480156107d7575f80fd5b506107e061136a565b6040516107ed9190613a6b565b60405180910390f35b348015610801575f80fd5b5061080a611392565b6040516108179190613a6b565b60405180910390f35b34801561082b575f80fd5b506108346113b7565b60405161084191906139f3565b60405180910390f35b348015610855575f80fd5b5061085e6113bd565b60405161086b919061384e565b60405180910390f35b34801561087f575f80fd5b5061089a60048036038101906108959190613b0d565b61144d565b005b3480156108a7575f80fd5b506108b0611580565b6040516108bd91906139f3565b60405180910390f35b3480156108d1575f80fd5b506108da611586565b6040516108e791906139f3565b60405180910390f35b3480156108fb575f80fd5b5061090461158c565b60405161091191906139f3565b60405180910390f35b348015610925575f80fd5b5061092e611592565b60405161093b91906139f3565b60405180910390f35b34801561094f575f80fd5b5061096a600480360381019061096591906138ff565b611598565b6040516109779190613957565b60405180910390f35b34801561098b575f80fd5b50610994611660565b6040516109a191906139f3565b60405180910390f35b3480156109b5575f80fd5b506109d060048036038101906109cb91906138ff565b611666565b6040516109dd9190613957565b60405180910390f35b3480156109f1575f80fd5b50610a0c6004803603810190610a079190613ab8565b611683565b604051610a199190613957565b60405180910390f35b348015610a2d575f80fd5b50610a366116a0565b604051610a439190613957565b60405180910390f35b348015610a57575f80fd5b50610a726004803603810190610a6d9190613b0d565b6116b3565b005b348015610a7f575f80fd5b50610a886117ef565b604051610a959190613957565b60405180910390f35b348015610aa9575f80fd5b50610ab2611801565b604051610abf91906139f3565b60405180910390f35b348015610ad3575f80fd5b50610aee6004803603810190610ae99190613b4b565b611807565b604051610afb91906139f3565b60405180910390f35b348015610b0f575f80fd5b50610b18611889565b604051610b259190613957565b60405180910390f35b348015610b39575f80fd5b50610b42611940565b604051610b4f91906139f3565b60405180910390f35b348015610b63575f80fd5b50610b7e6004803603810190610b799190613ab8565b611946565b005b348015610b8b575f80fd5b50610b94611b08565b604051610ba191906139f3565b60405180910390f35b348015610bb5575f80fd5b50610bbe611b0e565b604051610bcb91906139f3565b60405180910390f35b606060038054610be390613bb6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0f90613bb6565b8015610c5a5780601f10610c3157610100808354040283529160200191610c5a565b820191905f5260205f20905b815481529060010190602001808311610c3d57829003601f168201915b5050505050905090565b5f610c77610c70611b14565b8484611b1b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b60115481565b600d5481565b601f5481565b601e5481565b5f610cd2848484611cde565b610d8f84610cde611b14565b610d8a856040518060600160405280602881526020016147d56028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d41611b14565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b099092919063ffffffff16565b611b1b565b600190509392505050565b61dead81565b600f5481565b600e5f9054906101000a900460ff1681565b5f6012905090565b5f610e64610dcc611b14565b84610e5f8560015f610ddc611b14565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b6b90919063ffffffff16565b611b1b565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135f9054906101000a900460ff1681565b5f60215f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6022602052805f5260405f205f915054906101000a900460ff1681565b601a5481565b601360029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610f7a611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90613c30565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f6110ce611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461115c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115390613c30565b60405180910390fd5b5f60135f6101000a81548160ff0219169083151502179055506001905090565b611184611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120990613c30565b60405180910390fd5b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b61129e611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132390613c30565b60405180910390fd5b6001601360016101000a81548160ff0219169083151502179055506001601360026101000a81548160ff021916908315150217905550565b600a5481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b6060600480546113cc90613bb6565b80601f01602080910402602001604051908101604052809291908181526020018280546113f890613bb6565b80156114435780601f1061141a57610100808354040283529160200191611443565b820191905f5260205f20905b81548152906001019060200180831161142657829003601f168201915b5050505050905090565b611455611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da90613c30565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156990613cbe565b60405180910390fd5b61157c8282612bc8565b5050565b60195481565b60125481565b60205481565b601d5481565b5f6116566115a4611b14565b84611651856040518060600160405280602581526020016147fd6025913960015f6115cd611b14565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b099092919063ffffffff16565b611b1b565b6001905092915050565b60105481565b5f611679611672611b14565b8484611cde565b6001905092915050565b6023602052805f5260405f205f915054906101000a900460ff1681565b601360019054906101000a900460ff1681565b6116bb611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174090613c30565b60405180910390fd5b8060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117e39190613957565b60405180910390a25050565b60155f9054906101000a900460ff1681565b60165481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f611892611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191790613c30565b60405180910390fd5b5f60155f6101000a81548160ff0219169083151502179055506001905090565b60185481565b61194e611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d390613c30565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190613d4c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b600b5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8090613dda565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee90613e68565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cd191906139f3565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390613ef6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190613f84565b60405180910390fd5b5f8103611dd157611dcc83835f612c66565b612b04565b60135f9054906101000a900460ff161561247857611ded61136a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611e5b5750611e2b61136a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e9357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ecd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ee5575060085f9054906101000a900460ff16155b1561247757601360019054906101000a900460ff16611fd95760215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f99575060215f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcf90613fec565b60405180910390fd5b5b60155f9054906101000a900460ff161561219d57611ff561136a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561207c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120d5575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561219c574360145f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612159576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612150906140a0565b60405180910390fd5b4360145f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561223a575060225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122e157600a54811115612284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b9061412e565b60405180910390fd5b600b5461229083610f2d565b8261229b9190614179565b11156122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d3906141f6565b60405180910390fd5b612476565b60235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561237e575060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123cd57600a548111156123c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bf90614284565b60405180910390fd5b612475565b60225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661247457600b5461242783610f2d565b826124329190614179565b1115612473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246a906141f6565b60405180910390fd5b5b5b5b5b5b601360029054906101000a900460ff1680156124a0575060085f9054906101000a900460ff16155b80156124f3575060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612546575060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612599575060215f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125da57600160085f6101000a81548160ff0219169083151502179055506125c0612eef565b5f60085f6101000a81548160ff0219169083151502179055505b60085f9054906101000a900460ff1615801561263c575060235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156126535750600e5f9054906101000a900460ff165b8015612692575061266261136a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156126e4575060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612708576001600c546126f891906142a2565b600d8190555061270661318c565b505b5f60085f9054906101000a900460ff1615905060215f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127b6575060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156127bf575f90505b5f60215f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561285c575060235f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561288e57612876600c548461334990919063ffffffff16565b601f5f8282546128869190614179565b925050819055505b8115612af65760235f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128eb57505f601a54115b156129b557612918606461290a601a548661334990919063ffffffff16565b6133c090919063ffffffff16565b9050601a54601c548261292b91906142d5565b6129359190614343565b601f5f8282546129459190614179565b92505081905550601a54601d548261295d91906142d5565b6129679190614343565b60205f8282546129779190614179565b92505081905550601a54601b548261298f91906142d5565b6129999190614343565b601e5f8282546129a99190614179565b92505081905550612ad3565b60235f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a0c57505f601654115b15612ad257612a396064612a2b6016548661334990919063ffffffff16565b6133c090919063ffffffff16565b905060165460185482612a4c91906142d5565b612a569190614343565b601f5f828254612a669190614179565b9250508190555060165460195482612a7e91906142d5565b612a889190614343565b60205f828254612a989190614179565b9250508190555060165460175482612ab091906142d5565b612aba9190614343565b601e5f828254612aca9190614179565b925050819055505b5b5f811115612ae757612ae6853083612c66565b5b8083612af391906142a2565b92505b612b01858585612c66565b50505b505050565b5f838311158290612b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b47919061384e565b60405180910390fd5b505f8385612b5e91906142a2565b9050809150509392505050565b5f808284612b799190614179565b905083811015612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb5906143bd565b60405180910390fd5b8091505092915050565b8060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccb90613ef6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3990613f84565b60405180910390fd5b612d4d838383613409565b612db6816040518060600160405280602681526020016147af602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b099092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612e45815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b6b90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ee291906139f3565b60405180910390a3505050565b5f612ef930610f2d565b90505f602054601e54601f54612f0f9190614179565b612f199190614179565b90505f808203612f2b5750505061318a565b5f600283601f5486612f3d91906142d5565b612f479190614343565b612f519190614343565b90505f612f67828661340e90919063ffffffff16565b90505f479050612f7682613457565b5f612f8a824761340e90919063ffffffff16565b90505f612fb487612fa6601e548561334990919063ffffffff16565b6133c090919063ffffffff16565b90505f612fde88612fd06020548661334990919063ffffffff16565b6133c090919063ffffffff16565b90505f818385612fee91906142a2565b612ff891906142a2565b90505f601f819055505f601e819055505f60208190555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161305490614408565b5f6040518083038185875af1925050503d805f811461308e576040519150601f19603f3d011682016040523d82523d5f602084013e613093565b606091505b5050809850505f871180156130a757505f81115b156130f4576130b6878261368a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601f546040516130eb9392919061441c565b60405180910390a15b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161313a90614408565b5f6040518083038185875af1925050503d805f8114613174576040519150601f19603f3d011682016040523d82523d5f602084013e613179565b606091505b505080985050505050505050505050505b565b5f426010819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a0823160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016131ef9190613a6b565b602060405180830381865afa15801561320a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061322e9190614465565b90505f61325a600c5461324c600d548561334990919063ffffffff16565b6133c090919063ffffffff16565b90505f8111156132935761329260065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83612c66565b5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156132fd575f80fd5b505af115801561330f573d5f803e3d5ffd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b5f808303613359575f90506133ba565b5f828461336691906142d5565b90508284826133759190614343565b146133b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ac90614500565b60405180910390fd5b809150505b92915050565b5f61340183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613763565b905092915050565b505050565b5f61344f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b09565b905092915050565b5f600267ffffffffffffffff8111156134735761347261451e565b5b6040519080825280602002602001820160405280156134a15781602001602082028036833780820191505090505b50905030815f815181106134b8576134b761454b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561355b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061357f919061458c565b816001815181106135935761359261454b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135f8307f000000000000000000000000000000000000000000000000000000000000000084611b1b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016136599594939291906146a7565b5f604051808303815f87803b158015613670575f80fd5b505af1158015613682573d5f803e3d5ffd5b505050505050565b6136b5307f000000000000000000000000000000000000000000000000000000000000000084611b1b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b815260040161371b969594939291906146ff565b60606040518083038185885af1158015613737573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061375c919061475e565b5050505050565b5f80831182906137a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a0919061384e565b60405180910390fd5b505f83856137b79190614343565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156137fb5780820151818401526020810190506137e0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613820826137c4565b61382a81856137ce565b935061383a8185602086016137de565b61384381613806565b840191505092915050565b5f6020820190508181035f8301526138668184613816565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61389b82613872565b9050919050565b6138ab81613891565b81146138b5575f80fd5b50565b5f813590506138c6816138a2565b92915050565b5f819050919050565b6138de816138cc565b81146138e8575f80fd5b50565b5f813590506138f9816138d5565b92915050565b5f80604083850312156139155761391461386e565b5b5f613922858286016138b8565b9250506020613933858286016138eb565b9150509250929050565b5f8115159050919050565b6139518161393d565b82525050565b5f60208201905061396a5f830184613948565b92915050565b5f819050919050565b5f61399361398e61398984613872565b613970565b613872565b9050919050565b5f6139a482613979565b9050919050565b5f6139b58261399a565b9050919050565b6139c5816139ab565b82525050565b5f6020820190506139de5f8301846139bc565b92915050565b6139ed816138cc565b82525050565b5f602082019050613a065f8301846139e4565b92915050565b5f805f60608486031215613a2357613a2261386e565b5b5f613a30868287016138b8565b9350506020613a41868287016138b8565b9250506040613a52868287016138eb565b9150509250925092565b613a6581613891565b82525050565b5f602082019050613a7e5f830184613a5c565b92915050565b5f60ff82169050919050565b613a9981613a84565b82525050565b5f602082019050613ab25f830184613a90565b92915050565b5f60208284031215613acd57613acc61386e565b5b5f613ada848285016138b8565b91505092915050565b613aec8161393d565b8114613af6575f80fd5b50565b5f81359050613b0781613ae3565b92915050565b5f8060408385031215613b2357613b2261386e565b5b5f613b30858286016138b8565b9250506020613b4185828601613af9565b9150509250929050565b5f8060408385031215613b6157613b6061386e565b5b5f613b6e858286016138b8565b9250506020613b7f858286016138b8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613bcd57607f821691505b602082108103613be057613bdf613b89565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c1a6020836137ce565b9150613c2582613be6565b602082019050919050565b5f6020820190508181035f830152613c4781613c0e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613ca86039836137ce565b9150613cb382613c4e565b604082019050919050565b5f6020820190508181035f830152613cd581613c9c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613d366026836137ce565b9150613d4182613cdc565b604082019050919050565b5f6020820190508181035f830152613d6381613d2a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613dc46024836137ce565b9150613dcf82613d6a565b604082019050919050565b5f6020820190508181035f830152613df181613db8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e526022836137ce565b9150613e5d82613df8565b604082019050919050565b5f6020820190508181035f830152613e7f81613e46565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613ee06025836137ce565b9150613eeb82613e86565b604082019050919050565b5f6020820190508181035f830152613f0d81613ed4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613f6e6023836137ce565b9150613f7982613f14565b604082019050919050565b5f6020820190508181035f830152613f9b81613f62565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613fd66016836137ce565b9150613fe182613fa2565b602082019050919050565b5f6020820190508181035f83015261400381613fca565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f61408a6049836137ce565b91506140958261400a565b606082019050919050565b5f6020820190508181035f8301526140b78161407e565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785478416d6f756e742e0000000000000000000000000000000000000000602082015250565b5f614118602c836137ce565b9150614123826140be565b604082019050919050565b5f6020820190508181035f8301526141458161410c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614183826138cc565b915061418e836138cc565b92508282019050808211156141a6576141a561414c565b5b92915050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6141e06013836137ce565b91506141eb826141ac565b602082019050919050565b5f6020820190508181035f83015261420d816141d4565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785478416d6f756e742e00000000000000000000000000000000000000602082015250565b5f61426e602d836137ce565b915061427982614214565b604082019050919050565b5f6020820190508181035f83015261429b81614262565b9050919050565b5f6142ac826138cc565b91506142b7836138cc565b92508282039050818111156142cf576142ce61414c565b5b92915050565b5f6142df826138cc565b91506142ea836138cc565b92508282026142f8816138cc565b9150828204841483151761430f5761430e61414c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61434d826138cc565b9150614358836138cc565b92508261436857614367614316565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6143a7601b836137ce565b91506143b282614373565b602082019050919050565b5f6020820190508181035f8301526143d48161439b565b9050919050565b5f81905092915050565b50565b5f6143f35f836143db565b91506143fe826143e5565b5f82019050919050565b5f614412826143e8565b9150819050919050565b5f60608201905061442f5f8301866139e4565b61443c60208301856139e4565b61444960408301846139e4565b949350505050565b5f8151905061445f816138d5565b92915050565b5f6020828403121561447a5761447961386e565b5b5f61448784828501614451565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144ea6021836137ce565b91506144f582614490565b604082019050919050565b5f6020820190508181035f830152614517816144de565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614586816138a2565b92915050565b5f602082840312156145a1576145a061386e565b5b5f6145ae84828501614578565b91505092915050565b5f819050919050565b5f6145da6145d56145d0846145b7565b613970565b6138cc565b9050919050565b6145ea816145c0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61462281613891565b82525050565b5f6146338383614619565b60208301905092915050565b5f602082019050919050565b5f614655826145f0565b61465f81856145fa565b935061466a8361460a565b805f5b8381101561469a5781516146818882614628565b975061468c8361463f565b92505060018101905061466d565b5085935050505092915050565b5f60a0820190506146ba5f8301886139e4565b6146c760208301876145e1565b81810360408301526146d9818661464b565b90506146e86060830185613a5c565b6146f560808301846139e4565b9695505050505050565b5f60c0820190506147125f830189613a5c565b61471f60208301886139e4565b61472c60408301876145e1565b61473960608301866145e1565b6147466080830185613a5c565b61475360a08301846139e4565b979650505050505050565b5f805f606084860312156147755761477461386e565b5b5f61478286828701614451565b935050602061479386828701614451565b92505060406147a486828701614451565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a629143e57cdd161b00fd891b84e18484f1f4b6a0cf9bce8222dfb0b55a13d5164736f6c63430008140033
Deployed Bytecode
0x6080604052600436106102e7575f3560e01c80637bce5a041161018f578063a4c82a00116100db578063d85ba06311610094578063f11a24d31161006e578063f11a24d314610b2e578063f2fde38b14610b58578063f637434214610b80578063f8b45b0514610baa576102ee565b8063d85ba06314610a9e578063dd62ed3e14610ac8578063e884f26014610b04576102ee565b8063a4c82a0014610980578063a9059cbb146109aa578063b62496f5146109e6578063bbc0c74214610a22578063c024666814610a4c578063c876d0b914610a74576102ee565b806395d89b41116101485780639ec22c0e116101225780639ec22c0e146108c65780639fccce32146108f0578063a0d82dc51461091a578063a457c2d714610944576102ee565b806395d89b411461084a5780639a7a23d6146108745780639c3b4fdc1461089c576102ee565b80637bce5a04146107625780638a8c523c1461078c5780638c0b5e22146107a25780638da5cb5b146107cc5780638ea5220f146107f65780639213691314610820576102ee565b8063313ce5671161024e5780636a486a8e11610207578063715018a6116101e1578063715018a6146106d0578063751039fc146106e65780637571336a1461071057806375f0a87414610738576102ee565b80636a486a8e146106405780636ddd17131461066a57806370a0823114610694576102ee565b8063313ce5671461050e578063395093511461053857806349bd5a5e146105745780634a62bb651461059e5780634fbee193146105c8578063563912bd14610604576102ee565b80631a8145bb116102a05780631a8145bb146104005780631f3fed8f1461042a57806323b872dd1461045457806327c8f835146104905780632c3e486c146104ba5780632e82f1a0146104e4576102ee565b806306fdde03146102f2578063095ea7b31461031c5780631694505e1461035857806318160ddd14610382578063184c16c5146103ac578063199ffc72146103d6576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610bd4565b604051610313919061384e565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d91906138ff565b610c64565b60405161034f9190613957565b60405180910390f35b348015610363575f80fd5b5061036c610c81565b60405161037991906139cb565b60405180910390f35b34801561038d575f80fd5b50610396610ca5565b6040516103a391906139f3565b60405180910390f35b3480156103b7575f80fd5b506103c0610cae565b6040516103cd91906139f3565b60405180910390f35b3480156103e1575f80fd5b506103ea610cb4565b6040516103f791906139f3565b60405180910390f35b34801561040b575f80fd5b50610414610cba565b60405161042191906139f3565b60405180910390f35b348015610435575f80fd5b5061043e610cc0565b60405161044b91906139f3565b60405180910390f35b34801561045f575f80fd5b5061047a60048036038101906104759190613a0c565b610cc6565b6040516104879190613957565b60405180910390f35b34801561049b575f80fd5b506104a4610d9a565b6040516104b19190613a6b565b60405180910390f35b3480156104c5575f80fd5b506104ce610da0565b6040516104db91906139f3565b60405180910390f35b3480156104ef575f80fd5b506104f8610da6565b6040516105059190613957565b60405180910390f35b348015610519575f80fd5b50610522610db8565b60405161052f9190613a9f565b60405180910390f35b348015610543575f80fd5b5061055e600480360381019061055991906138ff565b610dc0565b60405161056b9190613957565b60405180910390f35b34801561057f575f80fd5b50610588610e6e565b6040516105959190613a6b565b60405180910390f35b3480156105a9575f80fd5b506105b2610e93565b6040516105bf9190613957565b60405180910390f35b3480156105d3575f80fd5b506105ee60048036038101906105e99190613ab8565b610ea5565b6040516105fb9190613957565b60405180910390f35b34801561060f575f80fd5b5061062a60048036038101906106259190613ab8565b610ef7565b6040516106379190613957565b60405180910390f35b34801561064b575f80fd5b50610654610f14565b60405161066191906139f3565b60405180910390f35b348015610675575f80fd5b5061067e610f1a565b60405161068b9190613957565b60405180910390f35b34801561069f575f80fd5b506106ba60048036038101906106b59190613ab8565b610f2d565b6040516106c791906139f3565b60405180910390f35b3480156106db575f80fd5b506106e4610f72565b005b3480156106f1575f80fd5b506106fa6110c5565b6040516107079190613957565b60405180910390f35b34801561071b575f80fd5b5061073660048036038101906107319190613b0d565b61117c565b005b348015610743575f80fd5b5061074c61126a565b6040516107599190613a6b565b60405180910390f35b34801561076d575f80fd5b50610776611290565b60405161078391906139f3565b60405180910390f35b348015610797575f80fd5b506107a0611296565b005b3480156107ad575f80fd5b506107b6611364565b6040516107c391906139f3565b60405180910390f35b3480156107d7575f80fd5b506107e061136a565b6040516107ed9190613a6b565b60405180910390f35b348015610801575f80fd5b5061080a611392565b6040516108179190613a6b565b60405180910390f35b34801561082b575f80fd5b506108346113b7565b60405161084191906139f3565b60405180910390f35b348015610855575f80fd5b5061085e6113bd565b60405161086b919061384e565b60405180910390f35b34801561087f575f80fd5b5061089a60048036038101906108959190613b0d565b61144d565b005b3480156108a7575f80fd5b506108b0611580565b6040516108bd91906139f3565b60405180910390f35b3480156108d1575f80fd5b506108da611586565b6040516108e791906139f3565b60405180910390f35b3480156108fb575f80fd5b5061090461158c565b60405161091191906139f3565b60405180910390f35b348015610925575f80fd5b5061092e611592565b60405161093b91906139f3565b60405180910390f35b34801561094f575f80fd5b5061096a600480360381019061096591906138ff565b611598565b6040516109779190613957565b60405180910390f35b34801561098b575f80fd5b50610994611660565b6040516109a191906139f3565b60405180910390f35b3480156109b5575f80fd5b506109d060048036038101906109cb91906138ff565b611666565b6040516109dd9190613957565b60405180910390f35b3480156109f1575f80fd5b50610a0c6004803603810190610a079190613ab8565b611683565b604051610a199190613957565b60405180910390f35b348015610a2d575f80fd5b50610a366116a0565b604051610a439190613957565b60405180910390f35b348015610a57575f80fd5b50610a726004803603810190610a6d9190613b0d565b6116b3565b005b348015610a7f575f80fd5b50610a886117ef565b604051610a959190613957565b60405180910390f35b348015610aa9575f80fd5b50610ab2611801565b604051610abf91906139f3565b60405180910390f35b348015610ad3575f80fd5b50610aee6004803603810190610ae99190613b4b565b611807565b604051610afb91906139f3565b60405180910390f35b348015610b0f575f80fd5b50610b18611889565b604051610b259190613957565b60405180910390f35b348015610b39575f80fd5b50610b42611940565b604051610b4f91906139f3565b60405180910390f35b348015610b63575f80fd5b50610b7e6004803603810190610b799190613ab8565b611946565b005b348015610b8b575f80fd5b50610b94611b08565b604051610ba191906139f3565b60405180910390f35b348015610bb5575f80fd5b50610bbe611b0e565b604051610bcb91906139f3565b60405180910390f35b606060038054610be390613bb6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0f90613bb6565b8015610c5a5780601f10610c3157610100808354040283529160200191610c5a565b820191905f5260205f20905b815481529060010190602001808311610c3d57829003601f168201915b5050505050905090565b5f610c77610c70611b14565b8484611b1b565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60115481565b600d5481565b601f5481565b601e5481565b5f610cd2848484611cde565b610d8f84610cde611b14565b610d8a856040518060600160405280602881526020016147d56028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d41611b14565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b099092919063ffffffff16565b611b1b565b600190509392505050565b61dead81565b600f5481565b600e5f9054906101000a900460ff1681565b5f6012905090565b5f610e64610dcc611b14565b84610e5f8560015f610ddc611b14565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b6b90919063ffffffff16565b611b1b565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135f9054906101000a900460ff1681565b5f60215f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6022602052805f5260405f205f915054906101000a900460ff1681565b601a5481565b601360029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610f7a611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90613c30565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f6110ce611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461115c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115390613c30565b60405180910390fd5b5f60135f6101000a81548160ff0219169083151502179055506001905090565b611184611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120990613c30565b60405180910390fd5b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b61129e611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132390613c30565b60405180910390fd5b6001601360016101000a81548160ff0219169083151502179055506001601360026101000a81548160ff021916908315150217905550565b600a5481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b6060600480546113cc90613bb6565b80601f01602080910402602001604051908101604052809291908181526020018280546113f890613bb6565b80156114435780601f1061141a57610100808354040283529160200191611443565b820191905f5260205f20905b81548152906001019060200180831161142657829003601f168201915b5050505050905090565b611455611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da90613c30565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156990613cbe565b60405180910390fd5b61157c8282612bc8565b5050565b60195481565b60125481565b60205481565b601d5481565b5f6116566115a4611b14565b84611651856040518060600160405280602581526020016147fd6025913960015f6115cd611b14565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b099092919063ffffffff16565b611b1b565b6001905092915050565b60105481565b5f611679611672611b14565b8484611cde565b6001905092915050565b6023602052805f5260405f205f915054906101000a900460ff1681565b601360019054906101000a900460ff1681565b6116bb611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174090613c30565b60405180910390fd5b8060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117e39190613957565b60405180910390a25050565b60155f9054906101000a900460ff1681565b60165481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f611892611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191790613c30565b60405180910390fd5b5f60155f6101000a81548160ff0219169083151502179055506001905090565b60185481565b61194e611b14565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d390613c30565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190613d4c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b600b5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8090613dda565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee90613e68565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cd191906139f3565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390613ef6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190613f84565b60405180910390fd5b5f8103611dd157611dcc83835f612c66565b612b04565b60135f9054906101000a900460ff161561247857611ded61136a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611e5b5750611e2b61136a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e9357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ecd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ee5575060085f9054906101000a900460ff16155b1561247757601360019054906101000a900460ff16611fd95760215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f99575060215f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcf90613fec565b60405180910390fd5b5b60155f9054906101000a900460ff161561219d57611ff561136a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561207c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120d5575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561219c574360145f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612159576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612150906140a0565b60405180910390fd5b4360145f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561223a575060225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122e157600a54811115612284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b9061412e565b60405180910390fd5b600b5461229083610f2d565b8261229b9190614179565b11156122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d3906141f6565b60405180910390fd5b612476565b60235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561237e575060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123cd57600a548111156123c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bf90614284565b60405180910390fd5b612475565b60225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661247457600b5461242783610f2d565b826124329190614179565b1115612473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246a906141f6565b60405180910390fd5b5b5b5b5b5b601360029054906101000a900460ff1680156124a0575060085f9054906101000a900460ff16155b80156124f3575060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612546575060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612599575060215f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125da57600160085f6101000a81548160ff0219169083151502179055506125c0612eef565b5f60085f6101000a81548160ff0219169083151502179055505b60085f9054906101000a900460ff1615801561263c575060235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156126535750600e5f9054906101000a900460ff165b8015612692575061266261136a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156126e4575060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612708576001600c546126f891906142a2565b600d8190555061270661318c565b505b5f60085f9054906101000a900460ff1615905060215f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127b6575060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156127bf575f90505b5f60215f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561285c575060235f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561288e57612876600c548461334990919063ffffffff16565b601f5f8282546128869190614179565b925050819055505b8115612af65760235f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128eb57505f601a54115b156129b557612918606461290a601a548661334990919063ffffffff16565b6133c090919063ffffffff16565b9050601a54601c548261292b91906142d5565b6129359190614343565b601f5f8282546129459190614179565b92505081905550601a54601d548261295d91906142d5565b6129679190614343565b60205f8282546129779190614179565b92505081905550601a54601b548261298f91906142d5565b6129999190614343565b601e5f8282546129a99190614179565b92505081905550612ad3565b60235f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a0c57505f601654115b15612ad257612a396064612a2b6016548661334990919063ffffffff16565b6133c090919063ffffffff16565b905060165460185482612a4c91906142d5565b612a569190614343565b601f5f828254612a669190614179565b9250508190555060165460195482612a7e91906142d5565b612a889190614343565b60205f828254612a989190614179565b9250508190555060165460175482612ab091906142d5565b612aba9190614343565b601e5f828254612aca9190614179565b925050819055505b5b5f811115612ae757612ae6853083612c66565b5b8083612af391906142a2565b92505b612b01858585612c66565b50505b505050565b5f838311158290612b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b47919061384e565b60405180910390fd5b505f8385612b5e91906142a2565b9050809150509392505050565b5f808284612b799190614179565b905083811015612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb5906143bd565b60405180910390fd5b8091505092915050565b8060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccb90613ef6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3990613f84565b60405180910390fd5b612d4d838383613409565b612db6816040518060600160405280602681526020016147af602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b099092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612e45815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b6b90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ee291906139f3565b60405180910390a3505050565b5f612ef930610f2d565b90505f602054601e54601f54612f0f9190614179565b612f199190614179565b90505f808203612f2b5750505061318a565b5f600283601f5486612f3d91906142d5565b612f479190614343565b612f519190614343565b90505f612f67828661340e90919063ffffffff16565b90505f479050612f7682613457565b5f612f8a824761340e90919063ffffffff16565b90505f612fb487612fa6601e548561334990919063ffffffff16565b6133c090919063ffffffff16565b90505f612fde88612fd06020548661334990919063ffffffff16565b6133c090919063ffffffff16565b90505f818385612fee91906142a2565b612ff891906142a2565b90505f601f819055505f601e819055505f60208190555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161305490614408565b5f6040518083038185875af1925050503d805f811461308e576040519150601f19603f3d011682016040523d82523d5f602084013e613093565b606091505b5050809850505f871180156130a757505f81115b156130f4576130b6878261368a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601f546040516130eb9392919061441c565b60405180910390a15b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161313a90614408565b5f6040518083038185875af1925050503d805f8114613174576040519150601f19603f3d011682016040523d82523d5f602084013e613179565b606091505b505080985050505050505050505050505b565b5f426010819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a0823160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016131ef9190613a6b565b602060405180830381865afa15801561320a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061322e9190614465565b90505f61325a600c5461324c600d548561334990919063ffffffff16565b6133c090919063ffffffff16565b90505f8111156132935761329260065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83612c66565b5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156132fd575f80fd5b505af115801561330f573d5f803e3d5ffd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b5f808303613359575f90506133ba565b5f828461336691906142d5565b90508284826133759190614343565b146133b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ac90614500565b60405180910390fd5b809150505b92915050565b5f61340183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613763565b905092915050565b505050565b5f61344f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b09565b905092915050565b5f600267ffffffffffffffff8111156134735761347261451e565b5b6040519080825280602002602001820160405280156134a15781602001602082028036833780820191505090505b50905030815f815181106134b8576134b761454b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561355b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061357f919061458c565b816001815181106135935761359261454b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135f8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b1b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016136599594939291906146a7565b5f604051808303815f87803b158015613670575f80fd5b505af1158015613682573d5f803e3d5ffd5b505050505050565b6136b5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b1b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b815260040161371b969594939291906146ff565b60606040518083038185885af1158015613737573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061375c919061475e565b5050505050565b5f80831182906137a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a0919061384e565b60405180910390fd5b505f83856137b79190614343565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156137fb5780820151818401526020810190506137e0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613820826137c4565b61382a81856137ce565b935061383a8185602086016137de565b61384381613806565b840191505092915050565b5f6020820190508181035f8301526138668184613816565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61389b82613872565b9050919050565b6138ab81613891565b81146138b5575f80fd5b50565b5f813590506138c6816138a2565b92915050565b5f819050919050565b6138de816138cc565b81146138e8575f80fd5b50565b5f813590506138f9816138d5565b92915050565b5f80604083850312156139155761391461386e565b5b5f613922858286016138b8565b9250506020613933858286016138eb565b9150509250929050565b5f8115159050919050565b6139518161393d565b82525050565b5f60208201905061396a5f830184613948565b92915050565b5f819050919050565b5f61399361398e61398984613872565b613970565b613872565b9050919050565b5f6139a482613979565b9050919050565b5f6139b58261399a565b9050919050565b6139c5816139ab565b82525050565b5f6020820190506139de5f8301846139bc565b92915050565b6139ed816138cc565b82525050565b5f602082019050613a065f8301846139e4565b92915050565b5f805f60608486031215613a2357613a2261386e565b5b5f613a30868287016138b8565b9350506020613a41868287016138b8565b9250506040613a52868287016138eb565b9150509250925092565b613a6581613891565b82525050565b5f602082019050613a7e5f830184613a5c565b92915050565b5f60ff82169050919050565b613a9981613a84565b82525050565b5f602082019050613ab25f830184613a90565b92915050565b5f60208284031215613acd57613acc61386e565b5b5f613ada848285016138b8565b91505092915050565b613aec8161393d565b8114613af6575f80fd5b50565b5f81359050613b0781613ae3565b92915050565b5f8060408385031215613b2357613b2261386e565b5b5f613b30858286016138b8565b9250506020613b4185828601613af9565b9150509250929050565b5f8060408385031215613b6157613b6061386e565b5b5f613b6e858286016138b8565b9250506020613b7f858286016138b8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613bcd57607f821691505b602082108103613be057613bdf613b89565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c1a6020836137ce565b9150613c2582613be6565b602082019050919050565b5f6020820190508181035f830152613c4781613c0e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613ca86039836137ce565b9150613cb382613c4e565b604082019050919050565b5f6020820190508181035f830152613cd581613c9c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613d366026836137ce565b9150613d4182613cdc565b604082019050919050565b5f6020820190508181035f830152613d6381613d2a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613dc46024836137ce565b9150613dcf82613d6a565b604082019050919050565b5f6020820190508181035f830152613df181613db8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e526022836137ce565b9150613e5d82613df8565b604082019050919050565b5f6020820190508181035f830152613e7f81613e46565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613ee06025836137ce565b9150613eeb82613e86565b604082019050919050565b5f6020820190508181035f830152613f0d81613ed4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613f6e6023836137ce565b9150613f7982613f14565b604082019050919050565b5f6020820190508181035f830152613f9b81613f62565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613fd66016836137ce565b9150613fe182613fa2565b602082019050919050565b5f6020820190508181035f83015261400381613fca565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f61408a6049836137ce565b91506140958261400a565b606082019050919050565b5f6020820190508181035f8301526140b78161407e565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785478416d6f756e742e0000000000000000000000000000000000000000602082015250565b5f614118602c836137ce565b9150614123826140be565b604082019050919050565b5f6020820190508181035f8301526141458161410c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614183826138cc565b915061418e836138cc565b92508282019050808211156141a6576141a561414c565b5b92915050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6141e06013836137ce565b91506141eb826141ac565b602082019050919050565b5f6020820190508181035f83015261420d816141d4565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785478416d6f756e742e00000000000000000000000000000000000000602082015250565b5f61426e602d836137ce565b915061427982614214565b604082019050919050565b5f6020820190508181035f83015261429b81614262565b9050919050565b5f6142ac826138cc565b91506142b7836138cc565b92508282039050818111156142cf576142ce61414c565b5b92915050565b5f6142df826138cc565b91506142ea836138cc565b92508282026142f8816138cc565b9150828204841483151761430f5761430e61414c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61434d826138cc565b9150614358836138cc565b92508261436857614367614316565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6143a7601b836137ce565b91506143b282614373565b602082019050919050565b5f6020820190508181035f8301526143d48161439b565b9050919050565b5f81905092915050565b50565b5f6143f35f836143db565b91506143fe826143e5565b5f82019050919050565b5f614412826143e8565b9150819050919050565b5f60608201905061442f5f8301866139e4565b61443c60208301856139e4565b61444960408301846139e4565b949350505050565b5f8151905061445f816138d5565b92915050565b5f6020828403121561447a5761447961386e565b5b5f61448784828501614451565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144ea6021836137ce565b91506144f582614490565b604082019050919050565b5f6020820190508181035f830152614517816144de565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614586816138a2565b92915050565b5f602082840312156145a1576145a061386e565b5b5f6145ae84828501614578565b91505092915050565b5f819050919050565b5f6145da6145d56145d0846145b7565b613970565b6138cc565b9050919050565b6145ea816145c0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61462281613891565b82525050565b5f6146338383614619565b60208301905092915050565b5f602082019050919050565b5f614655826145f0565b61465f81856145fa565b935061466a8361460a565b805f5b8381101561469a5781516146818882614628565b975061468c8361463f565b92505060018101905061466d565b5085935050505092915050565b5f60a0820190506146ba5f8301886139e4565b6146c760208301876145e1565b81810360408301526146d9818661464b565b90506146e86060830185613a5c565b6146f560808301846139e4565b9695505050505050565b5f60c0820190506147125f830189613a5c565b61471f60208301886139e4565b61472c60408301876145e1565b61473960608301866145e1565b6147466080830185613a5c565b61475360a08301846139e4565b979650505050505050565b5f805f606084860312156147755761477461386e565b5b5f61478286828701614451565b935050602061479386828701614451565b92505060406147a486828701614451565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a629143e57cdd161b00fd891b84e18484f1f4b6a0cf9bce8222dfb0b55a13d5164736f6c63430008140033
Deployed Bytecode Sourcemap
27573:12932:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7649:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9823:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27648:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8772:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28272:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28097:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28940:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28900;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10475:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27741:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28181:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28142:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8613:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11240:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27706:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28371:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33339:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29159:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28754:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28451:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8944:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22151:148;;;;;;;;;;;;;:::i;:::-;;32226:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32552:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27923:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28646;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32061:112;;;;;;;;;;;;;:::i;:::-;;27994:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21507:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27960:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28789:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7869:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32887:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28720:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28326:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28980:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28865:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11962:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28233:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9285:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29373:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28411:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32696:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28563:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28612:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9524:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32408:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28683:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22455:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28827:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28027:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7649:100;7703:13;7736:5;7729:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7649:100;:::o;9823:169::-;9906:4;9923:39;9932:12;:10;:12::i;:::-;9946:7;9955:6;9923:8;:39::i;:::-;9980:4;9973:11;;9823:169;;;;:::o;27648:51::-;;;:::o;8772:108::-;8833:7;8860:12;;8853:19;;8772:108;:::o;28272:47::-;;;;:::o;28097:38::-;;;;:::o;28940:33::-;;;;:::o;28900:::-;;;;:::o;10475:355::-;10615:4;10632:36;10642:6;10650:9;10661:6;10632:9;:36::i;:::-;10679:121;10688:6;10696:12;:10;:12::i;:::-;10710:89;10748:6;10710:89;;;;;;;;;;;;;;;;;:11;:19;10722:6;10710:19;;;;;;;;;;;;;;;:33;10730:12;:10;:12::i;:::-;10710:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10679:8;:121::i;:::-;10818:4;10811:11;;10475:355;;;;;:::o;27741:89::-;27787:42;27741:89;:::o;28181:45::-;;;;:::o;28142:32::-;;;;;;;;;;;;;:::o;8613:93::-;8671:5;8696:2;8689:9;;8613:93;:::o;11240:218::-;11328:4;11345:83;11354:12;:10;:12::i;:::-;11368:7;11377:50;11416:10;11377:11;:25;11389:12;:10;:12::i;:::-;11377:25;;;;;;;;;;;;;;;:34;11403:7;11377:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11345:8;:83::i;:::-;11446:4;11439:11;;11240:218;;;;:::o;27706:28::-;;;;;;;;;;;;;:::o;28371:33::-;;;;;;;;;;;;;:::o;33339:125::-;33404:4;33428:19;:28;33448:7;33428:28;;;;;;;;;;;;;;;;;;;;;;;;;33421:35;;33339:125;;;:::o;29159:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;28754:28::-;;;;:::o;28451:31::-;;;;;;;;;;;;;:::o;8944:127::-;9018:7;9045:9;:18;9055:7;9045:18;;;;;;;;;;;;;;;;9038:25;;8944:127;;;:::o;22151:148::-;21730:12;:10;:12::i;:::-;21720:22;;:6;;;;;;;;;;;:22;;;21712:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22258:1:::1;22221:40;;22242:6;;;;;;;;;;;22221:40;;;;;;;;;;;;22289:1;22272:6;;:19;;;;;;;;;;;;;;;;;;22151:148::o:0;32226:120::-;32278:4;21730:12;:10;:12::i;:::-;21720:22;;:6;;;;;;;;;;;:22;;;21712:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32311:5:::1;32294:14;;:22;;;;;;;;;;;;;;;;;;32334:4;32327:11;;32226:120:::0;:::o;32552:135::-;21730:12;:10;:12::i;:::-;21720:22;;:6;;;;;;;;;;;:22;;;21712:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32675:4:::1;32642:22;:30;32665:6;32642:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;32552:135:::0;;:::o;27923:30::-;;;;;;;;;;;;;:::o;28646:::-;;;;:::o;32061:112::-;21730:12;:10;:12::i;:::-;21720:22;;:6;;;;;;;;;;;:22;;;21712:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32132:4:::1;32116:13;;:20;;;;;;;;;;;;;;;;;;32161:4;32147:11;;:18;;;;;;;;;;;;;;;;;;32061:112::o:0;27994:26::-;;;;:::o;21507:79::-;21545:7;21572:6;;;;;;;;;;;21565:13;;21507:79;:::o;27960:24::-;;;;;;;;;;;;;:::o;28789:31::-;;;;:::o;7869:104::-;7925:13;7958:7;7951:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7869:104;:::o;32887:245::-;21730:12;:10;:12::i;:::-;21720:22;;:6;;;;;;;;;;;:22;;;21712:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32994:13:::1;;;;;;;;;;;32986:21;;:4;:21;;::::0;32978:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33083:41;33112:4;33118:5;33083:28;:41::i;:::-;32887:245:::0;;:::o;28720:24::-;;;;:::o;28326:35::-;;;;:::o;28980:27::-;;;;:::o;28865:25::-;;;;:::o;11962:269::-;12055:4;12072:129;12081:12;:10;:12::i;:::-;12095:7;12104:96;12143:15;12104:96;;;;;;;;;;;;;;;;;:11;:25;12116:12;:10;:12::i;:::-;12104:25;;;;;;;;;;;;;;;:34;12130:7;12104:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12072:8;:129::i;:::-;12219:4;12212:11;;11962:269;;;;:::o;28233:29::-;;;;:::o;9285:175::-;9371:4;9388:42;9398:12;:10;:12::i;:::-;9412:9;9423:6;9388:9;:42::i;:::-;9448:4;9441:11;;9285:175;;;;:::o;29373:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;28411:33::-;;;;;;;;;;;;;:::o;32696:182::-;21730:12;:10;:12::i;:::-;21720:22;;:6;;;;;;;;;;;:22;;;21712:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32812:8:::1;32781:19;:28;32801:7;32781:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32852:7;32836:34;;;32861:8;32836:34;;;;;;:::i;:::-;;;;;;;;32696:182:::0;;:::o;28563:39::-;;;;;;;;;;;;;:::o;28612:27::-;;;;:::o;9524:151::-;9613:7;9640:11;:18;9652:5;9640:18;;;;;;;;;;;;;;;:27;9659:7;9640:27;;;;;;;;;;;;;;;;9633:34;;9524:151;;;;:::o;32408:134::-;32468:4;21730:12;:10;:12::i;:::-;21720:22;;:6;;;;;;;;;;;:22;;;21712:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32507:5:::1;32484:20;;:28;;;;;;;;;;;;;;;;;;32530:4;32523:11;;32408:134:::0;:::o;28683:30::-;;;;:::o;22455:244::-;21730:12;:10;:12::i;:::-;21720:22;;:6;;;;;;;;;;;:22;;;21712:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22564:1:::1;22544:22;;:8;:22;;::::0;22536:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22654:8;22625:38;;22646:6;;;;;;;;;;;22625:38;;;;;;;;;;;;22683:8;22674:6;;:17;;;;;;;;;;;;;;;;;;22455:244:::0;:::o;28827:31::-;;;;:::o;28027:24::-;;;;:::o;253:98::-;306:7;333:10;326:17;;253:98;:::o;15158:381::-;15311:1;15294:19;;:5;:19;;;15286:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15392:1;15373:21;;:7;:21;;;15365:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15477:6;15447:11;:18;15459:5;15447:18;;;;;;;;;;;;;;;:27;15466:7;15447:27;;;;;;;;;;;;;;;:36;;;;15515:7;15499:32;;15508:5;15499:32;;;15524:6;15499:32;;;;;;:::i;:::-;;;;;;;;15158:381;;;:::o;33473:4148::-;33621:1;33605:18;;:4;:18;;;33597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33698:1;33684:16;;:2;:16;;;33676:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33765:1;33755:6;:11;33752:92;;33783:28;33799:4;33805:2;33809:1;33783:15;:28::i;:::-;33826:7;;33752:92;33860:14;;;;;;;;;;;33857:1736;;;33920:7;:5;:7::i;:::-;33912:15;;:4;:15;;;;:49;;;;;33954:7;:5;:7::i;:::-;33948:13;;:2;:13;;;;33912:49;:86;;;;;33996:1;33982:16;;:2;:16;;;;33912:86;:128;;;;;34033:6;34019:21;;:2;:21;;;;33912:128;:158;;;;;34062:8;;;;;;;;;;;34061:9;33912:158;33890:1692;;;34108:13;;;;;;;;;;;34104:148;;34153:19;:25;34173:4;34153:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34182:19;:23;34202:2;34182:23;;;;;;;;;;;;;;;;;;;;;;;;;34153:52;34145:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34104:148;34411:20;;;;;;;;;;;34407:423;;;34465:7;:5;:7::i;:::-;34459:13;;:2;:13;;;;:47;;;;;34490:15;34476:30;;:2;:30;;;;34459:47;:79;;;;;34524:13;;;;;;;;;;;34510:28;;:2;:28;;;;34459:79;34455:356;;;34616:12;34574:28;:39;34603:9;34574:39;;;;;;;;;;;;;;;;:54;34566:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34775:12;34733:28;:39;34762:9;34733:39;;;;;;;;;;;;;;;:54;;;;34455:356;34407:423;34883:25;:31;34909:4;34883:31;;;;;;;;;;;;;;;;;;;;;;;;;:62;;;;;34919:22;:26;34942:2;34919:26;;;;;;;;;;;;;;;;;;;;;;;;;34918:27;34883:62;34879:688;;;34988:11;;34978:6;:21;;34970:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;35105:9;;35088:13;35098:2;35088:9;:13::i;:::-;35079:6;:22;;;;:::i;:::-;:35;;35071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34879:688;;;35217:25;:29;35243:2;35217:29;;;;;;;;;;;;;;;;;;;;;;;;;:62;;;;;35251:22;:28;35274:4;35251:28;;;;;;;;;;;;;;;;;;;;;;;;;35250:29;35217:62;35213:354;;;35322:11;;35312:6;:21;;35304:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;35213:354;;;35430:22;:26;35453:2;35430:26;;;;;;;;;;;;;;;;;;;;;;;;;35426:141;;35514:9;;35497:13;35507:2;35497:9;:13::i;:::-;35488:6;:22;;;;:::i;:::-;:35;;35480:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35426:141;35213:354;34879:688;33890:1692;33857:1736;35624:11;;;;;;;;;;;:37;;;;;35653:8;;;;;;;;;;;35652:9;35624:37;:86;;;;;35679:25;:31;35705:4;35679:31;;;;;;;;;;;;;;;;;;;;;;;;;35678:32;35624:86;:129;;;;;35728:19;:25;35748:4;35728:25;;;;;;;;;;;;;;;;;;;;;;;;;35727:26;35624:129;:170;;;;;35771:19;:23;35791:2;35771:23;;;;;;;;;;;;;;;;;;;;;;;;;35770:24;35624:170;35606:304;;;35832:4;35821:8;;:15;;;;;;;;;;;;;;;;;;35854:10;:8;:10::i;:::-;35893:5;35882:8;;:16;;;;;;;;;;;;;;;;;;35606:304;35927:8;;;;;;;;;;;35926:9;:42;;;;;35939:25;:29;35965:2;35939:29;;;;;;;;;;;;;;;;;;;;;;;;;35926:42;:59;;;;;35972:13;;;;;;;;;;;35926:59;:78;;;;;35997:7;:5;:7::i;:::-;35989:15;;:4;:15;;;;35926:78;:107;;;;;36008:19;:25;36028:4;36008:25;;;;;;;;;;;;;;;;;;;;;;;;;35926:107;35923:215;;;36081:1;36069:11;;:13;;;;:::i;:::-;36050:16;:32;;;;36097:29;:27;:29::i;:::-;;35923:215;36151:12;36167:8;;;;;;;;;;;36166:9;36151:24;;36277:19;:25;36297:4;36277:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36306:19;:23;36326:2;36306:23;;;;;;;;;;;;;;;;;;;;;;;;;36277:52;36274:99;;;36356:5;36346:15;;36274:99;36386:12;36490:19;:23;36510:2;36490:23;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;;36517:25;:31;36543:4;36517:31;;;;;;;;;;;;;;;;;;;;;;;;;36490:58;36487:121;;;36585:23;36596:11;;36585:6;:10;;:23;;;;:::i;:::-;36563:18;;:45;;;;;;;:::i;:::-;;;;;;;;36487:121;36622:7;36619:948;;;36673:25;:29;36699:2;36673:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;36722:1;36706:13;;:17;36673:50;36669:748;;;36750:34;36780:3;36750:25;36761:13;;36750:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;36743:41;;36851:13;;36832:16;;36825:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;36803:18;;:61;;;;;;;:::i;:::-;;;;;;;;36919:13;;36906:10;;36899:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;36883:12;;:49;;;;;;;:::i;:::-;;;;;;;;36999:13;;36980:16;;36973:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;36951:18;;:61;;;;;;;:::i;:::-;;;;;;;;36669:748;;;37073:25;:31;37099:4;37073:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;37123:1;37108:12;;:16;37073:51;37070:347;;;37149:33;37178:3;37149:24;37160:12;;37149:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;37142:40;;37245:12;;37227:15;;37220:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;37198:18;;:59;;;;;;;:::i;:::-;;;;;;;;37311:12;;37299:9;;37292:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;37276:12;;:47;;;;;;;:::i;:::-;;;;;;;;37389:12;;37371:15;;37364:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;37342:18;;:59;;;;;;;:::i;:::-;;;;;;;;37070:347;36669:748;37444:1;37437:4;:8;37434:93;;;37469:42;37485:4;37499;37506;37469:15;:42::i;:::-;37434:93;37551:4;37541:14;;;;;:::i;:::-;;;36619:948;37580:33;37596:4;37602:2;37606:6;37580:15;:33::i;:::-;33586:4035;;33473:4148;;;;:::o;17445:193::-;17531:7;17564:1;17559;:6;;17567:12;17551:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17591:9;17607:1;17603;:5;;;;:::i;:::-;17591:17;;17629:1;17622:8;;;17445:193;;;;;:::o;16539:182::-;16597:7;16617:9;16633:1;16629;:5;;;;:::i;:::-;16617:17;;16658:1;16653;:6;;16645:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16712:1;16705:8;;;16539:182;;;;:::o;33141:189::-;33258:5;33224:25;:31;33250:4;33224:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33316:5;33282:40;;33310:4;33282:40;;;;;;;;;;;;33141:189;;:::o;12722:575::-;12880:1;12862:20;;:6;:20;;;12854:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12964:1;12943:23;;:9;:23;;;12935:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13020:47;13041:6;13049:9;13060:6;13020:20;:47::i;:::-;13101:71;13123:6;13101:71;;;;;;;;;;;;;;;;;:9;:17;13111:6;13101:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13081:9;:17;13091:6;13081:17;;;;;;;;;;;;;;;:91;;;;13206:32;13231:6;13206:9;:20;13216:9;13206:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13183:9;:20;13193:9;13183:20;;;;;;;;;;;;;;;:55;;;;13271:9;13254:35;;13263:6;13254:35;;;13282:6;13254:35;;;;;;:::i;:::-;;;;;;;;12722:575;;;:::o;38577:1372::-;38616:23;38642:24;38660:4;38642:9;:24::i;:::-;38616:50;;38677:25;38747:12;;38726:18;;38705;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;38677:82;;38770:12;38820:1;38799:17;:22;38795:35;;38823:7;;;;;38795:35;38843:23;38928:1;38908:17;38887:18;;38869:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;38843:86;;38940:26;38969:36;38989:15;38969;:19;;:36;;;;:::i;:::-;38940:65;;39019:25;39047:21;39019:49;;39082:36;39099:18;39082:16;:36::i;:::-;39133:18;39154:44;39180:17;39154:21;:25;;:44;;;;:::i;:::-;39133:65;;39212:23;39238:57;39277:17;39238:34;39253:18;;39238:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;39212:83;;39306:17;39326:51;39359:17;39326:28;39341:12;;39326:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;39306:71;;39392:23;39449:9;39431:15;39418:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;39392:66;;39494:1;39473:18;:22;;;;39527:1;39506:18;:22;;;;39554:1;39539:12;:16;;;;39590:9;;;;;;;;;;;39582:23;;39613:9;39582:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39569:58;;;;;39662:1;39644:15;:19;:42;;;;;39685:1;39667:15;:19;39644:42;39641:210;;;39702:46;39715:15;39732;39702:12;:46::i;:::-;39768:71;39783:18;39803:15;39820:18;;39768:71;;;;;;;;:::i;:::-;;;;;;;;39641:210;39886:15;;;;;;;;;;;39878:29;;39915:21;39878:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39865:76;;;;;38605:1344;;;;;;;;;;38577:1372;:::o;39958:544::-;40015:4;40051:15;40034:14;:32;;;;40080:28;40111:4;:14;;;40126:13;;;;;;;;;;;40111:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40080:60;;40154:20;40177:59;40224:11;;40177:42;40202:16;;40177:20;:24;;:42;;;;:::i;:::-;:46;;:59;;;;:::i;:::-;40154:82;;40269:1;40254:12;:16;40250:109;;;40286:61;40302:13;;;;;;;;;;;40325:6;40334:12;40286:15;:61::i;:::-;40250:109;40371:19;40408:13;;;;;;;;;;;40371:51;;40433:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40460:12;;;;;;;;;;40490:4;40483:11;;;;;39958:544;:::o;17898:473::-;17956:7;18206:1;18201;:6;18197:47;;18231:1;18224:8;;;;18197:47;18257:9;18273:1;18269;:5;;;;:::i;:::-;18257:17;;18302:1;18297;18293;:5;;;;:::i;:::-;:10;18285:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18362:1;18355:8;;;17898:473;;;;;:::o;18848:132::-;18906:7;18933:39;18937:1;18940;18933:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18926:46;;18848:132;;;;:::o;16143:125::-;;;;:::o;17005:136::-;17063:7;17090:43;17094:1;17097;17090:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17083:50;;17005:136;;;;:::o;37630:509::-;37699:21;37737:1;37723:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37699:40;;37768:4;37750;37755:1;37750:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37794:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37784:4;37789:1;37784:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37830:62;37847:4;37862:15;37880:11;37830:8;:62::i;:::-;37906:15;:66;;;37987:11;38013:1;38057:4;38084;38104:15;37906:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37685:454;37630:509;:::o;38147:421::-;38228:62;38245:4;38260:15;38278:11;38228:8;:62::i;:::-;38304:15;:31;;;38343:9;38376:4;38396:11;38422:1;38465;27787:42;38534:15;38304:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38147:421;;:::o;19477:279::-;19563:7;19595:1;19591;:5;19598:12;19583:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19622:9;19638:1;19634;:5;;;;:::i;:::-;19622:17;;19747:1;19740:8;;;19477:279;;;;;:::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:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:118::-;5488:24;5506:5;5488:24;:::i;:::-;5483:3;5476:37;5401:118;;:::o;5525:222::-;5618:4;5656:2;5645:9;5641:18;5633:26;;5669:71;5737:1;5726:9;5722:17;5713:6;5669:71;:::i;:::-;5525:222;;;;:::o;5753:86::-;5788:7;5828:4;5821:5;5817:16;5806:27;;5753:86;;;:::o;5845:112::-;5928:22;5944:5;5928:22;:::i;:::-;5923:3;5916:35;5845:112;;:::o;5963:214::-;6052:4;6090:2;6079:9;6075:18;6067:26;;6103:67;6167:1;6156:9;6152:17;6143:6;6103:67;:::i;:::-;5963:214;;;;:::o;6183:329::-;6242:6;6291:2;6279:9;6270:7;6266:23;6262:32;6259:119;;;6297:79;;:::i;:::-;6259:119;6417:1;6442:53;6487:7;6478:6;6467:9;6463:22;6442:53;:::i;:::-;6432:63;;6388:117;6183:329;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:468::-;6844:6;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:50;7222:7;7213:6;7202:9;7198:22;7180:50;:::i;:::-;7170:60;;7125:115;6779:468;;;;;:::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:180::-;7781:77;7778:1;7771:88;7878:4;7875:1;7868:15;7902:4;7899:1;7892:15;7919:320;7963:6;8000:1;7994:4;7990:12;7980:22;;8047:1;8041:4;8037:12;8068:18;8058:81;;8124:4;8116:6;8112:17;8102:27;;8058:81;8186:2;8178:6;8175:14;8155:18;8152:38;8149:84;;8205:18;;:::i;:::-;8149:84;7970:269;7919:320;;;:::o;8245:182::-;8385:34;8381:1;8373:6;8369:14;8362:58;8245:182;:::o;8433:366::-;8575:3;8596:67;8660:2;8655:3;8596:67;:::i;:::-;8589:74;;8672:93;8761:3;8672:93;:::i;:::-;8790:2;8785:3;8781:12;8774:19;;8433:366;;;:::o;8805:419::-;8971:4;9009:2;8998:9;8994:18;8986:26;;9058:9;9052:4;9048:20;9044:1;9033:9;9029:17;9022:47;9086:131;9212:4;9086:131;:::i;:::-;9078:139;;8805:419;;;:::o;9230:244::-;9370:34;9366:1;9358:6;9354:14;9347:58;9439:27;9434:2;9426:6;9422:15;9415:52;9230:244;:::o;9480:366::-;9622:3;9643:67;9707:2;9702:3;9643:67;:::i;:::-;9636:74;;9719:93;9808:3;9719:93;:::i;:::-;9837:2;9832:3;9828:12;9821:19;;9480:366;;;:::o;9852:419::-;10018:4;10056:2;10045:9;10041:18;10033:26;;10105:9;10099:4;10095:20;10091:1;10080:9;10076:17;10069:47;10133:131;10259:4;10133:131;:::i;:::-;10125:139;;9852:419;;;:::o;10277:225::-;10417:34;10413:1;10405:6;10401:14;10394:58;10486:8;10481:2;10473:6;10469:15;10462:33;10277:225;:::o;10508:366::-;10650:3;10671:67;10735:2;10730:3;10671:67;:::i;:::-;10664:74;;10747:93;10836:3;10747:93;:::i;:::-;10865:2;10860:3;10856:12;10849:19;;10508:366;;;:::o;10880:419::-;11046:4;11084:2;11073:9;11069:18;11061:26;;11133:9;11127:4;11123:20;11119:1;11108:9;11104:17;11097:47;11161:131;11287:4;11161:131;:::i;:::-;11153:139;;10880:419;;;:::o;11305:223::-;11445:34;11441:1;11433:6;11429:14;11422:58;11514:6;11509:2;11501:6;11497:15;11490:31;11305:223;:::o;11534:366::-;11676:3;11697:67;11761:2;11756:3;11697:67;:::i;:::-;11690:74;;11773:93;11862:3;11773:93;:::i;:::-;11891:2;11886:3;11882:12;11875:19;;11534:366;;;:::o;11906:419::-;12072:4;12110:2;12099:9;12095:18;12087:26;;12159:9;12153:4;12149:20;12145:1;12134:9;12130:17;12123:47;12187:131;12313:4;12187:131;:::i;:::-;12179:139;;11906:419;;;:::o;12331:221::-;12471:34;12467:1;12459:6;12455:14;12448:58;12540:4;12535:2;12527:6;12523:15;12516:29;12331:221;:::o;12558:366::-;12700:3;12721:67;12785:2;12780:3;12721:67;:::i;:::-;12714:74;;12797:93;12886:3;12797:93;:::i;:::-;12915:2;12910:3;12906:12;12899:19;;12558:366;;;:::o;12930:419::-;13096:4;13134:2;13123:9;13119:18;13111:26;;13183:9;13177:4;13173:20;13169:1;13158:9;13154:17;13147:47;13211:131;13337:4;13211:131;:::i;:::-;13203:139;;12930:419;;;:::o;13355:224::-;13495:34;13491:1;13483:6;13479:14;13472:58;13564:7;13559:2;13551:6;13547:15;13540:32;13355:224;:::o;13585:366::-;13727:3;13748:67;13812:2;13807:3;13748:67;:::i;:::-;13741:74;;13824:93;13913:3;13824:93;:::i;:::-;13942:2;13937:3;13933:12;13926:19;;13585:366;;;:::o;13957:419::-;14123:4;14161:2;14150:9;14146:18;14138:26;;14210:9;14204:4;14200:20;14196:1;14185:9;14181:17;14174:47;14238:131;14364:4;14238:131;:::i;:::-;14230:139;;13957:419;;;:::o;14382:222::-;14522:34;14518:1;14510:6;14506:14;14499:58;14591:5;14586:2;14578:6;14574:15;14567:30;14382:222;:::o;14610:366::-;14752:3;14773:67;14837:2;14832:3;14773:67;:::i;:::-;14766:74;;14849:93;14938:3;14849:93;:::i;:::-;14967:2;14962:3;14958:12;14951:19;;14610:366;;;:::o;14982:419::-;15148:4;15186:2;15175:9;15171:18;15163:26;;15235:9;15229:4;15225:20;15221:1;15210:9;15206:17;15199:47;15263:131;15389:4;15263:131;:::i;:::-;15255:139;;14982:419;;;:::o;15407:172::-;15547:24;15543:1;15535:6;15531:14;15524:48;15407:172;:::o;15585:366::-;15727:3;15748:67;15812:2;15807:3;15748:67;:::i;:::-;15741:74;;15824:93;15913:3;15824:93;:::i;:::-;15942:2;15937:3;15933:12;15926:19;;15585:366;;;:::o;15957:419::-;16123:4;16161:2;16150:9;16146:18;16138:26;;16210:9;16204:4;16200:20;16196:1;16185:9;16181:17;16174:47;16238:131;16364:4;16238:131;:::i;:::-;16230:139;;15957:419;;;:::o;16382:297::-;16522:34;16518:1;16510:6;16506:14;16499:58;16591:34;16586:2;16578:6;16574:15;16567:59;16660:11;16655:2;16647:6;16643:15;16636:36;16382:297;:::o;16685:366::-;16827:3;16848:67;16912:2;16907:3;16848:67;:::i;:::-;16841:74;;16924:93;17013:3;16924:93;:::i;:::-;17042:2;17037:3;17033:12;17026:19;;16685:366;;;:::o;17057:419::-;17223:4;17261:2;17250:9;17246:18;17238:26;;17310:9;17304:4;17300:20;17296:1;17285:9;17281:17;17274:47;17338:131;17464:4;17338:131;:::i;:::-;17330:139;;17057:419;;;:::o;17482:231::-;17622:34;17618:1;17610:6;17606:14;17599:58;17691:14;17686:2;17678:6;17674:15;17667:39;17482:231;:::o;17719:366::-;17861:3;17882:67;17946:2;17941:3;17882:67;:::i;:::-;17875:74;;17958:93;18047:3;17958:93;:::i;:::-;18076:2;18071:3;18067:12;18060:19;;17719:366;;;:::o;18091:419::-;18257:4;18295:2;18284:9;18280:18;18272:26;;18344:9;18338:4;18334:20;18330:1;18319:9;18315:17;18308:47;18372:131;18498:4;18372:131;:::i;:::-;18364:139;;18091:419;;;:::o;18516:180::-;18564:77;18561:1;18554:88;18661:4;18658:1;18651:15;18685:4;18682:1;18675:15;18702:191;18742:3;18761:20;18779:1;18761:20;:::i;:::-;18756:25;;18795:20;18813:1;18795:20;:::i;:::-;18790:25;;18838:1;18835;18831:9;18824:16;;18859:3;18856:1;18853:10;18850:36;;;18866:18;;:::i;:::-;18850:36;18702:191;;;;:::o;18899:169::-;19039:21;19035:1;19027:6;19023:14;19016:45;18899:169;:::o;19074:366::-;19216:3;19237:67;19301:2;19296:3;19237:67;:::i;:::-;19230:74;;19313:93;19402:3;19313:93;:::i;:::-;19431:2;19426:3;19422:12;19415:19;;19074:366;;;:::o;19446:419::-;19612:4;19650:2;19639:9;19635:18;19627:26;;19699:9;19693:4;19689:20;19685:1;19674:9;19670:17;19663:47;19727:131;19853:4;19727:131;:::i;:::-;19719:139;;19446:419;;;:::o;19871:232::-;20011:34;20007:1;19999:6;19995:14;19988:58;20080:15;20075:2;20067:6;20063:15;20056:40;19871:232;:::o;20109:366::-;20251:3;20272:67;20336:2;20331:3;20272:67;:::i;:::-;20265:74;;20348:93;20437:3;20348:93;:::i;:::-;20466:2;20461:3;20457:12;20450:19;;20109:366;;;:::o;20481:419::-;20647:4;20685:2;20674:9;20670:18;20662:26;;20734:9;20728:4;20724:20;20720:1;20709:9;20705:17;20698:47;20762:131;20888:4;20762:131;:::i;:::-;20754:139;;20481:419;;;:::o;20906:194::-;20946:4;20966:20;20984:1;20966:20;:::i;:::-;20961:25;;21000:20;21018:1;21000:20;:::i;:::-;20995:25;;21044:1;21041;21037:9;21029:17;;21068:1;21062:4;21059:11;21056:37;;;21073:18;;:::i;:::-;21056:37;20906:194;;;;:::o;21106:410::-;21146:7;21169:20;21187:1;21169:20;:::i;:::-;21164:25;;21203:20;21221:1;21203:20;:::i;:::-;21198:25;;21258:1;21255;21251:9;21280:30;21298:11;21280:30;:::i;:::-;21269:41;;21459:1;21450:7;21446:15;21443:1;21440:22;21420:1;21413:9;21393:83;21370:139;;21489:18;;:::i;:::-;21370:139;21154:362;21106:410;;;;:::o;21522:180::-;21570:77;21567:1;21560:88;21667:4;21664:1;21657:15;21691:4;21688:1;21681:15;21708:185;21748:1;21765:20;21783:1;21765:20;:::i;:::-;21760:25;;21799:20;21817:1;21799:20;:::i;:::-;21794:25;;21838:1;21828:35;;21843:18;;:::i;:::-;21828:35;21885:1;21882;21878:9;21873:14;;21708:185;;;;:::o;21899:177::-;22039:29;22035:1;22027:6;22023:14;22016:53;21899:177;:::o;22082:366::-;22224:3;22245:67;22309:2;22304:3;22245:67;:::i;:::-;22238:74;;22321:93;22410:3;22321:93;:::i;:::-;22439:2;22434:3;22430:12;22423:19;;22082:366;;;:::o;22454:419::-;22620:4;22658:2;22647:9;22643:18;22635:26;;22707:9;22701:4;22697:20;22693:1;22682:9;22678:17;22671:47;22735:131;22861:4;22735:131;:::i;:::-;22727:139;;22454:419;;;:::o;22879:147::-;22980:11;23017:3;23002:18;;22879:147;;;;:::o;23032:114::-;;:::o;23152:398::-;23311:3;23332:83;23413:1;23408:3;23332:83;:::i;:::-;23325:90;;23424:93;23513:3;23424:93;:::i;:::-;23542:1;23537:3;23533:11;23526:18;;23152:398;;;:::o;23556:379::-;23740:3;23762:147;23905:3;23762:147;:::i;:::-;23755:154;;23926:3;23919:10;;23556:379;;;:::o;23941:442::-;24090:4;24128:2;24117:9;24113:18;24105:26;;24141:71;24209:1;24198:9;24194:17;24185:6;24141:71;:::i;:::-;24222:72;24290:2;24279:9;24275:18;24266:6;24222:72;:::i;:::-;24304;24372:2;24361:9;24357:18;24348:6;24304:72;:::i;:::-;23941:442;;;;;;:::o;24389:143::-;24446:5;24477:6;24471:13;24462:22;;24493:33;24520:5;24493:33;:::i;:::-;24389:143;;;;:::o;24538:351::-;24608:6;24657:2;24645:9;24636:7;24632:23;24628:32;24625:119;;;24663:79;;:::i;:::-;24625:119;24783:1;24808:64;24864:7;24855:6;24844:9;24840:22;24808:64;:::i;:::-;24798:74;;24754:128;24538:351;;;;:::o;24895:220::-;25035:34;25031:1;25023:6;25019:14;25012:58;25104:3;25099:2;25091:6;25087:15;25080:28;24895:220;:::o;25121:366::-;25263:3;25284:67;25348:2;25343:3;25284:67;:::i;:::-;25277:74;;25360:93;25449:3;25360:93;:::i;:::-;25478:2;25473:3;25469:12;25462:19;;25121:366;;;:::o;25493:419::-;25659:4;25697:2;25686:9;25682:18;25674:26;;25746:9;25740:4;25736:20;25732:1;25721:9;25717:17;25710:47;25774:131;25900:4;25774:131;:::i;:::-;25766:139;;25493:419;;;:::o;25918:180::-;25966:77;25963:1;25956:88;26063:4;26060:1;26053:15;26087:4;26084:1;26077:15;26104:180;26152:77;26149:1;26142:88;26249:4;26246:1;26239:15;26273:4;26270:1;26263:15;26290:143;26347:5;26378:6;26372:13;26363:22;;26394:33;26421:5;26394:33;:::i;:::-;26290:143;;;;:::o;26439:351::-;26509:6;26558:2;26546:9;26537:7;26533:23;26529:32;26526:119;;;26564:79;;:::i;:::-;26526:119;26684:1;26709:64;26765:7;26756:6;26745:9;26741:22;26709:64;:::i;:::-;26699:74;;26655:128;26439:351;;;;:::o;26796:85::-;26841:7;26870:5;26859:16;;26796:85;;;:::o;26887:158::-;26945:9;26978:61;26996:42;27005:32;27031:5;27005:32;:::i;:::-;26996:42;:::i;:::-;26978:61;:::i;:::-;26965:74;;26887:158;;;:::o;27051:147::-;27146:45;27185:5;27146:45;:::i;:::-;27141:3;27134:58;27051:147;;:::o;27204:114::-;27271:6;27305:5;27299:12;27289:22;;27204:114;;;:::o;27324:184::-;27423:11;27457:6;27452:3;27445:19;27497:4;27492:3;27488:14;27473:29;;27324:184;;;;:::o;27514:132::-;27581:4;27604:3;27596:11;;27634:4;27629:3;27625:14;27617:22;;27514:132;;;:::o;27652:108::-;27729:24;27747:5;27729:24;:::i;:::-;27724:3;27717:37;27652:108;;:::o;27766:179::-;27835:10;27856:46;27898:3;27890:6;27856:46;:::i;:::-;27934:4;27929:3;27925:14;27911:28;;27766:179;;;;:::o;27951:113::-;28021:4;28053;28048:3;28044:14;28036:22;;27951:113;;;:::o;28100:732::-;28219:3;28248:54;28296:5;28248:54;:::i;:::-;28318:86;28397:6;28392:3;28318:86;:::i;:::-;28311:93;;28428:56;28478:5;28428:56;:::i;:::-;28507:7;28538:1;28523:284;28548:6;28545:1;28542:13;28523:284;;;28624:6;28618:13;28651:63;28710:3;28695:13;28651:63;:::i;:::-;28644:70;;28737:60;28790:6;28737:60;:::i;:::-;28727:70;;28583:224;28570:1;28567;28563:9;28558:14;;28523:284;;;28527:14;28823:3;28816:10;;28224:608;;;28100:732;;;;:::o;28838:831::-;29101:4;29139:3;29128:9;29124:19;29116:27;;29153:71;29221:1;29210:9;29206:17;29197:6;29153:71;:::i;:::-;29234:80;29310:2;29299:9;29295:18;29286:6;29234:80;:::i;:::-;29361:9;29355:4;29351:20;29346:2;29335:9;29331:18;29324:48;29389:108;29492:4;29483:6;29389:108;:::i;:::-;29381:116;;29507:72;29575:2;29564:9;29560:18;29551:6;29507:72;:::i;:::-;29589:73;29657:3;29646:9;29642:19;29633:6;29589:73;:::i;:::-;28838:831;;;;;;;;:::o;29675:807::-;29924:4;29962:3;29951:9;29947:19;29939:27;;29976:71;30044:1;30033:9;30029:17;30020:6;29976:71;:::i;:::-;30057:72;30125:2;30114:9;30110:18;30101:6;30057:72;:::i;:::-;30139:80;30215:2;30204:9;30200:18;30191:6;30139:80;:::i;:::-;30229;30305:2;30294:9;30290:18;30281:6;30229:80;:::i;:::-;30319:73;30387:3;30376:9;30372:19;30363:6;30319:73;:::i;:::-;30402;30470:3;30459:9;30455:19;30446:6;30402:73;:::i;:::-;29675:807;;;;;;;;;:::o;30488:663::-;30576:6;30584;30592;30641:2;30629:9;30620:7;30616:23;30612:32;30609:119;;;30647:79;;:::i;:::-;30609:119;30767:1;30792:64;30848:7;30839:6;30828:9;30824:22;30792:64;:::i;:::-;30782:74;;30738:128;30905:2;30931:64;30987:7;30978:6;30967:9;30963:22;30931:64;:::i;:::-;30921:74;;30876:129;31044:2;31070:64;31126:7;31117:6;31106:9;31102:22;31070:64;:::i;:::-;31060:74;;31015:129;30488:663;;;;;:::o
Swarm Source
ipfs://a629143e57cdd161b00fd891b84e18484f1f4b6a0cf9bce8222dfb0b55a13d51
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.