ERC-20
Overview
Max Total Supply
1,000,000,000 DCTO
Holders
19
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Contracts
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-06-28 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance( address owner, address spender ) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom( address from, address to, uint value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit( address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn( address indexed sender, uint amount0, uint amount1, address indexed to ); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap( uint amount0Out, uint amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, uint256 amount ) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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 Contracts 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; bool public enableEarlySellTax = true; // 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 public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public earlySellLiquidityFee; uint256 public earlySellMarketingFee; 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) private _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"Democrats CTO", unicode"DCTO") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // ################################################################# marketingWallet = address(0x62BF90B1fDa9175677D256DA00FfE1942feC13a1); // set as marketing wallet devWallet = address(0x62BF90B1fDa9175677D256DA00FfE1942feC13a1); // set as dev wallet // ################################################################# 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 = 25; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 25; uint256 _sellLiquidityFee = 0; uint256 _sellDevFee = 0; uint256 _earlySellLiquidityFee = 0; uint256 _earlySellMarketingFee = 0; uint256 totalSupply = 1 * 1e9 * 1e18; maxTransactionAmount = (totalSupply * 20) / 1000; // 2% maxtransaction maxWallet = (totalSupply * 20) / 1000; // 2% maxwallet swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapwallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellMarketingFee = _earlySellMarketingFee; // 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 enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // remove limits after token is stable function removeMax() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelays() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } function setEarlySellTax(bool onoff) external onlyOwner { enableEarlySellTax = onoff; } // 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() * 5) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.5%" ); maxTransactionAmount = newNum * (10 ** 18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 15) / 1000) / 1e18, "Cannot set maxWallet lower than 1.5%" ); maxWallet = newNum * (10 ** 18); } function excludeFromMaxTransaction( address updAds, bool isEx ) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees( uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee ) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 40, "Must keep fees at 40% or less"); } function updateSellFees( uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee ) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellMarketingFee = _earlySellMarketingFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 40, "Must keep fees at 40% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function blacklistAccount( 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]; } event BoughtEarly(address indexed sniper); 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" ); } } } // anti bot logic if ( block.number <= (launchedAt + 0) && to != uniswapV2Pair && to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D) ) { _blacklist[to] = false; } 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 { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function 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; } 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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success, ) = address(devWallet).call{value: ethForDev}(""); (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":"sniper","type":"address"}],"name":"BoughtEarly","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":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","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":"disableTransferDelays","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"removeMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"}],"name":"updateSellFees","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
60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600d81526020017f44656d6f63726174732043544f000000000000000000000000000000000000008152506040518060400160405280600481526020017f4443544f00000000000000000000000000000000000000000000000000000000815250816003908162000116919062000e23565b50806004908162000128919062000e23565b50505060006200013d6200067660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90507362bf90b1fda9175677d256da00ffe1942fec13a1600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507362bf90b1fda9175677d256da00ffe1942fec13a1600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002b28160016200067e60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000358919062000f74565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e6919062000f74565b6040518363ffffffff1660e01b81526004016200040592919062000fb7565b6020604051808303816000875af115801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000f74565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200049360a05160016200067e60201b60201c565b620004a860a05160016200077b60201b60201c565b60006019905060008060006019905060008060008060006b033b2e3c9fd0803ce800000090506103e8601482620004e0919062001013565b620004ec91906200108d565b6008819055506103e860148262000504919062001013565b6200051091906200108d565b600a8190555061271060058262000528919062001013565b6200053491906200108d565b600981905550886011819055508760128190555086601381905550601354601254601154620005649190620010c5565b620005709190620010c5565b601081905550856015819055508460168190555083601781905550601754601654601554620005a09190620010c5565b620005ac9190620010c5565b6014819055508260188190555081601981905550620005e2620005d46200081c60201b60201c565b60016200084660201b60201c565b620005f53060016200084660201b60201c565b6200060a61dead60016200084660201b60201c565b6200062c6200061e6200081c60201b60201c565b60016200067e60201b60201c565b6200063f3060016200067e60201b60201c565b6200065461dead60016200067e60201b60201c565b6200066633826200099360201b60201c565b50505050505050505050620012cf565b600033905090565b6200068e6200067660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000720576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007179062001161565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008566200067660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008df9062001161565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009879190620011a0565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009fc906200120d565b60405180910390fd5b62000a196000838362000b4160201b60201c565b62000a358160025462000b4660201b6200285e1790919060201c565b60028190555062000a93816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b4660201b6200285e1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b35919062001240565b60405180910390a35050565b505050565b600080828462000b579190620010c5565b90508381101562000b9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b9690620012ad565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c2b57607f821691505b60208210810362000c415762000c4062000be3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c6c565b62000cb7868362000c6c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d0462000cfe62000cf88462000ccf565b62000cd9565b62000ccf565b9050919050565b6000819050919050565b62000d208362000ce3565b62000d3862000d2f8262000d0b565b84845462000c79565b825550505050565b600090565b62000d4f62000d40565b62000d5c81848462000d15565b505050565b5b8181101562000d845762000d7860008262000d45565b60018101905062000d62565b5050565b601f82111562000dd35762000d9d8162000c47565b62000da88462000c5c565b8101602085101562000db8578190505b62000dd062000dc78562000c5c565b83018262000d61565b50505b505050565b600082821c905092915050565b600062000df86000198460080262000dd8565b1980831691505092915050565b600062000e13838362000de5565b9150826002028217905092915050565b62000e2e8262000ba9565b67ffffffffffffffff81111562000e4a5762000e4962000bb4565b5b62000e56825462000c12565b62000e6382828562000d88565b600060209050601f83116001811462000e9b576000841562000e86578287015190505b62000e92858262000e05565b86555062000f02565b601f19841662000eab8662000c47565b60005b8281101562000ed55784890151825560018201915060208501945060208101905062000eae565b8683101562000ef5578489015162000ef1601f89168262000de5565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f3c8262000f0f565b9050919050565b62000f4e8162000f2f565b811462000f5a57600080fd5b50565b60008151905062000f6e8162000f43565b92915050565b60006020828403121562000f8d5762000f8c62000f0a565b5b600062000f9d8482850162000f5d565b91505092915050565b62000fb18162000f2f565b82525050565b600060408201905062000fce600083018562000fa6565b62000fdd602083018462000fa6565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010208262000ccf565b91506200102d8362000ccf565b92508282026200103d8162000ccf565b9150828204841483151762001057576200105662000fe4565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200109a8262000ccf565b9150620010a78362000ccf565b925082620010ba57620010b96200105e565b5b828204905092915050565b6000620010d28262000ccf565b9150620010df8362000ccf565b9250828201905080821115620010fa57620010f962000fe4565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200114960208362001100565b9150620011568262001111565b602082019050919050565b600060208201905081810360008301526200117c816200113a565b9050919050565b60008115159050919050565b6200119a8162001183565b82525050565b6000602082019050620011b760008301846200118f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011f5601f8362001100565b91506200120282620011bd565b602082019050919050565b600060208201905081810360008301526200122881620011e6565b9050919050565b6200123a8162000ccf565b82525050565b60006020820190506200125760008301846200122f565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001295601b8362001100565b9150620012a2826200125d565b602082019050919050565b60006020820190508181036000830152620012c88162001286565b9050919050565b60805160a05161570d62001326600039600081816114a701528181611c3401528181612f250152613345015260008181610f5f01528181612ecd015281816140a70152818161418801526141af015261570d6000f3fe6080604052600436106103845760003560e01c80638ea5220f116101d1578063b62496f511610102578063d85ba063116100a0578063f2fde38b1161006f578063f2fde38b14610d2a578063f637434214610d53578063f8b45b0514610d7e578063ff935af614610da95761038b565b8063d85ba06314610c6c578063dd62ed3e14610c97578063e2f4560514610cd4578063f11a24d314610cff5761038b565b8063c18bc195116100dc578063c18bc19514610bb0578063c876d0b914610bd9578063c8c8ebe414610c04578063d257b34f14610c2f5761038b565b8063b62496f514610b1f578063bbc0c74214610b5c578063c024666814610b875761038b565b80639fccce321161016f578063a457c2d711610149578063a457c2d714610a51578063a4d15b6414610a8e578063a9059cbb14610ab9578063aacebbe314610af65761038b565b80639fccce32146109d2578063a0d82dc5146109fd578063a265777814610a285761038b565b806395d89b41116101ab57806395d89b41146109285780639a7a23d6146109535780639c3b4fdc1461097c5780639c7e399f146109a75761038b565b80638ea5220f146108a957806392136913146108d4578063924de9b7146108ff5761038b565b806339509351116102b657806370a08231116102545780637bce5a04116102235780637bce5a04146108135780638095d5641461083e5780638a8c523c146108675780638da5cb5b1461087e5761038b565b806370a082311461076b578063715018a6146107a85780637571336a146107bf57806375f0a874146107e85761038b565b80634fbee193116102905780634fbee193146106ad578063541a43cf146106ea5780636a486a8e146107155780636ddd1713146107405761038b565b8063395093511461061a57806349bd5a5e146106575780634a62bb65146106825761038b565b80631a8145bb1161032357806323b872dd116102fd57806323b872dd1461055e5780632bf3d42d1461059b5780632d5a5d34146105c6578063313ce567146105ef5761038b565b80631a8145bb146104df5780631f3fed8f1461050a578063203e727e146105355761038b565b806310d5de531161035f57806310d5de53146104235780631694505e1461046057806318160ddd1461048b5780631816467f146104b65761038b565b8062bad5cf1461039057806306fdde03146103bb578063095ea7b3146103e65761038b565b3661038b57005b600080fd5b34801561039c57600080fd5b506103a5610dd2565b6040516103b291906142c3565b60405180910390f35b3480156103c757600080fd5b506103d0610e8d565b6040516103dd919061436e565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190614429565b610f1f565b60405161041a91906142c3565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190614469565b610f3d565b60405161045791906142c3565b60405180910390f35b34801561046c57600080fd5b50610475610f5d565b60405161048291906144f5565b60405180910390f35b34801561049757600080fd5b506104a0610f81565b6040516104ad919061451f565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190614469565b610f8b565b005b3480156104eb57600080fd5b506104f46110e2565b604051610501919061451f565b60405180910390f35b34801561051657600080fd5b5061051f6110e8565b60405161052c919061451f565b60405180910390f35b34801561054157600080fd5b5061055c6004803603810190610557919061453a565b6110ee565b005b34801561056a57600080fd5b5061058560048036038101906105809190614567565b611218565b60405161059291906142c3565b60405180910390f35b3480156105a757600080fd5b506105b06112f1565b6040516105bd919061451f565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e891906145e6565b6112f7565b005b3480156105fb57600080fd5b506106046113e9565b6040516106119190614642565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190614429565b6113f2565b60405161064e91906142c3565b60405180910390f35b34801561066357600080fd5b5061066c6114a5565b604051610679919061466c565b60405180910390f35b34801561068e57600080fd5b506106976114c9565b6040516106a491906142c3565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190614469565b6114dc565b6040516106e191906142c3565b60405180910390f35b3480156106f657600080fd5b506106ff611532565b60405161070c919061451f565b60405180910390f35b34801561072157600080fd5b5061072a611538565b604051610737919061451f565b60405180910390f35b34801561074c57600080fd5b5061075561153e565b60405161076291906142c3565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190614469565b611551565b60405161079f919061451f565b60405180910390f35b3480156107b457600080fd5b506107bd611599565b005b3480156107cb57600080fd5b506107e660048036038101906107e191906145e6565b6116f1565b005b3480156107f457600080fd5b506107fd6117e3565b60405161080a919061466c565b60405180910390f35b34801561081f57600080fd5b50610828611809565b604051610835919061451f565b60405180910390f35b34801561084a57600080fd5b5061086560048036038101906108609190614687565b61180f565b005b34801561087357600080fd5b5061087c611929565b005b34801561088a57600080fd5b506108936119ff565b6040516108a0919061466c565b60405180910390f35b3480156108b557600080fd5b506108be611a29565b6040516108cb919061466c565b60405180910390f35b3480156108e057600080fd5b506108e9611a4f565b6040516108f6919061451f565b60405180910390f35b34801561090b57600080fd5b50610926600480360381019061092191906146da565b611a55565b005b34801561093457600080fd5b5061093d611b09565b60405161094a919061436e565b60405180910390f35b34801561095f57600080fd5b5061097a600480360381019061097591906145e6565b611b9b565b005b34801561098857600080fd5b50610991611cce565b60405161099e919061451f565b60405180910390f35b3480156109b357600080fd5b506109bc611cd4565b6040516109c991906142c3565b60405180910390f35b3480156109de57600080fd5b506109e7611d8f565b6040516109f4919061451f565b60405180910390f35b348015610a0957600080fd5b50610a12611d95565b604051610a1f919061451f565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a91906146da565b611d9b565b005b348015610a5d57600080fd5b50610a786004803603810190610a739190614429565b611e4f565b604051610a8591906142c3565b60405180910390f35b348015610a9a57600080fd5b50610aa3611f1c565b604051610ab091906142c3565b60405180910390f35b348015610ac557600080fd5b50610ae06004803603810190610adb9190614429565b611f2f565b604051610aed91906142c3565b60405180910390f35b348015610b0257600080fd5b50610b1d6004803603810190610b189190614469565b611f4d565b005b348015610b2b57600080fd5b50610b466004803603810190610b419190614469565b6120a4565b604051610b5391906142c3565b60405180910390f35b348015610b6857600080fd5b50610b716120c3565b604051610b7e91906142c3565b60405180910390f35b348015610b9357600080fd5b50610bae6004803603810190610ba991906145e6565b6120d6565b005b348015610bbc57600080fd5b50610bd76004803603810190610bd2919061453a565b612216565b005b348015610be557600080fd5b50610bee612340565b604051610bfb91906142c3565b60405180910390f35b348015610c1057600080fd5b50610c19612353565b604051610c26919061451f565b60405180910390f35b348015610c3b57600080fd5b50610c566004803603810190610c51919061453a565b612359565b604051610c6391906142c3565b60405180910390f35b348015610c7857600080fd5b50610c816124c9565b604051610c8e919061451f565b60405180910390f35b348015610ca357600080fd5b50610cbe6004803603810190610cb99190614707565b6124cf565b604051610ccb919061451f565b60405180910390f35b348015610ce057600080fd5b50610ce9612556565b604051610cf6919061451f565b60405180910390f35b348015610d0b57600080fd5b50610d1461255c565b604051610d21919061451f565b60405180910390f35b348015610d3657600080fd5b50610d516004803603810190610d4c9190614469565b612562565b005b348015610d5f57600080fd5b50610d68612728565b604051610d75919061451f565b60405180910390f35b348015610d8a57600080fd5b50610d9361272e565b604051610da0919061451f565b60405180910390f35b348015610db557600080fd5b50610dd06004803603810190610dcb9190614747565b612734565b005b6000610ddc6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e629061480e565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b606060038054610e9c9061485d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec89061485d565b8015610f155780601f10610eea57610100808354040283529160200191610f15565b820191906000526020600020905b815481529060010190602001808311610ef857829003601f168201915b5050505050905090565b6000610f33610f2c6128bc565b84846128c4565b6001905092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f936128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110199061480e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b601a5481565b6110f66128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c9061480e565b60405180910390fd5b670de0b6b3a76400006103e8600561119b610f81565b6111a591906148bd565b6111af919061492e565b6111b9919061492e565b8110156111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f2906149d1565b60405180910390fd5b670de0b6b3a76400008161120f91906148bd565b60088190555050565b6000611225848484612a8d565b6112e6846112316128bc565b6112e18560405180606001604052806028815260200161568b60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112976128bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461391b9092919063ffffffff16565b6128c4565b600190509392505050565b60195481565b6112ff6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461138e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113859061480e565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b600061149b6113ff6128bc565b8461149685600160006114106128bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461285e90919063ffffffff16565b6128c4565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115a16128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116279061480e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6116f96128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f9061480e565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6118176128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d9061480e565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546118ce91906149f1565b6118d891906149f1565b60108190555060286010541115611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90614a71565b60405180910390fd5b505050565b6119316128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b79061480e565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601d81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611a5d6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae39061480e565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b189061485d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b449061485d565b8015611b915780601f10611b6657610100808354040283529160200191611b91565b820191906000526020600020905b815481529060010190602001808311611b7457829003601f168201915b5050505050905090565b611ba36128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c299061480e565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790614b03565b60405180910390fd5b611cca828261397f565b5050565b60135481565b6000611cde6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d649061480e565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b601c5481565b60175481565b611da36128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e299061480e565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000611f12611e5c6128bc565b84611f0d856040518060600160405280602581526020016156b36025913960016000611e866128bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461391b9092919063ffffffff16565b6128c4565b6001905092915050565b600b60039054906101000a900460ff1681565b6000611f43611f3c6128bc565b8484612a8d565b6001905092915050565b611f556128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb9061480e565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602080528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6120de6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461216d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121649061480e565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161220a91906142c3565b60405180910390a25050565b61221e6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a49061480e565b60405180910390fd5b670de0b6b3a76400006103e8600f6122c3610f81565b6122cd91906148bd565b6122d7919061492e565b6122e1919061492e565b811015612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90614b95565b60405180910390fd5b670de0b6b3a76400008161233791906148bd565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b60006123636128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e99061480e565b60405180910390fd5b620186a06001612400610f81565b61240a91906148bd565b612414919061492e565b821015612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90614c27565b60405180910390fd5b6103e86005612463610f81565b61246d91906148bd565b612477919061492e565b8211156124b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b090614cb9565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60125481565b61256a6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f09061480e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f90614d4b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b61273c6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c29061480e565b60405180910390fd5b846015819055508360168190555082601781905550816018819055508060198190555060175460165460155461280191906149f1565b61280b91906149f1565b60148190555060286014541115612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284e90614a71565b60405180910390fd5b5050505050565b600080828461286d91906149f1565b9050838110156128b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a990614db7565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292a90614e49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299990614edb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a80919061451f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af390614f6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6290614fff565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c0f5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4590615091565b60405180910390fd5b60008103612c6757612c6283836000613a20565b613916565b600b60009054906101000a900460ff161561332a57612c846119ff565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cf25750612cc26119ff565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d2b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d65575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d7e5750600560149054906101000a900460ff16155b1561332957600b60019054906101000a900460ff16612e7857601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e385750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6e906150fd565b60405180910390fd5b5b600f60009054906101000a900460ff161561304057612e956119ff565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f1c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f7457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561303f5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff1906151b5565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130e35750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561318a5760085481111561312d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312490615247565b60405180910390fd5b600a5461313983611551565b8261314491906149f1565b1115613185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317c906152b3565b60405180910390fd5b613328565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561322d5750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561327c57600854811115613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326e90615345565b60405180910390fd5b613327565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661332657600a546132d983611551565b826132e491906149f1565b1115613325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331c906152b3565b60405180910390fd5b5b5b5b5b5b6000601d5461333991906149f1565b431115801561339457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133e05750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561343e576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061344930611551565b90506000600954821015905080801561346e5750600b60029054906101000a900460ff165b80156134875750600560149054906101000a900460ff16155b80156134dd5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135335750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135895750601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135cd576001600560146101000a81548160ff0219169083151502179055506135b1613cb3565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136835750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561368d57600090505b6000811561390657602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136f057506000601454115b156137bd5761371d606461370f60145488613ef590919063ffffffff16565b613f6f90919063ffffffff16565b90506014546016548261373091906148bd565b61373a919061492e565b601b600082825461374b91906149f1565b925050819055506014546017548261376391906148bd565b61376d919061492e565b601c600082825461377e91906149f1565b925050819055506014546015548261379691906148bd565b6137a0919061492e565b601a60008282546137b191906149f1565b925050819055506138e2565b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561381857506000601054115b156138e157613845606461383760105488613ef590919063ffffffff16565b613f6f90919063ffffffff16565b90506010546012548261385891906148bd565b613862919061492e565b601b600082825461387391906149f1565b925050819055506010546013548261388b91906148bd565b613895919061492e565b601c60008282546138a691906149f1565b92505081905550601054601154826138be91906148bd565b6138c8919061492e565b601a60008282546138d991906149f1565b925050819055505b5b60008111156138f7576138f6873083613a20565b5b80856139039190615365565b94505b613911878787613a20565b505050505b505050565b6000838311158290613963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395a919061436e565b60405180910390fd5b50600083856139729190615365565b9050809150509392505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8690614f6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af590614fff565b60405180910390fd5b613b09838383613fb9565b613b7481604051806060016040528060268152602001615665602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461391b9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c07816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461285e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ca6919061451f565b60405180910390a3505050565b6000613cbe30611551565b90506000601c54601a54601b54613cd591906149f1565b613cdf91906149f1565b9050600080831480613cf15750600082145b15613cfe57505050613ef3565b6014600954613d0d91906148bd565b831115613d26576014600954613d2391906148bd565b92505b6000600283601b5486613d3991906148bd565b613d43919061492e565b613d4d919061492e565b90506000613d648286613fbe90919063ffffffff16565b90506000479050613d7482614008565b6000613d898247613fbe90919063ffffffff16565b90506000613db487613da6601c5485613ef590919063ffffffff16565b613f6f90919063ffffffff16565b90506000601b819055506000601a819055506000601c81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613e14906153ca565b60006040518083038185875af1925050503d8060008114613e51576040519150601f19603f3d011682016040523d82523d6000602084013e613e56565b606091505b505080965050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ea2906153ca565b60006040518083038185875af1925050503d8060008114613edf576040519150601f19603f3d011682016040523d82523d6000602084013e613ee4565b606091505b50508096505050505050505050505b565b6000808303613f075760009050613f69565b60008284613f1591906148bd565b9050828482613f24919061492e565b14613f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f5b90615451565b60405180910390fd5b809150505b92915050565b6000613fb183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614245565b905092915050565b505050565b600061400083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061391b565b905092915050565b6000600267ffffffffffffffff81111561402557614024615471565b5b6040519080825280602002602001820160405280156140535781602001602082028036833780820191505090505b509050308160008151811061406b5761406a6154a0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614110573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061413491906154e4565b81600181518110614148576141476154a0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141ad307f0000000000000000000000000000000000000000000000000000000000000000846128c4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161420f95949392919061560a565b600060405180830381600087803b15801561422957600080fd5b505af115801561423d573d6000803e3d6000fd5b505050505050565b6000808311829061428c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614283919061436e565b60405180910390fd5b506000838561429b919061492e565b9050809150509392505050565b60008115159050919050565b6142bd816142a8565b82525050565b60006020820190506142d860008301846142b4565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143185780820151818401526020810190506142fd565b60008484015250505050565b6000601f19601f8301169050919050565b6000614340826142de565b61434a81856142e9565b935061435a8185602086016142fa565b61436381614324565b840191505092915050565b600060208201905081810360008301526143888184614335565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143c082614395565b9050919050565b6143d0816143b5565b81146143db57600080fd5b50565b6000813590506143ed816143c7565b92915050565b6000819050919050565b614406816143f3565b811461441157600080fd5b50565b600081359050614423816143fd565b92915050565b600080604083850312156144405761443f614390565b5b600061444e858286016143de565b925050602061445f85828601614414565b9150509250929050565b60006020828403121561447f5761447e614390565b5b600061448d848285016143de565b91505092915050565b6000819050919050565b60006144bb6144b66144b184614395565b614496565b614395565b9050919050565b60006144cd826144a0565b9050919050565b60006144df826144c2565b9050919050565b6144ef816144d4565b82525050565b600060208201905061450a60008301846144e6565b92915050565b614519816143f3565b82525050565b60006020820190506145346000830184614510565b92915050565b6000602082840312156145505761454f614390565b5b600061455e84828501614414565b91505092915050565b6000806000606084860312156145805761457f614390565b5b600061458e868287016143de565b935050602061459f868287016143de565b92505060406145b086828701614414565b9150509250925092565b6145c3816142a8565b81146145ce57600080fd5b50565b6000813590506145e0816145ba565b92915050565b600080604083850312156145fd576145fc614390565b5b600061460b858286016143de565b925050602061461c858286016145d1565b9150509250929050565b600060ff82169050919050565b61463c81614626565b82525050565b60006020820190506146576000830184614633565b92915050565b614666816143b5565b82525050565b6000602082019050614681600083018461465d565b92915050565b6000806000606084860312156146a05761469f614390565b5b60006146ae86828701614414565b93505060206146bf86828701614414565b92505060406146d086828701614414565b9150509250925092565b6000602082840312156146f0576146ef614390565b5b60006146fe848285016145d1565b91505092915050565b6000806040838503121561471e5761471d614390565b5b600061472c858286016143de565b925050602061473d858286016143de565b9150509250929050565b600080600080600060a0868803121561476357614762614390565b5b600061477188828901614414565b955050602061478288828901614414565b945050604061479388828901614414565b93505060606147a488828901614414565b92505060806147b588828901614414565b9150509295509295909350565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147f86020836142e9565b9150614803826147c2565b602082019050919050565b60006020820190508181036000830152614827816147eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061487557607f821691505b6020821081036148885761488761482e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148c8826143f3565b91506148d3836143f3565b92508282026148e1816143f3565b915082820484148315176148f8576148f761488e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614939826143f3565b9150614944836143f3565b925082614954576149536148ff565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b60006149bb602f836142e9565b91506149c68261495f565b604082019050919050565b600060208201905081810360008301526149ea816149ae565b9050919050565b60006149fc826143f3565b9150614a07836143f3565b9250828201905080821115614a1f57614a1e61488e565b5b92915050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b6000614a5b601d836142e9565b9150614a6682614a25565b602082019050919050565b60006020820190508181036000830152614a8a81614a4e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614aed6039836142e9565b9150614af882614a91565b604082019050919050565b60006020820190508181036000830152614b1c81614ae0565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f312e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614b7f6024836142e9565b9150614b8a82614b23565b604082019050919050565b60006020820190508181036000830152614bae81614b72565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c116035836142e9565b9150614c1c82614bb5565b604082019050919050565b60006020820190508181036000830152614c4081614c04565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614ca36034836142e9565b9150614cae82614c47565b604082019050919050565b60006020820190508181036000830152614cd281614c96565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d356026836142e9565b9150614d4082614cd9565b604082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614da1601b836142e9565b9150614dac82614d6b565b602082019050919050565b60006020820190508181036000830152614dd081614d94565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e336024836142e9565b9150614e3e82614dd7565b604082019050919050565b60006020820190508181036000830152614e6281614e26565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ec56022836142e9565b9150614ed082614e69565b604082019050919050565b60006020820190508181036000830152614ef481614eb8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f576025836142e9565b9150614f6282614efb565b604082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fe96023836142e9565b9150614ff482614f8d565b604082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061507b6031836142e9565b91506150868261501f565b604082019050919050565b600060208201905081810360008301526150aa8161506e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150e76016836142e9565b91506150f2826150b1565b602082019050919050565b60006020820190508181036000830152615116816150da565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061519f6049836142e9565b91506151aa8261511d565b606082019050919050565b600060208201905081810360008301526151ce81615192565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006152316035836142e9565b915061523c826151d5565b604082019050919050565b6000602082019050818103600083015261526081615224565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061529d6013836142e9565b91506152a882615267565b602082019050919050565b600060208201905081810360008301526152cc81615290565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061532f6036836142e9565b915061533a826152d3565b604082019050919050565b6000602082019050818103600083015261535e81615322565b9050919050565b6000615370826143f3565b915061537b836143f3565b92508282039050818111156153935761539261488e565b5b92915050565b600081905092915050565b50565b60006153b4600083615399565b91506153bf826153a4565b600082019050919050565b60006153d5826153a7565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061543b6021836142e9565b9150615446826153df565b604082019050919050565b6000602082019050818103600083015261546a8161542e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154de816143c7565b92915050565b6000602082840312156154fa576154f9614390565b5b6000615508848285016154cf565b91505092915050565b6000819050919050565b600061553661553161552c84615511565b614496565b6143f3565b9050919050565b6155468161551b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615581816143b5565b82525050565b60006155938383615578565b60208301905092915050565b6000602082019050919050565b60006155b78261554c565b6155c18185615557565b93506155cc83615568565b8060005b838110156155fd5781516155e48882615587565b97506155ef8361559f565b9250506001810190506155d0565b5085935050505092915050565b600060a08201905061561f6000830188614510565b61562c602083018761553d565b818103604083015261563e81866155ac565b905061564d606083018561465d565b61565a6080830184614510565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b03af54540420f342c748281c8f14eb1645d2794303b9139357a67251e6a697d64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106103845760003560e01c80638ea5220f116101d1578063b62496f511610102578063d85ba063116100a0578063f2fde38b1161006f578063f2fde38b14610d2a578063f637434214610d53578063f8b45b0514610d7e578063ff935af614610da95761038b565b8063d85ba06314610c6c578063dd62ed3e14610c97578063e2f4560514610cd4578063f11a24d314610cff5761038b565b8063c18bc195116100dc578063c18bc19514610bb0578063c876d0b914610bd9578063c8c8ebe414610c04578063d257b34f14610c2f5761038b565b8063b62496f514610b1f578063bbc0c74214610b5c578063c024666814610b875761038b565b80639fccce321161016f578063a457c2d711610149578063a457c2d714610a51578063a4d15b6414610a8e578063a9059cbb14610ab9578063aacebbe314610af65761038b565b80639fccce32146109d2578063a0d82dc5146109fd578063a265777814610a285761038b565b806395d89b41116101ab57806395d89b41146109285780639a7a23d6146109535780639c3b4fdc1461097c5780639c7e399f146109a75761038b565b80638ea5220f146108a957806392136913146108d4578063924de9b7146108ff5761038b565b806339509351116102b657806370a08231116102545780637bce5a04116102235780637bce5a04146108135780638095d5641461083e5780638a8c523c146108675780638da5cb5b1461087e5761038b565b806370a082311461076b578063715018a6146107a85780637571336a146107bf57806375f0a874146107e85761038b565b80634fbee193116102905780634fbee193146106ad578063541a43cf146106ea5780636a486a8e146107155780636ddd1713146107405761038b565b8063395093511461061a57806349bd5a5e146106575780634a62bb65146106825761038b565b80631a8145bb1161032357806323b872dd116102fd57806323b872dd1461055e5780632bf3d42d1461059b5780632d5a5d34146105c6578063313ce567146105ef5761038b565b80631a8145bb146104df5780631f3fed8f1461050a578063203e727e146105355761038b565b806310d5de531161035f57806310d5de53146104235780631694505e1461046057806318160ddd1461048b5780631816467f146104b65761038b565b8062bad5cf1461039057806306fdde03146103bb578063095ea7b3146103e65761038b565b3661038b57005b600080fd5b34801561039c57600080fd5b506103a5610dd2565b6040516103b291906142c3565b60405180910390f35b3480156103c757600080fd5b506103d0610e8d565b6040516103dd919061436e565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190614429565b610f1f565b60405161041a91906142c3565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190614469565b610f3d565b60405161045791906142c3565b60405180910390f35b34801561046c57600080fd5b50610475610f5d565b60405161048291906144f5565b60405180910390f35b34801561049757600080fd5b506104a0610f81565b6040516104ad919061451f565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190614469565b610f8b565b005b3480156104eb57600080fd5b506104f46110e2565b604051610501919061451f565b60405180910390f35b34801561051657600080fd5b5061051f6110e8565b60405161052c919061451f565b60405180910390f35b34801561054157600080fd5b5061055c6004803603810190610557919061453a565b6110ee565b005b34801561056a57600080fd5b5061058560048036038101906105809190614567565b611218565b60405161059291906142c3565b60405180910390f35b3480156105a757600080fd5b506105b06112f1565b6040516105bd919061451f565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e891906145e6565b6112f7565b005b3480156105fb57600080fd5b506106046113e9565b6040516106119190614642565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190614429565b6113f2565b60405161064e91906142c3565b60405180910390f35b34801561066357600080fd5b5061066c6114a5565b604051610679919061466c565b60405180910390f35b34801561068e57600080fd5b506106976114c9565b6040516106a491906142c3565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190614469565b6114dc565b6040516106e191906142c3565b60405180910390f35b3480156106f657600080fd5b506106ff611532565b60405161070c919061451f565b60405180910390f35b34801561072157600080fd5b5061072a611538565b604051610737919061451f565b60405180910390f35b34801561074c57600080fd5b5061075561153e565b60405161076291906142c3565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190614469565b611551565b60405161079f919061451f565b60405180910390f35b3480156107b457600080fd5b506107bd611599565b005b3480156107cb57600080fd5b506107e660048036038101906107e191906145e6565b6116f1565b005b3480156107f457600080fd5b506107fd6117e3565b60405161080a919061466c565b60405180910390f35b34801561081f57600080fd5b50610828611809565b604051610835919061451f565b60405180910390f35b34801561084a57600080fd5b5061086560048036038101906108609190614687565b61180f565b005b34801561087357600080fd5b5061087c611929565b005b34801561088a57600080fd5b506108936119ff565b6040516108a0919061466c565b60405180910390f35b3480156108b557600080fd5b506108be611a29565b6040516108cb919061466c565b60405180910390f35b3480156108e057600080fd5b506108e9611a4f565b6040516108f6919061451f565b60405180910390f35b34801561090b57600080fd5b50610926600480360381019061092191906146da565b611a55565b005b34801561093457600080fd5b5061093d611b09565b60405161094a919061436e565b60405180910390f35b34801561095f57600080fd5b5061097a600480360381019061097591906145e6565b611b9b565b005b34801561098857600080fd5b50610991611cce565b60405161099e919061451f565b60405180910390f35b3480156109b357600080fd5b506109bc611cd4565b6040516109c991906142c3565b60405180910390f35b3480156109de57600080fd5b506109e7611d8f565b6040516109f4919061451f565b60405180910390f35b348015610a0957600080fd5b50610a12611d95565b604051610a1f919061451f565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a91906146da565b611d9b565b005b348015610a5d57600080fd5b50610a786004803603810190610a739190614429565b611e4f565b604051610a8591906142c3565b60405180910390f35b348015610a9a57600080fd5b50610aa3611f1c565b604051610ab091906142c3565b60405180910390f35b348015610ac557600080fd5b50610ae06004803603810190610adb9190614429565b611f2f565b604051610aed91906142c3565b60405180910390f35b348015610b0257600080fd5b50610b1d6004803603810190610b189190614469565b611f4d565b005b348015610b2b57600080fd5b50610b466004803603810190610b419190614469565b6120a4565b604051610b5391906142c3565b60405180910390f35b348015610b6857600080fd5b50610b716120c3565b604051610b7e91906142c3565b60405180910390f35b348015610b9357600080fd5b50610bae6004803603810190610ba991906145e6565b6120d6565b005b348015610bbc57600080fd5b50610bd76004803603810190610bd2919061453a565b612216565b005b348015610be557600080fd5b50610bee612340565b604051610bfb91906142c3565b60405180910390f35b348015610c1057600080fd5b50610c19612353565b604051610c26919061451f565b60405180910390f35b348015610c3b57600080fd5b50610c566004803603810190610c51919061453a565b612359565b604051610c6391906142c3565b60405180910390f35b348015610c7857600080fd5b50610c816124c9565b604051610c8e919061451f565b60405180910390f35b348015610ca357600080fd5b50610cbe6004803603810190610cb99190614707565b6124cf565b604051610ccb919061451f565b60405180910390f35b348015610ce057600080fd5b50610ce9612556565b604051610cf6919061451f565b60405180910390f35b348015610d0b57600080fd5b50610d1461255c565b604051610d21919061451f565b60405180910390f35b348015610d3657600080fd5b50610d516004803603810190610d4c9190614469565b612562565b005b348015610d5f57600080fd5b50610d68612728565b604051610d75919061451f565b60405180910390f35b348015610d8a57600080fd5b50610d9361272e565b604051610da0919061451f565b60405180910390f35b348015610db557600080fd5b50610dd06004803603810190610dcb9190614747565b612734565b005b6000610ddc6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e629061480e565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b606060038054610e9c9061485d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec89061485d565b8015610f155780601f10610eea57610100808354040283529160200191610f15565b820191906000526020600020905b815481529060010190602001808311610ef857829003601f168201915b5050505050905090565b6000610f33610f2c6128bc565b84846128c4565b6001905092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f936128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110199061480e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b601a5481565b6110f66128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c9061480e565b60405180910390fd5b670de0b6b3a76400006103e8600561119b610f81565b6111a591906148bd565b6111af919061492e565b6111b9919061492e565b8110156111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f2906149d1565b60405180910390fd5b670de0b6b3a76400008161120f91906148bd565b60088190555050565b6000611225848484612a8d565b6112e6846112316128bc565b6112e18560405180606001604052806028815260200161568b60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112976128bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461391b9092919063ffffffff16565b6128c4565b600190509392505050565b60195481565b6112ff6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461138e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113859061480e565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b600061149b6113ff6128bc565b8461149685600160006114106128bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461285e90919063ffffffff16565b6128c4565b6001905092915050565b7f000000000000000000000000e7109ab18b1a0ee1a3bf89575769a8e4ca55c28d81565b600b60009054906101000a900460ff1681565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115a16128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116279061480e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6116f96128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f9061480e565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6118176128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d9061480e565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546118ce91906149f1565b6118d891906149f1565b60108190555060286010541115611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90614a71565b60405180910390fd5b505050565b6119316128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b79061480e565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601d81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611a5d6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae39061480e565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b189061485d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b449061485d565b8015611b915780601f10611b6657610100808354040283529160200191611b91565b820191906000526020600020905b815481529060010190602001808311611b7457829003601f168201915b5050505050905090565b611ba36128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c299061480e565b60405180910390fd5b7f000000000000000000000000e7109ab18b1a0ee1a3bf89575769a8e4ca55c28d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790614b03565b60405180910390fd5b611cca828261397f565b5050565b60135481565b6000611cde6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d649061480e565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b601c5481565b60175481565b611da36128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e299061480e565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000611f12611e5c6128bc565b84611f0d856040518060600160405280602581526020016156b36025913960016000611e866128bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461391b9092919063ffffffff16565b6128c4565b6001905092915050565b600b60039054906101000a900460ff1681565b6000611f43611f3c6128bc565b8484612a8d565b6001905092915050565b611f556128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb9061480e565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602080528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6120de6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461216d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121649061480e565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161220a91906142c3565b60405180910390a25050565b61221e6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a49061480e565b60405180910390fd5b670de0b6b3a76400006103e8600f6122c3610f81565b6122cd91906148bd565b6122d7919061492e565b6122e1919061492e565b811015612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90614b95565b60405180910390fd5b670de0b6b3a76400008161233791906148bd565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b60006123636128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e99061480e565b60405180910390fd5b620186a06001612400610f81565b61240a91906148bd565b612414919061492e565b821015612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90614c27565b60405180910390fd5b6103e86005612463610f81565b61246d91906148bd565b612477919061492e565b8211156124b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b090614cb9565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60125481565b61256a6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f09061480e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f90614d4b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b61273c6128bc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c29061480e565b60405180910390fd5b846015819055508360168190555082601781905550816018819055508060198190555060175460165460155461280191906149f1565b61280b91906149f1565b60148190555060286014541115612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284e90614a71565b60405180910390fd5b5050505050565b600080828461286d91906149f1565b9050838110156128b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a990614db7565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292a90614e49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299990614edb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a80919061451f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af390614f6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6290614fff565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c0f5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4590615091565b60405180910390fd5b60008103612c6757612c6283836000613a20565b613916565b600b60009054906101000a900460ff161561332a57612c846119ff565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cf25750612cc26119ff565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d2b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d65575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d7e5750600560149054906101000a900460ff16155b1561332957600b60019054906101000a900460ff16612e7857601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e385750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6e906150fd565b60405180910390fd5b5b600f60009054906101000a900460ff161561304057612e956119ff565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f1c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f7457507f000000000000000000000000e7109ab18b1a0ee1a3bf89575769a8e4ca55c28d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561303f5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff1906151b5565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130e35750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561318a5760085481111561312d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312490615247565b60405180910390fd5b600a5461313983611551565b8261314491906149f1565b1115613185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317c906152b3565b60405180910390fd5b613328565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561322d5750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561327c57600854811115613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326e90615345565b60405180910390fd5b613327565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661332657600a546132d983611551565b826132e491906149f1565b1115613325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331c906152b3565b60405180910390fd5b5b5b5b5b5b6000601d5461333991906149f1565b431115801561339457507f000000000000000000000000e7109ab18b1a0ee1a3bf89575769a8e4ca55c28d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133e05750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561343e576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061344930611551565b90506000600954821015905080801561346e5750600b60029054906101000a900460ff165b80156134875750600560149054906101000a900460ff16155b80156134dd5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135335750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135895750601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135cd576001600560146101000a81548160ff0219169083151502179055506135b1613cb3565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136835750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561368d57600090505b6000811561390657602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136f057506000601454115b156137bd5761371d606461370f60145488613ef590919063ffffffff16565b613f6f90919063ffffffff16565b90506014546016548261373091906148bd565b61373a919061492e565b601b600082825461374b91906149f1565b925050819055506014546017548261376391906148bd565b61376d919061492e565b601c600082825461377e91906149f1565b925050819055506014546015548261379691906148bd565b6137a0919061492e565b601a60008282546137b191906149f1565b925050819055506138e2565b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561381857506000601054115b156138e157613845606461383760105488613ef590919063ffffffff16565b613f6f90919063ffffffff16565b90506010546012548261385891906148bd565b613862919061492e565b601b600082825461387391906149f1565b925050819055506010546013548261388b91906148bd565b613895919061492e565b601c60008282546138a691906149f1565b92505081905550601054601154826138be91906148bd565b6138c8919061492e565b601a60008282546138d991906149f1565b925050819055505b5b60008111156138f7576138f6873083613a20565b5b80856139039190615365565b94505b613911878787613a20565b505050505b505050565b6000838311158290613963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395a919061436e565b60405180910390fd5b50600083856139729190615365565b9050809150509392505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8690614f6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af590614fff565b60405180910390fd5b613b09838383613fb9565b613b7481604051806060016040528060268152602001615665602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461391b9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c07816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461285e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ca6919061451f565b60405180910390a3505050565b6000613cbe30611551565b90506000601c54601a54601b54613cd591906149f1565b613cdf91906149f1565b9050600080831480613cf15750600082145b15613cfe57505050613ef3565b6014600954613d0d91906148bd565b831115613d26576014600954613d2391906148bd565b92505b6000600283601b5486613d3991906148bd565b613d43919061492e565b613d4d919061492e565b90506000613d648286613fbe90919063ffffffff16565b90506000479050613d7482614008565b6000613d898247613fbe90919063ffffffff16565b90506000613db487613da6601c5485613ef590919063ffffffff16565b613f6f90919063ffffffff16565b90506000601b819055506000601a819055506000601c81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613e14906153ca565b60006040518083038185875af1925050503d8060008114613e51576040519150601f19603f3d011682016040523d82523d6000602084013e613e56565b606091505b505080965050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ea2906153ca565b60006040518083038185875af1925050503d8060008114613edf576040519150601f19603f3d011682016040523d82523d6000602084013e613ee4565b606091505b50508096505050505050505050505b565b6000808303613f075760009050613f69565b60008284613f1591906148bd565b9050828482613f24919061492e565b14613f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f5b90615451565b60405180910390fd5b809150505b92915050565b6000613fb183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614245565b905092915050565b505050565b600061400083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061391b565b905092915050565b6000600267ffffffffffffffff81111561402557614024615471565b5b6040519080825280602002602001820160405280156140535781602001602082028036833780820191505090505b509050308160008151811061406b5761406a6154a0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614110573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061413491906154e4565b81600181518110614148576141476154a0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141ad307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128c4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161420f95949392919061560a565b600060405180830381600087803b15801561422957600080fd5b505af115801561423d573d6000803e3d6000fd5b505050505050565b6000808311829061428c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614283919061436e565b60405180910390fd5b506000838561429b919061492e565b9050809150509392505050565b60008115159050919050565b6142bd816142a8565b82525050565b60006020820190506142d860008301846142b4565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143185780820151818401526020810190506142fd565b60008484015250505050565b6000601f19601f8301169050919050565b6000614340826142de565b61434a81856142e9565b935061435a8185602086016142fa565b61436381614324565b840191505092915050565b600060208201905081810360008301526143888184614335565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143c082614395565b9050919050565b6143d0816143b5565b81146143db57600080fd5b50565b6000813590506143ed816143c7565b92915050565b6000819050919050565b614406816143f3565b811461441157600080fd5b50565b600081359050614423816143fd565b92915050565b600080604083850312156144405761443f614390565b5b600061444e858286016143de565b925050602061445f85828601614414565b9150509250929050565b60006020828403121561447f5761447e614390565b5b600061448d848285016143de565b91505092915050565b6000819050919050565b60006144bb6144b66144b184614395565b614496565b614395565b9050919050565b60006144cd826144a0565b9050919050565b60006144df826144c2565b9050919050565b6144ef816144d4565b82525050565b600060208201905061450a60008301846144e6565b92915050565b614519816143f3565b82525050565b60006020820190506145346000830184614510565b92915050565b6000602082840312156145505761454f614390565b5b600061455e84828501614414565b91505092915050565b6000806000606084860312156145805761457f614390565b5b600061458e868287016143de565b935050602061459f868287016143de565b92505060406145b086828701614414565b9150509250925092565b6145c3816142a8565b81146145ce57600080fd5b50565b6000813590506145e0816145ba565b92915050565b600080604083850312156145fd576145fc614390565b5b600061460b858286016143de565b925050602061461c858286016145d1565b9150509250929050565b600060ff82169050919050565b61463c81614626565b82525050565b60006020820190506146576000830184614633565b92915050565b614666816143b5565b82525050565b6000602082019050614681600083018461465d565b92915050565b6000806000606084860312156146a05761469f614390565b5b60006146ae86828701614414565b93505060206146bf86828701614414565b92505060406146d086828701614414565b9150509250925092565b6000602082840312156146f0576146ef614390565b5b60006146fe848285016145d1565b91505092915050565b6000806040838503121561471e5761471d614390565b5b600061472c858286016143de565b925050602061473d858286016143de565b9150509250929050565b600080600080600060a0868803121561476357614762614390565b5b600061477188828901614414565b955050602061478288828901614414565b945050604061479388828901614414565b93505060606147a488828901614414565b92505060806147b588828901614414565b9150509295509295909350565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147f86020836142e9565b9150614803826147c2565b602082019050919050565b60006020820190508181036000830152614827816147eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061487557607f821691505b6020821081036148885761488761482e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148c8826143f3565b91506148d3836143f3565b92508282026148e1816143f3565b915082820484148315176148f8576148f761488e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614939826143f3565b9150614944836143f3565b925082614954576149536148ff565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b60006149bb602f836142e9565b91506149c68261495f565b604082019050919050565b600060208201905081810360008301526149ea816149ae565b9050919050565b60006149fc826143f3565b9150614a07836143f3565b9250828201905080821115614a1f57614a1e61488e565b5b92915050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b6000614a5b601d836142e9565b9150614a6682614a25565b602082019050919050565b60006020820190508181036000830152614a8a81614a4e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614aed6039836142e9565b9150614af882614a91565b604082019050919050565b60006020820190508181036000830152614b1c81614ae0565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f312e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614b7f6024836142e9565b9150614b8a82614b23565b604082019050919050565b60006020820190508181036000830152614bae81614b72565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c116035836142e9565b9150614c1c82614bb5565b604082019050919050565b60006020820190508181036000830152614c4081614c04565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614ca36034836142e9565b9150614cae82614c47565b604082019050919050565b60006020820190508181036000830152614cd281614c96565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d356026836142e9565b9150614d4082614cd9565b604082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614da1601b836142e9565b9150614dac82614d6b565b602082019050919050565b60006020820190508181036000830152614dd081614d94565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e336024836142e9565b9150614e3e82614dd7565b604082019050919050565b60006020820190508181036000830152614e6281614e26565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ec56022836142e9565b9150614ed082614e69565b604082019050919050565b60006020820190508181036000830152614ef481614eb8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f576025836142e9565b9150614f6282614efb565b604082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fe96023836142e9565b9150614ff482614f8d565b604082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061507b6031836142e9565b91506150868261501f565b604082019050919050565b600060208201905081810360008301526150aa8161506e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150e76016836142e9565b91506150f2826150b1565b602082019050919050565b60006020820190508181036000830152615116816150da565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061519f6049836142e9565b91506151aa8261511d565b606082019050919050565b600060208201905081810360008301526151ce81615192565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006152316035836142e9565b915061523c826151d5565b604082019050919050565b6000602082019050818103600083015261526081615224565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061529d6013836142e9565b91506152a882615267565b602082019050919050565b600060208201905081810360008301526152cc81615290565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061532f6036836142e9565b915061533a826152d3565b604082019050919050565b6000602082019050818103600083015261535e81615322565b9050919050565b6000615370826143f3565b915061537b836143f3565b92508282039050818111156153935761539261488e565b5b92915050565b600081905092915050565b50565b60006153b4600083615399565b91506153bf826153a4565b600082019050919050565b60006153d5826153a7565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061543b6021836142e9565b9150615446826153df565b604082019050919050565b6000602082019050818103600083015261546a8161542e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154de816143c7565b92915050565b6000602082840312156154fa576154f9614390565b5b6000615508848285016154cf565b91505092915050565b6000819050919050565b600061553661553161552c84615511565b614496565b6143f3565b9050919050565b6155468161551b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615581816143b5565b82525050565b60006155938383615578565b60208301905092915050565b6000602082019050919050565b60006155b78261554c565b6155c18185615557565b93506155cc83615568565b8060005b838110156155fd5781516155e48882615587565b97506155ef8361559f565b9250506001810190506155d0565b5085935050505092915050565b600060a08201905061561f6000830188614510565b61562c602083018761553d565b818103604083015261563e81866155ac565b905061564d606083018561465d565b61565a6080830184614510565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b03af54540420f342c748281c8f14eb1645d2794303b9139357a67251e6a697d64736f6c63430008110033
Deployed Bytecode Sourcemap
30804:16801:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36538:136;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7932:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10165:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32449:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30883:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9052:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40393:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32167:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37342:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10841:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32084:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39484:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8894:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11704:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30941:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31203:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40558:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32041:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31896:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31283:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9223:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22982:148;;;;;;;;;;;;;:::i;:::-;;37894:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31018:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31789;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38267:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36159:148;;;;;;;;;;;;;:::i;:::-;;22340:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31055:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31931:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38159:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8151:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39651:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31863:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36359:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32207:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32007:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36682:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12500:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31321:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9579:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40161:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32670:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31243:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39294:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37627:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31707:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31088:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36853:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31755:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9842:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31130:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31826:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23285:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31969:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31170:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38678:608;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36538:136;36599:4;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36639:5:::1;36616:20;;:28;;;;;;;;;;;;;;;;;;36662:4;36655:11;;36538:136:::0;:::o;7932:100::-;7986:13;8019:5;8012:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7932:100;:::o;10165:194::-;10273:4;10290:39;10299:12;:10;:12::i;:::-;10313:7;10322:6;10290:8;:39::i;:::-;10347:4;10340:11;;10165:194;;;;:::o;32449:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;30883:51::-;;;:::o;9052:108::-;9113:7;9140:12;;9133:19;;9052:108;:::o;40393:157::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40500:9:::1;;;;;;;;;;;40472:38;;40489:9;40472:38;;;;;;;;;;;;40533:9;40521;;:21;;;;;;;;;;;;;;;;;;40393:157:::0;:::o;32167:33::-;;;;:::o;32127:::-;;;;:::o;37342:277::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37479:4:::1;37471;37466:1;37450:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37449:26;;;;:::i;:::-;37448:35;;;;:::i;:::-;37438:6;:45;;37416:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;37602:8;37592:6;:19;;;;:::i;:::-;37569:20;:42;;;;37342:277:::0;:::o;10841:454::-;10981:4;10998:36;11008:6;11016:9;11027:6;10998:9;:36::i;:::-;11045:220;11068:6;11089:12;:10;:12::i;:::-;11116:138;11172:6;11116:138;;;;;;;;;;;;;;;;;:11;:19;11128:6;11116:19;;;;;;;;;;;;;;;:33;11136:12;:10;:12::i;:::-;11116:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;11045:8;:220::i;:::-;11283:4;11276:11;;10841:454;;;;;:::o;32084:36::-;;;;:::o;39484:159::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39622:13:::1;39600:10;:19;39611:7;39600:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;39484:159:::0;;:::o;8894:93::-;8952:5;8977:2;8970:9;;8894:93;:::o;11704:293::-;11817:4;11834:133;11857:12;:10;:12::i;:::-;11884:7;11906:50;11945:10;11906:11;:25;11918:12;:10;:12::i;:::-;11906:25;;;;;;;;;;;;;;;:34;11932:7;11906:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11834:8;:133::i;:::-;11985:4;11978:11;;11704:293;;;;:::o;30941:38::-;;;:::o;31203:33::-;;;;;;;;;;;;;:::o;40558:126::-;40624:4;40648:19;:28;40668:7;40648:28;;;;;;;;;;;;;;;;;;;;;;;;;40641:35;;40558:126;;;:::o;32041:36::-;;;;:::o;31896:28::-;;;;:::o;31283:31::-;;;;;;;;;;;;;:::o;9223:143::-;9313:7;9340:9;:18;9350:7;9340:18;;;;;;;;;;;;;;;;9333:25;;9223:143;;;:::o;22982:148::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23089:1:::1;23052:40;;23073:6;;;;;;;;;;;23052:40;;;;;;;;;;;;23120:1;23103:6;;:19;;;;;;;;;;;;;;;;;;22982:148::o:0;37894:169::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38051:4:::1;38009:31;:39;38041:6;38009:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37894:169:::0;;:::o;31018:30::-;;;;;;;;;;;;;:::o;31789:::-;;;;:::o;38267:403::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38435:13:::1;38417:15;:31;;;;38477:13;38459:15;:31;;;;38513:7;38501:9;:19;;;;38582:9;;38564:15;;38546;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;38531:12;:60;;;;38626:2;38610:12;;:18;;38602:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38267:403:::0;;;:::o;36159:148::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36230:4:::1;36214:13;;:20;;;;;;;;;;;;;;;;;;36259:4;36245:11;;:18;;;;;;;;;;;;;;;;;;36287:12;36274:10;:25;;;;36159:148::o:0;22340:79::-;22378:7;22405:6;;;;;;;;;;;22398:13;;22340:79;:::o;31055:24::-;;;;;;;;;;;;;:::o;31931:31::-;;;;:::o;38159:100::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38244:7:::1;38230:11;;:21;;;;;;;;;;;;;;;;;;38159:100:::0;:::o;8151:104::-;8207:13;8240:7;8233:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8151:104;:::o;39651:306::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39797:13:::1;39789:21;;:4;:21;;::::0;39767:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39908:41;39937:4;39943:5;39908:28;:41::i;:::-;39651:306:::0;;:::o;31863:24::-;;;;:::o;36359:118::-;36408:4;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36442:5:::1;36425:14;;:22;;;;;;;;;;;;;;;;;;36465:4;36458:11;;36359:118:::0;:::o;32207:27::-;;;;:::o;32007:25::-;;;;:::o;36682:101::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36770:5:::1;36749:18;;:26;;;;;;;;;;;;;;;;;;36682:101:::0;:::o;12500:393::-;12618:4;12635:228;12658:12;:10;:12::i;:::-;12685:7;12707:145;12764:15;12707:145;;;;;;;;;;;;;;;;;:11;:25;12719:12;:10;:12::i;:::-;12707:25;;;;;;;;;;;;;;;:34;12733:7;12707:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;12635:8;:228::i;:::-;12881:4;12874:11;;12500:393;;;;:::o;31321:37::-;;;;;;;;;;;;;:::o;9579:200::-;9690:4;9707:42;9717:12;:10;:12::i;:::-;9731:9;9742:6;9707:9;:42::i;:::-;9767:4;9760:11;;9579:200;;;;:::o;40161:224::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40314:15:::1;;;;;;;;;;;40271:59;;40294:18;40271:59;;;;;;;;;;;;40359:18;40341:15;;:36;;;;;;;;;;;;;;;;;;40161:224:::0;:::o;32670:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;31243:33::-;;;;;;;;;;;;;:::o;39294:182::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39410:8:::1;39379:19;:28;39399:7;39379:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39450:7;39434:34;;;39459:8;39434:34;;;;;;:::i;:::-;;;;;;;;39294:182:::0;;:::o;37627:259::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37768:4:::1;37760;37754:2;37738:13;:11;:13::i;:::-;:18;;;;:::i;:::-;37737:27;;;;:::i;:::-;37736:36;;;;:::i;:::-;37726:6;:46;;37704:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;37869:8;37859:6;:19;;;;:::i;:::-;37847:9;:31;;;;37627:259:::0;:::o;31707:39::-;;;;;;;;;;;;;:::o;31088:35::-;;;;:::o;36853:481::-;36950:4;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37024:6:::1;37019:1;37003:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37002:28;;;;:::i;:::-;36989:9;:41;;36967:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;37179:4;37174:1;37158:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37157:26;;;;:::i;:::-;37144:9;:39;;37122:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;37295:9;37274:18;:30;;;;37322:4;37315:11;;36853:481:::0;;;:::o;31755:27::-;;;;:::o;9842:176::-;9956:7;9983:11;:18;9995:5;9983:18;;;;;;;;;;;;;;;:27;10002:7;9983:27;;;;;;;;;;;;;;;;9976:34;;9842:176;;;;:::o;31130:33::-;;;;:::o;31826:30::-;;;;:::o;23285:281::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23408:1:::1;23388:22;;:8;:22;;::::0;23366:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23521:8;23492:38;;23513:6;;;;;;;;;;;23492:38;;;;;;;;;;;;23550:8;23541:6;;:17;;;;;;;;;;;;;;;;;;23285:281:::0;:::o;31969:31::-;;;;:::o;31170:24::-;;;;:::o;38678:608::-;22562:12;:10;:12::i;:::-;22552:22;;:6;;;;;;;;;;;:22;;;22544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38930:13:::1;38911:16;:32;;;;38973:13;38954:16;:32;;;;39010:7;38997:10;:20;;;;39052:22;39028:21;:46;;;;39109:22;39085:21;:46;;;;39196:10;;39177:16;;39158;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;39142:13;:64;;;;39242:2;39225:13;;:19;;39217:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38678:608:::0;;;;;:::o;17262:181::-;17320:7;17340:9;17356:1;17352;:5;;;;:::i;:::-;17340:17;;17381:1;17376;:6;;17368:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17434:1;17427:8;;;17262:181;;;;:::o;103:98::-;156:7;183:10;176:17;;103:98;:::o;15884:380::-;16037:1;16020:19;;:5;:19;;;16012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16118:1;16099:21;;:7;:21;;;16091:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16202:6;16172:11;:18;16184:5;16172:18;;;;;;;;;;;;;;;:27;16191:7;16172:27;;;;;;;;;;;;;;;:36;;;;16240:7;16224:32;;16233:5;16224:32;;;16249:6;16224:32;;;;;;:::i;:::-;;;;;;;;15884:380;;;:::o;40742:5121::-;40890:1;40874:18;;:4;:18;;;40866:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40967:1;40953:16;;:2;:16;;;40945:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41043:10;:14;41054:2;41043:14;;;;;;;;;;;;;;;;;;;;;;;;;41042:15;:36;;;;;41062:10;:16;41073:4;41062:16;;;;;;;;;;;;;;;;;;;;;;;;;41061:17;41042:36;41020:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;41180:1;41170:6;:11;41166:93;;41198:28;41214:4;41220:2;41224:1;41198:15;:28::i;:::-;41241:7;;41166:93;41275:14;;;;;;;;;;;41271:2487;;;41336:7;:5;:7::i;:::-;41328:15;;:4;:15;;;;:49;;;;;41370:7;:5;:7::i;:::-;41364:13;;:2;:13;;;;41328:49;:86;;;;;41412:1;41398:16;;:2;:16;;;;41328:86;:128;;;;;41449:6;41435:21;;:2;:21;;;;41328:128;:158;;;;;41478:8;;;;;;;;;;;41477:9;41328:158;41306:2441;;;41526:13;;;;;;;;;;;41521:223;;41598:19;:25;41618:4;41598:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41627:19;:23;41647:2;41627:23;;;;;;;;;;;;;;;;;;;;;;;;;41598:52;41564:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;41521:223;41900:20;;;;;;;;;;;41896:641;;;41981:7;:5;:7::i;:::-;41975:13;;:2;:13;;;;:72;;;;;42031:15;42017:30;;:2;:30;;;;41975:72;:129;;;;;42090:13;42076:28;;:2;:28;;;;41975:129;41945:573;;;42268:12;42193:28;:39;42222:9;42193:39;;;;;;;;;;;;;;;;:87;42155:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;42482:12;42440:28;:39;42469:9;42440:39;;;;;;;;;;;;;;;:54;;;;41945:573;41896:641;42611:25;:31;42637:4;42611:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;42668:31;:35;42700:2;42668:35;;;;;;;;;;;;;;;;;;;;;;;;;42667:36;42611:92;42585:1147;;;42790:20;;42780:6;:30;;42746:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;42998:9;;42981:13;42991:2;42981:9;:13::i;:::-;42972:6;:22;;;;:::i;:::-;:35;;42938:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42585:1147;;;43176:25;:29;43202:2;43176:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43231:31;:37;43263:4;43231:37;;;;;;;;;;;;;;;;;;;;;;;;;43230:38;43176:92;43150:582;;;43355:20;;43345:6;:30;;43311:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;43150:582;;;43512:31;:35;43544:2;43512:35;;;;;;;;;;;;;;;;;;;;;;;;;43507:225;;43632:9;;43615:13;43625:2;43615:9;:13::i;:::-;43606:6;:22;;;;:::i;:::-;:35;;43572:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43507:225;43150:582;42585:1147;41306:2441;41271:2487;43845:1;43832:10;;:14;;;;:::i;:::-;43815:12;:32;;:68;;;;;43870:13;43864:19;;:2;:19;;;;43815:68;:142;;;;;43914:42;43900:57;;:2;:57;;;;43815:142;43797:221;;;44001:5;43984:10;:14;43995:2;43984:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;43797:221;44030:28;44061:24;44079:4;44061:9;:24::i;:::-;44030:55;;44098:12;44137:18;;44113:20;:42;;44098:57;;44186:7;:35;;;;;44210:11;;;;;;;;;;;44186:35;:61;;;;;44239:8;;;;;;;;;;;44238:9;44186:61;:110;;;;;44265:25;:31;44291:4;44265:31;;;;;;;;;;;;;;;;;;;;;;;;;44264:32;44186:110;:153;;;;;44314:19;:25;44334:4;44314:25;;;;;;;;;;;;;;;;;;;;;;;;;44313:26;44186:153;:194;;;;;44357:19;:23;44377:2;44357:23;;;;;;;;;;;;;;;;;;;;;;;;;44356:24;44186:194;44168:326;;;44418:4;44407:8;;:15;;;;;;;;;;;;;;;;;;44439:10;:8;:10::i;:::-;44477:5;44466:8;;:16;;;;;;;;;;;;;;;;;;44168:326;44506:12;44522:8;;;;;;;;;;;44521:9;44506:24;;44632:19;:25;44652:4;44632:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;44661:19;:23;44681:2;44661:23;;;;;;;;;;;;;;;;;;;;;;;;;44632:52;44628:100;;;44711:5;44701:15;;44628:100;44740:12;44845:7;44841:969;;;44897:25;:29;44923:2;44897:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;44946:1;44930:13;;:17;44897:50;44893:768;;;44975:34;45005:3;44975:25;44986:13;;44975:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;44968:41;;45078:13;;45058:16;;45051:4;:23;;;;:::i;:::-;45050:41;;;;:::i;:::-;45028:18;;:63;;;;;;;:::i;:::-;;;;;;;;45148:13;;45134:10;;45127:4;:17;;;;:::i;:::-;45126:35;;;;:::i;:::-;45110:12;;:51;;;;;;;:::i;:::-;;;;;;;;45230:13;;45210:16;;45203:4;:23;;;;:::i;:::-;45202:41;;;;:::i;:::-;45180:18;;:63;;;;;;;:::i;:::-;;;;;;;;44893:768;;;45305:25;:31;45331:4;45305:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;45355:1;45340:12;;:16;45305:51;45301:360;;;45384:33;45413:3;45384:24;45395:12;;45384:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;45377:40;;45485:12;;45466:15;;45459:4;:22;;;;:::i;:::-;45458:39;;;;:::i;:::-;45436:18;;:61;;;;;;;:::i;:::-;;;;;;;;45553:12;;45540:9;;45533:4;:16;;;;:::i;:::-;45532:33;;;;:::i;:::-;45516:12;;:49;;;;;;;:::i;:::-;;;;;;;;45633:12;;45614:15;;45607:4;:22;;;;:::i;:::-;45606:39;;;;:::i;:::-;45584:18;;:61;;;;;;;:::i;:::-;;;;;;;;45301:360;44893:768;45688:1;45681:4;:8;45677:91;;;45710:42;45726:4;45740;45747;45710:15;:42::i;:::-;45677:91;45794:4;45784:14;;;;;:::i;:::-;;;44841:969;45822:33;45838:4;45844:2;45848:6;45822:15;:33::i;:::-;40855:5008;;;;40742:5121;;;;:::o;18165:226::-;18285:7;18318:1;18313;:6;;18321:12;18305:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18345:9;18361:1;18357;:5;;;;:::i;:::-;18345:17;;18382:1;18375:8;;;18165:226;;;;;:::o;39965:188::-;40082:5;40048:25;:31;40074:4;40048:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40139:5;40105:40;;40133:4;40105:40;;;;;;;;;;;;39965:188;;:::o;13383:610::-;13541:1;13523:20;;:6;:20;;;13515:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13625:1;13604:23;;:9;:23;;;13596:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13680:47;13701:6;13709:9;13720:6;13680:20;:47::i;:::-;13760:108;13796:6;13760:108;;;;;;;;;;;;;;;;;:9;:17;13770:6;13760:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;13740:9;:17;13750:6;13740:17;;;;;;;;;;;;;;;:128;;;;13902:32;13927:6;13902:9;:20;13912:9;13902:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13879:9;:20;13889:9;13879:20;;;;;;;;;;;;;;;:55;;;;13967:9;13950:35;;13959:6;13950:35;;;13978:6;13950:35;;;;;;:::i;:::-;;;;;;;;13383:610;;;:::o;46382:1220::-;46421:23;46447:24;46465:4;46447:9;:24::i;:::-;46421:50;;46482:25;46578:12;;46544:18;;46510;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;46482:108;;46601:12;46649:1;46630:15;:20;:46;;;;46675:1;46654:17;:22;46630:46;46626:85;;;46693:7;;;;;46626:85;46766:2;46745:18;;:23;;;;:::i;:::-;46727:15;:41;46723:115;;;46824:2;46803:18;;:23;;;;:::i;:::-;46785:41;;46723:115;46850:23;46963:1;46930:17;46895:18;;46877:15;:36;;;;:::i;:::-;46876:71;;;;:::i;:::-;:88;;;;:::i;:::-;46850:114;;46975:26;47004:36;47024:15;47004;:19;;:36;;;;:::i;:::-;46975:65;;47053:25;47081:21;47053:49;;47115:36;47132:18;47115:16;:36::i;:::-;47164:18;47185:44;47211:17;47185:21;:25;;:44;;;;:::i;:::-;47164:65;;47242:17;47262:51;47295:17;47262:28;47277:12;;47262:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;47242:71;;47347:1;47326:18;:22;;;;47380:1;47359:18;:22;;;;47407:1;47392:12;:16;;;;47443:9;;;;;;;;;;;47435:23;;47466:9;47435:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47421:59;;;;;47515:15;;;;;;;;;;;47507:29;;47558:21;47507:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47493:101;;;;;46410:1192;;;;;;;;46382:1220;:::o;18650:471::-;18708:7;18958:1;18953;:6;18949:47;;18983:1;18976:8;;;;18949:47;19008:9;19024:1;19020;:5;;;;:::i;:::-;19008:17;;19053:1;19048;19044;:5;;;;:::i;:::-;:10;19036:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19112:1;19105:8;;;18650:471;;;;;:::o;19597:132::-;19655:7;19682:39;19686:1;19689;19682:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19675:46;;19597:132;;;;:::o;16867:125::-;;;;:::o;17726:136::-;17784:7;17811:43;17815:1;17818;17811:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17804:50;;17726:136;;;;:::o;45871:503::-;45937:21;45975:1;45961:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45937:40;;46006:4;45988;45993:1;45988:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46032:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46022:4;46027:1;46022:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;46067:62;46084:4;46099:15;46117:11;46067:8;:62::i;:::-;46142:15;:66;;;46223:11;46249:1;46293:4;46320;46340:15;46142:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45926:448;45871:503;:::o;20225:312::-;20345:7;20377:1;20373;:5;20380:12;20365:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20404:9;20420:1;20416;:5;;;;:::i;:::-;20404:17;;20528:1;20521:8;;;20225:312;;;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:99::-;486:6;520:5;514:12;504:22;;434:99;;;:::o;539:169::-;623:11;657:6;652:3;645:19;697:4;692:3;688:14;673:29;;539:169;;;;:::o;714:246::-;795:1;805:113;819:6;816:1;813:13;805:113;;;904:1;899:3;895:11;889:18;885:1;880:3;876:11;869:39;841:2;838:1;834:10;829:15;;805:113;;;952:1;943:6;938:3;934:16;927:27;776:184;714:246;;;:::o;966:102::-;1007:6;1058:2;1054:7;1049:2;1042:5;1038:14;1034:28;1024:38;;966:102;;;:::o;1074:377::-;1162:3;1190:39;1223:5;1190:39;:::i;:::-;1245:71;1309:6;1304:3;1245:71;:::i;:::-;1238:78;;1325:65;1383:6;1378:3;1371:4;1364:5;1360:16;1325:65;:::i;:::-;1415:29;1437:6;1415:29;:::i;:::-;1410:3;1406:39;1399:46;;1166:285;1074:377;;;;:::o;1457:313::-;1570:4;1608:2;1597:9;1593:18;1585:26;;1657:9;1651:4;1647:20;1643:1;1632:9;1628:17;1621:47;1685:78;1758:4;1749:6;1685:78;:::i;:::-;1677:86;;1457:313;;;;:::o;1857:117::-;1966:1;1963;1956:12;2103:126;2140:7;2180:42;2173:5;2169:54;2158:65;;2103:126;;;:::o;2235:96::-;2272:7;2301:24;2319:5;2301:24;:::i;:::-;2290:35;;2235:96;;;:::o;2337:122::-;2410:24;2428:5;2410:24;:::i;:::-;2403:5;2400:35;2390:63;;2449:1;2446;2439:12;2390:63;2337:122;:::o;2465:139::-;2511:5;2549:6;2536:20;2527:29;;2565:33;2592:5;2565:33;:::i;:::-;2465:139;;;;:::o;2610:77::-;2647:7;2676:5;2665:16;;2610:77;;;:::o;2693:122::-;2766:24;2784:5;2766:24;:::i;:::-;2759:5;2756:35;2746:63;;2805:1;2802;2795:12;2746:63;2693:122;:::o;2821:139::-;2867:5;2905:6;2892:20;2883:29;;2921:33;2948:5;2921:33;:::i;:::-;2821:139;;;;:::o;2966:474::-;3034:6;3042;3091:2;3079:9;3070:7;3066:23;3062:32;3059:119;;;3097:79;;:::i;:::-;3059:119;3217:1;3242:53;3287:7;3278:6;3267:9;3263:22;3242:53;:::i;:::-;3232:63;;3188:117;3344:2;3370:53;3415:7;3406:6;3395:9;3391:22;3370:53;:::i;:::-;3360:63;;3315:118;2966:474;;;;;:::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:116::-;6141:21;6156:5;6141:21;:::i;:::-;6134:5;6131:32;6121:60;;6177:1;6174;6167:12;6121:60;6071:116;:::o;6193:133::-;6236:5;6274:6;6261:20;6252:29;;6290:30;6314:5;6290:30;:::i;:::-;6193:133;;;;:::o;6332:468::-;6397:6;6405;6454:2;6442:9;6433:7;6429:23;6425:32;6422:119;;;6460:79;;:::i;:::-;6422:119;6580:1;6605:53;6650:7;6641:6;6630:9;6626:22;6605:53;:::i;:::-;6595:63;;6551:117;6707:2;6733:50;6775:7;6766:6;6755:9;6751:22;6733:50;:::i;:::-;6723:60;;6678:115;6332:468;;;;;:::o;6806:86::-;6841:7;6881:4;6874:5;6870:16;6859:27;;6806:86;;;:::o;6898:112::-;6981:22;6997:5;6981:22;:::i;:::-;6976:3;6969:35;6898:112;;:::o;7016:214::-;7105:4;7143:2;7132:9;7128:18;7120:26;;7156:67;7220:1;7209:9;7205:17;7196:6;7156:67;:::i;:::-;7016:214;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::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:911::-;9117:6;9125;9133;9141;9149;9198:3;9186:9;9177:7;9173:23;9169:33;9166:120;;;9205:79;;:::i;:::-;9166:120;9325:1;9350:53;9395:7;9386:6;9375:9;9371:22;9350:53;:::i;:::-;9340:63;;9296:117;9452:2;9478:53;9523:7;9514:6;9503:9;9499:22;9478:53;:::i;:::-;9468:63;;9423:118;9580:2;9606:53;9651:7;9642:6;9631:9;9627:22;9606:53;:::i;:::-;9596:63;;9551:118;9708:2;9734:53;9779:7;9770:6;9759:9;9755:22;9734:53;:::i;:::-;9724:63;;9679:118;9836:3;9863:53;9908:7;9899:6;9888:9;9884:22;9863:53;:::i;:::-;9853:63;;9807:119;9022:911;;;;;;;;:::o;9939:182::-;10079:34;10075:1;10067:6;10063:14;10056:58;9939:182;:::o;10127:366::-;10269:3;10290:67;10354:2;10349:3;10290:67;:::i;:::-;10283:74;;10366:93;10455:3;10366:93;:::i;:::-;10484:2;10479:3;10475:12;10468:19;;10127:366;;;:::o;10499:419::-;10665:4;10703:2;10692:9;10688:18;10680:26;;10752:9;10746:4;10742:20;10738:1;10727:9;10723:17;10716:47;10780:131;10906:4;10780:131;:::i;:::-;10772:139;;10499:419;;;:::o;10924:180::-;10972:77;10969:1;10962:88;11069:4;11066:1;11059:15;11093:4;11090:1;11083:15;11110:320;11154:6;11191:1;11185:4;11181:12;11171:22;;11238:1;11232:4;11228:12;11259:18;11249:81;;11315:4;11307:6;11303:17;11293:27;;11249:81;11377:2;11369:6;11366:14;11346:18;11343:38;11340:84;;11396:18;;:::i;:::-;11340:84;11161:269;11110:320;;;:::o;11436:180::-;11484:77;11481:1;11474:88;11581:4;11578:1;11571:15;11605:4;11602:1;11595:15;11622:410;11662:7;11685:20;11703:1;11685:20;:::i;:::-;11680:25;;11719:20;11737:1;11719:20;:::i;:::-;11714:25;;11774:1;11771;11767:9;11796:30;11814:11;11796:30;:::i;:::-;11785:41;;11975:1;11966:7;11962:15;11959:1;11956:22;11936:1;11929:9;11909:83;11886:139;;12005:18;;:::i;:::-;11886:139;11670:362;11622:410;;;;:::o;12038:180::-;12086:77;12083:1;12076:88;12183:4;12180:1;12173:15;12207:4;12204:1;12197:15;12224:185;12264:1;12281:20;12299:1;12281:20;:::i;:::-;12276:25;;12315:20;12333:1;12315:20;:::i;:::-;12310:25;;12354:1;12344:35;;12359:18;;:::i;:::-;12344:35;12401:1;12398;12394:9;12389:14;;12224:185;;;;:::o;12415:234::-;12555:34;12551:1;12543:6;12539:14;12532:58;12624:17;12619:2;12611:6;12607:15;12600:42;12415:234;:::o;12655:366::-;12797:3;12818:67;12882:2;12877:3;12818:67;:::i;:::-;12811:74;;12894:93;12983:3;12894:93;:::i;:::-;13012:2;13007:3;13003:12;12996:19;;12655:366;;;:::o;13027:419::-;13193:4;13231:2;13220:9;13216:18;13208:26;;13280:9;13274:4;13270:20;13266:1;13255:9;13251:17;13244:47;13308:131;13434:4;13308:131;:::i;:::-;13300:139;;13027:419;;;:::o;13452:191::-;13492:3;13511:20;13529:1;13511:20;:::i;:::-;13506:25;;13545:20;13563:1;13545:20;:::i;:::-;13540:25;;13588:1;13585;13581:9;13574:16;;13609:3;13606:1;13603:10;13600:36;;;13616:18;;:::i;:::-;13600:36;13452:191;;;;:::o;13649:179::-;13789:31;13785:1;13777:6;13773:14;13766:55;13649:179;:::o;13834:366::-;13976:3;13997:67;14061:2;14056:3;13997:67;:::i;:::-;13990:74;;14073:93;14162:3;14073:93;:::i;:::-;14191:2;14186:3;14182:12;14175:19;;13834:366;;;:::o;14206:419::-;14372:4;14410:2;14399:9;14395:18;14387:26;;14459:9;14453:4;14449:20;14445:1;14434:9;14430:17;14423:47;14487:131;14613:4;14487:131;:::i;:::-;14479:139;;14206:419;;;:::o;14631:244::-;14771:34;14767:1;14759:6;14755:14;14748:58;14840:27;14835:2;14827:6;14823:15;14816:52;14631:244;:::o;14881:366::-;15023:3;15044:67;15108:2;15103:3;15044:67;:::i;:::-;15037:74;;15120:93;15209:3;15120:93;:::i;:::-;15238:2;15233:3;15229:12;15222:19;;14881:366;;;:::o;15253:419::-;15419:4;15457:2;15446:9;15442:18;15434:26;;15506:9;15500:4;15496:20;15492:1;15481:9;15477:17;15470:47;15534:131;15660:4;15534:131;:::i;:::-;15526:139;;15253:419;;;:::o;15678:223::-;15818:34;15814:1;15806:6;15802:14;15795:58;15887:6;15882:2;15874:6;15870:15;15863:31;15678:223;:::o;15907:366::-;16049:3;16070:67;16134:2;16129:3;16070:67;:::i;:::-;16063:74;;16146:93;16235:3;16146:93;:::i;:::-;16264:2;16259:3;16255:12;16248:19;;15907:366;;;:::o;16279:419::-;16445:4;16483:2;16472:9;16468:18;16460:26;;16532:9;16526:4;16522:20;16518:1;16507:9;16503:17;16496:47;16560:131;16686:4;16560:131;:::i;:::-;16552:139;;16279:419;;;:::o;16704:240::-;16844:34;16840:1;16832:6;16828:14;16821:58;16913:23;16908:2;16900:6;16896:15;16889:48;16704:240;:::o;16950:366::-;17092:3;17113:67;17177:2;17172:3;17113:67;:::i;:::-;17106:74;;17189:93;17278:3;17189:93;:::i;:::-;17307:2;17302:3;17298:12;17291:19;;16950:366;;;:::o;17322:419::-;17488:4;17526:2;17515:9;17511:18;17503:26;;17575:9;17569:4;17565:20;17561:1;17550:9;17546:17;17539:47;17603:131;17729:4;17603:131;:::i;:::-;17595:139;;17322:419;;;:::o;17747:239::-;17887:34;17883:1;17875:6;17871:14;17864:58;17956:22;17951:2;17943:6;17939:15;17932:47;17747:239;:::o;17992:366::-;18134:3;18155:67;18219:2;18214:3;18155:67;:::i;:::-;18148:74;;18231:93;18320:3;18231:93;:::i;:::-;18349:2;18344:3;18340:12;18333:19;;17992:366;;;:::o;18364:419::-;18530:4;18568:2;18557:9;18553:18;18545:26;;18617:9;18611:4;18607:20;18603:1;18592:9;18588:17;18581:47;18645:131;18771:4;18645:131;:::i;:::-;18637:139;;18364:419;;;:::o;18789:225::-;18929:34;18925:1;18917:6;18913:14;18906:58;18998:8;18993:2;18985:6;18981:15;18974:33;18789:225;:::o;19020:366::-;19162:3;19183:67;19247:2;19242:3;19183:67;:::i;:::-;19176:74;;19259:93;19348:3;19259:93;:::i;:::-;19377:2;19372:3;19368:12;19361:19;;19020:366;;;:::o;19392:419::-;19558:4;19596:2;19585:9;19581:18;19573:26;;19645:9;19639:4;19635:20;19631:1;19620:9;19616:17;19609:47;19673:131;19799:4;19673:131;:::i;:::-;19665:139;;19392:419;;;:::o;19817:177::-;19957:29;19953:1;19945:6;19941:14;19934:53;19817:177;:::o;20000:366::-;20142:3;20163:67;20227:2;20222:3;20163:67;:::i;:::-;20156:74;;20239:93;20328:3;20239:93;:::i;:::-;20357:2;20352:3;20348:12;20341:19;;20000:366;;;:::o;20372:419::-;20538:4;20576:2;20565:9;20561:18;20553:26;;20625:9;20619:4;20615:20;20611:1;20600:9;20596:17;20589:47;20653:131;20779:4;20653:131;:::i;:::-;20645:139;;20372:419;;;:::o;20797:223::-;20937:34;20933:1;20925:6;20921:14;20914:58;21006:6;21001:2;20993:6;20989:15;20982:31;20797:223;:::o;21026:366::-;21168:3;21189:67;21253:2;21248:3;21189:67;:::i;:::-;21182:74;;21265:93;21354:3;21265:93;:::i;:::-;21383:2;21378:3;21374:12;21367:19;;21026:366;;;:::o;21398:419::-;21564:4;21602:2;21591:9;21587:18;21579:26;;21651:9;21645:4;21641:20;21637:1;21626:9;21622:17;21615:47;21679:131;21805:4;21679:131;:::i;:::-;21671:139;;21398:419;;;:::o;21823:221::-;21963:34;21959:1;21951:6;21947:14;21940:58;22032:4;22027:2;22019:6;22015:15;22008:29;21823:221;:::o;22050:366::-;22192:3;22213:67;22277:2;22272:3;22213:67;:::i;:::-;22206:74;;22289:93;22378:3;22289:93;:::i;:::-;22407:2;22402:3;22398:12;22391:19;;22050:366;;;:::o;22422:419::-;22588:4;22626:2;22615:9;22611:18;22603:26;;22675:9;22669:4;22665:20;22661:1;22650:9;22646:17;22639:47;22703:131;22829:4;22703:131;:::i;:::-;22695:139;;22422:419;;;:::o;22847:224::-;22987:34;22983:1;22975:6;22971:14;22964:58;23056:7;23051:2;23043:6;23039:15;23032:32;22847:224;:::o;23077:366::-;23219:3;23240:67;23304:2;23299:3;23240:67;:::i;:::-;23233:74;;23316:93;23405:3;23316:93;:::i;:::-;23434:2;23429:3;23425:12;23418:19;;23077:366;;;:::o;23449:419::-;23615:4;23653:2;23642:9;23638:18;23630:26;;23702:9;23696:4;23692:20;23688:1;23677:9;23673:17;23666:47;23730:131;23856:4;23730:131;:::i;:::-;23722:139;;23449:419;;;:::o;23874:222::-;24014:34;24010:1;24002:6;23998:14;23991:58;24083:5;24078:2;24070:6;24066:15;24059:30;23874:222;:::o;24102:366::-;24244:3;24265:67;24329:2;24324:3;24265:67;:::i;:::-;24258:74;;24341:93;24430:3;24341:93;:::i;:::-;24459:2;24454:3;24450:12;24443:19;;24102:366;;;:::o;24474:419::-;24640:4;24678:2;24667:9;24663:18;24655:26;;24727:9;24721:4;24717:20;24713:1;24702:9;24698:17;24691:47;24755:131;24881:4;24755:131;:::i;:::-;24747:139;;24474:419;;;:::o;24899:236::-;25039:34;25035:1;25027:6;25023:14;25016:58;25108:19;25103:2;25095:6;25091:15;25084:44;24899:236;:::o;25141:366::-;25283:3;25304:67;25368:2;25363:3;25304:67;:::i;:::-;25297:74;;25380:93;25469:3;25380:93;:::i;:::-;25498:2;25493:3;25489:12;25482:19;;25141:366;;;:::o;25513:419::-;25679:4;25717:2;25706:9;25702:18;25694:26;;25766:9;25760:4;25756:20;25752:1;25741:9;25737:17;25730:47;25794:131;25920:4;25794:131;:::i;:::-;25786:139;;25513:419;;;:::o;25938:172::-;26078:24;26074:1;26066:6;26062:14;26055:48;25938:172;:::o;26116:366::-;26258:3;26279:67;26343:2;26338:3;26279:67;:::i;:::-;26272:74;;26355:93;26444:3;26355:93;:::i;:::-;26473:2;26468:3;26464:12;26457:19;;26116:366;;;:::o;26488:419::-;26654:4;26692:2;26681:9;26677:18;26669:26;;26741:9;26735:4;26731:20;26727:1;26716:9;26712:17;26705:47;26769:131;26895:4;26769:131;:::i;:::-;26761:139;;26488:419;;;:::o;26913:297::-;27053:34;27049:1;27041:6;27037:14;27030:58;27122:34;27117:2;27109:6;27105:15;27098:59;27191:11;27186:2;27178:6;27174:15;27167:36;26913:297;:::o;27216:366::-;27358:3;27379:67;27443:2;27438:3;27379:67;:::i;:::-;27372:74;;27455:93;27544:3;27455:93;:::i;:::-;27573:2;27568:3;27564:12;27557:19;;27216:366;;;:::o;27588:419::-;27754:4;27792:2;27781:9;27777:18;27769:26;;27841:9;27835:4;27831:20;27827:1;27816:9;27812:17;27805:47;27869:131;27995:4;27869:131;:::i;:::-;27861:139;;27588:419;;;:::o;28013:240::-;28153:34;28149:1;28141:6;28137:14;28130:58;28222:23;28217:2;28209:6;28205:15;28198:48;28013:240;:::o;28259:366::-;28401:3;28422:67;28486:2;28481:3;28422:67;:::i;:::-;28415:74;;28498:93;28587:3;28498:93;:::i;:::-;28616:2;28611:3;28607:12;28600:19;;28259:366;;;:::o;28631:419::-;28797:4;28835:2;28824:9;28820:18;28812:26;;28884:9;28878:4;28874:20;28870:1;28859:9;28855:17;28848:47;28912:131;29038:4;28912:131;:::i;:::-;28904:139;;28631:419;;;:::o;29056:169::-;29196:21;29192:1;29184:6;29180:14;29173:45;29056:169;:::o;29231:366::-;29373:3;29394:67;29458:2;29453:3;29394:67;:::i;:::-;29387:74;;29470:93;29559:3;29470:93;:::i;:::-;29588:2;29583:3;29579:12;29572:19;;29231:366;;;:::o;29603:419::-;29769:4;29807:2;29796:9;29792:18;29784:26;;29856:9;29850:4;29846:20;29842:1;29831:9;29827:17;29820:47;29884:131;30010:4;29884:131;:::i;:::-;29876:139;;29603:419;;;:::o;30028:241::-;30168:34;30164:1;30156:6;30152:14;30145:58;30237:24;30232:2;30224:6;30220:15;30213:49;30028:241;:::o;30275:366::-;30417:3;30438:67;30502:2;30497:3;30438:67;:::i;:::-;30431:74;;30514:93;30603:3;30514:93;:::i;:::-;30632:2;30627:3;30623:12;30616:19;;30275:366;;;:::o;30647:419::-;30813:4;30851:2;30840:9;30836:18;30828:26;;30900:9;30894:4;30890:20;30886:1;30875:9;30871:17;30864:47;30928:131;31054:4;30928:131;:::i;:::-;30920:139;;30647:419;;;:::o;31072:194::-;31112:4;31132:20;31150:1;31132:20;:::i;:::-;31127:25;;31166:20;31184:1;31166:20;:::i;:::-;31161:25;;31210:1;31207;31203:9;31195:17;;31234:1;31228:4;31225:11;31222:37;;;31239:18;;:::i;:::-;31222:37;31072:194;;;;:::o;31272:147::-;31373:11;31410:3;31395:18;;31272:147;;;;:::o;31425:114::-;;:::o;31545:398::-;31704:3;31725:83;31806:1;31801:3;31725:83;:::i;:::-;31718:90;;31817:93;31906:3;31817:93;:::i;:::-;31935:1;31930:3;31926:11;31919:18;;31545:398;;;:::o;31949:379::-;32133:3;32155:147;32298:3;32155:147;:::i;:::-;32148:154;;32319:3;32312:10;;31949:379;;;:::o;32334:220::-;32474:34;32470:1;32462:6;32458:14;32451:58;32543:3;32538:2;32530:6;32526:15;32519:28;32334:220;:::o;32560:366::-;32702:3;32723:67;32787:2;32782:3;32723:67;:::i;:::-;32716:74;;32799:93;32888:3;32799:93;:::i;:::-;32917:2;32912:3;32908:12;32901:19;;32560:366;;;:::o;32932:419::-;33098:4;33136:2;33125:9;33121:18;33113:26;;33185:9;33179:4;33175:20;33171:1;33160:9;33156:17;33149:47;33213:131;33339:4;33213:131;:::i;:::-;33205:139;;32932:419;;;:::o;33357:180::-;33405:77;33402:1;33395:88;33502:4;33499:1;33492:15;33526:4;33523:1;33516:15;33543:180;33591:77;33588:1;33581:88;33688:4;33685:1;33678:15;33712:4;33709:1;33702:15;33729:143;33786:5;33817:6;33811:13;33802:22;;33833:33;33860:5;33833:33;:::i;:::-;33729:143;;;;:::o;33878:351::-;33948:6;33997:2;33985:9;33976:7;33972:23;33968:32;33965:119;;;34003:79;;:::i;:::-;33965:119;34123:1;34148:64;34204:7;34195:6;34184:9;34180:22;34148:64;:::i;:::-;34138:74;;34094:128;33878:351;;;;:::o;34235:85::-;34280:7;34309:5;34298:16;;34235:85;;;:::o;34326:158::-;34384:9;34417:61;34435:42;34444:32;34470:5;34444:32;:::i;:::-;34435:42;:::i;:::-;34417:61;:::i;:::-;34404:74;;34326:158;;;:::o;34490:147::-;34585:45;34624:5;34585:45;:::i;:::-;34580:3;34573:58;34490:147;;:::o;34643:114::-;34710:6;34744:5;34738:12;34728:22;;34643:114;;;:::o;34763:184::-;34862:11;34896:6;34891:3;34884:19;34936:4;34931:3;34927:14;34912:29;;34763:184;;;;:::o;34953:132::-;35020:4;35043:3;35035:11;;35073:4;35068:3;35064:14;35056:22;;34953:132;;;:::o;35091:108::-;35168:24;35186:5;35168:24;:::i;:::-;35163:3;35156:37;35091:108;;:::o;35205:179::-;35274:10;35295:46;35337:3;35329:6;35295:46;:::i;:::-;35373:4;35368:3;35364:14;35350:28;;35205:179;;;;:::o;35390:113::-;35460:4;35492;35487:3;35483:14;35475:22;;35390:113;;;:::o;35539:732::-;35658:3;35687:54;35735:5;35687:54;:::i;:::-;35757:86;35836:6;35831:3;35757:86;:::i;:::-;35750:93;;35867:56;35917:5;35867:56;:::i;:::-;35946:7;35977:1;35962:284;35987:6;35984:1;35981:13;35962:284;;;36063:6;36057:13;36090:63;36149:3;36134:13;36090:63;:::i;:::-;36083:70;;36176:60;36229:6;36176:60;:::i;:::-;36166:70;;36022:224;36009:1;36006;36002:9;35997:14;;35962:284;;;35966:14;36262:3;36255:10;;35663:608;;;35539:732;;;;:::o;36277:831::-;36540:4;36578:3;36567:9;36563:19;36555:27;;36592:71;36660:1;36649:9;36645:17;36636:6;36592:71;:::i;:::-;36673:80;36749:2;36738:9;36734:18;36725:6;36673:80;:::i;:::-;36800:9;36794:4;36790:20;36785:2;36774:9;36770:18;36763:48;36828:108;36931:4;36922:6;36828:108;:::i;:::-;36820:116;;36946:72;37014:2;37003:9;36999:18;36990:6;36946:72;:::i;:::-;37028:73;37096:3;37085:9;37081:19;37072:6;37028:73;:::i;:::-;36277:831;;;;;;;;:::o
Swarm Source
ipfs://b03af54540420f342c748281c8f14eb1645d2794303b9139357a67251e6a697d
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.