Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000,000 TSUYOKINA
Holders
47
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
300,000,000 TSUYOKINAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Tsuyokina
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-08 */ /** 843777_ _56759__ 28___42_ 48____25_ __536___ 32___32_ 9687_ 69___95_ __473___ __69___ 45___79_ 98___32_ _65__95__ _65_84__ 37__46__ _82__ 897__93_ _23_97__ __75___ _586____ 83___25_ __5822___ 77___59_ 65429___ _86__ 3737_57_ 99___96_ __54___ ___479__ 93___29_ ___59____ 43___35_ 65__39__ _96__ 87_3988_ 7947354_ __33___ 37___67_ 34___55_ ___99____ _65_72__ 79___62_ _72__ 89__263_ 98___68_ __63___ _66587__ _75997__ ___77____ __297___ 63___38_ 9966_ 94___98_ 64___74_ Website: https://tsuyokina.com Telegram: https://t.me/TsuyokinaETH Twitter: https://twitter.com/TsuyokinaETH */ // SPDX-License-Identifier: UNLICENCED pragma solidity 0.8.21; 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 Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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 Tsuyokina is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address public marketingWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; // Blacklist Map mapping (address => bool) private _blacklist; bool private transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; // block number of opened trading uint256 launchedAt; /******************/ // exclude from fees and max transaction amount mapping (address => bool) public _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20(unicode"Tsuyokina 強気な","TSUYOKINA") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 2; uint256 _buyLiquidityFee = 1; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 2; uint256 _sellLiquidityFee = 1; uint256 _sellDevFee = 0; uint256 totalSupply = 100_000_000_000 * 1e18; // Total Supply Tsuyokina maxTransactionAmount = totalSupply * 5000000000 * 1e18; // Max Transaction Tsuyokina maxWallet = totalSupply * 5000000000 * 1e18; // Max Wallet Tsuyokina swapTokensAtAmount = totalSupply * 50000000 * 1e18; // amount will trigger the swap and add liquidity Tsuyokina buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = address(owner()); // set as marketing wallet devWallet = address(owner()); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function Trading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // remove limits after token is stable function MaxLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function automaticTaxBuy( uint256 _devFee, uint256 _liquidityFee, uint256 _marketingFee ) external onlyOwner { buyDevFee = _devFee; buyLiquidityFee = _liquidityFee; buyMarketingFee = _marketingFee; buyTotalFees = buyDevFee + buyLiquidityFee + buyMarketingFee; require(buyTotalFees <= 100); } function automaticTaxSell( uint256 _devFee, uint256 _liquidityFee, uint256 _marketingFee ) external onlyOwner { sellDevFee = _devFee; sellLiquidityFee = _liquidityFee; sellMarketingFee = _marketingFee; sellTotalFees = sellDevFee + sellLiquidityFee + sellMarketingFee; require(sellTotalFees <= 100); } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function Wallet (address account, bool isBlacklisted) public onlyOwner { _blacklist[account] = isBlacklisted; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // 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(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"devWalletUpdated","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"},{"inputs":[],"name":"MaxLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Trading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"Wallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"automaticTaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"automaticTaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff0219169083151502179055506001600f5f6101000a81548160ff02191690831515021790555034801562000078575f80fd5b506040518060400160405280601381526020017f547375796f6b696e6120e5bcb7e6b097e381aa000000000000000000000000008152506040518060400160405280600981526020017f545355594f4b494e4100000000000000000000000000000000000000000000008152508160039081620000f6919062000dc4565b50806004908162000108919062000dc4565b5050505f6200011c6200064d60201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001e48160016200065460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000262573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000288919062000f0d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000314919062000f0d565b6040518363ffffffff1660e01b81526004016200033392919062000f4e565b6020604051808303815f875af115801562000350573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000376919062000f0d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003be60a05160016200065460201b60201c565b620003d360a05160016200074d60201b60201c565b5f600290505f600190505f80600290505f600190505f806c01431e0fae6d7217caa00000009050670de0b6b3a764000064012a05f2008262000416919062000fa6565b62000422919062000fa6565b600881905550670de0b6b3a764000064012a05f2008262000444919062000fa6565b62000450919062000fa6565b600a81905550670de0b6b3a76400006302faf0808262000471919062000fa6565b6200047d919062000fa6565b600981905550866011819055508560128190555084601381905550601354601254601154620004ad919062000ff0565b620004b9919062000ff0565b601081905550836015819055508260168190555081601781905550601754601654601554620004e9919062000ff0565b620004f5919062000ff0565b6014819055506200050b620007eb60201b60201c565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200055a620007eb60201b60201c565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005bb620005ad620007eb60201b60201c565b60016200081360201b60201c565b620005ce3060016200081360201b60201c565b620005e361dead60016200081360201b60201c565b62000605620005f7620007eb60201b60201c565b60016200065460201b60201c565b620006183060016200065460201b60201c565b6200062d61dead60016200065460201b60201c565b6200063f33826200095c60201b60201c565b5050505050505050620011e7565b5f33905090565b620006646200064d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006f5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ec9062001088565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008236200064d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ab9062001088565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009509190620010c4565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c4906200112d565b60405180910390fd5b620009e05f838362000af960201b60201c565b620009f78160025462000afe60201b90919060201c565b60028190555062000a4e815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000afe60201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aed91906200115e565b60405180910390a35050565b505050565b5f80828462000b0e919062000ff0565b90508381101562000b56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b4d90620011c7565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000bdc57607f821691505b60208210810362000bf25762000bf162000b97565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000c567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c19565b62000c62868362000c19565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000cac62000ca662000ca08462000c7a565b62000c83565b62000c7a565b9050919050565b5f819050919050565b62000cc78362000c8c565b62000cdf62000cd68262000cb3565b84845462000c25565b825550505050565b5f90565b62000cf562000ce7565b62000d0281848462000cbc565b505050565b5b8181101562000d295762000d1d5f8262000ceb565b60018101905062000d08565b5050565b601f82111562000d785762000d428162000bf8565b62000d4d8462000c0a565b8101602085101562000d5d578190505b62000d7562000d6c8562000c0a565b83018262000d07565b50505b505050565b5f82821c905092915050565b5f62000d9a5f198460080262000d7d565b1980831691505092915050565b5f62000db4838362000d89565b9150826002028217905092915050565b62000dcf8262000b60565b67ffffffffffffffff81111562000deb5762000dea62000b6a565b5b62000df7825462000bc4565b62000e0482828562000d2d565b5f60209050601f83116001811462000e3a575f841562000e25578287015190505b62000e31858262000da7565b86555062000ea0565b601f19841662000e4a8662000bf8565b5f5b8281101562000e735784890151825560018201915060208501945060208101905062000e4c565b8683101562000e93578489015162000e8f601f89168262000d89565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000ed78262000eac565b9050919050565b62000ee98162000ecb565b811462000ef4575f80fd5b50565b5f8151905062000f078162000ede565b92915050565b5f6020828403121562000f255762000f2462000ea8565b5b5f62000f348482850162000ef7565b91505092915050565b62000f488162000ecb565b82525050565b5f60408201905062000f635f83018562000f3d565b62000f72602083018462000f3d565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000fb28262000c7a565b915062000fbf8362000c7a565b925082820262000fcf8162000c7a565b9150828204841483151762000fe95762000fe862000f79565b5b5092915050565b5f62000ffc8262000c7a565b9150620010098362000c7a565b925082820190508082111562001024576200102362000f79565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620010706020836200102a565b91506200107d826200103a565b602082019050919050565b5f6020820190508181035f830152620010a18162001062565b9050919050565b5f8115159050919050565b620010be81620010a8565b82525050565b5f602082019050620010d95f830184620010b3565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001115601f836200102a565b91506200112282620010df565b602082019050919050565b5f6020820190508181035f830152620011468162001107565b9050919050565b620011588162000c7a565b82525050565b5f602082019050620011735f8301846200114d565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620011af601b836200102a565b9150620011bc8262001179565b602082019050919050565b5f6020820190508181035f830152620011e081620011a1565b9050919050565b60805160a05161539f620012415f395f81816112a5015281816119110152612bf201525f8181610d8301528181612b9a01528181613cfd01528181613ddc01528181613e0301528181613e990152613ec0015261539f5ff3fe608060405260043610610338575f3560e01c8063924de9b7116101aa578063c0246668116100f6578063e2f4560511610094578063f2fde38b1161006e578063f2fde38b14610c13578063f4485e2414610c3b578063f637434214610c63578063f8b45b0514610c8d5761033f565b8063e2f4560514610b95578063e884f26014610bbf578063f11a24d314610be95761033f565b8063d257b34f116100d0578063d257b34f14610ab7578063d85ba06314610af3578063dd62ed3e14610b1d578063e0bf7fd114610b595761033f565b8063c024666814610a3d578063c18bc19514610a65578063c8c8ebe414610a8d5761033f565b8063a0d82dc511610163578063aacebbe31161013d578063aacebbe314610999578063b62496f5146109c1578063bbc0c742146109fd578063bc0ad5a314610a275761033f565b8063a0d82dc5146108f7578063a457c2d714610921578063a9059cbb1461095d5761033f565b8063924de9b7146107ff57806395d89b41146108275780639a7a23d6146108515780639c3b4fdc146108795780639ded13b4146108a35780639fccce32146108cd5761033f565b806349bd5a5e116102845780637571336a11610222578063882418f3116101fc578063882418f3146107595780638da5cb5b146107815780638ea5220f146107ab57806392136913146107d55761033f565b80637571336a146106dd57806375f0a874146107055780637bce5a041461072f5761033f565b80636a486a8e1161025e5780636a486a8e146106375780636ddd17131461066157806370a082311461068b578063715018a6146106c75761033f565b806349bd5a5e146105a75780634a62bb65146105d15780634fbee193146105fb5761033f565b80631a8145bb116102f157806323b872dd116102cb57806323b872dd146104dd578063313ce56714610519578063323d3ae314610543578063395093511461056b5761033f565b80631a8145bb146104615780631f3fed8f1461048b578063203e727e146104b55761033f565b806306fdde0314610343578063095ea7b31461036d57806310d5de53146103a95780631694505e146103e557806318160ddd1461040f5780631816467f146104395761033f565b3661033f57005b5f80fd5b34801561034e575f80fd5b50610357610cb7565b6040516103649190614055565b60405180910390f35b348015610378575f80fd5b50610393600480360381019061038e9190614106565b610d47565b6040516103a0919061415e565b60405180910390f35b3480156103b4575f80fd5b506103cf60048036038101906103ca9190614177565b610d64565b6040516103dc919061415e565b60405180910390f35b3480156103f0575f80fd5b506103f9610d81565b60405161040691906141fd565b60405180910390f35b34801561041a575f80fd5b50610423610da5565b6040516104309190614225565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a9190614177565b610dae565b005b34801561046c575f80fd5b50610475610f02565b6040516104829190614225565b60405180910390f35b348015610496575f80fd5b5061049f610f08565b6040516104ac9190614225565b60405180910390f35b3480156104c0575f80fd5b506104db60048036038101906104d6919061423e565b610f0e565b005b3480156104e8575f80fd5b5061050360048036038101906104fe9190614269565b611037565b604051610510919061415e565b60405180910390f35b348015610524575f80fd5b5061052d61110b565b60405161053a91906142d4565b60405180910390f35b34801561054e575f80fd5b50610569600480360381019061056491906142ed565b611113565b005b348015610576575f80fd5b50610591600480360381019061058c9190614106565b6111f5565b60405161059e919061415e565b60405180910390f35b3480156105b2575f80fd5b506105bb6112a3565b6040516105c8919061434c565b60405180910390f35b3480156105dc575f80fd5b506105e56112c7565b6040516105f2919061415e565b60405180910390f35b348015610606575f80fd5b50610621600480360381019061061c9190614177565b6112d9565b60405161062e919061415e565b60405180910390f35b348015610642575f80fd5b5061064b61132b565b6040516106589190614225565b60405180910390f35b34801561066c575f80fd5b50610675611331565b604051610682919061415e565b60405180910390f35b348015610696575f80fd5b506106b160048036038101906106ac9190614177565b611344565b6040516106be9190614225565b60405180910390f35b3480156106d2575f80fd5b506106db611389565b005b3480156106e8575f80fd5b5061070360048036038101906106fe919061438f565b6114dc565b005b348015610710575f80fd5b506107196115ca565b604051610726919061434c565b60405180910390f35b34801561073a575f80fd5b506107436115ef565b6040516107509190614225565b60405180910390f35b348015610764575f80fd5b5061077f600480360381019061077a919061438f565b6115f5565b005b34801561078c575f80fd5b506107956116e3565b6040516107a2919061434c565b60405180910390f35b3480156107b6575f80fd5b506107bf61170b565b6040516107cc919061434c565b60405180910390f35b3480156107e0575f80fd5b506107e9611730565b6040516107f69190614225565b60405180910390f35b34801561080a575f80fd5b50610825600480360381019061082091906143cd565b611736565b005b348015610832575f80fd5b5061083b6117e9565b6040516108489190614055565b60405180910390f35b34801561085c575f80fd5b506108776004803603810190610872919061438f565b611879565b005b348015610884575f80fd5b5061088d6119ab565b60405161089a9190614225565b60405180910390f35b3480156108ae575f80fd5b506108b76119b1565b6040516108c4919061415e565b60405180910390f35b3480156108d8575f80fd5b506108e1611a68565b6040516108ee9190614225565b60405180910390f35b348015610902575f80fd5b5061090b611a6e565b6040516109189190614225565b60405180910390f35b34801561092c575f80fd5b5061094760048036038101906109429190614106565b611a74565b604051610954919061415e565b60405180910390f35b348015610968575f80fd5b50610983600480360381019061097e9190614106565b611b3c565b604051610990919061415e565b60405180910390f35b3480156109a4575f80fd5b506109bf60048036038101906109ba9190614177565b611b59565b005b3480156109cc575f80fd5b506109e760048036038101906109e29190614177565b611cad565b6040516109f4919061415e565b60405180910390f35b348015610a08575f80fd5b50610a11611cca565b604051610a1e919061415e565b60405180910390f35b348015610a32575f80fd5b50610a3b611cdd565b005b348015610a48575f80fd5b50610a636004803603810190610a5e919061438f565b611db2565b005b348015610a70575f80fd5b50610a8b6004803603810190610a86919061423e565b611eee565b005b348015610a98575f80fd5b50610aa1612017565b604051610aae9190614225565b60405180910390f35b348015610ac2575f80fd5b50610add6004803603810190610ad8919061423e565b61201d565b604051610aea919061415e565b60405180910390f35b348015610afe575f80fd5b50610b0761218b565b604051610b149190614225565b60405180910390f35b348015610b28575f80fd5b50610b436004803603810190610b3e91906143f8565b612191565b604051610b509190614225565b60405180910390f35b348015610b64575f80fd5b50610b7f6004803603810190610b7a9190614177565b612213565b604051610b8c919061415e565b60405180910390f35b348015610ba0575f80fd5b50610ba9612230565b604051610bb69190614225565b60405180910390f35b348015610bca575f80fd5b50610bd3612236565b604051610be0919061415e565b60405180910390f35b348015610bf4575f80fd5b50610bfd6122ed565b604051610c0a9190614225565b60405180910390f35b348015610c1e575f80fd5b50610c396004803603810190610c349190614177565b6122f3565b005b348015610c46575f80fd5b50610c616004803603810190610c5c91906142ed565b6124b5565b005b348015610c6e575f80fd5b50610c77612597565b604051610c849190614225565b60405180910390f35b348015610c98575f80fd5b50610ca161259d565b604051610cae9190614225565b60405180910390f35b606060038054610cc690614463565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf290614463565b8015610d3d5780601f10610d1457610100808354040283529160200191610d3d565b820191905f5260205f20905b815481529060010190602001808311610d2057829003601f168201915b5050505050905090565b5f610d5a610d536125a3565b84846125aa565b6001905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610db66125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3b906144dd565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610f166125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b906144dd565b60405180910390fd5b670de0b6b3a76400006103e86001610fba610da5565b610fc49190614528565b610fce9190614596565b610fd89190614596565b81101561101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190614636565b60405180910390fd5b670de0b6b3a76400008161102e9190614528565b60088190555050565b5f61104384848461276d565b6111008461104f6125a3565b6110fb8560405180606001604052806028815260200161531d6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110b26125a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461349d9092919063ffffffff16565b6125aa565b600190509392505050565b5f6012905090565b61111b6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a0906144dd565b60405180910390fd5b8260138190555081601281905550806011819055506011546012546013546111d19190614654565b6111db9190614654565b601081905550606460105411156111f0575f80fd5b505050565b5f6112996112016125a3565b846112948560015f6112116125a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134ff90919063ffffffff16565b6125aa565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b5f601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60145481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113916125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461141f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611416906144dd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6114e46125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611572576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611569906144dd565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6115fd6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906144dd565b60405180910390fd5b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61173e6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c3906144dd565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546117f890614463565b80601f016020809104026020016040519081016040528092919081815260200182805461182490614463565b801561186f5780601f106118465761010080835404028352916020019161186f565b820191905f5260205f20905b81548152906001019060200180831161185257829003601f168201915b5050505050905090565b6118816125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611906906144dd565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361199d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611994906146f7565b60405180910390fd5b6119a7828261355c565b5050565b60135481565b5f6119ba6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f906144dd565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b601a5481565b60175481565b5f611b32611a806125a3565b84611b2d856040518060600160405280602581526020016153456025913960015f611aa96125a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461349d9092919063ffffffff16565b6125aa565b6001905092915050565b5f611b4f611b486125a3565b848461276d565b6001905092915050565b611b616125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be6906144dd565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611ce56125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a906144dd565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b611dba6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3f906144dd565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ee2919061415e565b60405180910390a25050565b611ef66125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7b906144dd565b60405180910390fd5b670de0b6b3a76400006103e86005611f9a610da5565b611fa49190614528565b611fae9190614596565b611fb89190614596565b811015611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff190614785565b60405180910390fd5b670de0b6b3a76400008161200e9190614528565b600a8190555050565b60085481565b5f6120266125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ab906144dd565b60405180910390fd5b620186a060016120c2610da5565b6120cc9190614528565b6120d69190614596565b821015612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210f90614813565b60405180910390fd5b6103e86005612125610da5565b61212f9190614528565b6121399190614596565b82111561217b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612172906148a1565b60405180910390fd5b8160098190555060019050919050565b60105481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b601c602052805f5260405f205f915054906101000a900460ff1681565b60095481565b5f61223f6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c4906144dd565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055506001905090565b60125481565b6122fb6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612380906144dd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee9061492f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124bd6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461254b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612542906144dd565b60405180910390fd5b8260178190555081601681905550806015819055506015546016546017546125739190614654565b61257d9190614654565b60148190555060646014541115612592575f80fd5b505050565b60165481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260f906149bd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267d90614a4b565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127609190614225565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d290614ad9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090614b67565b60405180910390fd5b600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156128e75750600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291d90614bf5565b60405180910390fd5b5f810361293d5761293883835f6135fa565b613498565b600b5f9054906101000a900460ff1615612fe4576129596116e3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129c757506129976116e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129ff57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a39575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a525750600560149054906101000a900460ff16155b15612fe357600b60019054906101000a900460ff16612b4657601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612b065750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3c90614c5d565b60405180910390fd5b5b600f5f9054906101000a900460ff1615612d0957612b626116e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612be957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c4157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d085743600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbc90614d11565b60405180910390fd5b43600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612da65750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612e4d57600854811115612df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de790614d9f565b60405180910390fd5b600a54612dfc83611344565b82612e079190614654565b1115612e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3f90614e07565b60405180910390fd5b612fe2565b601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612eea5750601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f3957600854811115612f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2b90614e95565b60405180910390fd5b612fe1565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612fe057600a54612f9383611344565b82612f9e9190614654565b1115612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd690614e07565b60405180910390fd5b5b5b5b5b5b5f612fee30611344565b90505f60095482101590508080156130125750600b60029054906101000a900460ff165b801561302b5750600560149054906101000a900460ff16155b801561307e5750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156130d15750601c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156131245750601c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613167576001600560146101000a81548160ff02191690831515021790555061314c613883565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806132165750601c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561321f575f90505b5f811561348857601e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561327d57505f601454115b15613347576132aa606461329c60145488613b5290919063ffffffff16565b613bc990919063ffffffff16565b9050601454601654826132bd9190614528565b6132c79190614596565b60195f8282546132d79190614654565b92505081905550601454601754826132ef9190614528565b6132f99190614596565b601a5f8282546133099190614654565b92505081905550601454601554826133219190614528565b61332b9190614596565b60185f82825461333b9190614654565b92505081905550613465565b601e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561339e57505f601054115b15613464576133cb60646133bd60105488613b5290919063ffffffff16565b613bc990919063ffffffff16565b9050601054601254826133de9190614528565b6133e89190614596565b60195f8282546133f89190614654565b92505081905550601054601354826134109190614528565b61341a9190614596565b601a5f82825461342a9190614654565b92505081905550601054601154826134429190614528565b61344c9190614596565b60185f82825461345c9190614654565b925050819055505b5b5f811115613479576134788730836135fa565b5b80856134859190614eb3565b94505b6134938787876135fa565b505050505b505050565b5f8383111582906134e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134db9190614055565b60405180910390fd5b505f83856134f29190614eb3565b9050809150509392505050565b5f80828461350d9190614654565b905083811015613552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354990614f30565b60405180910390fd5b8091505092915050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365f90614ad9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136cd90614b67565b60405180910390fd5b6136e1838383613c12565b61374a816040518060600160405280602681526020016152f7602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461349d9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506137d9815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134ff90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138769190614225565b60405180910390a3505050565b5f61388d30611344565b90505f601a546018546019546138a39190614654565b6138ad9190614654565b90505f808314806138bd57505f82145b156138ca57505050613b50565b60146009546138d99190614528565b8311156138f25760146009546138ef9190614528565b92505b5f600283601954866139049190614528565b61390e9190614596565b6139189190614596565b90505f61392e8286613c1790919063ffffffff16565b90505f47905061393d82613c60565b5f6139518247613c1790919063ffffffff16565b90505f61397b8761396d60185485613b5290919063ffffffff16565b613bc990919063ffffffff16565b90505f6139a588613997601a5486613b5290919063ffffffff16565b613bc990919063ffffffff16565b90505f8183856139b59190614eb3565b6139bf9190614eb3565b90505f6019819055505f6018819055505f601a8190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a1b90614f7b565b5f6040518083038185875af1925050503d805f8114613a55576040519150601f19603f3d011682016040523d82523d5f602084013e613a5a565b606091505b5050809850505f87118015613a6e57505f81115b15613abb57613a7d8782613e93565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613ab293929190614f8f565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b0090614f7b565b5f6040518083038185875af1925050503d805f8114613b3a576040519150601f19603f3d011682016040523d82523d5f602084013e613b3f565b606091505b505080985050505050505050505050505b565b5f808303613b62575f9050613bc3565b5f8284613b6f9190614528565b9050828482613b7e9190614596565b14613bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bb590615034565b60405180910390fd5b809150505b92915050565b5f613c0a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f6a565b905092915050565b505050565b5f613c5883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061349d565b905092915050565b5f600267ffffffffffffffff811115613c7c57613c7b615052565b5b604051908082528060200260200182016040528015613caa5781602001602082028036833780820191505090505b50905030815f81518110613cc157613cc061507f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d8891906150c0565b81600181518110613d9c57613d9b61507f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e01307f0000000000000000000000000000000000000000000000000000000000000000846125aa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613e629594939291906151db565b5f604051808303815f87803b158015613e79575f80fd5b505af1158015613e8b573d5f803e3d5ffd5b505050505050565b613ebe307f0000000000000000000000000000000000000000000000000000000000000000846125aa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613f2296959493929190615233565b60606040518083038185885af1158015613f3e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613f6391906152a6565b5050505050565b5f8083118290613fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fa79190614055565b60405180910390fd5b505f8385613fbe9190614596565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614002578082015181840152602081019050613fe7565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61402782613fcb565b6140318185613fd5565b9350614041818560208601613fe5565b61404a8161400d565b840191505092915050565b5f6020820190508181035f83015261406d818461401d565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6140a282614079565b9050919050565b6140b281614098565b81146140bc575f80fd5b50565b5f813590506140cd816140a9565b92915050565b5f819050919050565b6140e5816140d3565b81146140ef575f80fd5b50565b5f81359050614100816140dc565b92915050565b5f806040838503121561411c5761411b614075565b5b5f614129858286016140bf565b925050602061413a858286016140f2565b9150509250929050565b5f8115159050919050565b61415881614144565b82525050565b5f6020820190506141715f83018461414f565b92915050565b5f6020828403121561418c5761418b614075565b5b5f614199848285016140bf565b91505092915050565b5f819050919050565b5f6141c56141c06141bb84614079565b6141a2565b614079565b9050919050565b5f6141d6826141ab565b9050919050565b5f6141e7826141cc565b9050919050565b6141f7816141dd565b82525050565b5f6020820190506142105f8301846141ee565b92915050565b61421f816140d3565b82525050565b5f6020820190506142385f830184614216565b92915050565b5f6020828403121561425357614252614075565b5b5f614260848285016140f2565b91505092915050565b5f805f606084860312156142805761427f614075565b5b5f61428d868287016140bf565b935050602061429e868287016140bf565b92505060406142af868287016140f2565b9150509250925092565b5f60ff82169050919050565b6142ce816142b9565b82525050565b5f6020820190506142e75f8301846142c5565b92915050565b5f805f6060848603121561430457614303614075565b5b5f614311868287016140f2565b9350506020614322868287016140f2565b9250506040614333868287016140f2565b9150509250925092565b61434681614098565b82525050565b5f60208201905061435f5f83018461433d565b92915050565b61436e81614144565b8114614378575f80fd5b50565b5f8135905061438981614365565b92915050565b5f80604083850312156143a5576143a4614075565b5b5f6143b2858286016140bf565b92505060206143c38582860161437b565b9150509250929050565b5f602082840312156143e2576143e1614075565b5b5f6143ef8482850161437b565b91505092915050565b5f806040838503121561440e5761440d614075565b5b5f61441b858286016140bf565b925050602061442c858286016140bf565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061447a57607f821691505b60208210810361448d5761448c614436565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6144c7602083613fd5565b91506144d282614493565b602082019050919050565b5f6020820190508181035f8301526144f4816144bb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614532826140d3565b915061453d836140d3565b925082820261454b816140d3565b91508282048414831517614562576145616144fb565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6145a0826140d3565b91506145ab836140d3565b9250826145bb576145ba614569565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614620602f83613fd5565b915061462b826145c6565b604082019050919050565b5f6020820190508181035f83015261464d81614614565b9050919050565b5f61465e826140d3565b9150614669836140d3565b9250828201905080821115614681576146806144fb565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6146e1603983613fd5565b91506146ec82614687565b604082019050919050565b5f6020820190508181035f83015261470e816146d5565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61476f602483613fd5565b915061477a82614715565b604082019050919050565b5f6020820190508181035f83015261479c81614763565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6147fd603583613fd5565b9150614808826147a3565b604082019050919050565b5f6020820190508181035f83015261482a816147f1565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f61488b603483613fd5565b915061489682614831565b604082019050919050565b5f6020820190508181035f8301526148b88161487f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614919602683613fd5565b9150614924826148bf565b604082019050919050565b5f6020820190508181035f8301526149468161490d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6149a7602483613fd5565b91506149b28261494d565b604082019050919050565b5f6020820190508181035f8301526149d48161499b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a35602283613fd5565b9150614a40826149db565b604082019050919050565b5f6020820190508181035f830152614a6281614a29565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614ac3602583613fd5565b9150614ace82614a69565b604082019050919050565b5f6020820190508181035f830152614af081614ab7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614b51602383613fd5565b9150614b5c82614af7565b604082019050919050565b5f6020820190508181035f830152614b7e81614b45565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d20745f8201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b5f614bdf603183613fd5565b9150614bea82614b85565b604082019050919050565b5f6020820190508181035f830152614c0c81614bd3565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614c47601683613fd5565b9150614c5282614c13565b602082019050919050565b5f6020820190508181035f830152614c7481614c3b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614cfb604983613fd5565b9150614d0682614c7b565b606082019050919050565b5f6020820190508181035f830152614d2881614cef565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614d89603583613fd5565b9150614d9482614d2f565b604082019050919050565b5f6020820190508181035f830152614db681614d7d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614df1601383613fd5565b9150614dfc82614dbd565b602082019050919050565b5f6020820190508181035f830152614e1e81614de5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614e7f603683613fd5565b9150614e8a82614e25565b604082019050919050565b5f6020820190508181035f830152614eac81614e73565b9050919050565b5f614ebd826140d3565b9150614ec8836140d3565b9250828203905081811115614ee057614edf6144fb565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614f1a601b83613fd5565b9150614f2582614ee6565b602082019050919050565b5f6020820190508181035f830152614f4781614f0e565b9050919050565b5f81905092915050565b50565b5f614f665f83614f4e565b9150614f7182614f58565b5f82019050919050565b5f614f8582614f5b565b9150819050919050565b5f606082019050614fa25f830186614216565b614faf6020830185614216565b614fbc6040830184614216565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61501e602183613fd5565b915061502982614fc4565b604082019050919050565b5f6020820190508181035f83015261504b81615012565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506150ba816140a9565b92915050565b5f602082840312156150d5576150d4614075565b5b5f6150e2848285016150ac565b91505092915050565b5f819050919050565b5f61510e615109615104846150eb565b6141a2565b6140d3565b9050919050565b61511e816150f4565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61515681614098565b82525050565b5f615167838361514d565b60208301905092915050565b5f602082019050919050565b5f61518982615124565b615193818561512e565b935061519e8361513e565b805f5b838110156151ce5781516151b5888261515c565b97506151c083615173565b9250506001810190506151a1565b5085935050505092915050565b5f60a0820190506151ee5f830188614216565b6151fb6020830187615115565b818103604083015261520d818661517f565b905061521c606083018561433d565b6152296080830184614216565b9695505050505050565b5f60c0820190506152465f83018961433d565b6152536020830188614216565b6152606040830187615115565b61526d6060830186615115565b61527a608083018561433d565b61528760a0830184614216565b979650505050505050565b5f815190506152a0816140dc565b92915050565b5f805f606084860312156152bd576152bc614075565b5b5f6152ca86828701615292565b93505060206152db86828701615292565b92505060406152ec86828701615292565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122015c95b20d3438a07b24f4002a5c870b85d497a4a1840dd905b747fdc7f4bbd8964736f6c63430008150033
Deployed Bytecode
0x608060405260043610610338575f3560e01c8063924de9b7116101aa578063c0246668116100f6578063e2f4560511610094578063f2fde38b1161006e578063f2fde38b14610c13578063f4485e2414610c3b578063f637434214610c63578063f8b45b0514610c8d5761033f565b8063e2f4560514610b95578063e884f26014610bbf578063f11a24d314610be95761033f565b8063d257b34f116100d0578063d257b34f14610ab7578063d85ba06314610af3578063dd62ed3e14610b1d578063e0bf7fd114610b595761033f565b8063c024666814610a3d578063c18bc19514610a65578063c8c8ebe414610a8d5761033f565b8063a0d82dc511610163578063aacebbe31161013d578063aacebbe314610999578063b62496f5146109c1578063bbc0c742146109fd578063bc0ad5a314610a275761033f565b8063a0d82dc5146108f7578063a457c2d714610921578063a9059cbb1461095d5761033f565b8063924de9b7146107ff57806395d89b41146108275780639a7a23d6146108515780639c3b4fdc146108795780639ded13b4146108a35780639fccce32146108cd5761033f565b806349bd5a5e116102845780637571336a11610222578063882418f3116101fc578063882418f3146107595780638da5cb5b146107815780638ea5220f146107ab57806392136913146107d55761033f565b80637571336a146106dd57806375f0a874146107055780637bce5a041461072f5761033f565b80636a486a8e1161025e5780636a486a8e146106375780636ddd17131461066157806370a082311461068b578063715018a6146106c75761033f565b806349bd5a5e146105a75780634a62bb65146105d15780634fbee193146105fb5761033f565b80631a8145bb116102f157806323b872dd116102cb57806323b872dd146104dd578063313ce56714610519578063323d3ae314610543578063395093511461056b5761033f565b80631a8145bb146104615780631f3fed8f1461048b578063203e727e146104b55761033f565b806306fdde0314610343578063095ea7b31461036d57806310d5de53146103a95780631694505e146103e557806318160ddd1461040f5780631816467f146104395761033f565b3661033f57005b5f80fd5b34801561034e575f80fd5b50610357610cb7565b6040516103649190614055565b60405180910390f35b348015610378575f80fd5b50610393600480360381019061038e9190614106565b610d47565b6040516103a0919061415e565b60405180910390f35b3480156103b4575f80fd5b506103cf60048036038101906103ca9190614177565b610d64565b6040516103dc919061415e565b60405180910390f35b3480156103f0575f80fd5b506103f9610d81565b60405161040691906141fd565b60405180910390f35b34801561041a575f80fd5b50610423610da5565b6040516104309190614225565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a9190614177565b610dae565b005b34801561046c575f80fd5b50610475610f02565b6040516104829190614225565b60405180910390f35b348015610496575f80fd5b5061049f610f08565b6040516104ac9190614225565b60405180910390f35b3480156104c0575f80fd5b506104db60048036038101906104d6919061423e565b610f0e565b005b3480156104e8575f80fd5b5061050360048036038101906104fe9190614269565b611037565b604051610510919061415e565b60405180910390f35b348015610524575f80fd5b5061052d61110b565b60405161053a91906142d4565b60405180910390f35b34801561054e575f80fd5b50610569600480360381019061056491906142ed565b611113565b005b348015610576575f80fd5b50610591600480360381019061058c9190614106565b6111f5565b60405161059e919061415e565b60405180910390f35b3480156105b2575f80fd5b506105bb6112a3565b6040516105c8919061434c565b60405180910390f35b3480156105dc575f80fd5b506105e56112c7565b6040516105f2919061415e565b60405180910390f35b348015610606575f80fd5b50610621600480360381019061061c9190614177565b6112d9565b60405161062e919061415e565b60405180910390f35b348015610642575f80fd5b5061064b61132b565b6040516106589190614225565b60405180910390f35b34801561066c575f80fd5b50610675611331565b604051610682919061415e565b60405180910390f35b348015610696575f80fd5b506106b160048036038101906106ac9190614177565b611344565b6040516106be9190614225565b60405180910390f35b3480156106d2575f80fd5b506106db611389565b005b3480156106e8575f80fd5b5061070360048036038101906106fe919061438f565b6114dc565b005b348015610710575f80fd5b506107196115ca565b604051610726919061434c565b60405180910390f35b34801561073a575f80fd5b506107436115ef565b6040516107509190614225565b60405180910390f35b348015610764575f80fd5b5061077f600480360381019061077a919061438f565b6115f5565b005b34801561078c575f80fd5b506107956116e3565b6040516107a2919061434c565b60405180910390f35b3480156107b6575f80fd5b506107bf61170b565b6040516107cc919061434c565b60405180910390f35b3480156107e0575f80fd5b506107e9611730565b6040516107f69190614225565b60405180910390f35b34801561080a575f80fd5b50610825600480360381019061082091906143cd565b611736565b005b348015610832575f80fd5b5061083b6117e9565b6040516108489190614055565b60405180910390f35b34801561085c575f80fd5b506108776004803603810190610872919061438f565b611879565b005b348015610884575f80fd5b5061088d6119ab565b60405161089a9190614225565b60405180910390f35b3480156108ae575f80fd5b506108b76119b1565b6040516108c4919061415e565b60405180910390f35b3480156108d8575f80fd5b506108e1611a68565b6040516108ee9190614225565b60405180910390f35b348015610902575f80fd5b5061090b611a6e565b6040516109189190614225565b60405180910390f35b34801561092c575f80fd5b5061094760048036038101906109429190614106565b611a74565b604051610954919061415e565b60405180910390f35b348015610968575f80fd5b50610983600480360381019061097e9190614106565b611b3c565b604051610990919061415e565b60405180910390f35b3480156109a4575f80fd5b506109bf60048036038101906109ba9190614177565b611b59565b005b3480156109cc575f80fd5b506109e760048036038101906109e29190614177565b611cad565b6040516109f4919061415e565b60405180910390f35b348015610a08575f80fd5b50610a11611cca565b604051610a1e919061415e565b60405180910390f35b348015610a32575f80fd5b50610a3b611cdd565b005b348015610a48575f80fd5b50610a636004803603810190610a5e919061438f565b611db2565b005b348015610a70575f80fd5b50610a8b6004803603810190610a86919061423e565b611eee565b005b348015610a98575f80fd5b50610aa1612017565b604051610aae9190614225565b60405180910390f35b348015610ac2575f80fd5b50610add6004803603810190610ad8919061423e565b61201d565b604051610aea919061415e565b60405180910390f35b348015610afe575f80fd5b50610b0761218b565b604051610b149190614225565b60405180910390f35b348015610b28575f80fd5b50610b436004803603810190610b3e91906143f8565b612191565b604051610b509190614225565b60405180910390f35b348015610b64575f80fd5b50610b7f6004803603810190610b7a9190614177565b612213565b604051610b8c919061415e565b60405180910390f35b348015610ba0575f80fd5b50610ba9612230565b604051610bb69190614225565b60405180910390f35b348015610bca575f80fd5b50610bd3612236565b604051610be0919061415e565b60405180910390f35b348015610bf4575f80fd5b50610bfd6122ed565b604051610c0a9190614225565b60405180910390f35b348015610c1e575f80fd5b50610c396004803603810190610c349190614177565b6122f3565b005b348015610c46575f80fd5b50610c616004803603810190610c5c91906142ed565b6124b5565b005b348015610c6e575f80fd5b50610c77612597565b604051610c849190614225565b60405180910390f35b348015610c98575f80fd5b50610ca161259d565b604051610cae9190614225565b60405180910390f35b606060038054610cc690614463565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf290614463565b8015610d3d5780601f10610d1457610100808354040283529160200191610d3d565b820191905f5260205f20905b815481529060010190602001808311610d2057829003601f168201915b5050505050905090565b5f610d5a610d536125a3565b84846125aa565b6001905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610db66125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3b906144dd565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610f166125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b906144dd565b60405180910390fd5b670de0b6b3a76400006103e86001610fba610da5565b610fc49190614528565b610fce9190614596565b610fd89190614596565b81101561101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190614636565b60405180910390fd5b670de0b6b3a76400008161102e9190614528565b60088190555050565b5f61104384848461276d565b6111008461104f6125a3565b6110fb8560405180606001604052806028815260200161531d6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110b26125a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461349d9092919063ffffffff16565b6125aa565b600190509392505050565b5f6012905090565b61111b6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a0906144dd565b60405180910390fd5b8260138190555081601281905550806011819055506011546012546013546111d19190614654565b6111db9190614654565b601081905550606460105411156111f0575f80fd5b505050565b5f6112996112016125a3565b846112948560015f6112116125a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134ff90919063ffffffff16565b6125aa565b6001905092915050565b7f0000000000000000000000000e0e653ae405fbd42eccd108cbf8d30853dcd95481565b600b5f9054906101000a900460ff1681565b5f601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60145481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113916125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461141f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611416906144dd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6114e46125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611572576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611569906144dd565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6115fd6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906144dd565b60405180910390fd5b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61173e6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c3906144dd565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546117f890614463565b80601f016020809104026020016040519081016040528092919081815260200182805461182490614463565b801561186f5780601f106118465761010080835404028352916020019161186f565b820191905f5260205f20905b81548152906001019060200180831161185257829003601f168201915b5050505050905090565b6118816125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611906906144dd565b60405180910390fd5b7f0000000000000000000000000e0e653ae405fbd42eccd108cbf8d30853dcd95473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361199d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611994906146f7565b60405180910390fd5b6119a7828261355c565b5050565b60135481565b5f6119ba6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f906144dd565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b601a5481565b60175481565b5f611b32611a806125a3565b84611b2d856040518060600160405280602581526020016153456025913960015f611aa96125a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461349d9092919063ffffffff16565b6125aa565b6001905092915050565b5f611b4f611b486125a3565b848461276d565b6001905092915050565b611b616125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be6906144dd565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611ce56125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a906144dd565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b611dba6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3f906144dd565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ee2919061415e565b60405180910390a25050565b611ef66125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7b906144dd565b60405180910390fd5b670de0b6b3a76400006103e86005611f9a610da5565b611fa49190614528565b611fae9190614596565b611fb89190614596565b811015611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff190614785565b60405180910390fd5b670de0b6b3a76400008161200e9190614528565b600a8190555050565b60085481565b5f6120266125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ab906144dd565b60405180910390fd5b620186a060016120c2610da5565b6120cc9190614528565b6120d69190614596565b821015612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210f90614813565b60405180910390fd5b6103e86005612125610da5565b61212f9190614528565b6121399190614596565b82111561217b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612172906148a1565b60405180910390fd5b8160098190555060019050919050565b60105481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b601c602052805f5260405f205f915054906101000a900460ff1681565b60095481565b5f61223f6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c4906144dd565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055506001905090565b60125481565b6122fb6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612380906144dd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee9061492f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124bd6125a3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461254b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612542906144dd565b60405180910390fd5b8260178190555081601681905550806015819055506015546016546017546125739190614654565b61257d9190614654565b60148190555060646014541115612592575f80fd5b505050565b60165481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260f906149bd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267d90614a4b565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127609190614225565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d290614ad9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090614b67565b60405180910390fd5b600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156128e75750600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291d90614bf5565b60405180910390fd5b5f810361293d5761293883835f6135fa565b613498565b600b5f9054906101000a900460ff1615612fe4576129596116e3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129c757506129976116e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129ff57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a39575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a525750600560149054906101000a900460ff16155b15612fe357600b60019054906101000a900460ff16612b4657601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612b065750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3c90614c5d565b60405180910390fd5b5b600f5f9054906101000a900460ff1615612d0957612b626116e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612be957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c4157507f0000000000000000000000000e0e653ae405fbd42eccd108cbf8d30853dcd95473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d085743600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbc90614d11565b60405180910390fd5b43600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612da65750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612e4d57600854811115612df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de790614d9f565b60405180910390fd5b600a54612dfc83611344565b82612e079190614654565b1115612e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3f90614e07565b60405180910390fd5b612fe2565b601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612eea5750601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f3957600854811115612f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2b90614e95565b60405180910390fd5b612fe1565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612fe057600a54612f9383611344565b82612f9e9190614654565b1115612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd690614e07565b60405180910390fd5b5b5b5b5b5b5f612fee30611344565b90505f60095482101590508080156130125750600b60029054906101000a900460ff165b801561302b5750600560149054906101000a900460ff16155b801561307e5750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156130d15750601c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156131245750601c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613167576001600560146101000a81548160ff02191690831515021790555061314c613883565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806132165750601c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561321f575f90505b5f811561348857601e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561327d57505f601454115b15613347576132aa606461329c60145488613b5290919063ffffffff16565b613bc990919063ffffffff16565b9050601454601654826132bd9190614528565b6132c79190614596565b60195f8282546132d79190614654565b92505081905550601454601754826132ef9190614528565b6132f99190614596565b601a5f8282546133099190614654565b92505081905550601454601554826133219190614528565b61332b9190614596565b60185f82825461333b9190614654565b92505081905550613465565b601e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561339e57505f601054115b15613464576133cb60646133bd60105488613b5290919063ffffffff16565b613bc990919063ffffffff16565b9050601054601254826133de9190614528565b6133e89190614596565b60195f8282546133f89190614654565b92505081905550601054601354826134109190614528565b61341a9190614596565b601a5f82825461342a9190614654565b92505081905550601054601154826134429190614528565b61344c9190614596565b60185f82825461345c9190614654565b925050819055505b5b5f811115613479576134788730836135fa565b5b80856134859190614eb3565b94505b6134938787876135fa565b505050505b505050565b5f8383111582906134e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134db9190614055565b60405180910390fd5b505f83856134f29190614eb3565b9050809150509392505050565b5f80828461350d9190614654565b905083811015613552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354990614f30565b60405180910390fd5b8091505092915050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365f90614ad9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136cd90614b67565b60405180910390fd5b6136e1838383613c12565b61374a816040518060600160405280602681526020016152f7602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461349d9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506137d9815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134ff90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138769190614225565b60405180910390a3505050565b5f61388d30611344565b90505f601a546018546019546138a39190614654565b6138ad9190614654565b90505f808314806138bd57505f82145b156138ca57505050613b50565b60146009546138d99190614528565b8311156138f25760146009546138ef9190614528565b92505b5f600283601954866139049190614528565b61390e9190614596565b6139189190614596565b90505f61392e8286613c1790919063ffffffff16565b90505f47905061393d82613c60565b5f6139518247613c1790919063ffffffff16565b90505f61397b8761396d60185485613b5290919063ffffffff16565b613bc990919063ffffffff16565b90505f6139a588613997601a5486613b5290919063ffffffff16565b613bc990919063ffffffff16565b90505f8183856139b59190614eb3565b6139bf9190614eb3565b90505f6019819055505f6018819055505f601a8190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a1b90614f7b565b5f6040518083038185875af1925050503d805f8114613a55576040519150601f19603f3d011682016040523d82523d5f602084013e613a5a565b606091505b5050809850505f87118015613a6e57505f81115b15613abb57613a7d8782613e93565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613ab293929190614f8f565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b0090614f7b565b5f6040518083038185875af1925050503d805f8114613b3a576040519150601f19603f3d011682016040523d82523d5f602084013e613b3f565b606091505b505080985050505050505050505050505b565b5f808303613b62575f9050613bc3565b5f8284613b6f9190614528565b9050828482613b7e9190614596565b14613bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bb590615034565b60405180910390fd5b809150505b92915050565b5f613c0a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f6a565b905092915050565b505050565b5f613c5883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061349d565b905092915050565b5f600267ffffffffffffffff811115613c7c57613c7b615052565b5b604051908082528060200260200182016040528015613caa5781602001602082028036833780820191505090505b50905030815f81518110613cc157613cc061507f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d8891906150c0565b81600181518110613d9c57613d9b61507f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e01307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846125aa565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613e629594939291906151db565b5f604051808303815f87803b158015613e79575f80fd5b505af1158015613e8b573d5f803e3d5ffd5b505050505050565b613ebe307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846125aa565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613f2296959493929190615233565b60606040518083038185885af1158015613f3e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613f6391906152a6565b5050505050565b5f8083118290613fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fa79190614055565b60405180910390fd5b505f8385613fbe9190614596565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614002578082015181840152602081019050613fe7565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61402782613fcb565b6140318185613fd5565b9350614041818560208601613fe5565b61404a8161400d565b840191505092915050565b5f6020820190508181035f83015261406d818461401d565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6140a282614079565b9050919050565b6140b281614098565b81146140bc575f80fd5b50565b5f813590506140cd816140a9565b92915050565b5f819050919050565b6140e5816140d3565b81146140ef575f80fd5b50565b5f81359050614100816140dc565b92915050565b5f806040838503121561411c5761411b614075565b5b5f614129858286016140bf565b925050602061413a858286016140f2565b9150509250929050565b5f8115159050919050565b61415881614144565b82525050565b5f6020820190506141715f83018461414f565b92915050565b5f6020828403121561418c5761418b614075565b5b5f614199848285016140bf565b91505092915050565b5f819050919050565b5f6141c56141c06141bb84614079565b6141a2565b614079565b9050919050565b5f6141d6826141ab565b9050919050565b5f6141e7826141cc565b9050919050565b6141f7816141dd565b82525050565b5f6020820190506142105f8301846141ee565b92915050565b61421f816140d3565b82525050565b5f6020820190506142385f830184614216565b92915050565b5f6020828403121561425357614252614075565b5b5f614260848285016140f2565b91505092915050565b5f805f606084860312156142805761427f614075565b5b5f61428d868287016140bf565b935050602061429e868287016140bf565b92505060406142af868287016140f2565b9150509250925092565b5f60ff82169050919050565b6142ce816142b9565b82525050565b5f6020820190506142e75f8301846142c5565b92915050565b5f805f6060848603121561430457614303614075565b5b5f614311868287016140f2565b9350506020614322868287016140f2565b9250506040614333868287016140f2565b9150509250925092565b61434681614098565b82525050565b5f60208201905061435f5f83018461433d565b92915050565b61436e81614144565b8114614378575f80fd5b50565b5f8135905061438981614365565b92915050565b5f80604083850312156143a5576143a4614075565b5b5f6143b2858286016140bf565b92505060206143c38582860161437b565b9150509250929050565b5f602082840312156143e2576143e1614075565b5b5f6143ef8482850161437b565b91505092915050565b5f806040838503121561440e5761440d614075565b5b5f61441b858286016140bf565b925050602061442c858286016140bf565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061447a57607f821691505b60208210810361448d5761448c614436565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6144c7602083613fd5565b91506144d282614493565b602082019050919050565b5f6020820190508181035f8301526144f4816144bb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614532826140d3565b915061453d836140d3565b925082820261454b816140d3565b91508282048414831517614562576145616144fb565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6145a0826140d3565b91506145ab836140d3565b9250826145bb576145ba614569565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614620602f83613fd5565b915061462b826145c6565b604082019050919050565b5f6020820190508181035f83015261464d81614614565b9050919050565b5f61465e826140d3565b9150614669836140d3565b9250828201905080821115614681576146806144fb565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6146e1603983613fd5565b91506146ec82614687565b604082019050919050565b5f6020820190508181035f83015261470e816146d5565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61476f602483613fd5565b915061477a82614715565b604082019050919050565b5f6020820190508181035f83015261479c81614763565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6147fd603583613fd5565b9150614808826147a3565b604082019050919050565b5f6020820190508181035f83015261482a816147f1565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f61488b603483613fd5565b915061489682614831565b604082019050919050565b5f6020820190508181035f8301526148b88161487f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614919602683613fd5565b9150614924826148bf565b604082019050919050565b5f6020820190508181035f8301526149468161490d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6149a7602483613fd5565b91506149b28261494d565b604082019050919050565b5f6020820190508181035f8301526149d48161499b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a35602283613fd5565b9150614a40826149db565b604082019050919050565b5f6020820190508181035f830152614a6281614a29565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614ac3602583613fd5565b9150614ace82614a69565b604082019050919050565b5f6020820190508181035f830152614af081614ab7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614b51602383613fd5565b9150614b5c82614af7565b604082019050919050565b5f6020820190508181035f830152614b7e81614b45565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d20745f8201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b5f614bdf603183613fd5565b9150614bea82614b85565b604082019050919050565b5f6020820190508181035f830152614c0c81614bd3565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614c47601683613fd5565b9150614c5282614c13565b602082019050919050565b5f6020820190508181035f830152614c7481614c3b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614cfb604983613fd5565b9150614d0682614c7b565b606082019050919050565b5f6020820190508181035f830152614d2881614cef565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614d89603583613fd5565b9150614d9482614d2f565b604082019050919050565b5f6020820190508181035f830152614db681614d7d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614df1601383613fd5565b9150614dfc82614dbd565b602082019050919050565b5f6020820190508181035f830152614e1e81614de5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614e7f603683613fd5565b9150614e8a82614e25565b604082019050919050565b5f6020820190508181035f830152614eac81614e73565b9050919050565b5f614ebd826140d3565b9150614ec8836140d3565b9250828203905081811115614ee057614edf6144fb565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614f1a601b83613fd5565b9150614f2582614ee6565b602082019050919050565b5f6020820190508181035f830152614f4781614f0e565b9050919050565b5f81905092915050565b50565b5f614f665f83614f4e565b9150614f7182614f58565b5f82019050919050565b5f614f8582614f5b565b9150819050919050565b5f606082019050614fa25f830186614216565b614faf6020830185614216565b614fbc6040830184614216565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61501e602183613fd5565b915061502982614fc4565b604082019050919050565b5f6020820190508181035f83015261504b81615012565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506150ba816140a9565b92915050565b5f602082840312156150d5576150d4614075565b5b5f6150e2848285016150ac565b91505092915050565b5f819050919050565b5f61510e615109615104846150eb565b6141a2565b6140d3565b9050919050565b61511e816150f4565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61515681614098565b82525050565b5f615167838361514d565b60208301905092915050565b5f602082019050919050565b5f61518982615124565b615193818561512e565b935061519e8361513e565b805f5b838110156151ce5781516151b5888261515c565b97506151c083615173565b9250506001810190506151a1565b5085935050505092915050565b5f60a0820190506151ee5f830188614216565b6151fb6020830187615115565b818103604083015261520d818661517f565b905061521c606083018561433d565b6152296080830184614216565b9695505050505050565b5f60c0820190506152465f83018961433d565b6152536020830188614216565b6152606040830187615115565b61526d6060830186615115565b61527a608083018561433d565b61528760a0830184614216565b979650505050505050565b5f815190506152a0816140dc565b92915050565b5f805f606084860312156152bd576152bc614075565b5b5f6152ca86828701615292565b93505060206152db86828701615292565b92505060406152ec86828701615292565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122015c95b20d3438a07b24f4002a5c870b85d497a4a1840dd905b747fdc7f4bbd8964736f6c63430008150033
Deployed Bytecode Sourcemap
29921:15568:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8019:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10193:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31459:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30001:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9142:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38326:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31174:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35743:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10845:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8983:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36362:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11610:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30059:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30330:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38495:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30988:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30410:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9314:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22521:148;;;;;;;;;;;;;:::i;:::-;;36210:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30138:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30880:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37523:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21877:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30176:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31023:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37222:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8239:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37657:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30954:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34963:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31214:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31099:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12332:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9655:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38109:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31682:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30370:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34768:142;;;;;;;;;;;;;:::i;:::-;;37332:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35986:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30211:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35348:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30846:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9894:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31400:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30254:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35142:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30917:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22825:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36743:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31061:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30295:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8019:100;8073:13;8106:5;8099:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8019:100;:::o;10193:169::-;10276:4;10293:39;10302:12;:10;:12::i;:::-;10316:7;10325:6;10293:8;:39::i;:::-;10350:4;10343:11;;10193:169;;;;:::o;31459:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;30001:51::-;;;:::o;9142:108::-;9203:7;9230:12;;9223:19;;9142:108;:::o;38326:157::-;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38433:9:::1;;;;;;;;;;;38405:38;;38422:9;38405:38;;;;;;;;;;;;38466:9;38454;;:21;;;;;;;;;;;;;;;;;;38326:157:::0;:::o;31174:33::-;;;;:::o;31134:::-;;;;:::o;35743:234::-;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35862:4:::1;35856;35852:1;35836:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35835:31;;;;:::i;:::-;35825:6;:41;;35817:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35962:6;35952;:17;;;;:::i;:::-;35929:20;:40;;;;35743:234:::0;:::o;10845:355::-;10985:4;11002:36;11012:6;11020:9;11031:6;11002:9;:36::i;:::-;11049:121;11058:6;11066:12;:10;:12::i;:::-;11080:89;11118:6;11080:89;;;;;;;;;;;;;;;;;:11;:19;11092:6;11080:19;;;;;;;;;;;;;;;:33;11100:12;:10;:12::i;:::-;11080:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11049:8;:121::i;:::-;11188:4;11181:11;;10845:355;;;;;:::o;8983:93::-;9041:5;9066:2;9059:9;;8983:93;:::o;36362:373::-;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36526:7:::1;36514:9;:19;;;;36562:13;36544:15;:31;;;;36604:13;36586:15;:31;;;;36673:15;;36655;;36643:9;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;36628:12;:60;;;;36723:3;36707:12;;:19;;36699:28;;;::::0;::::1;;36362:373:::0;;;:::o;11610:218::-;11698:4;11715:83;11724:12;:10;:12::i;:::-;11738:7;11747:50;11786:10;11747:11;:25;11759:12;:10;:12::i;:::-;11747:25;;;;;;;;;;;;;;;:34;11773:7;11747:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11715:8;:83::i;:::-;11816:4;11809:11;;11610:218;;;;:::o;30059:38::-;;;:::o;30330:33::-;;;;;;;;;;;;;:::o;38495:125::-;38560:4;38584:19;:28;38604:7;38584:28;;;;;;;;;;;;;;;;;;;;;;;;;38577:35;;38495:125;;;:::o;30988:28::-;;;;:::o;30410:31::-;;;;;;;;;;;;;:::o;9314:127::-;9388:7;9415:9;:18;9425:7;9415:18;;;;;;;;;;;;;;;;9408:25;;9314:127;;;:::o;22521:148::-;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22628:1:::1;22591:40;;22612:6;;;;;;;;;;;22591:40;;;;;;;;;;;;22659:1;22642:6;;:19;;;;;;;;;;;;;;;;;;22521:148::o:0;36210:144::-;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36342:4:::1;36300:31;:39;36332:6;36300:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36210:144:::0;;:::o;30138:31::-;;;;;;;;;;;;;:::o;30880:30::-;;;;:::o;37523:125::-;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37627:13:::1;37605:10;:19;37616:7;37605:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37523:125:::0;;:::o;21877:79::-;21915:7;21942:6;;;;;;;;;;;21935:13;;21877:79;:::o;30176:25::-;;;;;;;;;;;;;:::o;31023:31::-;;;;:::o;37222:101::-;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37308:7:::1;37294:11;;:21;;;;;;;;;;;;;;;;;;37222:101:::0;:::o;8239:104::-;8295:13;8328:7;8321:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8239:104;:::o;37657:245::-;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37764:13:::1;37756:21;;:4;:21;;::::0;37748:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37853:41;37882:4;37888:5;37853:28;:41::i;:::-;37657:245:::0;;:::o;30954:24::-;;;;:::o;34963:117::-;35012:4;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35045:5:::1;35028:14;;:22;;;;;;;;;;;;;;;;;;35068:4;35061:11;;34963:117:::0;:::o;31214:27::-;;;;:::o;31099:25::-;;;;:::o;12332:269::-;12425:4;12442:129;12451:12;:10;:12::i;:::-;12465:7;12474:96;12513:15;12474:96;;;;;;;;;;;;;;;;;:11;:25;12486:12;:10;:12::i;:::-;12474:25;;;;;;;;;;;;;;;:34;12500:7;12474:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12442:8;:129::i;:::-;12589:4;12582:11;;12332:269;;;;:::o;9655:175::-;9741:4;9758:42;9768:12;:10;:12::i;:::-;9782:9;9793:6;9758:9;:42::i;:::-;9818:4;9811:11;;9655:175;;;;:::o;38109:208::-;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38246:15:::1;;;;;;;;;;;38203:59;;38226:18;38203:59;;;;;;;;;;;;38291:18;38273:15;;:36;;;;;;;;;;;;;;;;;;38109:208:::0;:::o;31682:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30370:33::-;;;;;;;;;;;;;:::o;34768:142::-;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34833:4:::1;34817:13;;:20;;;;;;;;;;;;;;;;;;34862:4;34848:11;;:18;;;;;;;;;;;;;;;;;;34890:12;34877:10;:25;;;;34768:142::o:0;37332:182::-;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37448:8:::1;37417:19;:28;37437:7;37417:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37488:7;37472:34;;;37497:8;37472:34;;;;;;:::i;:::-;;;;;;;;37332:182:::0;;:::o;35986:215::-;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36108:4:::1;36102;36098:1;36082:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36081:31;;;;:::i;:::-;36071:6;:41;;36063:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36186:6;36176;:17;;;;:::i;:::-;36164:9;:29;;;;35986:215:::0;:::o;30211:36::-;;;;:::o;35348:386::-;35429:4;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35486:6:::1;35482:1;35466:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35453:9;:39;;35445:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35602:4;35598:1;35582:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35569:9;:37;;35561:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35695:9;35674:18;:30;;;;35722:4;35715:11;;35348:386:::0;;;:::o;30846:27::-;;;;:::o;9894:151::-;9983:7;10010:11;:18;10022:5;10010:18;;;;;;;;;;;;;;;:27;10029:7;10010:27;;;;;;;;;;;;;;;;10003:34;;9894:151;;;;:::o;31400:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;30254:34::-;;;;:::o;35142:134::-;35202:4;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35241:5:::1;35218:20;;:28;;;;;;;;;;;;;;;;;;35264:4;35257:11;;35142:134:::0;:::o;30917:30::-;;;;:::o;22825:244::-;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22934:1:::1;22914:22;;:8;:22;;::::0;22906:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23024:8;22995:38;;23016:6;;;;;;;;;;;22995:38;;;;;;;;;;;;23053:8;23044:6;;:17;;;;;;;;;;;;;;;;;;22825:244:::0;:::o;36743:382::-;22100:12;:10;:12::i;:::-;22090:22;;:6;;;;;;;;;;;:22;;;22082:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36909:7:::1;36896:10;:20;;;;36946:13;36927:16;:32;;;;36989:13;36970:16;:32;;;;37061:16;;37042;;37029:10;;:29;;;;:::i;:::-;:48;;;;:::i;:::-;37013:13;:64;;;;37113:3;37096:13;;:20;;37088:29;;;::::0;::::1;;36743:382:::0;;;:::o;31061:31::-;;;;:::o;30295:25::-;;;;:::o;710:98::-;763:7;790:10;783:17;;710:98;:::o;15528:381::-;15681:1;15664:19;;:5;:19;;;15656:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15762:1;15743:21;;:7;:21;;;15735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15847:6;15817:11;:18;15829:5;15817:18;;;;;;;;;;;;;;;:27;15836:7;15817:27;;;;;;;;;;;;;;;:36;;;;15885:7;15869:32;;15878:5;15869:32;;;15894:6;15869:32;;;;;;:::i;:::-;;;;;;;;15528:381;;;:::o;38629:4145::-;38777:1;38761:18;;:4;:18;;;38753:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38854:1;38840:16;;:2;:16;;;38832:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38916:10;:14;38927:2;38916:14;;;;;;;;;;;;;;;;;;;;;;;;;38915:15;:36;;;;;38935:10;:16;38946:4;38935:16;;;;;;;;;;;;;;;;;;;;;;;;;38934:17;38915:36;38907:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39030:1;39020:6;:11;39017:92;;39048:28;39064:4;39070:2;39074:1;39048:15;:28::i;:::-;39091:7;;39017:92;39125:14;;;;;;;;;;;39122:1811;;;39185:7;:5;:7::i;:::-;39177:15;;:4;:15;;;;:49;;;;;39219:7;:5;:7::i;:::-;39213:13;;:2;:13;;;;39177:49;:86;;;;;39261:1;39247:16;;:2;:16;;;;39177:86;:128;;;;;39298:6;39284:21;;:2;:21;;;;39177:128;:158;;;;;39327:8;;;;;;;;;;;39326:9;39177:158;39155:1767;;;39373:13;;;;;;;;;;;39369:148;;39418:19;:25;39438:4;39418:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39447:19;:23;39467:2;39447:23;;;;;;;;;;;;;;;;;;;;;;;;;39418:52;39410:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39369:148;39676:20;;;;;;;;;;;39672:423;;;39730:7;:5;:7::i;:::-;39724:13;;:2;:13;;;;:47;;;;;39755:15;39741:30;;:2;:30;;;;39724:47;:79;;;;;39789:13;39775:28;;:2;:28;;;;39724:79;39720:356;;;39881:12;39839:28;:39;39868:9;39839:39;;;;;;;;;;;;;;;;:54;39831:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40040:12;39998:28;:39;40027:9;39998:39;;;;;;;;;;;;;;;:54;;;;39720:356;39672:423;40148:25;:31;40174:4;40148:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40184:31;:35;40216:2;40184:35;;;;;;;;;;;;;;;;;;;;;;;;;40183:36;40148:71;40144:763;;;40266:20;;40256:6;:30;;40248:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40405:9;;40388:13;40398:2;40388:9;:13::i;:::-;40379:6;:22;;;;:::i;:::-;:35;;40371:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40144:763;;;40517:25;:29;40543:2;40517:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40551:31;:37;40583:4;40551:37;;;;;;;;;;;;;;;;;;;;;;;;;40550:38;40517:71;40513:394;;;40635:20;;40625:6;:30;;40617:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40513:394;;;40761:31;:35;40793:2;40761:35;;;;;;;;;;;;;;;;;;;;;;;;;40757:150;;40854:9;;40837:13;40847:2;40837:9;:13::i;:::-;40828:6;:22;;;;:::i;:::-;:35;;40820:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40757:150;40513:394;40144:763;39155:1767;39122:1811;40946:28;40977:24;40995:4;40977:9;:24::i;:::-;40946:55;;41015:12;41054:18;;41030:20;:42;;41015:57;;41104:7;:35;;;;;41128:11;;;;;;;;;;;41104:35;:61;;;;;41157:8;;;;;;;;;;;41156:9;41104:61;:110;;;;;41183:25;:31;41209:4;41183:31;;;;;;;;;;;;;;;;;;;;;;;;;41182:32;41104:110;:153;;;;;41232:19;:25;41252:4;41232:25;;;;;;;;;;;;;;;;;;;;;;;;;41231:26;41104:153;:194;;;;;41275:19;:23;41295:2;41275:23;;;;;;;;;;;;;;;;;;;;;;;;;41274:24;41104:194;41086:328;;;41336:4;41325:8;;:15;;;;;;;;;;;;;;;;;;41358:10;:8;:10::i;:::-;41397:5;41386:8;;:16;;;;;;;;;;;;;;;;;;41086:328;41427:12;41443:8;;;;;;;;;;;41442:9;41427:24;;41553:19;:25;41573:4;41553:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41582:19;:23;41602:2;41582:23;;;;;;;;;;;;;;;;;;;;;;;;;41553:52;41550:99;;;41632:5;41622:15;;41550:99;41662:12;41766:7;41763:957;;;41817:25;:29;41843:2;41817:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41866:1;41850:13;;:17;41817:50;41813:754;;;41894:34;41924:3;41894:25;41905:13;;41894:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41887:41;;41995:13;;41976:16;;41969:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41947:18;;:61;;;;;;;:::i;:::-;;;;;;;;42063:13;;42050:10;;42043:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;42027:12;;:49;;;;;;;:::i;:::-;;;;;;;;42143:13;;42124:16;;42117:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42095:18;;:61;;;;;;;:::i;:::-;;;;;;;;41813:754;;;42217:25;:31;42243:4;42217:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42267:1;42252:12;;:16;42217:51;42214:353;;;42296:33;42325:3;42296:24;42307:12;;42296:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42289:40;;42395:12;;42377:15;;42370:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42348:18;;:59;;;;;;;:::i;:::-;;;;;;;;42461:12;;42449:9;;42442:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;42426:12;;:47;;;;;;;:::i;:::-;;;;;;;;42539:12;;42521:15;;42514:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42492:18;;:59;;;;;;;:::i;:::-;;;;;;;;42214:353;41813:754;42594:1;42587:4;:8;42584:93;;;42619:42;42635:4;42649;42656;42619:15;:42::i;:::-;42584:93;42704:4;42694:14;;;;;:::i;:::-;;;41763:957;42733:33;42749:4;42755:2;42759:6;42733:15;:33::i;:::-;38742:4032;;;;38629:4145;;;;:::o;17815:193::-;17901:7;17934:1;17929;:6;;17937:12;17921:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17961:9;17977:1;17973;:5;;;;:::i;:::-;17961:17;;17999:1;17992:8;;;17815:193;;;;;:::o;16909:182::-;16967:7;16987:9;17003:1;16999;:5;;;;:::i;:::-;16987:17;;17028:1;17023;:6;;17015:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17082:1;17075:8;;;16909:182;;;;:::o;37911:189::-;38028:5;37994:25;:31;38020:4;37994:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38086:5;38052:40;;38080:4;38052:40;;;;;;;;;;;;37911:189;;:::o;13092:575::-;13250:1;13232:20;;:6;:20;;;13224:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13334:1;13313:23;;:9;:23;;;13305:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13390:47;13411:6;13419:9;13430:6;13390:20;:47::i;:::-;13471:71;13493:6;13471:71;;;;;;;;;;;;;;;;;:9;:17;13481:6;13471:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13451:9;:17;13461:6;13451:17;;;;;;;;;;;;;;;:91;;;;13576:32;13601:6;13576:9;:20;13586:9;13576:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13553:9;:20;13563:9;13553:20;;;;;;;;;;;;;;;:55;;;;13641:9;13624:35;;13633:6;13624:35;;;13652:6;13624:35;;;;;;:::i;:::-;;;;;;;;13092:575;;;:::o;43918:1568::-;43957:23;43983:24;44001:4;43983:9;:24::i;:::-;43957:50;;44018:25;44088:12;;44067:18;;44046;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;44018:82;;44111:12;44159:1;44140:15;:20;:46;;;;44185:1;44164:17;:22;44140:46;44137:60;;;44189:7;;;;;44137:60;44252:2;44231:18;;:23;;;;:::i;:::-;44213:15;:41;44210:111;;;44307:2;44286:18;;:23;;;;:::i;:::-;44268:41;;44210:111;44383:23;44468:1;44448:17;44427:18;;44409:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44383:86;;44480:26;44509:36;44529:15;44509;:19;;:36;;;;:::i;:::-;44480:65;;44559:25;44587:21;44559:49;;44622:36;44639:18;44622:16;:36::i;:::-;44673:18;44694:44;44720:17;44694:21;:25;;:44;;;;:::i;:::-;44673:65;;44752:23;44778:57;44817:17;44778:34;44793:18;;44778:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44752:83;;44846:17;44866:51;44899:17;44866:28;44881:12;;44866:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44846:71;;44928:23;44985:9;44967:15;44954:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;44928:66;;45032:1;45011:18;:22;;;;45065:1;45044:18;:22;;;;45092:1;45077:12;:16;;;;45128:9;;;;;;;;;;;45120:23;;45151:9;45120:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45107:58;;;;;45200:1;45182:15;:19;:42;;;;;45223:1;45205:15;:19;45182:42;45179:210;;;45240:46;45253:15;45270;45240:12;:46::i;:::-;45306:71;45321:18;45341:15;45358:18;;45306:71;;;;;;;;:::i;:::-;;;;;;;;45179:210;45423:15;;;;;;;;;;;45415:29;;45452:21;45415:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45402:76;;;;;43946:1540;;;;;;;;;;43918:1568;:::o;18268:473::-;18326:7;18576:1;18571;:6;18567:47;;18601:1;18594:8;;;;18567:47;18627:9;18643:1;18639;:5;;;;:::i;:::-;18627:17;;18672:1;18667;18663;:5;;;;:::i;:::-;:10;18655:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18732:1;18725:8;;;18268:473;;;;;:::o;19218:132::-;19276:7;19303:39;19307:1;19310;19303:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19296:46;;19218:132;;;;:::o;16513:125::-;;;;:::o;17375:136::-;17433:7;17460:43;17464:1;17467;17460:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17453:50;;17375:136;;;;:::o;42783:597::-;42912:21;42950:1;42936:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42912:40;;42981:4;42963;42968:1;42963:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43007:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42997:4;43002:1;42997:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43043:62;43060:4;43075:15;43093:11;43043:8;:62::i;:::-;43145:15;:66;;;43226:11;43252:1;43296:4;43323;43343:15;43145:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42838:542;42783:597;:::o;43389:520::-;43537:62;43554:4;43569:15;43587:11;43537:8;:62::i;:::-;43643:15;:31;;;43682:9;43715:4;43735:11;43761:1;43804;43855:4;43875:15;43643:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43389:520;;:::o;19847:279::-;19933:7;19965:1;19961;:5;19968:12;19953:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19992:9;20008:1;20004;:5;;;;:::i;:::-;19992:17;;20117:1;20110:8;;;19847:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:86::-;6106:7;6146:4;6139:5;6135:16;6124:27;;6071:86;;;:::o;6163:112::-;6246:22;6262:5;6246:22;:::i;:::-;6241:3;6234:35;6163:112;;:::o;6281:214::-;6370:4;6408:2;6397:9;6393:18;6385:26;;6421:67;6485:1;6474:9;6470:17;6461:6;6421:67;:::i;:::-;6281:214;;;;:::o;6501:619::-;6578:6;6586;6594;6643:2;6631:9;6622:7;6618:23;6614:32;6611:119;;;6649:79;;:::i;:::-;6611:119;6769:1;6794:53;6839:7;6830:6;6819:9;6815:22;6794:53;:::i;:::-;6784:63;;6740:117;6896:2;6922:53;6967:7;6958:6;6947:9;6943:22;6922:53;:::i;:::-;6912:63;;6867:118;7024:2;7050:53;7095:7;7086:6;7075:9;7071:22;7050:53;:::i;:::-;7040:63;;6995:118;6501:619;;;;;:::o;7126:118::-;7213:24;7231:5;7213:24;:::i;:::-;7208:3;7201:37;7126:118;;:::o;7250:222::-;7343:4;7381:2;7370:9;7366:18;7358:26;;7394:71;7462:1;7451:9;7447:17;7438:6;7394:71;:::i;:::-;7250:222;;;;:::o;7478:116::-;7548:21;7563:5;7548:21;:::i;:::-;7541:5;7538:32;7528:60;;7584:1;7581;7574:12;7528:60;7478:116;:::o;7600:133::-;7643:5;7681:6;7668:20;7659:29;;7697:30;7721:5;7697:30;:::i;:::-;7600:133;;;;:::o;7739:468::-;7804:6;7812;7861:2;7849:9;7840:7;7836:23;7832:32;7829:119;;;7867:79;;:::i;:::-;7829:119;7987:1;8012:53;8057:7;8048:6;8037:9;8033:22;8012:53;:::i;:::-;8002:63;;7958:117;8114:2;8140:50;8182:7;8173:6;8162:9;8158:22;8140:50;:::i;:::-;8130:60;;8085:115;7739:468;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:180::-;10567:77;10564:1;10557:88;10664:4;10661:1;10654:15;10688:4;10685:1;10678:15;10705:410;10745:7;10768:20;10786:1;10768:20;:::i;:::-;10763:25;;10802:20;10820:1;10802:20;:::i;:::-;10797:25;;10857:1;10854;10850:9;10879:30;10897:11;10879:30;:::i;:::-;10868:41;;11058:1;11049:7;11045:15;11042:1;11039:22;11019:1;11012:9;10992:83;10969:139;;11088:18;;:::i;:::-;10969:139;10753:362;10705:410;;;;:::o;11121:180::-;11169:77;11166:1;11159:88;11266:4;11263:1;11256:15;11290:4;11287:1;11280:15;11307:185;11347:1;11364:20;11382:1;11364:20;:::i;:::-;11359:25;;11398:20;11416:1;11398:20;:::i;:::-;11393:25;;11437:1;11427:35;;11442:18;;:::i;:::-;11427:35;11484:1;11481;11477:9;11472:14;;11307:185;;;;:::o;11498:234::-;11638:34;11634:1;11626:6;11622:14;11615:58;11707:17;11702:2;11694:6;11690:15;11683:42;11498:234;:::o;11738:366::-;11880:3;11901:67;11965:2;11960:3;11901:67;:::i;:::-;11894:74;;11977:93;12066:3;11977:93;:::i;:::-;12095:2;12090:3;12086:12;12079:19;;11738:366;;;:::o;12110:419::-;12276:4;12314:2;12303:9;12299:18;12291:26;;12363:9;12357:4;12353:20;12349:1;12338:9;12334:17;12327:47;12391:131;12517:4;12391:131;:::i;:::-;12383:139;;12110:419;;;:::o;12535:191::-;12575:3;12594:20;12612:1;12594:20;:::i;:::-;12589:25;;12628:20;12646:1;12628:20;:::i;:::-;12623:25;;12671:1;12668;12664:9;12657:16;;12692:3;12689:1;12686:10;12683:36;;;12699:18;;:::i;:::-;12683:36;12535:191;;;;:::o;12732:244::-;12872:34;12868:1;12860:6;12856:14;12849:58;12941:27;12936:2;12928:6;12924:15;12917:52;12732:244;:::o;12982:366::-;13124:3;13145:67;13209:2;13204:3;13145:67;:::i;:::-;13138:74;;13221:93;13310:3;13221:93;:::i;:::-;13339:2;13334:3;13330:12;13323:19;;12982:366;;;:::o;13354:419::-;13520:4;13558:2;13547:9;13543:18;13535:26;;13607:9;13601:4;13597:20;13593:1;13582:9;13578:17;13571:47;13635:131;13761:4;13635:131;:::i;:::-;13627:139;;13354:419;;;:::o;13779:223::-;13919:34;13915:1;13907:6;13903:14;13896:58;13988:6;13983:2;13975:6;13971:15;13964:31;13779:223;:::o;14008:366::-;14150:3;14171:67;14235:2;14230:3;14171:67;:::i;:::-;14164:74;;14247:93;14336:3;14247:93;:::i;:::-;14365:2;14360:3;14356:12;14349:19;;14008:366;;;:::o;14380:419::-;14546:4;14584:2;14573:9;14569:18;14561:26;;14633:9;14627:4;14623:20;14619:1;14608:9;14604:17;14597:47;14661:131;14787:4;14661:131;:::i;:::-;14653:139;;14380:419;;;:::o;14805:240::-;14945:34;14941:1;14933:6;14929:14;14922:58;15014:23;15009:2;15001:6;14997:15;14990:48;14805:240;:::o;15051:366::-;15193:3;15214:67;15278:2;15273:3;15214:67;:::i;:::-;15207:74;;15290:93;15379:3;15290:93;:::i;:::-;15408:2;15403:3;15399:12;15392:19;;15051:366;;;:::o;15423:419::-;15589:4;15627:2;15616:9;15612:18;15604:26;;15676:9;15670:4;15666:20;15662:1;15651:9;15647:17;15640:47;15704:131;15830:4;15704:131;:::i;:::-;15696:139;;15423:419;;;:::o;15848:239::-;15988:34;15984:1;15976:6;15972:14;15965:58;16057:22;16052:2;16044:6;16040:15;16033:47;15848:239;:::o;16093:366::-;16235:3;16256:67;16320:2;16315:3;16256:67;:::i;:::-;16249:74;;16332:93;16421:3;16332:93;:::i;:::-;16450:2;16445:3;16441:12;16434:19;;16093:366;;;:::o;16465:419::-;16631:4;16669:2;16658:9;16654:18;16646:26;;16718:9;16712:4;16708:20;16704:1;16693:9;16689:17;16682:47;16746:131;16872:4;16746:131;:::i;:::-;16738:139;;16465:419;;;:::o;16890:225::-;17030:34;17026:1;17018:6;17014:14;17007:58;17099:8;17094:2;17086:6;17082:15;17075:33;16890:225;:::o;17121:366::-;17263:3;17284:67;17348:2;17343:3;17284:67;:::i;:::-;17277:74;;17360:93;17449:3;17360:93;:::i;:::-;17478:2;17473:3;17469:12;17462:19;;17121:366;;;:::o;17493:419::-;17659:4;17697:2;17686:9;17682:18;17674:26;;17746:9;17740:4;17736:20;17732:1;17721:9;17717:17;17710:47;17774:131;17900:4;17774:131;:::i;:::-;17766:139;;17493:419;;;:::o;17918:223::-;18058:34;18054:1;18046:6;18042:14;18035:58;18127:6;18122:2;18114:6;18110:15;18103:31;17918:223;:::o;18147:366::-;18289:3;18310:67;18374:2;18369:3;18310:67;:::i;:::-;18303:74;;18386:93;18475:3;18386:93;:::i;:::-;18504:2;18499:3;18495:12;18488:19;;18147:366;;;:::o;18519:419::-;18685:4;18723:2;18712:9;18708:18;18700:26;;18772:9;18766:4;18762:20;18758:1;18747:9;18743:17;18736:47;18800:131;18926:4;18800:131;:::i;:::-;18792:139;;18519:419;;;:::o;18944:221::-;19084:34;19080:1;19072:6;19068:14;19061:58;19153:4;19148:2;19140:6;19136:15;19129:29;18944:221;:::o;19171:366::-;19313:3;19334:67;19398:2;19393:3;19334:67;:::i;:::-;19327:74;;19410:93;19499:3;19410:93;:::i;:::-;19528:2;19523:3;19519:12;19512:19;;19171:366;;;:::o;19543:419::-;19709:4;19747:2;19736:9;19732:18;19724:26;;19796:9;19790:4;19786:20;19782:1;19771:9;19767:17;19760:47;19824:131;19950:4;19824:131;:::i;:::-;19816:139;;19543:419;;;:::o;19968:224::-;20108:34;20104:1;20096:6;20092:14;20085:58;20177:7;20172:2;20164:6;20160:15;20153:32;19968:224;:::o;20198:366::-;20340:3;20361:67;20425:2;20420:3;20361:67;:::i;:::-;20354:74;;20437:93;20526:3;20437:93;:::i;:::-;20555:2;20550:3;20546:12;20539:19;;20198:366;;;:::o;20570:419::-;20736:4;20774:2;20763:9;20759:18;20751:26;;20823:9;20817:4;20813:20;20809:1;20798:9;20794:17;20787:47;20851:131;20977:4;20851:131;:::i;:::-;20843:139;;20570:419;;;:::o;20995:222::-;21135:34;21131:1;21123:6;21119:14;21112:58;21204:5;21199:2;21191:6;21187:15;21180:30;20995:222;:::o;21223:366::-;21365:3;21386:67;21450:2;21445:3;21386:67;:::i;:::-;21379:74;;21462:93;21551:3;21462:93;:::i;:::-;21580:2;21575:3;21571:12;21564:19;;21223:366;;;:::o;21595:419::-;21761:4;21799:2;21788:9;21784:18;21776:26;;21848:9;21842:4;21838:20;21834:1;21823:9;21819:17;21812:47;21876:131;22002:4;21876:131;:::i;:::-;21868:139;;21595:419;;;:::o;22020:236::-;22160:34;22156:1;22148:6;22144:14;22137:58;22229:19;22224:2;22216:6;22212:15;22205:44;22020:236;:::o;22262:366::-;22404:3;22425:67;22489:2;22484:3;22425:67;:::i;:::-;22418:74;;22501:93;22590:3;22501:93;:::i;:::-;22619:2;22614:3;22610:12;22603:19;;22262:366;;;:::o;22634:419::-;22800:4;22838:2;22827:9;22823:18;22815:26;;22887:9;22881:4;22877:20;22873:1;22862:9;22858:17;22851:47;22915:131;23041:4;22915:131;:::i;:::-;22907:139;;22634:419;;;:::o;23059:172::-;23199:24;23195:1;23187:6;23183:14;23176:48;23059:172;:::o;23237:366::-;23379:3;23400:67;23464:2;23459:3;23400:67;:::i;:::-;23393:74;;23476:93;23565:3;23476:93;:::i;:::-;23594:2;23589:3;23585:12;23578:19;;23237:366;;;:::o;23609:419::-;23775:4;23813:2;23802:9;23798:18;23790:26;;23862:9;23856:4;23852:20;23848:1;23837:9;23833:17;23826:47;23890:131;24016:4;23890:131;:::i;:::-;23882:139;;23609:419;;;:::o;24034:297::-;24174:34;24170:1;24162:6;24158:14;24151:58;24243:34;24238:2;24230:6;24226:15;24219:59;24312:11;24307:2;24299:6;24295:15;24288:36;24034:297;:::o;24337:366::-;24479:3;24500:67;24564:2;24559:3;24500:67;:::i;:::-;24493:74;;24576:93;24665:3;24576:93;:::i;:::-;24694:2;24689:3;24685:12;24678:19;;24337:366;;;:::o;24709:419::-;24875:4;24913:2;24902:9;24898:18;24890:26;;24962:9;24956:4;24952:20;24948:1;24937:9;24933:17;24926:47;24990:131;25116:4;24990:131;:::i;:::-;24982:139;;24709:419;;;:::o;25134:240::-;25274:34;25270:1;25262:6;25258:14;25251:58;25343:23;25338:2;25330:6;25326:15;25319:48;25134:240;:::o;25380:366::-;25522:3;25543:67;25607:2;25602:3;25543:67;:::i;:::-;25536:74;;25619:93;25708:3;25619:93;:::i;:::-;25737:2;25732:3;25728:12;25721:19;;25380:366;;;:::o;25752:419::-;25918:4;25956:2;25945:9;25941:18;25933:26;;26005:9;25999:4;25995:20;25991:1;25980:9;25976:17;25969:47;26033:131;26159:4;26033:131;:::i;:::-;26025:139;;25752:419;;;:::o;26177:169::-;26317:21;26313:1;26305:6;26301:14;26294:45;26177:169;:::o;26352:366::-;26494:3;26515:67;26579:2;26574:3;26515:67;:::i;:::-;26508:74;;26591:93;26680:3;26591:93;:::i;:::-;26709:2;26704:3;26700:12;26693:19;;26352:366;;;:::o;26724:419::-;26890:4;26928:2;26917:9;26913:18;26905:26;;26977:9;26971:4;26967:20;26963:1;26952:9;26948:17;26941:47;27005:131;27131:4;27005:131;:::i;:::-;26997:139;;26724:419;;;:::o;27149:241::-;27289:34;27285:1;27277:6;27273:14;27266:58;27358:24;27353:2;27345:6;27341:15;27334:49;27149:241;:::o;27396:366::-;27538:3;27559:67;27623:2;27618:3;27559:67;:::i;:::-;27552:74;;27635:93;27724:3;27635:93;:::i;:::-;27753:2;27748:3;27744:12;27737:19;;27396:366;;;:::o;27768:419::-;27934:4;27972:2;27961:9;27957:18;27949:26;;28021:9;28015:4;28011:20;28007:1;27996:9;27992:17;27985:47;28049:131;28175:4;28049:131;:::i;:::-;28041:139;;27768:419;;;:::o;28193:194::-;28233:4;28253:20;28271:1;28253:20;:::i;:::-;28248:25;;28287:20;28305:1;28287:20;:::i;:::-;28282:25;;28331:1;28328;28324:9;28316:17;;28355:1;28349:4;28346:11;28343:37;;;28360:18;;:::i;:::-;28343:37;28193:194;;;;:::o;28393:177::-;28533:29;28529:1;28521:6;28517:14;28510:53;28393:177;:::o;28576:366::-;28718:3;28739:67;28803:2;28798:3;28739:67;:::i;:::-;28732:74;;28815:93;28904:3;28815:93;:::i;:::-;28933:2;28928:3;28924:12;28917:19;;28576:366;;;:::o;28948:419::-;29114:4;29152:2;29141:9;29137:18;29129:26;;29201:9;29195:4;29191:20;29187:1;29176:9;29172:17;29165:47;29229:131;29355:4;29229:131;:::i;:::-;29221:139;;28948:419;;;:::o;29373:147::-;29474:11;29511:3;29496:18;;29373:147;;;;:::o;29526:114::-;;:::o;29646:398::-;29805:3;29826:83;29907:1;29902:3;29826:83;:::i;:::-;29819:90;;29918:93;30007:3;29918:93;:::i;:::-;30036:1;30031:3;30027:11;30020:18;;29646:398;;;:::o;30050:379::-;30234:3;30256:147;30399:3;30256:147;:::i;:::-;30249:154;;30420:3;30413:10;;30050:379;;;:::o;30435:442::-;30584:4;30622:2;30611:9;30607:18;30599:26;;30635:71;30703:1;30692:9;30688:17;30679:6;30635:71;:::i;:::-;30716:72;30784:2;30773:9;30769:18;30760:6;30716:72;:::i;:::-;30798;30866:2;30855:9;30851:18;30842:6;30798:72;:::i;:::-;30435:442;;;;;;:::o;30883:220::-;31023:34;31019:1;31011:6;31007:14;31000:58;31092:3;31087:2;31079:6;31075:15;31068:28;30883:220;:::o;31109:366::-;31251:3;31272:67;31336:2;31331:3;31272:67;:::i;:::-;31265:74;;31348:93;31437:3;31348:93;:::i;:::-;31466:2;31461:3;31457:12;31450:19;;31109:366;;;:::o;31481:419::-;31647:4;31685:2;31674:9;31670:18;31662:26;;31734:9;31728:4;31724:20;31720:1;31709:9;31705:17;31698:47;31762:131;31888:4;31762:131;:::i;:::-;31754:139;;31481:419;;;:::o;31906:180::-;31954:77;31951:1;31944:88;32051:4;32048:1;32041:15;32075:4;32072:1;32065:15;32092:180;32140:77;32137:1;32130:88;32237:4;32234:1;32227:15;32261:4;32258:1;32251:15;32278:143;32335:5;32366:6;32360:13;32351:22;;32382:33;32409:5;32382:33;:::i;:::-;32278:143;;;;:::o;32427:351::-;32497:6;32546:2;32534:9;32525:7;32521:23;32517:32;32514:119;;;32552:79;;:::i;:::-;32514:119;32672:1;32697:64;32753:7;32744:6;32733:9;32729:22;32697:64;:::i;:::-;32687:74;;32643:128;32427:351;;;;:::o;32784:85::-;32829:7;32858:5;32847:16;;32784:85;;;:::o;32875:158::-;32933:9;32966:61;32984:42;32993:32;33019:5;32993:32;:::i;:::-;32984:42;:::i;:::-;32966:61;:::i;:::-;32953:74;;32875:158;;;:::o;33039:147::-;33134:45;33173:5;33134:45;:::i;:::-;33129:3;33122:58;33039:147;;:::o;33192:114::-;33259:6;33293:5;33287:12;33277:22;;33192:114;;;:::o;33312:184::-;33411:11;33445:6;33440:3;33433:19;33485:4;33480:3;33476:14;33461:29;;33312:184;;;;:::o;33502:132::-;33569:4;33592:3;33584:11;;33622:4;33617:3;33613:14;33605:22;;33502:132;;;:::o;33640:108::-;33717:24;33735:5;33717:24;:::i;:::-;33712:3;33705:37;33640:108;;:::o;33754:179::-;33823:10;33844:46;33886:3;33878:6;33844:46;:::i;:::-;33922:4;33917:3;33913:14;33899:28;;33754:179;;;;:::o;33939:113::-;34009:4;34041;34036:3;34032:14;34024:22;;33939:113;;;:::o;34088:732::-;34207:3;34236:54;34284:5;34236:54;:::i;:::-;34306:86;34385:6;34380:3;34306:86;:::i;:::-;34299:93;;34416:56;34466:5;34416:56;:::i;:::-;34495:7;34526:1;34511:284;34536:6;34533:1;34530:13;34511:284;;;34612:6;34606:13;34639:63;34698:3;34683:13;34639:63;:::i;:::-;34632:70;;34725:60;34778:6;34725:60;:::i;:::-;34715:70;;34571:224;34558:1;34555;34551:9;34546:14;;34511:284;;;34515:14;34811:3;34804:10;;34212:608;;;34088:732;;;;:::o;34826:831::-;35089:4;35127:3;35116:9;35112:19;35104:27;;35141:71;35209:1;35198:9;35194:17;35185:6;35141:71;:::i;:::-;35222:80;35298:2;35287:9;35283:18;35274:6;35222:80;:::i;:::-;35349:9;35343:4;35339:20;35334:2;35323:9;35319:18;35312:48;35377:108;35480:4;35471:6;35377:108;:::i;:::-;35369:116;;35495:72;35563:2;35552:9;35548:18;35539:6;35495:72;:::i;:::-;35577:73;35645:3;35634:9;35630:19;35621:6;35577:73;:::i;:::-;34826:831;;;;;;;;:::o;35663:807::-;35912:4;35950:3;35939:9;35935:19;35927:27;;35964:71;36032:1;36021:9;36017:17;36008:6;35964:71;:::i;:::-;36045:72;36113:2;36102:9;36098:18;36089:6;36045:72;:::i;:::-;36127:80;36203:2;36192:9;36188:18;36179:6;36127:80;:::i;:::-;36217;36293:2;36282:9;36278:18;36269:6;36217:80;:::i;:::-;36307:73;36375:3;36364:9;36360:19;36351:6;36307:73;:::i;:::-;36390;36458:3;36447:9;36443:19;36434:6;36390:73;:::i;:::-;35663:807;;;;;;;;;:::o;36476:143::-;36533:5;36564:6;36558:13;36549:22;;36580:33;36607:5;36580:33;:::i;:::-;36476:143;;;;:::o;36625:663::-;36713:6;36721;36729;36778:2;36766:9;36757:7;36753:23;36749:32;36746:119;;;36784:79;;:::i;:::-;36746:119;36904:1;36929:64;36985:7;36976:6;36965:9;36961:22;36929:64;:::i;:::-;36919:74;;36875:128;37042:2;37068:64;37124:7;37115:6;37104:9;37100:22;37068:64;:::i;:::-;37058:74;;37013:129;37181:2;37207:64;37263:7;37254:6;37243:9;37239:22;37207:64;:::i;:::-;37197:74;;37152:129;36625:663;;;;;:::o
Swarm Source
ipfs://15c95b20d3438a07b24f4002a5c870b85d497a4a1840dd905b747fdc7f4bbd89
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.