ERC-20
Overview
Max Total Supply
1,000,000,000 42
Holders
252
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
3,473,311.837282295 42Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DEEPTHOUGHT
Compiler Version
v0.8.22+commit.4fc1097e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-23 */ // pragma solidity ^0.8.3; // SPDX-License-Identifier: Unlicensed /** * @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 = _msgSender(); 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 DEEPTHOUGHT is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; uint8 private _decimals = 9; string private _name = "Deep Thought"; string private _symbol = "42"; uint256 private _tTotal = 1 * 10**9 * 10**uint256(_decimals); uint256 public defaultTaxFee = 0; uint256 public _taxFee = defaultTaxFee; uint256 private _previousTaxFee = _taxFee; uint256 public defaultMarketingFee = 15; uint256 public _marketingFee = defaultMarketingFee; uint256 private _previousMarketingFee = _marketingFee; uint256 public _marketingFee4Sellers = 25; bool public feesOnSellersAndBuyers = true; uint256 public _maxTxAmount = _tTotal.div(1).div(100); uint256 public numTokensToExchangeForMarketing = _tTotal.div(100).div(100); address payable public marketingWallet = payable(0xe2D8011e35b29D21B343EcC6b72643F92Bc2e136); 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; uint256 private constant MAX = ~uint256(0); uint256 private _tFeeTotal; uint256 private _rTotal = (MAX - (MAX % _tTotal)); IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndSend; bool public SwapAndSendEnabled = true; event SwapAndSendEnabledUpdated(bool enabled); modifier lockTheSwap { inSwapAndSend = true; _; inSwapAndSend = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // 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), _msgSender(), _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 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 excluded"); 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 excludeFromFee(address account) public onlyOwner() { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner() { _isExcludedFromFee[account] = false; } function removeAllFee() private { if(_taxFee == 0 && _marketingFee == 0) return; _previousTaxFee = _taxFee; _previousMarketingFee = _marketingFee; _taxFee = 0; _marketingFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _marketingFee = _previousMarketingFee; } //to recieve ETH 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 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tMarketing, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketing); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tMarketing = calculateMarketingFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing); return (tTransferAmount, tFee, tMarketing); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rMarketing = tMarketing.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).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 _takeMarketing(uint256 tMarketing) private { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingFee).div( 10**2 ); } 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."); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + send lock? // also, don't get caught in a circular sending event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensToExchangeForMarketing; if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } if ( overMinTokenBalance && !inSwapAndSend && from != uniswapV2Pair && SwapAndSendEnabled ) { SwapAndSend(contractTokenBalance); } if(feesOnSellersAndBuyers) { setFees(to); } //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; } _tokenTransfer(from,to,amount,takeFee); } function setFees(address recipient) private { _taxFee = defaultTaxFee; _marketingFee = defaultMarketingFee; if (recipient == uniswapV2Pair) { // sell _marketingFee = _marketingFee4Sellers; } } function SwapAndSend(uint256 contractTokenBalance) private lockTheSwap { // 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), contractTokenBalance); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( contractTokenBalance, 0, // accept any amount of ETH path, address(this), block.timestamp ); uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { marketingWallet.transfer(contractETHBalance); } } //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 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _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 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _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 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, 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); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function setDefaultMarketingFee(uint256 marketingFee) external onlyOwner() { defaultMarketingFee = marketingFee; } function setMarketingFee4Sellers(uint256 marketingFee4Sellers) external onlyOwner() { _marketingFee4Sellers = marketingFee4Sellers; } function setFeesOnSellersAndBuyers(bool _enabled) public onlyOwner() { feesOnSellersAndBuyers = _enabled; } function setSwapAndSendEnabled(bool _enabled) public onlyOwner() { SwapAndSendEnabled = _enabled; emit SwapAndSendEnabledUpdated(_enabled); } function setnumTokensToExchangeForMarketing(uint256 _numTokensToExchangeForMarketing) public onlyOwner() { numTokensToExchangeForMarketing = _numTokensToExchangeForMarketing; } function _setMarketingWallet(address payable wallet) external onlyOwner() { marketingWallet = wallet; } function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndSendEnabledUpdated","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":"SwapAndSendEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee4Sellers","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 payable","name":"wallet","type":"address"}],"name":"_setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","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":[],"name":"defaultMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"feesOnSellersAndBuyers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensToExchangeForMarketing","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":"marketingFee","type":"uint256"}],"name":"setDefaultMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnSellersAndBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee4Sellers","type":"uint256"}],"name":"setMarketingFee4Sellers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensToExchangeForMarketing","type":"uint256"}],"name":"setnumTokensToExchangeForMarketing","outputs":[],"stateMutability":"nonpayable","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
60c060405260095f60146101000a81548160ff021916908360ff1602179055506040518060400160405280600c81526020017f446565702054686f75676874000000000000000000000000000000000000000081525060019081620000659190620008f7565b506040518060400160405280600281526020017f343200000000000000000000000000000000000000000000000000000000000081525060029081620000ac9190620008f7565b505f60149054906101000a900460ff1660ff16600a620000cd919062000b58565b633b9aca00620000de919062000ba8565b6003555f600455600454600555600554600655600f6007556007546008556008546009556019600a556001600b5f6101000a81548160ff0219169083151502179055506200014e60646200013f60016003546200064e60201b90919060201c565b6200064e60201b90919060201c565b600c556200017e60646200016f60646003546200064e60201b90919060201c565b6200064e60201b90919060201c565b600d5573e2d8011e35b29d21b343ecc6b72643f92bc2e136600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003545f19620001e6919062000c1f565b5f19620001f4919062000c56565b6016556001601760016101000a81548160ff0219169083151502179055503480156200021e575f80fd5b506200022f6200066560201b60201c565b5f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3601654600f5f620002fc6200066560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200039b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003c1919062000cf5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000427573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200044d919062000cf5565b6040518363ffffffff1660e01b81526004016200046c92919062000d36565b6020604051808303815f875af115801562000489573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004af919062000cf5565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160125f6200052b6200066c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620005df6200066560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6003546040516200063f919062000d72565b60405180910390a35062000dc4565b5f81836200065d919062000d8d565b905092915050565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200070f57607f821691505b602082108103620007255762000724620006ca565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620007897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200074c565b6200079586836200074c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620007df620007d9620007d384620007ad565b620007b6565b620007ad565b9050919050565b5f819050919050565b620007fa83620007bf565b620008126200080982620007e6565b84845462000758565b825550505050565b5f90565b620008286200081a565b62000835818484620007ef565b505050565b5b818110156200085c57620008505f826200081e565b6001810190506200083b565b5050565b601f821115620008ab5762000875816200072b565b62000880846200073d565b8101602085101562000890578190505b620008a86200089f856200073d565b8301826200083a565b50505b505050565b5f82821c905092915050565b5f620008cd5f1984600802620008b0565b1980831691505092915050565b5f620008e78383620008bc565b9150826002028217905092915050565b620009028262000693565b67ffffffffffffffff8111156200091e576200091d6200069d565b5b6200092a8254620006f7565b6200093782828562000860565b5f60209050601f8311600181146200096d575f841562000958578287015190505b620009648582620008da565b865550620009d3565b601f1984166200097d866200072b565b5f5b82811015620009a6578489015182556001820191506020850194506020810190506200097f565b86831015620009c65784890151620009c2601f891682620008bc565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000a655780860481111562000a3d5762000a3c620009db565b5b600185161562000a4d5780820291505b808102905062000a5d8562000a08565b945062000a1d565b94509492505050565b5f8262000a7f576001905062000b51565b8162000a8e575f905062000b51565b816001811462000aa7576002811462000ab25762000ae8565b600191505062000b51565b60ff84111562000ac75762000ac6620009db565b5b8360020a91508482111562000ae15762000ae0620009db565b5b5062000b51565b5060208310610133831016604e8410600b841016171562000b225782820a90508381111562000b1c5762000b1b620009db565b5b62000b51565b62000b31848484600162000a14565b9250905081840481111562000b4b5762000b4a620009db565b5b81810290505b9392505050565b5f62000b6482620007ad565b915062000b7183620007ad565b925062000ba07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a6e565b905092915050565b5f62000bb482620007ad565b915062000bc183620007ad565b925082820262000bd181620007ad565b9150828204841483151762000beb5762000bea620009db565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000c2b82620007ad565b915062000c3883620007ad565b92508262000c4b5762000c4a62000bf2565b5b828206905092915050565b5f62000c6282620007ad565b915062000c6f83620007ad565b925082820390508181111562000c8a5762000c89620009db565b5b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000cbf8262000c94565b9050919050565b62000cd18162000cb3565b811462000cdc575f80fd5b50565b5f8151905062000cef8162000cc6565b92915050565b5f6020828403121562000d0d5762000d0c62000c90565b5b5f62000d1c8482850162000cdf565b91505092915050565b62000d308162000cb3565b82525050565b5f60408201905062000d4b5f83018562000d25565b62000d5a602083018462000d25565b9392505050565b62000d6c81620007ad565b82525050565b5f60208201905062000d875f83018462000d61565b92915050565b5f62000d9982620007ad565b915062000da683620007ad565b92508262000db95762000db862000bf2565b5b828204905092915050565b60805160a051614a3162000e095f395f8181611353015281816123d4015261290e01525f8181610a95015281816126d8015281816127b701526127de0152614a315ff3fe608060405260043610610254575f3560e01c806370a0823111610138578063a3864430116100b5578063cba851b311610079578063cba851b3146108d7578063d54994db14610901578063dab522a814610929578063dd62ed3e14610951578063ea2f0b371461098d578063f2fde38b146109b55761025b565b8063a3864430146107e1578063a457c2d71461080b578063a9059cbb14610847578063bc951f9814610883578063c537bd8f146108ad5761025b565b80638da5cb5b116100fc5780638da5cb5b1461071157806395d89b411461073b5780639f64621414610765578063a062e3ba1461078f578063a08f6760146107b95761025b565b806370a082311461062f578063715018a61461066b57806375f0a874146106815780637d1db4a5146106ab57806388f82020146106d55761025b565b80632d838119116101d1578063437823ec11610195578063437823ec146105155780634549b0391461053d57806349bd5a5e1461057957806352390c02146105a35780635342acb4146105cb57806357e0a1d0146106075761025b565b80632d83811914610421578063313ce5671461045d5780633685d4191461048757806339509351146104af5780633b124fe7146104eb5761025b565b80631bbae6e0116102185780631bbae6e0146103435780631ff53b601461036b57806322976e0d1461039357806323b872dd146103bd5780632663236f146103f95761025b565b806306fdde031461025f578063095ea7b31461028957806313114a9d146102c55780631694505e146102ef57806318160ddd146103195761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b506102736109dd565b6040516102809190613c4b565b60405180910390f35b348015610294575f80fd5b506102af60048036038101906102aa9190613cfc565b610a6d565b6040516102bc9190613d54565b60405180910390f35b3480156102d0575f80fd5b506102d9610a8a565b6040516102e69190613d7c565b60405180910390f35b3480156102fa575f80fd5b50610303610a93565b6040516103109190613df0565b60405180910390f35b348015610324575f80fd5b5061032d610ab7565b60405161033a9190613d7c565b60405180910390f35b34801561034e575f80fd5b5061036960048036038101906103649190613e09565b610ac0565b005b348015610376575f80fd5b50610391600480360381019061038c9190613e6f565b610b46565b005b34801561039e575f80fd5b506103a7610c05565b6040516103b49190613d7c565b60405180910390f35b3480156103c8575f80fd5b506103e360048036038101906103de9190613e9a565b610c0b565b6040516103f09190613d54565b60405180910390f35b348015610404575f80fd5b5061041f600480360381019061041a9190613f14565b610cdf565b005b34801561042c575f80fd5b5061044760048036038101906104429190613e09565b610daf565b6040516104549190613d7c565b60405180910390f35b348015610468575f80fd5b50610471610e1b565b60405161047e9190613f5a565b60405180910390f35b348015610492575f80fd5b506104ad60048036038101906104a89190613f73565b610e30565b005b3480156104ba575f80fd5b506104d560048036038101906104d09190613cfc565b611148565b6040516104e29190613d54565b60405180910390f35b3480156104f6575f80fd5b506104ff6111f6565b60405161050c9190613d7c565b60405180910390f35b348015610520575f80fd5b5061053b60048036038101906105369190613f73565b6111fc565b005b348015610548575f80fd5b50610563600480360381019061055e9190613f9e565b6112d0565b6040516105709190613d7c565b60405180910390f35b348015610584575f80fd5b5061058d611351565b60405161059a9190613feb565b60405180910390f35b3480156105ae575f80fd5b506105c960048036038101906105c49190613f73565b611375565b005b3480156105d6575f80fd5b506105f160048036038101906105ec9190613f73565b611600565b6040516105fe9190613d54565b60405180910390f35b348015610612575f80fd5b5061062d60048036038101906106289190613f14565b611652565b005b34801561063a575f80fd5b5061065560048036038101906106509190613f73565b6116ea565b6040516106629190613d7c565b60405180910390f35b348015610676575f80fd5b5061067f6117cd565b005b34801561068c575f80fd5b50610695611903565b6040516106a29190614013565b60405180910390f35b3480156106b6575f80fd5b506106bf611928565b6040516106cc9190613d7c565b60405180910390f35b3480156106e0575f80fd5b506106fb60048036038101906106f69190613f73565b61192e565b6040516107089190613d54565b60405180910390f35b34801561071c575f80fd5b50610725611980565b6040516107329190613feb565b60405180910390f35b348015610746575f80fd5b5061074f6119a7565b60405161075c9190613c4b565b60405180910390f35b348015610770575f80fd5b50610779611a37565b6040516107869190613d7c565b60405180910390f35b34801561079a575f80fd5b506107a3611a3d565b6040516107b09190613d54565b60405180910390f35b3480156107c4575f80fd5b506107df60048036038101906107da9190613e09565b611a50565b005b3480156107ec575f80fd5b506107f5611ad6565b6040516108029190613d7c565b60405180910390f35b348015610816575f80fd5b50610831600480360381019061082c9190613cfc565b611adc565b60405161083e9190613d54565b60405180910390f35b348015610852575f80fd5b5061086d60048036038101906108689190613cfc565b611ba4565b60405161087a9190613d54565b60405180910390f35b34801561088e575f80fd5b50610897611bc1565b6040516108a49190613d7c565b60405180910390f35b3480156108b8575f80fd5b506108c1611bc7565b6040516108ce9190613d54565b60405180910390f35b3480156108e2575f80fd5b506108eb611bd9565b6040516108f89190613d7c565b60405180910390f35b34801561090c575f80fd5b5061092760048036038101906109229190613e09565b611bdf565b005b348015610934575f80fd5b5061094f600480360381019061094a9190613e09565b611c65565b005b34801561095c575f80fd5b506109776004803603810190610972919061402c565b611ceb565b6040516109849190613d7c565b60405180910390f35b348015610998575f80fd5b506109b360048036038101906109ae9190613f73565b611d6d565b005b3480156109c0575f80fd5b506109db60048036038101906109d69190613f73565b611e40565b005b6060600180546109ec90614097565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1890614097565b8015610a635780601f10610a3a57610100808354040283529160200191610a63565b820191905f5260205f20905b815481529060010190602001808311610a4657829003601f168201915b5050505050905090565b5f610a80610a79611fe5565b8484611fec565b6001905092915050565b5f601554905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600354905090565b610ac8611fe5565b73ffffffffffffffffffffffffffffffffffffffff16610ae6611980565b73ffffffffffffffffffffffffffffffffffffffff1614610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3390614111565b60405180910390fd5b80600c8190555050565b610b4e611fe5565b73ffffffffffffffffffffffffffffffffffffffff16610b6c611980565b73ffffffffffffffffffffffffffffffffffffffff1614610bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb990614111565b60405180910390fd5b80600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b5f610c178484846121af565b610cd484610c23611fe5565b610ccf856040518060600160405280602881526020016149af6028913960115f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610c86611fe5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125259092919063ffffffff16565b611fec565b600190509392505050565b610ce7611fe5565b73ffffffffffffffffffffffffffffffffffffffff16610d05611980565b73ffffffffffffffffffffffffffffffffffffffff1614610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290614111565b60405180910390fd5b80601760016101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610da49190613d54565b60405180910390a150565b5f601654821115610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec9061419f565b60405180910390fd5b5f610dfe612579565b9050610e1381846125a290919063ffffffff16565b915050919050565b5f8060149054906101000a900460ff16905090565b610e38611fe5565b73ffffffffffffffffffffffffffffffffffffffff16610e56611980565b73ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390614111565b60405180910390fd5b60135f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c90614207565b60405180910390fd5b5f5b601480549050811015611144578173ffffffffffffffffffffffffffffffffffffffff1660148281548110610f6f57610f6e614225565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036111375760146001601480549050610fc6919061427f565b81548110610fd757610fd6614225565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166014828154811061101357611012614225565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506014805480611100576110ff6142b2565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611144565b8080600101915050610f37565b5050565b5f6111ec611154611fe5565b846111e78560115f611164611fe5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b611fec565b6001905092915050565b60055481565b611204611fe5565b73ffffffffffffffffffffffffffffffffffffffff16611222611980565b73ffffffffffffffffffffffffffffffffffffffff1614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90614111565b60405180910390fd5b600160125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600354831115611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d90614329565b60405180910390fd5b81611335575f611325846125cc565b505050505090508091505061134b565b5f61133f846125cc565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61137d611fe5565b73ffffffffffffffffffffffffffffffffffffffff1661139b611980565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890614111565b60405180910390fd5b60135f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290614207565b60405180910390fd5b5f600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054111561154857611506600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610daf565b60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550601481908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61165a611fe5565b73ffffffffffffffffffffffffffffffffffffffff16611678611980565b73ffffffffffffffffffffffffffffffffffffffff16146116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590614111565b60405180910390fd5b80600b5f6101000a81548160ff02191690831515021790555050565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561177f5760105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506117c8565b6117c5600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610daf565b90505b919050565b6117d5611fe5565b73ffffffffffffffffffffffffffffffffffffffff166117f3611980565b73ffffffffffffffffffffffffffffffffffffffff1614611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184090614111565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546119b690614097565b80601f01602080910402602001604051908101604052809291908181526020018280546119e290614097565b8015611a2d5780601f10611a0457610100808354040283529160200191611a2d565b820191905f5260205f20905b815481529060010190602001808311611a1057829003601f168201915b5050505050905090565b60075481565b601760019054906101000a900460ff1681565b611a58611fe5565b73ffffffffffffffffffffffffffffffffffffffff16611a76611980565b73ffffffffffffffffffffffffffffffffffffffff1614611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390614111565b60405180910390fd5b80600a8190555050565b600d5481565b5f611b9a611ae8611fe5565b84611b95856040518060600160405280602581526020016149d76025913960115f611b11611fe5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125259092919063ffffffff16565b611fec565b6001905092915050565b5f611bb7611bb0611fe5565b84846121af565b6001905092915050565b600a5481565b600b5f9054906101000a900460ff1681565b60045481565b611be7611fe5565b73ffffffffffffffffffffffffffffffffffffffff16611c05611980565b73ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290614111565b60405180910390fd5b8060078190555050565b611c6d611fe5565b73ffffffffffffffffffffffffffffffffffffffff16611c8b611980565b73ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890614111565b60405180910390fd5b80600d8190555050565b5f60115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611d75611fe5565b73ffffffffffffffffffffffffffffffffffffffff16611d93611980565b73ffffffffffffffffffffffffffffffffffffffff1614611de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de090614111565b60405180910390fd5b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b611e48611fe5565b73ffffffffffffffffffffffffffffffffffffffff16611e66611980565b73ffffffffffffffffffffffffffffffffffffffff1614611ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb390614111565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f21906143b7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361205a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205190614445565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf906144d3565b60405180910390fd5b8060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121a29190613d7c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361221d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221490614561565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612282906145ef565b60405180910390fd5b5f81116122cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c49061467d565b60405180910390fd5b6122d5611980565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123435750612313611980565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561238e57600c5481111561238d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123849061470b565b60405180910390fd5b5b5f612398306116ea565b90505f600d548210159050600c5482106123b257600c5491505b8080156123cb575060175f9054906101000a900460ff16155b801561242357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561243b5750601760019054906101000a900460ff165b1561244a5761244982612621565b5b600b5f9054906101000a900460ff161561246857612467846128fa565b5b5f6001905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612508575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612511575f90505b61251d8686868461296c565b505050505050565b5f83831115829061256c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125639190613c4b565b60405180910390fd5b5082840390509392505050565b5f805f612584612c65565b9150915061259b81836125a290919063ffffffff16565b9250505090565b5f81836125af9190614756565b905092915050565b5f81836125c49190614786565b905092915050565b5f805f805f805f805f6125de8a612efa565b9250925092505f805f6125fa8d86866125f5612579565b612f50565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600160175f6101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115612657576126566147b9565b5b6040519080825280602002602001820160405280156126855781602001602082028036833780820191505090505b50905030815f8151811061269c5761269b614225565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561273f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276391906147fa565b8160018151811061277757612776614225565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506127dc307f000000000000000000000000000000000000000000000000000000000000000084611fec565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161283d959493929190614915565b5f604051808303815f87803b158015612854575f80fd5b505af1158015612866573d5f803e3d5ffd5b505050505f4790505f8111156128dc57600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156128da573d5f803e3d5ffd5b505b50505f60175f6101000a81548160ff02191690831515021790555050565b6004546005819055506007546008819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361296957600a546008819055505b50565b8061297a57612979612fd4565b5b60135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a17575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a2c57612a2784848461300d565b612c51565b60135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612ac9575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612ade57612ad984848461325e565b612c50565b60135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612b7c575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b9157612b8c8484846134af565b612c4f565b60135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c2d575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612c4257612c3d84848461366f565b612c4e565b612c4d8484846134af565b5b5b5b5b80612c5f57612c5e613951565b5b50505050565b5f805f60165490505f60035490505f5b601480549050811015612ebd5782600f5f60148481548110612c9a57612c99614225565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541180612d7f57508160105f60148481548110612d1b57612d1a614225565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b15612d965760165460035494509450505050612ef6565b612e21600f5f60148481548110612db057612daf614225565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548461396590919063ffffffff16565b9250612eae60105f60148481548110612e3d57612e3c614225565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548361396590919063ffffffff16565b91508080600101915050612c75565b50612ed56003546016546125a290919063ffffffff16565b821015612eed57601654600354935093505050612ef6565b81819350935050505b9091565b5f805f80612f078561397a565b90505f612f13866139aa565b90505f612f3b82612f2d858a61396590919063ffffffff16565b61396590919063ffffffff16565b90508083839550955095505050509193909250565b5f805f80612f6785896139da90919063ffffffff16565b90505f612f7d86896139da90919063ffffffff16565b90505f612f9387896139da90919063ffffffff16565b90505f612fbb82612fad858761396590919063ffffffff16565b61396590919063ffffffff16565b9050838184965096509650505050509450945094915050565b5f600554148015612fe657505f600854145b61300b576005546006819055506008546009819055505f6005819055505f6008819055505b565b5f805f805f8061301c876125cc565b9550955095509550955095506130788760105f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461396590919063ffffffff16565b60105f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061310986600f5f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461396590919063ffffffff16565b600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061319a85600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b600f5f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506131e4816139ef565b6131ee8483613b87565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161324b9190613d7c565b60405180910390a3505050505050505050565b5f805f805f8061326d876125cc565b9550955095509550955095506132c986600f5f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461396590919063ffffffff16565b600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061335a8360105f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b60105f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506133eb85600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b600f5f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613435816139ef565b61343f8483613b87565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161349c9190613d7c565b60405180910390a3505050505050505050565b5f805f805f806134be876125cc565b95509550955095509550955061351a86600f5f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461396590919063ffffffff16565b600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506135ab85600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b600f5f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506135f5816139ef565b6135ff8483613b87565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161365c9190613d7c565b60405180910390a3505050505050505050565b5f805f805f8061367e876125cc565b9550955095509550955095506136da8760105f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461396590919063ffffffff16565b60105f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061376b86600f5f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461396590919063ffffffff16565b600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506137fc8360105f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b60105f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061388d85600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b600f5f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506138d7816139ef565b6138e18483613b87565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161393e9190613d7c565b60405180910390a3505050505050505050565b600654600581905550600954600881905550565b5f8183613972919061427f565b905092915050565b5f6139a36064613995600554856139da90919063ffffffff16565b6125a290919063ffffffff16565b9050919050565b5f6139d360646139c5600854856139da90919063ffffffff16565b6125a290919063ffffffff16565b9050919050565b5f81836139e7919061496d565b905092915050565b5f6139f8612579565b90505f613a0e82846139da90919063ffffffff16565b9050613a6081600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060135f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613b8257613b408360105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b60105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b505050565b613b9c8260165461396590919063ffffffff16565b601681905550613bb7816015546125b790919063ffffffff16565b6015819055505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613bf8578082015181840152602081019050613bdd565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613c1d82613bc1565b613c278185613bcb565b9350613c37818560208601613bdb565b613c4081613c03565b840191505092915050565b5f6020820190508181035f830152613c638184613c13565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613c9882613c6f565b9050919050565b613ca881613c8e565b8114613cb2575f80fd5b50565b5f81359050613cc381613c9f565b92915050565b5f819050919050565b613cdb81613cc9565b8114613ce5575f80fd5b50565b5f81359050613cf681613cd2565b92915050565b5f8060408385031215613d1257613d11613c6b565b5b5f613d1f85828601613cb5565b9250506020613d3085828601613ce8565b9150509250929050565b5f8115159050919050565b613d4e81613d3a565b82525050565b5f602082019050613d675f830184613d45565b92915050565b613d7681613cc9565b82525050565b5f602082019050613d8f5f830184613d6d565b92915050565b5f819050919050565b5f613db8613db3613dae84613c6f565b613d95565b613c6f565b9050919050565b5f613dc982613d9e565b9050919050565b5f613dda82613dbf565b9050919050565b613dea81613dd0565b82525050565b5f602082019050613e035f830184613de1565b92915050565b5f60208284031215613e1e57613e1d613c6b565b5b5f613e2b84828501613ce8565b91505092915050565b5f613e3e82613c6f565b9050919050565b613e4e81613e34565b8114613e58575f80fd5b50565b5f81359050613e6981613e45565b92915050565b5f60208284031215613e8457613e83613c6b565b5b5f613e9184828501613e5b565b91505092915050565b5f805f60608486031215613eb157613eb0613c6b565b5b5f613ebe86828701613cb5565b9350506020613ecf86828701613cb5565b9250506040613ee086828701613ce8565b9150509250925092565b613ef381613d3a565b8114613efd575f80fd5b50565b5f81359050613f0e81613eea565b92915050565b5f60208284031215613f2957613f28613c6b565b5b5f613f3684828501613f00565b91505092915050565b5f60ff82169050919050565b613f5481613f3f565b82525050565b5f602082019050613f6d5f830184613f4b565b92915050565b5f60208284031215613f8857613f87613c6b565b5b5f613f9584828501613cb5565b91505092915050565b5f8060408385031215613fb457613fb3613c6b565b5b5f613fc185828601613ce8565b9250506020613fd285828601613f00565b9150509250929050565b613fe581613c8e565b82525050565b5f602082019050613ffe5f830184613fdc565b92915050565b61400d81613e34565b82525050565b5f6020820190506140265f830184614004565b92915050565b5f806040838503121561404257614041613c6b565b5b5f61404f85828601613cb5565b925050602061406085828601613cb5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806140ae57607f821691505b6020821081036140c1576140c061406a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6140fb602083613bcb565b9150614106826140c7565b602082019050919050565b5f6020820190508181035f830152614128816140ef565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f614189602a83613bcb565b91506141948261412f565b604082019050919050565b5f6020820190508181035f8301526141b68161417d565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c7564656400000000005f82015250565b5f6141f1601b83613bcb565b91506141fc826141bd565b602082019050919050565b5f6020820190508181035f83015261421e816141e5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61428982613cc9565b915061429483613cc9565b92508282039050818111156142ac576142ab614252565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f614313601f83613bcb565b915061431e826142df565b602082019050919050565b5f6020820190508181035f83015261434081614307565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6143a1602683613bcb565b91506143ac82614347565b604082019050919050565b5f6020820190508181035f8301526143ce81614395565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61442f602483613bcb565b915061443a826143d5565b604082019050919050565b5f6020820190508181035f83015261445c81614423565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144bd602283613bcb565b91506144c882614463565b604082019050919050565b5f6020820190508181035f8301526144ea816144b1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61454b602583613bcb565b9150614556826144f1565b604082019050919050565b5f6020820190508181035f8301526145788161453f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6145d9602383613bcb565b91506145e48261457f565b604082019050919050565b5f6020820190508181035f830152614606816145cd565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f614667602983613bcb565b91506146728261460d565b604082019050919050565b5f6020820190508181035f8301526146948161465b565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f6146f5602883613bcb565b91506147008261469b565b604082019050919050565b5f6020820190508181035f830152614722816146e9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61476082613cc9565b915061476b83613cc9565b92508261477b5761477a614729565b5b828204905092915050565b5f61479082613cc9565b915061479b83613cc9565b92508282019050808211156147b3576147b2614252565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506147f481613c9f565b92915050565b5f6020828403121561480f5761480e613c6b565b5b5f61481c848285016147e6565b91505092915050565b5f819050919050565b5f61484861484361483e84614825565b613d95565b613cc9565b9050919050565b6148588161482e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61489081613c8e565b82525050565b5f6148a18383614887565b60208301905092915050565b5f602082019050919050565b5f6148c38261485e565b6148cd8185614868565b93506148d883614878565b805f5b838110156149085781516148ef8882614896565b97506148fa836148ad565b9250506001810190506148db565b5085935050505092915050565b5f60a0820190506149285f830188613d6d565b614935602083018761484f565b818103604083015261494781866148b9565b90506149566060830185613fdc565b6149636080830184613d6d565b9695505050505050565b5f61497782613cc9565b915061498283613cc9565b925082820261499081613cc9565b915082820484148315176149a7576149a6614252565b5b509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200bae8bc5265c761a53935645b4eb8ad0fae4c75716f1de57c5782f0176a553ad64736f6c63430008160033
Deployed Bytecode
0x608060405260043610610254575f3560e01c806370a0823111610138578063a3864430116100b5578063cba851b311610079578063cba851b3146108d7578063d54994db14610901578063dab522a814610929578063dd62ed3e14610951578063ea2f0b371461098d578063f2fde38b146109b55761025b565b8063a3864430146107e1578063a457c2d71461080b578063a9059cbb14610847578063bc951f9814610883578063c537bd8f146108ad5761025b565b80638da5cb5b116100fc5780638da5cb5b1461071157806395d89b411461073b5780639f64621414610765578063a062e3ba1461078f578063a08f6760146107b95761025b565b806370a082311461062f578063715018a61461066b57806375f0a874146106815780637d1db4a5146106ab57806388f82020146106d55761025b565b80632d838119116101d1578063437823ec11610195578063437823ec146105155780634549b0391461053d57806349bd5a5e1461057957806352390c02146105a35780635342acb4146105cb57806357e0a1d0146106075761025b565b80632d83811914610421578063313ce5671461045d5780633685d4191461048757806339509351146104af5780633b124fe7146104eb5761025b565b80631bbae6e0116102185780631bbae6e0146103435780631ff53b601461036b57806322976e0d1461039357806323b872dd146103bd5780632663236f146103f95761025b565b806306fdde031461025f578063095ea7b31461028957806313114a9d146102c55780631694505e146102ef57806318160ddd146103195761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b506102736109dd565b6040516102809190613c4b565b60405180910390f35b348015610294575f80fd5b506102af60048036038101906102aa9190613cfc565b610a6d565b6040516102bc9190613d54565b60405180910390f35b3480156102d0575f80fd5b506102d9610a8a565b6040516102e69190613d7c565b60405180910390f35b3480156102fa575f80fd5b50610303610a93565b6040516103109190613df0565b60405180910390f35b348015610324575f80fd5b5061032d610ab7565b60405161033a9190613d7c565b60405180910390f35b34801561034e575f80fd5b5061036960048036038101906103649190613e09565b610ac0565b005b348015610376575f80fd5b50610391600480360381019061038c9190613e6f565b610b46565b005b34801561039e575f80fd5b506103a7610c05565b6040516103b49190613d7c565b60405180910390f35b3480156103c8575f80fd5b506103e360048036038101906103de9190613e9a565b610c0b565b6040516103f09190613d54565b60405180910390f35b348015610404575f80fd5b5061041f600480360381019061041a9190613f14565b610cdf565b005b34801561042c575f80fd5b5061044760048036038101906104429190613e09565b610daf565b6040516104549190613d7c565b60405180910390f35b348015610468575f80fd5b50610471610e1b565b60405161047e9190613f5a565b60405180910390f35b348015610492575f80fd5b506104ad60048036038101906104a89190613f73565b610e30565b005b3480156104ba575f80fd5b506104d560048036038101906104d09190613cfc565b611148565b6040516104e29190613d54565b60405180910390f35b3480156104f6575f80fd5b506104ff6111f6565b60405161050c9190613d7c565b60405180910390f35b348015610520575f80fd5b5061053b60048036038101906105369190613f73565b6111fc565b005b348015610548575f80fd5b50610563600480360381019061055e9190613f9e565b6112d0565b6040516105709190613d7c565b60405180910390f35b348015610584575f80fd5b5061058d611351565b60405161059a9190613feb565b60405180910390f35b3480156105ae575f80fd5b506105c960048036038101906105c49190613f73565b611375565b005b3480156105d6575f80fd5b506105f160048036038101906105ec9190613f73565b611600565b6040516105fe9190613d54565b60405180910390f35b348015610612575f80fd5b5061062d60048036038101906106289190613f14565b611652565b005b34801561063a575f80fd5b5061065560048036038101906106509190613f73565b6116ea565b6040516106629190613d7c565b60405180910390f35b348015610676575f80fd5b5061067f6117cd565b005b34801561068c575f80fd5b50610695611903565b6040516106a29190614013565b60405180910390f35b3480156106b6575f80fd5b506106bf611928565b6040516106cc9190613d7c565b60405180910390f35b3480156106e0575f80fd5b506106fb60048036038101906106f69190613f73565b61192e565b6040516107089190613d54565b60405180910390f35b34801561071c575f80fd5b50610725611980565b6040516107329190613feb565b60405180910390f35b348015610746575f80fd5b5061074f6119a7565b60405161075c9190613c4b565b60405180910390f35b348015610770575f80fd5b50610779611a37565b6040516107869190613d7c565b60405180910390f35b34801561079a575f80fd5b506107a3611a3d565b6040516107b09190613d54565b60405180910390f35b3480156107c4575f80fd5b506107df60048036038101906107da9190613e09565b611a50565b005b3480156107ec575f80fd5b506107f5611ad6565b6040516108029190613d7c565b60405180910390f35b348015610816575f80fd5b50610831600480360381019061082c9190613cfc565b611adc565b60405161083e9190613d54565b60405180910390f35b348015610852575f80fd5b5061086d60048036038101906108689190613cfc565b611ba4565b60405161087a9190613d54565b60405180910390f35b34801561088e575f80fd5b50610897611bc1565b6040516108a49190613d7c565b60405180910390f35b3480156108b8575f80fd5b506108c1611bc7565b6040516108ce9190613d54565b60405180910390f35b3480156108e2575f80fd5b506108eb611bd9565b6040516108f89190613d7c565b60405180910390f35b34801561090c575f80fd5b5061092760048036038101906109229190613e09565b611bdf565b005b348015610934575f80fd5b5061094f600480360381019061094a9190613e09565b611c65565b005b34801561095c575f80fd5b506109776004803603810190610972919061402c565b611ceb565b6040516109849190613d7c565b60405180910390f35b348015610998575f80fd5b506109b360048036038101906109ae9190613f73565b611d6d565b005b3480156109c0575f80fd5b506109db60048036038101906109d69190613f73565b611e40565b005b6060600180546109ec90614097565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1890614097565b8015610a635780601f10610a3a57610100808354040283529160200191610a63565b820191905f5260205f20905b815481529060010190602001808311610a4657829003601f168201915b5050505050905090565b5f610a80610a79611fe5565b8484611fec565b6001905092915050565b5f601554905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600354905090565b610ac8611fe5565b73ffffffffffffffffffffffffffffffffffffffff16610ae6611980565b73ffffffffffffffffffffffffffffffffffffffff1614610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3390614111565b60405180910390fd5b80600c8190555050565b610b4e611fe5565b73ffffffffffffffffffffffffffffffffffffffff16610b6c611980565b73ffffffffffffffffffffffffffffffffffffffff1614610bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb990614111565b60405180910390fd5b80600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b5f610c178484846121af565b610cd484610c23611fe5565b610ccf856040518060600160405280602881526020016149af6028913960115f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610c86611fe5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125259092919063ffffffff16565b611fec565b600190509392505050565b610ce7611fe5565b73ffffffffffffffffffffffffffffffffffffffff16610d05611980565b73ffffffffffffffffffffffffffffffffffffffff1614610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290614111565b60405180910390fd5b80601760016101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610da49190613d54565b60405180910390a150565b5f601654821115610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec9061419f565b60405180910390fd5b5f610dfe612579565b9050610e1381846125a290919063ffffffff16565b915050919050565b5f8060149054906101000a900460ff16905090565b610e38611fe5565b73ffffffffffffffffffffffffffffffffffffffff16610e56611980565b73ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390614111565b60405180910390fd5b60135f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c90614207565b60405180910390fd5b5f5b601480549050811015611144578173ffffffffffffffffffffffffffffffffffffffff1660148281548110610f6f57610f6e614225565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036111375760146001601480549050610fc6919061427f565b81548110610fd757610fd6614225565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166014828154811061101357611012614225565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506014805480611100576110ff6142b2565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611144565b8080600101915050610f37565b5050565b5f6111ec611154611fe5565b846111e78560115f611164611fe5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b611fec565b6001905092915050565b60055481565b611204611fe5565b73ffffffffffffffffffffffffffffffffffffffff16611222611980565b73ffffffffffffffffffffffffffffffffffffffff1614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90614111565b60405180910390fd5b600160125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600354831115611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d90614329565b60405180910390fd5b81611335575f611325846125cc565b505050505090508091505061134b565b5f61133f846125cc565b50505050915050809150505b92915050565b7f0000000000000000000000007597f39eafdeb62c4fb1c1f53333cce3b432751881565b61137d611fe5565b73ffffffffffffffffffffffffffffffffffffffff1661139b611980565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890614111565b60405180910390fd5b60135f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290614207565b60405180910390fd5b5f600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054111561154857611506600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610daf565b60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550601481908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61165a611fe5565b73ffffffffffffffffffffffffffffffffffffffff16611678611980565b73ffffffffffffffffffffffffffffffffffffffff16146116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590614111565b60405180910390fd5b80600b5f6101000a81548160ff02191690831515021790555050565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561177f5760105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506117c8565b6117c5600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610daf565b90505b919050565b6117d5611fe5565b73ffffffffffffffffffffffffffffffffffffffff166117f3611980565b73ffffffffffffffffffffffffffffffffffffffff1614611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184090614111565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546119b690614097565b80601f01602080910402602001604051908101604052809291908181526020018280546119e290614097565b8015611a2d5780601f10611a0457610100808354040283529160200191611a2d565b820191905f5260205f20905b815481529060010190602001808311611a1057829003601f168201915b5050505050905090565b60075481565b601760019054906101000a900460ff1681565b611a58611fe5565b73ffffffffffffffffffffffffffffffffffffffff16611a76611980565b73ffffffffffffffffffffffffffffffffffffffff1614611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390614111565b60405180910390fd5b80600a8190555050565b600d5481565b5f611b9a611ae8611fe5565b84611b95856040518060600160405280602581526020016149d76025913960115f611b11611fe5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125259092919063ffffffff16565b611fec565b6001905092915050565b5f611bb7611bb0611fe5565b84846121af565b6001905092915050565b600a5481565b600b5f9054906101000a900460ff1681565b60045481565b611be7611fe5565b73ffffffffffffffffffffffffffffffffffffffff16611c05611980565b73ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290614111565b60405180910390fd5b8060078190555050565b611c6d611fe5565b73ffffffffffffffffffffffffffffffffffffffff16611c8b611980565b73ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890614111565b60405180910390fd5b80600d8190555050565b5f60115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611d75611fe5565b73ffffffffffffffffffffffffffffffffffffffff16611d93611980565b73ffffffffffffffffffffffffffffffffffffffff1614611de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de090614111565b60405180910390fd5b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b611e48611fe5565b73ffffffffffffffffffffffffffffffffffffffff16611e66611980565b73ffffffffffffffffffffffffffffffffffffffff1614611ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb390614111565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f21906143b7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361205a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205190614445565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf906144d3565b60405180910390fd5b8060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121a29190613d7c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361221d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221490614561565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612282906145ef565b60405180910390fd5b5f81116122cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c49061467d565b60405180910390fd5b6122d5611980565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123435750612313611980565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561238e57600c5481111561238d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123849061470b565b60405180910390fd5b5b5f612398306116ea565b90505f600d548210159050600c5482106123b257600c5491505b8080156123cb575060175f9054906101000a900460ff16155b801561242357507f0000000000000000000000007597f39eafdeb62c4fb1c1f53333cce3b432751873ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561243b5750601760019054906101000a900460ff165b1561244a5761244982612621565b5b600b5f9054906101000a900460ff161561246857612467846128fa565b5b5f6001905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612508575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612511575f90505b61251d8686868461296c565b505050505050565b5f83831115829061256c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125639190613c4b565b60405180910390fd5b5082840390509392505050565b5f805f612584612c65565b9150915061259b81836125a290919063ffffffff16565b9250505090565b5f81836125af9190614756565b905092915050565b5f81836125c49190614786565b905092915050565b5f805f805f805f805f6125de8a612efa565b9250925092505f805f6125fa8d86866125f5612579565b612f50565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600160175f6101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115612657576126566147b9565b5b6040519080825280602002602001820160405280156126855781602001602082028036833780820191505090505b50905030815f8151811061269c5761269b614225565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561273f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276391906147fa565b8160018151811061277757612776614225565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506127dc307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611fec565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161283d959493929190614915565b5f604051808303815f87803b158015612854575f80fd5b505af1158015612866573d5f803e3d5ffd5b505050505f4790505f8111156128dc57600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156128da573d5f803e3d5ffd5b505b50505f60175f6101000a81548160ff02191690831515021790555050565b6004546005819055506007546008819055507f0000000000000000000000007597f39eafdeb62c4fb1c1f53333cce3b432751873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361296957600a546008819055505b50565b8061297a57612979612fd4565b5b60135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a17575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a2c57612a2784848461300d565b612c51565b60135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612ac9575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612ade57612ad984848461325e565b612c50565b60135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612b7c575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b9157612b8c8484846134af565b612c4f565b60135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c2d575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612c4257612c3d84848461366f565b612c4e565b612c4d8484846134af565b5b5b5b5b80612c5f57612c5e613951565b5b50505050565b5f805f60165490505f60035490505f5b601480549050811015612ebd5782600f5f60148481548110612c9a57612c99614225565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541180612d7f57508160105f60148481548110612d1b57612d1a614225565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b15612d965760165460035494509450505050612ef6565b612e21600f5f60148481548110612db057612daf614225565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548461396590919063ffffffff16565b9250612eae60105f60148481548110612e3d57612e3c614225565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548361396590919063ffffffff16565b91508080600101915050612c75565b50612ed56003546016546125a290919063ffffffff16565b821015612eed57601654600354935093505050612ef6565b81819350935050505b9091565b5f805f80612f078561397a565b90505f612f13866139aa565b90505f612f3b82612f2d858a61396590919063ffffffff16565b61396590919063ffffffff16565b90508083839550955095505050509193909250565b5f805f80612f6785896139da90919063ffffffff16565b90505f612f7d86896139da90919063ffffffff16565b90505f612f9387896139da90919063ffffffff16565b90505f612fbb82612fad858761396590919063ffffffff16565b61396590919063ffffffff16565b9050838184965096509650505050509450945094915050565b5f600554148015612fe657505f600854145b61300b576005546006819055506008546009819055505f6005819055505f6008819055505b565b5f805f805f8061301c876125cc565b9550955095509550955095506130788760105f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461396590919063ffffffff16565b60105f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061310986600f5f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461396590919063ffffffff16565b600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061319a85600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b600f5f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506131e4816139ef565b6131ee8483613b87565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161324b9190613d7c565b60405180910390a3505050505050505050565b5f805f805f8061326d876125cc565b9550955095509550955095506132c986600f5f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461396590919063ffffffff16565b600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061335a8360105f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b60105f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506133eb85600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b600f5f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613435816139ef565b61343f8483613b87565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161349c9190613d7c565b60405180910390a3505050505050505050565b5f805f805f806134be876125cc565b95509550955095509550955061351a86600f5f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461396590919063ffffffff16565b600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506135ab85600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b600f5f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506135f5816139ef565b6135ff8483613b87565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161365c9190613d7c565b60405180910390a3505050505050505050565b5f805f805f8061367e876125cc565b9550955095509550955095506136da8760105f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461396590919063ffffffff16565b60105f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061376b86600f5f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461396590919063ffffffff16565b600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506137fc8360105f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b60105f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061388d85600f5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b600f5f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506138d7816139ef565b6138e18483613b87565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161393e9190613d7c565b60405180910390a3505050505050505050565b600654600581905550600954600881905550565b5f8183613972919061427f565b905092915050565b5f6139a36064613995600554856139da90919063ffffffff16565b6125a290919063ffffffff16565b9050919050565b5f6139d360646139c5600854856139da90919063ffffffff16565b6125a290919063ffffffff16565b9050919050565b5f81836139e7919061496d565b905092915050565b5f6139f8612579565b90505f613a0e82846139da90919063ffffffff16565b9050613a6081600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060135f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613b8257613b408360105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b790919063ffffffff16565b60105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b505050565b613b9c8260165461396590919063ffffffff16565b601681905550613bb7816015546125b790919063ffffffff16565b6015819055505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613bf8578082015181840152602081019050613bdd565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613c1d82613bc1565b613c278185613bcb565b9350613c37818560208601613bdb565b613c4081613c03565b840191505092915050565b5f6020820190508181035f830152613c638184613c13565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613c9882613c6f565b9050919050565b613ca881613c8e565b8114613cb2575f80fd5b50565b5f81359050613cc381613c9f565b92915050565b5f819050919050565b613cdb81613cc9565b8114613ce5575f80fd5b50565b5f81359050613cf681613cd2565b92915050565b5f8060408385031215613d1257613d11613c6b565b5b5f613d1f85828601613cb5565b9250506020613d3085828601613ce8565b9150509250929050565b5f8115159050919050565b613d4e81613d3a565b82525050565b5f602082019050613d675f830184613d45565b92915050565b613d7681613cc9565b82525050565b5f602082019050613d8f5f830184613d6d565b92915050565b5f819050919050565b5f613db8613db3613dae84613c6f565b613d95565b613c6f565b9050919050565b5f613dc982613d9e565b9050919050565b5f613dda82613dbf565b9050919050565b613dea81613dd0565b82525050565b5f602082019050613e035f830184613de1565b92915050565b5f60208284031215613e1e57613e1d613c6b565b5b5f613e2b84828501613ce8565b91505092915050565b5f613e3e82613c6f565b9050919050565b613e4e81613e34565b8114613e58575f80fd5b50565b5f81359050613e6981613e45565b92915050565b5f60208284031215613e8457613e83613c6b565b5b5f613e9184828501613e5b565b91505092915050565b5f805f60608486031215613eb157613eb0613c6b565b5b5f613ebe86828701613cb5565b9350506020613ecf86828701613cb5565b9250506040613ee086828701613ce8565b9150509250925092565b613ef381613d3a565b8114613efd575f80fd5b50565b5f81359050613f0e81613eea565b92915050565b5f60208284031215613f2957613f28613c6b565b5b5f613f3684828501613f00565b91505092915050565b5f60ff82169050919050565b613f5481613f3f565b82525050565b5f602082019050613f6d5f830184613f4b565b92915050565b5f60208284031215613f8857613f87613c6b565b5b5f613f9584828501613cb5565b91505092915050565b5f8060408385031215613fb457613fb3613c6b565b5b5f613fc185828601613ce8565b9250506020613fd285828601613f00565b9150509250929050565b613fe581613c8e565b82525050565b5f602082019050613ffe5f830184613fdc565b92915050565b61400d81613e34565b82525050565b5f6020820190506140265f830184614004565b92915050565b5f806040838503121561404257614041613c6b565b5b5f61404f85828601613cb5565b925050602061406085828601613cb5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806140ae57607f821691505b6020821081036140c1576140c061406a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6140fb602083613bcb565b9150614106826140c7565b602082019050919050565b5f6020820190508181035f830152614128816140ef565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f614189602a83613bcb565b91506141948261412f565b604082019050919050565b5f6020820190508181035f8301526141b68161417d565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c7564656400000000005f82015250565b5f6141f1601b83613bcb565b91506141fc826141bd565b602082019050919050565b5f6020820190508181035f83015261421e816141e5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61428982613cc9565b915061429483613cc9565b92508282039050818111156142ac576142ab614252565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f614313601f83613bcb565b915061431e826142df565b602082019050919050565b5f6020820190508181035f83015261434081614307565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6143a1602683613bcb565b91506143ac82614347565b604082019050919050565b5f6020820190508181035f8301526143ce81614395565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61442f602483613bcb565b915061443a826143d5565b604082019050919050565b5f6020820190508181035f83015261445c81614423565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144bd602283613bcb565b91506144c882614463565b604082019050919050565b5f6020820190508181035f8301526144ea816144b1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61454b602583613bcb565b9150614556826144f1565b604082019050919050565b5f6020820190508181035f8301526145788161453f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6145d9602383613bcb565b91506145e48261457f565b604082019050919050565b5f6020820190508181035f830152614606816145cd565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f614667602983613bcb565b91506146728261460d565b604082019050919050565b5f6020820190508181035f8301526146948161465b565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f6146f5602883613bcb565b91506147008261469b565b604082019050919050565b5f6020820190508181035f830152614722816146e9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61476082613cc9565b915061476b83613cc9565b92508261477b5761477a614729565b5b828204905092915050565b5f61479082613cc9565b915061479b83613cc9565b92508282019050808211156147b3576147b2614252565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506147f481613c9f565b92915050565b5f6020828403121561480f5761480e613c6b565b5b5f61481c848285016147e6565b91505092915050565b5f819050919050565b5f61484861484361483e84614825565b613d95565b613cc9565b9050919050565b6148588161482e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61489081613c8e565b82525050565b5f6148a18383614887565b60208301905092915050565b5f602082019050919050565b5f6148c38261485e565b6148cd8185614868565b93506148d883614878565b805f5b838110156149085781516148ef8882614896565b97506148fa836148ad565b9250506001810190506148db565b5085935050505092915050565b5f60a0820190506149285f830188613d6d565b614935602083018761484f565b818103604083015261494781866148b9565b90506149566060830185613fdc565b6149636080830184613d6d565b9695505050505050565b5f61497782613cc9565b915061498283613cc9565b925082820261499081613cc9565b915082820484148315176149a7576149a6614252565b5b509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200bae8bc5265c761a53935645b4eb8ad0fae4c75716f1de57c5782f0176a553ad64736f6c63430008160033
Deployed Bytecode Sourcemap
28484:17155:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30947:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31859:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32980:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29919:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31224:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45524:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45399:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28983:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32028:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45029:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33519:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31133:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34235:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32349:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28840:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34722:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33075:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29977:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33780:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38187:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44900:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31327:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19968:148;;;;;;;;;;;;;:::i;:::-;;29343:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29202:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32852:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19325:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31038;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28937:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30049:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44745:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29262:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32575:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31533:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29102:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29152;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28801:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44609:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45201:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31708:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34843:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20268:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30947:83;30984:13;31017:5;31010:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30947:83;:::o;31859:161::-;31934:4;31951:39;31960:12;:10;:12::i;:::-;31974:7;31983:6;31951:8;:39::i;:::-;32008:4;32001:11;;31859:161;;;;:::o;32980:87::-;33022:7;33049:10;;33042:17;;32980:87;:::o;29919:51::-;;;:::o;31224:95::-;31277:7;31304;;31297:14;;31224:95;:::o;45524:112::-;19554:12;:10;:12::i;:::-;19543:23;;:7;:5;:7::i;:::-;:23;;;19535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45617:11:::1;45602:12;:26;;;;45524:112:::0;:::o;45399:117::-;19554:12;:10;:12::i;:::-;19543:23;;:7;:5;:7::i;:::-;:23;;;19535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45502:6:::1;45484:15;;:24;;;;;;;;;;;;;;;;;;45399:117:::0;:::o;28983:50::-;;;;:::o;32028:313::-;32126:4;32143:36;32153:6;32161:9;32172:6;32143:9;:36::i;:::-;32190:121;32199:6;32207:12;:10;:12::i;:::-;32221:89;32259:6;32221:89;;;;;;;;;;;;;;;;;:11;:19;32233:6;32221:19;;;;;;;;;;;;;;;:33;32241:12;:10;:12::i;:::-;32221:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;32190:8;:121::i;:::-;32329:4;32322:11;;32028:313;;;;;:::o;45029:164::-;19554:12;:10;:12::i;:::-;19543:23;;:7;:5;:7::i;:::-;:23;;;19535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45126:8:::1;45105:18;;:29;;;;;;;;;;;;;;;;;;45150:35;45176:8;45150:35;;;;;;:::i;:::-;;;;;;;;45029:164:::0;:::o;33519:253::-;33585:7;33624;;33613;:18;;33605:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33689:19;33712:10;:8;:10::i;:::-;33689:33;;33740:24;33752:11;33740:7;:11;;:24;;;;:::i;:::-;33733:31;;;33519:253;;;:::o;31133:83::-;31174:5;31199:9;;;;;;;;;;;31192:16;;31133:83;:::o;34235:479::-;19554:12;:10;:12::i;:::-;19543:23;;:7;:5;:7::i;:::-;:23;;;19535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34317:11:::1;:20;34329:7;34317:20;;;;;;;;;;;;;;;;;;;;;;;;;34309:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34385:9;34380:327;34404:9;:16;;;;34400:1;:20;34380:327;;;34462:7;34446:23;;:9;34456:1;34446:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;34442:254:::1;;34505:9;34534:1;34515:9;:16;;;;:20;;;;:::i;:::-;34505:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34490:9;34500:1;34490:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34574:1;34555:7;:16;34563:7;34555:16;;;;;;;;;;;;;;;:20;;;;34617:5;34594:11;:20;34606:7;34594:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34641:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;34675:5;;34442:254;34422:3;;;;;;;34380:327;;;;34235:479:::0;:::o;32349:218::-;32437:4;32454:83;32463:12;:10;:12::i;:::-;32477:7;32486:50;32525:10;32486:11;:25;32498:12;:10;:12::i;:::-;32486:25;;;;;;;;;;;;;;;:34;32512:7;32486:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32454:8;:83::i;:::-;32555:4;32548:11;;32349:218;;;;:::o;28840:38::-;;;;:::o;34722:113::-;19554:12;:10;:12::i;:::-;19543:23;;:7;:5;:7::i;:::-;:23;;;19535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34823:4:::1;34793:18;:27;34812:7;34793:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34722:113:::0;:::o;33075:436::-;33165:7;33204;;33193;:18;;33185:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33263:17;33258:246;;33298:15;33322:19;33333:7;33322:10;:19::i;:::-;33297:44;;;;;;;33363:7;33356:14;;;;;33258:246;33405:23;33436:19;33447:7;33436:10;:19::i;:::-;33403:52;;;;;;;33477:15;33470:22;;;33075:436;;;;;:::o;29977:38::-;;;:::o;33780:447::-;19554:12;:10;:12::i;:::-;19543:23;;:7;:5;:7::i;:::-;:23;;;19535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33977:11:::1;:20;33989:7;33977:20;;;;;;;;;;;;;;;;;;;;;;;;;33976:21;33968:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34062:1;34043:7;:16;34051:7;34043:16;;;;;;;;;;;;;;;;:20;34040:108;;;34099:37;34119:7;:16;34127:7;34119:16;;;;;;;;;;;;;;;;34099:19;:37::i;:::-;34080:7;:16;34088:7;34080:16;;;;;;;;;;;;;;;:56;;;;34040:108;34181:4;34158:11;:20;34170:7;34158:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34196:9;34211:7;34196:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33780:447:::0;:::o;38187:123::-;38251:4;38275:18;:27;38294:7;38275:27;;;;;;;;;;;;;;;;;;;;;;;;;38268:34;;38187:123;;;:::o;44900:121::-;19554:12;:10;:12::i;:::-;19543:23;;:7;:5;:7::i;:::-;:23;;;19535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45005:8:::1;44980:22;;:33;;;;;;;;;;;;;;;;;;44900:121:::0;:::o;31327:198::-;31393:7;31417:11;:20;31429:7;31417:20;;;;;;;;;;;;;;;;;;;;;;;;;31413:49;;;31446:7;:16;31454:7;31446:16;;;;;;;;;;;;;;;;31439:23;;;;31413:49;31480:37;31500:7;:16;31508:7;31500:16;;;;;;;;;;;;;;;;31480:19;:37::i;:::-;31473:44;;31327:198;;;;:::o;19968:148::-;19554:12;:10;:12::i;:::-;19543:23;;:7;:5;:7::i;:::-;:23;;;19535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20075:1:::1;20038:40;;20059:6;::::0;::::1;;;;;;;;20038:40;;;;;;;;;;;;20106:1;20089:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;19968:148::o:0;29343:92::-;;;;;;;;;;;;;:::o;29202:53::-;;;;:::o;32852:120::-;32920:4;32944:11;:20;32956:7;32944:20;;;;;;;;;;;;;;;;;;;;;;;;;32937:27;;32852:120;;;:::o;19325:87::-;19371:7;19398:6;;;;;;;;;;;19391:13;;19325:87;:::o;31038:::-;31077:13;31110:7;31103:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31038:87;:::o;28937:39::-;;;;:::o;30049:37::-;;;;;;;;;;;;;:::o;44745:147::-;19554:12;:10;:12::i;:::-;19543:23;;:7;:5;:7::i;:::-;:23;;;19535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44864:20:::1;44840:21;:44;;;;44745:147:::0;:::o;29262:74::-;;;;:::o;32575:269::-;32668:4;32685:129;32694:12;:10;:12::i;:::-;32708:7;32717:96;32756:15;32717:96;;;;;;;;;;;;;;;;;:11;:25;32729:12;:10;:12::i;:::-;32717:25;;;;;;;;;;;;;;;:34;32743:7;32717:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;32685:8;:129::i;:::-;32832:4;32825:11;;32575:269;;;;:::o;31533:167::-;31611:4;31628:42;31638:12;:10;:12::i;:::-;31652:9;31663:6;31628:9;:42::i;:::-;31688:4;31681:11;;31533:167;;;;:::o;29102:41::-;;;;:::o;29152:::-;;;;;;;;;;;;;:::o;28801:32::-;;;;:::o;44609:128::-;19554:12;:10;:12::i;:::-;19543:23;;:7;:5;:7::i;:::-;:23;;;19535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44717:12:::1;44695:19;:34;;;;44609:128:::0;:::o;45201:190::-;19554:12;:10;:12::i;:::-;19543:23;;:7;:5;:7::i;:::-;:23;;;19535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45351:32:::1;45317:31;:66;;;;45201:190:::0;:::o;31708:143::-;31789:7;31816:11;:18;31828:5;31816:18;;;;;;;;;;;;;;;:27;31835:7;31816:27;;;;;;;;;;;;;;;;31809:34;;31708:143;;;;:::o;34843:112::-;19554:12;:10;:12::i;:::-;19543:23;;:7;:5;:7::i;:::-;:23;;;19535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34942:5:::1;34912:18;:27;34931:7;34912:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34843:112:::0;:::o;20268:244::-;19554:12;:10;:12::i;:::-;19543:23;;:7;:5;:7::i;:::-;:23;;;19535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20377:1:::1;20357:22;;:8;:22;;::::0;20349:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20467:8;20438:38;;20459:6;::::0;::::1;;;;;;;;20438:38;;;;;;;;;;;;20496:8;20487:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;20268:244:::0;:::o;10164:98::-;10217:7;10244:10;10237:17;;10164:98;:::o;38318:337::-;38428:1;38411:19;;:5;:19;;;38403:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38509:1;38490:21;;:7;:21;;;38482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38593:6;38563:11;:18;38575:5;38563:18;;;;;;;;;;;;;;;:27;38582:7;38563:27;;;;;;;;;;;;;;;:36;;;;38631:7;38615:32;;38624:5;38615:32;;;38640:6;38615:32;;;;;;:::i;:::-;;;;;;;;38318:337;;;:::o;38663:1677::-;38801:1;38785:18;;:4;:18;;;38777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38878:1;38864:16;;:2;:16;;;38856:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38948:1;38939:6;:10;38931:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39019:7;:5;:7::i;:::-;39011:15;;:4;:15;;;;:32;;;;;39036:7;:5;:7::i;:::-;39030:13;;:2;:13;;;;39011:32;39008:125;;;39076:12;;39066:6;:22;;39058:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39008:125;39421:28;39452:24;39470:4;39452:9;:24::i;:::-;39421:55;;39487:24;39538:31;;39514:20;:55;;39487:82;;39609:12;;39585:20;:36;39582:112;;39670:12;;39647:35;;39582:112;39724:19;:50;;;;;39761:13;;;;;;;;;;;39760:14;39724:50;:88;;;;;39799:13;39791:21;;:4;:21;;;;39724:88;:123;;;;;39829:18;;;;;;;;;;;39724:123;39706:213;;;39874:33;39886:20;39874:11;:33::i;:::-;39706:213;39934:22;;;;;;;;;;;39931:65;;;39973:11;39981:2;39973:7;:11::i;:::-;39931:65;40069:12;40084:4;40069:19;;40188:18;:24;40207:4;40188:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;40216:18;:22;40235:2;40216:22;;;;;;;;;;;;;;;;;;;;;;;;;40188:50;40185:97;;;40265:5;40255:15;;40185:97;40294:38;40309:4;40314:2;40317:6;40324:7;40294:14;:38::i;:::-;38766:1574;;;38663:1677;;;:::o;7643:206::-;7729:7;7787:1;7782;:6;;7790:12;7774:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7829:1;7825;:5;7818:12;;7643:206;;;;;:::o;36754:163::-;36795:7;36816:15;36833;36852:19;:17;:19::i;:::-;36815:56;;;;36889:20;36901:7;36889;:11;;:20;;;;:::i;:::-;36882:27;;;;36754:163;:::o;6524:98::-;6582:7;6613:1;6609;:5;;;;:::i;:::-;6602:12;;6524:98;;;;:::o;5414:::-;5472:7;5503:1;5499;:5;;;;:::i;:::-;5492:12;;5414:98;;;;:::o;35552:419::-;35611:7;35620;35629;35638;35647;35656;35677:23;35702:12;35716:18;35738:20;35750:7;35738:11;:20::i;:::-;35676:82;;;;;;35770:15;35787:23;35812:12;35828:50;35840:7;35849:4;35855:10;35867;:8;:10::i;:::-;35828:11;:50::i;:::-;35769:109;;;;;;35897:7;35906:15;35923:4;35929:15;35946:4;35952:10;35889:74;;;;;;;;;;;;;;;;;;35552:419;;;;;;;:::o;40602:794::-;30197:4;30181:13;;:20;;;;;;;;;;;;;;;;;;40744:21:::1;40782:1;40768:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40744:40;;40813:4;40795;40800:1;40795:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;40839:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40829:4;40834:1;40829:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;40874:71;40891:4;40906:15;40924:20;40874:8;:71::i;:::-;40984:15;:66;;;41065:20;41100:1;41144:4;41171;41191:15;40984:233;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41230:26;41259:21;41230:50;;41315:1;41294:18;:22;41291:98;;;41333:15;;;;;;;;;;;:24;;:44;41358:18;41333:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41291:98;40673:723;;30240:5:::0;30224:13;;:21;;;;;;;;;;;;;;;;;;40602:794;:::o;40348:246::-;40413:13;;40403:7;:23;;;;40453:19;;40437:13;:35;;;;40500:13;40487:26;;:9;:26;;;40483:104;;40554:21;;40538:13;:37;;;;40483:104;40348:246;:::o;41477:818::-;41588:7;41584:40;;41610:14;:12;:14::i;:::-;41584:40;41641:11;:19;41653:6;41641:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;41665:11;:22;41677:9;41665:22;;;;;;;;;;;;;;;;;;;;;;;;;41664:23;41641:46;41637:597;;;41704:48;41726:6;41734:9;41745:6;41704:21;:48::i;:::-;41637:597;;;41775:11;:19;41787:6;41775:19;;;;;;;;;;;;;;;;;;;;;;;;;41774:20;:46;;;;;41798:11;:22;41810:9;41798:22;;;;;;;;;;;;;;;;;;;;;;;;;41774:46;41770:464;;;41837:46;41857:6;41865:9;41876:6;41837:19;:46::i;:::-;41770:464;;;41906:11;:19;41918:6;41906:19;;;;;;;;;;;;;;;;;;;;;;;;;41905:20;:47;;;;;41930:11;:22;41942:9;41930:22;;;;;;;;;;;;;;;;;;;;;;;;;41929:23;41905:47;41901:333;;;41969:44;41987:6;41995:9;42006:6;41969:17;:44::i;:::-;41901:333;;;42035:11;:19;42047:6;42035:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;42058:11;:22;42070:9;42058:22;;;;;;;;;;;;;;;;;;;;;;;;;42035:45;42031:203;;;42097:48;42119:6;42127:9;42138:6;42097:21;:48::i;:::-;42031:203;;;42178:44;42196:6;42204:9;42215:6;42178:17;:44::i;:::-;42031:203;41901:333;41770:464;41637:597;42250:7;42246:41;;42272:15;:13;:15::i;:::-;42246:41;41477:818;;;;:::o;36925:555::-;36975:7;36984;37004:15;37022:7;;37004:25;;37040:15;37058:7;;37040:25;;37081:9;37076:289;37100:9;:16;;;;37096:1;:20;37076:289;;;37166:7;37142;:21;37150:9;37160:1;37150:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37142:21;;;;;;;;;;;;;;;;:31;:66;;;;37201:7;37177;:21;37185:9;37195:1;37185:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37177:21;;;;;;;;;;;;;;;;:31;37142:66;37138:97;;;37218:7;;37227;;37210:25;;;;;;;;;37138:97;37260:34;37272:7;:21;37280:9;37290:1;37280:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37272:21;;;;;;;;;;;;;;;;37260:7;:11;;:34;;;;:::i;:::-;37250:44;;37319:34;37331:7;:21;37339:9;37349:1;37339:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37331:21;;;;;;;;;;;;;;;;37319:7;:11;;:34;;;;:::i;:::-;37309:44;;37118:3;;;;;;;37076:289;;;;37389:20;37401:7;;37389;;:11;;:20;;;;:::i;:::-;37379:7;:30;37375:61;;;37419:7;;37428;;37411:25;;;;;;;;37375:61;37455:7;37464;37447:25;;;;;;36925:555;;;:::o;35979:330::-;36039:7;36048;36057;36077:12;36092:24;36108:7;36092:15;:24::i;:::-;36077:39;;36127:18;36148:30;36170:7;36148:21;:30::i;:::-;36127:51;;36189:23;36215:33;36237:10;36215:17;36227:4;36215:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36189:59;;36267:15;36284:4;36290:10;36259:42;;;;;;;;;35979:330;;;;;:::o;36317:429::-;36432:7;36441;36450;36470:15;36488:24;36500:11;36488:7;:11;;:24;;;;:::i;:::-;36470:42;;36523:12;36538:21;36547:11;36538:4;:8;;:21;;;;:::i;:::-;36523:36;;36570:18;36591:27;36606:11;36591:10;:14;;:27;;;;:::i;:::-;36570:48;;36629:23;36655:33;36677:10;36655:17;36667:4;36655:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36629:59;;36707:7;36716:15;36733:4;36699:39;;;;;;;;;;36317:429;;;;;;;;:::o;34963:234::-;35020:1;35009:7;;:12;:34;;;;;35042:1;35025:13;;:18;35009:34;35045:7;35006:46;35082:7;;35064:15;:25;;;;35124:13;;35100:21;:37;;;;35160:1;35150:7;:11;;;;35188:1;35172:13;:17;;;;34963:234;:::o;43396:563::-;43499:15;43516:23;43541:12;43555:23;43580:12;43594:18;43616:19;43627:7;43616:10;:19::i;:::-;43498:137;;;;;;;;;;;;43664:28;43684:7;43664;:15;43672:6;43664:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43646:7;:15;43654:6;43646:15;;;;;;;;;;;;;;;:46;;;;43721:28;43741:7;43721;:15;43729:6;43721:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43703:7;:15;43711:6;43703:15;;;;;;;;;;;;;;;:46;;;;43781:39;43804:15;43781:7;:18;43789:9;43781:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43760:7;:18;43768:9;43760:18;;;;;;;;;;;;;;;:60;;;;43831:26;43846:10;43831:14;:26::i;:::-;43868:23;43880:4;43886;43868:11;:23::i;:::-;43924:9;43907:44;;43916:6;43907:44;;;43935:15;43907:44;;;;;;:::i;:::-;;;;;;;;43487:472;;;;;;43396:563;;;:::o;42813:575::-;42914:15;42931:23;42956:12;42970:23;42995:12;43009:18;43031:19;43042:7;43031:10;:19::i;:::-;42913:137;;;;;;;;;;;;43079:28;43099:7;43079;:15;43087:6;43079:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43061:7;:15;43069:6;43061:15;;;;;;;;;;;;;;;:46;;;;43139:39;43162:15;43139:7;:18;43147:9;43139:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43118:7;:18;43126:9;43118:18;;;;;;;;;;;;;;;:60;;;;43210:39;43233:15;43210:7;:18;43218:9;43210:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43189:7;:18;43197:9;43189:18;;;;;;;;;;;;;;;:60;;;;43260:26;43275:10;43260:14;:26::i;:::-;43297:23;43309:4;43315;43297:11;:23::i;:::-;43353:9;43336:44;;43345:6;43336:44;;;43364:15;43336:44;;;;;;:::i;:::-;;;;;;;;42902:486;;;;;;42813:575;;;:::o;42303:502::-;42402:15;42419:23;42444:12;42458:23;42483:12;42497:18;42519:19;42530:7;42519:10;:19::i;:::-;42401:137;;;;;;;;;;;;42567:28;42587:7;42567;:15;42575:6;42567:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42549:7;:15;42557:6;42549:15;;;;;;;;;;;;;;;:46;;;;42627:39;42650:15;42627:7;:18;42635:9;42627:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42606:7;:18;42614:9;42606:18;;;;;;;;;;;;;;;:60;;;;42677:26;42692:10;42677:14;:26::i;:::-;42714:23;42726:4;42732;42714:11;:23::i;:::-;42770:9;42753:44;;42762:6;42753:44;;;42781:15;42753:44;;;;;;:::i;:::-;;;;;;;;42390:415;;;;;;42303:502;;;:::o;43967:634::-;44070:15;44087:23;44112:12;44126:23;44151:12;44165:18;44187:19;44198:7;44187:10;:19::i;:::-;44069:137;;;;;;;;;;;;44235:28;44255:7;44235;:15;44243:6;44235:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44217:7;:15;44225:6;44217:15;;;;;;;;;;;;;;;:46;;;;44292:28;44312:7;44292;:15;44300:6;44292:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44274:7;:15;44282:6;44274:15;;;;;;;;;;;;;;;:46;;;;44352:39;44375:15;44352:7;:18;44360:9;44352:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44331:7;:18;44339:9;44331:18;;;;;;;;;;;;;;;:60;;;;44423:39;44446:15;44423:7;:18;44431:9;44423:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44402:7;:18;44410:9;44402:18;;;;;;;;;;;;;;;:60;;;;44473:26;44488:10;44473:14;:26::i;:::-;44510:23;44522:4;44528;44510:11;:23::i;:::-;44566:9;44549:44;;44558:6;44549:44;;;44577:15;44549:44;;;;;;:::i;:::-;;;;;;;;44058:543;;;;;;43967:634;;;:::o;35205:125::-;35259:15;;35249:7;:25;;;;35301:21;;35285:13;:37;;;;35205:125::o;5786:98::-;5844:7;5875:1;5871;:5;;;;:::i;:::-;5864:12;;5786:98;;;;:::o;37851:154::-;37915:7;37942:55;37981:5;37942:20;37954:7;;37942;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;37935:62;;37851:154;;;:::o;38013:166::-;38083:7;38110:61;38155:5;38110:26;38122:13;;38110:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;38103:68;;38013:166;;;:::o;6134:98::-;6192:7;6223:1;6219;:5;;;;:::i;:::-;6212:12;;6134:98;;;;:::o;37488:355::-;37551:19;37574:10;:8;:10::i;:::-;37551:33;;37595:18;37616:27;37631:11;37616:10;:14;;:27;;;;:::i;:::-;37595:48;;37679:38;37706:10;37679:7;:22;37695:4;37679:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37654:7;:22;37670:4;37654:22;;;;;;;;;;;;;;;:63;;;;37731:11;:26;37751:4;37731:26;;;;;;;;;;;;;;;;;;;;;;;;;37728:107;;;37797:38;37824:10;37797:7;:22;37813:4;37797:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37772:7;:22;37788:4;37772:22;;;;;;;;;;;;;;;:63;;;;37728:107;37540:303;;37488:355;:::o;35397:147::-;35475:17;35487:4;35475:7;;:11;;:17;;;;:::i;:::-;35465:7;:27;;;;35516:20;35531:4;35516:10;;:14;;:20;;;;:::i;:::-;35503:10;:33;;;;35397:147;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:153::-;4221:9;4254:37;4285:5;4254:37;:::i;:::-;4241:50;;4144:153;;;:::o;4303:185::-;4417:64;4475:5;4417:64;:::i;:::-;4412:3;4405:77;4303:185;;:::o;4494:276::-;4614:4;4652:2;4641:9;4637:18;4629:26;;4665:98;4760:1;4749:9;4745:17;4736:6;4665:98;:::i;:::-;4494:276;;;;:::o;4776:329::-;4835:6;4884:2;4872:9;4863:7;4859:23;4855:32;4852:119;;;4890:79;;:::i;:::-;4852:119;5010:1;5035:53;5080:7;5071:6;5060:9;5056:22;5035:53;:::i;:::-;5025:63;;4981:117;4776:329;;;;:::o;5111:104::-;5156:7;5185:24;5203:5;5185:24;:::i;:::-;5174:35;;5111:104;;;:::o;5221:138::-;5302:32;5328:5;5302:32;:::i;:::-;5295:5;5292:43;5282:71;;5349:1;5346;5339:12;5282:71;5221:138;:::o;5365:155::-;5419:5;5457:6;5444:20;5435:29;;5473:41;5508:5;5473:41;:::i;:::-;5365:155;;;;:::o;5526:345::-;5593:6;5642:2;5630:9;5621:7;5617:23;5613:32;5610:119;;;5648:79;;:::i;:::-;5610:119;5768:1;5793:61;5846:7;5837:6;5826:9;5822:22;5793:61;:::i;:::-;5783:71;;5739:125;5526:345;;;;:::o;5877:619::-;5954:6;5962;5970;6019:2;6007:9;5998:7;5994:23;5990:32;5987:119;;;6025:79;;:::i;:::-;5987:119;6145:1;6170:53;6215:7;6206:6;6195:9;6191:22;6170:53;:::i;:::-;6160:63;;6116:117;6272:2;6298:53;6343:7;6334:6;6323:9;6319:22;6298:53;:::i;:::-;6288:63;;6243:118;6400:2;6426:53;6471:7;6462:6;6451:9;6447:22;6426:53;:::i;:::-;6416:63;;6371:118;5877:619;;;;;:::o;6502:116::-;6572:21;6587:5;6572:21;:::i;:::-;6565:5;6562:32;6552:60;;6608:1;6605;6598:12;6552:60;6502:116;:::o;6624:133::-;6667:5;6705:6;6692:20;6683:29;;6721:30;6745:5;6721:30;:::i;:::-;6624:133;;;;:::o;6763:323::-;6819:6;6868:2;6856:9;6847:7;6843:23;6839:32;6836:119;;;6874:79;;:::i;:::-;6836:119;6994:1;7019:50;7061:7;7052:6;7041:9;7037:22;7019:50;:::i;:::-;7009:60;;6965:114;6763:323;;;;:::o;7092:86::-;7127:7;7167:4;7160:5;7156:16;7145:27;;7092:86;;;:::o;7184:112::-;7267:22;7283:5;7267:22;:::i;:::-;7262:3;7255:35;7184:112;;:::o;7302:214::-;7391:4;7429:2;7418:9;7414:18;7406:26;;7442:67;7506:1;7495:9;7491:17;7482:6;7442:67;:::i;:::-;7302:214;;;;:::o;7522:329::-;7581:6;7630:2;7618:9;7609:7;7605:23;7601:32;7598:119;;;7636:79;;:::i;:::-;7598:119;7756:1;7781:53;7826:7;7817:6;7806:9;7802:22;7781:53;:::i;:::-;7771:63;;7727:117;7522:329;;;;:::o;7857:468::-;7922:6;7930;7979:2;7967:9;7958:7;7954:23;7950:32;7947:119;;;7985:79;;:::i;:::-;7947:119;8105:1;8130:53;8175:7;8166:6;8155:9;8151:22;8130:53;:::i;:::-;8120:63;;8076:117;8232:2;8258:50;8300:7;8291:6;8280:9;8276:22;8258:50;:::i;:::-;8248:60;;8203:115;7857:468;;;;;:::o;8331:118::-;8418:24;8436:5;8418:24;:::i;:::-;8413:3;8406:37;8331:118;;:::o;8455:222::-;8548:4;8586:2;8575:9;8571:18;8563:26;;8599:71;8667:1;8656:9;8652:17;8643:6;8599:71;:::i;:::-;8455:222;;;;:::o;8683:142::-;8786:32;8812:5;8786:32;:::i;:::-;8781:3;8774:45;8683:142;;:::o;8831:254::-;8940:4;8978:2;8967:9;8963:18;8955:26;;8991:87;9075:1;9064:9;9060:17;9051:6;8991:87;:::i;:::-;8831:254;;;;:::o;9091:474::-;9159:6;9167;9216:2;9204:9;9195:7;9191:23;9187:32;9184:119;;;9222:79;;:::i;:::-;9184:119;9342:1;9367:53;9412:7;9403:6;9392:9;9388:22;9367:53;:::i;:::-;9357:63;;9313:117;9469:2;9495:53;9540:7;9531:6;9520:9;9516:22;9495:53;:::i;:::-;9485:63;;9440:118;9091:474;;;;;:::o;9571:180::-;9619:77;9616:1;9609:88;9716:4;9713:1;9706:15;9740:4;9737:1;9730:15;9757:320;9801:6;9838:1;9832:4;9828:12;9818:22;;9885:1;9879:4;9875:12;9906:18;9896:81;;9962:4;9954:6;9950:17;9940:27;;9896:81;10024:2;10016:6;10013:14;9993:18;9990:38;9987:84;;10043:18;;:::i;:::-;9987:84;9808:269;9757:320;;;:::o;10083:182::-;10223:34;10219:1;10211:6;10207:14;10200:58;10083:182;:::o;10271:366::-;10413:3;10434:67;10498:2;10493:3;10434:67;:::i;:::-;10427:74;;10510:93;10599:3;10510:93;:::i;:::-;10628:2;10623:3;10619:12;10612:19;;10271:366;;;:::o;10643:419::-;10809:4;10847:2;10836:9;10832:18;10824:26;;10896:9;10890:4;10886:20;10882:1;10871:9;10867:17;10860:47;10924:131;11050:4;10924:131;:::i;:::-;10916:139;;10643:419;;;:::o;11068:229::-;11208:34;11204:1;11196:6;11192:14;11185:58;11277:12;11272:2;11264:6;11260:15;11253:37;11068:229;:::o;11303:366::-;11445:3;11466:67;11530:2;11525:3;11466:67;:::i;:::-;11459:74;;11542:93;11631:3;11542:93;:::i;:::-;11660:2;11655:3;11651:12;11644:19;;11303:366;;;:::o;11675:419::-;11841:4;11879:2;11868:9;11864:18;11856:26;;11928:9;11922:4;11918:20;11914:1;11903:9;11899:17;11892:47;11956:131;12082:4;11956:131;:::i;:::-;11948:139;;11675:419;;;:::o;12100:177::-;12240:29;12236:1;12228:6;12224:14;12217:53;12100:177;:::o;12283:366::-;12425:3;12446:67;12510:2;12505:3;12446:67;:::i;:::-;12439:74;;12522:93;12611:3;12522:93;:::i;:::-;12640:2;12635:3;12631:12;12624:19;;12283:366;;;:::o;12655:419::-;12821:4;12859:2;12848:9;12844:18;12836:26;;12908:9;12902:4;12898:20;12894:1;12883:9;12879:17;12872:47;12936:131;13062:4;12936:131;:::i;:::-;12928:139;;12655:419;;;:::o;13080:180::-;13128:77;13125:1;13118:88;13225:4;13222:1;13215:15;13249:4;13246:1;13239:15;13266:180;13314:77;13311:1;13304:88;13411:4;13408:1;13401:15;13435:4;13432:1;13425:15;13452:194;13492:4;13512:20;13530:1;13512:20;:::i;:::-;13507:25;;13546:20;13564:1;13546:20;:::i;:::-;13541:25;;13590:1;13587;13583:9;13575:17;;13614:1;13608:4;13605:11;13602:37;;;13619:18;;:::i;:::-;13602:37;13452:194;;;;:::o;13652:180::-;13700:77;13697:1;13690:88;13797:4;13794:1;13787:15;13821:4;13818:1;13811:15;13838:181;13978:33;13974:1;13966:6;13962:14;13955:57;13838:181;:::o;14025:366::-;14167:3;14188:67;14252:2;14247:3;14188:67;:::i;:::-;14181:74;;14264:93;14353:3;14264:93;:::i;:::-;14382:2;14377:3;14373:12;14366:19;;14025:366;;;:::o;14397:419::-;14563:4;14601:2;14590:9;14586:18;14578:26;;14650:9;14644:4;14640:20;14636:1;14625:9;14621:17;14614:47;14678:131;14804:4;14678:131;:::i;:::-;14670:139;;14397:419;;;:::o;14822:225::-;14962:34;14958:1;14950:6;14946:14;14939:58;15031:8;15026:2;15018:6;15014:15;15007:33;14822:225;:::o;15053:366::-;15195:3;15216:67;15280:2;15275:3;15216:67;:::i;:::-;15209:74;;15292:93;15381:3;15292:93;:::i;:::-;15410:2;15405:3;15401:12;15394:19;;15053:366;;;:::o;15425:419::-;15591:4;15629:2;15618:9;15614:18;15606:26;;15678:9;15672:4;15668:20;15664:1;15653:9;15649:17;15642:47;15706:131;15832:4;15706:131;:::i;:::-;15698:139;;15425:419;;;:::o;15850:223::-;15990:34;15986:1;15978:6;15974:14;15967:58;16059:6;16054:2;16046:6;16042:15;16035:31;15850:223;:::o;16079:366::-;16221:3;16242:67;16306:2;16301:3;16242:67;:::i;:::-;16235:74;;16318:93;16407:3;16318:93;:::i;:::-;16436:2;16431:3;16427:12;16420:19;;16079:366;;;:::o;16451:419::-;16617:4;16655:2;16644:9;16640:18;16632:26;;16704:9;16698:4;16694:20;16690:1;16679:9;16675:17;16668:47;16732:131;16858:4;16732:131;:::i;:::-;16724:139;;16451:419;;;:::o;16876:221::-;17016:34;17012:1;17004:6;17000:14;16993:58;17085:4;17080:2;17072:6;17068:15;17061:29;16876:221;:::o;17103:366::-;17245:3;17266:67;17330:2;17325:3;17266:67;:::i;:::-;17259:74;;17342:93;17431:3;17342:93;:::i;:::-;17460:2;17455:3;17451:12;17444:19;;17103:366;;;:::o;17475:419::-;17641:4;17679:2;17668:9;17664:18;17656:26;;17728:9;17722:4;17718:20;17714:1;17703:9;17699:17;17692:47;17756:131;17882:4;17756:131;:::i;:::-;17748:139;;17475:419;;;:::o;17900:224::-;18040:34;18036:1;18028:6;18024:14;18017:58;18109:7;18104:2;18096:6;18092:15;18085:32;17900:224;:::o;18130:366::-;18272:3;18293:67;18357:2;18352:3;18293:67;:::i;:::-;18286:74;;18369:93;18458:3;18369:93;:::i;:::-;18487:2;18482:3;18478:12;18471:19;;18130:366;;;:::o;18502:419::-;18668:4;18706:2;18695:9;18691:18;18683:26;;18755:9;18749:4;18745:20;18741:1;18730:9;18726:17;18719:47;18783:131;18909:4;18783:131;:::i;:::-;18775:139;;18502:419;;;:::o;18927:222::-;19067:34;19063:1;19055:6;19051:14;19044:58;19136:5;19131:2;19123:6;19119:15;19112:30;18927:222;:::o;19155:366::-;19297:3;19318:67;19382:2;19377:3;19318:67;:::i;:::-;19311:74;;19394:93;19483:3;19394:93;:::i;:::-;19512:2;19507:3;19503:12;19496:19;;19155:366;;;:::o;19527:419::-;19693:4;19731:2;19720:9;19716:18;19708:26;;19780:9;19774:4;19770:20;19766:1;19755:9;19751:17;19744:47;19808:131;19934:4;19808:131;:::i;:::-;19800:139;;19527:419;;;:::o;19952:228::-;20092:34;20088:1;20080:6;20076:14;20069:58;20161:11;20156:2;20148:6;20144:15;20137:36;19952:228;:::o;20186:366::-;20328:3;20349:67;20413:2;20408:3;20349:67;:::i;:::-;20342:74;;20425:93;20514:3;20425:93;:::i;:::-;20543:2;20538:3;20534:12;20527:19;;20186:366;;;:::o;20558:419::-;20724:4;20762:2;20751:9;20747:18;20739:26;;20811:9;20805:4;20801:20;20797:1;20786:9;20782:17;20775:47;20839:131;20965:4;20839:131;:::i;:::-;20831:139;;20558:419;;;:::o;20983:227::-;21123:34;21119:1;21111:6;21107:14;21100:58;21192:10;21187:2;21179:6;21175:15;21168:35;20983:227;:::o;21216:366::-;21358:3;21379:67;21443:2;21438:3;21379:67;:::i;:::-;21372:74;;21455:93;21544:3;21455:93;:::i;:::-;21573:2;21568:3;21564:12;21557:19;;21216:366;;;:::o;21588:419::-;21754:4;21792:2;21781:9;21777:18;21769:26;;21841:9;21835:4;21831:20;21827:1;21816:9;21812:17;21805:47;21869:131;21995:4;21869:131;:::i;:::-;21861:139;;21588:419;;;:::o;22013:180::-;22061:77;22058:1;22051:88;22158:4;22155:1;22148:15;22182:4;22179:1;22172:15;22199:185;22239:1;22256:20;22274:1;22256:20;:::i;:::-;22251:25;;22290:20;22308:1;22290:20;:::i;:::-;22285:25;;22329:1;22319:35;;22334:18;;:::i;:::-;22319:35;22376:1;22373;22369:9;22364:14;;22199:185;;;;:::o;22390:191::-;22430:3;22449:20;22467:1;22449:20;:::i;:::-;22444:25;;22483:20;22501:1;22483:20;:::i;:::-;22478:25;;22526:1;22523;22519:9;22512:16;;22547:3;22544:1;22541:10;22538:36;;;22554:18;;:::i;:::-;22538:36;22390:191;;;;:::o;22587:180::-;22635:77;22632:1;22625:88;22732:4;22729:1;22722:15;22756:4;22753:1;22746:15;22773:143;22830:5;22861:6;22855:13;22846:22;;22877:33;22904:5;22877:33;:::i;:::-;22773:143;;;;:::o;22922:351::-;22992:6;23041:2;23029:9;23020:7;23016:23;23012:32;23009:119;;;23047:79;;:::i;:::-;23009:119;23167:1;23192:64;23248:7;23239:6;23228:9;23224:22;23192:64;:::i;:::-;23182:74;;23138:128;22922:351;;;;:::o;23279:85::-;23324:7;23353:5;23342:16;;23279:85;;;:::o;23370:158::-;23428:9;23461:61;23479:42;23488:32;23514:5;23488:32;:::i;:::-;23479:42;:::i;:::-;23461:61;:::i;:::-;23448:74;;23370:158;;;:::o;23534:147::-;23629:45;23668:5;23629:45;:::i;:::-;23624:3;23617:58;23534:147;;:::o;23687:114::-;23754:6;23788:5;23782:12;23772:22;;23687:114;;;:::o;23807:184::-;23906:11;23940:6;23935:3;23928:19;23980:4;23975:3;23971:14;23956:29;;23807:184;;;;:::o;23997:132::-;24064:4;24087:3;24079:11;;24117:4;24112:3;24108:14;24100:22;;23997:132;;;:::o;24135:108::-;24212:24;24230:5;24212:24;:::i;:::-;24207:3;24200:37;24135:108;;:::o;24249:179::-;24318:10;24339:46;24381:3;24373:6;24339:46;:::i;:::-;24417:4;24412:3;24408:14;24394:28;;24249:179;;;;:::o;24434:113::-;24504:4;24536;24531:3;24527:14;24519:22;;24434:113;;;:::o;24583:732::-;24702:3;24731:54;24779:5;24731:54;:::i;:::-;24801:86;24880:6;24875:3;24801:86;:::i;:::-;24794:93;;24911:56;24961:5;24911:56;:::i;:::-;24990:7;25021:1;25006:284;25031:6;25028:1;25025:13;25006:284;;;25107:6;25101:13;25134:63;25193:3;25178:13;25134:63;:::i;:::-;25127:70;;25220:60;25273:6;25220:60;:::i;:::-;25210:70;;25066:224;25053:1;25050;25046:9;25041:14;;25006:284;;;25010:14;25306:3;25299:10;;24707:608;;;24583:732;;;;:::o;25321:831::-;25584:4;25622:3;25611:9;25607:19;25599:27;;25636:71;25704:1;25693:9;25689:17;25680:6;25636:71;:::i;:::-;25717:80;25793:2;25782:9;25778:18;25769:6;25717:80;:::i;:::-;25844:9;25838:4;25834:20;25829:2;25818:9;25814:18;25807:48;25872:108;25975:4;25966:6;25872:108;:::i;:::-;25864:116;;25990:72;26058:2;26047:9;26043:18;26034:6;25990:72;:::i;:::-;26072:73;26140:3;26129:9;26125:19;26116:6;26072:73;:::i;:::-;25321:831;;;;;;;;:::o;26158:410::-;26198:7;26221:20;26239:1;26221:20;:::i;:::-;26216:25;;26255:20;26273:1;26255:20;:::i;:::-;26250:25;;26310:1;26307;26303:9;26332:30;26350:11;26332:30;:::i;:::-;26321:41;;26511:1;26502:7;26498:15;26495:1;26492:22;26472:1;26465:9;26445:83;26422:139;;26541:18;;:::i;:::-;26422:139;26206:362;26158:410;;;;:::o
Swarm Source
ipfs://0bae8bc5265c761a53935645b4eb8ad0fae4c75716f1de57c5782f0176a553ad
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.