Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
420,689,899,999,998 LUNA
Holders
96
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000011165921251107 LUNAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HairyPlotterluna
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-06 */ /** Welcome to LUNA ! Telegram : https://t.me/HairyPlotterLUNAPortal Website : will be announced on telegram! ▄▄▄ ▄▄ ▄▄ ▄▄ ▄ ▄▄▄▄▄▄▄ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █▄█ █ ▄ █ █ █ █ █▄█ █ █ █▄█ █ █ █▄▄▄█ █ ▄ █ █ █ █ █ █ █ █ ▄ █ █▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄█ █▄▄█▄▄█ █▄▄█ */ //SPDX-License-Identifier: MIT pragma solidity 0.8.9; 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 createInitialSupply(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; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } 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 HairyPlotterluna is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address public marketingWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint256 public liquidityActiveBlock = 0; // 0 means liquidity is not active yet uint256 public tradingActiveBlock = 0; // 0 means trading is not active bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public totalSellFees; uint256 public marketingSellFee; uint256 public liquiditySellFee; uint256 public totalBuyFees; uint256 public marketingBuyFee; uint256 public liquidityBuyFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; //blacklist bool public blacklistStatus; mapping (address => bool) public isBlacklisted; // 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 ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event ExcludedMaxTransactionAmount(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event taxMultiplierActive(uint256 duration); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); constructor() ERC20("HairyPlotterLUNA","LUNA") { address newOwner = address(0x0e6BaE6f5916948d33A1a5794a661B541A0F627D); uint256 totalSupply = 420689899999998 * 10**18; maxTransactionAmount = totalSupply * 3 / 100; swapTokensAtAmount = totalSupply / 1000; maxWallet = totalSupply * 7 / 100; marketingSellFee = 0; liquiditySellFee = 0; totalSellFees = marketingSellFee + liquiditySellFee; marketingBuyFee = 0; liquidityBuyFee = 0; totalBuyFees = marketingBuyFee + liquidityBuyFee; marketingWallet = address(0x0e6BaE6f5916948d33A1a5794a661B541A0F627D); // set as mw IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); // exclude from paying fees or having max transaction amount excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(newOwner, true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(_uniswapV2Router), true); excludeFromMaxTransaction(address(0xdead), true); /* createInitialSupply is a function that is only called here, and CANNOT be called ever again */ createInitialSupply(newOwner, totalSupply); transferOwnership(newOwner); } receive() external payable { } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } // set if blacklist function is enabled or disabled function setBlacklistStatus(bool newValue) external onlyOwner() { require(blacklistStatus != newValue, "Blacklist mode is already enabled"); blacklistStatus = newValue; } // set wallet as Blacklisted function setBlacklisted(address account, bool newValue) external onlyOwner() { require(newValue != isBlacklisted[account], "Wallet is blacklisted already"); isBlacklisted[account] = newValue; } // set multiple wallets as blacklisted function massSetBlacklisted(address[] memory accounts, bool newValue) external onlyOwner() { for(uint256 i; i < accounts.length; i++) { require(newValue != isBlacklisted[accounts[i]], "Some of the values are already set as Blacklisted"); isBlacklisted[accounts[i]] = newValue; } } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateMaxAmount(uint256 newNum) external onlyOwner { require(newNum > (totalSupply() * 1 / 200)/1e18, "Cannot set maxTransactionAmount lower than 0,5%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum > (totalSupply() * 1 / 100)/1e18, "Cannot set maxWallet lower than 1%"); maxWallet = newNum * (10**18); } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner { marketingBuyFee = _marketingFee; liquidityBuyFee = _liquidityFee; totalBuyFees = marketingBuyFee + liquidityBuyFee; require(totalBuyFees <= 99, "Must keep fees at 99% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner { marketingSellFee = _marketingFee; liquiditySellFee = _liquidityFee; totalSellFees = marketingSellFee + liquiditySellFee; require(totalSellFees <= 99, "Must keep fees at 99% or less"); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; emit ExcludedMaxTransactionAmount(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 UniSwap pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; excludeFromMaxTransaction(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; transferDelayEnabled = false; return true; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!blacklistStatus || (!isBlacklisted[from] && !isBlacklisted[to]), "Blacklisted!"); if(amount == 0) { super._transfer(from, to, 0); return; } if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active yet."); } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]) { require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // no taxes on transfers (non buys/sells) if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && totalSellFees > 0){ fees = amount.mul(totalSellFees).div(100); tokensForLiquidity += fees * liquiditySellFee / totalSellFees; tokensForMarketing += fees * marketingSellFee / totalSellFees; } // on buy else if(automatedMarketMakerPairs[from] && totalBuyFees > 0) { fees = amount.mul(totalBuyFees).div(100); tokensForLiquidity += fees * liquidityBuyFee / totalBuyFees; tokensForMarketing += fees * marketingBuyFee / totalBuyFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(0x0e6BaE6f5916948d33A1a5794a661B541A0F627D), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); bool success; uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing; tokensForLiquidity = 0; tokensForMarketing = 0; if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } // send eth for wallets (success,) = address(marketingWallet).call{value: ethForMarketing}(""); } // useful for taxs or to reclaim any ETH on the contract in a way that helps holders. function marketingTokens(uint256 ethAmountInWei) external onlyOwner { // generate the uniswap pair path of weth -> eth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountInWei}( 0, // accept any amount of Ethereum path, address(0xdead), block.timestamp ); } function withdrawStuckEth() external onlyOwner { (bool success,) = address(msg.sender).call{value: address(this).balance}(""); require(success, "failed to withdraw"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedMaxTransactionAmount","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":"tokensIntoLiqudity","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"taxMultiplierActive","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmountInWei","type":"uint256"}],"name":"marketingTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"massSetBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setBlacklistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","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":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526000600b556000600c556001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200008757600080fd5b506040518060400160405280601081526020017f4861697279506c6f747465724c554e41000000000000000000000000000000008152506040518060400160405280600481526020017f4c554e410000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010c92919062000d37565b5080600490805190602001906200012592919062000d37565b50505060006200013a620005f660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000730e6bae6f5916948d33a1a5794a661b541a0f627d905060006d14bdda612d475f467e401d3800009050606460038262000216919062000e20565b62000222919062000eb0565b6008819055506103e88162000238919062000eb0565b60098190555060646007826200024f919062000e20565b6200025b919062000eb0565b600a819055506000601181905550600060128190555060125460115462000283919062000ee8565b60108190555060006014819055506000601581905550601554601454620002ab919062000ee8565b601381905550730e6bae6f5916948d33a1a5794a661b541a0f627d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036857600080fd5b505afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a3919062000faf565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040657600080fd5b505afa1580156200041b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000441919062000faf565b6040518363ffffffff1660e01b81526004016200046092919062000ff2565b602060405180830381600087803b1580156200047b57600080fd5b505af115801562000490573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b6919062000faf565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000540816001620005fe60201b60201c565b62000553846001620006b160201b60201c565b62000566306001620006b160201b60201c565b6200057b61dead6001620006b160201b60201c565b6200058e846001620007fe60201b60201c565b620005a1306001620007fe60201b60201c565b620005b4826001620007fe60201b60201c565b620005c961dead6001620007fe60201b60201c565b620005db84846200094b60201b60201c565b620005ec8462000afa60201b60201c565b50505050620012eb565b600033905090565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006678282620007fe60201b60201c565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b620006c1620005f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074a9062001080565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007f29190620010bf565b60405180910390a25050565b6200080e620005f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008979062001080565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d95826040516200093f9190620010bf565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b5906200112c565b60405180910390fd5b620009d26000838362000ccf60201b60201c565b620009ee8160025462000cd460201b62002a581790919060201c565b60028190555062000a4c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000cd460201b62002a581790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aee91906200115f565b60405180910390a35050565b62000b0a620005f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000b9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b939062001080565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000c0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0690620011f2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000ce5919062000ee8565b90508381101562000d2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d249062001264565b60405180910390fd5b8091505092915050565b82805462000d4590620012b5565b90600052602060002090601f01602090048101928262000d69576000855562000db5565b82601f1062000d8457805160ff191683800117855562000db5565b8280016001018555821562000db5579182015b8281111562000db457825182559160200191906001019062000d97565b5b50905062000dc4919062000dc8565b5090565b5b8082111562000de357600081600090555060010162000dc9565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e2d8262000de7565b915062000e3a8362000de7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e765762000e7562000df1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ebd8262000de7565b915062000eca8362000de7565b92508262000edd5762000edc62000e81565b5b828204905092915050565b600062000ef58262000de7565b915062000f028362000de7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f3a5762000f3962000df1565b5b828201905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f778262000f4a565b9050919050565b62000f898162000f6a565b811462000f9557600080fd5b50565b60008151905062000fa98162000f7e565b92915050565b60006020828403121562000fc85762000fc762000f45565b5b600062000fd88482850162000f98565b91505092915050565b62000fec8162000f6a565b82525050565b600060408201905062001009600083018562000fe1565b62001018602083018462000fe1565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010686020836200101f565b9150620010758262001030565b602082019050919050565b600060208201905081810360008301526200109b8162001059565b9050919050565b60008115159050919050565b620010b981620010a2565b82525050565b6000602082019050620010d66000830184620010ae565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001114601f836200101f565b91506200112182620010dc565b602082019050919050565b60006020820190508181036000830152620011478162001105565b9050919050565b620011598162000de7565b82525050565b60006020820190506200117660008301846200114e565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620011da6026836200101f565b9150620011e7826200117c565b604082019050919050565b600060208201905081810360008301526200120d81620011cb565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200124c601b836200101f565b9150620012598262001214565b602082019050919050565b600060208201905081810360008301526200127f816200123d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620012ce57607f821691505b60208210811415620012e557620012e462001286565b5b50919050565b608051615c1962001315600039600081816115b001528181611f6d015261313e0152615c196000f3fe6080604052600436106103545760003560e01c80637fa787ba116101c6578063c876d0b9116100f7578063e2f4560511610095578063ee40166e1161006f578063ee40166e14610c51578063f2fde38b14610c7c578063f8b45b0514610ca5578063fe575a8714610cd05761035b565b8063e2f4560514610bd0578063e7f444b314610bfb578063e884f26014610c265761035b565b8063ccb61358116100d1578063ccb6135814610b14578063d01dd6d214610b3f578063d0a3981414610b68578063dd62ed3e14610b935761035b565b8063c876d0b914610a95578063c8c8ebe414610ac0578063ca7b260714610aeb5761035b565b8063a457c2d711610164578063b9e937001161013e578063b9e93700146109ed578063bbc0c74214610a18578063c024666814610a43578063c18bc19514610a6c5761035b565b8063a457c2d714610936578063a9059cbb14610973578063b62496f5146109b05761035b565b80638da5cb5b116101a05780638da5cb5b1461088e578063924de9b7146108b957806395d89b41146108e25780639a7a23d61461090d5761035b565b80637fa787ba1461083557806380c1f2291461084c5780638a8c523c146108775761035b565b8063313ce567116102a0578063680789521161023e578063715018a611610218578063715018a61461079f578063751039fc146107b65780637571336a146107e157806375f0a8741461080a5761035b565b8063680789521461070c5780636ddd17131461073757806370a08231146107625761035b565b806349bd5a5e1161027a57806349bd5a5e146106505780634a62bb651461067b5780634fbee193146106a657806366ca9b83146106e35761035b565b8063313ce567146105bf57806339509351146105ea5780633f3539ef146106275761035b565b806310d5de531161030d5780631a8145bb116102e75780631a8145bb146105035780631e433c0d1461052e5780631f3fed8f1461055757806323b872dd146105825761035b565b806310d5de53146104705780631694505e146104ad57806318160ddd146104d85761035b565b806302dbd8f81461036057806306fdde0314610389578063095ea7b3146103b4578063099d0d30146103f15780630f4432e31461041c578063106b5da1146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061038760048036038101906103829190614457565b610d0d565b005b34801561039557600080fd5b5061039e610e12565b6040516103ab9190614530565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d691906145b0565b610ea4565b6040516103e8919061460b565b60405180910390f35b3480156103fd57600080fd5b50610406610ec2565b6040516104139190614635565b60405180910390f35b34801561042857600080fd5b50610431610ec8565b60405161043e9190614635565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190614650565b610ece565b005b34801561047c57600080fd5b506104976004803603810190610492919061467d565b610ff6565b6040516104a4919061460b565b60405180910390f35b3480156104b957600080fd5b506104c2611016565b6040516104cf9190614709565b60405180910390f35b3480156104e457600080fd5b506104ed61103c565b6040516104fa9190614635565b60405180910390f35b34801561050f57600080fd5b50610518611046565b6040516105259190614635565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190614750565b61104c565b005b34801561056357600080fd5b5061056c611156565b6040516105799190614635565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061477d565b61115c565b6040516105b6919061460b565b60405180910390f35b3480156105cb57600080fd5b506105d4611235565b6040516105e191906147ec565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c91906145b0565b61123e565b60405161061e919061460b565b60405180910390f35b34801561063357600080fd5b5061064e60048036038101906106499190614650565b6112f1565b005b34801561065c57600080fd5b506106656115ae565b6040516106729190614816565b60405180910390f35b34801561068757600080fd5b506106906115d2565b60405161069d919061460b565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c8919061467d565b6115e5565b6040516106da919061460b565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190614457565b61163b565b005b34801561071857600080fd5b50610721611740565b60405161072e9190614635565b60405180910390f35b34801561074357600080fd5b5061074c611746565b604051610759919061460b565b60405180910390f35b34801561076e57600080fd5b506107896004803603810190610784919061467d565b611759565b6040516107969190614635565b60405180910390f35b3480156107ab57600080fd5b506107b46117a1565b005b3480156107c257600080fd5b506107cb6118f9565b6040516107d8919061460b565b60405180910390f35b3480156107ed57600080fd5b5061080860048036038101906108039190614831565b6119cf565b005b34801561081657600080fd5b5061081f611b0f565b60405161082c9190614816565b60405180910390f35b34801561084157600080fd5b5061084a611b35565b005b34801561085857600080fd5b50610861611c7b565b60405161086e919061460b565b60405180910390f35b34801561088357600080fd5b5061088c611c8e565b005b34801561089a57600080fd5b506108a3611d64565b6040516108b09190614816565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190614750565b611d8e565b005b3480156108ee57600080fd5b506108f7611e42565b6040516109049190614530565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190614831565b611ed4565b005b34801561094257600080fd5b5061095d600480360381019061095891906145b0565b612008565b60405161096a919061460b565b60405180910390f35b34801561097f57600080fd5b5061099a600480360381019061099591906145b0565b6120d5565b6040516109a7919061460b565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d2919061467d565b6120f3565b6040516109e4919061460b565b60405180910390f35b3480156109f957600080fd5b50610a02612113565b604051610a0f9190614635565b60405180910390f35b348015610a2457600080fd5b50610a2d612119565b604051610a3a919061460b565b60405180910390f35b348015610a4f57600080fd5b50610a6a6004803603810190610a659190614831565b61212c565b005b348015610a7857600080fd5b50610a936004803603810190610a8e9190614650565b61226c565b005b348015610aa157600080fd5b50610aaa612394565b604051610ab7919061460b565b60405180910390f35b348015610acc57600080fd5b50610ad56123a7565b604051610ae29190614635565b60405180910390f35b348015610af757600080fd5b50610b126004803603810190610b0d91906149b9565b6123ad565b005b348015610b2057600080fd5b50610b29612586565b604051610b369190614635565b60405180910390f35b348015610b4b57600080fd5b50610b666004803603810190610b619190614831565b61258c565b005b348015610b7457600080fd5b50610b7d612711565b604051610b8a9190614635565b60405180910390f35b348015610b9f57600080fd5b50610bba6004803603810190610bb59190614a15565b612717565b604051610bc79190614635565b60405180910390f35b348015610bdc57600080fd5b50610be561279e565b604051610bf29190614635565b60405180910390f35b348015610c0757600080fd5b50610c106127a4565b604051610c1d9190614635565b60405180910390f35b348015610c3257600080fd5b50610c3b6127aa565b604051610c48919061460b565b60405180910390f35b348015610c5d57600080fd5b50610c66612865565b604051610c739190614635565b60405180910390f35b348015610c8857600080fd5b50610ca36004803603810190610c9e919061467d565b61286b565b005b348015610cb157600080fd5b50610cba612a32565b604051610cc79190614635565b60405180910390f35b348015610cdc57600080fd5b50610cf76004803603810190610cf2919061467d565b612a38565b604051610d04919061460b565b60405180910390f35b610d15612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90614aa1565b60405180910390fd5b8160118190555080601281905550601254601154610dc29190614af0565b60108190555060636010541115610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0590614b92565b60405180910390fd5b5050565b606060038054610e2190614be1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4d90614be1565b8015610e9a5780601f10610e6f57610100808354040283529160200191610e9a565b820191906000526020600020905b815481529060010190602001808311610e7d57829003601f168201915b5050505050905090565b6000610eb8610eb1612ab6565b8484612abe565b6001905092915050565b60125481565b600b5481565b610ed6612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90614aa1565b60405180910390fd5b670de0b6b3a764000060c86001610f7a61103c565b610f849190614c13565b610f8e9190614c9c565b610f989190614c9c565b8111610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090614d3f565b60405180910390fd5b670de0b6b3a764000081610fed9190614c13565b60088190555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60175481565b611054612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614aa1565b60405180910390fd5b801515601a60009054906101000a900460ff1615151415611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090614dd1565b60405180910390fd5b80601a60006101000a81548160ff02191690831515021790555050565b60165481565b6000611169848484612c89565b61122a84611175612ab6565b61122585604051806060016040528060288152602001615b9760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111db612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b612abe565b600190509392505050565b60006012905090565b60006112e761124b612ab6565b846112e2856001600061125c612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a5890919063ffffffff16565b612abe565b6001905092915050565b6112f9612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90614aa1565b60405180910390fd5b6000600267ffffffffffffffff8111156113a5576113a4614876565b5b6040519080825280602002602001820160405280156113d35781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561143e57600080fd5b505afa158015611452573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114769190614e06565b8160008151811061148a57611489614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106114d9576114d8614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b81526004016115789493929190614f5b565b6000604051808303818588803b15801561159157600080fd5b505af11580156115a5573d6000803e3d6000fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611643612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990614aa1565b60405180910390fd5b81601481905550806015819055506015546014546116f09190614af0565b6013819055506063601354111561173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390614b92565b60405180910390fd5b5050565b60145481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117a9612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f90614aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611903612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990614aa1565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506000600f60006101000a81548160ff0219169083151502179055506001905090565b6119d7612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d90614aa1565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d9582604051611b03919061460b565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b3d612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc390614aa1565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611bf290614fd8565b60006040518083038185875af1925050503d8060008114611c2f576040519150601f19603f3d011682016040523d82523d6000602084013e611c34565b606091505b5050905080611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f90615039565b60405180910390fd5b50565b601a60009054906101000a900460ff1681565b611c96612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90614aa1565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555043600c81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d96612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614aa1565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611e5190614be1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7d90614be1565b8015611eca5780601f10611e9f57610100808354040283529160200191611eca565b820191906000526020600020905b815481529060010190602001808311611ead57829003601f168201915b5050505050905090565b611edc612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290614aa1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff1906150f1565b60405180910390fd5b6120048282613a1e565b5050565b60006120cb612015612ab6565b846120c685604051806060016040528060258152602001615bbf602591396001600061203f612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b612abe565b6001905092915050565b60006120e96120e2612ab6565b8484612c89565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b60135481565b600d60019054906101000a900460ff1681565b612134612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90614aa1565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612260919061460b565b60405180910390a25050565b612274612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614aa1565b60405180910390fd5b670de0b6b3a76400006064600161231861103c565b6123229190614c13565b61232c9190614c9c565b6123369190614c9c565b8111612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e90615183565b60405180910390fd5b670de0b6b3a76400008161238b9190614c13565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6123b5612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243b90614aa1565b60405180910390fd5b60005b825181101561258157601b600084838151811061246757612466614e33565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151582151514156124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490615215565b60405180910390fd5b81601b600085848151811061251557612514614e33565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061257990615235565b915050612447565b505050565b60155481565b612594612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614aa1565b60405180910390fd5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151581151514156126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad906152ca565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60115481565b60006127b4612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a90614aa1565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600c5481565b612873612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f990614aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129699061535c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b601b6020528060005260406000206000915054906101000a900460ff1681565b6000808284612a679190614af0565b905083811015612aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa3906153c8565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b259061545a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b95906154ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c7c9190614635565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf09061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6090615610565b60405180910390fd5b601a60009054906101000a900460ff161580612e255750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e245750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b612e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5b9061567c565b60405180910390fd5b6000811415612e7e57612e7983836000613ac9565b6139b5565b600d60019054906101000a900460ff16612f7357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f335750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f69906156e8565b60405180910390fd5b5b600d60009054906101000a900460ff161561354357612f90611d64565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ffe5750612fce611d64565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130375750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613071575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561308a5750600660149054906101000a900460ff16155b1561354257600f60009054906101000a900460ff1615613259576130ac611d64565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156131355750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561318d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156132585743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320a906157a0565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132fc5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133a357600854811115613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333d90615832565b60405180910390fd5b600a5461335283611759565b8261335d9190614af0565b111561339e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133959061589e565b60405180910390fd5b613541565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134465750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561349557600854811115613490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348790615930565b60405180910390fd5b613540565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661353f57600a546134f283611759565b826134fd9190614af0565b111561353e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135359061589e565b60405180910390fd5b5b5b5b5b5b600061354e30611759565b9050600060095482101590508080156135735750600d60029054906101000a900460ff165b801561358c5750600660149054906101000a900460ff16155b80156135e25750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136385750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561368e5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136d2576001600660146101000a81548160ff0219169083151502179055506136b6613d5e565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137885750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561379257600090505b600081156139a557601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137f557506000601054115b1561388f57613822606461381460105488613f4390919063ffffffff16565b613fbe90919063ffffffff16565b9050601054601254826138359190614c13565b61383f9190614c9c565b601760008282546138509190614af0565b92505081905550601054601154826138689190614c13565b6138729190614c9c565b601660008282546138839190614af0565b92505081905550613981565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138ea57506000601354115b1561398057613917606461390960135488613f4390919063ffffffff16565b613fbe90919063ffffffff16565b90506013546015548261392a9190614c13565b6139349190614c9c565b601760008282546139459190614af0565b925050819055506013546014548261395d9190614c13565b6139679190614c9c565b601660008282546139789190614af0565b925050819055505b5b600081111561399657613995873083613ac9565b5b80856139a29190615950565b94505b6139b0878787613ac9565b505050505b505050565b6000838311158290613a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f99190614530565b60405180910390fd5b5060008385613a119190615950565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613a7f82826119cf565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b309061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba090615610565b60405180910390fd5b613bb4838383614008565b613c1f81604051806060016040528060268152602001615b71602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cb2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a5890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d519190614635565b60405180910390a3505050565b6000613d6930611759565b9050600080601654601754613d7e9190614af0565b90506000831480613d8f5750600081145b15613d9c57505050613f41565b600060028260175486613daf9190614c13565b613db99190614c9c565b613dc39190614c9c565b90506000613dda828661400d90919063ffffffff16565b90506000479050613dea82614057565b6000613dff824761400d90919063ffffffff16565b90506000613e2a86613e1c60165485613f4390919063ffffffff16565b613fbe90919063ffffffff16565b905060008183613e3a9190615950565b905060006017819055506000601681905550600086118015613e5c5750600081115b15613ea957613e6b86826142a9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601754604051613ea093929190615984565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613eef90614fd8565b60006040518083038185875af1925050503d8060008114613f2c576040519150601f19603f3d011682016040523d82523d6000602084013e613f31565b606091505b5050809850505050505050505050505b565b600080831415613f565760009050613fb8565b60008284613f649190614c13565b9050828482613f739190614c9c565b14613fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613faa90615a2d565b60405180910390fd5b809150505b92915050565b600061400083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143aa565b905092915050565b505050565b600061404f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139ba565b905092915050565b6000600267ffffffffffffffff81111561407457614073614876565b5b6040519080825280602002602001820160405280156140a25781602001602082028036833780820191505090505b50905030816000815181106140ba576140b9614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561415c57600080fd5b505afa158015614170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141949190614e06565b816001815181106141a8576141a7614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061420f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612abe565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614273959493929190615a4d565b600060405180830381600087803b15801561428d57600080fd5b505af11580156142a1573d6000803e3d6000fd5b505050505050565b6142d630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612abe565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080730e6bae6f5916948d33a1a5794a661b541a0f627d426040518863ffffffff1660e01b815260040161435196959493929190615aa7565b6060604051808303818588803b15801561436a57600080fd5b505af115801561437e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143a39190615b1d565b5050505050565b600080831182906143f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e89190614530565b60405180910390fd5b50600083856144009190614c9c565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61443481614421565b811461443f57600080fd5b50565b6000813590506144518161442b565b92915050565b6000806040838503121561446e5761446d614417565b5b600061447c85828601614442565b925050602061448d85828601614442565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144d15780820151818401526020810190506144b6565b838111156144e0576000848401525b50505050565b6000601f19601f8301169050919050565b600061450282614497565b61450c81856144a2565b935061451c8185602086016144b3565b614525816144e6565b840191505092915050565b6000602082019050818103600083015261454a81846144f7565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061457d82614552565b9050919050565b61458d81614572565b811461459857600080fd5b50565b6000813590506145aa81614584565b92915050565b600080604083850312156145c7576145c6614417565b5b60006145d58582860161459b565b92505060206145e685828601614442565b9150509250929050565b60008115159050919050565b614605816145f0565b82525050565b600060208201905061462060008301846145fc565b92915050565b61462f81614421565b82525050565b600060208201905061464a6000830184614626565b92915050565b60006020828403121561466657614665614417565b5b600061467484828501614442565b91505092915050565b60006020828403121561469357614692614417565b5b60006146a18482850161459b565b91505092915050565b6000819050919050565b60006146cf6146ca6146c584614552565b6146aa565b614552565b9050919050565b60006146e1826146b4565b9050919050565b60006146f3826146d6565b9050919050565b614703816146e8565b82525050565b600060208201905061471e60008301846146fa565b92915050565b61472d816145f0565b811461473857600080fd5b50565b60008135905061474a81614724565b92915050565b60006020828403121561476657614765614417565b5b60006147748482850161473b565b91505092915050565b60008060006060848603121561479657614795614417565b5b60006147a48682870161459b565b93505060206147b58682870161459b565b92505060406147c686828701614442565b9150509250925092565b600060ff82169050919050565b6147e6816147d0565b82525050565b600060208201905061480160008301846147dd565b92915050565b61481081614572565b82525050565b600060208201905061482b6000830184614807565b92915050565b6000806040838503121561484857614847614417565b5b60006148568582860161459b565b92505060206148678582860161473b565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148ae826144e6565b810181811067ffffffffffffffff821117156148cd576148cc614876565b5b80604052505050565b60006148e061440d565b90506148ec82826148a5565b919050565b600067ffffffffffffffff82111561490c5761490b614876565b5b602082029050602081019050919050565b600080fd5b6000614935614930846148f1565b6148d6565b905080838252602082019050602084028301858111156149585761495761491d565b5b835b81811015614981578061496d888261459b565b84526020840193505060208101905061495a565b5050509392505050565b600082601f8301126149a05761499f614871565b5b81356149b0848260208601614922565b91505092915050565b600080604083850312156149d0576149cf614417565b5b600083013567ffffffffffffffff8111156149ee576149ed61441c565b5b6149fa8582860161498b565b9250506020614a0b8582860161473b565b9150509250929050565b60008060408385031215614a2c57614a2b614417565b5b6000614a3a8582860161459b565b9250506020614a4b8582860161459b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a8b6020836144a2565b9150614a9682614a55565b602082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614afb82614421565b9150614b0683614421565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b3b57614b3a614ac1565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614b7c601d836144a2565b9150614b8782614b46565b602082019050919050565b60006020820190508181036000830152614bab81614b6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bf957607f821691505b60208210811415614c0d57614c0c614bb2565b5b50919050565b6000614c1e82614421565b9150614c2983614421565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c6257614c61614ac1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ca782614421565b9150614cb283614421565b925082614cc257614cc1614c6d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302c35250000000000000000000000000000000000602082015250565b6000614d29602f836144a2565b9150614d3482614ccd565b604082019050919050565b60006020820190508181036000830152614d5881614d1c565b9050919050565b7f426c61636b6c697374206d6f646520697320616c726561647920656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dbb6021836144a2565b9150614dc682614d5f565b604082019050919050565b60006020820190508181036000830152614dea81614dae565b9050919050565b600081519050614e0081614584565b92915050565b600060208284031215614e1c57614e1b614417565b5b6000614e2a84828501614df1565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614e87614e82614e7d84614e62565b6146aa565b614421565b9050919050565b614e9781614e6c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ed281614572565b82525050565b6000614ee48383614ec9565b60208301905092915050565b6000602082019050919050565b6000614f0882614e9d565b614f128185614ea8565b9350614f1d83614eb9565b8060005b83811015614f4e578151614f358882614ed8565b9750614f4083614ef0565b925050600181019050614f21565b5085935050505092915050565b6000608082019050614f706000830187614e8e565b8181036020830152614f828186614efd565b9050614f916040830185614807565b614f9e6060830184614626565b95945050505050565b600081905092915050565b50565b6000614fc2600083614fa7565b9150614fcd82614fb2565b600082019050919050565b6000614fe382614fb5565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b60006150236012836144a2565b915061502e82614fed565b602082019050919050565b6000602082019050818103600083015261505281615016565b9050919050565b7f54686520556e695377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006150db6041836144a2565b91506150e682615059565b606082019050919050565b6000602082019050818103600083015261510a816150ce565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061516d6022836144a2565b915061517882615111565b604082019050919050565b6000602082019050818103600083015261519c81615160565b9050919050565b7f536f6d65206f66207468652076616c7565732061726520616c7265616479207360008201527f657420617320426c61636b6c6973746564000000000000000000000000000000602082015250565b60006151ff6031836144a2565b915061520a826151a3565b604082019050919050565b6000602082019050818103600083015261522e816151f2565b9050919050565b600061524082614421565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561527357615272614ac1565b5b600182019050919050565b7f57616c6c657420697320626c61636b6c697374656420616c7265616479000000600082015250565b60006152b4601d836144a2565b91506152bf8261527e565b602082019050919050565b600060208201905081810360008301526152e3816152a7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153466026836144a2565b9150615351826152ea565b604082019050919050565b6000602082019050818103600083015261537581615339565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006153b2601b836144a2565b91506153bd8261537c565b602082019050919050565b600060208201905081810360008301526153e1816153a5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154446024836144a2565b915061544f826153e8565b604082019050919050565b6000602082019050818103600083015261547381615437565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154d66022836144a2565b91506154e18261547a565b604082019050919050565b60006020820190508181036000830152615505816154c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155686025836144a2565b91506155738261550c565b604082019050919050565b600060208201905081810360008301526155978161555b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155fa6023836144a2565b91506156058261559e565b604082019050919050565b60006020820190508181036000830152615629816155ed565b9050919050565b7f426c61636b6c6973746564210000000000000000000000000000000000000000600082015250565b6000615666600c836144a2565b915061567182615630565b602082019050919050565b6000602082019050818103600083015261569581615659565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b60006156d2601a836144a2565b91506156dd8261569c565b602082019050919050565b60006020820190508181036000830152615701816156c5565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061578a6049836144a2565b915061579582615708565b606082019050919050565b600060208201905081810360008301526157b98161577d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061581c6035836144a2565b9150615827826157c0565b604082019050919050565b6000602082019050818103600083015261584b8161580f565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000615888601b836144a2565b915061589382615852565b602082019050919050565b600060208201905081810360008301526158b78161587b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061591a6036836144a2565b9150615925826158be565b604082019050919050565b600060208201905081810360008301526159498161590d565b9050919050565b600061595b82614421565b915061596683614421565b92508282101561597957615978614ac1565b5b828203905092915050565b60006060820190506159996000830186614626565b6159a66020830185614626565b6159b36040830184614626565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a176021836144a2565b9150615a22826159bb565b604082019050919050565b60006020820190508181036000830152615a4681615a0a565b9050919050565b600060a082019050615a626000830188614626565b615a6f6020830187614e8e565b8181036040830152615a818186614efd565b9050615a906060830185614807565b615a9d6080830184614626565b9695505050505050565b600060c082019050615abc6000830189614807565b615ac96020830188614626565b615ad66040830187614e8e565b615ae36060830186614e8e565b615af06080830185614807565b615afd60a0830184614626565b979650505050505050565b600081519050615b178161442b565b92915050565b600080600060608486031215615b3657615b35614417565b5b6000615b4486828701615b08565b9350506020615b5586828701615b08565b9250506040615b6686828701615b08565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122095a57de4425d3a63ac81b954bfc63e317dcf958eca48fcd113fa458d4442246264736f6c63430008090033
Deployed Bytecode
0x6080604052600436106103545760003560e01c80637fa787ba116101c6578063c876d0b9116100f7578063e2f4560511610095578063ee40166e1161006f578063ee40166e14610c51578063f2fde38b14610c7c578063f8b45b0514610ca5578063fe575a8714610cd05761035b565b8063e2f4560514610bd0578063e7f444b314610bfb578063e884f26014610c265761035b565b8063ccb61358116100d1578063ccb6135814610b14578063d01dd6d214610b3f578063d0a3981414610b68578063dd62ed3e14610b935761035b565b8063c876d0b914610a95578063c8c8ebe414610ac0578063ca7b260714610aeb5761035b565b8063a457c2d711610164578063b9e937001161013e578063b9e93700146109ed578063bbc0c74214610a18578063c024666814610a43578063c18bc19514610a6c5761035b565b8063a457c2d714610936578063a9059cbb14610973578063b62496f5146109b05761035b565b80638da5cb5b116101a05780638da5cb5b1461088e578063924de9b7146108b957806395d89b41146108e25780639a7a23d61461090d5761035b565b80637fa787ba1461083557806380c1f2291461084c5780638a8c523c146108775761035b565b8063313ce567116102a0578063680789521161023e578063715018a611610218578063715018a61461079f578063751039fc146107b65780637571336a146107e157806375f0a8741461080a5761035b565b8063680789521461070c5780636ddd17131461073757806370a08231146107625761035b565b806349bd5a5e1161027a57806349bd5a5e146106505780634a62bb651461067b5780634fbee193146106a657806366ca9b83146106e35761035b565b8063313ce567146105bf57806339509351146105ea5780633f3539ef146106275761035b565b806310d5de531161030d5780631a8145bb116102e75780631a8145bb146105035780631e433c0d1461052e5780631f3fed8f1461055757806323b872dd146105825761035b565b806310d5de53146104705780631694505e146104ad57806318160ddd146104d85761035b565b806302dbd8f81461036057806306fdde0314610389578063095ea7b3146103b4578063099d0d30146103f15780630f4432e31461041c578063106b5da1146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061038760048036038101906103829190614457565b610d0d565b005b34801561039557600080fd5b5061039e610e12565b6040516103ab9190614530565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d691906145b0565b610ea4565b6040516103e8919061460b565b60405180910390f35b3480156103fd57600080fd5b50610406610ec2565b6040516104139190614635565b60405180910390f35b34801561042857600080fd5b50610431610ec8565b60405161043e9190614635565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190614650565b610ece565b005b34801561047c57600080fd5b506104976004803603810190610492919061467d565b610ff6565b6040516104a4919061460b565b60405180910390f35b3480156104b957600080fd5b506104c2611016565b6040516104cf9190614709565b60405180910390f35b3480156104e457600080fd5b506104ed61103c565b6040516104fa9190614635565b60405180910390f35b34801561050f57600080fd5b50610518611046565b6040516105259190614635565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190614750565b61104c565b005b34801561056357600080fd5b5061056c611156565b6040516105799190614635565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061477d565b61115c565b6040516105b6919061460b565b60405180910390f35b3480156105cb57600080fd5b506105d4611235565b6040516105e191906147ec565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c91906145b0565b61123e565b60405161061e919061460b565b60405180910390f35b34801561063357600080fd5b5061064e60048036038101906106499190614650565b6112f1565b005b34801561065c57600080fd5b506106656115ae565b6040516106729190614816565b60405180910390f35b34801561068757600080fd5b506106906115d2565b60405161069d919061460b565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c8919061467d565b6115e5565b6040516106da919061460b565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190614457565b61163b565b005b34801561071857600080fd5b50610721611740565b60405161072e9190614635565b60405180910390f35b34801561074357600080fd5b5061074c611746565b604051610759919061460b565b60405180910390f35b34801561076e57600080fd5b506107896004803603810190610784919061467d565b611759565b6040516107969190614635565b60405180910390f35b3480156107ab57600080fd5b506107b46117a1565b005b3480156107c257600080fd5b506107cb6118f9565b6040516107d8919061460b565b60405180910390f35b3480156107ed57600080fd5b5061080860048036038101906108039190614831565b6119cf565b005b34801561081657600080fd5b5061081f611b0f565b60405161082c9190614816565b60405180910390f35b34801561084157600080fd5b5061084a611b35565b005b34801561085857600080fd5b50610861611c7b565b60405161086e919061460b565b60405180910390f35b34801561088357600080fd5b5061088c611c8e565b005b34801561089a57600080fd5b506108a3611d64565b6040516108b09190614816565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190614750565b611d8e565b005b3480156108ee57600080fd5b506108f7611e42565b6040516109049190614530565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190614831565b611ed4565b005b34801561094257600080fd5b5061095d600480360381019061095891906145b0565b612008565b60405161096a919061460b565b60405180910390f35b34801561097f57600080fd5b5061099a600480360381019061099591906145b0565b6120d5565b6040516109a7919061460b565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d2919061467d565b6120f3565b6040516109e4919061460b565b60405180910390f35b3480156109f957600080fd5b50610a02612113565b604051610a0f9190614635565b60405180910390f35b348015610a2457600080fd5b50610a2d612119565b604051610a3a919061460b565b60405180910390f35b348015610a4f57600080fd5b50610a6a6004803603810190610a659190614831565b61212c565b005b348015610a7857600080fd5b50610a936004803603810190610a8e9190614650565b61226c565b005b348015610aa157600080fd5b50610aaa612394565b604051610ab7919061460b565b60405180910390f35b348015610acc57600080fd5b50610ad56123a7565b604051610ae29190614635565b60405180910390f35b348015610af757600080fd5b50610b126004803603810190610b0d91906149b9565b6123ad565b005b348015610b2057600080fd5b50610b29612586565b604051610b369190614635565b60405180910390f35b348015610b4b57600080fd5b50610b666004803603810190610b619190614831565b61258c565b005b348015610b7457600080fd5b50610b7d612711565b604051610b8a9190614635565b60405180910390f35b348015610b9f57600080fd5b50610bba6004803603810190610bb59190614a15565b612717565b604051610bc79190614635565b60405180910390f35b348015610bdc57600080fd5b50610be561279e565b604051610bf29190614635565b60405180910390f35b348015610c0757600080fd5b50610c106127a4565b604051610c1d9190614635565b60405180910390f35b348015610c3257600080fd5b50610c3b6127aa565b604051610c48919061460b565b60405180910390f35b348015610c5d57600080fd5b50610c66612865565b604051610c739190614635565b60405180910390f35b348015610c8857600080fd5b50610ca36004803603810190610c9e919061467d565b61286b565b005b348015610cb157600080fd5b50610cba612a32565b604051610cc79190614635565b60405180910390f35b348015610cdc57600080fd5b50610cf76004803603810190610cf2919061467d565b612a38565b604051610d04919061460b565b60405180910390f35b610d15612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90614aa1565b60405180910390fd5b8160118190555080601281905550601254601154610dc29190614af0565b60108190555060636010541115610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0590614b92565b60405180910390fd5b5050565b606060038054610e2190614be1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4d90614be1565b8015610e9a5780601f10610e6f57610100808354040283529160200191610e9a565b820191906000526020600020905b815481529060010190602001808311610e7d57829003601f168201915b5050505050905090565b6000610eb8610eb1612ab6565b8484612abe565b6001905092915050565b60125481565b600b5481565b610ed6612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90614aa1565b60405180910390fd5b670de0b6b3a764000060c86001610f7a61103c565b610f849190614c13565b610f8e9190614c9c565b610f989190614c9c565b8111610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090614d3f565b60405180910390fd5b670de0b6b3a764000081610fed9190614c13565b60088190555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60175481565b611054612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614aa1565b60405180910390fd5b801515601a60009054906101000a900460ff1615151415611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090614dd1565b60405180910390fd5b80601a60006101000a81548160ff02191690831515021790555050565b60165481565b6000611169848484612c89565b61122a84611175612ab6565b61122585604051806060016040528060288152602001615b9760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111db612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b612abe565b600190509392505050565b60006012905090565b60006112e761124b612ab6565b846112e2856001600061125c612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a5890919063ffffffff16565b612abe565b6001905092915050565b6112f9612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90614aa1565b60405180910390fd5b6000600267ffffffffffffffff8111156113a5576113a4614876565b5b6040519080825280602002602001820160405280156113d35781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561143e57600080fd5b505afa158015611452573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114769190614e06565b8160008151811061148a57611489614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106114d9576114d8614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b81526004016115789493929190614f5b565b6000604051808303818588803b15801561159157600080fd5b505af11580156115a5573d6000803e3d6000fd5b50505050505050565b7f00000000000000000000000082a318d59dc1d27903ce3f2dcf2a02fc67946eb381565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611643612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990614aa1565b60405180910390fd5b81601481905550806015819055506015546014546116f09190614af0565b6013819055506063601354111561173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390614b92565b60405180910390fd5b5050565b60145481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117a9612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f90614aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611903612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990614aa1565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506000600f60006101000a81548160ff0219169083151502179055506001905090565b6119d7612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d90614aa1565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d9582604051611b03919061460b565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b3d612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc390614aa1565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611bf290614fd8565b60006040518083038185875af1925050503d8060008114611c2f576040519150601f19603f3d011682016040523d82523d6000602084013e611c34565b606091505b5050905080611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f90615039565b60405180910390fd5b50565b601a60009054906101000a900460ff1681565b611c96612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90614aa1565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555043600c81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d96612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614aa1565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611e5190614be1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7d90614be1565b8015611eca5780601f10611e9f57610100808354040283529160200191611eca565b820191906000526020600020905b815481529060010190602001808311611ead57829003601f168201915b5050505050905090565b611edc612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290614aa1565b60405180910390fd5b7f00000000000000000000000082a318d59dc1d27903ce3f2dcf2a02fc67946eb373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff1906150f1565b60405180910390fd5b6120048282613a1e565b5050565b60006120cb612015612ab6565b846120c685604051806060016040528060258152602001615bbf602591396001600061203f612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b612abe565b6001905092915050565b60006120e96120e2612ab6565b8484612c89565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b60135481565b600d60019054906101000a900460ff1681565b612134612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90614aa1565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612260919061460b565b60405180910390a25050565b612274612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614aa1565b60405180910390fd5b670de0b6b3a76400006064600161231861103c565b6123229190614c13565b61232c9190614c9c565b6123369190614c9c565b8111612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e90615183565b60405180910390fd5b670de0b6b3a76400008161238b9190614c13565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6123b5612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243b90614aa1565b60405180910390fd5b60005b825181101561258157601b600084838151811061246757612466614e33565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151582151514156124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490615215565b60405180910390fd5b81601b600085848151811061251557612514614e33565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061257990615235565b915050612447565b505050565b60155481565b612594612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614aa1565b60405180910390fd5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151581151514156126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad906152ca565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60115481565b60006127b4612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a90614aa1565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600c5481565b612873612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f990614aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129699061535c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b601b6020528060005260406000206000915054906101000a900460ff1681565b6000808284612a679190614af0565b905083811015612aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa3906153c8565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b259061545a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b95906154ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c7c9190614635565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf09061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6090615610565b60405180910390fd5b601a60009054906101000a900460ff161580612e255750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e245750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b612e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5b9061567c565b60405180910390fd5b6000811415612e7e57612e7983836000613ac9565b6139b5565b600d60019054906101000a900460ff16612f7357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f335750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f69906156e8565b60405180910390fd5b5b600d60009054906101000a900460ff161561354357612f90611d64565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ffe5750612fce611d64565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130375750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613071575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561308a5750600660149054906101000a900460ff16155b1561354257600f60009054906101000a900460ff1615613259576130ac611d64565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156131355750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561318d57507f00000000000000000000000082a318d59dc1d27903ce3f2dcf2a02fc67946eb373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156132585743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320a906157a0565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132fc5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133a357600854811115613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333d90615832565b60405180910390fd5b600a5461335283611759565b8261335d9190614af0565b111561339e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133959061589e565b60405180910390fd5b613541565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134465750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561349557600854811115613490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348790615930565b60405180910390fd5b613540565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661353f57600a546134f283611759565b826134fd9190614af0565b111561353e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135359061589e565b60405180910390fd5b5b5b5b5b5b600061354e30611759565b9050600060095482101590508080156135735750600d60029054906101000a900460ff165b801561358c5750600660149054906101000a900460ff16155b80156135e25750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136385750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561368e5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136d2576001600660146101000a81548160ff0219169083151502179055506136b6613d5e565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137885750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561379257600090505b600081156139a557601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137f557506000601054115b1561388f57613822606461381460105488613f4390919063ffffffff16565b613fbe90919063ffffffff16565b9050601054601254826138359190614c13565b61383f9190614c9c565b601760008282546138509190614af0565b92505081905550601054601154826138689190614c13565b6138729190614c9c565b601660008282546138839190614af0565b92505081905550613981565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138ea57506000601354115b1561398057613917606461390960135488613f4390919063ffffffff16565b613fbe90919063ffffffff16565b90506013546015548261392a9190614c13565b6139349190614c9c565b601760008282546139459190614af0565b925050819055506013546014548261395d9190614c13565b6139679190614c9c565b601660008282546139789190614af0565b925050819055505b5b600081111561399657613995873083613ac9565b5b80856139a29190615950565b94505b6139b0878787613ac9565b505050505b505050565b6000838311158290613a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f99190614530565b60405180910390fd5b5060008385613a119190615950565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613a7f82826119cf565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b309061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba090615610565b60405180910390fd5b613bb4838383614008565b613c1f81604051806060016040528060268152602001615b71602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cb2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a5890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d519190614635565b60405180910390a3505050565b6000613d6930611759565b9050600080601654601754613d7e9190614af0565b90506000831480613d8f5750600081145b15613d9c57505050613f41565b600060028260175486613daf9190614c13565b613db99190614c9c565b613dc39190614c9c565b90506000613dda828661400d90919063ffffffff16565b90506000479050613dea82614057565b6000613dff824761400d90919063ffffffff16565b90506000613e2a86613e1c60165485613f4390919063ffffffff16565b613fbe90919063ffffffff16565b905060008183613e3a9190615950565b905060006017819055506000601681905550600086118015613e5c5750600081115b15613ea957613e6b86826142a9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601754604051613ea093929190615984565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613eef90614fd8565b60006040518083038185875af1925050503d8060008114613f2c576040519150601f19603f3d011682016040523d82523d6000602084013e613f31565b606091505b5050809850505050505050505050505b565b600080831415613f565760009050613fb8565b60008284613f649190614c13565b9050828482613f739190614c9c565b14613fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613faa90615a2d565b60405180910390fd5b809150505b92915050565b600061400083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143aa565b905092915050565b505050565b600061404f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139ba565b905092915050565b6000600267ffffffffffffffff81111561407457614073614876565b5b6040519080825280602002602001820160405280156140a25781602001602082028036833780820191505090505b50905030816000815181106140ba576140b9614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561415c57600080fd5b505afa158015614170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141949190614e06565b816001815181106141a8576141a7614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061420f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612abe565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614273959493929190615a4d565b600060405180830381600087803b15801561428d57600080fd5b505af11580156142a1573d6000803e3d6000fd5b505050505050565b6142d630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612abe565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080730e6bae6f5916948d33a1a5794a661b541a0f627d426040518863ffffffff1660e01b815260040161435196959493929190615aa7565b6060604051808303818588803b15801561436a57600080fd5b505af115801561437e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143a39190615b1d565b5050505050565b600080831182906143f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e89190614530565b60405180910390fd5b50600083856144009190614c9c565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61443481614421565b811461443f57600080fd5b50565b6000813590506144518161442b565b92915050565b6000806040838503121561446e5761446d614417565b5b600061447c85828601614442565b925050602061448d85828601614442565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144d15780820151818401526020810190506144b6565b838111156144e0576000848401525b50505050565b6000601f19601f8301169050919050565b600061450282614497565b61450c81856144a2565b935061451c8185602086016144b3565b614525816144e6565b840191505092915050565b6000602082019050818103600083015261454a81846144f7565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061457d82614552565b9050919050565b61458d81614572565b811461459857600080fd5b50565b6000813590506145aa81614584565b92915050565b600080604083850312156145c7576145c6614417565b5b60006145d58582860161459b565b92505060206145e685828601614442565b9150509250929050565b60008115159050919050565b614605816145f0565b82525050565b600060208201905061462060008301846145fc565b92915050565b61462f81614421565b82525050565b600060208201905061464a6000830184614626565b92915050565b60006020828403121561466657614665614417565b5b600061467484828501614442565b91505092915050565b60006020828403121561469357614692614417565b5b60006146a18482850161459b565b91505092915050565b6000819050919050565b60006146cf6146ca6146c584614552565b6146aa565b614552565b9050919050565b60006146e1826146b4565b9050919050565b60006146f3826146d6565b9050919050565b614703816146e8565b82525050565b600060208201905061471e60008301846146fa565b92915050565b61472d816145f0565b811461473857600080fd5b50565b60008135905061474a81614724565b92915050565b60006020828403121561476657614765614417565b5b60006147748482850161473b565b91505092915050565b60008060006060848603121561479657614795614417565b5b60006147a48682870161459b565b93505060206147b58682870161459b565b92505060406147c686828701614442565b9150509250925092565b600060ff82169050919050565b6147e6816147d0565b82525050565b600060208201905061480160008301846147dd565b92915050565b61481081614572565b82525050565b600060208201905061482b6000830184614807565b92915050565b6000806040838503121561484857614847614417565b5b60006148568582860161459b565b92505060206148678582860161473b565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148ae826144e6565b810181811067ffffffffffffffff821117156148cd576148cc614876565b5b80604052505050565b60006148e061440d565b90506148ec82826148a5565b919050565b600067ffffffffffffffff82111561490c5761490b614876565b5b602082029050602081019050919050565b600080fd5b6000614935614930846148f1565b6148d6565b905080838252602082019050602084028301858111156149585761495761491d565b5b835b81811015614981578061496d888261459b565b84526020840193505060208101905061495a565b5050509392505050565b600082601f8301126149a05761499f614871565b5b81356149b0848260208601614922565b91505092915050565b600080604083850312156149d0576149cf614417565b5b600083013567ffffffffffffffff8111156149ee576149ed61441c565b5b6149fa8582860161498b565b9250506020614a0b8582860161473b565b9150509250929050565b60008060408385031215614a2c57614a2b614417565b5b6000614a3a8582860161459b565b9250506020614a4b8582860161459b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a8b6020836144a2565b9150614a9682614a55565b602082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614afb82614421565b9150614b0683614421565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b3b57614b3a614ac1565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614b7c601d836144a2565b9150614b8782614b46565b602082019050919050565b60006020820190508181036000830152614bab81614b6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bf957607f821691505b60208210811415614c0d57614c0c614bb2565b5b50919050565b6000614c1e82614421565b9150614c2983614421565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c6257614c61614ac1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ca782614421565b9150614cb283614421565b925082614cc257614cc1614c6d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302c35250000000000000000000000000000000000602082015250565b6000614d29602f836144a2565b9150614d3482614ccd565b604082019050919050565b60006020820190508181036000830152614d5881614d1c565b9050919050565b7f426c61636b6c697374206d6f646520697320616c726561647920656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dbb6021836144a2565b9150614dc682614d5f565b604082019050919050565b60006020820190508181036000830152614dea81614dae565b9050919050565b600081519050614e0081614584565b92915050565b600060208284031215614e1c57614e1b614417565b5b6000614e2a84828501614df1565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614e87614e82614e7d84614e62565b6146aa565b614421565b9050919050565b614e9781614e6c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ed281614572565b82525050565b6000614ee48383614ec9565b60208301905092915050565b6000602082019050919050565b6000614f0882614e9d565b614f128185614ea8565b9350614f1d83614eb9565b8060005b83811015614f4e578151614f358882614ed8565b9750614f4083614ef0565b925050600181019050614f21565b5085935050505092915050565b6000608082019050614f706000830187614e8e565b8181036020830152614f828186614efd565b9050614f916040830185614807565b614f9e6060830184614626565b95945050505050565b600081905092915050565b50565b6000614fc2600083614fa7565b9150614fcd82614fb2565b600082019050919050565b6000614fe382614fb5565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b60006150236012836144a2565b915061502e82614fed565b602082019050919050565b6000602082019050818103600083015261505281615016565b9050919050565b7f54686520556e695377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006150db6041836144a2565b91506150e682615059565b606082019050919050565b6000602082019050818103600083015261510a816150ce565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061516d6022836144a2565b915061517882615111565b604082019050919050565b6000602082019050818103600083015261519c81615160565b9050919050565b7f536f6d65206f66207468652076616c7565732061726520616c7265616479207360008201527f657420617320426c61636b6c6973746564000000000000000000000000000000602082015250565b60006151ff6031836144a2565b915061520a826151a3565b604082019050919050565b6000602082019050818103600083015261522e816151f2565b9050919050565b600061524082614421565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561527357615272614ac1565b5b600182019050919050565b7f57616c6c657420697320626c61636b6c697374656420616c7265616479000000600082015250565b60006152b4601d836144a2565b91506152bf8261527e565b602082019050919050565b600060208201905081810360008301526152e3816152a7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153466026836144a2565b9150615351826152ea565b604082019050919050565b6000602082019050818103600083015261537581615339565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006153b2601b836144a2565b91506153bd8261537c565b602082019050919050565b600060208201905081810360008301526153e1816153a5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154446024836144a2565b915061544f826153e8565b604082019050919050565b6000602082019050818103600083015261547381615437565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154d66022836144a2565b91506154e18261547a565b604082019050919050565b60006020820190508181036000830152615505816154c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155686025836144a2565b91506155738261550c565b604082019050919050565b600060208201905081810360008301526155978161555b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155fa6023836144a2565b91506156058261559e565b604082019050919050565b60006020820190508181036000830152615629816155ed565b9050919050565b7f426c61636b6c6973746564210000000000000000000000000000000000000000600082015250565b6000615666600c836144a2565b915061567182615630565b602082019050919050565b6000602082019050818103600083015261569581615659565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b60006156d2601a836144a2565b91506156dd8261569c565b602082019050919050565b60006020820190508181036000830152615701816156c5565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061578a6049836144a2565b915061579582615708565b606082019050919050565b600060208201905081810360008301526157b98161577d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061581c6035836144a2565b9150615827826157c0565b604082019050919050565b6000602082019050818103600083015261584b8161580f565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000615888601b836144a2565b915061589382615852565b602082019050919050565b600060208201905081810360008301526158b78161587b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061591a6036836144a2565b9150615925826158be565b604082019050919050565b600060208201905081810360008301526159498161590d565b9050919050565b600061595b82614421565b915061596683614421565b92508282101561597957615978614ac1565b5b828203905092915050565b60006060820190506159996000830186614626565b6159a66020830185614626565b6159b36040830184614626565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a176021836144a2565b9150615a22826159bb565b604082019050919050565b60006020820190508181036000830152615a4681615a0a565b9050919050565b600060a082019050615a626000830188614626565b615a6f6020830187614e8e565b8181036040830152615a818186614efd565b9050615a906060830185614807565b615a9d6080830184614626565b9695505050505050565b600060c082019050615abc6000830189614807565b615ac96020830188614626565b615ad66040830187614e8e565b615ae36060830186614e8e565b615af06080830185614807565b615afd60a0830184614626565b979650505050505050565b600081519050615b178161442b565b92915050565b600080600060608486031215615b3657615b35614417565b5b6000615b4486828701615b08565b9350506020615b5586828701615b08565b9250506040615b6686828701615b08565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122095a57de4425d3a63ac81b954bfc63e317dcf958eca48fcd113fa458d4442246264736f6c63430008090033
Deployed Bytecode Sourcemap
29955:15719:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36677:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8095:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10262:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30934:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30332:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35895:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31317:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30041:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9215:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31132:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34631:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31092:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10913:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9057:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11677:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44937:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30089:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30500:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37911:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36355:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31012:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30580:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9386:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22574:148;;;;;;;;;;;;;:::i;:::-;;38092:159;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37002:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30166:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45478:191;;;;;;;;;;;;;:::i;:::-;;31407:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35530:156;;;;;;;;;;;;;:::i;:::-;;21932:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35786:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8314:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37404:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12398:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9726:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31645:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30978:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30540:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37212:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36136:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30803:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30213:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35140:331;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31049:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34872:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30861:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9964:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30255:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30896:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34429:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30417:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22877:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30295:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31441:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36677:317;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36796:13:::1;36777:16;:32;;;;36839:13;36820:16;:32;;;;36898:16;;36879;;:35;;;;:::i;:::-;36863:13;:51;;;;36950:2;36933:13;;:19;;36925:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36677:317:::0;;:::o;8095:100::-;8149:13;8182:5;8175:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8095:100;:::o;10262:169::-;10345:4;10362:39;10371:12;:10;:12::i;:::-;10385:7;10394:6;10362:8;:39::i;:::-;10419:4;10412:11;;10262:169;;;;:::o;30934:31::-;;;;:::o;30332:39::-;;;;:::o;35895:229::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36009:4:::1;36004:3;36000:1;35984:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;35983:30;;;;:::i;:::-;35974:6;:39;35966:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;36109:6;36099;:17;;;;:::i;:::-;36076:20;:40;;;;35895:229:::0;:::o;31317:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;30041:41::-;;;;;;;;;;;;;:::o;9215:108::-;9276:7;9303:12;;9296:19;;9215:108;:::o;31132:33::-;;;;:::o;34631:195::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34733:8:::1;34714:27;;:15;;;;;;;;;;;:27;;;;34706:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34810:8;34792:15;;:26;;;;;;;;;;;;;;;;;;34631:195:::0;:::o;31092:33::-;;;;:::o;10913:355::-;11053:4;11070:36;11080:6;11088:9;11099:6;11070:9;:36::i;:::-;11117:121;11126:6;11134:12;:10;:12::i;:::-;11148:89;11186:6;11148:89;;;;;;;;;;;;;;;;;:11;:19;11160:6;11148:19;;;;;;;;;;;;;;;:33;11168:12;:10;:12::i;:::-;11148:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11117:8;:121::i;:::-;11256:4;11249:11;;10913:355;;;;;:::o;9057:93::-;9115:5;9140:2;9133:9;;9057:93;:::o;11677:218::-;11765:4;11782:83;11791:12;:10;:12::i;:::-;11805:7;11814:50;11853:10;11814:11;:25;11826:12;:10;:12::i;:::-;11814:25;;;;;;;;;;;;;;;:34;11840:7;11814:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11782:8;:83::i;:::-;11883:4;11876:11;;11677:218;;;;:::o;44937:529::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45074:21:::1;45112:1;45098:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45074:40;;45135:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45125:4;45130:1;45125:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;45186:4;45168;45173:1;45168:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;45230:15;;;;;;;;;;;:66;;;45304:14;45334:1;45383:4;45410:6;45432:15;45230:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;45005:461;44937:529:::0;:::o;30089:38::-;;;:::o;30500:33::-;;;;;;;;;;;;;:::o;37911:125::-;37976:4;38000:19;:28;38020:7;38000:28;;;;;;;;;;;;;;;;;;;;;;;;;37993:35;;37911:125;;;:::o;36355:310::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36472:13:::1;36454:15;:31;;;;36514:13;36496:15;:31;;;;36571:15;;36553;;:33;;;;:::i;:::-;36538:12;:48;;;;36621:2;36605:12;;:18;;36597:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36355:310:::0;;:::o;31012:30::-;;;;:::o;30580:31::-;;;;;;;;;;;;;:::o;9386:127::-;9460:7;9487:9;:18;9497:7;9487:18;;;;;;;;;;;;;;;;9480:25;;9386:127;;;:::o;22574:148::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22681:1:::1;22644:40;;22665:6;;;;;;;;;;;22644:40;;;;;;;;;;;;22712:1;22695:6;;:19;;;;;;;;;;;;;;;;;;22574:148::o:0;38092:159::-;38144:4;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38177:5:::1;38160:14;;:22;;;;;;;;;;;;;;;;;;38216:5;38193:20;;:28;;;;;;;;;;;;;;;;;;38239:4;38232:11;;38092:159:::0;:::o;37002:202::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37134:4:::1;37092:31;:39;37124:6;37092:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37183:6;37154:42;;;37191:4;37154:42;;;;;;:::i;:::-;;;;;;;;37002:202:::0;;:::o;30166:30::-;;;;;;;;;;;;;:::o;45478:191::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45537:12:::1;45562:10;45554:24;;45586:21;45554:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45536:76;;;45631:7;45623:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;45525:144;45478:191::o:0;31407:27::-;;;;;;;;;;;;;:::o;35530:156::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35601:4:::1;35585:13;;:20;;;;;;;;;;;;;;;;;;35630:4;35616:11;;:18;;;;;;;;;;;;;;;;;;35666:12;35645:18;:33;;;;35530:156::o:0;21932:79::-;21970:7;21997:6;;;;;;;;;;;21990:13;;21932:79;:::o;35786:101::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35872:7:::1;35858:11;;:21;;;;;;;;;;;;;;;;;;35786:101:::0;:::o;8314:104::-;8370:13;8403:7;8396:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8314:104;:::o;37404:252::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37511:13:::1;37503:21;;:4;:21;;;;37495:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;37607:41;37636:4;37642:5;37607:28;:41::i;:::-;37404:252:::0;;:::o;12398:269::-;12491:4;12508:129;12517:12;:10;:12::i;:::-;12531:7;12540:96;12579:15;12540:96;;;;;;;;;;;;;;;;;:11;:25;12552:12;:10;:12::i;:::-;12540:25;;;;;;;;;;;;;;;:34;12566:7;12540:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12508:8;:129::i;:::-;12655:4;12648:11;;12398:269;;;;:::o;9726:175::-;9812:4;9829:42;9839:12;:10;:12::i;:::-;9853:9;9864:6;9829:9;:42::i;:::-;9889:4;9882:11;;9726:175;;;;:::o;31645:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30978:27::-;;;;:::o;30540:33::-;;;;;;;;;;;;;:::o;37212:184::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37328:8:::1;37297:19;:28;37317:7;37297:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37370:7;37354:34;;;37379:8;37354:34;;;;;;:::i;:::-;;;;;;;;37212:184:::0;;:::o;36136:211::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36256:4:::1;36251:3;36247:1;36231:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;36230:30;;;;:::i;:::-;36221:6;:39;36213:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;36332:6;36322;:17;;;;:::i;:::-;36310:9;:29;;;;36136:211:::0;:::o;30803:39::-;;;;;;;;;;;;;:::o;30213:35::-;;;;:::o;35140:331::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35246:9:::1;35242:222;35261:8;:15;35257:1;:19;35242:222;;;35318:13;:26;35332:8;35341:1;35332:11;;;;;;;;:::i;:::-;;;;;;;;35318:26;;;;;;;;;;;;;;;;;;;;;;;;;35306:38;;:8;:38;;;;35298:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;35444:8;35415:13;:26;35429:8;35438:1;35429:11;;;;;;;;:::i;:::-;;;;;;;;35415:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;35278:3;;;;;:::i;:::-;;;;35242:222;;;;35140:331:::0;;:::o;31049:30::-;;;;:::o;34872:216::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34980:13:::1;:22;34994:7;34980:22;;;;;;;;;;;;;;;;;;;;;;;;;34968:34;;:8;:34;;;;34960:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;35072:8;35047:13;:22;35061:7;35047:22;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;34872:216:::0;;:::o;30861:28::-;;;;:::o;9964:151::-;10053:7;10080:11;:18;10092:5;10080:18;;;;;;;;;;;;;;;:27;10099:7;10080:27;;;;;;;;;;;;;;;;10073:34;;9964:151;;;;:::o;30255:33::-;;;;:::o;30896:31::-;;;;:::o;34429:134::-;34489:4;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34528:5:::1;34505:20;;:28;;;;;;;;;;;;;;;;;;34551:4;34544:11;;34429:134:::0;:::o;30417:37::-;;;;:::o;22877:244::-;22154:12;:10;:12::i;:::-;22144:22;;:6;;;;;;;;;;;:22;;;22136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22986:1:::1;22966:22;;:8;:22;;;;22958:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23076:8;23047:38;;23068:6;;;;;;;;;;;23047:38;;;;;;;;;;;;23105:8;23096:6;;:17;;;;;;;;;;;;;;;;;;22877:244:::0;:::o;30295:24::-;;;;:::o;31441:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;16976:181::-;17034:7;17054:9;17070:1;17066;:5;;;;:::i;:::-;17054:17;;17095:1;17090;:6;;17082:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17148:1;17141:8;;;16976:181;;;;:::o;729:98::-;782:7;809:10;802:17;;729:98;:::o;15598:380::-;15751:1;15734:19;;:5;:19;;;;15726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15832:1;15813:21;;:7;:21;;;;15805:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15916:6;15886:11;:18;15898:5;15886:18;;;;;;;;;;;;;;;:27;15905:7;15886:27;;;;;;;;;;;;;;;:36;;;;15954:7;15938:32;;15947:5;15938:32;;;15963:6;15938:32;;;;;;:::i;:::-;;;;;;;;15598:380;;;:::o;38263:4010::-;38411:1;38395:18;;:4;:18;;;;38387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38488:1;38474:16;;:2;:16;;;;38466:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38545:15;;;;;;;;;;;38544:16;:64;;;;38566:13;:19;38580:4;38566:19;;;;;;;;;;;;;;;;;;;;;;;;;38565:20;:42;;;;;38590:13;:17;38604:2;38590:17;;;;;;;;;;;;;;;;;;;;;;;;;38589:18;38565:42;38544:64;38536:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;38660:1;38650:6;:11;38647:92;;;38678:28;38694:4;38700:2;38704:1;38678:15;:28::i;:::-;38721:7;;38647:92;38763:13;;;;;;;;;;;38759:136;;38800:19;:25;38820:4;38800:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38829:19;:23;38849:2;38829:23;;;;;;;;;;;;;;;;;;;;;;;;;38800:52;38792:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;38759:136;38918:14;;;;;;;;;;;38915:1662;;;38978:7;:5;:7::i;:::-;38970:15;;:4;:15;;;;:49;;;;;39012:7;:5;:7::i;:::-;39006:13;;:2;:13;;;;38970:49;:86;;;;;39054:1;39040:16;;:2;:16;;;;38970:86;:128;;;;;39091:6;39077:21;;:2;:21;;;;38970:128;:158;;;;;39120:8;;;;;;;;;;;39119:9;38970:158;38948:1618;;;39302:20;;;;;;;;;;;39298:423;;;39356:7;:5;:7::i;:::-;39350:13;;:2;:13;;;;:47;;;;;39381:15;;;;;;;;;;;39367:30;;:2;:30;;;;39350:47;:79;;;;;39415:13;39401:28;;:2;:28;;;;39350:79;39346:356;;;39507:12;39465:28;:39;39494:9;39465:39;;;;;;;;;;;;;;;;:54;39457:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39666:12;39624:28;:39;39653:9;39624:39;;;;;;;;;;;;;;;:54;;;;39346:356;39298:423;39789:25;:31;39815:4;39789:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39825:31;:35;39857:2;39825:35;;;;;;;;;;;;;;;;;;;;;;;;;39824:36;39789:71;39785:766;;;39903:20;;39893:6;:30;;39885:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40038:9;;40021:13;40031:2;40021:9;:13::i;:::-;40012:6;:22;;;;:::i;:::-;:35;;40004:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39785:766;;;40156:25;:29;40182:2;40156:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40190:31;:37;40222:4;40190:37;;;;;;;;;;;;;;;;;;;;;;;;;40189:38;40156:71;40152:399;;;40270:20;;40260:6;:30;;40252:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40152:399;;;40396:31;:35;40428:2;40396:35;;;;;;;;;;;;;;;;;;;;;;;;;40392:159;;40490:9;;40473:13;40483:2;40473:9;:13::i;:::-;40464:6;:22;;;;:::i;:::-;:35;;40456:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;40392:159;40152:399;39785:766;38948:1618;38915:1662;40583:28;40614:24;40632:4;40614:9;:24::i;:::-;40583:55;;40659:12;40698:18;;40674:20;:42;;40659:57;;40747:7;:35;;;;;40771:11;;;;;;;;;;;40747:35;:61;;;;;40800:8;;;;;;;;;;;40799:9;40747:61;:110;;;;;40826:25;:31;40852:4;40826:31;;;;;;;;;;;;;;;;;;;;;;;;;40825:32;40747:110;:153;;;;;40875:19;:25;40895:4;40875:25;;;;;;;;;;;;;;;;;;;;;;;;;40874:26;40747:153;:194;;;;;40918:19;:23;40938:2;40918:23;;;;;;;;;;;;;;;;;;;;;;;;;40917:24;40747:194;40729:322;;;40979:4;40968:8;;:15;;;;;;;;;;;;;;;;;;40998:10;:8;:10::i;:::-;41034:5;41023:8;;:16;;;;;;;;;;;;;;;;;;40729:322;41063:12;41079:8;;;;;;;;;;;41078:9;41063:24;;41188:19;:25;41208:4;41188:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41217:19;:23;41237:2;41217:23;;;;;;;;;;;;;;;;;;;;;;;;;41188:52;41185:99;;;41267:5;41257:15;;41185:99;41304:12;41395:7;41392:824;;;41446:25;:29;41472:2;41446:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41495:1;41479:13;;:17;41446:50;41442:617;;;41523:34;41553:3;41523:25;41534:13;;41523:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41516:41;;41624:13;;41605:16;;41598:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41576:18;;:61;;;;;;;:::i;:::-;;;;;;;;41704:13;;41685:16;;41678:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41656:18;;:61;;;;;;;:::i;:::-;;;;;;;;41442:617;;;41778:25;:31;41804:4;41778:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41828:1;41813:12;;:16;41778:51;41775:284;;;41854:33;41883:3;41854:24;41865:12;;41854:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41847:40;;41953:12;;41935:15;;41928:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41906:18;;:59;;;;;;;:::i;:::-;;;;;;;;42031:12;;42013:15;;42006:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41984:18;;:59;;;;;;;:::i;:::-;;;;;;;;41775:284;41442:617;42085:1;42078:4;:8;42075:93;;;42110:42;42126:4;42140;42147;42110:15;:42::i;:::-;42075:93;42200:4;42190:14;;;;;:::i;:::-;;;41392:824;42228:33;42244:4;42250:2;42254:6;42228:15;:33::i;:::-;38376:3897;;;;38263:4010;;;;:::o;17879:192::-;17965:7;17998:1;17993;:6;;18001:12;17985:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18025:9;18041:1;18037;:5;;;;:::i;:::-;18025:17;;18062:1;18055:8;;;17879:192;;;;;:::o;37664:239::-;37781:5;37747:25;:31;37773:4;37747:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37799:38;37825:4;37831:5;37799:25;:38::i;:::-;37889:5;37855:40;;37883:4;37855:40;;;;;;;;;;;;37664:239;;:::o;13157:573::-;13315:1;13297:20;;:6;:20;;;;13289:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13399:1;13378:23;;:9;:23;;;;13370:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13454:47;13475:6;13483:9;13494:6;13454:20;:47::i;:::-;13534:71;13556:6;13534:71;;;;;;;;;;;;;;;;;:9;:17;13544:6;13534:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13514:9;:17;13524:6;13514:17;;;;;;;;;;;;;;;:91;;;;13639:32;13664:6;13639:9;:20;13649:9;13639:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13616:9;:20;13626:9;13616:20;;;;;;;;;;;;;;;:55;;;;13704:9;13687:35;;13696:6;13687:35;;;13715:6;13687:35;;;;;;:::i;:::-;;;;;;;;13157:573;;;:::o;43471:1363::-;43510:23;43536:24;43554:4;43536:9;:24::i;:::-;43510:50;;43571:12;43594:25;43643:18;;43622;;:39;;;;:::i;:::-;43594:67;;43704:1;43685:15;:20;:46;;;;43730:1;43709:17;:22;43685:46;43682:60;;;43734:7;;;;;43682:60;43811:23;43896:1;43876:17;43855:18;;43837:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43811:86;;43908:26;43937:36;43957:15;43937;:19;;:36;;;;:::i;:::-;43908:65;;43994:25;44022:21;43994:49;;44056:36;44073:18;44056:16;:36::i;:::-;44114:18;44135:44;44161:17;44135:21;:25;;:44;;;;:::i;:::-;44114:65;;44200:23;44226:57;44265:17;44226:34;44241:18;;44226:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44200:83;;44304:23;44343:15;44330:10;:28;;;;:::i;:::-;44304:54;;44400:1;44379:18;:22;;;;44433:1;44412:18;:22;;;;44478:1;44460:15;:19;:42;;;;;44501:1;44483:15;:19;44460:42;44457:210;;;44518:46;44531:15;44548;44518:12;:46::i;:::-;44584:71;44599:18;44619:15;44636:18;;44584:71;;;;;;;;:::i;:::-;;;;;;;;44457:210;44757:15;;;;;;;;;;;44749:29;;44786:15;44749:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44736:70;;;;;43499:1335;;;;;;;;;43471:1363;:::o;18330:471::-;18388:7;18638:1;18633;:6;18629:47;;;18663:1;18656:8;;;;18629:47;18688:9;18704:1;18700;:5;;;;:::i;:::-;18688:17;;18733:1;18728;18724;:5;;;;:::i;:::-;:10;18716:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18792:1;18785:8;;;18330:471;;;;;:::o;19277:132::-;19335:7;19362:39;19366:1;19369;19362:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19355:46;;19277:132;;;;:::o;16581:125::-;;;;:::o;17440:136::-;17498:7;17525:43;17529:1;17532;17525:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17518:50;;17440:136;;;;:::o;42287:601::-;42415:21;42453:1;42439:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42415:40;;42484:4;42466;42471:1;42466:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42510:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42500:4;42505:1;42500:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42545:62;42562:4;42577:15;;;;;;;;;;;42595:11;42545:8;:62::i;:::-;42646:15;;;;;;;;;;;:66;;;42727:11;42753:1;42797:4;42824;42844:15;42646:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42342:546;42287:601;:::o;42900:559::-;43048:62;43065:4;43080:15;;;;;;;;;;;43098:11;43048:8;:62::i;:::-;43153:15;;;;;;;;;;;:31;;;43192:9;43225:4;43245:11;43271:1;43314;43365:42;43423:15;43153:296;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42900:559;;:::o;19905:278::-;19991:7;20023:1;20019;:5;20026:12;20011:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20050:9;20066:1;20062;:5;;;;:::i;:::-;20050:17;;20174:1;20167:8;;;19905:278;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:118::-;4061:24;4079:5;4061:24;:::i;:::-;4056:3;4049:37;3974:118;;:::o;4098:222::-;4191:4;4229:2;4218:9;4214:18;4206:26;;4242:71;4310:1;4299:9;4295:17;4286:6;4242:71;:::i;:::-;4098:222;;;;:::o;4326:329::-;4385:6;4434:2;4422:9;4413:7;4409:23;4405:32;4402:119;;;4440:79;;:::i;:::-;4402:119;4560:1;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4531:117;4326:329;;;;:::o;4661:::-;4720:6;4769:2;4757:9;4748:7;4744:23;4740:32;4737:119;;;4775:79;;:::i;:::-;4737:119;4895:1;4920:53;4965:7;4956:6;4945:9;4941:22;4920:53;:::i;:::-;4910:63;;4866:117;4661:329;;;;:::o;4996:60::-;5024:3;5045:5;5038:12;;4996:60;;;:::o;5062:142::-;5112:9;5145:53;5163:34;5172:24;5190:5;5172:24;:::i;:::-;5163:34;:::i;:::-;5145:53;:::i;:::-;5132:66;;5062:142;;;:::o;5210:126::-;5260:9;5293:37;5324:5;5293:37;:::i;:::-;5280:50;;5210:126;;;:::o;5342:153::-;5419:9;5452:37;5483:5;5452:37;:::i;:::-;5439:50;;5342:153;;;:::o;5501:185::-;5615:64;5673:5;5615:64;:::i;:::-;5610:3;5603:77;5501:185;;:::o;5692:276::-;5812:4;5850:2;5839:9;5835:18;5827:26;;5863:98;5958:1;5947:9;5943:17;5934:6;5863:98;:::i;:::-;5692:276;;;;:::o;5974:116::-;6044:21;6059:5;6044:21;:::i;:::-;6037:5;6034:32;6024:60;;6080:1;6077;6070:12;6024:60;5974:116;:::o;6096:133::-;6139:5;6177:6;6164:20;6155:29;;6193:30;6217:5;6193:30;:::i;:::-;6096:133;;;;:::o;6235:323::-;6291:6;6340:2;6328:9;6319:7;6315:23;6311:32;6308:119;;;6346:79;;:::i;:::-;6308:119;6466:1;6491:50;6533:7;6524:6;6513:9;6509:22;6491:50;:::i;:::-;6481:60;;6437:114;6235:323;;;;:::o;6564:619::-;6641:6;6649;6657;6706:2;6694:9;6685:7;6681:23;6677:32;6674:119;;;6712:79;;:::i;:::-;6674:119;6832:1;6857:53;6902:7;6893:6;6882:9;6878:22;6857:53;:::i;:::-;6847:63;;6803:117;6959:2;6985:53;7030:7;7021:6;7010:9;7006:22;6985:53;:::i;:::-;6975:63;;6930:118;7087:2;7113:53;7158:7;7149:6;7138:9;7134:22;7113:53;:::i;:::-;7103:63;;7058:118;6564:619;;;;;:::o;7189:86::-;7224:7;7264:4;7257:5;7253:16;7242:27;;7189:86;;;:::o;7281:112::-;7364:22;7380:5;7364:22;:::i;:::-;7359:3;7352:35;7281:112;;:::o;7399:214::-;7488:4;7526:2;7515:9;7511:18;7503:26;;7539:67;7603:1;7592:9;7588:17;7579:6;7539:67;:::i;:::-;7399:214;;;;:::o;7619:118::-;7706:24;7724:5;7706:24;:::i;:::-;7701:3;7694:37;7619:118;;:::o;7743:222::-;7836:4;7874:2;7863:9;7859:18;7851:26;;7887:71;7955:1;7944:9;7940:17;7931:6;7887:71;:::i;:::-;7743:222;;;;:::o;7971:468::-;8036:6;8044;8093:2;8081:9;8072:7;8068:23;8064:32;8061:119;;;8099:79;;:::i;:::-;8061:119;8219:1;8244:53;8289:7;8280:6;8269:9;8265:22;8244:53;:::i;:::-;8234:63;;8190:117;8346:2;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8317:115;7971:468;;;;;:::o;8445:117::-;8554:1;8551;8544:12;8568:180;8616:77;8613:1;8606:88;8713:4;8710:1;8703:15;8737:4;8734:1;8727:15;8754:281;8837:27;8859:4;8837:27;:::i;:::-;8829:6;8825:40;8967:6;8955:10;8952:22;8931:18;8919:10;8916:34;8913:62;8910:88;;;8978:18;;:::i;:::-;8910:88;9018:10;9014:2;9007:22;8797:238;8754:281;;:::o;9041:129::-;9075:6;9102:20;;:::i;:::-;9092:30;;9131:33;9159:4;9151:6;9131:33;:::i;:::-;9041:129;;;:::o;9176:311::-;9253:4;9343:18;9335:6;9332:30;9329:56;;;9365:18;;:::i;:::-;9329:56;9415:4;9407:6;9403:17;9395:25;;9475:4;9469;9465:15;9457:23;;9176:311;;;:::o;9493:117::-;9602:1;9599;9592:12;9633:710;9729:5;9754:81;9770:64;9827:6;9770:64;:::i;:::-;9754:81;:::i;:::-;9745:90;;9855:5;9884:6;9877:5;9870:21;9918:4;9911:5;9907:16;9900:23;;9971:4;9963:6;9959:17;9951:6;9947:30;10000:3;9992:6;9989:15;9986:122;;;10019:79;;:::i;:::-;9986:122;10134:6;10117:220;10151:6;10146:3;10143:15;10117:220;;;10226:3;10255:37;10288:3;10276:10;10255:37;:::i;:::-;10250:3;10243:50;10322:4;10317:3;10313:14;10306:21;;10193:144;10177:4;10172:3;10168:14;10161:21;;10117:220;;;10121:21;9735:608;;9633:710;;;;;:::o;10366:370::-;10437:5;10486:3;10479:4;10471:6;10467:17;10463:27;10453:122;;10494:79;;:::i;:::-;10453:122;10611:6;10598:20;10636:94;10726:3;10718:6;10711:4;10703:6;10699:17;10636:94;:::i;:::-;10627:103;;10443:293;10366:370;;;;:::o;10742:678::-;10832:6;10840;10889:2;10877:9;10868:7;10864:23;10860:32;10857:119;;;10895:79;;:::i;:::-;10857:119;11043:1;11032:9;11028:17;11015:31;11073:18;11065:6;11062:30;11059:117;;;11095:79;;:::i;:::-;11059:117;11200:78;11270:7;11261:6;11250:9;11246:22;11200:78;:::i;:::-;11190:88;;10986:302;11327:2;11353:50;11395:7;11386:6;11375:9;11371:22;11353:50;:::i;:::-;11343:60;;11298:115;10742:678;;;;;:::o;11426:474::-;11494:6;11502;11551:2;11539:9;11530:7;11526:23;11522:32;11519:119;;;11557:79;;:::i;:::-;11519:119;11677:1;11702:53;11747:7;11738:6;11727:9;11723:22;11702:53;:::i;:::-;11692:63;;11648:117;11804:2;11830:53;11875:7;11866:6;11855:9;11851:22;11830:53;:::i;:::-;11820:63;;11775:118;11426:474;;;;;:::o;11906:182::-;12046:34;12042:1;12034:6;12030:14;12023:58;11906:182;:::o;12094:366::-;12236:3;12257:67;12321:2;12316:3;12257:67;:::i;:::-;12250:74;;12333:93;12422:3;12333:93;:::i;:::-;12451:2;12446:3;12442:12;12435:19;;12094:366;;;:::o;12466:419::-;12632:4;12670:2;12659:9;12655:18;12647:26;;12719:9;12713:4;12709:20;12705:1;12694:9;12690:17;12683:47;12747:131;12873:4;12747:131;:::i;:::-;12739:139;;12466:419;;;:::o;12891:180::-;12939:77;12936:1;12929:88;13036:4;13033:1;13026:15;13060:4;13057:1;13050:15;13077:305;13117:3;13136:20;13154:1;13136:20;:::i;:::-;13131:25;;13170:20;13188:1;13170:20;:::i;:::-;13165:25;;13324:1;13256:66;13252:74;13249:1;13246:81;13243:107;;;13330:18;;:::i;:::-;13243:107;13374:1;13371;13367:9;13360:16;;13077:305;;;;:::o;13388:179::-;13528:31;13524:1;13516:6;13512:14;13505:55;13388:179;:::o;13573:366::-;13715:3;13736:67;13800:2;13795:3;13736:67;:::i;:::-;13729:74;;13812:93;13901:3;13812:93;:::i;:::-;13930:2;13925:3;13921:12;13914:19;;13573:366;;;:::o;13945:419::-;14111:4;14149:2;14138:9;14134:18;14126:26;;14198:9;14192:4;14188:20;14184:1;14173:9;14169:17;14162:47;14226:131;14352:4;14226:131;:::i;:::-;14218:139;;13945:419;;;:::o;14370:180::-;14418:77;14415:1;14408:88;14515:4;14512:1;14505:15;14539:4;14536:1;14529:15;14556:320;14600:6;14637:1;14631:4;14627:12;14617:22;;14684:1;14678:4;14674:12;14705:18;14695:81;;14761:4;14753:6;14749:17;14739:27;;14695:81;14823:2;14815:6;14812:14;14792:18;14789:38;14786:84;;;14842:18;;:::i;:::-;14786:84;14607:269;14556:320;;;:::o;14882:348::-;14922:7;14945:20;14963:1;14945:20;:::i;:::-;14940:25;;14979:20;14997:1;14979:20;:::i;:::-;14974:25;;15167:1;15099:66;15095:74;15092:1;15089:81;15084:1;15077:9;15070:17;15066:105;15063:131;;;15174:18;;:::i;:::-;15063:131;15222:1;15219;15215:9;15204:20;;14882:348;;;;:::o;15236:180::-;15284:77;15281:1;15274:88;15381:4;15378:1;15371:15;15405:4;15402:1;15395:15;15422:185;15462:1;15479:20;15497:1;15479:20;:::i;:::-;15474:25;;15513:20;15531:1;15513:20;:::i;:::-;15508:25;;15552:1;15542:35;;15557:18;;:::i;:::-;15542:35;15599:1;15596;15592:9;15587:14;;15422:185;;;;:::o;15613:234::-;15753:34;15749:1;15741:6;15737:14;15730:58;15822:17;15817:2;15809:6;15805:15;15798:42;15613:234;:::o;15853:366::-;15995:3;16016:67;16080:2;16075:3;16016:67;:::i;:::-;16009:74;;16092:93;16181:3;16092:93;:::i;:::-;16210:2;16205:3;16201:12;16194:19;;15853:366;;;:::o;16225:419::-;16391:4;16429:2;16418:9;16414:18;16406:26;;16478:9;16472:4;16468:20;16464:1;16453:9;16449:17;16442:47;16506:131;16632:4;16506:131;:::i;:::-;16498:139;;16225:419;;;:::o;16650:220::-;16790:34;16786:1;16778:6;16774:14;16767:58;16859:3;16854:2;16846:6;16842:15;16835:28;16650:220;:::o;16876:366::-;17018:3;17039:67;17103:2;17098:3;17039:67;:::i;:::-;17032:74;;17115:93;17204:3;17115:93;:::i;:::-;17233:2;17228:3;17224:12;17217:19;;16876:366;;;:::o;17248:419::-;17414:4;17452:2;17441:9;17437:18;17429:26;;17501:9;17495:4;17491:20;17487:1;17476:9;17472:17;17465:47;17529:131;17655:4;17529:131;:::i;:::-;17521:139;;17248:419;;;:::o;17673:143::-;17730:5;17761:6;17755:13;17746:22;;17777:33;17804:5;17777:33;:::i;:::-;17673:143;;;;:::o;17822:351::-;17892:6;17941:2;17929:9;17920:7;17916:23;17912:32;17909:119;;;17947:79;;:::i;:::-;17909:119;18067:1;18092:64;18148:7;18139:6;18128:9;18124:22;18092:64;:::i;:::-;18082:74;;18038:128;17822:351;;;;:::o;18179:180::-;18227:77;18224:1;18217:88;18324:4;18321:1;18314:15;18348:4;18345:1;18338:15;18365:85;18410:7;18439:5;18428:16;;18365:85;;;:::o;18456:158::-;18514:9;18547:61;18565:42;18574:32;18600:5;18574:32;:::i;:::-;18565:42;:::i;:::-;18547:61;:::i;:::-;18534:74;;18456:158;;;:::o;18620:147::-;18715:45;18754:5;18715:45;:::i;:::-;18710:3;18703:58;18620:147;;:::o;18773:114::-;18840:6;18874:5;18868:12;18858:22;;18773:114;;;:::o;18893:184::-;18992:11;19026:6;19021:3;19014:19;19066:4;19061:3;19057:14;19042:29;;18893:184;;;;:::o;19083:132::-;19150:4;19173:3;19165:11;;19203:4;19198:3;19194:14;19186:22;;19083:132;;;:::o;19221:108::-;19298:24;19316:5;19298:24;:::i;:::-;19293:3;19286:37;19221:108;;:::o;19335:179::-;19404:10;19425:46;19467:3;19459:6;19425:46;:::i;:::-;19503:4;19498:3;19494:14;19480:28;;19335:179;;;;:::o;19520:113::-;19590:4;19622;19617:3;19613:14;19605:22;;19520:113;;;:::o;19669:732::-;19788:3;19817:54;19865:5;19817:54;:::i;:::-;19887:86;19966:6;19961:3;19887:86;:::i;:::-;19880:93;;19997:56;20047:5;19997:56;:::i;:::-;20076:7;20107:1;20092:284;20117:6;20114:1;20111:13;20092:284;;;20193:6;20187:13;20220:63;20279:3;20264:13;20220:63;:::i;:::-;20213:70;;20306:60;20359:6;20306:60;:::i;:::-;20296:70;;20152:224;20139:1;20136;20132:9;20127:14;;20092:284;;;20096:14;20392:3;20385:10;;19793:608;;;19669:732;;;;:::o;20407:720::-;20642:4;20680:3;20669:9;20665:19;20657:27;;20694:79;20770:1;20759:9;20755:17;20746:6;20694:79;:::i;:::-;20820:9;20814:4;20810:20;20805:2;20794:9;20790:18;20783:48;20848:108;20951:4;20942:6;20848:108;:::i;:::-;20840:116;;20966:72;21034:2;21023:9;21019:18;21010:6;20966:72;:::i;:::-;21048;21116:2;21105:9;21101:18;21092:6;21048:72;:::i;:::-;20407:720;;;;;;;:::o;21133:147::-;21234:11;21271:3;21256:18;;21133:147;;;;:::o;21286:114::-;;:::o;21406:398::-;21565:3;21586:83;21667:1;21662:3;21586:83;:::i;:::-;21579:90;;21678:93;21767:3;21678:93;:::i;:::-;21796:1;21791:3;21787:11;21780:18;;21406:398;;;:::o;21810:379::-;21994:3;22016:147;22159:3;22016:147;:::i;:::-;22009:154;;22180:3;22173:10;;21810:379;;;:::o;22195:168::-;22335:20;22331:1;22323:6;22319:14;22312:44;22195:168;:::o;22369:366::-;22511:3;22532:67;22596:2;22591:3;22532:67;:::i;:::-;22525:74;;22608:93;22697:3;22608:93;:::i;:::-;22726:2;22721:3;22717:12;22710:19;;22369:366;;;:::o;22741:419::-;22907:4;22945:2;22934:9;22930:18;22922:26;;22994:9;22988:4;22984:20;22980:1;22969:9;22965:17;22958:47;23022:131;23148:4;23022:131;:::i;:::-;23014:139;;22741:419;;;:::o;23166:289::-;23306:34;23302:1;23294:6;23290:14;23283:58;23375:34;23370:2;23362:6;23358:15;23351:59;23444:3;23439:2;23431:6;23427:15;23420:28;23166:289;:::o;23461:366::-;23603:3;23624:67;23688:2;23683:3;23624:67;:::i;:::-;23617:74;;23700:93;23789:3;23700:93;:::i;:::-;23818:2;23813:3;23809:12;23802:19;;23461:366;;;:::o;23833:419::-;23999:4;24037:2;24026:9;24022:18;24014:26;;24086:9;24080:4;24076:20;24072:1;24061:9;24057:17;24050:47;24114:131;24240:4;24114:131;:::i;:::-;24106:139;;23833:419;;;:::o;24258:221::-;24398:34;24394:1;24386:6;24382:14;24375:58;24467:4;24462:2;24454:6;24450:15;24443:29;24258:221;:::o;24485:366::-;24627:3;24648:67;24712:2;24707:3;24648:67;:::i;:::-;24641:74;;24724:93;24813:3;24724:93;:::i;:::-;24842:2;24837:3;24833:12;24826:19;;24485:366;;;:::o;24857:419::-;25023:4;25061:2;25050:9;25046:18;25038:26;;25110:9;25104:4;25100:20;25096:1;25085:9;25081:17;25074:47;25138:131;25264:4;25138:131;:::i;:::-;25130:139;;24857:419;;;:::o;25282:236::-;25422:34;25418:1;25410:6;25406:14;25399:58;25491:19;25486:2;25478:6;25474:15;25467:44;25282:236;:::o;25524:366::-;25666:3;25687:67;25751:2;25746:3;25687:67;:::i;:::-;25680:74;;25763:93;25852:3;25763:93;:::i;:::-;25881:2;25876:3;25872:12;25865:19;;25524:366;;;:::o;25896:419::-;26062:4;26100:2;26089:9;26085:18;26077:26;;26149:9;26143:4;26139:20;26135:1;26124:9;26120:17;26113:47;26177:131;26303:4;26177:131;:::i;:::-;26169:139;;25896:419;;;:::o;26321:233::-;26360:3;26383:24;26401:5;26383:24;:::i;:::-;26374:33;;26429:66;26422:5;26419:77;26416:103;;;26499:18;;:::i;:::-;26416:103;26546:1;26539:5;26535:13;26528:20;;26321:233;;;:::o;26560:179::-;26700:31;26696:1;26688:6;26684:14;26677:55;26560:179;:::o;26745:366::-;26887:3;26908:67;26972:2;26967:3;26908:67;:::i;:::-;26901:74;;26984:93;27073:3;26984:93;:::i;:::-;27102:2;27097:3;27093:12;27086:19;;26745:366;;;:::o;27117:419::-;27283:4;27321:2;27310:9;27306:18;27298:26;;27370:9;27364:4;27360:20;27356:1;27345:9;27341:17;27334:47;27398:131;27524:4;27398:131;:::i;:::-;27390:139;;27117:419;;;:::o;27542:225::-;27682:34;27678:1;27670:6;27666:14;27659:58;27751:8;27746:2;27738:6;27734:15;27727:33;27542:225;:::o;27773:366::-;27915:3;27936:67;28000:2;27995:3;27936:67;:::i;:::-;27929:74;;28012:93;28101:3;28012:93;:::i;:::-;28130:2;28125:3;28121:12;28114:19;;27773:366;;;:::o;28145:419::-;28311:4;28349:2;28338:9;28334:18;28326:26;;28398:9;28392:4;28388:20;28384:1;28373:9;28369:17;28362:47;28426:131;28552:4;28426:131;:::i;:::-;28418:139;;28145:419;;;:::o;28570:177::-;28710:29;28706:1;28698:6;28694:14;28687:53;28570:177;:::o;28753:366::-;28895:3;28916:67;28980:2;28975:3;28916:67;:::i;:::-;28909:74;;28992:93;29081:3;28992:93;:::i;:::-;29110:2;29105:3;29101:12;29094:19;;28753:366;;;:::o;29125:419::-;29291:4;29329:2;29318:9;29314:18;29306:26;;29378:9;29372:4;29368:20;29364:1;29353:9;29349:17;29342:47;29406:131;29532:4;29406:131;:::i;:::-;29398:139;;29125:419;;;:::o;29550:223::-;29690:34;29686:1;29678:6;29674:14;29667:58;29759:6;29754:2;29746:6;29742:15;29735:31;29550:223;:::o;29779:366::-;29921:3;29942:67;30006:2;30001:3;29942:67;:::i;:::-;29935:74;;30018:93;30107:3;30018:93;:::i;:::-;30136:2;30131:3;30127:12;30120:19;;29779:366;;;:::o;30151:419::-;30317:4;30355:2;30344:9;30340:18;30332:26;;30404:9;30398:4;30394:20;30390:1;30379:9;30375:17;30368:47;30432:131;30558:4;30432:131;:::i;:::-;30424:139;;30151:419;;;:::o;30576:221::-;30716:34;30712:1;30704:6;30700:14;30693:58;30785:4;30780:2;30772:6;30768:15;30761:29;30576:221;:::o;30803:366::-;30945:3;30966:67;31030:2;31025:3;30966:67;:::i;:::-;30959:74;;31042:93;31131:3;31042:93;:::i;:::-;31160:2;31155:3;31151:12;31144:19;;30803:366;;;:::o;31175:419::-;31341:4;31379:2;31368:9;31364:18;31356:26;;31428:9;31422:4;31418:20;31414:1;31403:9;31399:17;31392:47;31456:131;31582:4;31456:131;:::i;:::-;31448:139;;31175:419;;;:::o;31600:224::-;31740:34;31736:1;31728:6;31724:14;31717:58;31809:7;31804:2;31796:6;31792:15;31785:32;31600:224;:::o;31830:366::-;31972:3;31993:67;32057:2;32052:3;31993:67;:::i;:::-;31986:74;;32069:93;32158:3;32069:93;:::i;:::-;32187:2;32182:3;32178:12;32171:19;;31830:366;;;:::o;32202:419::-;32368:4;32406:2;32395:9;32391:18;32383:26;;32455:9;32449:4;32445:20;32441:1;32430:9;32426:17;32419:47;32483:131;32609:4;32483:131;:::i;:::-;32475:139;;32202:419;;;:::o;32627:222::-;32767:34;32763:1;32755:6;32751:14;32744:58;32836:5;32831:2;32823:6;32819:15;32812:30;32627:222;:::o;32855:366::-;32997:3;33018:67;33082:2;33077:3;33018:67;:::i;:::-;33011:74;;33094:93;33183:3;33094:93;:::i;:::-;33212:2;33207:3;33203:12;33196:19;;32855:366;;;:::o;33227:419::-;33393:4;33431:2;33420:9;33416:18;33408:26;;33480:9;33474:4;33470:20;33466:1;33455:9;33451:17;33444:47;33508:131;33634:4;33508:131;:::i;:::-;33500:139;;33227:419;;;:::o;33652:162::-;33792:14;33788:1;33780:6;33776:14;33769:38;33652:162;:::o;33820:366::-;33962:3;33983:67;34047:2;34042:3;33983:67;:::i;:::-;33976:74;;34059:93;34148:3;34059:93;:::i;:::-;34177:2;34172:3;34168:12;34161:19;;33820:366;;;:::o;34192:419::-;34358:4;34396:2;34385:9;34381:18;34373:26;;34445:9;34439:4;34435:20;34431:1;34420:9;34416:17;34409:47;34473:131;34599:4;34473:131;:::i;:::-;34465:139;;34192:419;;;:::o;34617:176::-;34757:28;34753:1;34745:6;34741:14;34734:52;34617:176;:::o;34799:366::-;34941:3;34962:67;35026:2;35021:3;34962:67;:::i;:::-;34955:74;;35038:93;35127:3;35038:93;:::i;:::-;35156:2;35151:3;35147:12;35140:19;;34799:366;;;:::o;35171:419::-;35337:4;35375:2;35364:9;35360:18;35352:26;;35424:9;35418:4;35414:20;35410:1;35399:9;35395:17;35388:47;35452:131;35578:4;35452:131;:::i;:::-;35444:139;;35171:419;;;:::o;35596:297::-;35736:34;35732:1;35724:6;35720:14;35713:58;35805:34;35800:2;35792:6;35788:15;35781:59;35874:11;35869:2;35861:6;35857:15;35850:36;35596:297;:::o;35899:366::-;36041:3;36062:67;36126:2;36121:3;36062:67;:::i;:::-;36055:74;;36138:93;36227:3;36138:93;:::i;:::-;36256:2;36251:3;36247:12;36240:19;;35899:366;;;:::o;36271:419::-;36437:4;36475:2;36464:9;36460:18;36452:26;;36524:9;36518:4;36514:20;36510:1;36499:9;36495:17;36488:47;36552:131;36678:4;36552:131;:::i;:::-;36544:139;;36271:419;;;:::o;36696:240::-;36836:34;36832:1;36824:6;36820:14;36813:58;36905:23;36900:2;36892:6;36888:15;36881:48;36696:240;:::o;36942:366::-;37084:3;37105:67;37169:2;37164:3;37105:67;:::i;:::-;37098:74;;37181:93;37270:3;37181:93;:::i;:::-;37299:2;37294:3;37290:12;37283:19;;36942:366;;;:::o;37314:419::-;37480:4;37518:2;37507:9;37503:18;37495:26;;37567:9;37561:4;37557:20;37553:1;37542:9;37538:17;37531:47;37595:131;37721:4;37595:131;:::i;:::-;37587:139;;37314:419;;;:::o;37739:177::-;37879:29;37875:1;37867:6;37863:14;37856:53;37739:177;:::o;37922:366::-;38064:3;38085:67;38149:2;38144:3;38085:67;:::i;:::-;38078:74;;38161:93;38250:3;38161:93;:::i;:::-;38279:2;38274:3;38270:12;38263:19;;37922:366;;;:::o;38294:419::-;38460:4;38498:2;38487:9;38483:18;38475:26;;38547:9;38541:4;38537:20;38533:1;38522:9;38518:17;38511:47;38575:131;38701:4;38575:131;:::i;:::-;38567:139;;38294:419;;;:::o;38719:241::-;38859:34;38855:1;38847:6;38843:14;38836:58;38928:24;38923:2;38915:6;38911:15;38904:49;38719:241;:::o;38966:366::-;39108:3;39129:67;39193:2;39188:3;39129:67;:::i;:::-;39122:74;;39205:93;39294:3;39205:93;:::i;:::-;39323:2;39318:3;39314:12;39307:19;;38966:366;;;:::o;39338:419::-;39504:4;39542:2;39531:9;39527:18;39519:26;;39591:9;39585:4;39581:20;39577:1;39566:9;39562:17;39555:47;39619:131;39745:4;39619:131;:::i;:::-;39611:139;;39338:419;;;:::o;39763:191::-;39803:4;39823:20;39841:1;39823:20;:::i;:::-;39818:25;;39857:20;39875:1;39857:20;:::i;:::-;39852:25;;39896:1;39893;39890:8;39887:34;;;39901:18;;:::i;:::-;39887:34;39946:1;39943;39939:9;39931:17;;39763:191;;;;:::o;39960:442::-;40109:4;40147:2;40136:9;40132:18;40124:26;;40160:71;40228:1;40217:9;40213:17;40204:6;40160:71;:::i;:::-;40241:72;40309:2;40298:9;40294:18;40285:6;40241:72;:::i;:::-;40323;40391:2;40380:9;40376:18;40367:6;40323:72;:::i;:::-;39960:442;;;;;;:::o;40408:220::-;40548:34;40544:1;40536:6;40532:14;40525:58;40617:3;40612:2;40604:6;40600:15;40593:28;40408:220;:::o;40634:366::-;40776:3;40797:67;40861:2;40856:3;40797:67;:::i;:::-;40790:74;;40873:93;40962:3;40873:93;:::i;:::-;40991:2;40986:3;40982:12;40975:19;;40634:366;;;:::o;41006:419::-;41172:4;41210:2;41199:9;41195:18;41187:26;;41259:9;41253:4;41249:20;41245:1;41234:9;41230:17;41223:47;41287:131;41413:4;41287:131;:::i;:::-;41279:139;;41006:419;;;:::o;41431:831::-;41694:4;41732:3;41721:9;41717:19;41709:27;;41746:71;41814:1;41803:9;41799:17;41790:6;41746:71;:::i;:::-;41827:80;41903:2;41892:9;41888:18;41879:6;41827:80;:::i;:::-;41954:9;41948:4;41944:20;41939:2;41928:9;41924:18;41917:48;41982:108;42085:4;42076:6;41982:108;:::i;:::-;41974:116;;42100:72;42168:2;42157:9;42153:18;42144:6;42100:72;:::i;:::-;42182:73;42250:3;42239:9;42235:19;42226:6;42182:73;:::i;:::-;41431:831;;;;;;;;:::o;42268:807::-;42517:4;42555:3;42544:9;42540:19;42532:27;;42569:71;42637:1;42626:9;42622:17;42613:6;42569:71;:::i;:::-;42650:72;42718:2;42707:9;42703:18;42694:6;42650:72;:::i;:::-;42732:80;42808:2;42797:9;42793:18;42784:6;42732:80;:::i;:::-;42822;42898:2;42887:9;42883:18;42874:6;42822:80;:::i;:::-;42912:73;42980:3;42969:9;42965:19;42956:6;42912:73;:::i;:::-;42995;43063:3;43052:9;43048:19;43039:6;42995:73;:::i;:::-;42268:807;;;;;;;;;:::o;43081:143::-;43138:5;43169:6;43163:13;43154:22;;43185:33;43212:5;43185:33;:::i;:::-;43081:143;;;;:::o;43230:663::-;43318:6;43326;43334;43383:2;43371:9;43362:7;43358:23;43354:32;43351:119;;;43389:79;;:::i;:::-;43351:119;43509:1;43534:64;43590:7;43581:6;43570:9;43566:22;43534:64;:::i;:::-;43524:74;;43480:128;43647:2;43673:64;43729:7;43720:6;43709:9;43705:22;43673:64;:::i;:::-;43663:74;;43618:129;43786:2;43812:64;43868:7;43859:6;43848:9;43844:22;43812:64;:::i;:::-;43802:74;;43757:129;43230:663;;;;;:::o
Swarm Source
ipfs://95a57de4425d3a63ac81b954bfc63e317dcf958eca48fcd113fa458d44422462
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.