More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 14 from a total of 14 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Liquidity Fe... | 24030954 | 1046 days ago | IN | 0 POL | 0.00403541 | ||||
Set Marketing Fe... | 24030954 | 1046 days ago | IN | 0 POL | 0.00402807 | ||||
Set Holder Fee P... | 24030945 | 1046 days ago | IN | 0 POL | 0.00457182 | ||||
Transfer | 23872259 | 1050 days ago | IN | 0 POL | 0.01589408 | ||||
Exclude From Fee | 23871618 | 1050 days ago | IN | 0 POL | 0.00421977 | ||||
Exclude From Fee | 23871474 | 1050 days ago | IN | 0 POL | 0.00297317 | ||||
Exclude From Fee | 23871338 | 1050 days ago | IN | 0 POL | 0.00558667 | ||||
Exclude From Fee | 23871331 | 1050 days ago | IN | 0 POL | 0.00558667 | ||||
Exclude From Fee | 23871313 | 1050 days ago | IN | 0 POL | 0.00977388 | ||||
Transfer | 23870833 | 1050 days ago | IN | 0 POL | 0.02085797 | ||||
Transfer Ownersh... | 22875391 | 1076 days ago | IN | 0 POL | 0.00087126 | ||||
Transfer | 22875298 | 1076 days ago | IN | 0 POL | 0.00245622 | ||||
Transfer | 22864001 | 1076 days ago | IN | 0 POL | 0.00341778 | ||||
Set Max Sell | 22863840 | 1076 days ago | IN | 0 POL | 0.00094773 |
Loading...
Loading
Contract Name:
HomesCoin
Compiler Version
v0.8.3+commit.8d00100c
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-12-23 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.3; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. 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 substraction 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. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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 () { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface 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; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract HomesCoin is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; address public _marketingWalletAddress = 0xa5695901ad6529d24C30E56C6E70B2dE0e83075e; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 2000 * 10**9 * 10**6; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "HomesCoin"; string private _symbol = "HOMES"; uint8 private _decimals = 6; uint256 public _holderFee = 2; uint256 private _previousHolderFee = _holderFee; uint256 public _marketingFee = 2; uint256 private _previousMarketingFee = _marketingFee; uint256 public _liquidityFee = 2; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxSellAmount = 10* 10**9 * 10**6; uint256 public _maxBuyAmount = 10* 10**9 * 10**6; uint256 public _maxTxAmount = 500 * 10**6 * 10**18; uint256 public numTokensSellToAddToLiquidity = 500 * 10**6 * 10**18; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[owner()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), owner(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setHolderFeePercent(uint256 holderFee) external onlyOwner() { _holderFee = holderFee; } function setmarketingWallet(address wWallet) external onlyOwner() { _marketingWalletAddress = wWallet; } function setMarketingFeePercent(uint256 marketingFee) external onlyOwner() { _marketingFee = marketingFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function setMaxBuy(uint256 maxBuyPercent) external onlyOwner() { _maxBuyAmount = _tTotal.mul( maxBuyPercent).div( 10**4 ); } function setMaxSell(uint256 maxSellPercent) external onlyOwner() { _maxSellAmount = _tTotal.mul( maxSellPercent).div( 10**4 ); } function MaxBuycurrentValue() public view returns (uint256) { return _maxBuyAmount; } function MaxSellcurrentValue() public view returns (uint256) { return _maxSellAmount; } function setNumtokentoLiq(uint256 numToken) external onlyOwner() { numTokensSellToAddToLiquidity = _tTotal.mul(numToken).div( 10**2 ); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tMarketing); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateHolderFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tMarketing = calculateMarketingFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tMarketing); return (tTransferAmount, tFee, tLiquidity, tMarketing); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rMarketing = tMarketing.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rMarketing); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takeMarketing(uint256 tMarketing) private { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing.mul(currentRate); _rOwned[_marketingWalletAddress] = _rOwned[_marketingWalletAddress].add(rMarketing); if(_isExcluded[_marketingWalletAddress]) _tOwned[_marketingWalletAddress] = _tOwned[_marketingWalletAddress].add(tMarketing); } function calculateHolderFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_holderFee).div( 10**2 ); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_holderFee == 0 && _liquidityFee == 0) return; _previousHolderFee = _holderFee; _previousMarketingFee = _marketingFee; _previousLiquidityFee = _liquidityFee; _holderFee = 0; _marketingFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _holderFee = _previousHolderFee; _marketingFee = _previousMarketingFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); if(from != owner() && to == uniswapV2Pair) require(_maxSellAmount > amount, "Transfer amount exceeds max Sell Amount."); if(from == uniswapV2Pair && to != owner()) require(_maxBuyAmount > amount, "Transfer amount exceeds max Buy Amount."); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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"},{"inputs":[],"name":"MaxBuycurrentValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxSellcurrentValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_holderFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"holderFee","type":"uint256"}],"name":"setHolderFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyPercent","type":"uint256"}],"name":"setMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellPercent","type":"uint256"}],"name":"setMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numToken","type":"uint256"}],"name":"setNumtokentoLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wWallet","type":"address"}],"name":"setmarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405273a5695901ad6529d24c30e56c6e70b2de0e83075e600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550671bc16d674ec8000060085560085460001962000077919062000862565b600019620000869190620007b3565b6009556040518060400160405280600981526020017f486f6d6573436f696e0000000000000000000000000000000000000000000000815250600b9080519060200190620000d692919062000654565b506040518060400160405280600581526020017f484f4d4553000000000000000000000000000000000000000000000000000000815250600c90805190602001906200012492919062000654565b506006600d60006101000a81548160ff021916908360ff1602179055506002600e55600e54600f55600260105560105460115560026012556012546013556001601460016101000a81548160ff021916908315150217905550662386f26fc10000601555662386f26fc100006016556b019d971e4fe8401e740000006017556b019d971e4fe8401e74000000601855348015620001c057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360095460016000620002936200062b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073a5e0829caced8ffdd4de3c43696c57f7d7a678ff90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033157600080fd5b505afa15801562000346573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036c91906200071b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003cf57600080fd5b505afa158015620003e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040a91906200071b565b6040518363ffffffff1660e01b81526004016200042992919062000769565b602060405180830381600087803b1580156200044457600080fd5b505af115801562000459573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047f91906200071b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160046000620005026200062b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005bb6200062b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040516200061c919062000796565b60405180910390a35062000941565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000662906200082c565b90600052602060002090601f016020900481019282620006865760008555620006d2565b82601f10620006a157805160ff1916838001178555620006d2565b82800160010185558215620006d2579182015b82811115620006d1578251825591602001919060010190620006b4565b5b509050620006e19190620006e5565b5090565b5b8082111562000700576000816000905550600101620006e6565b5090565b600081519050620007158162000927565b92915050565b6000602082840312156200072e57600080fd5b60006200073e8482850162000704565b91505092915050565b6200075281620007ee565b82525050565b620007638162000822565b82525050565b600060408201905062000780600083018562000747565b6200078f602083018462000747565b9392505050565b6000602082019050620007ad600083018462000758565b92915050565b6000620007c08262000822565b9150620007cd8362000822565b925082821015620007e357620007e26200089a565b5b828203905092915050565b6000620007fb8262000802565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200084557607f821691505b602082108114156200085c576200085b620008f8565b5b50919050565b60006200086f8262000822565b91506200087c8362000822565b9250826200088f576200088e620008c9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200093281620007ee565b81146200093e57600080fd5b50565b60805160601c60a05160601c615945620009a56000396000818161160f015281816128fe015281816129980152612ab7015260008181610ba7015281816136870152818161379d015281816137c401528181613860015261388701526159456000f3fe6080604052600436106102815760003560e01c806352390c021161014f57806395d89b41116100c1578063d543dbeb1161007a578063d543dbeb146109d1578063dd62ed3e146109fa578063ea2f0b3714610a37578063ef998cf014610a60578063f2fde38b14610a89578063f53bc83514610ab257610288565b806395d89b41146108af578063a457c2d7146108da578063a9059cbb14610917578063be3b9f2d14610954578063c49b9a801461097d578063d12a7688146109a657610288565b8063715018a611610113578063715018a6146107b15780637cca52fe146107c85780637d1db4a5146107f357806388f820201461081e5780638da5cb5b1461085b5780638ee88c531461088657610288565b806352390c02146106ba5780635342acb4146106e35780636bc87c3a1461072057806370a082311461074b57806370c9a4191461078857610288565b8063313ce567116101f35780634144d9e4116101ac5780634144d9e4146105aa578063437823ec146105d55780634549b039146105fe578063457c194c1461063b57806349bd5a5e146106645780634a74bb021461068f57610288565b8063313ce5671461049a5780633685d419146104c5578063378243dc146104ee57806339509351146105195780633bd5d17314610556578063403a80c41461057f57610288565b80631694505e116102455780631694505e1461037657806318160ddd146103a157806322461173146103cc57806322976e0d146103f557806323b872dd146104205780632d8381191461045d57610288565b80630492f0551461028d57806306fdde03146102b8578063095ea7b3146102e357806312eeb7c41461032057806313114a9d1461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610adb565b6040516102af919061506c565b60405180910390f35b3480156102c457600080fd5b506102cd610ae1565b6040516102da9190614e6a565b60405180910390f35b3480156102ef57600080fd5b5061030a6004803603810190610305919061497a565b610b73565b6040516103179190614e34565b60405180910390f35b34801561032c57600080fd5b50610335610b91565b604051610342919061506c565b60405180910390f35b34801561035757600080fd5b50610360610b9b565b60405161036d919061506c565b60405180910390f35b34801561038257600080fd5b5061038b610ba5565b6040516103989190614e4f565b60405180910390f35b3480156103ad57600080fd5b506103b6610bc9565b6040516103c3919061506c565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee919061489d565b610bd3565b005b34801561040157600080fd5b5061040a610c93565b604051610417919061506c565b60405180910390f35b34801561042c57600080fd5b506104476004803603810190610442919061492b565b610c99565b6040516104549190614e34565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f91906149df565b610d72565b604051610491919061506c565b60405180910390f35b3480156104a657600080fd5b506104af610de0565b6040516104bc9190615118565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e7919061489d565b610df7565b005b3480156104fa57600080fd5b506105036111c5565b604051610510919061506c565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b919061497a565b6111cf565b60405161054d9190614e34565b60405180910390f35b34801561056257600080fd5b5061057d600480360381019061057891906149df565b611282565b005b34801561058b57600080fd5b506105946113fe565b6040516105a1919061506c565b60405180910390f35b3480156105b657600080fd5b506105bf611404565b6040516105cc9190614db8565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f7919061489d565b61142a565b005b34801561060a57600080fd5b5061062560048036038101906106209190614a08565b611501565b604051610632919061506c565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d91906149df565b611587565b005b34801561067057600080fd5b5061067961160d565b6040516106869190614db8565b60405180910390f35b34801561069b57600080fd5b506106a4611631565b6040516106b19190614e34565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc919061489d565b611644565b005b3480156106ef57600080fd5b5061070a6004803603810190610705919061489d565b6118df565b6040516107179190614e34565b60405180910390f35b34801561072c57600080fd5b50610735611935565b604051610742919061506c565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d919061489d565b61193b565b60405161077f919061506c565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa91906149df565b611a26565b005b3480156107bd57600080fd5b506107c6611ad3565b005b3480156107d457600080fd5b506107dd611c0d565b6040516107ea919061506c565b60405180910390f35b3480156107ff57600080fd5b50610808611c13565b604051610815919061506c565b60405180910390f35b34801561082a57600080fd5b506108456004803603810190610840919061489d565b611c19565b6040516108529190614e34565b60405180910390f35b34801561086757600080fd5b50610870611c6f565b60405161087d9190614db8565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a891906149df565b611c98565b005b3480156108bb57600080fd5b506108c4611d1e565b6040516108d19190614e6a565b60405180910390f35b3480156108e657600080fd5b5061090160048036038101906108fc919061497a565b611db0565b60405161090e9190614e34565b60405180910390f35b34801561092357600080fd5b5061093e6004803603810190610939919061497a565b611e7d565b60405161094b9190614e34565b60405180910390f35b34801561096057600080fd5b5061097b600480360381019061097691906149df565b611e9b565b005b34801561098957600080fd5b506109a4600480360381019061099f91906149b6565b611f21565b005b3480156109b257600080fd5b506109bb611ff1565b6040516109c8919061506c565b60405180910390f35b3480156109dd57600080fd5b506109f860048036038101906109f391906149df565b611ff7565b005b348015610a0657600080fd5b50610a216004803603810190610a1c91906148ef565b6120a4565b604051610a2e919061506c565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a59919061489d565b61212b565b005b348015610a6c57600080fd5b50610a876004803603810190610a8291906149df565b612202565b005b348015610a9557600080fd5b50610ab06004803603810190610aab919061489d565b6122b0565b005b348015610abe57600080fd5b50610ad96004803603810190610ad491906149df565b612459565b005b60165481565b6060600b8054610af09061535b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1c9061535b565b8015610b695780601f10610b3e57610100808354040283529160200191610b69565b820191906000526020600020905b815481529060010190602001808311610b4c57829003601f168201915b5050505050905090565b6000610b87610b80612507565b848461250f565b6001905092915050565b6000601654905090565b6000600a54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600854905090565b610bdb612507565b73ffffffffffffffffffffffffffffffffffffffff16610bf9611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690614fac565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b6000610ca68484846126da565b610d6784610cb2612507565b610d62856040518060600160405280602881526020016158c360289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d18612507565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bf79092919063ffffffff16565b61250f565b600190509392505050565b6000600954821115610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090614eac565b60405180910390fd5b6000610dc3612c4c565b9050610dd88184612c7790919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610dff612507565b73ffffffffffffffffffffffffffffffffffffffff16610e1d611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614fac565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690614f2c565b60405180910390fd5b60005b6006805490508110156111c1578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610f60577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111ae5760066001600680549050610fbb9190615269565b81548110610ff2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110611057577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480611174577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556111c1565b80806111b99061538d565b915050610f02565b5050565b6000601554905090565b60006112786111dc612507565b8461127385600360006111ed612507565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b61250f565b6001905092915050565b600061128c612507565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561131b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113129061504c565b60405180910390fd5b600061132683612ca3565b505050505050905061138081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0b90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113d881600954612d0b90919063ffffffff16565b6009819055506113f383600a54612c8d90919063ffffffff16565b600a81905550505050565b600e5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611432612507565b73ffffffffffffffffffffffffffffffffffffffff16611450611c6f565b73ffffffffffffffffffffffffffffffffffffffff16146114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d90614fac565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600854831115611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90614f4c565b60405180910390fd5b8161156957600061155884612ca3565b505050505050905080915050611581565b600061157484612ca3565b5050505050915050809150505b92915050565b61158f612507565b73ffffffffffffffffffffffffffffffffffffffff166115ad611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fa90614fac565b60405180910390fd5b8060108190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601460019054906101000a900460ff1681565b61164c612507565b73ffffffffffffffffffffffffffffffffffffffff1661166a611c6f565b73ffffffffffffffffffffffffffffffffffffffff16146116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b790614fac565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174490614f0c565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611821576117dd600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d72565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119d657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611a21565b611a1e600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d72565b90505b919050565b611a2e612507565b73ffffffffffffffffffffffffffffffffffffffff16611a4c611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990614fac565b60405180910390fd5b611aca6064611abc83600854612d2190919063ffffffff16565b612c7790919063ffffffff16565b60188190555050565b611adb612507565b73ffffffffffffffffffffffffffffffffffffffff16611af9611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614611b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4690614fac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b60175481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ca0612507565b73ffffffffffffffffffffffffffffffffffffffff16611cbe611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90614fac565b60405180910390fd5b8060128190555050565b6060600c8054611d2d9061535b565b80601f0160208091040260200160405190810160405280929190818152602001828054611d599061535b565b8015611da65780601f10611d7b57610100808354040283529160200191611da6565b820191906000526020600020905b815481529060010190602001808311611d8957829003601f168201915b5050505050905090565b6000611e73611dbd612507565b84611e6e856040518060600160405280602581526020016158eb6025913960036000611de7612507565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bf79092919063ffffffff16565b61250f565b6001905092915050565b6000611e91611e8a612507565b84846126da565b6001905092915050565b611ea3612507565b73ffffffffffffffffffffffffffffffffffffffff16611ec1611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90614fac565b60405180910390fd5b80600e8190555050565b611f29612507565b73ffffffffffffffffffffffffffffffffffffffff16611f47611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490614fac565b60405180910390fd5b80601460016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611fe69190614e34565b60405180910390a150565b60185481565b611fff612507565b73ffffffffffffffffffffffffffffffffffffffff1661201d611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614612073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206a90614fac565b60405180910390fd5b61209b606461208d83600854612d2190919063ffffffff16565b612c7790919063ffffffff16565b60178190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612133612507565b73ffffffffffffffffffffffffffffffffffffffff16612151611c6f565b73ffffffffffffffffffffffffffffffffffffffff16146121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e90614fac565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61220a612507565b73ffffffffffffffffffffffffffffffffffffffff16612228611c6f565b73ffffffffffffffffffffffffffffffffffffffff161461227e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227590614fac565b60405180910390fd5b6122a761271061229983600854612d2190919063ffffffff16565b612c7790919063ffffffff16565b60158190555050565b6122b8612507565b73ffffffffffffffffffffffffffffffffffffffff166122d6611c6f565b73ffffffffffffffffffffffffffffffffffffffff161461232c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232390614fac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239390614ecc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612461612507565b73ffffffffffffffffffffffffffffffffffffffff1661247f611c6f565b73ffffffffffffffffffffffffffffffffffffffff16146124d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc90614fac565b60405180910390fd5b6124fe6127106124f083600854612d2190919063ffffffff16565b612c7790919063ffffffff16565b60168190555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561257f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125769061502c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614eec565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126cd919061506c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561274a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127419061500c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b190614e8c565b60405180910390fd5b600081116127fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f490614fcc565b60405180910390fd5b612805611c6f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128735750612843611c6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128be576017548111156128bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b490614f6c565b60405180910390fd5b5b6128c6611c6f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561294c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612996578060155411612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298c90614f8c565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612a2457506129f4611c6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a6e578060165411612a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6490614fec565b60405180910390fd5b5b6000612a793061193b565b90506017548110612a8a5760175490505b60006018548210159050808015612aae5750601460009054906101000a900460ff16155b8015612b0657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612b1e5750601460019054906101000a900460ff165b15612b32576018549150612b3182612d37565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bd95750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612be357600090505b612bef86868684612e0d565b505050505050565b6000838311158290612c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c369190614e6a565b60405180910390fd5b5082840390509392505050565b6000806000612c5961311e565b91509150612c708183612c7790919063ffffffff16565b9250505090565b60008183612c8591906151de565b905092915050565b60008183612c9b9190615188565b905092915050565b6000806000806000806000806000806000612cbd8c613469565b93509350935093506000806000612cde8f878787612cd9612c4c565b6134e8565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b60008183612d199190615269565b905092915050565b60008183612d2f919061520f565b905092915050565b6001601460006101000a81548160ff0219169083151502179055506000612d68600283612c7790919063ffffffff16565b90506000612d7f8284612d0b90919063ffffffff16565b90506000479050612d8f8361359c565b6000612da48247612d0b90919063ffffffff16565b9050612db0838261385a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612de3939291906150e1565b60405180910390a1505050506000601460006101000a81548160ff02191690831515021790555050565b80612e1b57612e1a61394a565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ebe5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ed357612ece84848461399e565b61310a565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f765750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f8b57612f86848484613c0c565b613109565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561302f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130445761303f848484613e7a565b613108565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130e65750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130fb576130f6848484614053565b613107565b613106848484613e7a565b5b5b5b5b8061311857613117614356565b5b50505050565b600080600060095490506000600854905060005b60068054905081101561342c5782600160006006848154811061317e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613292575081600260006006848154811061322a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156132a95760095460085494509450505050613465565b61335f60016000600684815481106132ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612d0b90919063ffffffff16565b925061341760026000600684815481106133a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612d0b90919063ffffffff16565b915080806134249061538d565b915050613132565b50613444600854600954612c7790919063ffffffff16565b82101561345c57600954600854935093505050613465565b81819350935050505b9091565b600080600080600061347a86614373565b90506000613487876143a4565b90506000613494886143d5565b905060006134cf826134c1856134b3888e612d0b90919063ffffffff16565b612d0b90919063ffffffff16565b612d0b90919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613501858a612d2190919063ffffffff16565b90506000613518868a612d2190919063ffffffff16565b9050600061352f878a612d2190919063ffffffff16565b90506000613546888a612d2190919063ffffffff16565b905060006135818261357385613565888a612d0b90919063ffffffff16565b612d0b90919063ffffffff16565b612d0b90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff8111156135df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561360d5781602001602082028036833780820191505090505b509050308160008151811061364b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156136eb57600080fd5b505afa1580156136ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372391906148c6565b8160018151811061375d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137c2307f00000000000000000000000000000000000000000000000000000000000000008461250f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613824959493929190615087565b600060405180830381600087803b15801561383e57600080fd5b505af1158015613852573d6000803e3d6000fd5b505050505050565b613885307f00000000000000000000000000000000000000000000000000000000000000008461250f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806138cf611c6f565b426040518863ffffffff1660e01b81526004016138f196959493929190614dd3565b6060604051808303818588803b15801561390a57600080fd5b505af115801561391e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139439190614a44565b5050505050565b6000600e5414801561395e57506000601254145b156139685761399c565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b60008060008060008060006139b288612ca3565b9650965096509650965096509650613a1288600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0b90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613aa787600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0b90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b3c86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b8882614406565b613b91816145ab565b613b9b85846147fa565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613bf8919061506c565b60405180910390a350505050505050505050565b6000806000806000806000613c2088612ca3565b9650965096509650965096509650613c8087600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0b90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d1584600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613daa86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613df682614406565b613dff816145ab565b613e0985846147fa565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613e66919061506c565b60405180910390a350505050505050505050565b6000806000806000806000613e8e88612ca3565b9650965096509650965096509650613eee87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0b90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f8386600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fcf82614406565b613fd8816145ab565b613fe285846147fa565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161403f919061506c565b60405180910390a350505050505050505050565b600080600080600080600061406788612ca3565b96509650965096509650965096506140c788600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0b90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061415c87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0b90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141f184600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061428686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142d282614406565b6142db816145ab565b6142e585846147fa565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051614342919061506c565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b600061439d606461438f600e5485612d2190919063ffffffff16565b612c7790919063ffffffff16565b9050919050565b60006143ce60646143c060125485612d2190919063ffffffff16565b612c7790919063ffffffff16565b9050919050565b60006143ff60646143f160105485612d2190919063ffffffff16565b612c7790919063ffffffff16565b9050919050565b6000614410612c4c565b905060006144278284612d2190919063ffffffff16565b905061447b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156145a65761456283600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006145b5612c4c565b905060006145cc8284612d2190919063ffffffff16565b90506146428160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147f55761478f8360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61480f82600954612d0b90919063ffffffff16565b60098190555061482a81600a54612c8d90919063ffffffff16565b600a819055505050565b6000813590506148438161587d565b92915050565b6000815190506148588161587d565b92915050565b60008135905061486d81615894565b92915050565b600081359050614882816158ab565b92915050565b600081519050614897816158ab565b92915050565b6000602082840312156148af57600080fd5b60006148bd84828501614834565b91505092915050565b6000602082840312156148d857600080fd5b60006148e684828501614849565b91505092915050565b6000806040838503121561490257600080fd5b600061491085828601614834565b925050602061492185828601614834565b9150509250929050565b60008060006060848603121561494057600080fd5b600061494e86828701614834565b935050602061495f86828701614834565b925050604061497086828701614873565b9150509250925092565b6000806040838503121561498d57600080fd5b600061499b85828601614834565b92505060206149ac85828601614873565b9150509250929050565b6000602082840312156149c857600080fd5b60006149d68482850161485e565b91505092915050565b6000602082840312156149f157600080fd5b60006149ff84828501614873565b91505092915050565b60008060408385031215614a1b57600080fd5b6000614a2985828601614873565b9250506020614a3a8582860161485e565b9150509250929050565b600080600060608486031215614a5957600080fd5b6000614a6786828701614888565b9350506020614a7886828701614888565b9250506040614a8986828701614888565b9150509250925092565b6000614a9f8383614aab565b60208301905092915050565b614ab48161529d565b82525050565b614ac38161529d565b82525050565b6000614ad482615143565b614ade8185615166565b9350614ae983615133565b8060005b83811015614b1a578151614b018882614a93565b9750614b0c83615159565b925050600181019050614aed565b5085935050505092915050565b614b30816152af565b82525050565b614b3f816152f2565b82525050565b614b4e81615316565b82525050565b6000614b5f8261514e565b614b698185615177565b9350614b79818560208601615328565b614b8281615463565b840191505092915050565b6000614b9a602383615177565b9150614ba582615474565b604082019050919050565b6000614bbd602a83615177565b9150614bc8826154c3565b604082019050919050565b6000614be0602683615177565b9150614beb82615512565b604082019050919050565b6000614c03602283615177565b9150614c0e82615561565b604082019050919050565b6000614c26601b83615177565b9150614c31826155b0565b602082019050919050565b6000614c49601b83615177565b9150614c54826155d9565b602082019050919050565b6000614c6c601f83615177565b9150614c7782615602565b602082019050919050565b6000614c8f602883615177565b9150614c9a8261562b565b604082019050919050565b6000614cb2602883615177565b9150614cbd8261567a565b604082019050919050565b6000614cd5602083615177565b9150614ce0826156c9565b602082019050919050565b6000614cf8602983615177565b9150614d03826156f2565b604082019050919050565b6000614d1b602783615177565b9150614d2682615741565b604082019050919050565b6000614d3e602583615177565b9150614d4982615790565b604082019050919050565b6000614d61602483615177565b9150614d6c826157df565b604082019050919050565b6000614d84602c83615177565b9150614d8f8261582e565b604082019050919050565b614da3816152db565b82525050565b614db2816152e5565b82525050565b6000602082019050614dcd6000830184614aba565b92915050565b600060c082019050614de86000830189614aba565b614df56020830188614d9a565b614e026040830187614b45565b614e0f6060830186614b45565b614e1c6080830185614aba565b614e2960a0830184614d9a565b979650505050505050565b6000602082019050614e496000830184614b27565b92915050565b6000602082019050614e646000830184614b36565b92915050565b60006020820190508181036000830152614e848184614b54565b905092915050565b60006020820190508181036000830152614ea581614b8d565b9050919050565b60006020820190508181036000830152614ec581614bb0565b9050919050565b60006020820190508181036000830152614ee581614bd3565b9050919050565b60006020820190508181036000830152614f0581614bf6565b9050919050565b60006020820190508181036000830152614f2581614c19565b9050919050565b60006020820190508181036000830152614f4581614c3c565b9050919050565b60006020820190508181036000830152614f6581614c5f565b9050919050565b60006020820190508181036000830152614f8581614c82565b9050919050565b60006020820190508181036000830152614fa581614ca5565b9050919050565b60006020820190508181036000830152614fc581614cc8565b9050919050565b60006020820190508181036000830152614fe581614ceb565b9050919050565b6000602082019050818103600083015261500581614d0e565b9050919050565b6000602082019050818103600083015261502581614d31565b9050919050565b6000602082019050818103600083015261504581614d54565b9050919050565b6000602082019050818103600083015261506581614d77565b9050919050565b60006020820190506150816000830184614d9a565b92915050565b600060a08201905061509c6000830188614d9a565b6150a96020830187614b45565b81810360408301526150bb8186614ac9565b90506150ca6060830185614aba565b6150d76080830184614d9a565b9695505050505050565b60006060820190506150f66000830186614d9a565b6151036020830185614d9a565b6151106040830184614d9a565b949350505050565b600060208201905061512d6000830184614da9565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000615193826152db565b915061519e836152db565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151d3576151d26153d6565b5b828201905092915050565b60006151e9826152db565b91506151f4836152db565b92508261520457615203615405565b5b828204905092915050565b600061521a826152db565b9150615225836152db565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561525e5761525d6153d6565b5b828202905092915050565b6000615274826152db565b915061527f836152db565b925082821015615292576152916153d6565b5b828203905092915050565b60006152a8826152bb565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152fd82615304565b9050919050565b600061530f826152bb565b9050919050565b6000615321826152db565b9050919050565b60005b8381101561534657808201518184015260208101905061532b565b83811115615355576000848401525b50505050565b6000600282049050600182168061537357607f821691505b6020821081141561538757615386615434565b5b50919050565b6000615398826152db565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153cb576153ca6153d6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e742065786365656473206d61782053656c6c60008201527f20416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e742065786365656473206d6178204275792060008201527f416d6f756e742e00000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6158868161529d565b811461589157600080fd5b50565b61589d816152af565b81146158a857600080fd5b50565b6158b4816152db565b81146158bf57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205a7ec8120d59288e280c5fa947e7876ec11e515c3ccebd23ee1a34bcc367ccef64736f6c63430008030033
Deployed Bytecode
0x6080604052600436106102815760003560e01c806352390c021161014f57806395d89b41116100c1578063d543dbeb1161007a578063d543dbeb146109d1578063dd62ed3e146109fa578063ea2f0b3714610a37578063ef998cf014610a60578063f2fde38b14610a89578063f53bc83514610ab257610288565b806395d89b41146108af578063a457c2d7146108da578063a9059cbb14610917578063be3b9f2d14610954578063c49b9a801461097d578063d12a7688146109a657610288565b8063715018a611610113578063715018a6146107b15780637cca52fe146107c85780637d1db4a5146107f357806388f820201461081e5780638da5cb5b1461085b5780638ee88c531461088657610288565b806352390c02146106ba5780635342acb4146106e35780636bc87c3a1461072057806370a082311461074b57806370c9a4191461078857610288565b8063313ce567116101f35780634144d9e4116101ac5780634144d9e4146105aa578063437823ec146105d55780634549b039146105fe578063457c194c1461063b57806349bd5a5e146106645780634a74bb021461068f57610288565b8063313ce5671461049a5780633685d419146104c5578063378243dc146104ee57806339509351146105195780633bd5d17314610556578063403a80c41461057f57610288565b80631694505e116102455780631694505e1461037657806318160ddd146103a157806322461173146103cc57806322976e0d146103f557806323b872dd146104205780632d8381191461045d57610288565b80630492f0551461028d57806306fdde03146102b8578063095ea7b3146102e357806312eeb7c41461032057806313114a9d1461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610adb565b6040516102af919061506c565b60405180910390f35b3480156102c457600080fd5b506102cd610ae1565b6040516102da9190614e6a565b60405180910390f35b3480156102ef57600080fd5b5061030a6004803603810190610305919061497a565b610b73565b6040516103179190614e34565b60405180910390f35b34801561032c57600080fd5b50610335610b91565b604051610342919061506c565b60405180910390f35b34801561035757600080fd5b50610360610b9b565b60405161036d919061506c565b60405180910390f35b34801561038257600080fd5b5061038b610ba5565b6040516103989190614e4f565b60405180910390f35b3480156103ad57600080fd5b506103b6610bc9565b6040516103c3919061506c565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee919061489d565b610bd3565b005b34801561040157600080fd5b5061040a610c93565b604051610417919061506c565b60405180910390f35b34801561042c57600080fd5b506104476004803603810190610442919061492b565b610c99565b6040516104549190614e34565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f91906149df565b610d72565b604051610491919061506c565b60405180910390f35b3480156104a657600080fd5b506104af610de0565b6040516104bc9190615118565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e7919061489d565b610df7565b005b3480156104fa57600080fd5b506105036111c5565b604051610510919061506c565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b919061497a565b6111cf565b60405161054d9190614e34565b60405180910390f35b34801561056257600080fd5b5061057d600480360381019061057891906149df565b611282565b005b34801561058b57600080fd5b506105946113fe565b6040516105a1919061506c565b60405180910390f35b3480156105b657600080fd5b506105bf611404565b6040516105cc9190614db8565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f7919061489d565b61142a565b005b34801561060a57600080fd5b5061062560048036038101906106209190614a08565b611501565b604051610632919061506c565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d91906149df565b611587565b005b34801561067057600080fd5b5061067961160d565b6040516106869190614db8565b60405180910390f35b34801561069b57600080fd5b506106a4611631565b6040516106b19190614e34565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc919061489d565b611644565b005b3480156106ef57600080fd5b5061070a6004803603810190610705919061489d565b6118df565b6040516107179190614e34565b60405180910390f35b34801561072c57600080fd5b50610735611935565b604051610742919061506c565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d919061489d565b61193b565b60405161077f919061506c565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa91906149df565b611a26565b005b3480156107bd57600080fd5b506107c6611ad3565b005b3480156107d457600080fd5b506107dd611c0d565b6040516107ea919061506c565b60405180910390f35b3480156107ff57600080fd5b50610808611c13565b604051610815919061506c565b60405180910390f35b34801561082a57600080fd5b506108456004803603810190610840919061489d565b611c19565b6040516108529190614e34565b60405180910390f35b34801561086757600080fd5b50610870611c6f565b60405161087d9190614db8565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a891906149df565b611c98565b005b3480156108bb57600080fd5b506108c4611d1e565b6040516108d19190614e6a565b60405180910390f35b3480156108e657600080fd5b5061090160048036038101906108fc919061497a565b611db0565b60405161090e9190614e34565b60405180910390f35b34801561092357600080fd5b5061093e6004803603810190610939919061497a565b611e7d565b60405161094b9190614e34565b60405180910390f35b34801561096057600080fd5b5061097b600480360381019061097691906149df565b611e9b565b005b34801561098957600080fd5b506109a4600480360381019061099f91906149b6565b611f21565b005b3480156109b257600080fd5b506109bb611ff1565b6040516109c8919061506c565b60405180910390f35b3480156109dd57600080fd5b506109f860048036038101906109f391906149df565b611ff7565b005b348015610a0657600080fd5b50610a216004803603810190610a1c91906148ef565b6120a4565b604051610a2e919061506c565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a59919061489d565b61212b565b005b348015610a6c57600080fd5b50610a876004803603810190610a8291906149df565b612202565b005b348015610a9557600080fd5b50610ab06004803603810190610aab919061489d565b6122b0565b005b348015610abe57600080fd5b50610ad96004803603810190610ad491906149df565b612459565b005b60165481565b6060600b8054610af09061535b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1c9061535b565b8015610b695780601f10610b3e57610100808354040283529160200191610b69565b820191906000526020600020905b815481529060010190602001808311610b4c57829003601f168201915b5050505050905090565b6000610b87610b80612507565b848461250f565b6001905092915050565b6000601654905090565b6000600a54905090565b7f000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff81565b6000600854905090565b610bdb612507565b73ffffffffffffffffffffffffffffffffffffffff16610bf9611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690614fac565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b6000610ca68484846126da565b610d6784610cb2612507565b610d62856040518060600160405280602881526020016158c360289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d18612507565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bf79092919063ffffffff16565b61250f565b600190509392505050565b6000600954821115610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090614eac565b60405180910390fd5b6000610dc3612c4c565b9050610dd88184612c7790919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610dff612507565b73ffffffffffffffffffffffffffffffffffffffff16610e1d611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614fac565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690614f2c565b60405180910390fd5b60005b6006805490508110156111c1578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610f60577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111ae5760066001600680549050610fbb9190615269565b81548110610ff2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110611057577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480611174577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556111c1565b80806111b99061538d565b915050610f02565b5050565b6000601554905090565b60006112786111dc612507565b8461127385600360006111ed612507565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b61250f565b6001905092915050565b600061128c612507565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561131b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113129061504c565b60405180910390fd5b600061132683612ca3565b505050505050905061138081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0b90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113d881600954612d0b90919063ffffffff16565b6009819055506113f383600a54612c8d90919063ffffffff16565b600a81905550505050565b600e5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611432612507565b73ffffffffffffffffffffffffffffffffffffffff16611450611c6f565b73ffffffffffffffffffffffffffffffffffffffff16146114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d90614fac565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600854831115611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90614f4c565b60405180910390fd5b8161156957600061155884612ca3565b505050505050905080915050611581565b600061157484612ca3565b5050505050915050809150505b92915050565b61158f612507565b73ffffffffffffffffffffffffffffffffffffffff166115ad611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fa90614fac565b60405180910390fd5b8060108190555050565b7f0000000000000000000000003eb2d5c381874910d01eec087be2cd809610573981565b601460019054906101000a900460ff1681565b61164c612507565b73ffffffffffffffffffffffffffffffffffffffff1661166a611c6f565b73ffffffffffffffffffffffffffffffffffffffff16146116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b790614fac565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174490614f0c565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611821576117dd600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d72565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119d657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611a21565b611a1e600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d72565b90505b919050565b611a2e612507565b73ffffffffffffffffffffffffffffffffffffffff16611a4c611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990614fac565b60405180910390fd5b611aca6064611abc83600854612d2190919063ffffffff16565b612c7790919063ffffffff16565b60188190555050565b611adb612507565b73ffffffffffffffffffffffffffffffffffffffff16611af9611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614611b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4690614fac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b60175481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ca0612507565b73ffffffffffffffffffffffffffffffffffffffff16611cbe611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90614fac565b60405180910390fd5b8060128190555050565b6060600c8054611d2d9061535b565b80601f0160208091040260200160405190810160405280929190818152602001828054611d599061535b565b8015611da65780601f10611d7b57610100808354040283529160200191611da6565b820191906000526020600020905b815481529060010190602001808311611d8957829003601f168201915b5050505050905090565b6000611e73611dbd612507565b84611e6e856040518060600160405280602581526020016158eb6025913960036000611de7612507565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bf79092919063ffffffff16565b61250f565b6001905092915050565b6000611e91611e8a612507565b84846126da565b6001905092915050565b611ea3612507565b73ffffffffffffffffffffffffffffffffffffffff16611ec1611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90614fac565b60405180910390fd5b80600e8190555050565b611f29612507565b73ffffffffffffffffffffffffffffffffffffffff16611f47611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490614fac565b60405180910390fd5b80601460016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611fe69190614e34565b60405180910390a150565b60185481565b611fff612507565b73ffffffffffffffffffffffffffffffffffffffff1661201d611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614612073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206a90614fac565b60405180910390fd5b61209b606461208d83600854612d2190919063ffffffff16565b612c7790919063ffffffff16565b60178190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612133612507565b73ffffffffffffffffffffffffffffffffffffffff16612151611c6f565b73ffffffffffffffffffffffffffffffffffffffff16146121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e90614fac565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61220a612507565b73ffffffffffffffffffffffffffffffffffffffff16612228611c6f565b73ffffffffffffffffffffffffffffffffffffffff161461227e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227590614fac565b60405180910390fd5b6122a761271061229983600854612d2190919063ffffffff16565b612c7790919063ffffffff16565b60158190555050565b6122b8612507565b73ffffffffffffffffffffffffffffffffffffffff166122d6611c6f565b73ffffffffffffffffffffffffffffffffffffffff161461232c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232390614fac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239390614ecc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612461612507565b73ffffffffffffffffffffffffffffffffffffffff1661247f611c6f565b73ffffffffffffffffffffffffffffffffffffffff16146124d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc90614fac565b60405180910390fd5b6124fe6127106124f083600854612d2190919063ffffffff16565b612c7790919063ffffffff16565b60168190555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561257f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125769061502c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614eec565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126cd919061506c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561274a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127419061500c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b190614e8c565b60405180910390fd5b600081116127fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f490614fcc565b60405180910390fd5b612805611c6f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128735750612843611c6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128be576017548111156128bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b490614f6c565b60405180910390fd5b5b6128c6611c6f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561294c57507f0000000000000000000000003eb2d5c381874910d01eec087be2cd809610573973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612996578060155411612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298c90614f8c565b60405180910390fd5b5b7f0000000000000000000000003eb2d5c381874910d01eec087be2cd809610573973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612a2457506129f4611c6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a6e578060165411612a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6490614fec565b60405180910390fd5b5b6000612a793061193b565b90506017548110612a8a5760175490505b60006018548210159050808015612aae5750601460009054906101000a900460ff16155b8015612b0657507f0000000000000000000000003eb2d5c381874910d01eec087be2cd809610573973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612b1e5750601460019054906101000a900460ff165b15612b32576018549150612b3182612d37565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bd95750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612be357600090505b612bef86868684612e0d565b505050505050565b6000838311158290612c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c369190614e6a565b60405180910390fd5b5082840390509392505050565b6000806000612c5961311e565b91509150612c708183612c7790919063ffffffff16565b9250505090565b60008183612c8591906151de565b905092915050565b60008183612c9b9190615188565b905092915050565b6000806000806000806000806000806000612cbd8c613469565b93509350935093506000806000612cde8f878787612cd9612c4c565b6134e8565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b60008183612d199190615269565b905092915050565b60008183612d2f919061520f565b905092915050565b6001601460006101000a81548160ff0219169083151502179055506000612d68600283612c7790919063ffffffff16565b90506000612d7f8284612d0b90919063ffffffff16565b90506000479050612d8f8361359c565b6000612da48247612d0b90919063ffffffff16565b9050612db0838261385a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612de3939291906150e1565b60405180910390a1505050506000601460006101000a81548160ff02191690831515021790555050565b80612e1b57612e1a61394a565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ebe5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ed357612ece84848461399e565b61310a565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f765750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f8b57612f86848484613c0c565b613109565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561302f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130445761303f848484613e7a565b613108565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130e65750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130fb576130f6848484614053565b613107565b613106848484613e7a565b5b5b5b5b8061311857613117614356565b5b50505050565b600080600060095490506000600854905060005b60068054905081101561342c5782600160006006848154811061317e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613292575081600260006006848154811061322a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156132a95760095460085494509450505050613465565b61335f60016000600684815481106132ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612d0b90919063ffffffff16565b925061341760026000600684815481106133a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612d0b90919063ffffffff16565b915080806134249061538d565b915050613132565b50613444600854600954612c7790919063ffffffff16565b82101561345c57600954600854935093505050613465565b81819350935050505b9091565b600080600080600061347a86614373565b90506000613487876143a4565b90506000613494886143d5565b905060006134cf826134c1856134b3888e612d0b90919063ffffffff16565b612d0b90919063ffffffff16565b612d0b90919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613501858a612d2190919063ffffffff16565b90506000613518868a612d2190919063ffffffff16565b9050600061352f878a612d2190919063ffffffff16565b90506000613546888a612d2190919063ffffffff16565b905060006135818261357385613565888a612d0b90919063ffffffff16565b612d0b90919063ffffffff16565b612d0b90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff8111156135df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561360d5781602001602082028036833780820191505090505b509050308160008151811061364b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156136eb57600080fd5b505afa1580156136ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372391906148c6565b8160018151811061375d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137c2307f000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff8461250f565b7f000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613824959493929190615087565b600060405180830381600087803b15801561383e57600080fd5b505af1158015613852573d6000803e3d6000fd5b505050505050565b613885307f000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff8461250f565b7f000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806138cf611c6f565b426040518863ffffffff1660e01b81526004016138f196959493929190614dd3565b6060604051808303818588803b15801561390a57600080fd5b505af115801561391e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139439190614a44565b5050505050565b6000600e5414801561395e57506000601254145b156139685761399c565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b60008060008060008060006139b288612ca3565b9650965096509650965096509650613a1288600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0b90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613aa787600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0b90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b3c86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b8882614406565b613b91816145ab565b613b9b85846147fa565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613bf8919061506c565b60405180910390a350505050505050505050565b6000806000806000806000613c2088612ca3565b9650965096509650965096509650613c8087600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0b90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d1584600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613daa86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613df682614406565b613dff816145ab565b613e0985846147fa565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613e66919061506c565b60405180910390a350505050505050505050565b6000806000806000806000613e8e88612ca3565b9650965096509650965096509650613eee87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0b90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f8386600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fcf82614406565b613fd8816145ab565b613fe285846147fa565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161403f919061506c565b60405180910390a350505050505050505050565b600080600080600080600061406788612ca3565b96509650965096509650965096506140c788600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0b90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061415c87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0b90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141f184600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061428686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142d282614406565b6142db816145ab565b6142e585846147fa565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051614342919061506c565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b600061439d606461438f600e5485612d2190919063ffffffff16565b612c7790919063ffffffff16565b9050919050565b60006143ce60646143c060125485612d2190919063ffffffff16565b612c7790919063ffffffff16565b9050919050565b60006143ff60646143f160105485612d2190919063ffffffff16565b612c7790919063ffffffff16565b9050919050565b6000614410612c4c565b905060006144278284612d2190919063ffffffff16565b905061447b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156145a65761456283600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006145b5612c4c565b905060006145cc8284612d2190919063ffffffff16565b90506146428160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147f55761478f8360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8d90919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61480f82600954612d0b90919063ffffffff16565b60098190555061482a81600a54612c8d90919063ffffffff16565b600a819055505050565b6000813590506148438161587d565b92915050565b6000815190506148588161587d565b92915050565b60008135905061486d81615894565b92915050565b600081359050614882816158ab565b92915050565b600081519050614897816158ab565b92915050565b6000602082840312156148af57600080fd5b60006148bd84828501614834565b91505092915050565b6000602082840312156148d857600080fd5b60006148e684828501614849565b91505092915050565b6000806040838503121561490257600080fd5b600061491085828601614834565b925050602061492185828601614834565b9150509250929050565b60008060006060848603121561494057600080fd5b600061494e86828701614834565b935050602061495f86828701614834565b925050604061497086828701614873565b9150509250925092565b6000806040838503121561498d57600080fd5b600061499b85828601614834565b92505060206149ac85828601614873565b9150509250929050565b6000602082840312156149c857600080fd5b60006149d68482850161485e565b91505092915050565b6000602082840312156149f157600080fd5b60006149ff84828501614873565b91505092915050565b60008060408385031215614a1b57600080fd5b6000614a2985828601614873565b9250506020614a3a8582860161485e565b9150509250929050565b600080600060608486031215614a5957600080fd5b6000614a6786828701614888565b9350506020614a7886828701614888565b9250506040614a8986828701614888565b9150509250925092565b6000614a9f8383614aab565b60208301905092915050565b614ab48161529d565b82525050565b614ac38161529d565b82525050565b6000614ad482615143565b614ade8185615166565b9350614ae983615133565b8060005b83811015614b1a578151614b018882614a93565b9750614b0c83615159565b925050600181019050614aed565b5085935050505092915050565b614b30816152af565b82525050565b614b3f816152f2565b82525050565b614b4e81615316565b82525050565b6000614b5f8261514e565b614b698185615177565b9350614b79818560208601615328565b614b8281615463565b840191505092915050565b6000614b9a602383615177565b9150614ba582615474565b604082019050919050565b6000614bbd602a83615177565b9150614bc8826154c3565b604082019050919050565b6000614be0602683615177565b9150614beb82615512565b604082019050919050565b6000614c03602283615177565b9150614c0e82615561565b604082019050919050565b6000614c26601b83615177565b9150614c31826155b0565b602082019050919050565b6000614c49601b83615177565b9150614c54826155d9565b602082019050919050565b6000614c6c601f83615177565b9150614c7782615602565b602082019050919050565b6000614c8f602883615177565b9150614c9a8261562b565b604082019050919050565b6000614cb2602883615177565b9150614cbd8261567a565b604082019050919050565b6000614cd5602083615177565b9150614ce0826156c9565b602082019050919050565b6000614cf8602983615177565b9150614d03826156f2565b604082019050919050565b6000614d1b602783615177565b9150614d2682615741565b604082019050919050565b6000614d3e602583615177565b9150614d4982615790565b604082019050919050565b6000614d61602483615177565b9150614d6c826157df565b604082019050919050565b6000614d84602c83615177565b9150614d8f8261582e565b604082019050919050565b614da3816152db565b82525050565b614db2816152e5565b82525050565b6000602082019050614dcd6000830184614aba565b92915050565b600060c082019050614de86000830189614aba565b614df56020830188614d9a565b614e026040830187614b45565b614e0f6060830186614b45565b614e1c6080830185614aba565b614e2960a0830184614d9a565b979650505050505050565b6000602082019050614e496000830184614b27565b92915050565b6000602082019050614e646000830184614b36565b92915050565b60006020820190508181036000830152614e848184614b54565b905092915050565b60006020820190508181036000830152614ea581614b8d565b9050919050565b60006020820190508181036000830152614ec581614bb0565b9050919050565b60006020820190508181036000830152614ee581614bd3565b9050919050565b60006020820190508181036000830152614f0581614bf6565b9050919050565b60006020820190508181036000830152614f2581614c19565b9050919050565b60006020820190508181036000830152614f4581614c3c565b9050919050565b60006020820190508181036000830152614f6581614c5f565b9050919050565b60006020820190508181036000830152614f8581614c82565b9050919050565b60006020820190508181036000830152614fa581614ca5565b9050919050565b60006020820190508181036000830152614fc581614cc8565b9050919050565b60006020820190508181036000830152614fe581614ceb565b9050919050565b6000602082019050818103600083015261500581614d0e565b9050919050565b6000602082019050818103600083015261502581614d31565b9050919050565b6000602082019050818103600083015261504581614d54565b9050919050565b6000602082019050818103600083015261506581614d77565b9050919050565b60006020820190506150816000830184614d9a565b92915050565b600060a08201905061509c6000830188614d9a565b6150a96020830187614b45565b81810360408301526150bb8186614ac9565b90506150ca6060830185614aba565b6150d76080830184614d9a565b9695505050505050565b60006060820190506150f66000830186614d9a565b6151036020830185614d9a565b6151106040830184614d9a565b949350505050565b600060208201905061512d6000830184614da9565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000615193826152db565b915061519e836152db565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151d3576151d26153d6565b5b828201905092915050565b60006151e9826152db565b91506151f4836152db565b92508261520457615203615405565b5b828204905092915050565b600061521a826152db565b9150615225836152db565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561525e5761525d6153d6565b5b828202905092915050565b6000615274826152db565b915061527f836152db565b925082821015615292576152916153d6565b5b828203905092915050565b60006152a8826152bb565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152fd82615304565b9050919050565b600061530f826152bb565b9050919050565b6000615321826152db565b9050919050565b60005b8381101561534657808201518184015260208101905061532b565b83811115615355576000848401525b50505050565b6000600282049050600182168061537357607f821691505b6020821081141561538757615386615434565b5b50919050565b6000615398826152db565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153cb576153ca6153d6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e742065786365656473206d61782053656c6c60008201527f20416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e742065786365656473206d6178204275792060008201527f416d6f756e742e00000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6158868161529d565b811461589157600080fd5b50565b61589d816152af565b81146158a857600080fd5b50565b6158b4816152db565b81146158bf57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205a7ec8120d59288e280c5fa947e7876ec11e515c3ccebd23ee1a34bcc367ccef64736f6c63430008030033
Deployed Bytecode Sourcemap
28733:21164:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30134:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31413:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32325:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37562:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33446:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29887:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31690:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36658:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29687:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32494:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34373:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31599:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35089:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37668:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32815:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33541:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29591:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29183:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36293:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33927:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36784:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29945:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30024:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34634:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42429:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29786:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31793:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37776:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20216:148;;;;;;;;;;;;;:::i;:::-;;30077:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30192:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33318:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19565:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36918:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31504:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33041:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31999:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36538:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37956:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30249:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37051:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32174:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36416:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37390:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20519:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37222:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30134:48;;;;:::o;31413:83::-;31450:13;31483:5;31476:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31413:83;:::o;32325:161::-;32400:4;32417:39;32426:12;:10;:12::i;:::-;32440:7;32449:6;32417:8;:39::i;:::-;32474:4;32467:11;;32325:161;;;;:::o;37562:98::-;37613:7;37639:13;;37632:20;;37562:98;:::o;33446:87::-;33488:7;33515:10;;33508:17;;33446:87;:::o;29887:51::-;;;:::o;31690:95::-;31743:7;31770;;31763:14;;31690:95;:::o;36658:118::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36761:7:::1;36735:23;;:33;;;;;;;;;;;;;;;;;;36658:118:::0;:::o;29687:32::-;;;;:::o;32494:313::-;32592:4;32609:36;32619:6;32627:9;32638:6;32609:9;:36::i;:::-;32656:121;32665:6;32673:12;:10;:12::i;:::-;32687:89;32725:6;32687:89;;;;;;;;;;;;;;;;;:11;:19;32699:6;32687:19;;;;;;;;;;;;;;;:33;32707:12;:10;:12::i;:::-;32687:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;32656:8;:121::i;:::-;32795:4;32788:11;;32494:313;;;;;:::o;34373:253::-;34439:7;34478;;34467;:18;;34459:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34543:19;34566:10;:8;:10::i;:::-;34543:33;;34594:24;34606:11;34594:7;:11;;:24;;;;:::i;:::-;34587:31;;;34373:253;;;:::o;31599:83::-;31640:5;31665:9;;;;;;;;;;;31658:16;;31599:83;:::o;35089:479::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35171:11:::1;:20;35183:7;35171:20;;;;;;;;;;;;;;;;;;;;;;;;;35163:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35239:9;35234:327;35258:9;:16;;;;35254:1;:20;35234:327;;;35316:7;35300:23;;:9;35310:1;35300:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;35296:254;;;35359:9;35388:1;35369:9;:16;;;;:20;;;;:::i;:::-;35359:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35344:9;35354:1;35344:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35428:1;35409:7;:16;35417:7;35409:16;;;;;;;;;;;;;;;:20;;;;35471:5;35448:11;:20;35460:7;35448:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;35495:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35529:5;;35296:254;35276:3;;;;;:::i;:::-;;;;35234:327;;;;35089:479:::0;:::o;37668:100::-;37720:7;37746:14;;37739:21;;37668:100;:::o;32815:218::-;32903:4;32920:83;32929:12;:10;:12::i;:::-;32943:7;32952:50;32991:10;32952:11;:25;32964:12;:10;:12::i;:::-;32952:25;;;;;;;;;;;;;;;:34;32978:7;32952:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32920:8;:83::i;:::-;33021:4;33014:11;;32815:218;;;;:::o;33541:378::-;33593:14;33610:12;:10;:12::i;:::-;33593:29;;33642:11;:19;33654:6;33642:19;;;;;;;;;;;;;;;;;;;;;;;;;33641:20;33633:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33722:15;33747:19;33758:7;33747:10;:19::i;:::-;33721:45;;;;;;;;33795:28;33815:7;33795;:15;33803:6;33795:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33777:7;:15;33785:6;33777:15;;;;;;;;;;;;;;;:46;;;;33844:20;33856:7;33844;;:11;;:20;;;;:::i;:::-;33834:7;:30;;;;33888:23;33903:7;33888:10;;:14;;:23;;;;:::i;:::-;33875:10;:36;;;;33541:378;;;:::o;29591:29::-;;;;:::o;29183:83::-;;;;;;;;;;;;;:::o;36293:111::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36392:4:::1;36362:18;:27;36381:7;36362:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;36293:111:::0;:::o;33927:438::-;34017:7;34056;;34045;:18;;34037:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34115:17;34110:248;;34150:15;34175:19;34186:7;34175:10;:19::i;:::-;34149:45;;;;;;;;34216:7;34209:14;;;;;34110:248;34258:23;34290:19;34301:7;34290:10;:19::i;:::-;34256:53;;;;;;;;34331:15;34324:22;;;33927:438;;;;;:::o;36784:122::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36886:12:::1;36870:13;:28;;;;36784:122:::0;:::o;29945:38::-;;;:::o;30024:40::-;;;;;;;;;;;;;:::o;34634:447::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34831:11:::1;:20;34843:7;34831:20;;;;;;;;;;;;;;;;;;;;;;;;;34830:21;34822:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34916:1;34897:7;:16;34905:7;34897:16;;;;;;;;;;;;;;;;:20;34894:108;;;34953:37;34973:7;:16;34981:7;34973:16;;;;;;;;;;;;;;;;34953:19;:37::i;:::-;34934:7;:16;34942:7;34934:16;;;;;;;;;;;;;;;:56;;;;34894:108;35035:4;35012:11;:20;35024:7;35012:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;35050:9;35065:7;35050:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34634:447:::0;:::o;42429:123::-;42493:4;42517:18;:27;42536:7;42517:27;;;;;;;;;;;;;;;;;;;;;;;;;42510:34;;42429:123;;;:::o;29786:32::-;;;;:::o;31793:198::-;31859:7;31883:11;:20;31895:7;31883:20;;;;;;;;;;;;;;;;;;;;;;;;;31879:49;;;31912:7;:16;31920:7;31912:16;;;;;;;;;;;;;;;;31905:23;;;;31879:49;31946:37;31966:7;:16;31974:7;31966:16;;;;;;;;;;;;;;;;31946:19;:37::i;:::-;31939:44;;31793:198;;;;:::o;37776:172::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37884:56:::1;37924:5;37884:21;37896:8;37884:7;;:11;;:21;;;;:::i;:::-;:25;;:56;;;;:::i;:::-;37852:29;:88;;;;37776:172:::0;:::o;20216:148::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20323:1:::1;20286:40;;20307:6;::::0;::::1;;;;;;;;20286:40;;;;;;;;;;;;20354:1;20337:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;20216:148::o:0;30077:49::-;;;;:::o;30192:50::-;;;;:::o;33318:120::-;33386:4;33410:11;:20;33422:7;33410:20;;;;;;;;;;;;;;;;;;;;;;;;;33403:27;;33318:120;;;:::o;19565:87::-;19611:7;19638:6;;;;;;;;;;;19631:13;;19565:87;:::o;36918:122::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37020:12:::1;37004:13;:28;;;;36918:122:::0;:::o;31504:87::-;31543:13;31576:7;31569:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31504:87;:::o;33041:269::-;33134:4;33151:129;33160:12;:10;:12::i;:::-;33174:7;33183:96;33222:15;33183:96;;;;;;;;;;;;;;;;;:11;:25;33195:12;:10;:12::i;:::-;33183:25;;;;;;;;;;;;;;;:34;33209:7;33183:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;33151:8;:129::i;:::-;33298:4;33291:11;;33041:269;;;;:::o;31999:167::-;32077:4;32094:42;32104:12;:10;:12::i;:::-;32118:9;32129:6;32094:9;:42::i;:::-;32154:4;32147:11;;31999:167;;;;:::o;36538:110::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36631:9:::1;36618:10;:22;;;;36538:110:::0;:::o;37956:171::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38057:8:::1;38033:21;;:32;;;;;;;;;;;;;;;;;;38081:38;38110:8;38081:38;;;;;;:::i;:::-;;;;;;;;37956:171:::0;:::o;30249:67::-;;;;:::o;37051:162::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37145:60:::1;37189:5;37145:25;37157:12;37145:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;37130:12;:75;;;;37051:162:::0;:::o;32174:143::-;32255:7;32282:11;:18;32294:5;32282:18;;;;;;;;;;;;;;;:27;32301:7;32282:27;;;;;;;;;;;;;;;;32275:34;;32174:143;;;;:::o;36416:110::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36513:5:::1;36483:18;:27;36502:7;36483:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;36416:110:::0;:::o;37390:164::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37483:63:::1;37530:5;37483:28;37496:14;37483:7;;:11;;:28;;;;:::i;:::-;:32;;:63;;;;:::i;:::-;37466:14;:80;;;;37390:164:::0;:::o;20519:244::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20628:1:::1;20608:22;;:8;:22;;;;20600:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20718:8;20689:38;;20710:6;::::0;::::1;;;;;;;;20689:38;;;;;;;;;;;;20747:8;20738:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;20519:244:::0;:::o;37222:160::-;19796:12;:10;:12::i;:::-;19785:23;;:7;:5;:7::i;:::-;:23;;;19777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37312:62:::1;37358:5;37312:27;37325:13;37312:7;;:11;;:27;;;;:::i;:::-;:31;;:62;;;;:::i;:::-;37296:13;:78;;;;37222:160:::0;:::o;10314:98::-;10367:7;10394:10;10387:17;;10314:98;:::o;42560:337::-;42670:1;42653:19;;:5;:19;;;;42645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42751:1;42732:21;;:7;:21;;;;42724:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42835:6;42805:11;:18;42817:5;42805:18;;;;;;;;;;;;;;;:27;42824:7;42805:27;;;;;;;;;;;;;;;:36;;;;42873:7;42857:32;;42866:5;42857:32;;;42882:6;42857:32;;;;;;:::i;:::-;;;;;;;;42560:337;;;:::o;42905:2112::-;43043:1;43027:18;;:4;:18;;;;43019:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43120:1;43106:16;;:2;:16;;;;43098:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43190:1;43181:6;:10;43173:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43259:7;:5;:7::i;:::-;43251:15;;:4;:15;;;;:32;;;;;43276:7;:5;:7::i;:::-;43270:13;;:2;:13;;;;43251:32;43248:125;;;43316:12;;43306:6;:22;;43298:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;43248:125;43400:7;:5;:7::i;:::-;43392:15;;:4;:15;;;;:38;;;;;43417:13;43411:19;;:2;:19;;;43392:38;43389:132;;;43470:6;43453:14;;:23;43445:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43389:132;43553:13;43545:21;;:4;:21;;;:38;;;;;43576:7;:5;:7::i;:::-;43570:13;;:2;:13;;;;43545:38;43542:130;;;43622:6;43606:13;;:22;43598:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;43542:130;43967:28;43998:24;44016:4;43998:9;:24::i;:::-;43967:55;;44070:12;;44046:20;:36;44043:112;;44131:12;;44108:35;;44043:112;44175:24;44226:29;;44202:20;:53;;44175:80;;44284:19;:53;;;;;44321:16;;;;;;;;;;;44320:17;44284:53;:91;;;;;44362:13;44354:21;;:4;:21;;;;44284:91;:129;;;;;44392:21;;;;;;;;;;;44284:129;44266:318;;;44463:29;;44440:52;;44536:36;44551:20;44536:14;:36::i;:::-;44266:318;44665:12;44680:4;44665:19;;44792:18;:24;44811:4;44792:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;44820:18;:22;44839:2;44820:22;;;;;;;;;;;;;;;;;;;;;;;;;44792:50;44789:96;;;44868:5;44858:15;;44789:96;44971:38;44986:4;44991:2;44994:6;45001:7;44971:14;:38::i;:::-;42905:2112;;;;;;:::o;7764:206::-;7850:7;7908:1;7903;:6;;7911:12;7895:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7950:1;7946;:5;7939:12;;7764:206;;;;;:::o;39840:163::-;39881:7;39902:15;39919;39938:19;:17;:19::i;:::-;39901:56;;;;39975:20;39987:7;39975;:11;;:20;;;;:::i;:::-;39968:27;;;;39840:163;:::o;6622:98::-;6680:7;6711:1;6707;:5;;;;:::i;:::-;6700:12;;6622:98;;;;:::o;5485:::-;5543:7;5574:1;5570;:5;;;;:::i;:::-;5563:12;;5485:98;;;;:::o;38388:472::-;38447:7;38456;38465;38474;38483;38492;38501;38522:23;38547:12;38561:18;38581;38603:20;38615:7;38603:11;:20::i;:::-;38521:102;;;;;;;;38635:15;38652:23;38677:12;38693:62;38705:7;38714:4;38720:10;38732;38744;:8;:10::i;:::-;38693:11;:62::i;:::-;38634:121;;;;;;38774:7;38783:15;38800:4;38806:15;38823:4;38829:10;38841;38766:86;;;;;;;;;;;;;;;;;;;;;38388:472;;;;;;;;;:::o;5866:98::-;5924:7;5955:1;5951;:5;;;;:::i;:::-;5944:12;;5866:98;;;;:::o;6223:::-;6281:7;6312:1;6308;:5;;;;:::i;:::-;6301:12;;6223:98;;;;:::o;45025:985::-;30642:4;30623:16;;:23;;;;;;;;;;;;;;;;;;45161:12:::1;45176:27;45201:1;45176:20;:24;;:27;;;;:::i;:::-;45161:42;;45214:17;45234:30;45259:4;45234:20;:24;;:30;;;;:::i;:::-;45214:50;;45542:22;45567:21;45542:46;;45633:22;45650:4;45633:16;:22::i;:::-;45786:18;45807:41;45833:14;45807:21;:25;;:41;;;;:::i;:::-;45786:62;;45898:35;45911:9;45922:10;45898:12;:35::i;:::-;45959:43;45974:4;45980:10;45992:9;45959:43;;;;;;;;:::i;:::-;;;;;;;;30657:1;;;;30688:5:::0;30669:16;;:24;;;;;;;;;;;;;;;;;;45025:985;:::o;47209:834::-;47320:7;47316:40;;47342:14;:12;:14::i;:::-;47316:40;47381:11;:19;47393:6;47381:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;47405:11;:22;47417:9;47405:22;;;;;;;;;;;;;;;;;;;;;;;;;47404:23;47381:46;47377:597;;;47444:48;47466:6;47474:9;47485:6;47444:21;:48::i;:::-;47377:597;;;47515:11;:19;47527:6;47515:19;;;;;;;;;;;;;;;;;;;;;;;;;47514:20;:46;;;;;47538:11;:22;47550:9;47538:22;;;;;;;;;;;;;;;;;;;;;;;;;47514:46;47510:464;;;47577:46;47597:6;47605:9;47616:6;47577:19;:46::i;:::-;47510:464;;;47646:11;:19;47658:6;47646:19;;;;;;;;;;;;;;;;;;;;;;;;;47645:20;:47;;;;;47670:11;:22;47682:9;47670:22;;;;;;;;;;;;;;;;;;;;;;;;;47669:23;47645:47;47641:333;;;47709:44;47727:6;47735:9;47746:6;47709:17;:44::i;:::-;47641:333;;;47775:11;:19;47787:6;47775:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;47798:11;:22;47810:9;47798:22;;;;;;;;;;;;;;;;;;;;;;;;;47775:45;47771:203;;;47837:48;47859:6;47867:9;47878:6;47837:21;:48::i;:::-;47771:203;;;47918:44;47936:6;47944:9;47955:6;47918:17;:44::i;:::-;47771:203;47641:333;47510:464;47377:597;47998:7;47994:41;;48020:15;:13;:15::i;:::-;47994:41;47209:834;;;;:::o;40011:561::-;40061:7;40070;40090:15;40108:7;;40090:25;;40126:15;40144:7;;40126:25;;40173:9;40168:289;40192:9;:16;;;;40188:1;:20;40168:289;;;40258:7;40234;:21;40242:9;40252:1;40242:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40234:21;;;;;;;;;;;;;;;;:31;:66;;;;40293:7;40269;:21;40277:9;40287:1;40277:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40269:21;;;;;;;;;;;;;;;;:31;40234:66;40230:97;;;40310:7;;40319;;40302:25;;;;;;;;;40230:97;40352:34;40364:7;:21;40372:9;40382:1;40372:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40364:21;;;;;;;;;;;;;;;;40352:7;:11;;:34;;;;:::i;:::-;40342:44;;40411:34;40423:7;:21;40431:9;40441:1;40431:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40423:21;;;;;;;;;;;;;;;;40411:7;:11;;:34;;;;:::i;:::-;40401:44;;40210:3;;;;;:::i;:::-;;;;40168:289;;;;40481:20;40493:7;;40481;;:11;;:20;;;;:::i;:::-;40471:7;:30;40467:61;;;40511:7;;40520;;40503:25;;;;;;;;40467:61;40547:7;40556;40539:25;;;;;;40011:561;;;:::o;38868:432::-;38928:7;38937;38946;38955;38975:12;38990:27;39009:7;38990:18;:27::i;:::-;38975:42;;39028:18;39049:30;39071:7;39049:21;:30::i;:::-;39028:51;;39090:18;39111:30;39133:7;39111:21;:30::i;:::-;39090:51;;39152:23;39178:49;39216:10;39178:33;39200:10;39178:17;39190:4;39178:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:49;;;;:::i;:::-;39152:75;;39246:15;39263:4;39269:10;39281;39238:54;;;;;;;;;;;;38868:432;;;;;:::o;39308:524::-;39443:7;39452;39461;39481:15;39499:24;39511:11;39499:7;:11;;:24;;;;:::i;:::-;39481:42;;39534:12;39549:21;39558:11;39549:4;:8;;:21;;;;:::i;:::-;39534:36;;39581:18;39602:27;39617:11;39602:10;:14;;:27;;;;:::i;:::-;39581:48;;39640:18;39661:27;39676:11;39661:10;:14;;:27;;;;:::i;:::-;39640:48;;39699:23;39725:49;39763:10;39725:33;39747:10;39725:17;39737:4;39725:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:49;;;;:::i;:::-;39699:75;;39793:7;39802:15;39819:4;39785:39;;;;;;;;;;;39308:524;;;;;;;;;:::o;46018:589::-;46144:21;46182:1;46168:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46144:40;;46213:4;46195;46200:1;46195:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;46239:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46229:4;46234:1;46229:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;46274:62;46291:4;46306:15;46324:11;46274:8;:62::i;:::-;46375:15;:66;;;46456:11;46482:1;46526:4;46553;46573:15;46375:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46018:589;;:::o;46615:513::-;46763:62;46780:4;46795:15;46813:11;46763:8;:62::i;:::-;46868:15;:31;;;46907:9;46940:4;46960:11;46986:1;47029;47072:7;:5;:7::i;:::-;47094:15;46868:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46615:513;;:::o;41888:338::-;41948:1;41934:10;;:15;:37;;;;;41970:1;41953:13;;:18;41934:37;41931:49;;;41973:7;;41931:49;42021:10;;42000:18;:31;;;;42066:13;;42042:21;:37;;;;42114:13;;42090:21;:37;;;;42161:1;42148:10;:14;;;;42189:1;42173:13;:17;;;;42217:1;42201:13;:17;;;;41888:338;:::o;49269:623::-;49372:15;49389:23;49414:12;49428:23;49453:12;49467:18;49487;49509:19;49520:7;49509:10;:19::i;:::-;49371:157;;;;;;;;;;;;;;49557:28;49577:7;49557;:15;49565:6;49557:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;49539:7;:15;49547:6;49539:15;;;;;;;;;;;;;;;:46;;;;49614:28;49634:7;49614;:15;49622:6;49614:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;49596:7;:15;49604:6;49596:15;;;;;;;;;;;;;;;:46;;;;49674:39;49697:15;49674:7;:18;49682:9;49674:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;49653:7;:18;49661:9;49653:18;;;;;;;;;;;;;;;:60;;;;49727:26;49742:10;49727:14;:26::i;:::-;49764;49779:10;49764:14;:26::i;:::-;49801:23;49813:4;49819;49801:11;:23::i;:::-;49857:9;49840:44;;49849:6;49840:44;;;49868:15;49840:44;;;;;;:::i;:::-;;;;;;;;49269:623;;;;;;;;;;:::o;48618:643::-;48719:15;48736:23;48761:12;48775:23;48800:12;48814:18;48834;48856:19;48867:7;48856:10;:19::i;:::-;48718:157;;;;;;;;;;;;;;48904:28;48924:7;48904;:15;48912:6;48904:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48886:7;:15;48894:6;48886:15;;;;;;;;;;;;;;;:46;;;;48964:39;48987:15;48964:7;:18;48972:9;48964:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48943:7;:18;48951:9;48943:18;;;;;;;;;;;;;;;:60;;;;49035:39;49058:15;49035:7;:18;49043:9;49035:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;49014:7;:18;49022:9;49014:18;;;;;;;;;;;;;;;:60;;;;49096:26;49111:10;49096:14;:26::i;:::-;49133;49148:10;49133:14;:26::i;:::-;49170:23;49182:4;49188;49170:11;:23::i;:::-;49226:9;49209:44;;49218:6;49209:44;;;49237:15;49209:44;;;;;;:::i;:::-;;;;;;;;48618:643;;;;;;;;;;:::o;48051:559::-;48150:15;48167:23;48192:12;48206:23;48231:12;48245:18;48265;48287:19;48298:7;48287:10;:19::i;:::-;48149:157;;;;;;;;;;;;;;48335:28;48355:7;48335;:15;48343:6;48335:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48317:7;:15;48325:6;48317:15;;;;;;;;;;;;;;;:46;;;;48395:39;48418:15;48395:7;:18;48403:9;48395:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48374:7;:18;48382:9;48374:18;;;;;;;;;;;;;;;:60;;;;48445:26;48460:10;48445:14;:26::i;:::-;48482;48497:10;48482:14;:26::i;:::-;48519:23;48531:4;48537;48519:11;:23::i;:::-;48575:9;48558:44;;48567:6;48558:44;;;48586:15;48558:44;;;;;;:::i;:::-;;;;;;;;48051:559;;;;;;;;;;:::o;35578:699::-;35681:15;35698:23;35723:12;35737:23;35762:12;35776:18;35796;35818:19;35829:7;35818:10;:19::i;:::-;35680:157;;;;;;;;;;;;;;35866:28;35886:7;35866;:15;35874:6;35866:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35848:7;:15;35856:6;35848:15;;;;;;;;;;;;;;;:46;;;;35923:28;35943:7;35923;:15;35931:6;35923:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35905:7;:15;35913:6;35905:15;;;;;;;;;;;;;;;:46;;;;35983:39;36006:15;35983:7;:18;35991:9;35983:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35962:7;:18;35970:9;35962:18;;;;;;;;;;;;;;;:60;;;;36054:39;36077:15;36054:7;:18;36062:9;36054:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36033:7;:18;36041:9;36033:18;;;;;;;;;;;;;;;:60;;;;36112:26;36127:10;36112:14;:26::i;:::-;36149;36164:10;36149:14;:26::i;:::-;36186:23;36198:4;36204;36186:11;:23::i;:::-;36242:9;36225:44;;36234:6;36225:44;;;36253:15;36225:44;;;;;;:::i;:::-;;;;;;;;35578:699;;;;;;;;;;:::o;42238:179::-;42295:18;;42282:10;:31;;;;42340:21;;42324:13;:37;;;;42388:21;;42372:13;:37;;;;42238:179::o;41368:160::-;41435:7;41462:58;41504:5;41462:23;41474:10;;41462:7;:11;;:23;;;;:::i;:::-;:27;;:58;;;;:::i;:::-;41455:65;;41368:160;;;:::o;41710:166::-;41780:7;41807:61;41852:5;41807:26;41819:13;;41807:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;41800:68;;41710:166;;;:::o;41536:::-;41606:7;41633:61;41678:5;41633:26;41645:13;;41633:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;41626:68;;41536:166;;;:::o;40584:355::-;40647:19;40670:10;:8;:10::i;:::-;40647:33;;40691:18;40712:27;40727:11;40712:10;:14;;:27;;;;:::i;:::-;40691:48;;40775:38;40802:10;40775:7;:22;40791:4;40775:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40750:7;:22;40766:4;40750:22;;;;;;;;;;;;;;;:63;;;;40827:11;:26;40847:4;40827:26;;;;;;;;;;;;;;;;;;;;;;;;;40824:107;;;40893:38;40920:10;40893:7;:22;40909:4;40893:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40868:7;:22;40884:4;40868:22;;;;;;;;;;;;;;;:63;;;;40824:107;40584:355;;;:::o;40951:405::-;41014:19;41037:10;:8;:10::i;:::-;41014:33;;41058:18;41079:27;41094:11;41079:10;:14;;:27;;;;:::i;:::-;41058:48;;41152;41189:10;41152:7;:32;41160:23;;;;;;;;;;;41152:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;41117:7;:32;41125:23;;;;;;;;;;;41117:32;;;;;;;;;;;;;;;:83;;;;41214:11;:36;41226:23;;;;;;;;;;;41214:36;;;;;;;;;;;;;;;;;;;;;;;;;41211:137;;;41300:48;41337:10;41300:7;:32;41308:23;;;;;;;;;;;41300:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;41265:7;:32;41273:23;;;;;;;;;;;41265:32;;;;;;;;;;;;;;;:83;;;;41211:137;40951:405;;;:::o;38233:147::-;38311:17;38323:4;38311:7;;:11;;:17;;;;:::i;:::-;38301:7;:27;;;;38352:20;38367:4;38352:10;;:14;;:20;;;;:::i;:::-;38339:10;:33;;;;38233:147;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;;;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;;;;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:407::-;;;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:256::-;;2781:2;2769:9;2760:7;2756:23;2752:32;2749:2;;;2797:1;2794;2787:12;2749:2;2840:1;2865:50;2907:7;2898:6;2887:9;2883:22;2865:50;:::i;:::-;2855:60;;2811:114;2739:193;;;;:::o;2938:262::-;;3046:2;3034:9;3025:7;3021:23;3017:32;3014:2;;;3062:1;3059;3052:12;3014:2;3105:1;3130:53;3175:7;3166:6;3155:9;3151:22;3130:53;:::i;:::-;3120:63;;3076:117;3004:196;;;;:::o;3206:401::-;;;3328:2;3316:9;3307:7;3303:23;3299:32;3296:2;;;3344:1;3341;3334:12;3296:2;3387:1;3412:53;3457:7;3448:6;3437:9;3433:22;3412:53;:::i;:::-;3402:63;;3358:117;3514:2;3540:50;3582:7;3573:6;3562:9;3558:22;3540:50;:::i;:::-;3530:60;;3485:115;3286:321;;;;;:::o;3613:596::-;;;;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:64;3906:7;3897:6;3886:9;3882:22;3850:64;:::i;:::-;3840:74;;3796:128;3963:2;3989:64;4045:7;4036:6;4025:9;4021:22;3989:64;:::i;:::-;3979:74;;3934:129;4102:2;4128:64;4184:7;4175:6;4164:9;4160:22;4128:64;:::i;:::-;4118:74;;4073:129;3724:485;;;;;:::o;4215:179::-;;4305:46;4347:3;4339:6;4305:46;:::i;:::-;4383:4;4378:3;4374:14;4360:28;;4295:99;;;;:::o;4400:108::-;4477:24;4495:5;4477:24;:::i;:::-;4472:3;4465:37;4455:53;;:::o;4514:118::-;4601:24;4619:5;4601:24;:::i;:::-;4596:3;4589:37;4579:53;;:::o;4668:732::-;;4816:54;4864:5;4816:54;:::i;:::-;4886:86;4965:6;4960:3;4886:86;:::i;:::-;4879:93;;4996:56;5046:5;4996:56;:::i;:::-;5075:7;5106:1;5091:284;5116:6;5113:1;5110:13;5091:284;;;5192:6;5186:13;5219:63;5278:3;5263:13;5219:63;:::i;:::-;5212:70;;5305:60;5358:6;5305:60;:::i;:::-;5295:70;;5151:224;5138:1;5135;5131:9;5126:14;;5091:284;;;5095:14;5391:3;5384:10;;4792:608;;;;;;;:::o;5406:109::-;5487:21;5502:5;5487:21;:::i;:::-;5482:3;5475:34;5465:50;;:::o;5521:185::-;5635:64;5693:5;5635:64;:::i;:::-;5630:3;5623:77;5613:93;;:::o;5712:147::-;5807:45;5846:5;5807:45;:::i;:::-;5802:3;5795:58;5785:74;;:::o;5865:364::-;;5981:39;6014:5;5981:39;:::i;:::-;6036:71;6100:6;6095:3;6036:71;:::i;:::-;6029:78;;6116:52;6161:6;6156:3;6149:4;6142:5;6138:16;6116:52;:::i;:::-;6193:29;6215:6;6193:29;:::i;:::-;6188:3;6184:39;6177:46;;5957:272;;;;;:::o;6235:366::-;;6398:67;6462:2;6457:3;6398:67;:::i;:::-;6391:74;;6474:93;6563:3;6474:93;:::i;:::-;6592:2;6587:3;6583:12;6576:19;;6381:220;;;:::o;6607:366::-;;6770:67;6834:2;6829:3;6770:67;:::i;:::-;6763:74;;6846:93;6935:3;6846:93;:::i;:::-;6964:2;6959:3;6955:12;6948:19;;6753:220;;;:::o;6979:366::-;;7142:67;7206:2;7201:3;7142:67;:::i;:::-;7135:74;;7218:93;7307:3;7218:93;:::i;:::-;7336:2;7331:3;7327:12;7320:19;;7125:220;;;:::o;7351:366::-;;7514:67;7578:2;7573:3;7514:67;:::i;:::-;7507:74;;7590:93;7679:3;7590:93;:::i;:::-;7708:2;7703:3;7699:12;7692:19;;7497:220;;;:::o;7723:366::-;;7886:67;7950:2;7945:3;7886:67;:::i;:::-;7879:74;;7962:93;8051:3;7962:93;:::i;:::-;8080:2;8075:3;8071:12;8064:19;;7869:220;;;:::o;8095:366::-;;8258:67;8322:2;8317:3;8258:67;:::i;:::-;8251:74;;8334:93;8423:3;8334:93;:::i;:::-;8452:2;8447:3;8443:12;8436:19;;8241:220;;;:::o;8467:366::-;;8630:67;8694:2;8689:3;8630:67;:::i;:::-;8623:74;;8706:93;8795:3;8706:93;:::i;:::-;8824:2;8819:3;8815:12;8808:19;;8613:220;;;:::o;8839:366::-;;9002:67;9066:2;9061:3;9002:67;:::i;:::-;8995:74;;9078:93;9167:3;9078:93;:::i;:::-;9196:2;9191:3;9187:12;9180:19;;8985:220;;;:::o;9211:366::-;;9374:67;9438:2;9433:3;9374:67;:::i;:::-;9367:74;;9450:93;9539:3;9450:93;:::i;:::-;9568:2;9563:3;9559:12;9552:19;;9357:220;;;:::o;9583:366::-;;9746:67;9810:2;9805:3;9746:67;:::i;:::-;9739:74;;9822:93;9911:3;9822:93;:::i;:::-;9940:2;9935:3;9931:12;9924:19;;9729:220;;;:::o;9955:366::-;;10118:67;10182:2;10177:3;10118:67;:::i;:::-;10111:74;;10194:93;10283:3;10194:93;:::i;:::-;10312:2;10307:3;10303:12;10296:19;;10101:220;;;:::o;10327:366::-;;10490:67;10554:2;10549:3;10490:67;:::i;:::-;10483:74;;10566:93;10655:3;10566:93;:::i;:::-;10684:2;10679:3;10675:12;10668:19;;10473:220;;;:::o;10699:366::-;;10862:67;10926:2;10921:3;10862:67;:::i;:::-;10855:74;;10938:93;11027:3;10938:93;:::i;:::-;11056:2;11051:3;11047:12;11040:19;;10845:220;;;:::o;11071:366::-;;11234:67;11298:2;11293:3;11234:67;:::i;:::-;11227:74;;11310:93;11399:3;11310:93;:::i;:::-;11428:2;11423:3;11419:12;11412:19;;11217:220;;;:::o;11443:366::-;;11606:67;11670:2;11665:3;11606:67;:::i;:::-;11599:74;;11682:93;11771:3;11682:93;:::i;:::-;11800:2;11795:3;11791:12;11784:19;;11589:220;;;:::o;11815:118::-;11902:24;11920:5;11902:24;:::i;:::-;11897:3;11890:37;11880:53;;:::o;11939:112::-;12022:22;12038:5;12022:22;:::i;:::-;12017:3;12010:35;12000:51;;:::o;12057:222::-;;12188:2;12177:9;12173:18;12165:26;;12201:71;12269:1;12258:9;12254:17;12245:6;12201:71;:::i;:::-;12155:124;;;;:::o;12285:807::-;;12572:3;12561:9;12557:19;12549:27;;12586:71;12654:1;12643:9;12639:17;12630:6;12586:71;:::i;:::-;12667:72;12735:2;12724:9;12720:18;12711:6;12667:72;:::i;:::-;12749:80;12825:2;12814:9;12810:18;12801:6;12749:80;:::i;:::-;12839;12915:2;12904:9;12900:18;12891:6;12839:80;:::i;:::-;12929:73;12997:3;12986:9;12982:19;12973:6;12929:73;:::i;:::-;13012;13080:3;13069:9;13065:19;13056:6;13012:73;:::i;:::-;12539:553;;;;;;;;;:::o;13098:210::-;;13223:2;13212:9;13208:18;13200:26;;13236:65;13298:1;13287:9;13283:17;13274:6;13236:65;:::i;:::-;13190:118;;;;:::o;13314:276::-;;13472:2;13461:9;13457:18;13449:26;;13485:98;13580:1;13569:9;13565:17;13556:6;13485:98;:::i;:::-;13439:151;;;;:::o;13596:313::-;;13747:2;13736:9;13732:18;13724:26;;13796:9;13790:4;13786:20;13782:1;13771:9;13767:17;13760:47;13824:78;13897:4;13888:6;13824:78;:::i;:::-;13816:86;;13714:195;;;;:::o;13915:419::-;;14119:2;14108:9;14104:18;14096:26;;14168:9;14162:4;14158:20;14154:1;14143:9;14139:17;14132:47;14196:131;14322:4;14196:131;:::i;:::-;14188:139;;14086:248;;;:::o;14340:419::-;;14544:2;14533:9;14529:18;14521:26;;14593:9;14587:4;14583:20;14579:1;14568:9;14564:17;14557:47;14621:131;14747:4;14621:131;:::i;:::-;14613:139;;14511:248;;;:::o;14765:419::-;;14969:2;14958:9;14954:18;14946:26;;15018:9;15012:4;15008:20;15004:1;14993:9;14989:17;14982:47;15046:131;15172:4;15046:131;:::i;:::-;15038:139;;14936:248;;;:::o;15190:419::-;;15394:2;15383:9;15379:18;15371:26;;15443:9;15437:4;15433:20;15429:1;15418:9;15414:17;15407:47;15471:131;15597:4;15471:131;:::i;:::-;15463:139;;15361:248;;;:::o;15615:419::-;;15819:2;15808:9;15804:18;15796:26;;15868:9;15862:4;15858:20;15854:1;15843:9;15839:17;15832:47;15896:131;16022:4;15896:131;:::i;:::-;15888:139;;15786:248;;;:::o;16040:419::-;;16244:2;16233:9;16229:18;16221:26;;16293:9;16287:4;16283:20;16279:1;16268:9;16264:17;16257:47;16321:131;16447:4;16321:131;:::i;:::-;16313:139;;16211:248;;;:::o;16465:419::-;;16669:2;16658:9;16654:18;16646:26;;16718:9;16712:4;16708:20;16704:1;16693:9;16689:17;16682:47;16746:131;16872:4;16746:131;:::i;:::-;16738:139;;16636:248;;;:::o;16890:419::-;;17094:2;17083:9;17079:18;17071:26;;17143:9;17137:4;17133:20;17129:1;17118:9;17114:17;17107:47;17171:131;17297:4;17171:131;:::i;:::-;17163:139;;17061:248;;;:::o;17315:419::-;;17519:2;17508:9;17504:18;17496:26;;17568:9;17562:4;17558:20;17554:1;17543:9;17539:17;17532:47;17596:131;17722:4;17596:131;:::i;:::-;17588:139;;17486:248;;;:::o;17740:419::-;;17944:2;17933:9;17929:18;17921:26;;17993:9;17987:4;17983:20;17979:1;17968:9;17964:17;17957:47;18021:131;18147:4;18021:131;:::i;:::-;18013:139;;17911:248;;;:::o;18165:419::-;;18369:2;18358:9;18354:18;18346:26;;18418:9;18412:4;18408:20;18404:1;18393:9;18389:17;18382:47;18446:131;18572:4;18446:131;:::i;:::-;18438:139;;18336:248;;;:::o;18590:419::-;;18794:2;18783:9;18779:18;18771:26;;18843:9;18837:4;18833:20;18829:1;18818:9;18814:17;18807:47;18871:131;18997:4;18871:131;:::i;:::-;18863:139;;18761:248;;;:::o;19015:419::-;;19219:2;19208:9;19204:18;19196:26;;19268:9;19262:4;19258:20;19254:1;19243:9;19239:17;19232:47;19296:131;19422:4;19296:131;:::i;:::-;19288:139;;19186:248;;;:::o;19440:419::-;;19644:2;19633:9;19629:18;19621:26;;19693:9;19687:4;19683:20;19679:1;19668:9;19664:17;19657:47;19721:131;19847:4;19721:131;:::i;:::-;19713:139;;19611:248;;;:::o;19865:419::-;;20069:2;20058:9;20054:18;20046:26;;20118:9;20112:4;20108:20;20104:1;20093:9;20089:17;20082:47;20146:131;20272:4;20146:131;:::i;:::-;20138:139;;20036:248;;;:::o;20290:222::-;;20421:2;20410:9;20406:18;20398:26;;20434:71;20502:1;20491:9;20487:17;20478:6;20434:71;:::i;:::-;20388:124;;;;:::o;20518:831::-;;20819:3;20808:9;20804:19;20796:27;;20833:71;20901:1;20890:9;20886:17;20877:6;20833:71;:::i;:::-;20914:80;20990:2;20979:9;20975:18;20966:6;20914:80;:::i;:::-;21041:9;21035:4;21031:20;21026:2;21015:9;21011:18;21004:48;21069:108;21172:4;21163:6;21069:108;:::i;:::-;21061:116;;21187:72;21255:2;21244:9;21240:18;21231:6;21187:72;:::i;:::-;21269:73;21337:3;21326:9;21322:19;21313:6;21269:73;:::i;:::-;20786:563;;;;;;;;:::o;21355:442::-;;21542:2;21531:9;21527:18;21519:26;;21555:71;21623:1;21612:9;21608:17;21599:6;21555:71;:::i;:::-;21636:72;21704:2;21693:9;21689:18;21680:6;21636:72;:::i;:::-;21718;21786:2;21775:9;21771:18;21762:6;21718:72;:::i;:::-;21509:288;;;;;;:::o;21803:214::-;;21930:2;21919:9;21915:18;21907:26;;21943:67;22007:1;21996:9;21992:17;21983:6;21943:67;:::i;:::-;21897:120;;;;:::o;22023:132::-;;22113:3;22105:11;;22143:4;22138:3;22134:14;22126:22;;22095:60;;;:::o;22161:114::-;;22262:5;22256:12;22246:22;;22235:40;;;:::o;22281:99::-;;22367:5;22361:12;22351:22;;22340:40;;;:::o;22386:113::-;;22488:4;22483:3;22479:14;22471:22;;22461:38;;;:::o;22505:184::-;;22638:6;22633:3;22626:19;22678:4;22673:3;22669:14;22654:29;;22616:73;;;;:::o;22695:169::-;;22813:6;22808:3;22801:19;22853:4;22848:3;22844:14;22829:29;;22791:73;;;;:::o;22870:305::-;;22929:20;22947:1;22929:20;:::i;:::-;22924:25;;22963:20;22981:1;22963:20;:::i;:::-;22958:25;;23117:1;23049:66;23045:74;23042:1;23039:81;23036:2;;;23123:18;;:::i;:::-;23036:2;23167:1;23164;23160:9;23153:16;;22914:261;;;;:::o;23181:185::-;;23238:20;23256:1;23238:20;:::i;:::-;23233:25;;23272:20;23290:1;23272:20;:::i;:::-;23267:25;;23311:1;23301:2;;23316:18;;:::i;:::-;23301:2;23358:1;23355;23351:9;23346:14;;23223:143;;;;:::o;23372:348::-;;23435:20;23453:1;23435:20;:::i;:::-;23430:25;;23469:20;23487:1;23469:20;:::i;:::-;23464:25;;23657:1;23589:66;23585:74;23582:1;23579:81;23574:1;23567:9;23560:17;23556:105;23553:2;;;23664:18;;:::i;:::-;23553:2;23712:1;23709;23705:9;23694:20;;23420:300;;;;:::o;23726:191::-;;23786:20;23804:1;23786:20;:::i;:::-;23781:25;;23820:20;23838:1;23820:20;:::i;:::-;23815:25;;23859:1;23856;23853:8;23850:2;;;23864:18;;:::i;:::-;23850:2;23909:1;23906;23902:9;23894:17;;23771:146;;;;:::o;23923:96::-;;23989:24;24007:5;23989:24;:::i;:::-;23978:35;;23968:51;;;:::o;24025:90::-;;24102:5;24095:13;24088:21;24077:32;;24067:48;;;:::o;24121:126::-;;24198:42;24191:5;24187:54;24176:65;;24166:81;;;:::o;24253:77::-;;24319:5;24308:16;;24298:32;;;:::o;24336:86::-;;24411:4;24404:5;24400:16;24389:27;;24379:43;;;:::o;24428:180::-;;24538:64;24596:5;24538:64;:::i;:::-;24525:77;;24515:93;;;:::o;24614:140::-;;24724:24;24742:5;24724:24;:::i;:::-;24711:37;;24701:53;;;:::o;24760:121::-;;24851:24;24869:5;24851:24;:::i;:::-;24838:37;;24828:53;;;:::o;24887:307::-;24955:1;24965:113;24979:6;24976:1;24973:13;24965:113;;;25064:1;25059:3;25055:11;25049:18;25045:1;25040:3;25036:11;25029:39;25001:2;24998:1;24994:10;24989:15;;24965:113;;;25096:6;25093:1;25090:13;25087:2;;;25176:1;25167:6;25162:3;25158:16;25151:27;25087:2;24936:258;;;;:::o;25200:320::-;;25281:1;25275:4;25271:12;25261:22;;25328:1;25322:4;25318:12;25349:18;25339:2;;25405:4;25397:6;25393:17;25383:27;;25339:2;25467;25459:6;25456:14;25436:18;25433:38;25430:2;;;25486:18;;:::i;:::-;25430:2;25251:269;;;;:::o;25526:233::-;;25588:24;25606:5;25588:24;:::i;:::-;25579:33;;25634:66;25627:5;25624:77;25621:2;;;25704:18;;:::i;:::-;25621:2;25751:1;25744:5;25740:13;25733:20;;25569:190;;;:::o;25765:180::-;25813:77;25810:1;25803:88;25910:4;25907:1;25900:15;25934:4;25931:1;25924:15;25951:180;25999:77;25996:1;25989:88;26096:4;26093:1;26086:15;26120:4;26117:1;26110:15;26137:180;26185:77;26182:1;26175:88;26282:4;26279:1;26272:15;26306:4;26303:1;26296:15;26323:102;;26415:2;26411:7;26406:2;26399:5;26395:14;26391:28;26381:38;;26371:54;;;:::o;26431:222::-;26571:34;26567:1;26559:6;26555:14;26548:58;26640:5;26635:2;26627:6;26623:15;26616:30;26537:116;:::o;26659:229::-;26799:34;26795:1;26787:6;26783:14;26776:58;26868:12;26863:2;26855:6;26851:15;26844:37;26765:123;:::o;26894:225::-;27034:34;27030:1;27022:6;27018:14;27011:58;27103:8;27098:2;27090:6;27086:15;27079:33;27000:119;:::o;27125:221::-;27265:34;27261:1;27253:6;27249:14;27242:58;27334:4;27329:2;27321:6;27317:15;27310:29;27231:115;:::o;27352:177::-;27492:29;27488:1;27480:6;27476:14;27469:53;27458:71;:::o;27535:177::-;27675:29;27671:1;27663:6;27659:14;27652:53;27641:71;:::o;27718:181::-;27858:33;27854:1;27846:6;27842:14;27835:57;27824:75;:::o;27905:227::-;28045:34;28041:1;28033:6;28029:14;28022:58;28114:10;28109:2;28101:6;28097:15;28090:35;28011:121;:::o;28138:227::-;28278:34;28274:1;28266:6;28262:14;28255:58;28347:10;28342:2;28334:6;28330:15;28323:35;28244:121;:::o;28371:182::-;28511:34;28507:1;28499:6;28495:14;28488:58;28477:76;:::o;28559:228::-;28699:34;28695:1;28687:6;28683:14;28676:58;28768:11;28763:2;28755:6;28751:15;28744:36;28665:122;:::o;28793:226::-;28933:34;28929:1;28921:6;28917:14;28910:58;29002:9;28997:2;28989:6;28985:15;28978:34;28899:120;:::o;29025:224::-;29165:34;29161:1;29153:6;29149:14;29142:58;29234:7;29229:2;29221:6;29217:15;29210:32;29131:118;:::o;29255:223::-;29395:34;29391:1;29383:6;29379:14;29372:58;29464:6;29459:2;29451:6;29447:15;29440:31;29361:117;:::o;29484:231::-;29624:34;29620:1;29612:6;29608:14;29601:58;29693:14;29688:2;29680:6;29676:15;29669:39;29590:125;:::o;29721:122::-;29794:24;29812:5;29794:24;:::i;:::-;29787:5;29784:35;29774:2;;29833:1;29830;29823:12;29774:2;29764:79;:::o;29849:116::-;29919:21;29934:5;29919:21;:::i;:::-;29912:5;29909:32;29899:2;;29955:1;29952;29945:12;29899:2;29889:76;:::o;29971:122::-;30044:24;30062:5;30044:24;:::i;:::-;30037:5;30034:35;30024:2;;30083:1;30080;30073:12;30024:2;30014:79;:::o
Swarm Source
ipfs://5a7ec8120d59288e280c5fa947e7876ec11e515c3ccebd23ee1a34bcc367ccef
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 29 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.