ERC-20
Overview
Max Total Supply
1,000,000,000 PYRO
Holders
146
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
756,529.477948159379316692 PYROValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PYRO
Compiler Version
v0.8.22+commit.4fc1097e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-01-11 */ /* https://www.pyrocontract.com/ https://twitter.com/PyroContract https://t.me/pyroeth */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract 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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } contract PYRO is IERC20, Ownable { using SafeMath for uint256; address private constant DEAD = address(0xdead); address private constant ZERO = address(0); address private devAddress = address(0xe5fBF047201c9F038e24C61A64583fa734af1ae5); address private treasuryAddress = address(0xe5fBF047201c9F038e24C61A64583fa734af1ae5); address private marketingAddress = address(0xe5fBF047201c9F038e24C61A64583fa734af1ae5); address private liquidityAddress = address(0x7ffF15a1cee6dD5f0C90A1589C54642C4F6505f6); /** * Token Assets * name, symbol, _decimals totalSupply * This will be defined when we deploy the contract. */ string private _name = "PYRO"; string private _symbol = "PYRO"; uint8 private _decimals = 18; uint256 private _totalSupply = 1_000_000_000 * (10 ** _decimals); // 1 billion mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; bool public enableTrading = true; bool public enableSwap = false; uint256 public maxBalance = _totalSupply * 2 / 100; // 2% uint256 public maxTx = _totalSupply * 2 / 100; // 2% uint256 public swapThreshold = (_totalSupply * 4) / 10000; // 0.04% uint256 _buyMarketingFee = 25; uint256 _buyLiquidityFee = 0; uint256 _buyReflectionFee = 0; uint256 _buyTreasuryFee = 0; uint256 _sellMarketingFee = 25; uint256 _sellLiquidityFee = 0; uint256 _sellReflectionFee = 0; uint256 _sellTreasuryFee = 0; uint256 public marketingDebt = 0; uint256 public liquidityDebt = 0; uint256 public treasuryDebt = 0; /** * Mode & Fee * mode0 = prefee system * mode1(BuyTax: treasury=0%, SellTax: treasury=0%) * mode2(BuyTax: burn=3%, SellTax: burn=3%) */ uint8 public mode = 0; // current mode bool public isAutoMode = false; uint256 public modeStartTime = 0; uint256 public modePeriod = 1 hours; struct Fee { uint8 treasury; uint8 reflection; uint8 lucky; uint8 burn; uint8 total; } // mode == 0: pre fees // Mode 1 Fee public mode1BuyTax = Fee({treasury: 0, reflection: 0, lucky: 0, burn: 0, total: 0}); Fee public mode1SellTax = Fee({treasury: 0, reflection: 0, lucky: 0, burn: 0, total: 0}); // Mode 2 Fee public mode2BuyTax = Fee({treasury: 0, reflection: 0, lucky: 0, burn: 3, total: 3}); Fee public mode2SellTax = Fee({treasury: 0, reflection: 0, lucky: 0, burn: 3, total: 3}); uint256 public mode2ReflectionAmount = 0; uint256 public session = 0; // session => (buyer => true/false) mapping(uint256 => mapping(address => bool)) public isMode6Buyer; address[] public mode2Buyers; Fee public buyTax; Fee public sellTax; IUniswapV2Router02 public UNISWAP_V2_ROUTER; address public UNISWAP_V2_PAIR; mapping(address => bool) public isFeeExempt; mapping(address => bool) public isReflectionExempt; mapping(address => bool) public isBalanceExempt; mapping(address => bool) public isHolder; address[] public holders; uint256 public totalReflectionAmount; uint256 public topHolderReflectionAmount; // events event UpdateMode(uint8 mode); event Reflection(uint256 amountAdded, uint256 totalAmountAccumulated); event ChangeTradingStatus(bool status); bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } constructor () { require(devAddress != msg.sender, "Please set a different wallet for devAddress"); UNISWAP_V2_ROUTER = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // mainnet = goerli UNISWAP_V2_PAIR = IUniswapV2Factory(UNISWAP_V2_ROUTER.factory()).createPair(address(this), UNISWAP_V2_ROUTER.WETH()); _allowances[address(this)][address(UNISWAP_V2_ROUTER)] = _totalSupply; _allowances[address(this)][address(UNISWAP_V2_PAIR)] = _totalSupply; _allowances[address(this)][msg.sender] = _totalSupply; isFeeExempt[msg.sender] = true; isFeeExempt[devAddress] = true; isFeeExempt[treasuryAddress] = true; isFeeExempt[marketingAddress] = true; isFeeExempt[liquidityAddress] = true; isFeeExempt[ZERO] = true; isFeeExempt[DEAD] = true; isFeeExempt[address(this)] = true; isFeeExempt[address(UNISWAP_V2_ROUTER)] = true; isFeeExempt[UNISWAP_V2_PAIR] = true; isReflectionExempt[address(this)] = true; isReflectionExempt[address(UNISWAP_V2_ROUTER)] = true; isReflectionExempt[UNISWAP_V2_PAIR] = true; isReflectionExempt[msg.sender] = true; isReflectionExempt[ZERO] = true; isReflectionExempt[DEAD] = true; isBalanceExempt[ZERO] = true; isBalanceExempt[DEAD] = true; isBalanceExempt[address(UNISWAP_V2_ROUTER)] = true; isBalanceExempt[address(UNISWAP_V2_PAIR)] = true; isBalanceExempt[devAddress] = true; isBalanceExempt[msg.sender] = true; isBalanceExempt[address(this)] = true; buyTax = mode1BuyTax; sellTax = mode1SellTax; uint256 devAmount = _totalSupply * 5 / 100; _balances[devAddress] = devAmount; emit Transfer(ZERO, devAddress, devAmount); isHolder[devAddress] = true; holders.push(devAddress); uint256 circulationAmount = _totalSupply - devAmount; _balances[msg.sender] = circulationAmount; emit Transfer(ZERO, msg.sender, circulationAmount); isHolder[msg.sender] = true; holders.push(msg.sender); } receive() external payable {} /** * ERC20 Standard methods with override */ function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external view returns (uint8) { return _decimals; } function symbol() external view returns (string memory) { return _symbol; } function name() external view returns (string memory) { return _name; } function balanceOf(address account) public view override returns (uint256) { uint256 totalBalance = _balances[account]; if (!isReflectionExempt[account] && totalReflectionAmount > 0 && holders.length > 2) { totalBalance += totalBalance / holders.length; } return totalBalance; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, _totalSupply); } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { if (_allowances[sender][msg.sender] != type(uint256).max) { require(_allowances[sender][msg.sender] >= amount, "ERC20: insufficient allowance"); _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount; } return _transferFrom(sender, recipient, amount); } function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) { _checkBuySell(sender, recipient); _checkLimitations(recipient, amount); if (inSwap) { return _basicTransfer(sender, recipient, amount); } if (_shouldSwapBack()) { _swapBack(); } if (!isReflectionExempt[sender]){ _claim(sender); } _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _updateHolders(sender); uint256 amountReceived = _shouldTakeFee(sender, recipient) ? _takeFees(sender, amount) : amount; _balances[recipient] = _balances[recipient].add(amountReceived); _updateHolders(recipient); emit Transfer(sender, recipient, amount); if (isAutoMode) { autoUpdateMode(); } return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _updateHolders(sender); _balances[recipient] = _balances[recipient].add(amount); _updateHolders(recipient); emit Transfer(sender, recipient, amount); return true; } function _takePreFees(address sender, uint256 amount) internal returns (uint256) { uint256 _marketingFee = _sellMarketingFee; uint256 _liquidityFee = _sellLiquidityFee; uint256 _reflectionFee = _sellReflectionFee; uint256 _treasuryFee = _sellTreasuryFee; if (sender == UNISWAP_V2_PAIR) { _marketingFee = _buyMarketingFee; _liquidityFee = _buyLiquidityFee; _reflectionFee = _buyReflectionFee; _treasuryFee = _buyTreasuryFee; } uint256 _marketingAmount = amount * _marketingFee / 100; uint256 _liquidityAmount = amount * _liquidityFee / 100; uint256 _treasuryAmount = amount * _treasuryFee / 100; uint256 _reflectionFeeAmount = amount * _reflectionFee / 100; if (_reflectionFee > 0) { totalReflectionAmount += _reflectionFeeAmount; emit Reflection(_reflectionFeeAmount, totalReflectionAmount); } marketingDebt += _marketingAmount; liquidityDebt += _liquidityAmount; treasuryDebt += _treasuryAmount; _balances[address(this)] += _marketingAmount + _liquidityAmount + _treasuryAmount; uint256 _totalFeeAmount = _marketingAmount + _liquidityAmount + _treasuryAmount + _reflectionFeeAmount; return amount.sub(_totalFeeAmount); } function _takeModeFees(address sender, uint256 amount) internal returns (uint256) { Fee memory _feeTax = sellTax; bool _isBuy = false; if (sender == UNISWAP_V2_PAIR) { _feeTax = buyTax; _isBuy = true; } uint256 feeAmount = amount * _feeTax.total / 100; if (_feeTax.treasury > 0) { uint256 _treasuryFeeAmount = feeAmount * _feeTax.treasury / _feeTax.total; treasuryDebt += _treasuryFeeAmount; _balances[address(this)] += _treasuryFeeAmount; } if (_feeTax.burn > 0) { uint256 _burnFeeAmount = feeAmount * _feeTax.burn / _feeTax.total; _balances[DEAD] += _burnFeeAmount; emit Transfer(address(this), DEAD, _burnFeeAmount); } return amount.sub(feeAmount); } function _takeFees(address sender, uint256 amount) internal returns (uint256) { if (mode > 0) { return _takeModeFees(sender, amount); } else { return _takePreFees(sender, amount); } } function _shouldTakeFee(address sender, address recipient) internal view returns (bool) { return (recipient == UNISWAP_V2_PAIR && !isFeeExempt[sender]) || (sender == UNISWAP_V2_PAIR && !isFeeExempt[recipient]); } function _checkBuySell(address sender, address recipient) internal view { if (!enableTrading) { require(sender != UNISWAP_V2_PAIR && recipient != UNISWAP_V2_PAIR, "Trading is disabled!"); } } function _checkLimitations(address recipient, uint256 amount) internal view { if (!isBalanceExempt[recipient]) { require(amount <= maxTx, "Max transaction amount is limited!"); uint256 suggestBalance = balanceOf(recipient) + amount; require(suggestBalance <= maxBalance, "Max balance is limited!"); } } function _updateHolders(address holder) internal { uint256 balance = balanceOf(holder); if (balance > 0) { if (!isHolder[holder]) { isHolder[holder] = true; holders.push(holder); } } else { if (isHolder[holder]) { isHolder[holder] = false; for(uint256 i = 0; i < holders.length - 1; i++) { if (holders[i] == holder) { holders[i] = holders[holders.length - 1]; } } holders.pop(); } } } function _claim(address holder) internal { if (totalReflectionAmount > 0) { uint256 oneReflection = totalReflectionAmount / holders.length; totalReflectionAmount -= oneReflection; _balances[holder] += oneReflection; } } function _shouldSwapBack() internal view returns (bool) { return msg.sender != UNISWAP_V2_PAIR && enableSwap && !inSwap && balanceOf(address(this)) >= swapThreshold; } function _swapBack() internal swapping { uint256 amountToSwap = balanceOf(address(this)); approve(address(UNISWAP_V2_ROUTER), amountToSwap); // swap address[] memory path = new address[](2); path[0] = address(this); path[1] = UNISWAP_V2_ROUTER.WETH(); UNISWAP_V2_ROUTER.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance; _sendFeeETH(amountETH, amountToSwap); } function _sendFeeETH(uint256 amount, uint256 swapAmount) internal { uint256 totalDebt = marketingDebt + liquidityDebt + treasuryDebt; uint256 marketingProfit = amount * marketingDebt / totalDebt; uint256 marketingSwapAmount = swapAmount * marketingDebt / totalDebt; uint256 liquidityProfit = amount * liquidityDebt / totalDebt; uint256 liquiditySwapAmount = swapAmount * liquidityDebt / totalDebt; uint256 treasuryProfit = amount - marketingProfit - liquidityProfit; uint256 treasurySwapAmount = swapAmount - marketingSwapAmount - liquiditySwapAmount; if (marketingProfit > 0) { payable(marketingAddress).transfer(marketingProfit); marketingDebt -= marketingSwapAmount; } if (liquidityProfit > 0) { payable(liquidityAddress).transfer(liquidityProfit); liquidityDebt -= liquiditySwapAmount; } if (treasuryProfit > 0) { payable(treasuryAddress).transfer(treasuryProfit); treasuryDebt -= treasurySwapAmount; } } function _mode2Distribution() internal { session += 1; uint256 _buyersLen = mode2Buyers.length; if (mode2ReflectionAmount == 0 || _buyersLen == 0) return; uint256 _buyerReflection = mode2ReflectionAmount / _buyersLen; for (uint256 i = 0; i < _buyersLen; i++) { address _buyer = mode2Buyers[i]; _balances[_buyer] += _buyerReflection; } } function _changeMode(uint8 mode_) internal { if (mode == 2 && mode_ != 2) { _mode2Distribution(); } if (mode_ == 2) { buyTax = mode2BuyTax; sellTax = mode2SellTax; } mode = mode_; modeStartTime = block.timestamp; emit UpdateMode(mode_); } function autoUpdateMode() internal { uint8 _currentMode = mode; if (_currentMode == 0) { return; } uint256 deltaTime = block.timestamp - modeStartTime; if (deltaTime < modePeriod) { return; } _currentMode += 1; if (_currentMode > 2) { _currentMode = 1; } _changeMode(_currentMode); } function DefaultMode(uint8 mode_) external onlyOwner { _changeMode(mode_); } function DragonForm(bool isAuto_) external onlyOwner { isAutoMode = isAuto_; } function rewardTopHolders(address[] calldata _topHolders) public onlyOwner { require(topHolderReflectionAmount > 0, "Reward should be available"); uint256 oneReward = topHolderReflectionAmount / _topHolders.length; topHolderReflectionAmount = 0; for (uint8 i = 0; i < _topHolders.length; i++) { _balances[_topHolders[i]] += oneReward; emit Transfer(address(this), _topHolders[i], oneReward); } } function setFeeReceivers(address treasury_) external onlyOwner { treasuryAddress = treasury_; } function setIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function setIsReflectionExempt(address holder, bool exempt) external onlyOwner { isReflectionExempt[holder] = exempt; } function setIsBalanceExempt(address holder, bool exempt) external onlyOwner { isBalanceExempt[holder] = exempt; } function changeTradingStatus(bool _status) external onlyOwner { enableTrading = _status; emit ChangeTradingStatus(_status); } function updatePreFees( uint256 buyMarketingFee_, uint256 buyLiquidityFee_, uint256 buyReflectionFee_, uint256 buyTreasuryFee_, uint256 sellMarketingFee_, uint256 sellLiquidityFee_, uint256 sellReflectionFee_, uint256 sellTreasuryFee_ ) external onlyOwner { _buyMarketingFee = buyMarketingFee_; _buyLiquidityFee = buyLiquidityFee_; _buyReflectionFee = buyReflectionFee_; _buyTreasuryFee = buyTreasuryFee_; _sellMarketingFee = sellMarketingFee_; _sellLiquidityFee = sellLiquidityFee_; _sellReflectionFee = sellReflectionFee_; _sellTreasuryFee = sellTreasuryFee_; } function updateSwapThreshold(uint256 _swapThreshold) external onlyOwner { swapThreshold = _swapThreshold; } function manualSwapBack() external onlyOwner { if (_shouldSwapBack()) { _swapBack(); } } function changeSwapStatus(bool _enableSwap) external onlyOwner { enableSwap = _enableSwap; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ChangeTradingStatus","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":false,"internalType":"uint256","name":"amountAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalAmountAccumulated","type":"uint256"}],"name":"Reflection","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"mode","type":"uint8"}],"name":"UpdateMode","type":"event"},{"inputs":[{"internalType":"uint8","name":"mode_","type":"uint8"}],"name":"DefaultMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isAuto_","type":"bool"}],"name":"DragonForm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UNISWAP_V2_PAIR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNISWAP_V2_ROUTER","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enableSwap","type":"bool"}],"name":"changeSwapStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"changeTradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAutoMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBalanceExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"isMode6Buyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReflectionExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode1BuyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode1SellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode2BuyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mode2Buyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode2ReflectionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode2SellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modeStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_topHolders","type":"address[]"}],"name":"rewardTopHolders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"session","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"treasury_","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsBalanceExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsReflectionExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","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":"topHolderReflectionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketingFee_","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee_","type":"uint256"},{"internalType":"uint256","name":"buyReflectionFee_","type":"uint256"},{"internalType":"uint256","name":"buyTreasuryFee_","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee_","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee_","type":"uint256"},{"internalType":"uint256","name":"sellReflectionFee_","type":"uint256"},{"internalType":"uint256","name":"sellTreasuryFee_","type":"uint256"}],"name":"updatePreFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405273e5fbf047201c9f038e24c61a64583fa734af1ae560015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e5fbf047201c9f038e24c61a64583fa734af1ae560025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e5fbf047201c9f038e24c61a64583fa734af1ae560035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737fff15a1cee6dd5f0c90a1589c54642c4f6505f660045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600481526020017f5059524f00000000000000000000000000000000000000000000000000000000815250600590816200019a919062001cd1565b506040518060400160405280600481526020017f5059524f0000000000000000000000000000000000000000000000000000000081525060069081620001e1919062001cd1565b50601260075f6101000a81548160ff021916908360ff16021790555060075f9054906101000a900460ff16600a6200021a919062001f3e565b633b9aca006200022b919062001f8e565b6008556001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055506064600260085462000275919062001f8e565b62000281919062002005565b600c556064600260085462000297919062001f8e565b620002a3919062002005565b600d556127106004600854620002ba919062001f8e565b620002c6919062002005565b600e556019600f555f6010555f6011555f60125560196013555f6014555f6015555f6016555f6017555f6018555f6019555f601a5f6101000a81548160ff021916908360ff1602179055505f601a60016101000a81548160ff0219169083151502179055505f601b55610e10601c556040518060a001604052805f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815250601d5f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815250601e5f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff1681526020015f60ff1681526020015f60ff168152602001600360ff168152602001600360ff16815250601f5f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff1681526020015f60ff1681526020015f60ff168152602001600360ff168152602001600360ff1681525060205f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050505f6021555f602255348015620006ad575f80fd5b50620006ce620006c2620019a560201b60201c565b620019ac60201b60201c565b3373ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160362000760576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075790620020c0565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60275f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200081f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000845919062002145565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620008cc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620008f2919062002145565b6040518363ffffffff1660e01b81526004016200091192919062002186565b6020604051808303815f875af11580156200092e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000954919062002145565b60285f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600854600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600854600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600854600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160295f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f60275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602a5f60275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602a5f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602a5f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602a5f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602b5f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602b5f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602b5f60275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602b5f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602b5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550601d60255f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050601e60265f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050505f606460056008546200163c919062001f8e565b62001648919062002005565b90508060095f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200172d9190620021c2565b60405180910390a36001602c5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550602d60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f816008546200183d9190620021dd565b90508060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620018e09190620021c2565b60405180910390a36001602c5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550602d33908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062002217565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062001ae957607f821691505b60208210810362001aff5762001afe62001aa4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262001b637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001b26565b62001b6f868362001b26565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62001bb962001bb362001bad8462001b87565b62001b90565b62001b87565b9050919050565b5f819050919050565b62001bd48362001b99565b62001bec62001be38262001bc0565b84845462001b32565b825550505050565b5f90565b62001c0262001bf4565b62001c0f81848462001bc9565b505050565b5b8181101562001c365762001c2a5f8262001bf8565b60018101905062001c15565b5050565b601f82111562001c855762001c4f8162001b05565b62001c5a8462001b17565b8101602085101562001c6a578190505b62001c8262001c798562001b17565b83018262001c14565b50505b505050565b5f82821c905092915050565b5f62001ca75f198460080262001c8a565b1980831691505092915050565b5f62001cc1838362001c96565b9150826002028217905092915050565b62001cdc8262001a6d565b67ffffffffffffffff81111562001cf85762001cf762001a77565b5b62001d04825462001ad1565b62001d1182828562001c3a565b5f60209050601f83116001811462001d47575f841562001d32578287015190505b62001d3e858262001cb4565b86555062001dad565b601f19841662001d578662001b05565b5f5b8281101562001d805784890151825560018201915060208501945060208101905062001d59565b8683101562001da0578489015162001d9c601f89168262001c96565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562001e3f5780860481111562001e175762001e1662001db5565b5b600185161562001e275780820291505b808102905062001e378562001de2565b945062001df7565b94509492505050565b5f8262001e59576001905062001f2b565b8162001e68575f905062001f2b565b816001811462001e81576002811462001e8c5762001ec2565b600191505062001f2b565b60ff84111562001ea15762001ea062001db5565b5b8360020a91508482111562001ebb5762001eba62001db5565b5b5062001f2b565b5060208310610133831016604e8410600b841016171562001efc5782820a90508381111562001ef65762001ef562001db5565b5b62001f2b565b62001f0b848484600162001dee565b9250905081840481111562001f255762001f2462001db5565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62001f4a8262001b87565b915062001f578362001f32565b925062001f867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001e48565b905092915050565b5f62001f9a8262001b87565b915062001fa78362001b87565b925082820262001fb78162001b87565b9150828204841483151762001fd15762001fd062001db5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620020118262001b87565b91506200201e8362001b87565b92508262002031576200203062001fd8565b5b828204905092915050565b5f82825260208201905092915050565b7f506c6561736520736574206120646966666572656e742077616c6c657420666f5f8201527f7220646576416464726573730000000000000000000000000000000000000000602082015250565b5f620020a8602c836200203c565b9150620020b5826200204c565b604082019050919050565b5f6020820190508181035f830152620020d9816200209a565b9050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200210f82620020e4565b9050919050565b620021218162002103565b81146200212c575f80fd5b50565b5f815190506200213f8162002116565b92915050565b5f602082840312156200215d576200215c620020e0565b5b5f6200216c848285016200212f565b91505092915050565b620021808162002103565b82525050565b5f6040820190506200219b5f83018562002175565b620021aa602083018462002175565b9392505050565b620021bc8162001b87565b82525050565b5f602082019050620021d75f830184620021b1565b92915050565b5f620021e98262001b87565b9150620021f68362001b87565b925082820390508181111562002211576200221062001db5565b5b92915050565b61474280620022255f395ff3fe60806040526004361061036d575f3560e01c806370a08231116101c5578063b98a1cd4116100f6578063dd62ed3e11610094578063e708ce551161006e578063e708ce5514610cc8578063f2fde38b14610cf0578063f40acc3d14610d18578063f9c683c014610d4257610374565b8063dd62ed3e14610c28578063e01bb68814610c64578063e192d48514610c8c57610374565b8063cc1776d3116100d0578063cc1776d314610b6c578063cc274b2914610b9a578063cf059b9f14610bc2578063d4d7b19a14610bec57610374565b8063b98a1cd414610ada578063bd65870214610b16578063c15d854f14610b3e57610374565b806393e6b04a116101635780639dee70dd1161013d5780639dee70dd14610a0a578063a82ed9ec14610a38578063a9059cbb14610a62578063b1bd377414610a9e57610374565b806393e6b04a1461097a57806394da5dbf146109a457806395d89b41146109e057610374565b80637437681e1161019f5780637437681e146108d457806376e88ddb146108fe5780638a8c523c146109265780638da5cb5b1461095057610374565b806370a0823114610858578063715018a61461089457806373ad468a146108aa57610374565b8063313ce5671161029f578063573d8cf91161023d57806364c653c11161021757806364c653c1146107c6578063658d4b7f146107f057806366eb3785146108185780636cf3fdb91461082e57610374565b8063573d8cf9146107485780635e3568b814610772578063615494be1461079c57610374565b80634f7041a5116102795780634f7041a51461068c57806351fdefc9146106ba578063526b13fd146106e4578063571ac8b01461070c57610374565b8063313ce567146105fe5780633307d372146106285780633f4218e01461065057610374565b806318160ddd1161030c578063295a5212116102e6578063295a52121461054657806329691448146105705780632a11ced01461059a5780632c957aa0146105d657610374565b806318160ddd146104b2578063204a6836146104dc57806323b872dd1461050a57610374565b806306fdde031161034857806306fdde03146103fa578063095ea7b314610424578063142a271114610460578063166319eb1461048a57610374565b8062adef68146103785780630445b667146103a6578063057a2c0e146103d057610374565b3661037457005b5f80fd5b348015610383575f80fd5b5061038c610d6a565b60405161039d959493929190613984565b60405180910390f35b3480156103b1575f80fd5b506103ba610dc9565b6040516103c791906139ed565b60405180910390f35b3480156103db575f80fd5b506103e4610dcf565b6040516103f191906139ed565b60405180910390f35b348015610405575f80fd5b5061040e610dd5565b60405161041b9190613a90565b60405180910390f35b34801561042f575f80fd5b5061044a60048036038101906104459190613b3c565b610e65565b6040516104579190613b94565b60405180910390f35b34801561046b575f80fd5b50610474610f52565b60405161048191906139ed565b60405180910390f35b348015610495575f80fd5b506104b060048036038101906104ab9190613bad565b610f58565b005b3480156104bd575f80fd5b506104c6610fa2565b6040516104d391906139ed565b60405180910390f35b3480156104e7575f80fd5b506104f0610fab565b604051610501959493929190613984565b60405180910390f35b348015610515575f80fd5b50610530600480360381019061052b9190613c5e565b61100a565b60405161053d9190613b94565b60405180910390f35b348015610551575f80fd5b5061055a61127a565b6040516105679190613cae565b60405180910390f35b34801561057b575f80fd5b5061058461128c565b6040516105919190613b94565b60405180910390f35b3480156105a5575f80fd5b506105c060048036038101906105bb9190613cc7565b61129f565b6040516105cd9190613d01565b60405180910390f35b3480156105e1575f80fd5b506105fc60048036038101906105f79190613d44565b6112da565b005b348015610609575f80fd5b5061061261133a565b60405161061f9190613cae565b60405180910390f35b348015610633575f80fd5b5061064e60048036038101906106499190613d44565b61134f565b005b34801561065b575f80fd5b5061067660048036038101906106719190613d82565b6113af565b6040516106839190613b94565b60405180910390f35b348015610697575f80fd5b506106a06113cc565b6040516106b1959493929190613984565b60405180910390f35b3480156106c5575f80fd5b506106ce61142b565b6040516106db91906139ed565b60405180910390f35b3480156106ef575f80fd5b5061070a60048036038101906107059190613dad565b611431565b005b348015610717575f80fd5b50610732600480360381019061072d9190613d82565b61148c565b60405161073f9190613b94565b60405180910390f35b348015610753575f80fd5b5061075c6114a0565b60405161076991906139ed565b60405180910390f35b34801561077d575f80fd5b506107866114a6565b60405161079391906139ed565b60405180910390f35b3480156107a7575f80fd5b506107b06114ac565b6040516107bd91906139ed565b60405180910390f35b3480156107d1575f80fd5b506107da6114b2565b6040516107e791906139ed565b60405180910390f35b3480156107fb575f80fd5b5061081660048036038101906108119190613d44565b6114b8565b005b348015610823575f80fd5b5061082c611518565b005b348015610839575f80fd5b50610842611538565b60405161084f91906139ed565b60405180910390f35b348015610863575f80fd5b5061087e60048036038101906108799190613d82565b61153e565b60405161088b91906139ed565b60405180910390f35b34801561089f575f80fd5b506108a8611616565b005b3480156108b5575f80fd5b506108be611629565b6040516108cb91906139ed565b60405180910390f35b3480156108df575f80fd5b506108e861162f565b6040516108f591906139ed565b60405180910390f35b348015610909575f80fd5b50610924600480360381019061091f9190613dad565b611635565b005b348015610931575f80fd5b5061093a61165a565b6040516109479190613b94565b60405180910390f35b34801561095b575f80fd5b5061096461166c565b6040516109719190613d01565b60405180910390f35b348015610985575f80fd5b5061098e611693565b60405161099b9190613b94565b60405180910390f35b3480156109af575f80fd5b506109ca60048036038101906109c59190613d82565b6116a6565b6040516109d79190613b94565b60405180910390f35b3480156109eb575f80fd5b506109f46116c3565b604051610a019190613a90565b60405180910390f35b348015610a15575f80fd5b50610a1e611753565b604051610a2f959493929190613984565b60405180910390f35b348015610a43575f80fd5b50610a4c6117b2565b604051610a599190613e33565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613b3c565b6117d7565b604051610a959190613b94565b60405180910390f35b348015610aa9575f80fd5b50610ac46004803603810190610abf9190613d82565b6117eb565b604051610ad19190613b94565b60405180910390f35b348015610ae5575f80fd5b50610b006004803603810190610afb9190613cc7565b611808565b604051610b0d9190613d01565b60405180910390f35b348015610b21575f80fd5b50610b3c6004803603810190610b379190613e76565b611843565b005b348015610b49575f80fd5b50610b52611857565b604051610b63959493929190613984565b60405180910390f35b348015610b77575f80fd5b50610b806118b6565b604051610b91959493929190613984565b60405180910390f35b348015610ba5575f80fd5b50610bc06004803603810190610bbb9190613cc7565b611915565b005b348015610bcd575f80fd5b50610bd6611927565b604051610be391906139ed565b60405180910390f35b348015610bf7575f80fd5b50610c126004803603810190610c0d9190613d82565b61192d565b604051610c1f9190613b94565b60405180910390f35b348015610c33575f80fd5b50610c4e6004803603810190610c499190613ea1565b61194a565b604051610c5b91906139ed565b60405180910390f35b348015610c6f575f80fd5b50610c8a6004803603810190610c859190613d82565b6119cc565b005b348015610c97575f80fd5b50610cb26004803603810190610cad9190613edf565b611a17565b604051610cbf9190613b94565b60405180910390f35b348015610cd3575f80fd5b50610cee6004803603810190610ce99190613dad565b611a41565b005b348015610cfb575f80fd5b50610d166004803603810190610d119190613d82565b611a66565b005b348015610d23575f80fd5b50610d2c611ae8565b604051610d399190613d01565b60405180910390f35b348015610d4d575f80fd5b50610d686004803603810190610d639190613f7e565b611b0d565b005b601d805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b600e5481565b601b5481565b606060058054610de490613ff6565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1090613ff6565b8015610e5b5780601f10610e3257610100808354040283529160200191610e5b565b820191905f5260205f20905b815481529060010190602001808311610e3e57829003601f168201915b5050505050905090565b5f81600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f4091906139ed565b60405180910390a36001905092915050565b602f5481565b610f60611ca9565b87600f81905550866010819055508560118190555084601281905550836013819055508260148190555081601581905550806016819055505050505050505050565b5f600854905090565b601f805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054146112665781600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90614070565b60405180910390fd5b81600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111e991906140bb565b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b611271848484611d27565b90509392505050565b601a5f9054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b602d81815481106112ae575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112e2611ca9565b80602b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60075f9054906101000a900460ff16905090565b611357611ca9565b80602a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6029602052805f5260405f205f915054906101000a900460ff1681565b6025805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b60175481565b611439611ca9565b80600b5f6101000a81548160ff0219169083151502179055507fa2974e0f27442edd60c8b32f67b3197c4da62252841bfed6068f393c853de223816040516114819190613b94565b60405180910390a150565b5f61149982600854610e65565b9050919050565b601c5481565b60225481565b602e5481565b60185481565b6114c0611ca9565b8060295f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611520611ca9565b611528611fed565b156115365761153561208a565b5b565b60195481565b5f8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050602a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156115d857505f602e54115b80156115e957506002602d80549050115b1561160d57602d80549050816115ff919061411b565b8161160a919061414b565b90505b80915050919050565b61161e611ca9565b6116275f61230e565b565b600c5481565b600d5481565b61163d611ca9565b80600b60016101000a81548160ff02191690831515021790555050565b600b5f9054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a60019054906101000a900460ff1681565b602b602052805f5260405f205f915054906101000a900460ff1681565b6060600680546116d290613ff6565b80601f01602080910402602001604051908101604052809291908181526020018280546116fe90613ff6565b80156117495780601f1061172057610100808354040283529160200191611749565b820191905f5260205f20905b81548152906001019060200180831161172c57829003601f168201915b5050505050905090565b601e805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b60275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6117e3338484611d27565b905092915050565b602a602052805f5260405f205f915054906101000a900460ff1681565b60248181548110611817575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61184b611ca9565b611854816123cf565b50565b6020805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6026805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b61191d611ca9565b80600e8190555050565b60215481565b602c602052805f5260405f205f915054906101000a900460ff1681565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6119d4611ca9565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6023602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b611a49611ca9565b80601a60016101000a81548160ff02191690831515021790555050565b611a6e611ca9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad3906141ee565b60405180910390fd5b611ae58161230e565b50565b60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b15611ca9565b5f602f5411611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090614256565b60405180910390fd5b5f82829050602f54611b6b919061411b565b90505f602f819055505f5b838390508160ff161015611ca3578160095f86868560ff16818110611b9e57611b9d614274565b5b9050602002016020810190611bb39190613d82565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611bfa919061414b565b9250508190555083838260ff16818110611c1757611c16614274565b5b9050602002016020810190611c2c9190613d82565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c8891906139ed565b60405180910390a38080611c9b906142a1565b915050611b76565b50505050565b611cb161262b565b73ffffffffffffffffffffffffffffffffffffffff16611ccf61166c565b73ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90614313565b60405180910390fd5b565b5f611d328484612632565b611d3c8383612733565b60305f9054906101000a900460ff1615611d6257611d5b848484612828565b9050611fe6565b611d6a611fed565b15611d7857611d7761208a565b5b602a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611dd057611dcf84612a04565b5b611e57826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a949092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611ea184612ae8565b5f611eac8585612e30565b611eb65782611ec1565b611ec08584612f86565b5b9050611f138160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fc490919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611f5d84612ae8565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611fba91906139ed565b60405180910390a3601a60019054906101000a900460ff1615611fe057611fdf612fd9565b5b60019150505b9392505050565b5f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156120575750600b60019054906101000a900460ff165b801561206f575060305f9054906101000a900460ff16155b80156120855750600e546120823061153e565b10155b905090565b600160305f6101000a81548160ff0219169083151502179055505f6120ae3061153e565b90506120db60275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610e65565b505f600267ffffffffffffffff8111156120f8576120f7614331565b5b6040519080825280602002602001820160405280156121265781602001602082028036833780820191505090505b50905030815f8151811061213d5761213c614274565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122059190614372565b8160018151811061221957612218614274565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016122b595949392919061448d565b5f604051808303815f87803b1580156122cc575f80fd5b505af11580156122de573d5f803e3d5ffd5b505050505f4790506122f0818461304b565b5050505f60305f6101000a81548160ff021916908315150217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6002601a5f9054906101000a900460ff1660ff161480156123f4575060028160ff1614155b15612402576124016132ac565b5b60028160ff16036125d057601f60255f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050602060265f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050505b80601a5f6101000a81548160ff021916908360ff16021790555042601b819055507f3767691dd0ddd9d4be17e4e8e94e164993de91ae51d4fad9ad16b3ff4b7b1e86816040516126209190613cae565b60405180910390a150565b5f33905090565b600b5f9054906101000a900460ff1661272f5760285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126ef575060285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61272e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127259061452f565b60405180910390fd5b5b5050565b602b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661282457600d548111156127c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bd906145bd565b60405180910390fd5b5f816127d18461153e565b6127db919061414b565b9050600c54811115612822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281990614625565b60405180910390fd5b505b5050565b5f6128b0826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a949092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506128fa84612ae8565b61294a8260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fc490919063ffffffff16565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061299483612ae8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129f191906139ed565b60405180910390a3600190509392505050565b5f602e541115612a91575f602d80549050602e54612a22919061411b565b905080602e5f828254612a3591906140bb565b925050819055508060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612a88919061414b565b92505081905550505b50565b5f838311158290612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad29190613a90565b60405180910390fd5b5082840390509392505050565b5f612af28261153e565b90505f811115612c0557602c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612c00576001602c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550602d82908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b612e2c565b602c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612e2b575f602c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b6001602d80549050612cbc91906140bb565b811015612de5578273ffffffffffffffffffffffffffffffffffffffff16602d8281548110612cee57612ced614274565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612dd857602d6001602d80549050612d4591906140bb565b81548110612d5657612d55614274565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602d8281548110612d9257612d91614274565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8080600101915050612caa565b50602d805480612df857612df7614643565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b5b5050565b5f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015612ed4575060295f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80612f7e575060285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612f7d575060295f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b5b905092915050565b5f80601a5f9054906101000a900460ff1660ff161115612fb157612faa83836133a9565b9050612fbe565b612fbb8383613710565b90505b92915050565b5f8183612fd1919061414b565b905092915050565b5f601a5f9054906101000a900460ff1690505f8160ff1603612ffb5750613049565b5f601b544261300a91906140bb565b9050601c5481101561301d575050613049565b60018261302a9190614670565b915060028260ff16111561303d57600191505b613046826123cf565b50505b565b5f60195460185460175461305f919061414b565b613069919061414b565b90505f816017548561307b91906146a4565b613085919061411b565b90505f826017548561309791906146a4565b6130a1919061411b565b90505f83601854876130b391906146a4565b6130bd919061411b565b90505f84601854876130cf91906146a4565b6130d9919061411b565b90505f8285896130e991906140bb565b6130f391906140bb565b90505f82858961310391906140bb565b61310d91906140bb565b90505f8611156131955760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8790811502906040515f60405180830381858888f1935050505015801561317b573d5f803e3d5ffd5b508460175f82825461318d91906140bb565b925050819055505b5f84111561321b5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8590811502906040515f60405180830381858888f19350505050158015613201573d5f803e3d5ffd5b508260185f82825461321391906140bb565b925050819055505b5f8211156132a15760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015613287573d5f803e3d5ffd5b508060195f82825461329991906140bb565b925050819055505b505050505050505050565b600160225f8282546132be919061414b565b925050819055505f60248054905090505f60215414806132dd57505f81145b156132e857506133a7565b5f816021546132f7919061411b565b90505f5b828110156133a3575f6024828154811061331857613317614274565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508260095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461338e919061414b565b925050819055505080806001019150506132fb565b5050505b565b5f8060266040518060a00160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900460ff1660ff1660ff1681526020015f820160029054906101000a900460ff1660ff1660ff1681526020015f820160039054906101000a900460ff1660ff1660ff1681526020015f820160049054906101000a900460ff1660ff1660ff168152505090505f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036135395760256040518060a00160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900460ff1660ff1660ff1681526020015f820160029054906101000a900460ff1660ff1660ff1681526020015f820160039054906101000a900460ff1660ff1660ff1681526020015f820160049054906101000a900460ff1660ff1660ff16815250509150600190505b5f6064836080015160ff168661354f91906146a4565b613559919061411b565b90505f835f015160ff1611156135fd575f836080015160ff16845f015160ff168361358491906146a4565b61358e919061411b565b90508060195f8282546135a1919061414b565b925050819055508060095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546135f4919061414b565b92505081905550505b5f836060015160ff1611156136f2575f836080015160ff16846060015160ff168361362891906146a4565b613632919061411b565b90508060095f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613682919061414b565b9250508190555061dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136e891906139ed565b60405180910390a3505b613705818661395490919063ffffffff16565b935050505092915050565b5f8060135490505f60145490505f60155490505f601654905060285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361379257600f5493506010549250601154915060125490505b5f606485886137a191906146a4565b6137ab919061411b565b90505f606485896137bc91906146a4565b6137c6919061411b565b90505f6064848a6137d791906146a4565b6137e1919061411b565b90505f6064868b6137f291906146a4565b6137fc919061411b565b90505f86111561385a5780602e5f828254613817919061414b565b925050819055507f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c24536481602e546040516138519291906146e5565b60405180910390a15b8360175f82825461386b919061414b565b925050819055508260185f828254613883919061414b565b925050819055508160195f82825461389b919061414b565b925050819055508183856138af919061414b565b6138b9919061414b565b60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613904919061414b565b925050819055505f8183858761391a919061414b565b613924919061414b565b61392e919061414b565b9050613943818c61395490919063ffffffff16565b995050505050505050505092915050565b5f818361396191906140bb565b905092915050565b5f60ff82169050919050565b61397e81613969565b82525050565b5f60a0820190506139975f830188613975565b6139a46020830187613975565b6139b16040830186613975565b6139be6060830185613975565b6139cb6080830184613975565b9695505050505050565b5f819050919050565b6139e7816139d5565b82525050565b5f602082019050613a005f8301846139de565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613a3d578082015181840152602081019050613a22565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613a6282613a06565b613a6c8185613a10565b9350613a7c818560208601613a20565b613a8581613a48565b840191505092915050565b5f6020820190508181035f830152613aa88184613a58565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613ae182613ab8565b9050919050565b613af181613ad7565b8114613afb575f80fd5b50565b5f81359050613b0c81613ae8565b92915050565b613b1b816139d5565b8114613b25575f80fd5b50565b5f81359050613b3681613b12565b92915050565b5f8060408385031215613b5257613b51613ab0565b5b5f613b5f85828601613afe565b9250506020613b7085828601613b28565b9150509250929050565b5f8115159050919050565b613b8e81613b7a565b82525050565b5f602082019050613ba75f830184613b85565b92915050565b5f805f805f805f80610100898b031215613bca57613bc9613ab0565b5b5f613bd78b828c01613b28565b9850506020613be88b828c01613b28565b9750506040613bf98b828c01613b28565b9650506060613c0a8b828c01613b28565b9550506080613c1b8b828c01613b28565b94505060a0613c2c8b828c01613b28565b93505060c0613c3d8b828c01613b28565b92505060e0613c4e8b828c01613b28565b9150509295985092959890939650565b5f805f60608486031215613c7557613c74613ab0565b5b5f613c8286828701613afe565b9350506020613c9386828701613afe565b9250506040613ca486828701613b28565b9150509250925092565b5f602082019050613cc15f830184613975565b92915050565b5f60208284031215613cdc57613cdb613ab0565b5b5f613ce984828501613b28565b91505092915050565b613cfb81613ad7565b82525050565b5f602082019050613d145f830184613cf2565b92915050565b613d2381613b7a565b8114613d2d575f80fd5b50565b5f81359050613d3e81613d1a565b92915050565b5f8060408385031215613d5a57613d59613ab0565b5b5f613d6785828601613afe565b9250506020613d7885828601613d30565b9150509250929050565b5f60208284031215613d9757613d96613ab0565b5b5f613da484828501613afe565b91505092915050565b5f60208284031215613dc257613dc1613ab0565b5b5f613dcf84828501613d30565b91505092915050565b5f819050919050565b5f613dfb613df6613df184613ab8565b613dd8565b613ab8565b9050919050565b5f613e0c82613de1565b9050919050565b5f613e1d82613e02565b9050919050565b613e2d81613e13565b82525050565b5f602082019050613e465f830184613e24565b92915050565b613e5581613969565b8114613e5f575f80fd5b50565b5f81359050613e7081613e4c565b92915050565b5f60208284031215613e8b57613e8a613ab0565b5b5f613e9884828501613e62565b91505092915050565b5f8060408385031215613eb757613eb6613ab0565b5b5f613ec485828601613afe565b9250506020613ed585828601613afe565b9150509250929050565b5f8060408385031215613ef557613ef4613ab0565b5b5f613f0285828601613b28565b9250506020613f1385828601613afe565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112613f3e57613f3d613f1d565b5b8235905067ffffffffffffffff811115613f5b57613f5a613f21565b5b602083019150836020820283011115613f7757613f76613f25565b5b9250929050565b5f8060208385031215613f9457613f93613ab0565b5b5f83013567ffffffffffffffff811115613fb157613fb0613ab4565b5b613fbd85828601613f29565b92509250509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061400d57607f821691505b6020821081036140205761401f613fc9565b5b50919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61405a601d83613a10565b915061406582614026565b602082019050919050565b5f6020820190508181035f8301526140878161404e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6140c5826139d5565b91506140d0836139d5565b92508282039050818111156140e8576140e761408e565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614125826139d5565b9150614130836139d5565b9250826141405761413f6140ee565b5b828204905092915050565b5f614155826139d5565b9150614160836139d5565b92508282019050808211156141785761417761408e565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6141d8602683613a10565b91506141e38261417e565b604082019050919050565b5f6020820190508181035f830152614205816141cc565b9050919050565b7f5265776172642073686f756c6420626520617661696c61626c650000000000005f82015250565b5f614240601a83613a10565b915061424b8261420c565b602082019050919050565b5f6020820190508181035f83015261426d81614234565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6142ab82613969565b915060ff82036142be576142bd61408e565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6142fd602083613a10565b9150614308826142c9565b602082019050919050565b5f6020820190508181035f83015261432a816142f1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061436c81613ae8565b92915050565b5f6020828403121561438757614386613ab0565b5b5f6143948482850161435e565b91505092915050565b5f819050919050565b5f6143c06143bb6143b68461439d565b613dd8565b6139d5565b9050919050565b6143d0816143a6565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61440881613ad7565b82525050565b5f61441983836143ff565b60208301905092915050565b5f602082019050919050565b5f61443b826143d6565b61444581856143e0565b9350614450836143f0565b805f5b83811015614480578151614467888261440e565b975061447283614425565b925050600181019050614453565b5085935050505092915050565b5f60a0820190506144a05f8301886139de565b6144ad60208301876143c7565b81810360408301526144bf8186614431565b90506144ce6060830185613cf2565b6144db60808301846139de565b9695505050505050565b7f54726164696e672069732064697361626c6564210000000000000000000000005f82015250565b5f614519601483613a10565b9150614524826144e5565b602082019050919050565b5f6020820190508181035f8301526145468161450d565b9050919050565b7f4d6178207472616e73616374696f6e20616d6f756e74206973206c696d6974655f8201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b5f6145a7602283613a10565b91506145b28261454d565b604082019050919050565b5f6020820190508181035f8301526145d48161459b565b9050919050565b7f4d61782062616c616e6365206973206c696d69746564210000000000000000005f82015250565b5f61460f601783613a10565b915061461a826145db565b602082019050919050565b5f6020820190508181035f83015261463c81614603565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f61467a82613969565b915061468583613969565b9250828201905060ff81111561469e5761469d61408e565b5b92915050565b5f6146ae826139d5565b91506146b9836139d5565b92508282026146c7816139d5565b915082820484148315176146de576146dd61408e565b5b5092915050565b5f6040820190506146f85f8301856139de565b61470560208301846139de565b939250505056fea2646970667358221220fb469c1240ae25a1035eebe96479969f7019aa5976034d769f4535ef89fea93564736f6c63430008160033
Deployed Bytecode
0x60806040526004361061036d575f3560e01c806370a08231116101c5578063b98a1cd4116100f6578063dd62ed3e11610094578063e708ce551161006e578063e708ce5514610cc8578063f2fde38b14610cf0578063f40acc3d14610d18578063f9c683c014610d4257610374565b8063dd62ed3e14610c28578063e01bb68814610c64578063e192d48514610c8c57610374565b8063cc1776d3116100d0578063cc1776d314610b6c578063cc274b2914610b9a578063cf059b9f14610bc2578063d4d7b19a14610bec57610374565b8063b98a1cd414610ada578063bd65870214610b16578063c15d854f14610b3e57610374565b806393e6b04a116101635780639dee70dd1161013d5780639dee70dd14610a0a578063a82ed9ec14610a38578063a9059cbb14610a62578063b1bd377414610a9e57610374565b806393e6b04a1461097a57806394da5dbf146109a457806395d89b41146109e057610374565b80637437681e1161019f5780637437681e146108d457806376e88ddb146108fe5780638a8c523c146109265780638da5cb5b1461095057610374565b806370a0823114610858578063715018a61461089457806373ad468a146108aa57610374565b8063313ce5671161029f578063573d8cf91161023d57806364c653c11161021757806364c653c1146107c6578063658d4b7f146107f057806366eb3785146108185780636cf3fdb91461082e57610374565b8063573d8cf9146107485780635e3568b814610772578063615494be1461079c57610374565b80634f7041a5116102795780634f7041a51461068c57806351fdefc9146106ba578063526b13fd146106e4578063571ac8b01461070c57610374565b8063313ce567146105fe5780633307d372146106285780633f4218e01461065057610374565b806318160ddd1161030c578063295a5212116102e6578063295a52121461054657806329691448146105705780632a11ced01461059a5780632c957aa0146105d657610374565b806318160ddd146104b2578063204a6836146104dc57806323b872dd1461050a57610374565b806306fdde031161034857806306fdde03146103fa578063095ea7b314610424578063142a271114610460578063166319eb1461048a57610374565b8062adef68146103785780630445b667146103a6578063057a2c0e146103d057610374565b3661037457005b5f80fd5b348015610383575f80fd5b5061038c610d6a565b60405161039d959493929190613984565b60405180910390f35b3480156103b1575f80fd5b506103ba610dc9565b6040516103c791906139ed565b60405180910390f35b3480156103db575f80fd5b506103e4610dcf565b6040516103f191906139ed565b60405180910390f35b348015610405575f80fd5b5061040e610dd5565b60405161041b9190613a90565b60405180910390f35b34801561042f575f80fd5b5061044a60048036038101906104459190613b3c565b610e65565b6040516104579190613b94565b60405180910390f35b34801561046b575f80fd5b50610474610f52565b60405161048191906139ed565b60405180910390f35b348015610495575f80fd5b506104b060048036038101906104ab9190613bad565b610f58565b005b3480156104bd575f80fd5b506104c6610fa2565b6040516104d391906139ed565b60405180910390f35b3480156104e7575f80fd5b506104f0610fab565b604051610501959493929190613984565b60405180910390f35b348015610515575f80fd5b50610530600480360381019061052b9190613c5e565b61100a565b60405161053d9190613b94565b60405180910390f35b348015610551575f80fd5b5061055a61127a565b6040516105679190613cae565b60405180910390f35b34801561057b575f80fd5b5061058461128c565b6040516105919190613b94565b60405180910390f35b3480156105a5575f80fd5b506105c060048036038101906105bb9190613cc7565b61129f565b6040516105cd9190613d01565b60405180910390f35b3480156105e1575f80fd5b506105fc60048036038101906105f79190613d44565b6112da565b005b348015610609575f80fd5b5061061261133a565b60405161061f9190613cae565b60405180910390f35b348015610633575f80fd5b5061064e60048036038101906106499190613d44565b61134f565b005b34801561065b575f80fd5b5061067660048036038101906106719190613d82565b6113af565b6040516106839190613b94565b60405180910390f35b348015610697575f80fd5b506106a06113cc565b6040516106b1959493929190613984565b60405180910390f35b3480156106c5575f80fd5b506106ce61142b565b6040516106db91906139ed565b60405180910390f35b3480156106ef575f80fd5b5061070a60048036038101906107059190613dad565b611431565b005b348015610717575f80fd5b50610732600480360381019061072d9190613d82565b61148c565b60405161073f9190613b94565b60405180910390f35b348015610753575f80fd5b5061075c6114a0565b60405161076991906139ed565b60405180910390f35b34801561077d575f80fd5b506107866114a6565b60405161079391906139ed565b60405180910390f35b3480156107a7575f80fd5b506107b06114ac565b6040516107bd91906139ed565b60405180910390f35b3480156107d1575f80fd5b506107da6114b2565b6040516107e791906139ed565b60405180910390f35b3480156107fb575f80fd5b5061081660048036038101906108119190613d44565b6114b8565b005b348015610823575f80fd5b5061082c611518565b005b348015610839575f80fd5b50610842611538565b60405161084f91906139ed565b60405180910390f35b348015610863575f80fd5b5061087e60048036038101906108799190613d82565b61153e565b60405161088b91906139ed565b60405180910390f35b34801561089f575f80fd5b506108a8611616565b005b3480156108b5575f80fd5b506108be611629565b6040516108cb91906139ed565b60405180910390f35b3480156108df575f80fd5b506108e861162f565b6040516108f591906139ed565b60405180910390f35b348015610909575f80fd5b50610924600480360381019061091f9190613dad565b611635565b005b348015610931575f80fd5b5061093a61165a565b6040516109479190613b94565b60405180910390f35b34801561095b575f80fd5b5061096461166c565b6040516109719190613d01565b60405180910390f35b348015610985575f80fd5b5061098e611693565b60405161099b9190613b94565b60405180910390f35b3480156109af575f80fd5b506109ca60048036038101906109c59190613d82565b6116a6565b6040516109d79190613b94565b60405180910390f35b3480156109eb575f80fd5b506109f46116c3565b604051610a019190613a90565b60405180910390f35b348015610a15575f80fd5b50610a1e611753565b604051610a2f959493929190613984565b60405180910390f35b348015610a43575f80fd5b50610a4c6117b2565b604051610a599190613e33565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613b3c565b6117d7565b604051610a959190613b94565b60405180910390f35b348015610aa9575f80fd5b50610ac46004803603810190610abf9190613d82565b6117eb565b604051610ad19190613b94565b60405180910390f35b348015610ae5575f80fd5b50610b006004803603810190610afb9190613cc7565b611808565b604051610b0d9190613d01565b60405180910390f35b348015610b21575f80fd5b50610b3c6004803603810190610b379190613e76565b611843565b005b348015610b49575f80fd5b50610b52611857565b604051610b63959493929190613984565b60405180910390f35b348015610b77575f80fd5b50610b806118b6565b604051610b91959493929190613984565b60405180910390f35b348015610ba5575f80fd5b50610bc06004803603810190610bbb9190613cc7565b611915565b005b348015610bcd575f80fd5b50610bd6611927565b604051610be391906139ed565b60405180910390f35b348015610bf7575f80fd5b50610c126004803603810190610c0d9190613d82565b61192d565b604051610c1f9190613b94565b60405180910390f35b348015610c33575f80fd5b50610c4e6004803603810190610c499190613ea1565b61194a565b604051610c5b91906139ed565b60405180910390f35b348015610c6f575f80fd5b50610c8a6004803603810190610c859190613d82565b6119cc565b005b348015610c97575f80fd5b50610cb26004803603810190610cad9190613edf565b611a17565b604051610cbf9190613b94565b60405180910390f35b348015610cd3575f80fd5b50610cee6004803603810190610ce99190613dad565b611a41565b005b348015610cfb575f80fd5b50610d166004803603810190610d119190613d82565b611a66565b005b348015610d23575f80fd5b50610d2c611ae8565b604051610d399190613d01565b60405180910390f35b348015610d4d575f80fd5b50610d686004803603810190610d639190613f7e565b611b0d565b005b601d805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b600e5481565b601b5481565b606060058054610de490613ff6565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1090613ff6565b8015610e5b5780601f10610e3257610100808354040283529160200191610e5b565b820191905f5260205f20905b815481529060010190602001808311610e3e57829003601f168201915b5050505050905090565b5f81600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f4091906139ed565b60405180910390a36001905092915050565b602f5481565b610f60611ca9565b87600f81905550866010819055508560118190555084601281905550836013819055508260148190555081601581905550806016819055505050505050505050565b5f600854905090565b601f805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054146112665781600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90614070565b60405180910390fd5b81600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111e991906140bb565b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b611271848484611d27565b90509392505050565b601a5f9054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b602d81815481106112ae575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112e2611ca9565b80602b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60075f9054906101000a900460ff16905090565b611357611ca9565b80602a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6029602052805f5260405f205f915054906101000a900460ff1681565b6025805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b60175481565b611439611ca9565b80600b5f6101000a81548160ff0219169083151502179055507fa2974e0f27442edd60c8b32f67b3197c4da62252841bfed6068f393c853de223816040516114819190613b94565b60405180910390a150565b5f61149982600854610e65565b9050919050565b601c5481565b60225481565b602e5481565b60185481565b6114c0611ca9565b8060295f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611520611ca9565b611528611fed565b156115365761153561208a565b5b565b60195481565b5f8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050602a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156115d857505f602e54115b80156115e957506002602d80549050115b1561160d57602d80549050816115ff919061411b565b8161160a919061414b565b90505b80915050919050565b61161e611ca9565b6116275f61230e565b565b600c5481565b600d5481565b61163d611ca9565b80600b60016101000a81548160ff02191690831515021790555050565b600b5f9054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a60019054906101000a900460ff1681565b602b602052805f5260405f205f915054906101000a900460ff1681565b6060600680546116d290613ff6565b80601f01602080910402602001604051908101604052809291908181526020018280546116fe90613ff6565b80156117495780601f1061172057610100808354040283529160200191611749565b820191905f5260205f20905b81548152906001019060200180831161172c57829003601f168201915b5050505050905090565b601e805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b60275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6117e3338484611d27565b905092915050565b602a602052805f5260405f205f915054906101000a900460ff1681565b60248181548110611817575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61184b611ca9565b611854816123cf565b50565b6020805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6026805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b61191d611ca9565b80600e8190555050565b60215481565b602c602052805f5260405f205f915054906101000a900460ff1681565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6119d4611ca9565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6023602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b611a49611ca9565b80601a60016101000a81548160ff02191690831515021790555050565b611a6e611ca9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad3906141ee565b60405180910390fd5b611ae58161230e565b50565b60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b15611ca9565b5f602f5411611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090614256565b60405180910390fd5b5f82829050602f54611b6b919061411b565b90505f602f819055505f5b838390508160ff161015611ca3578160095f86868560ff16818110611b9e57611b9d614274565b5b9050602002016020810190611bb39190613d82565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611bfa919061414b565b9250508190555083838260ff16818110611c1757611c16614274565b5b9050602002016020810190611c2c9190613d82565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c8891906139ed565b60405180910390a38080611c9b906142a1565b915050611b76565b50505050565b611cb161262b565b73ffffffffffffffffffffffffffffffffffffffff16611ccf61166c565b73ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90614313565b60405180910390fd5b565b5f611d328484612632565b611d3c8383612733565b60305f9054906101000a900460ff1615611d6257611d5b848484612828565b9050611fe6565b611d6a611fed565b15611d7857611d7761208a565b5b602a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611dd057611dcf84612a04565b5b611e57826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a949092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611ea184612ae8565b5f611eac8585612e30565b611eb65782611ec1565b611ec08584612f86565b5b9050611f138160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fc490919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611f5d84612ae8565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611fba91906139ed565b60405180910390a3601a60019054906101000a900460ff1615611fe057611fdf612fd9565b5b60019150505b9392505050565b5f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156120575750600b60019054906101000a900460ff165b801561206f575060305f9054906101000a900460ff16155b80156120855750600e546120823061153e565b10155b905090565b600160305f6101000a81548160ff0219169083151502179055505f6120ae3061153e565b90506120db60275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610e65565b505f600267ffffffffffffffff8111156120f8576120f7614331565b5b6040519080825280602002602001820160405280156121265781602001602082028036833780820191505090505b50905030815f8151811061213d5761213c614274565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122059190614372565b8160018151811061221957612218614274565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016122b595949392919061448d565b5f604051808303815f87803b1580156122cc575f80fd5b505af11580156122de573d5f803e3d5ffd5b505050505f4790506122f0818461304b565b5050505f60305f6101000a81548160ff021916908315150217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6002601a5f9054906101000a900460ff1660ff161480156123f4575060028160ff1614155b15612402576124016132ac565b5b60028160ff16036125d057601f60255f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050602060265f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050505b80601a5f6101000a81548160ff021916908360ff16021790555042601b819055507f3767691dd0ddd9d4be17e4e8e94e164993de91ae51d4fad9ad16b3ff4b7b1e86816040516126209190613cae565b60405180910390a150565b5f33905090565b600b5f9054906101000a900460ff1661272f5760285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126ef575060285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61272e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127259061452f565b60405180910390fd5b5b5050565b602b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661282457600d548111156127c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bd906145bd565b60405180910390fd5b5f816127d18461153e565b6127db919061414b565b9050600c54811115612822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281990614625565b60405180910390fd5b505b5050565b5f6128b0826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a949092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506128fa84612ae8565b61294a8260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fc490919063ffffffff16565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061299483612ae8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129f191906139ed565b60405180910390a3600190509392505050565b5f602e541115612a91575f602d80549050602e54612a22919061411b565b905080602e5f828254612a3591906140bb565b925050819055508060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612a88919061414b565b92505081905550505b50565b5f838311158290612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad29190613a90565b60405180910390fd5b5082840390509392505050565b5f612af28261153e565b90505f811115612c0557602c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612c00576001602c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550602d82908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b612e2c565b602c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612e2b575f602c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b6001602d80549050612cbc91906140bb565b811015612de5578273ffffffffffffffffffffffffffffffffffffffff16602d8281548110612cee57612ced614274565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612dd857602d6001602d80549050612d4591906140bb565b81548110612d5657612d55614274565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602d8281548110612d9257612d91614274565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8080600101915050612caa565b50602d805480612df857612df7614643565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b5b5050565b5f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015612ed4575060295f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80612f7e575060285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612f7d575060295f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b5b905092915050565b5f80601a5f9054906101000a900460ff1660ff161115612fb157612faa83836133a9565b9050612fbe565b612fbb8383613710565b90505b92915050565b5f8183612fd1919061414b565b905092915050565b5f601a5f9054906101000a900460ff1690505f8160ff1603612ffb5750613049565b5f601b544261300a91906140bb565b9050601c5481101561301d575050613049565b60018261302a9190614670565b915060028260ff16111561303d57600191505b613046826123cf565b50505b565b5f60195460185460175461305f919061414b565b613069919061414b565b90505f816017548561307b91906146a4565b613085919061411b565b90505f826017548561309791906146a4565b6130a1919061411b565b90505f83601854876130b391906146a4565b6130bd919061411b565b90505f84601854876130cf91906146a4565b6130d9919061411b565b90505f8285896130e991906140bb565b6130f391906140bb565b90505f82858961310391906140bb565b61310d91906140bb565b90505f8611156131955760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8790811502906040515f60405180830381858888f1935050505015801561317b573d5f803e3d5ffd5b508460175f82825461318d91906140bb565b925050819055505b5f84111561321b5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8590811502906040515f60405180830381858888f19350505050158015613201573d5f803e3d5ffd5b508260185f82825461321391906140bb565b925050819055505b5f8211156132a15760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015613287573d5f803e3d5ffd5b508060195f82825461329991906140bb565b925050819055505b505050505050505050565b600160225f8282546132be919061414b565b925050819055505f60248054905090505f60215414806132dd57505f81145b156132e857506133a7565b5f816021546132f7919061411b565b90505f5b828110156133a3575f6024828154811061331857613317614274565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508260095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461338e919061414b565b925050819055505080806001019150506132fb565b5050505b565b5f8060266040518060a00160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900460ff1660ff1660ff1681526020015f820160029054906101000a900460ff1660ff1660ff1681526020015f820160039054906101000a900460ff1660ff1660ff1681526020015f820160049054906101000a900460ff1660ff1660ff168152505090505f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036135395760256040518060a00160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900460ff1660ff1660ff1681526020015f820160029054906101000a900460ff1660ff1660ff1681526020015f820160039054906101000a900460ff1660ff1660ff1681526020015f820160049054906101000a900460ff1660ff1660ff16815250509150600190505b5f6064836080015160ff168661354f91906146a4565b613559919061411b565b90505f835f015160ff1611156135fd575f836080015160ff16845f015160ff168361358491906146a4565b61358e919061411b565b90508060195f8282546135a1919061414b565b925050819055508060095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546135f4919061414b565b92505081905550505b5f836060015160ff1611156136f2575f836080015160ff16846060015160ff168361362891906146a4565b613632919061411b565b90508060095f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613682919061414b565b9250508190555061dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136e891906139ed565b60405180910390a3505b613705818661395490919063ffffffff16565b935050505092915050565b5f8060135490505f60145490505f60155490505f601654905060285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361379257600f5493506010549250601154915060125490505b5f606485886137a191906146a4565b6137ab919061411b565b90505f606485896137bc91906146a4565b6137c6919061411b565b90505f6064848a6137d791906146a4565b6137e1919061411b565b90505f6064868b6137f291906146a4565b6137fc919061411b565b90505f86111561385a5780602e5f828254613817919061414b565b925050819055507f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c24536481602e546040516138519291906146e5565b60405180910390a15b8360175f82825461386b919061414b565b925050819055508260185f828254613883919061414b565b925050819055508160195f82825461389b919061414b565b925050819055508183856138af919061414b565b6138b9919061414b565b60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613904919061414b565b925050819055505f8183858761391a919061414b565b613924919061414b565b61392e919061414b565b9050613943818c61395490919063ffffffff16565b995050505050505050505092915050565b5f818361396191906140bb565b905092915050565b5f60ff82169050919050565b61397e81613969565b82525050565b5f60a0820190506139975f830188613975565b6139a46020830187613975565b6139b16040830186613975565b6139be6060830185613975565b6139cb6080830184613975565b9695505050505050565b5f819050919050565b6139e7816139d5565b82525050565b5f602082019050613a005f8301846139de565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613a3d578082015181840152602081019050613a22565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613a6282613a06565b613a6c8185613a10565b9350613a7c818560208601613a20565b613a8581613a48565b840191505092915050565b5f6020820190508181035f830152613aa88184613a58565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613ae182613ab8565b9050919050565b613af181613ad7565b8114613afb575f80fd5b50565b5f81359050613b0c81613ae8565b92915050565b613b1b816139d5565b8114613b25575f80fd5b50565b5f81359050613b3681613b12565b92915050565b5f8060408385031215613b5257613b51613ab0565b5b5f613b5f85828601613afe565b9250506020613b7085828601613b28565b9150509250929050565b5f8115159050919050565b613b8e81613b7a565b82525050565b5f602082019050613ba75f830184613b85565b92915050565b5f805f805f805f80610100898b031215613bca57613bc9613ab0565b5b5f613bd78b828c01613b28565b9850506020613be88b828c01613b28565b9750506040613bf98b828c01613b28565b9650506060613c0a8b828c01613b28565b9550506080613c1b8b828c01613b28565b94505060a0613c2c8b828c01613b28565b93505060c0613c3d8b828c01613b28565b92505060e0613c4e8b828c01613b28565b9150509295985092959890939650565b5f805f60608486031215613c7557613c74613ab0565b5b5f613c8286828701613afe565b9350506020613c9386828701613afe565b9250506040613ca486828701613b28565b9150509250925092565b5f602082019050613cc15f830184613975565b92915050565b5f60208284031215613cdc57613cdb613ab0565b5b5f613ce984828501613b28565b91505092915050565b613cfb81613ad7565b82525050565b5f602082019050613d145f830184613cf2565b92915050565b613d2381613b7a565b8114613d2d575f80fd5b50565b5f81359050613d3e81613d1a565b92915050565b5f8060408385031215613d5a57613d59613ab0565b5b5f613d6785828601613afe565b9250506020613d7885828601613d30565b9150509250929050565b5f60208284031215613d9757613d96613ab0565b5b5f613da484828501613afe565b91505092915050565b5f60208284031215613dc257613dc1613ab0565b5b5f613dcf84828501613d30565b91505092915050565b5f819050919050565b5f613dfb613df6613df184613ab8565b613dd8565b613ab8565b9050919050565b5f613e0c82613de1565b9050919050565b5f613e1d82613e02565b9050919050565b613e2d81613e13565b82525050565b5f602082019050613e465f830184613e24565b92915050565b613e5581613969565b8114613e5f575f80fd5b50565b5f81359050613e7081613e4c565b92915050565b5f60208284031215613e8b57613e8a613ab0565b5b5f613e9884828501613e62565b91505092915050565b5f8060408385031215613eb757613eb6613ab0565b5b5f613ec485828601613afe565b9250506020613ed585828601613afe565b9150509250929050565b5f8060408385031215613ef557613ef4613ab0565b5b5f613f0285828601613b28565b9250506020613f1385828601613afe565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112613f3e57613f3d613f1d565b5b8235905067ffffffffffffffff811115613f5b57613f5a613f21565b5b602083019150836020820283011115613f7757613f76613f25565b5b9250929050565b5f8060208385031215613f9457613f93613ab0565b5b5f83013567ffffffffffffffff811115613fb157613fb0613ab4565b5b613fbd85828601613f29565b92509250509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061400d57607f821691505b6020821081036140205761401f613fc9565b5b50919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61405a601d83613a10565b915061406582614026565b602082019050919050565b5f6020820190508181035f8301526140878161404e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6140c5826139d5565b91506140d0836139d5565b92508282039050818111156140e8576140e761408e565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614125826139d5565b9150614130836139d5565b9250826141405761413f6140ee565b5b828204905092915050565b5f614155826139d5565b9150614160836139d5565b92508282019050808211156141785761417761408e565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6141d8602683613a10565b91506141e38261417e565b604082019050919050565b5f6020820190508181035f830152614205816141cc565b9050919050565b7f5265776172642073686f756c6420626520617661696c61626c650000000000005f82015250565b5f614240601a83613a10565b915061424b8261420c565b602082019050919050565b5f6020820190508181035f83015261426d81614234565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6142ab82613969565b915060ff82036142be576142bd61408e565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6142fd602083613a10565b9150614308826142c9565b602082019050919050565b5f6020820190508181035f83015261432a816142f1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061436c81613ae8565b92915050565b5f6020828403121561438757614386613ab0565b5b5f6143948482850161435e565b91505092915050565b5f819050919050565b5f6143c06143bb6143b68461439d565b613dd8565b6139d5565b9050919050565b6143d0816143a6565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61440881613ad7565b82525050565b5f61441983836143ff565b60208301905092915050565b5f602082019050919050565b5f61443b826143d6565b61444581856143e0565b9350614450836143f0565b805f5b83811015614480578151614467888261440e565b975061447283614425565b925050600181019050614453565b5085935050505092915050565b5f60a0820190506144a05f8301886139de565b6144ad60208301876143c7565b81810360408301526144bf8186614431565b90506144ce6060830185613cf2565b6144db60808301846139de565b9695505050505050565b7f54726164696e672069732064697361626c6564210000000000000000000000005f82015250565b5f614519601483613a10565b9150614524826144e5565b602082019050919050565b5f6020820190508181035f8301526145468161450d565b9050919050565b7f4d6178207472616e73616374696f6e20616d6f756e74206973206c696d6974655f8201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b5f6145a7602283613a10565b91506145b28261454d565b604082019050919050565b5f6020820190508181035f8301526145d48161459b565b9050919050565b7f4d61782062616c616e6365206973206c696d69746564210000000000000000005f82015250565b5f61460f601783613a10565b915061461a826145db565b602082019050919050565b5f6020820190508181035f83015261463c81614603565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f61467a82613969565b915061468583613969565b9250828201905060ff81111561469e5761469d61408e565b5b92915050565b5f6146ae826139d5565b91506146b9836139d5565b92508282026146c7816139d5565b915082820484148315176146de576146dd61408e565b5b5092915050565b5f6040820190506146f85f8301856139de565b61470560208301846139de565b939250505056fea2646970667358221220fb469c1240ae25a1035eebe96479969f7019aa5976034d769f4535ef89fea93564736f6c63430008160033
Deployed Bytecode Sourcemap
20852:18944:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23061:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;22058:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22795:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27051:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27639:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24107:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38699:719;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26751:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23265:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;28152:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22713:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21899:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24033:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38408:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26861:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38267:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23823:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23683:17;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;22424:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38543:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27863:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22834:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23501:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24064:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22463:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38140:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39555:124;;;;;;;;;;;;;:::i;:::-;;22502:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27144:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12072:103;;;;;;;;;;;;;:::i;:::-;;21936:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21999:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39687:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21860:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11424:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22758:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23930:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26954:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23155:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;23734:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27988:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23873:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23646:28;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37346:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23359:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;23707:18;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;39426:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23454:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23986;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27484:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38023:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23575:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37444:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12330:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23784:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37544:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23061:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22058:57::-;;;;:::o;22795:32::-;;;;:::o;27051:85::-;27090:13;27123:5;27116:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27051:85;:::o;27639:216::-;27714:4;27766:6;27731:11;:23;27743:10;27731:23;;;;;;;;;;;;;;;:32;27755:7;27731:32;;;;;;;;;;;;;;;:41;;;;27809:7;27788:37;;27797:10;27788:37;;;27818:6;27788:37;;;;;;:::i;:::-;;;;;;;;27843:4;27836:11;;27639:216;;;;:::o;24107:40::-;;;;:::o;38699:719::-;11310:13;:11;:13::i;:::-;39062:16:::1;39043;:35;;;;39108:16;39089;:35;;;;39155:17;39135;:37;;;;39201:15;39183;:33;;;;39249:17;39229;:37;;;;39297:17;39277;:37;;;;39346:18;39325;:39;;;;39394:16;39375;:35;;;;38699:719:::0;;;;;;;;:::o;26751:102::-;26806:7;26833:12;;26826:19;;26751:102;:::o;23265:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28152:441::-;28252:4;28308:17;28273:11;:19;28285:6;28273:19;;;;;;;;;;;;;;;:31;28293:10;28273:31;;;;;;;;;;;;;;;;:52;28269:257;;28385:6;28350:11;:19;28362:6;28350:19;;;;;;;;;;;;;;;:31;28370:10;28350:31;;;;;;;;;;;;;;;;:41;;28342:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;28508:6;28474:11;:19;28486:6;28474:19;;;;;;;;;;;;;;;:31;28494:10;28474:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;28440:11;:19;28452:6;28440:19;;;;;;;;;;;;;;;:31;28460:10;28440:31;;;;;;;;;;;;;;;:74;;;;28269:257;28545:40;28559:6;28567:9;28578:6;28545:13;:40::i;:::-;28538:47;;28152:441;;;;;:::o;22713:21::-;;;;;;;;;;;;;:::o;21899:30::-;;;;;;;;;;;;;:::o;24033:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38408:127::-;11310:13;:11;:13::i;:::-;38521:6:::1;38495:15;:23;38511:6;38495:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;38408:127:::0;;:::o;26861:85::-;26904:5;26929:9;;;;;;;;;;;26922:16;;26861:85;:::o;38267:133::-;11310:13;:11;:13::i;:::-;38386:6:::1;38357:18;:26;38376:6;38357:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;38267:133:::0;;:::o;23823:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;23683:17::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22424:32::-;;;;:::o;38543:148::-;11310:13;:11;:13::i;:::-;38632:7:::1;38616:13;;:23;;;;;;;;;;;;;;;;;;38655:28;38675:7;38655:28;;;;;;:::i;:::-;;;;;;;;38543:148:::0;:::o;27863:117::-;27918:4;27942:30;27950:7;27959:12;;27942:7;:30::i;:::-;27935:37;;27863:117;;;:::o;22834:35::-;;;;:::o;23501:26::-;;;;:::o;24064:36::-;;;;:::o;22463:32::-;;;;:::o;38140:119::-;11310:13;:11;:13::i;:::-;38245:6:::1;38223:11;:19;38235:6;38223:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;38140:119:::0;;:::o;39555:124::-;11310:13;:11;:13::i;:::-;39615:17:::1;:15;:17::i;:::-;39611:61;;;39649:11;:9;:11::i;:::-;39611:61;39555:124::o:0;22502:31::-;;;;:::o;27144:332::-;27210:7;27230:20;27253:9;:18;27263:7;27253:18;;;;;;;;;;;;;;;;27230:41;;27287:18;:27;27306:7;27287:27;;;;;;;;;;;;;;;;;;;;;;;;;27286:28;:57;;;;;27342:1;27318:21;;:25;27286:57;:79;;;;;27364:1;27347:7;:14;;;;:18;27286:79;27282:157;;;27413:7;:14;;;;27398:12;:29;;;;:::i;:::-;27382:45;;;;;:::i;:::-;;;27282:157;27456:12;27449:19;;;27144:332;;;:::o;12072:103::-;11310:13;:11;:13::i;:::-;12137:30:::1;12164:1;12137:18;:30::i;:::-;12072:103::o:0;21936:50::-;;;;:::o;21999:45::-;;;;:::o;39687:106::-;11310:13;:11;:13::i;:::-;39774:11:::1;39761:10;;:24;;;;;;;;;;;;;;;;;;39687:106:::0;:::o;21860:32::-;;;;;;;;;;;;;:::o;11424:87::-;11470:7;11497:6;;;;;;;;;;;11490:13;;11424:87;:::o;22758:30::-;;;;;;;;;;;;;:::o;23930:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;26954:89::-;26995:13;27028:7;27021:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26954:89;:::o;23155:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23734:43::-;;;;;;;;;;;;;:::o;27988:156::-;28068:4;28092:44;28106:10;28118:9;28129:6;28092:13;:44::i;:::-;28085:51;;27988:156;;;;:::o;23873:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;23646:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37346:90::-;11310:13;:11;:13::i;:::-;37410:18:::1;37422:5;37410:11;:18::i;:::-;37346:90:::0;:::o;23359:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23707:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39426:121::-;11310:13;:11;:13::i;:::-;39525:14:::1;39509:13;:30;;;;39426:121:::0;:::o;23454:40::-;;;;:::o;23986:::-;;;;;;;;;;;;;;;;;;;;;;:::o;27484:147::-;27568:7;27595:11;:19;27607:6;27595:19;;;;;;;;;;;;;;;:28;27615:7;27595:28;;;;;;;;;;;;;;;;27588:35;;27484:147;;;;:::o;38023:109::-;11310:13;:11;:13::i;:::-;38115:9:::1;38097:15;;:27;;;;;;;;;;;;;;;;;;38023:109:::0;:::o;23575:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37444:92::-;11310:13;:11;:13::i;:::-;37521:7:::1;37508:10;;:20;;;;;;;;;;;;;;;;;;37444:92:::0;:::o;12330:201::-;11310:13;:11;:13::i;:::-;12439:1:::1;12419:22;;:8;:22;;::::0;12411:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12495:28;12514:8;12495:18;:28::i;:::-;12330:201:::0;:::o;23784:30::-;;;;;;;;;;;;;:::o;37544:471::-;11310:13;:11;:13::i;:::-;37666:1:::1;37638:25;;:29;37630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37709:17;37757:11;;:18;;37729:25;;:46;;;;:::i;:::-;37709:66;;37814:1;37786:25;:29;;;;37831:7;37826:182;37848:11;;:18;;37844:1;:22;;;37826:182;;;37917:9;37888;:25;37898:11;;37910:1;37898:14;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;37888:25;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;37970:11;;37982:1;37970:14;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;37946:50;;37963:4;37946:50;;;37986:9;37946:50;;;;;;:::i;:::-;;;;;;;;37868:3;;;;;:::i;:::-;;;;37826:182;;;;37619:396;37544:471:::0;;:::o;11589:132::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11589:132::o;28601:926::-;28693:4;28710:32;28724:6;28732:9;28710:13;:32::i;:::-;28753:36;28771:9;28782:6;28753:17;:36::i;:::-;28804:6;;;;;;;;;;;28800:87;;;28834:41;28849:6;28857:9;28868:6;28834:14;:41::i;:::-;28827:48;;;;28800:87;28901:17;:15;:17::i;:::-;28897:61;;;28935:11;:9;:11::i;:::-;28897:61;28973:18;:26;28992:6;28973:26;;;;;;;;;;;;;;;;;;;;;;;;;28968:73;;29015:14;29022:6;29015;:14::i;:::-;28968:73;29071:53;29093:6;29071:53;;;;;;;;;;;;;;;;;:9;:17;29081:6;29071:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;29051:9;:17;29061:6;29051:17;;;;;;;;;;;;;;;:73;;;;29135:22;29150:6;29135:14;:22::i;:::-;29168;29193:33;29208:6;29216:9;29193:14;:33::i;:::-;:70;;29257:6;29193:70;;;29229:25;29239:6;29247;29229:9;:25::i;:::-;29193:70;29168:95;;29297:40;29322:14;29297:9;:20;29307:9;29297:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;29274:9;:20;29284:9;29274:20;;;;;;;;;;;;;;;:63;;;;29348:25;29363:9;29348:14;:25::i;:::-;29406:9;29389:35;;29398:6;29389:35;;;29417:6;29389:35;;;;;;:::i;:::-;;;;;;;;29441:10;;;;;;;;;;;29437:59;;;29468:16;:14;:16::i;:::-;29437:59;29515:4;29508:11;;;28601:926;;;;;;:::o;34215:223::-;34265:4;34303:15;;;;;;;;;;;34289:29;;:10;:29;;;;:57;;;;;34336:10;;;;;;;;;;;34289:57;:82;;;;;34365:6;;;;;;;;;;;34364:7;34289:82;:141;;;;;34417:13;;34389:24;34407:4;34389:9;:24::i;:::-;:41;;34289:141;34282:148;;34215:223;:::o;34446:569::-;24387:4;24378:6;;:13;;;;;;;;;;;;;;;;;;34496:20:::1;34519:24;34537:4;34519:9;:24::i;:::-;34496:47;;34554:49;34570:17;;;;;;;;;;;34590:12;34554:7;:49::i;:::-;;34631:21;34669:1;34655:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34631:40;;34700:4;34682;34687:1;34682:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34726:17;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34716:4;34721:1;34716:7;;;;;;;;:::i;:::-;;;;;;;:34;;;;;;;;;::::0;::::1;34761:17;;;;;;;;;;;:68;;;34844:12;34858:1;34861:4;34875;34882:15;34761:147;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34919:17;34939:21;34919:41;;34971:36;34983:9;34994:12;34971:11;:36::i;:::-;34485:530;;;24423:5:::0;24414:6;;:14;;;;;;;;;;;;;;;;;;34446:569::o;12691:191::-;12765:16;12784:6;;;;;;;;;;;12765:25;;12810:8;12801:6;;:17;;;;;;;;;;;;;;;;;;12865:8;12834:40;;12855:8;12834:40;;;;;;;;;;;;12754:128;12691:191;:::o;36568:345::-;36634:1;36626:4;;;;;;;;;;;:9;;;:23;;;;;36648:1;36639:5;:10;;;;36626:23;36622:76;;;36666:20;:18;:20::i;:::-;36622:76;36721:1;36712:5;:10;;;36708:100;;36748:11;36739:6;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36784:12;36774:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36708:100;36825:5;36818:4;;:12;;;;;;;;;;;;;;;;;;36857:15;36841:13;:31;;;;36888:17;36899:5;36888:17;;;;;;:::i;:::-;;;;;;;;36568:345;:::o;10133:98::-;10186:7;10213:10;10206:17;;10133:98;:::o;32661:227::-;32749:13;;;;;;;;;;;32744:137;;32797:15;;;;;;;;;;;32787:25;;:6;:25;;;;:57;;;;;32829:15;;;;;;;;;;;32816:28;;:9;:28;;;;32787:57;32779:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;32744:137;32661:227;;:::o;32896:364::-;32988:15;:26;33004:9;32988:26;;;;;;;;;;;;;;;;;;;;;;;;;32983:270;;33049:5;;33039:6;:15;;33031:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33108:22;33156:6;33133:20;33143:9;33133;:20::i;:::-;:29;;;;:::i;:::-;33108:54;;33203:10;;33185:14;:28;;33177:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33016:237;32983:270;32896:364;;:::o;29535:399::-;29628:4;29665:53;29687:6;29665:53;;;;;;;;;;;;;;;;;:9;:17;29675:6;29665:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;29645:9;:17;29655:6;29645:17;;;;;;;;;;;;;;;:73;;;;29729:22;29744:6;29729:14;:22::i;:::-;29785:32;29810:6;29785:9;:20;29795:9;29785:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;29762:9;:20;29772:9;29762:20;;;;;;;;;;;;;;;:55;;;;29828:25;29843:9;29828:14;:25::i;:::-;29886:9;29869:35;;29878:6;29869:35;;;29897:6;29869:35;;;;;;:::i;:::-;;;;;;;;29922:4;29915:11;;29535:399;;;;;:::o;33926:281::-;34006:1;33982:21;;:25;33978:222;;;34024:21;34072:7;:14;;;;34048:21;;:38;;;;:::i;:::-;34024:62;;34126:13;34101:21;;:38;;;;;;;:::i;:::-;;;;;;;;34175:13;34154:9;:17;34164:6;34154:17;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;34009:191;33978:222;33926:281;:::o;7707:240::-;7827:7;7885:1;7880;:6;;7888:12;7872:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7927:1;7923;:5;7916:12;;7707:240;;;;;:::o;33272:646::-;33332:15;33350:17;33360:6;33350:9;:17::i;:::-;33332:35;;33392:1;33382:7;:11;33378:533;;;33415:8;:16;33424:6;33415:16;;;;;;;;;;;;;;;;;;;;;;;;;33410:120;;33471:4;33452:8;:16;33461:6;33452:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;33494:7;33507:6;33494:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33410:120;33378:533;;;33566:8;:16;33575:6;33566:16;;;;;;;;;;;;;;;;;;;;;;;;;33562:338;;;33622:5;33603:8;:16;33612:6;33603:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;33650:9;33646:207;33686:1;33669:7;:14;;;;:18;;;;:::i;:::-;33665:1;:22;33646:207;;;33735:6;33721:20;;:7;33729:1;33721:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:20;;;33717:117;;33783:7;33808:1;33791:7;:14;;;;:18;;;;:::i;:::-;33783:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33770:7;33778:1;33770:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;33717:117;33689:3;;;;;;;33646:207;;;;33871:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;33562:338;33378:533;33321:597;33272:646;:::o;32427:226::-;32509:4;32547:15;;;;;;;;;;;32534:28;;:9;:28;;;:52;;;;;32567:11;:19;32579:6;32567:19;;;;;;;;;;;;;;;;;;;;;;;;;32566:20;32534:52;32533:112;;;;32602:15;;;;;;;;;;;32592:25;;:6;:25;;;:52;;;;;32622:11;:22;32634:9;32622:22;;;;;;;;;;;;;;;;;;;;;;;;;32621:23;32592:52;32533:112;32526:119;;32427:226;;;;:::o;32178:241::-;32247:7;32278:1;32271:4;;;;;;;;;;;:8;;;32267:145;;;32303:29;32317:6;32325;32303:13;:29::i;:::-;32296:36;;;;32267:145;32372:28;32385:6;32393;32372:12;:28::i;:::-;32365:35;;32178:241;;;;;:::o;5428:98::-;5486:7;5517:1;5513;:5;;;;:::i;:::-;5506:12;;5428:98;;;;:::o;36921:417::-;36967:18;36988:4;;;;;;;;;;;36967:25;;37023:1;37007:12;:17;;;37003:56;;37041:7;;;37003:56;37069:17;37107:13;;37089:15;:31;;;;:::i;:::-;37069:51;;37147:10;;37135:9;:22;37131:61;;;37174:7;;;;37131:61;37218:1;37202:17;;;;;:::i;:::-;;;37249:1;37234:12;:16;;;37230:65;;;37282:1;37267:16;;37230:65;37305:25;37317:12;37305:11;:25::i;:::-;36956:382;;36921:417;:::o;35023:1108::-;35100:17;35152:12;;35136:13;;35120;;:29;;;;:::i;:::-;:44;;;;:::i;:::-;35100:64;;35175:23;35226:9;35210:13;;35201:6;:22;;;;:::i;:::-;:34;;;;:::i;:::-;35175:60;;35246:27;35305:9;35289:13;;35276:10;:26;;;;:::i;:::-;:38;;;;:::i;:::-;35246:68;;35325:23;35376:9;35360:13;;35351:6;:22;;;;:::i;:::-;:34;;;;:::i;:::-;35325:60;;35396:27;35455:9;35439:13;;35426:10;:26;;;;:::i;:::-;:38;;;;:::i;:::-;35396:68;;35475:22;35527:15;35509;35500:6;:24;;;;:::i;:::-;:42;;;;:::i;:::-;35475:67;;35553:26;35617:19;35595;35582:10;:32;;;;:::i;:::-;:54;;;;:::i;:::-;35553:83;;35669:1;35651:15;:19;35647:154;;;35695:16;;;;;;;;;;;35687:34;;:51;35722:15;35687:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35770:19;35753:13;;:36;;;;;;;:::i;:::-;;;;;;;;35647:154;35833:1;35815:15;:19;35811:154;;;35859:16;;;;;;;;;;;35851:34;;:51;35886:15;35851:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35934:19;35917:13;;:36;;;;;;;:::i;:::-;;;;;;;;35811:154;35996:1;35979:14;:18;35975:149;;;36022:15;;;;;;;;;;;36014:33;;:49;36048:14;36014:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36094:18;36078:12;;:34;;;;;;;:::i;:::-;;;;;;;;35975:149;35089:1042;;;;;;;35023:1108;;:::o;36139:421::-;36200:1;36189:7;;:12;;;;;;;:::i;:::-;;;;;;;;36212:18;36233:11;:18;;;;36212:39;;36291:1;36266:21;;:26;:45;;;;36310:1;36296:10;:15;36266:45;36262:58;;;36313:7;;;36262:58;36330:24;36381:10;36357:21;;:34;;;;:::i;:::-;36330:61;;36407:9;36402:151;36426:10;36422:1;:14;36402:151;;;36458:14;36475:11;36487:1;36475:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36458:31;;36525:16;36504:9;:17;36514:6;36504:17;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;36443:110;36438:3;;;;;;;36402:151;;;;36178:382;;36139:421;:::o;31316:854::-;31389:7;31409:18;31430:7;31409:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31448:11;31492:15;;;;;;;;;;;31482:25;;:6;:25;;;31478:102;;31534:6;31524:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31564:4;31555:13;;31478:102;31590:17;31635:3;31619:7;:13;;;31610:22;;:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;31590:48;;31672:1;31653:7;:16;;;:20;;;31649:236;;;31690:26;31750:7;:13;;;31719:44;;31731:7;:16;;;31719:28;;:9;:28;;;;:::i;:::-;:44;;;;:::i;:::-;31690:73;;31794:18;31778:12;;:34;;;;;;;:::i;:::-;;;;;;;;31855:18;31827:9;:24;31845:4;31827:24;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;31675:210;31649:236;31914:1;31899:7;:12;;;:16;;;31895:227;;;31932:22;31984:7;:13;;;31957:40;;31969:7;:12;;;31957:24;;:9;:24;;;;:::i;:::-;:40;;;;:::i;:::-;31932:65;;32031:14;32012:9;:15;20967:6;32012:15;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;20967:6;32065:45;;32082:4;32065:45;;;32095:14;32065:45;;;;;;:::i;:::-;;;;;;;;31917:205;31895:227;32141:21;32152:9;32141:6;:10;;:21;;;;:::i;:::-;32134:28;;;;;31316:854;;;;:::o;29942:1366::-;30014:7;30034:21;30058:17;;30034:41;;30086:21;30110:17;;30086:41;;30138:22;30163:18;;30138:43;;30192:20;30215:16;;30192:39;;30256:15;;;;;;;;;;;30246:25;;:6;:25;;;30242:231;;30304:16;;30288:32;;30351:16;;30335:32;;30399:17;;30382:34;;30446:15;;30431:30;;30242:231;30483:24;30535:3;30519:13;30510:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;30483:55;;30549:24;30601:3;30585:13;30576:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;30549:55;;30615:23;30665:3;30650:12;30641:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;30615:53;;30679:28;30736:3;30719:14;30710:6;:23;;;;:::i;:::-;:29;;;;:::i;:::-;30679:60;;30771:1;30754:14;:18;30750:171;;;30814:20;30789:21;;:45;;;;;;;:::i;:::-;;;;;;;;30854:55;30865:20;30887:21;;30854:55;;;;;;;:::i;:::-;;;;;;;;30750:171;30948:16;30931:13;;:33;;;;;;;:::i;:::-;;;;;;;;30992:16;30975:13;;:33;;;;;;;:::i;:::-;;;;;;;;31035:15;31019:12;;:31;;;;;;;:::i;:::-;;;;;;;;31127:15;31108:16;31089;:35;;;;:::i;:::-;:53;;;;:::i;:::-;31061:9;:24;31079:4;31061:24;;;;;;;;;;;;;;;;:81;;;;;;;:::i;:::-;;;;;;;;31153:23;31235:20;31217:15;31198:16;31179;:35;;;;:::i;:::-;:53;;;;:::i;:::-;:76;;;;:::i;:::-;31153:102;;31273:27;31284:15;31273:6;:10;;:27;;;;:::i;:::-;31266:34;;;;;;;;;;;29942:1366;;;;:::o;5809:98::-;5867:7;5898:1;5894;:5;;;;:::i;:::-;5887:12;;5809:98;;;;:::o;7:86:1:-;42:7;82:4;75:5;71:16;60:27;;7:86;;;:::o;99:112::-;182:22;198:5;182:22;:::i;:::-;177:3;170:35;99:112;;:::o;217:624::-;402:4;440:3;429:9;425:19;417:27;;454:67;518:1;507:9;503:17;494:6;454:67;:::i;:::-;531:68;595:2;584:9;580:18;571:6;531:68;:::i;:::-;609;673:2;662:9;658:18;649:6;609:68;:::i;:::-;687;751:2;740:9;736:18;727:6;687:68;:::i;:::-;765:69;829:3;818:9;814:19;805:6;765:69;:::i;:::-;217:624;;;;;;;;:::o;847:77::-;884:7;913:5;902:16;;847:77;;;:::o;930:118::-;1017:24;1035:5;1017:24;:::i;:::-;1012:3;1005:37;930:118;;:::o;1054:222::-;1147:4;1185:2;1174:9;1170:18;1162:26;;1198:71;1266:1;1255:9;1251:17;1242:6;1198:71;:::i;:::-;1054:222;;;;:::o;1282:99::-;1334:6;1368:5;1362:12;1352:22;;1282:99;;;:::o;1387:169::-;1471:11;1505:6;1500:3;1493:19;1545:4;1540:3;1536:14;1521:29;;1387:169;;;;:::o;1562:246::-;1643:1;1653:113;1667:6;1664:1;1661:13;1653:113;;;1752:1;1747:3;1743:11;1737:18;1733:1;1728:3;1724:11;1717:39;1689:2;1686:1;1682:10;1677:15;;1653:113;;;1800:1;1791:6;1786:3;1782:16;1775:27;1624:184;1562:246;;;:::o;1814:102::-;1855:6;1906:2;1902:7;1897:2;1890:5;1886:14;1882:28;1872:38;;1814:102;;;:::o;1922:377::-;2010:3;2038:39;2071:5;2038:39;:::i;:::-;2093:71;2157:6;2152:3;2093:71;:::i;:::-;2086:78;;2173:65;2231:6;2226:3;2219:4;2212:5;2208:16;2173:65;:::i;:::-;2263:29;2285:6;2263:29;:::i;:::-;2258:3;2254:39;2247:46;;2014:285;1922:377;;;;:::o;2305:313::-;2418:4;2456:2;2445:9;2441:18;2433:26;;2505:9;2499:4;2495:20;2491:1;2480:9;2476:17;2469:47;2533:78;2606:4;2597:6;2533:78;:::i;:::-;2525:86;;2305:313;;;;:::o;2705:117::-;2814:1;2811;2804:12;2828:117;2937:1;2934;2927:12;2951:126;2988:7;3028:42;3021:5;3017:54;3006:65;;2951:126;;;:::o;3083:96::-;3120:7;3149:24;3167:5;3149:24;:::i;:::-;3138:35;;3083:96;;;:::o;3185:122::-;3258:24;3276:5;3258:24;:::i;:::-;3251:5;3248:35;3238:63;;3297:1;3294;3287:12;3238:63;3185:122;:::o;3313:139::-;3359:5;3397:6;3384:20;3375:29;;3413:33;3440:5;3413:33;:::i;:::-;3313:139;;;;:::o;3458:122::-;3531:24;3549:5;3531:24;:::i;:::-;3524:5;3521:35;3511:63;;3570:1;3567;3560:12;3511:63;3458:122;:::o;3586:139::-;3632:5;3670:6;3657:20;3648:29;;3686:33;3713:5;3686:33;:::i;:::-;3586:139;;;;:::o;3731:474::-;3799:6;3807;3856:2;3844:9;3835:7;3831:23;3827:32;3824:119;;;3862:79;;:::i;:::-;3824:119;3982:1;4007:53;4052:7;4043:6;4032:9;4028:22;4007:53;:::i;:::-;3997:63;;3953:117;4109:2;4135:53;4180:7;4171:6;4160:9;4156:22;4135:53;:::i;:::-;4125:63;;4080:118;3731:474;;;;;:::o;4211:90::-;4245:7;4288:5;4281:13;4274:21;4263:32;;4211:90;;;:::o;4307:109::-;4388:21;4403:5;4388:21;:::i;:::-;4383:3;4376:34;4307:109;;:::o;4422:210::-;4509:4;4547:2;4536:9;4532:18;4524:26;;4560:65;4622:1;4611:9;4607:17;4598:6;4560:65;:::i;:::-;4422:210;;;;:::o;4638:1349::-;4760:6;4768;4776;4784;4792;4800;4808;4816;4865:3;4853:9;4844:7;4840:23;4836:33;4833:120;;;4872:79;;:::i;:::-;4833:120;4992:1;5017:53;5062:7;5053:6;5042:9;5038:22;5017:53;:::i;:::-;5007:63;;4963:117;5119:2;5145:53;5190:7;5181:6;5170:9;5166:22;5145:53;:::i;:::-;5135:63;;5090:118;5247:2;5273:53;5318:7;5309:6;5298:9;5294:22;5273:53;:::i;:::-;5263:63;;5218:118;5375:2;5401:53;5446:7;5437:6;5426:9;5422:22;5401:53;:::i;:::-;5391:63;;5346:118;5503:3;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5474:119;5632:3;5659:53;5704:7;5695:6;5684:9;5680:22;5659:53;:::i;:::-;5649:63;;5603:119;5761:3;5788:53;5833:7;5824:6;5813:9;5809:22;5788:53;:::i;:::-;5778:63;;5732:119;5890:3;5917:53;5962:7;5953:6;5942:9;5938:22;5917:53;:::i;:::-;5907:63;;5861:119;4638:1349;;;;;;;;;;;:::o;5993:619::-;6070:6;6078;6086;6135:2;6123:9;6114:7;6110:23;6106:32;6103:119;;;6141:79;;:::i;:::-;6103:119;6261:1;6286:53;6331:7;6322:6;6311:9;6307:22;6286:53;:::i;:::-;6276:63;;6232:117;6388:2;6414:53;6459:7;6450:6;6439:9;6435:22;6414:53;:::i;:::-;6404:63;;6359:118;6516:2;6542:53;6587:7;6578:6;6567:9;6563:22;6542:53;:::i;:::-;6532:63;;6487:118;5993:619;;;;;:::o;6618:214::-;6707:4;6745:2;6734:9;6730:18;6722:26;;6758:67;6822:1;6811:9;6807:17;6798:6;6758:67;:::i;:::-;6618:214;;;;:::o;6838:329::-;6897:6;6946:2;6934:9;6925:7;6921:23;6917:32;6914:119;;;6952:79;;:::i;:::-;6914:119;7072:1;7097:53;7142:7;7133:6;7122:9;7118:22;7097:53;:::i;:::-;7087:63;;7043:117;6838:329;;;;:::o;7173:118::-;7260:24;7278:5;7260:24;:::i;:::-;7255:3;7248:37;7173:118;;:::o;7297:222::-;7390:4;7428:2;7417:9;7413:18;7405:26;;7441:71;7509:1;7498:9;7494:17;7485:6;7441:71;:::i;:::-;7297:222;;;;:::o;7525:116::-;7595:21;7610:5;7595:21;:::i;:::-;7588:5;7585:32;7575:60;;7631:1;7628;7621:12;7575:60;7525:116;:::o;7647:133::-;7690:5;7728:6;7715:20;7706:29;;7744:30;7768:5;7744:30;:::i;:::-;7647:133;;;;:::o;7786:468::-;7851:6;7859;7908:2;7896:9;7887:7;7883:23;7879:32;7876:119;;;7914:79;;:::i;:::-;7876:119;8034:1;8059:53;8104:7;8095:6;8084:9;8080:22;8059:53;:::i;:::-;8049:63;;8005:117;8161:2;8187:50;8229:7;8220:6;8209:9;8205:22;8187:50;:::i;:::-;8177:60;;8132:115;7786:468;;;;;:::o;8260:329::-;8319:6;8368:2;8356:9;8347:7;8343:23;8339:32;8336:119;;;8374:79;;:::i;:::-;8336:119;8494:1;8519:53;8564:7;8555:6;8544:9;8540:22;8519:53;:::i;:::-;8509:63;;8465:117;8260:329;;;;:::o;8595:323::-;8651:6;8700:2;8688:9;8679:7;8675:23;8671:32;8668:119;;;8706:79;;:::i;:::-;8668:119;8826:1;8851:50;8893:7;8884:6;8873:9;8869:22;8851:50;:::i;:::-;8841:60;;8797:114;8595:323;;;;:::o;8924:60::-;8952:3;8973:5;8966:12;;8924:60;;;:::o;8990:142::-;9040:9;9073:53;9091:34;9100:24;9118:5;9100:24;:::i;:::-;9091:34;:::i;:::-;9073:53;:::i;:::-;9060:66;;8990:142;;;:::o;9138:126::-;9188:9;9221:37;9252:5;9221:37;:::i;:::-;9208:50;;9138:126;;;:::o;9270:152::-;9346:9;9379:37;9410:5;9379:37;:::i;:::-;9366:50;;9270:152;;;:::o;9428:183::-;9541:63;9598:5;9541:63;:::i;:::-;9536:3;9529:76;9428:183;;:::o;9617:274::-;9736:4;9774:2;9763:9;9759:18;9751:26;;9787:97;9881:1;9870:9;9866:17;9857:6;9787:97;:::i;:::-;9617:274;;;;:::o;9897:118::-;9968:22;9984:5;9968:22;:::i;:::-;9961:5;9958:33;9948:61;;10005:1;10002;9995:12;9948:61;9897:118;:::o;10021:135::-;10065:5;10103:6;10090:20;10081:29;;10119:31;10144:5;10119:31;:::i;:::-;10021:135;;;;:::o;10162:325::-;10219:6;10268:2;10256:9;10247:7;10243:23;10239:32;10236:119;;;10274:79;;:::i;:::-;10236:119;10394:1;10419:51;10462:7;10453:6;10442:9;10438:22;10419:51;:::i;:::-;10409:61;;10365:115;10162:325;;;;:::o;10493:474::-;10561:6;10569;10618:2;10606:9;10597:7;10593:23;10589:32;10586:119;;;10624:79;;:::i;:::-;10586:119;10744:1;10769:53;10814:7;10805:6;10794:9;10790:22;10769:53;:::i;:::-;10759:63;;10715:117;10871:2;10897:53;10942:7;10933:6;10922:9;10918:22;10897:53;:::i;:::-;10887:63;;10842:118;10493:474;;;;;:::o;10973:::-;11041:6;11049;11098:2;11086:9;11077:7;11073:23;11069:32;11066:119;;;11104:79;;:::i;:::-;11066:119;11224:1;11249:53;11294:7;11285:6;11274:9;11270:22;11249:53;:::i;:::-;11239:63;;11195:117;11351:2;11377:53;11422:7;11413:6;11402:9;11398:22;11377:53;:::i;:::-;11367:63;;11322:118;10973:474;;;;;:::o;11453:117::-;11562:1;11559;11552:12;11576:117;11685:1;11682;11675:12;11699:117;11808:1;11805;11798:12;11839:568;11912:8;11922:6;11972:3;11965:4;11957:6;11953:17;11949:27;11939:122;;11980:79;;:::i;:::-;11939:122;12093:6;12080:20;12070:30;;12123:18;12115:6;12112:30;12109:117;;;12145:79;;:::i;:::-;12109:117;12259:4;12251:6;12247:17;12235:29;;12313:3;12305:4;12297:6;12293:17;12283:8;12279:32;12276:41;12273:128;;;12320:79;;:::i;:::-;12273:128;11839:568;;;;;:::o;12413:559::-;12499:6;12507;12556:2;12544:9;12535:7;12531:23;12527:32;12524:119;;;12562:79;;:::i;:::-;12524:119;12710:1;12699:9;12695:17;12682:31;12740:18;12732:6;12729:30;12726:117;;;12762:79;;:::i;:::-;12726:117;12875:80;12947:7;12938:6;12927:9;12923:22;12875:80;:::i;:::-;12857:98;;;;12653:312;12413:559;;;;;:::o;12978:180::-;13026:77;13023:1;13016:88;13123:4;13120:1;13113:15;13147:4;13144:1;13137:15;13164:320;13208:6;13245:1;13239:4;13235:12;13225:22;;13292:1;13286:4;13282:12;13313:18;13303:81;;13369:4;13361:6;13357:17;13347:27;;13303:81;13431:2;13423:6;13420:14;13400:18;13397:38;13394:84;;13450:18;;:::i;:::-;13394:84;13215:269;13164:320;;;:::o;13490:179::-;13630:31;13626:1;13618:6;13614:14;13607:55;13490:179;:::o;13675:366::-;13817:3;13838:67;13902:2;13897:3;13838:67;:::i;:::-;13831:74;;13914:93;14003:3;13914:93;:::i;:::-;14032:2;14027:3;14023:12;14016:19;;13675:366;;;:::o;14047:419::-;14213:4;14251:2;14240:9;14236:18;14228:26;;14300:9;14294:4;14290:20;14286:1;14275:9;14271:17;14264:47;14328:131;14454:4;14328:131;:::i;:::-;14320:139;;14047:419;;;:::o;14472:180::-;14520:77;14517:1;14510:88;14617:4;14614:1;14607:15;14641:4;14638:1;14631:15;14658:194;14698:4;14718:20;14736:1;14718:20;:::i;:::-;14713:25;;14752:20;14770:1;14752:20;:::i;:::-;14747:25;;14796:1;14793;14789:9;14781:17;;14820:1;14814:4;14811:11;14808:37;;;14825:18;;:::i;:::-;14808:37;14658:194;;;;:::o;14858:180::-;14906:77;14903:1;14896:88;15003:4;15000:1;14993:15;15027:4;15024:1;15017:15;15044:185;15084:1;15101:20;15119:1;15101:20;:::i;:::-;15096:25;;15135:20;15153:1;15135:20;:::i;:::-;15130:25;;15174:1;15164:35;;15179:18;;:::i;:::-;15164:35;15221:1;15218;15214:9;15209:14;;15044:185;;;;:::o;15235:191::-;15275:3;15294:20;15312:1;15294:20;:::i;:::-;15289:25;;15328:20;15346:1;15328:20;:::i;:::-;15323:25;;15371:1;15368;15364:9;15357:16;;15392:3;15389:1;15386:10;15383:36;;;15399:18;;:::i;:::-;15383:36;15235:191;;;;:::o;15432:225::-;15572:34;15568:1;15560:6;15556:14;15549:58;15641:8;15636:2;15628:6;15624:15;15617:33;15432:225;:::o;15663:366::-;15805:3;15826:67;15890:2;15885:3;15826:67;:::i;:::-;15819:74;;15902:93;15991:3;15902:93;:::i;:::-;16020:2;16015:3;16011:12;16004:19;;15663:366;;;:::o;16035:419::-;16201:4;16239:2;16228:9;16224:18;16216:26;;16288:9;16282:4;16278:20;16274:1;16263:9;16259:17;16252:47;16316:131;16442:4;16316:131;:::i;:::-;16308:139;;16035:419;;;:::o;16460:176::-;16600:28;16596:1;16588:6;16584:14;16577:52;16460:176;:::o;16642:366::-;16784:3;16805:67;16869:2;16864:3;16805:67;:::i;:::-;16798:74;;16881:93;16970:3;16881:93;:::i;:::-;16999:2;16994:3;16990:12;16983:19;;16642:366;;;:::o;17014:419::-;17180:4;17218:2;17207:9;17203:18;17195:26;;17267:9;17261:4;17257:20;17253:1;17242:9;17238:17;17231:47;17295:131;17421:4;17295:131;:::i;:::-;17287:139;;17014:419;;;:::o;17439:180::-;17487:77;17484:1;17477:88;17584:4;17581:1;17574:15;17608:4;17605:1;17598:15;17625:167;17662:3;17685:22;17701:5;17685:22;:::i;:::-;17676:31;;17729:4;17722:5;17719:15;17716:41;;17737:18;;:::i;:::-;17716:41;17784:1;17777:5;17773:13;17766:20;;17625:167;;;:::o;17798:182::-;17938:34;17934:1;17926:6;17922:14;17915:58;17798:182;:::o;17986:366::-;18128:3;18149:67;18213:2;18208:3;18149:67;:::i;:::-;18142:74;;18225:93;18314:3;18225:93;:::i;:::-;18343:2;18338:3;18334:12;18327:19;;17986:366;;;:::o;18358:419::-;18524:4;18562:2;18551:9;18547:18;18539:26;;18611:9;18605:4;18601:20;18597:1;18586:9;18582:17;18575:47;18639:131;18765:4;18639:131;:::i;:::-;18631:139;;18358:419;;;:::o;18783:180::-;18831:77;18828:1;18821:88;18928:4;18925:1;18918:15;18952:4;18949:1;18942:15;18969:143;19026:5;19057:6;19051:13;19042:22;;19073:33;19100:5;19073:33;:::i;:::-;18969:143;;;;:::o;19118:351::-;19188:6;19237:2;19225:9;19216:7;19212:23;19208:32;19205:119;;;19243:79;;:::i;:::-;19205:119;19363:1;19388:64;19444:7;19435:6;19424:9;19420:22;19388:64;:::i;:::-;19378:74;;19334:128;19118:351;;;;:::o;19475:85::-;19520:7;19549:5;19538:16;;19475:85;;;:::o;19566:158::-;19624:9;19657:61;19675:42;19684:32;19710:5;19684:32;:::i;:::-;19675:42;:::i;:::-;19657:61;:::i;:::-;19644:74;;19566:158;;;:::o;19730:147::-;19825:45;19864:5;19825:45;:::i;:::-;19820:3;19813:58;19730:147;;:::o;19883:114::-;19950:6;19984:5;19978:12;19968:22;;19883:114;;;:::o;20003:184::-;20102:11;20136:6;20131:3;20124:19;20176:4;20171:3;20167:14;20152:29;;20003:184;;;;:::o;20193:132::-;20260:4;20283:3;20275:11;;20313:4;20308:3;20304:14;20296:22;;20193:132;;;:::o;20331:108::-;20408:24;20426:5;20408:24;:::i;:::-;20403:3;20396:37;20331:108;;:::o;20445:179::-;20514:10;20535:46;20577:3;20569:6;20535:46;:::i;:::-;20613:4;20608:3;20604:14;20590:28;;20445:179;;;;:::o;20630:113::-;20700:4;20732;20727:3;20723:14;20715:22;;20630:113;;;:::o;20779:732::-;20898:3;20927:54;20975:5;20927:54;:::i;:::-;20997:86;21076:6;21071:3;20997:86;:::i;:::-;20990:93;;21107:56;21157:5;21107:56;:::i;:::-;21186:7;21217:1;21202:284;21227:6;21224:1;21221:13;21202:284;;;21303:6;21297:13;21330:63;21389:3;21374:13;21330:63;:::i;:::-;21323:70;;21416:60;21469:6;21416:60;:::i;:::-;21406:70;;21262:224;21249:1;21246;21242:9;21237:14;;21202:284;;;21206:14;21502:3;21495:10;;20903:608;;;20779:732;;;;:::o;21517:831::-;21780:4;21818:3;21807:9;21803:19;21795:27;;21832:71;21900:1;21889:9;21885:17;21876:6;21832:71;:::i;:::-;21913:80;21989:2;21978:9;21974:18;21965:6;21913:80;:::i;:::-;22040:9;22034:4;22030:20;22025:2;22014:9;22010:18;22003:48;22068:108;22171:4;22162:6;22068:108;:::i;:::-;22060:116;;22186:72;22254:2;22243:9;22239:18;22230:6;22186:72;:::i;:::-;22268:73;22336:3;22325:9;22321:19;22312:6;22268:73;:::i;:::-;21517:831;;;;;;;;:::o;22354:170::-;22494:22;22490:1;22482:6;22478:14;22471:46;22354:170;:::o;22530:366::-;22672:3;22693:67;22757:2;22752:3;22693:67;:::i;:::-;22686:74;;22769:93;22858:3;22769:93;:::i;:::-;22887:2;22882:3;22878:12;22871:19;;22530:366;;;:::o;22902:419::-;23068:4;23106:2;23095:9;23091:18;23083:26;;23155:9;23149:4;23145:20;23141:1;23130:9;23126:17;23119:47;23183:131;23309:4;23183:131;:::i;:::-;23175:139;;22902:419;;;:::o;23327:221::-;23467:34;23463:1;23455:6;23451:14;23444:58;23536:4;23531:2;23523:6;23519:15;23512:29;23327:221;:::o;23554:366::-;23696:3;23717:67;23781:2;23776:3;23717:67;:::i;:::-;23710:74;;23793:93;23882:3;23793:93;:::i;:::-;23911:2;23906:3;23902:12;23895:19;;23554:366;;;:::o;23926:419::-;24092:4;24130:2;24119:9;24115:18;24107:26;;24179:9;24173:4;24169:20;24165:1;24154:9;24150:17;24143:47;24207:131;24333:4;24207:131;:::i;:::-;24199:139;;23926:419;;;:::o;24351:173::-;24491:25;24487:1;24479:6;24475:14;24468:49;24351:173;:::o;24530:366::-;24672:3;24693:67;24757:2;24752:3;24693:67;:::i;:::-;24686:74;;24769:93;24858:3;24769:93;:::i;:::-;24887:2;24882:3;24878:12;24871:19;;24530:366;;;:::o;24902:419::-;25068:4;25106:2;25095:9;25091:18;25083:26;;25155:9;25149:4;25145:20;25141:1;25130:9;25126:17;25119:47;25183:131;25309:4;25183:131;:::i;:::-;25175:139;;24902:419;;;:::o;25327:180::-;25375:77;25372:1;25365:88;25472:4;25469:1;25462:15;25496:4;25493:1;25486:15;25513:188;25551:3;25570:18;25586:1;25570:18;:::i;:::-;25565:23;;25602:18;25618:1;25602:18;:::i;:::-;25597:23;;25643:1;25640;25636:9;25629:16;;25666:4;25661:3;25658:13;25655:39;;;25674:18;;:::i;:::-;25655:39;25513:188;;;;:::o;25707:410::-;25747:7;25770:20;25788:1;25770:20;:::i;:::-;25765:25;;25804:20;25822:1;25804:20;:::i;:::-;25799:25;;25859:1;25856;25852:9;25881:30;25899:11;25881:30;:::i;:::-;25870:41;;26060:1;26051:7;26047:15;26044:1;26041:22;26021:1;26014:9;25994:83;25971:139;;26090:18;;:::i;:::-;25971:139;25755:362;25707:410;;;;:::o;26123:332::-;26244:4;26282:2;26271:9;26267:18;26259:26;;26295:71;26363:1;26352:9;26348:17;26339:6;26295:71;:::i;:::-;26376:72;26444:2;26433:9;26429:18;26420:6;26376:72;:::i;:::-;26123:332;;;;;:::o
Swarm Source
ipfs://fb469c1240ae25a1035eebe96479969f7019aa5976034d769f4535ef89fea935
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.