Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
initializedERC20
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-05-26 */ pragma solidity ^0.6.12; // Copy of Safemoon with code refactoring, auditing and added features // // SafeMoon fixes: // 1. Corrected incorrect error message in function includeInReward // 2. Removed redundant code in function _tokenTransfer // 3. Contract gains small amount of unwithdrawable ETH/BNB when swapping so added a // withdrawOverFlowETH function so that the owner can withdraw this periodically. // 4. to address of the uniswapV2Router.addLiquidityETH function call replaced by // thecontract itself, i.e. address(this) so that the LP created by swap is locked forever. // 5. Fixed typos // Refactoring: // 1.1 Changed the contructor function into a initialize function that can only be called once. // 1.2 All the contracts variables are now only initialized once init has been called. // This change is so that we can use EIP-1167 to create new tokens in the future with the same // bytecode and allow easy creation of tokens using this code. // Added features: // 1. Added internal function transferOwnershipFromInitialized is called from init which changes // the owner from the deployer to whomever address you want. Init and transferOwnershipFromInitialized // can only be called once. // 2. Added extra fee that is set in init and allows the initializer to set an address to // receive the extra fee and set the extra fee % (This can be used for additional burn / charity / dev) // SPDX-License-Identifier: Unlicensed interface IERC20 { 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); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { 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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; bool private initializedtonewowner = false; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function transferOwnershipFromInitialized(address newOwner) internal virtual { require(!initializedtonewowner, "Contract owner has already been transfered from initialized to the new Owner"); initializedtonewowner = true; require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.6.2; 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); } // pragma solidity >=0.6.2; 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 initializedERC20 is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal; uint256 private _rTotal; uint256 private _tFeeTotal; uint256 private _xFeeTotal; string private _name; string private _symbol; uint8 private _decimals; uint256 public _taxFee; uint256 private _previousTaxFee; uint256 public _liquidityFee; uint256 private _previousLiquidityFee; address public _extrafeewallet; uint256 public _extraFeePercent; uint256 public _previousExtraFeePercent; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; uint256 public _maxTxAmount; // the min number of // tokens that we need to initiate a swap + liquidity lock (normally 0.5% > 0.1% of total supply) uint256 private numTokensSellToAddToLiquidity; bool private initialized; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiquidity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } // require(bytes(name).length == 0); // ensure not init'd already. // require(bytes(_name).length > 0); function init(string memory name, string memory symbol, uint256 totalsupply, uint8 decimals, uint256 maxtxamount, uint256 taxFee, uint256 liquidityFee, uint256 numtokenstoselltoaddtoliquidity, address extrafeewallet, uint256 extrafeepercent, address newContractOwner) public { require(!initialized, "Contract instance has already been initialized"); require(extrafeewallet != newContractOwner, "Extra Fee wallet must not be your wallet address"); initialized = true; transferOwnershipFromInitialized(newContractOwner); _name = name; _symbol = symbol; _decimals = decimals; uint256 decimalmulty = _decimals; _tTotal = totalsupply * (10**decimalmulty); _rTotal = (MAX - (MAX % _tTotal)); _maxTxAmount = maxtxamount * (10**decimalmulty); numTokensSellToAddToLiquidity = numtokenstoselltoaddtoliquidity * (10**decimalmulty); _taxFee = taxFee; _previousTaxFee = _taxFee; _liquidityFee = liquidityFee; _previousLiquidityFee = _liquidityFee; _rOwned[newContractOwner] = _rTotal; _extrafeewallet = extrafeewallet; _extraFeePercent = extrafeepercent; _previousExtraFeePercent = _extraFeePercent; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // --> TODO: Kovan or Eth PROD // NOTE: Auto-lock LP when creating the pair // 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), newContractOwner, _tTotal); } function getETHBalance() public view returns(uint) { return address(this).balance; } function withdrawOverFlowETH() public onlyOwner { address payable to = payable(msg.sender); to.transfer(getETHBalance()); } 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 taxFees() public view returns (uint256) { return _tFeeTotal; } function xFees() public view returns (uint256) { return _xFeeTotal; } 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 not 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 setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function setExtraFeePercent(uint256 extraFeePercent) external onlyOwner() { _extraFeePercent = extraFeePercent; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to receive ETH from pancakeswapV2Router when swapping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee, uint256 xFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); _xFeeTotal = _xFeeTotal.add(xFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0 && _extraFeePercent == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _previousExtraFeePercent = _extraFeePercent; _taxFee = 0; _liquidityFee = 0; _extraFeePercent = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _extraFeePercent = _previousExtraFeePercent; } 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 + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH/BNB balance. // this is so that we can capture exactly the amount of ETH/BNB that the // swap creates, and not make the liquidity event include any ETH/BNB that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH/BNB swapTokensForEth(half); // <- this breaks the ETH/BNB -> TOKEN swap when swap+liquify is triggered // how much ETH/BNB did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> bnb address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of BNB/ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: bnbAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); uint256 extraFeeAmount; if (_extraFeePercent != 0) { extraFeeAmount = rAmount / (100 / _extraFeePercent); } else { extraFeeAmount = 0; } _rOwned[sender] = _rOwned[sender].sub(rAmount); // takes amount from sender _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount).sub(extraFeeAmount); // adds amount to sender after fee and subs extraFeeAmount% for charity _rOwned[_extrafeewallet] = _rOwned[_extrafeewallet].add(extraFeeAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee, extraFeeAmount); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee, 0); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee, 0); 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 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee, 0); emit Transfer(sender, recipient, tTransferAmount); } } contract CloneFoundry { function createClone(address target) internal returns (address payable result) { bytes20 targetBytes = bytes20(target); assembly { let clone := mload(0x40) mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(clone, 0x14), targetBytes) mstore(add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) result := create(0, clone, 0x37) } } function isClone(address target, address query) internal view returns (bool result) { bytes20 targetBytes = bytes20(target); assembly { let clone := mload(0x40) mstore(clone, 0x363d3d373d3d3d363d7300000000000000000000000000000000000000000000) mstore(add(clone, 0xa), targetBytes) mstore(add(clone, 0x1e), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) let other := add(clone, 0x40) extcodecopy(query, other, 0, 0x2d) result := and( eq(mload(clone), mload(other)), eq(mload(add(clone, 0xd)), mload(add(other, 0xd))) ) } } } contract TokenFoundry is Ownable, CloneFoundry { // This is the address where the Mastercontract initializedERC20 is deployed to // address payable public masterContract = 0xEb4c4f701cb50c8dDF7B0CEd051CeB25Aed9f3CA; // master contract for bsc testnet placido factory address payable public masterContract = 0x66746FFd95053B607490A247EF58A1551bDF496c; // PROD ETH MasterContract for kovan.eth testnet jacinto factory // address to receive fees address payable public tokenfoundryboss = 0x2c095AEB336d4A520d5186493bF8fbf70Cd5Fa91; // this has to be the owner of contract address payable public tokenfoundryreferrer; //uint256 public fee = 200000000000000000; uint256 public fee = 50000000000000000; address newCloneOwner; event TokenCreated(address newTokenAddress); function createToken(string memory _name, string memory _symbol,uint256 _totalsupply, uint8 _decimals, uint256 _maxtxamount, uint256 _taxfee, uint256 _liquidityfee, uint256 _numtokenstoselltoaddtoliquidity, address _extrafeewallet, uint256 _extrafeepercent, address payable _tokenfoundryreferrer) public payable { require(msg.value == fee, "you must pay the fee"); address payable clone = createClone(masterContract); newCloneOwner = msg.sender; initializedERC20(clone).init(_name, _symbol, _totalsupply, _decimals, _maxtxamount, _taxfee, _liquidityfee, _numtokenstoselltoaddtoliquidity, _extrafeewallet, _extrafeepercent, newCloneOwner); emit TokenCreated(clone); tokenfoundryreferrer = _tokenfoundryreferrer; _forwardFunds(); // Sends fee to referrer } function changeFee(uint256 _fee) public onlyOwner { fee = _fee; } function _forwardFunds() internal { uint256 split = msg.value / 2; tokenfoundryreferrer.transfer(split); tokenfoundryboss.transfer(split); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_extraFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_extrafeewallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousExtraFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"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":"getETHBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"totalsupply","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint256","name":"maxtxamount","type":"uint256"},{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"numtokenstoselltoaddtoliquidity","type":"uint256"},{"internalType":"address","name":"extrafeewallet","type":"address"},{"internalType":"uint256","name":"extrafeepercent","type":"uint256"},{"internalType":"address","name":"newContractOwner","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"extraFeePercent","type":"uint256"}],"name":"setExtraFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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"},{"inputs":[],"name":"withdrawOverFlowETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"xFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600360006101000a81548160ff0219169083151502179055506000601960156101000a81548160ff0219169083151502179055503480156200004757600080fd5b5060006200005a620000fe60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000106565b600033905090565b6156af80620001166000396000f3fe60806040526004361061024a5760003560e01c80636e94729811610139578063a9059cbb116100b6578063d543dbeb1161007a578063d543dbeb14610e40578063d863f0e714610e7b578063dd62ed3e14610e92578063ea2f0b3714610f17578063f2fde38b14610f68578063f995ed9e14610fb957610251565b8063a9059cbb14610ceb578063acfb8dce14610d5c578063b2c8977014610d9d578063c49b9a8014610dd8578063cbb24fea14610e1557610251565b80638da5cb5b116100fd5780638da5cb5b14610b435780638e63aeff14610b845780638ee88c5314610baf57806395d89b4114610bea578063a457c2d714610c7a57610251565b80636e94729814610a0a57806370a0823114610a35578063715018a614610a9a5780637d1db4a514610ab157806388f8202014610adc57610251565b80633685d419116101c757806349bd5a5e1161018b57806349bd5a5e146108b95780634a74bb02146108fa57806352390c02146109275780635342acb4146109785780636bc87c3a146109df57610251565b80633685d4191461072057806339509351146107715780633b124fe7146107e2578063437823ec1461080d5780634549b0391461085e57610251565b806318160ddd1161020e57806318160ddd146103fe57806323b872dd146104295780632d838119146104ba578063313ce56714610509578063356a4d6b1461053757610251565b8063061c82d01461025657806306fdde0314610291578063095ea7b3146103215780630ddc0976146103925780631694505e146103bd57610251565b3661025157005b600080fd5b34801561026257600080fd5b5061028f6004803603602081101561027957600080fd5b8101908080359060200190929190505050610fe4565b005b34801561029d57600080fd5b506102a66110b6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102e65780820151818401526020810190506102cb565b50505050905090810190601f1680156103135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032d57600080fd5b5061037a6004803603604081101561034457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611158565b60405180821515815260200191505060405180910390f35b34801561039e57600080fd5b506103a7611176565b6040518082815260200191505060405180910390f35b3480156103c957600080fd5b506103d2611180565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561040a57600080fd5b506104136111a6565b6040518082815260200191505060405180910390f35b34801561043557600080fd5b506104a26004803603606081101561044c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111b0565b60405180821515815260200191505060405180910390f35b3480156104c657600080fd5b506104f3600480360360208110156104dd57600080fd5b8101908080359060200190929190505050611289565b6040518082815260200191505060405180910390f35b34801561051557600080fd5b5061051e61130d565b604051808260ff16815260200191505060405180910390f35b34801561054357600080fd5b5061071e600480360361016081101561055b57600080fd5b810190808035906020019064010000000081111561057857600080fd5b82018360208201111561058a57600080fd5b803590602001918460018302840111640100000000831117156105ac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561060f57600080fd5b82018360208201111561062157600080fd5b8035906020019184600183028401116401000000008311171561064357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611324565b005b34801561072c57600080fd5b5061076f6004803603602081101561074357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611910565b005b34801561077d57600080fd5b506107ca6004803603604081101561079457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c9a565b60405180821515815260200191505060405180910390f35b3480156107ee57600080fd5b506107f7611d4d565b6040518082815260200191505060405180910390f35b34801561081957600080fd5b5061085c6004803603602081101561083057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d53565b005b34801561086a57600080fd5b506108a36004803603604081101561088157600080fd5b8101908080359060200190929190803515159060200190929190505050611e76565b6040518082815260200191505060405180910390f35b3480156108c557600080fd5b506108ce611f2d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561090657600080fd5b5061090f611f53565b60405180821515815260200191505060405180910390f35b34801561093357600080fd5b506109766004803603602081101561094a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f66565b005b34801561098457600080fd5b506109c76004803603602081101561099b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612280565b60405180821515815260200191505060405180910390f35b3480156109eb57600080fd5b506109f46122d6565b6040518082815260200191505060405180910390f35b348015610a1657600080fd5b50610a1f6122dc565b6040518082815260200191505060405180910390f35b348015610a4157600080fd5b50610a8460048036036020811015610a5857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122e4565b6040518082815260200191505060405180910390f35b348015610aa657600080fd5b50610aaf6123cf565b005b348015610abd57600080fd5b50610ac6612555565b6040518082815260200191505060405180910390f35b348015610ae857600080fd5b50610b2b60048036036020811015610aff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061255b565b60405180821515815260200191505060405180910390f35b348015610b4f57600080fd5b50610b586125b1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b9057600080fd5b50610b996125da565b6040518082815260200191505060405180910390f35b348015610bbb57600080fd5b50610be860048036036020811015610bd257600080fd5b81019080803590602001909291905050506125e0565b005b348015610bf657600080fd5b50610bff6126b2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c3f578082015181840152602081019050610c24565b50505050905090810190601f168015610c6c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c8657600080fd5b50610cd360048036036040811015610c9d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612754565b60405180821515815260200191505060405180910390f35b348015610cf757600080fd5b50610d4460048036036040811015610d0e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612821565b60405180821515815260200191505060405180910390f35b348015610d6857600080fd5b50610d7161283f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610da957600080fd5b50610dd660048036036020811015610dc057600080fd5b8101908080359060200190929190505050612865565b005b348015610de457600080fd5b50610e1360048036036020811015610dfb57600080fd5b81019080803515159060200190929190505050612937565b005b348015610e2157600080fd5b50610e2a612a55565b6040518082815260200191505060405180910390f35b348015610e4c57600080fd5b50610e7960048036036020811015610e6357600080fd5b8101908080359060200190929190505050612a5b565b005b348015610e8757600080fd5b50610e90612b54565b005b348015610e9e57600080fd5b50610f0160048036036040811015610eb557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c72565b6040518082815260200191505060405180910390f35b348015610f2357600080fd5b50610f6660048036036020811015610f3a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cf9565b005b348015610f7457600080fd5b50610fb760048036036020811015610f8b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e1c565b005b348015610fc557600080fd5b50610fce613027565b6040518082815260200191505060405180910390f35b610fec613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600e8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561114e5780601f106111235761010080835404028352916020019161114e565b820191906000526020600020905b81548152906001019060200180831161113157829003601f168201915b5050505050905090565b600061116c611165613031565b8484613039565b6001905092915050565b6000600c54905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b60006111bd848484613230565b61127e846111c9613031565b6112798560405180606001604052806028815260200161555d60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061122f613031565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f79092919063ffffffff16565b613039565b600190509392505050565b6000600b548211156112e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615456602a913960400191505060405180910390fd5b60006112f06136b7565b905061130581846136e290919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b601c60009054906101000a900460ff161561138a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806155ae602e913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561140f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806155dc6030913960400191505060405180910390fd5b6001601c60006101000a81548160ff0219169083151502179055506114338161372c565b8a600e9080519060200190611449929190615395565b5089600f9080519060200190611460929190615395565b5087601060006101000a81548160ff021916908360ff1602179055506000601060009054906101000a900460ff1660ff16905080600a0a8a02600a81905550600a54600019816114ac57fe5b0660001903600b8190555080600a0a8802601a8190555080600a0a8502601b819055508660118190555060115460128190555085601381905550601354601481905550600b54600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826016819055506016546017819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e557600080fd5b505afa1580156115f9573d6000803e3d6000fd5b505050506040513d602081101561160f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561168257600080fd5b505afa158015611696573d6000803e3d6000fd5b505050506040513d60208110156116ac57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561172657600080fd5b505af115801561173a573d6000803e3d6000fd5b505050506040513d602081101561175057600080fd5b8101908080519060200190929190505050601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760006117f06125b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040518082815260200191505060405180910390a350505050505050505050505050565b611918613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4163636f756e74206973206e6f74206578636c7564656400000000000000000081525060200191505060405180910390fd5b60005b600980549050811015611c96578173ffffffffffffffffffffffffffffffffffffffff1660098281548110611acb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611c8957600960016009805490500381548110611b2757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110611b5f57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480611c4f57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611c96565b8080600101915050611a9a565b5050565b6000611d43611ca7613031565b84611d3e8560066000611cb8613031565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b613039565b6001905092915050565b60115481565b611d5b613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a54831115611ef0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611f10576000611f0084613978565b5050505050905080915050611f27565b6000611f1b84613978565b50505050915050809150505b92915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960159054906101000a900460ff1681565b611f6e613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156121c25761217e600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611289565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600047905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561237f57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506123ca565b6123c7600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611289565b90505b919050565b6123d7613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612497576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601a5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60165481565b6125e8613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b6060600f8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b5050505050905090565b6000612817612761613031565b8461281285604051806060016040528060258152602001615655602591396006600061278b613031565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f79092919063ffffffff16565b613039565b6001905092915050565b600061283561282e613031565b8484613230565b6001905092915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61286d613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461292d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060168190555050565b61293f613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601960156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b60175481565b612a63613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612b4b6064612b3d83600a546139d490919063ffffffff16565b6136e290919063ffffffff16565b601a8190555050565b612b5c613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60003390508073ffffffffffffffffffffffffffffffffffffffff166108fc612c436122dc565b9081150290604051600060405180830381858888f19350505050158015612c6e573d6000803e3d6000fd5b5050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612d01613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612e24613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ee4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154cc6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600d54905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156316024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613145576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154f26022913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061560c6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561333c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154336023913960400191505060405180910390fd5b60008111613395576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806155856029913960400191505060405180910390fd5b61339d6125b1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561340b57506133db6125b1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561346c57601a5481111561346b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806155146028913960400191505060405180910390fd5b5b6000613477306122e4565b9050601a54811061348857601a5490505b6000601b5482101590508080156134ac5750601960149054906101000a900460ff16155b80156135065750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561351e5750601960159054906101000a900460ff165b1561353257601b54915061353182613a5a565b5b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135d95750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135e357600090505b6135ef86868684613b3c565b505050505050565b60008383111582906136a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561366957808201518184015260208101905061364e565b50505050905090810190601f1680156136965780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006136c4613d93565b915091506136db81836136e290919063ffffffff16565b9250505090565b600061372483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614024565b905092915050565b600360009054906101000a900460ff1615613792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604c815260200180615480604c913960600191505060405180910390fd5b6001600360006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613833576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154cc6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082840190508381101561396e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080600080600080600080600061398f8a6140ea565b92509250925060008060006139ad8d86866139a86136b7565b614144565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000808314156139e75760009050613a54565b60008284029050828482816139f857fe5b0414613a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061553c6021913960400191505060405180910390fd5b809150505b92915050565b6001601960146101000a81548160ff0219169083151502179055506000613a8b6002836136e290919063ffffffff16565b90506000613aa282846141cd90919063ffffffff16565b90506000479050613ab283614217565b6000613ac782476141cd90919063ffffffff16565b9050613ad383826144cb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601960146101000a81548160ff02191690831515021790555050565b80613b4a57613b49614619565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613bed5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c0257613bfd84848461467b565b613d7f565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613ca55750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613cba57613cb58484846148dd565b613d7e565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d5c5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613d7157613d6c848484614b3f565b613d7d565b613d7c848484614e36565b5b5b5b80613d8d57613d8c61511b565b5b50505050565b6000806000600b5490506000600a54905060005b600980549050811015613fe757826004600060098481548110613dc657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613ead5750816005600060098481548110613e4557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613ec457600b54600a5494509450505050614020565b613f4d6004600060098481548110613ed857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846141cd90919063ffffffff16565b9250613fd86005600060098481548110613f6357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836141cd90919063ffffffff16565b91508080600101915050613da7565b50613fff600a54600b546136e290919063ffffffff16565b82101561401757600b54600a54935093505050614020565b81819350935050505b9091565b600080831182906140d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561409557808201518184015260208101905061407a565b50505050905090810190601f1680156140c25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816140dc57fe5b049050809150509392505050565b6000806000806140f985615138565b9050600061410686615169565b9050600061412f82614121858a6141cd90919063ffffffff16565b6141cd90919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061415d85896139d490919063ffffffff16565b9050600061417486896139d490919063ffffffff16565b9050600061418b87896139d490919063ffffffff16565b905060006141b4826141a685876141cd90919063ffffffff16565b6141cd90919063ffffffff16565b9050838184965096509650505050509450945094915050565b600061420f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135f7565b905092915050565b6060600267ffffffffffffffff8111801561423157600080fd5b506040519080825280602002602001820160405280156142605781602001602082028036833780820191505090505b509050308160008151811061427157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561431357600080fd5b505afa158015614327573d6000803e3d6000fd5b505050506040513d602081101561433d57600080fd5b81019080805190602001909291905050508160018151811061435b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143c230601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613039565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561448657808201518184015260208101905061446b565b505050509050019650505050505050600060405180830381600087803b1580156144af57600080fd5b505af11580156144c3573d6000803e3d6000fd5b505050505050565b6144f830601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613039565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156145c257600080fd5b505af11580156145d6573d6000803e3d6000fd5b50505050506040513d60608110156145ed57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b600060115414801561462d57506000601354145b801561463b57506000601654145b1561464557614679565b6011546012819055506013546014819055506016546017819055506000601181905550600060138190555060006016819055505b565b60008060008060008061468d87613978565b9550955095509550955095506146eb87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cd90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061478086600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061481585600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148618161519a565b61486d8483600061533f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806148ef87613978565b95509550955095509550955061494d86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149e283600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a7785600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ac38161519a565b614acf8483600061533f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614b5187613978565b955095509550955095509550614baf87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cd90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c4486600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614cd983600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d6e85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614dba8161519a565b614dc68483600061533f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614e4887613978565b95509550955095509550955060008060165414614e7c57601654606481614e6b57fe5b048781614e7457fe5b049050614e81565b600090505b614ed387600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cd90919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f7a81614f6c88600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b6141cd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150318160046000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b60046000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061509f8261519a565b6150aa85848361533f565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050505050505050565b601254601181905550601454601381905550601754601681905550565b60006151626064615154601154856139d490919063ffffffff16565b6136e290919063ffffffff16565b9050919050565b60006151936064615185601354856139d490919063ffffffff16565b6136e290919063ffffffff16565b9050919050565b60006151a46136b7565b905060006151bb82846139d490919063ffffffff16565b905061520f81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561533a576152f683600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61535483600b546141cd90919063ffffffff16565b600b8190555061536f82600c546138f090919063ffffffff16565b600c8190555061538a81600d546138f090919063ffffffff16565b600d81905550505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106153d657805160ff1916838001178555615404565b82800160010185558215615404579182015b828111156154035782518255916020019190600101906153e8565b5b5090506154119190615415565b5090565b5b8082111561542e576000816000905550600101615416565b509056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e73436f6e7472616374206f776e65722068617320616c7265616479206265656e207472616e7366657265642066726f6d20696e697469616c697a656420746f20746865206e6577204f776e65724f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65644578747261204665652077616c6c6574206d757374206e6f7420626520796f75722077616c6c6574206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b57d7d4ada1f107c92f0eb7445499237688a3246f69a88c7a1886aed57cb59da64736f6c634300060c0033
Deployed Bytecode
0x60806040526004361061024a5760003560e01c80636e94729811610139578063a9059cbb116100b6578063d543dbeb1161007a578063d543dbeb14610e40578063d863f0e714610e7b578063dd62ed3e14610e92578063ea2f0b3714610f17578063f2fde38b14610f68578063f995ed9e14610fb957610251565b8063a9059cbb14610ceb578063acfb8dce14610d5c578063b2c8977014610d9d578063c49b9a8014610dd8578063cbb24fea14610e1557610251565b80638da5cb5b116100fd5780638da5cb5b14610b435780638e63aeff14610b845780638ee88c5314610baf57806395d89b4114610bea578063a457c2d714610c7a57610251565b80636e94729814610a0a57806370a0823114610a35578063715018a614610a9a5780637d1db4a514610ab157806388f8202014610adc57610251565b80633685d419116101c757806349bd5a5e1161018b57806349bd5a5e146108b95780634a74bb02146108fa57806352390c02146109275780635342acb4146109785780636bc87c3a146109df57610251565b80633685d4191461072057806339509351146107715780633b124fe7146107e2578063437823ec1461080d5780634549b0391461085e57610251565b806318160ddd1161020e57806318160ddd146103fe57806323b872dd146104295780632d838119146104ba578063313ce56714610509578063356a4d6b1461053757610251565b8063061c82d01461025657806306fdde0314610291578063095ea7b3146103215780630ddc0976146103925780631694505e146103bd57610251565b3661025157005b600080fd5b34801561026257600080fd5b5061028f6004803603602081101561027957600080fd5b8101908080359060200190929190505050610fe4565b005b34801561029d57600080fd5b506102a66110b6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102e65780820151818401526020810190506102cb565b50505050905090810190601f1680156103135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032d57600080fd5b5061037a6004803603604081101561034457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611158565b60405180821515815260200191505060405180910390f35b34801561039e57600080fd5b506103a7611176565b6040518082815260200191505060405180910390f35b3480156103c957600080fd5b506103d2611180565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561040a57600080fd5b506104136111a6565b6040518082815260200191505060405180910390f35b34801561043557600080fd5b506104a26004803603606081101561044c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111b0565b60405180821515815260200191505060405180910390f35b3480156104c657600080fd5b506104f3600480360360208110156104dd57600080fd5b8101908080359060200190929190505050611289565b6040518082815260200191505060405180910390f35b34801561051557600080fd5b5061051e61130d565b604051808260ff16815260200191505060405180910390f35b34801561054357600080fd5b5061071e600480360361016081101561055b57600080fd5b810190808035906020019064010000000081111561057857600080fd5b82018360208201111561058a57600080fd5b803590602001918460018302840111640100000000831117156105ac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561060f57600080fd5b82018360208201111561062157600080fd5b8035906020019184600183028401116401000000008311171561064357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611324565b005b34801561072c57600080fd5b5061076f6004803603602081101561074357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611910565b005b34801561077d57600080fd5b506107ca6004803603604081101561079457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c9a565b60405180821515815260200191505060405180910390f35b3480156107ee57600080fd5b506107f7611d4d565b6040518082815260200191505060405180910390f35b34801561081957600080fd5b5061085c6004803603602081101561083057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d53565b005b34801561086a57600080fd5b506108a36004803603604081101561088157600080fd5b8101908080359060200190929190803515159060200190929190505050611e76565b6040518082815260200191505060405180910390f35b3480156108c557600080fd5b506108ce611f2d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561090657600080fd5b5061090f611f53565b60405180821515815260200191505060405180910390f35b34801561093357600080fd5b506109766004803603602081101561094a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f66565b005b34801561098457600080fd5b506109c76004803603602081101561099b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612280565b60405180821515815260200191505060405180910390f35b3480156109eb57600080fd5b506109f46122d6565b6040518082815260200191505060405180910390f35b348015610a1657600080fd5b50610a1f6122dc565b6040518082815260200191505060405180910390f35b348015610a4157600080fd5b50610a8460048036036020811015610a5857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122e4565b6040518082815260200191505060405180910390f35b348015610aa657600080fd5b50610aaf6123cf565b005b348015610abd57600080fd5b50610ac6612555565b6040518082815260200191505060405180910390f35b348015610ae857600080fd5b50610b2b60048036036020811015610aff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061255b565b60405180821515815260200191505060405180910390f35b348015610b4f57600080fd5b50610b586125b1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b9057600080fd5b50610b996125da565b6040518082815260200191505060405180910390f35b348015610bbb57600080fd5b50610be860048036036020811015610bd257600080fd5b81019080803590602001909291905050506125e0565b005b348015610bf657600080fd5b50610bff6126b2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c3f578082015181840152602081019050610c24565b50505050905090810190601f168015610c6c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c8657600080fd5b50610cd360048036036040811015610c9d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612754565b60405180821515815260200191505060405180910390f35b348015610cf757600080fd5b50610d4460048036036040811015610d0e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612821565b60405180821515815260200191505060405180910390f35b348015610d6857600080fd5b50610d7161283f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610da957600080fd5b50610dd660048036036020811015610dc057600080fd5b8101908080359060200190929190505050612865565b005b348015610de457600080fd5b50610e1360048036036020811015610dfb57600080fd5b81019080803515159060200190929190505050612937565b005b348015610e2157600080fd5b50610e2a612a55565b6040518082815260200191505060405180910390f35b348015610e4c57600080fd5b50610e7960048036036020811015610e6357600080fd5b8101908080359060200190929190505050612a5b565b005b348015610e8757600080fd5b50610e90612b54565b005b348015610e9e57600080fd5b50610f0160048036036040811015610eb557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c72565b6040518082815260200191505060405180910390f35b348015610f2357600080fd5b50610f6660048036036020811015610f3a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cf9565b005b348015610f7457600080fd5b50610fb760048036036020811015610f8b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e1c565b005b348015610fc557600080fd5b50610fce613027565b6040518082815260200191505060405180910390f35b610fec613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600e8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561114e5780601f106111235761010080835404028352916020019161114e565b820191906000526020600020905b81548152906001019060200180831161113157829003601f168201915b5050505050905090565b600061116c611165613031565b8484613039565b6001905092915050565b6000600c54905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b60006111bd848484613230565b61127e846111c9613031565b6112798560405180606001604052806028815260200161555d60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061122f613031565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f79092919063ffffffff16565b613039565b600190509392505050565b6000600b548211156112e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615456602a913960400191505060405180910390fd5b60006112f06136b7565b905061130581846136e290919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b601c60009054906101000a900460ff161561138a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806155ae602e913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561140f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806155dc6030913960400191505060405180910390fd5b6001601c60006101000a81548160ff0219169083151502179055506114338161372c565b8a600e9080519060200190611449929190615395565b5089600f9080519060200190611460929190615395565b5087601060006101000a81548160ff021916908360ff1602179055506000601060009054906101000a900460ff1660ff16905080600a0a8a02600a81905550600a54600019816114ac57fe5b0660001903600b8190555080600a0a8802601a8190555080600a0a8502601b819055508660118190555060115460128190555085601381905550601354601481905550600b54600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826016819055506016546017819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e557600080fd5b505afa1580156115f9573d6000803e3d6000fd5b505050506040513d602081101561160f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561168257600080fd5b505afa158015611696573d6000803e3d6000fd5b505050506040513d60208110156116ac57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561172657600080fd5b505af115801561173a573d6000803e3d6000fd5b505050506040513d602081101561175057600080fd5b8101908080519060200190929190505050601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760006117f06125b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040518082815260200191505060405180910390a350505050505050505050505050565b611918613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4163636f756e74206973206e6f74206578636c7564656400000000000000000081525060200191505060405180910390fd5b60005b600980549050811015611c96578173ffffffffffffffffffffffffffffffffffffffff1660098281548110611acb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611c8957600960016009805490500381548110611b2757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110611b5f57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480611c4f57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611c96565b8080600101915050611a9a565b5050565b6000611d43611ca7613031565b84611d3e8560066000611cb8613031565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b613039565b6001905092915050565b60115481565b611d5b613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a54831115611ef0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611f10576000611f0084613978565b5050505050905080915050611f27565b6000611f1b84613978565b50505050915050809150505b92915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960159054906101000a900460ff1681565b611f6e613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156121c25761217e600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611289565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600047905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561237f57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506123ca565b6123c7600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611289565b90505b919050565b6123d7613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612497576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601a5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60165481565b6125e8613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b6060600f8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b5050505050905090565b6000612817612761613031565b8461281285604051806060016040528060258152602001615655602591396006600061278b613031565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f79092919063ffffffff16565b613039565b6001905092915050565b600061283561282e613031565b8484613230565b6001905092915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61286d613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461292d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060168190555050565b61293f613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601960156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b60175481565b612a63613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612b4b6064612b3d83600a546139d490919063ffffffff16565b6136e290919063ffffffff16565b601a8190555050565b612b5c613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60003390508073ffffffffffffffffffffffffffffffffffffffff166108fc612c436122dc565b9081150290604051600060405180830381858888f19350505050158015612c6e573d6000803e3d6000fd5b5050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612d01613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612e24613031565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ee4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154cc6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600d54905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156316024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613145576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154f26022913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061560c6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561333c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154336023913960400191505060405180910390fd5b60008111613395576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806155856029913960400191505060405180910390fd5b61339d6125b1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561340b57506133db6125b1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561346c57601a5481111561346b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806155146028913960400191505060405180910390fd5b5b6000613477306122e4565b9050601a54811061348857601a5490505b6000601b5482101590508080156134ac5750601960149054906101000a900460ff16155b80156135065750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561351e5750601960159054906101000a900460ff165b1561353257601b54915061353182613a5a565b5b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135d95750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135e357600090505b6135ef86868684613b3c565b505050505050565b60008383111582906136a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561366957808201518184015260208101905061364e565b50505050905090810190601f1680156136965780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006136c4613d93565b915091506136db81836136e290919063ffffffff16565b9250505090565b600061372483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614024565b905092915050565b600360009054906101000a900460ff1615613792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604c815260200180615480604c913960600191505060405180910390fd5b6001600360006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613833576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154cc6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082840190508381101561396e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080600080600080600080600061398f8a6140ea565b92509250925060008060006139ad8d86866139a86136b7565b614144565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000808314156139e75760009050613a54565b60008284029050828482816139f857fe5b0414613a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061553c6021913960400191505060405180910390fd5b809150505b92915050565b6001601960146101000a81548160ff0219169083151502179055506000613a8b6002836136e290919063ffffffff16565b90506000613aa282846141cd90919063ffffffff16565b90506000479050613ab283614217565b6000613ac782476141cd90919063ffffffff16565b9050613ad383826144cb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601960146101000a81548160ff02191690831515021790555050565b80613b4a57613b49614619565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613bed5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c0257613bfd84848461467b565b613d7f565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613ca55750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613cba57613cb58484846148dd565b613d7e565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d5c5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613d7157613d6c848484614b3f565b613d7d565b613d7c848484614e36565b5b5b5b80613d8d57613d8c61511b565b5b50505050565b6000806000600b5490506000600a54905060005b600980549050811015613fe757826004600060098481548110613dc657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613ead5750816005600060098481548110613e4557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613ec457600b54600a5494509450505050614020565b613f4d6004600060098481548110613ed857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846141cd90919063ffffffff16565b9250613fd86005600060098481548110613f6357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836141cd90919063ffffffff16565b91508080600101915050613da7565b50613fff600a54600b546136e290919063ffffffff16565b82101561401757600b54600a54935093505050614020565b81819350935050505b9091565b600080831182906140d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561409557808201518184015260208101905061407a565b50505050905090810190601f1680156140c25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816140dc57fe5b049050809150509392505050565b6000806000806140f985615138565b9050600061410686615169565b9050600061412f82614121858a6141cd90919063ffffffff16565b6141cd90919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061415d85896139d490919063ffffffff16565b9050600061417486896139d490919063ffffffff16565b9050600061418b87896139d490919063ffffffff16565b905060006141b4826141a685876141cd90919063ffffffff16565b6141cd90919063ffffffff16565b9050838184965096509650505050509450945094915050565b600061420f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135f7565b905092915050565b6060600267ffffffffffffffff8111801561423157600080fd5b506040519080825280602002602001820160405280156142605781602001602082028036833780820191505090505b509050308160008151811061427157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561431357600080fd5b505afa158015614327573d6000803e3d6000fd5b505050506040513d602081101561433d57600080fd5b81019080805190602001909291905050508160018151811061435b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143c230601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613039565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561448657808201518184015260208101905061446b565b505050509050019650505050505050600060405180830381600087803b1580156144af57600080fd5b505af11580156144c3573d6000803e3d6000fd5b505050505050565b6144f830601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613039565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156145c257600080fd5b505af11580156145d6573d6000803e3d6000fd5b50505050506040513d60608110156145ed57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b600060115414801561462d57506000601354145b801561463b57506000601654145b1561464557614679565b6011546012819055506013546014819055506016546017819055506000601181905550600060138190555060006016819055505b565b60008060008060008061468d87613978565b9550955095509550955095506146eb87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cd90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061478086600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061481585600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148618161519a565b61486d8483600061533f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806148ef87613978565b95509550955095509550955061494d86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149e283600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a7785600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ac38161519a565b614acf8483600061533f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614b5187613978565b955095509550955095509550614baf87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cd90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c4486600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614cd983600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d6e85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614dba8161519a565b614dc68483600061533f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614e4887613978565b95509550955095509550955060008060165414614e7c57601654606481614e6b57fe5b048781614e7457fe5b049050614e81565b600090505b614ed387600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cd90919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f7a81614f6c88600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b6141cd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150318160046000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b60046000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061509f8261519a565b6150aa85848361533f565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050505050505050565b601254601181905550601454601381905550601754601681905550565b60006151626064615154601154856139d490919063ffffffff16565b6136e290919063ffffffff16565b9050919050565b60006151936064615185601354856139d490919063ffffffff16565b6136e290919063ffffffff16565b9050919050565b60006151a46136b7565b905060006151bb82846139d490919063ffffffff16565b905061520f81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561533a576152f683600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61535483600b546141cd90919063ffffffff16565b600b8190555061536f82600c546138f090919063ffffffff16565b600c8190555061538a81600d546138f090919063ffffffff16565b600d81905550505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106153d657805160ff1916838001178555615404565b82800160010185558215615404579182015b828111156154035782518255916020019190600101906153e8565b5b5090506154119190615415565b5090565b5b8082111561542e576000816000905550600101615416565b509056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e73436f6e7472616374206f776e65722068617320616c7265616479206265656e207472616e7366657265642066726f6d20696e697469616c697a656420746f20746865206e6577204f776e65724f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65644578747261204665652077616c6c6574206d757374206e6f7420626520796f75722077616c6c6574206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b57d7d4ada1f107c92f0eb7445499237688a3246f69a88c7a1886aed57cb59da64736f6c634300060c0033
Deployed Bytecode Sourcemap
26769:20806:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35284:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31151:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32063:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33184:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27867:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31428:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32232:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33822:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31337:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28801:2070;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34538:475;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32553:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27562:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35039:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33378:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27915:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27984:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34083:447;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39551:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27645:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30885:98;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31531:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17694:148;;;;;;;;;;;;;:::i;:::-;;28038:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33056:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17051:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27773:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35394:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31242:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32779:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31737:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27736:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35701:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35840:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27811:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35527:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30991:146;;;;;;;;;;;;;:::i;:::-;;31912:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35162:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17997:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33281:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35284:98;17273:12;:10;:12::i;:::-;17263:22;;:6;;;;;;;;;;:22;;;17255:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35368:6:::1;35358:7;:16;;;;35284:98:::0;:::o;31151:83::-;31188:13;31221:5;31214:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31151:83;:::o;32063:161::-;32138:4;32155:39;32164:12;:10;:12::i;:::-;32178:7;32187:6;32155:8;:39::i;:::-;32212:4;32205:11;;32063:161;;;;:::o;33184:85::-;33224:7;33251:10;;33244:17;;33184:85;:::o;27867:41::-;;;;;;;;;;;;;:::o;31428:95::-;31481:7;31508;;31501:14;;31428:95;:::o;32232:313::-;32330:4;32347:36;32357:6;32365:9;32376:6;32347:9;:36::i;:::-;32394:121;32403:6;32411:12;:10;:12::i;:::-;32425:89;32463:6;32425:89;;;;;;;;;;;;;;;;;:11;:19;32437:6;32425:19;;;;;;;;;;;;;;;:33;32445:12;:10;:12::i;:::-;32425:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;32394:8;:121::i;:::-;32533:4;32526:11;;32232:313;;;;;:::o;33822:253::-;33888:7;33927;;33916;:18;;33908:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33992:19;34015:10;:8;:10::i;:::-;33992:33;;34043:24;34055:11;34043:7;:11;;:24;;;;:::i;:::-;34036:31;;;33822:253;;;:::o;31337:83::-;31378:5;31403:9;;;;;;;;;;;31396:16;;31337:83;:::o;28801:2070::-;29096:11;;;;;;;;;;;29095:12;29087:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29195:16;29177:34;;:14;:34;;;;29169:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29299:4;29285:11;;:18;;;;;;;;;;;;;;;;;;29324:50;29357:16;29324:32;:50::i;:::-;29403:4;29395:5;:12;;;;;;;;;;;;:::i;:::-;;29428:6;29418:7;:16;;;;;;;;;;;;:::i;:::-;;29457:8;29445:9;;:20;;;;;;;;;;;;;;;;;;29476;29499:9;;;;;;;;;;;29476:32;;;;29548:12;29544:2;:16;29529:11;:32;29519:7;:42;;;;29596:7;;27269:1;27260:11;29590:13;;;;;;27269:1;27260:11;29583:21;29572:7;:33;;;;29650:12;29646:2;:16;29631:11;:32;29616:12;:47;;;;29745:12;29741:2;:16;29706:31;:52;29674:29;:84;;;;29779:6;29769:7;:16;;;;29814:7;;29796:15;:25;;;;29848:12;29832:13;:28;;;;29895:13;;29871:21;:37;;;;29957:7;;29929;:25;29937:16;29929:25;;;;;;;;;;;;;;;:35;;;;30004:14;29986:15;;:32;;;;;;;;;;;;;;;;;;30049:15;30030:16;:34;;;;30102:16;;30075:24;:43;;;;30139:35;30196:42;30139:100;;30432:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30414:70;;;30493:4;30500:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30414:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30398:13;;:126;;;;;;;;;;;;;;;;;;30606:16;30588:15;;:34;;;;;;;;;;;;;;;;;;30725:4;30695:18;:27;30714:7;:5;:7::i;:::-;30695:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;30776:4;30740:18;:33;30767:4;30740:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;30837:16;30816:47;;30833:1;30816:47;;;30855:7;;30816:47;;;;;;;;;;;;;;;;;;28801:2070;;;;;;;;;;;;;:::o;34538:475::-;17273:12;:10;:12::i;:::-;17263:22;;:6;;;;;;;;;;:22;;;17255:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34620:11:::1;:20;34632:7;34620:20;;;;;;;;;;;;;;;;;;;;;;;;;34612:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34684:9;34679:327;34703:9;:16;;;;34699:1;:20;34679:327;;;34761:7;34745:23;;:9;34755:1;34745:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;34741:254;;;34804:9;34833:1;34814:9;:16;;;;:20;34804:31;;;;;;;;;;;;;;;;;;;;;;;;;34789:9;34799:1;34789:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34873:1;34854:7;:16;34862:7;34854:16;;;;;;;;;;;;;;;:20;;;;34916:5;34893:11;:20;34905:7;34893:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34940:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34974:5;;34741:254;34721:3;;;;;;;34679:327;;;;34538:475:::0;:::o;32553:218::-;32641:4;32658:83;32667:12;:10;:12::i;:::-;32681:7;32690:50;32729:10;32690:11;:25;32702:12;:10;:12::i;:::-;32690:25;;;;;;;;;;;;;;;:34;32716:7;32690:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32658:8;:83::i;:::-;32759:4;32752:11;;32553:218;;;;:::o;27562:22::-;;;;:::o;35039:111::-;17273:12;:10;:12::i;:::-;17263:22;;:6;;;;;;;;;;:22;;;17255:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35138:4:::1;35108:18;:27;35127:7;35108:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;35039:111:::0;:::o;33378:436::-;33468:7;33507;;33496;:18;;33488:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33566:17;33561:246;;33601:15;33625:19;33636:7;33625:10;:19::i;:::-;33600:44;;;;;;;33666:7;33659:14;;;;;33561:246;33708:23;33739:19;33750:7;33739:10;:19::i;:::-;33706:52;;;;;;;33780:15;33773:22;;;33378:436;;;;;:::o;27915:28::-;;;;;;;;;;;;;:::o;27984:41::-;;;;;;;;;;;;;:::o;34083:447::-;17273:12;:10;:12::i;:::-;17263:22;;:6;;;;;;;;;;:22;;;17255:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34280:11:::1;:20;34292:7;34280:20;;;;;;;;;;;;;;;;;;;;;;;;;34279:21;34271:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34365:1;34346:7;:16;34354:7;34346:16;;;;;;;;;;;;;;;;:20;34343:108;;;34402:37;34422:7;:16;34430:7;34422:16;;;;;;;;;;;;;;;;34402:19;:37::i;:::-;34383:7;:16;34391:7;34383:16;;;;;;;;;;;;;;;:56;;;;34343:108;34484:4;34461:11;:20;34473:7;34461:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34499:9;34514:7;34499:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34083:447:::0;:::o;39551:123::-;39615:4;39639:18;:27;39658:7;39639:27;;;;;;;;;;;;;;;;;;;;;;;;;39632:34;;39551:123;;;:::o;27645:28::-;;;;:::o;30885:98::-;30930:4;30954:21;30947:28;;30885:98;:::o;31531:198::-;31597:7;31621:11;:20;31633:7;31621:20;;;;;;;;;;;;;;;;;;;;;;;;;31617:49;;;31650:7;:16;31658:7;31650:16;;;;;;;;;;;;;;;;31643:23;;;;31617:49;31684:37;31704:7;:16;31712:7;31704:16;;;;;;;;;;;;;;;;31684:19;:37::i;:::-;31677:44;;31531:198;;;;:::o;17694:148::-;17273:12;:10;:12::i;:::-;17263:22;;:6;;;;;;;;;;:22;;;17255:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17801:1:::1;17764:40;;17785:6;::::0;::::1;;;;;;;;17764:40;;;;;;;;;;;;17832:1;17815:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17694:148::o:0;28038:27::-;;;;:::o;33056:120::-;33124:4;33148:11;:20;33160:7;33148:20;;;;;;;;;;;;;;;;;;;;;;;;;33141:27;;33056:120;;;:::o;17051:79::-;17089:7;17116:6;;;;;;;;;;;17109:13;;17051:79;:::o;27773:31::-;;;;:::o;35394:122::-;17273:12;:10;:12::i;:::-;17263:22;;:6;;;;;;;;;;:22;;;17255:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35496:12:::1;35480:13;:28;;;;35394:122:::0;:::o;31242:87::-;31281:13;31314:7;31307:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31242:87;:::o;32779:269::-;32872:4;32889:129;32898:12;:10;:12::i;:::-;32912:7;32921:96;32960:15;32921:96;;;;;;;;;;;;;;;;;:11;:25;32933:12;:10;:12::i;:::-;32921:25;;;;;;;;;;;;;;;:34;32947:7;32921:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;32889:8;:129::i;:::-;33036:4;33029:11;;32779:269;;;;:::o;31737:167::-;31815:4;31832:42;31842:12;:10;:12::i;:::-;31856:9;31867:6;31832:9;:42::i;:::-;31892:4;31885:11;;31737:167;;;;:::o;27736:30::-;;;;;;;;;;;;;:::o;35701:127::-;17273:12;:10;:12::i;:::-;17263:22;;:6;;;;;;;;;;:22;;;17255:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35805:15:::1;35786:16;:34;;;;35701:127:::0;:::o;35840:171::-;17273:12;:10;:12::i;:::-;17263:22;;:6;;;;;;;;;;:22;;;17255:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35941:8:::1;35917:21;;:32;;;;;;;;;;;;;;;;;;35965:38;35994:8;35965:38;;;;;;;;;;;;;;;;;;;;35840:171:::0;:::o;27811:39::-;;;;:::o;35527:162::-;17273:12;:10;:12::i;:::-;17263:22;;:6;;;;;;;;;;:22;;;17255:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35621:60:::1;35665:5;35621:25;35633:12;35621:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;35606:12;:75;;;;35527:162:::0;:::o;30991:146::-;17273:12;:10;:12::i;:::-;17263:22;;:6;;;;;;;;;;:22;;;17255:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31050:18:::1;31079:10;31050:40;;31101:2;:11;;:28;31113:15;:13;:15::i;:::-;31101:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;17333:1;30991:146::o:0;31912:143::-;31993:7;32020:11;:18;32032:5;32020:18;;;;;;;;;;;;;;;:27;32039:7;32020:27;;;;;;;;;;;;;;;;32013:34;;31912:143;;;;:::o;35162:110::-;17273:12;:10;:12::i;:::-;17263:22;;:6;;;;;;;;;;:22;;;17255:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35259:5:::1;35229:18;:27;35248:7;35229:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35162:110:::0;:::o;17997:244::-;17273:12;:10;:12::i;:::-;17263:22;;:6;;;;;;;;;;:22;;;17255:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18106:1:::1;18086:22;;:8;:22;;;;18078:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18196:8;18167:38;;18188:6;::::0;::::1;;;;;;;;18167:38;;;;;;;;;;;;18225:8;18216:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17997:244:::0;:::o;33281:83::-;33319:7;33346:10;;33339:17;;33281:83;:::o;9404:106::-;9457:15;9492:10;9485:17;;9404:106;:::o;39682:337::-;39792:1;39775:19;;:5;:19;;;;39767:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39873:1;39854:21;;:7;:21;;;;39846:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39957:6;39927:11;:18;39939:5;39927:18;;;;;;;;;;;;;;;:27;39946:7;39927:27;;;;;;;;;;;;;;;:36;;;;39995:7;39979:32;;39988:5;39979:32;;;40004:6;39979:32;;;;;;;;;;;;;;;;;;39682:337;;;:::o;40027:1813::-;40165:1;40149:18;;:4;:18;;;;40141:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40242:1;40228:16;;:2;:16;;;;40220:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40312:1;40303:6;:10;40295:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40381:7;:5;:7::i;:::-;40373:15;;:4;:15;;;;:32;;;;;40398:7;:5;:7::i;:::-;40392:13;;:2;:13;;;;40373:32;40370:125;;;40438:12;;40428:6;:22;;40420:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40370:125;40790:28;40821:24;40839:4;40821:9;:24::i;:::-;40790:55;;40893:12;;40869:20;:36;40866:112;;40954:12;;40931:35;;40866:112;40998:24;41049:29;;41025:20;:53;;40998:80;;41107:19;:53;;;;;41144:16;;;;;;;;;;;41143:17;41107:53;:91;;;;;41185:13;;;;;;;;;;;41177:21;;:4;:21;;;;41107:91;:129;;;;;41215:21;;;;;;;;;;;41107:129;41089:318;;;41286:29;;41263:52;;41359:36;41374:20;41359:14;:36::i;:::-;41089:318;41488:12;41503:4;41488:19;;41615:18;:24;41634:4;41615:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;41643:18;:22;41662:2;41643:22;;;;;;;;;;;;;;;;;;;;;;;;;41615:50;41612:96;;;41691:5;41681:15;;41612:96;41794:38;41809:4;41814:2;41817:6;41824:7;41794:14;:38::i;:::-;40027:1813;;;;;;:::o;5814:192::-;5900:7;5933:1;5928;:6;;5936:12;5920:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5960:9;5976:1;5972;:5;5960:17;;5997:1;5990:8;;;5814:192;;;;;:::o;37537:163::-;37578:7;37599:15;37616;37635:19;:17;:19::i;:::-;37598:56;;;;37672:20;37684:7;37672;:11;;:20;;;;:::i;:::-;37665:27;;;;37537:163;:::o;7212:132::-;7270:7;7297:39;7301:1;7304;7297:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7290:46;;7212:132;;;;:::o;18253:412::-;18350:21;;;;;;;;;;;18349:22;18341:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18487:4;18463:21;;:28;;;;;;;;;;;;;;;;;;18530:1;18510:22;;:8;:22;;;;18502:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18620:8;18591:38;;18612:6;;;;;;;;;;18591:38;;;;;;;;;;;;18649:8;18640:6;;:17;;;;;;;;;;;;;;;;;;18253:412;:::o;4911:181::-;4969:7;4989:9;5005:1;5001;:5;4989:17;;5030:1;5025;:6;;5017:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5083:1;5076:8;;;4911:181;;;;:::o;36335:419::-;36394:7;36403;36412;36421;36430;36439;36460:23;36485:12;36499:18;36521:20;36533:7;36521:11;:20::i;:::-;36459:82;;;;;;36553:15;36570:23;36595:12;36611:50;36623:7;36632:4;36638:10;36650;:8;:10::i;:::-;36611:11;:50::i;:::-;36552:109;;;;;;36680:7;36689:15;36706:4;36712:15;36729:4;36735:10;36672:74;;;;;;;;;;;;;;;;;;36335:419;;;;;;;:::o;6265:471::-;6323:7;6573:1;6568;:6;6564:47;;;6598:1;6591:8;;;;6564:47;6623:9;6639:1;6635;:5;6623:17;;6668:1;6663;6659;:5;;;;;;:10;6651:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6727:1;6720:8;;;6265:471;;;;;:::o;41848:1010::-;28610:4;28591:16;;:23;;;;;;;;;;;;;;;;;;41984:12:::1;41999:27;42024:1;41999:20;:24;;:27;;;;:::i;:::-;41984:42;;42037:17;42057:30;42082:4;42057:20;:24;;:30;;;;:::i;:::-;42037:50;;42377:22;42402:21;42377:46;;42472:22;42489:4;42472:16;:22::i;:::-;42634:18;42655:41;42681:14;42655:21;:25;;:41;;;;:::i;:::-;42634:62;;42746:35;42759:9;42770:10;42746:12;:35::i;:::-;42807:43;42822:4;42828:10;42840:9;42807:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28625:1;;;;28656:5:::0;28637:16;;:24;;;;;;;;;;;;;;;;;;41848:1010;:::o;44066:704::-;44177:7;44173:40;;44199:14;:12;:14::i;:::-;44173:40;44238:11;:19;44250:6;44238:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;44262:11;:22;44274:9;44262:22;;;;;;;;;;;;;;;;;;;;;;;;;44261:23;44238:46;44234:467;;;44301:48;44323:6;44331:9;44342:6;44301:21;:48::i;:::-;44234:467;;;44372:11;:19;44384:6;44372:19;;;;;;;;;;;;;;;;;;;;;;;;;44371:20;:46;;;;;44395:11;:22;44407:9;44395:22;;;;;;;;;;;;;;;;;;;;;;;;;44371:46;44367:334;;;44434:46;44454:6;44462:9;44473:6;44434:19;:46::i;:::-;44367:334;;;44502:11;:19;44514:6;44502:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;44525:11;:22;44537:9;44525:22;;;;;;;;;;;;;;;;;;;;;;;;;44502:45;44498:203;;;44564:48;44586:6;44594:9;44605:6;44564:21;:48::i;:::-;44498:203;;;44645:44;44663:6;44671:9;44682:6;44645:17;:44::i;:::-;44498:203;44367:334;44234:467;44725:7;44721:41;;44747:15;:13;:15::i;:::-;44721:41;44066:704;;;;:::o;37708:561::-;37758:7;37767;37787:15;37805:7;;37787:25;;37823:15;37841:7;;37823:25;;37870:9;37865:289;37889:9;:16;;;;37885:1;:20;37865:289;;;37955:7;37931;:21;37939:9;37949:1;37939:12;;;;;;;;;;;;;;;;;;;;;;;;;37931:21;;;;;;;;;;;;;;;;:31;:66;;;;37990:7;37966;:21;37974:9;37984:1;37974:12;;;;;;;;;;;;;;;;;;;;;;;;;37966:21;;;;;;;;;;;;;;;;:31;37931:66;37927:97;;;38007:7;;38016;;37999:25;;;;;;;;;37927:97;38049:34;38061:7;:21;38069:9;38079:1;38069:12;;;;;;;;;;;;;;;;;;;;;;;;;38061:21;;;;;;;;;;;;;;;;38049:7;:11;;:34;;;;:::i;:::-;38039:44;;38108:34;38120:7;:21;38128:9;38138:1;38128:12;;;;;;;;;;;;;;;;;;;;;;;;;38120:21;;;;;;;;;;;;;;;;38108:7;:11;;:34;;;;:::i;:::-;38098:44;;37907:3;;;;;;;37865:289;;;;38178:20;38190:7;;38178;;:11;;:20;;;;:::i;:::-;38168:7;:30;38164:61;;;38208:7;;38217;;38200:25;;;;;;;;38164:61;38244:7;38253;38236:25;;;;;;37708:561;;;:::o;7840:278::-;7926:7;7958:1;7954;:5;7961:12;7946:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7985:9;8001:1;7997;:5;;;;;;7985:17;;8109:1;8102:8;;;7840:278;;;;;:::o;36762:330::-;36822:7;36831;36840;36860:12;36875:24;36891:7;36875:15;:24::i;:::-;36860:39;;36910:18;36931:30;36953:7;36931:21;:30::i;:::-;36910:51;;36972:23;36998:33;37020:10;36998:17;37010:4;36998:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36972:59;;37050:15;37067:4;37073:10;37042:42;;;;;;;;;36762:330;;;;;:::o;37100:429::-;37215:7;37224;37233;37253:15;37271:24;37283:11;37271:7;:11;;:24;;;;:::i;:::-;37253:42;;37306:12;37321:21;37330:11;37321:4;:8;;:21;;;;:::i;:::-;37306:36;;37353:18;37374:27;37389:11;37374:10;:14;;:27;;;;:::i;:::-;37353:48;;37412:23;37438:33;37460:10;37438:17;37450:4;37438:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;37412:59;;37490:7;37499:15;37516:4;37482:39;;;;;;;;;;37100:429;;;;;;;;:::o;5375:136::-;5433:7;5460:43;5464:1;5467;5460:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5453:50;;5375:136;;;;:::o;42866:592::-;42991:21;43029:1;43015:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42991:40;;43060:4;43042;43047:1;43042:7;;;;;;;;;;;;;:23;;;;;;;;;;;43086:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43076:4;43081:1;43076:7;;;;;;;;;;;;;:32;;;;;;;;;;;43121:62;43138:4;43153:15;;;;;;;;;;;43171:11;43121:8;:62::i;:::-;43222:15;;;;;;;;;;;:66;;;43303:11;43329:1;43377:4;43404;43424:15;43222:228;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42866:592;;:::o;43466:519::-;43614:62;43631:4;43646:15;;;;;;;;;;;43664:11;43614:8;:62::i;:::-;43719:15;;;;;;;;;;;:31;;;43758:9;43791:4;43811:11;43837:1;43880;43931:4;43951:15;43719:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43466:519;;:::o;38988:360::-;39045:1;39034:7;;:12;:34;;;;;39067:1;39050:13;;:18;39034:34;:59;;;;;39092:1;39072:16;;:21;39034:59;39031:71;;;39095:7;;39031:71;39140:7;;39122:15;:25;;;;39182:13;;39158:21;:37;;;;39233:16;;39206:24;:43;;;;39280:1;39270:7;:11;;;;39308:1;39292:13;:17;;;;39339:1;39320:16;:20;;;;38988:360;:::o;46346:569::-;46449:15;46466:23;46491:12;46505:23;46530:12;46544:18;46566:19;46577:7;46566:10;:19::i;:::-;46448:137;;;;;;;;;;;;46614:28;46634:7;46614;:15;46622:6;46614:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46596:7;:15;46604:6;46596:15;;;;;;;;;;;;;;;:46;;;;46671:28;46691:7;46671;:15;46679:6;46671:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46653:7;:15;46661:6;46653:15;;;;;;;;;;;;;;;:46;;;;46731:39;46754:15;46731:7;:18;46739:9;46731:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;46710:7;:18;46718:9;46710:18;;;;;;;;;;;;;;;:60;;;;46784:26;46799:10;46784:14;:26::i;:::-;46821;46833:4;46839;46845:1;46821:11;:26::i;:::-;46880:9;46863:44;;46872:6;46863:44;;;46891:15;46863:44;;;;;;;;;;;;;;;;;;46346:569;;;;;;;;;:::o;45749:589::-;45850:15;45867:23;45892:12;45906:23;45931:12;45945:18;45967:19;45978:7;45967:10;:19::i;:::-;45849:137;;;;;;;;;;;;46015:28;46035:7;46015;:15;46023:6;46015:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45997:7;:15;46005:6;45997:15;;;;;;;;;;;;;;;:46;;;;46075:39;46098:15;46075:7;:18;46083:9;46075:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;46054:7;:18;46062:9;46054:18;;;;;;;;;;;;;;;:60;;;;46146:39;46169:15;46146:7;:18;46154:9;46146:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;46125:7;:18;46133:9;46125:18;;;;;;;;;;;;;;;:60;;;;46207:26;46222:10;46207:14;:26::i;:::-;46244;46256:4;46262;46268:1;46244:11;:26::i;:::-;46303:9;46286:44;;46295:6;46286:44;;;46314:15;46286:44;;;;;;;;;;;;;;;;;;45749:589;;;;;;;;;:::o;46927:645::-;47030:15;47047:23;47072:12;47086:23;47111:12;47125:18;47147:19;47158:7;47147:10;:19::i;:::-;47029:137;;;;;;;;;;;;47195:28;47215:7;47195;:15;47203:6;47195:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47177:7;:15;47185:6;47177:15;;;;;;;;;;;;;;;:46;;;;47252:28;47272:7;47252;:15;47260:6;47252:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47234:7;:15;47242:6;47234:15;;;;;;;;;;;;;;;:46;;;;47312:39;47335:15;47312:7;:18;47320:9;47312:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47291:7;:18;47299:9;47291:18;;;;;;;;;;;;;;;:60;;;;47383:39;47406:15;47383:7;:18;47391:9;47383:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47362:7;:18;47370:9;47362:18;;;;;;;;;;;;;;;:60;;;;47441:26;47456:10;47441:14;:26::i;:::-;47478;47490:4;47496;47502:1;47478:11;:26::i;:::-;47537:9;47520:44;;47529:6;47520:44;;;47548:15;47520:44;;;;;;;;;;;;;;;;;;46927:645;;;;;;;;;:::o;44778:963::-;44877:15;44894:23;44919:12;44933:23;44958:12;44972:18;44994:19;45005:7;44994:10;:19::i;:::-;44876:137;;;;;;;;;;;;45034:22;45101:1;45081:16;;:21;45077:158;;45153:16;;45147:3;:22;;;;;;45136:7;:34;;;;;;45119:51;;45077:158;;;45222:1;45205:18;;45077:158;45265:28;45285:7;45265;:15;45273:6;45265:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45247:7;:15;45255:6;45247:15;;;;;;;;;;;;;;;:46;;;;45353:59;45397:14;45353:39;45376:15;45353:7;:18;45361:9;45353:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;:43;;:59;;;;:::i;:::-;45332:7;:18;45340:9;45332:18;;;;;;;;;;;;;;;:80;;;;45532:44;45561:14;45532:7;:24;45540:15;;;;;;;;;;;45532:24;;;;;;;;;;;;;;;;:28;;:44;;;;:::i;:::-;45505:7;:24;45513:15;;;;;;;;;;;45505:24;;;;;;;;;;;;;;;:71;;;;45597:26;45612:10;45597:14;:26::i;:::-;45634:39;45646:4;45652;45658:14;45634:11;:39::i;:::-;45706:9;45689:44;;45698:6;45689:44;;;45717:15;45689:44;;;;;;;;;;;;;;;;;;44778:963;;;;;;;;;;:::o;39360:179::-;39414:15;;39404:7;:25;;;;39456:21;;39440:13;:37;;;;39507:24;;39488:16;:43;;;;39360:179::o;38648:154::-;38712:7;38739:55;38778:5;38739:20;38751:7;;38739;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;38732:62;;38648:154;;;:::o;38810:166::-;38880:7;38907:61;38952:5;38907:26;38919:13;;38907:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;38900:68;;38810:166;;;:::o;38281:355::-;38344:19;38367:10;:8;:10::i;:::-;38344:33;;38388:18;38409:27;38424:11;38409:10;:14;;:27;;;;:::i;:::-;38388:48;;38472:38;38499:10;38472:7;:22;38488:4;38472:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;38447:7;:22;38463:4;38447:22;;;;;;;;;;;;;;;:63;;;;38524:11;:26;38544:4;38524:26;;;;;;;;;;;;;;;;;;;;;;;;;38521:107;;;38590:38;38617:10;38590:7;:22;38606:4;38590:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;38565:7;:22;38581:4;38565:22;;;;;;;;;;;;;;;:63;;;;38521:107;38281:355;;;:::o;36122:205::-;36214:17;36226:4;36214:7;;:11;;:17;;;;:::i;:::-;36204:7;:27;;;;36255:20;36270:4;36255:10;;:14;;:20;;;;:::i;:::-;36242:10;:33;;;;36299:20;36314:4;36299:10;;:14;;:20;;;;:::i;:::-;36286:10;:33;;;;36122:205;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://b57d7d4ada1f107c92f0eb7445499237688a3246f69a88c7a1886aed57cb59da
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.