Overview
Max Total Supply
1,000,000,000,000,000 SFSHLD
Holders
812 (0.00%)
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SafeShield
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-27 */ pragma solidity 0.8.4; // SPDX-License-Identifier: Apache-2.0 // ,,,,,,,,,,,,,, ,,,,,,,,,,,,, // ,,,,,,,,,,,,,, ,,,,,,,,,,,,, // ,,,, ,,,, // ,,,, ,,,, // ,,,,,,,,,,,,,,,,, ,,,, // ,,,,,,,,,,,,,,,,,,,, ,,,, // ,,,,, ,,,, // ,,,, ,,,, ,,,,, ,,,, // ,,,, ,,,, ,,,, ,,,, // ,,,,, ,,,, ,,,,. ,,,, // ,,,, ,,,,,,,,,,, ,,,, // ,,,,, ,,,,,, ,,,,, // ,,,,,, ,,,,,, // ,,,,,,,,,,,,,,,,,,,, // .,,,,,,,,,,,. // // SAFE SHIELD // // https://t.me/safeshieldtoken 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) { 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; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // 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 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 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 SafeShield is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; uint256 private _totalSupply = 1000000000000000 * 10**9; string private _name = "Safe Shield"; string private _symbol = "SFSHLD"; uint8 private _decimals = 9; uint256 public _liquidityFee = 2; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _devFee = 5; uint256 private _previousDevFee = _devFee; address payable private _teamDevAddress; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool currentlySwapping; bool public swapAndRedirectEthFeesEnabled = true; uint256 private tokensSoldThresholdForEthSwap = 10000 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndRedirectEthFeesUpdated(bool enabled); event OnSwapAndRedirectEthFees( uint256 tokensSwapped, uint256 ethToLiquidity, uint256 ethToDevWallet ); modifier lockTheSwap { currentlySwapping = true; _; currentlySwapping = false; } constructor () { _balances[_msgSender()] = _totalSupply; emit Transfer(address(0), _msgSender(), _totalSupply); } function initContract() external onlyOwner() { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; // exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _teamDevAddress = payable(0x33206057141941E54914A425716576d7e9083B3C); } 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 _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[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 _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(amount > 0, "Transfer amount must be greater than zero"); // 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)); bool overMinTokenBalance = contractTokenBalance >= tokensSoldThresholdForEthSwap; if ( overMinTokenBalance && !currentlySwapping && from != uniswapV2Pair && swapAndRedirectEthFeesEnabled ) { // add liquidity and dev eth fees swapAndRedirectEthFees(contractTokenBalance); } // transfer amount _tokenTransfer(from, to, amount); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { removeAllFee(); } (uint256 tTransferAmount, uint256 tLiquidity, uint256 tDev) = _getValues(amount); _balances[sender] = _balances[sender].sub(tTransferAmount); _balances[recipient] = _balances[recipient].add(tTransferAmount); _takeLiquidity(tLiquidity); _takeDevFee(tDev); if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { restoreAllFee(); } emit Transfer(sender, recipient, tTransferAmount); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tDev = calculateDevFee(tAmount); uint256 tTransferAmount = tAmount.sub(tLiquidity).sub(tDev); return (tTransferAmount, tLiquidity, tDev); } function _takeLiquidity(uint256 liquidityAmount) private { _balances[address(this)] = _balances[address(this)].add(liquidityAmount); } function _takeDevFee(uint256 devAmount) private { _balances[address(this)] = _balances[address(this)].add(devAmount); } function calculateDevFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_devFee).div(100); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(100); } function removeAllFee() private { if(_liquidityFee == 0 && _devFee== 0) return; _previousLiquidityFee = _liquidityFee; _previousDevFee = _devFee; _liquidityFee = 0; _devFee = 0; } function restoreAllFee() private { _liquidityFee = _previousLiquidityFee; _devFee = _previousDevFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function swapAndRedirectEthFees(uint256 contractTokenBalance) private lockTheSwap { // balance token fees based on variable percents uint256 totalRedirectTokenFee = _devFee.add(_liquidityFee); uint256 liquidityTokenBalance = contractTokenBalance.mul(_liquidityFee).div(totalRedirectTokenFee); uint256 devTokenBalance = contractTokenBalance.mul(_devFee).div(totalRedirectTokenFee); // split the liquidity balance into halves uint256 halfLiquidity = liquidityTokenBalance.div(2); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the fee events include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(devTokenBalance.add(halfLiquidity)); uint256 newBalance = address(this).balance.sub(initialBalance); if(newBalance > 0) { // rebalance ETH fees proportionally to half the liquidity uint256 totalRedirectEthFee = _devFee.add(_liquidityFee.div(2)); uint256 liquidityEthBalance = newBalance.mul(_liquidityFee.div(2)).div(totalRedirectEthFee); uint256 devEthBalance = newBalance.mul(_devFee).div(totalRedirectEthFee); // // for liquidity // add to uniswap // addLiquidity(halfLiquidity, liquidityEthBalance); // // for dev fee // send to the dev address // sendEthToDevAddress(devEthBalance); emit OnSwapAndRedirectEthFees(contractTokenBalance, liquidityEthBalance, devEthBalance); } } function sendEthToDevAddress(uint256 amount) private { _teamDevAddress.transfer(amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount} ( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function manualSwap() external onlyOwner() { uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualSend() external onlyOwner() { uint256 contractEthBalance = address(this).balance; sendEthToDevAddress(contractEthBalance); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function disableAllFees() external onlyOwner() { _devFee = 0; _liquidityFee = 0; _previousLiquidityFee = _liquidityFee; _previousDevFee = _devFee; swapAndRedirectEthFeesEnabled = false; emit SwapAndRedirectEthFeesUpdated(false); } function _setDevWallet(address payable teamDevAddress) external onlyOwner() { _teamDevAddress = teamDevAddress; } function setRouterAddress(address newRouter) public onlyOwner() { IUniswapV2Router02 _newUniswapRouter = IUniswapV2Router02(newRouter); uniswapV2Pair = IUniswapV2Factory(_newUniswapRouter.factory()).createPair(address(this), _newUniswapRouter.WETH()); uniswapV2Router = _newUniswapRouter; } function setSwapAndRedirectEthFeesEnabled(bool _enabled) public onlyOwner { swapAndRedirectEthFeesEnabled = _enabled; emit SwapAndRedirectEthFeesUpdated(_enabled); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethToLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethToDevWallet","type":"uint256"}],"name":"OnSwapAndRedirectEthFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndRedirectEthFeesUpdated","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":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"teamDevAddress","type":"address"}],"name":"_setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":[],"name":"initContract","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":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndRedirectEthFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndRedirectEthFeesEnabled","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405269d3c21bcecceda10000006004556040518060400160405280600b81526020017f5361666520536869656c64000000000000000000000000000000000000000000815250600590805190602001906200005f9291906200029f565b506040518060400160405280600681526020017f534653484c44000000000000000000000000000000000000000000000000000081525060069080519060200190620000ad9291906200029f565b506009600760006101000a81548160ff021916908360ff16021790555060026008556008546009556005600a55600a54600b556001600e60156101000a81548160ff0219169083151502179055506509184e72a000600f553480156200011257600080fd5b506000620001256200029760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060045460016000620001da6200029760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002286200029760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405162000289919062000360565b60405180910390a3620003ec565b600033905090565b828054620002ad9062000387565b90600052602060002090601f016020900481019282620002d157600085556200031d565b82601f10620002ec57805160ff19168380011785556200031d565b828001600101855582156200031d579182015b828111156200031c578251825591602001919060010190620002ff565b5b5090506200032c919062000330565b5090565b5b808211156200034b57600081600090555060010162000331565b5090565b6200035a816200037d565b82525050565b60006020820190506200037760008301846200034f565b92915050565b6000819050919050565b60006002820490506001821680620003a057607f821691505b60208210811415620003b757620003b6620003bd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613a1980620003fc6000396000f3fe6080604052600436106101c65760003560e01c80635342acb4116100f757806395d89b4111610095578063dd62ed3e11610064578063dd62ed3e1461062b578063ea2f0b3714610668578063f2fde38b14610691578063f4293890146106ba576101cd565b806395d89b411461055b578063a457c2d714610586578063a9059cbb146105c3578063aa45026b14610600576101cd565b8063715018a6116100d1578063715018a6146104eb578063741af87f146105025780638203f5fe146105195780638da5cb5b14610530576101cd565b80635342acb4146104465780636bc87c3a1461048357806370a08231146104ae576101cd565b806326b6308d1161016457806341cb87fc1161013e57806341cb87fc146103b2578063437823ec146103db57806349bd5a5e1461040457806351bc3c851461042f576101cd565b806326b6308d14610321578063313ce5671461034a5780633950935114610375576101cd565b8063113201fa116101a0578063113201fa146102635780631694505e1461028e57806318160ddd146102b957806323b872dd146102e4576101cd565b806306fdde03146101d2578063095ea7b3146101fd5780630a1f8ea81461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e76106d1565b6040516101f4919061321b565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f9190612e5c565b610763565b60405161023191906131e5565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190612da8565b610781565b005b34801561026f57600080fd5b5061027861085a565b60405161028591906131e5565b60405180910390f35b34801561029a57600080fd5b506102a361086d565b6040516102b09190613200565b60405180910390f35b3480156102c557600080fd5b506102ce610893565b6040516102db919061333d565b60405180910390f35b3480156102f057600080fd5b5061030b60048036038101906103069190612e0d565b61089d565b60405161031891906131e5565b60405180910390f35b34801561032d57600080fd5b5061034860048036038101906103439190612e98565b610976565b005b34801561035657600080fd5b5061035f610a5f565b60405161036c91906133e9565b60405180910390f35b34801561038157600080fd5b5061039c60048036038101906103979190612e5c565b610a76565b6040516103a991906131e5565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d49190612d56565b610b29565b005b3480156103e757600080fd5b5061040260048036038101906103fd9190612d56565b610dcf565b005b34801561041057600080fd5b50610419610ebf565b6040516104269190613140565b60405180910390f35b34801561043b57600080fd5b50610444610ee5565b005b34801561045257600080fd5b5061046d60048036038101906104689190612d56565b610f93565b60405161047a91906131e5565b60405180910390f35b34801561048f57600080fd5b50610498610fe9565b6040516104a5919061333d565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d09190612d56565b610fef565b6040516104e2919061333d565b60405180910390f35b3480156104f757600080fd5b50610500611038565b005b34801561050e57600080fd5b5061051761118b565b005b34801561052557600080fd5b5061052e611297565b005b34801561053c57600080fd5b5061054561165c565b6040516105529190613140565b60405180910390f35b34801561056757600080fd5b50610570611685565b60405161057d919061321b565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a89190612e5c565b611717565b6040516105ba91906131e5565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190612e5c565b6117e4565b6040516105f791906131e5565b60405180910390f35b34801561060c57600080fd5b50610615611802565b604051610622919061333d565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190612dd1565b611808565b60405161065f919061333d565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190612d56565b61188f565b005b34801561069d57600080fd5b506106b860048036038101906106b39190612d56565b61197f565b005b3480156106c657600080fd5b506106cf611b41565b005b6060600580546106e09061363e565b80601f016020809104026020016040519081016040528092919081815260200182805461070c9061363e565b80156107595780601f1061072e57610100808354040283529160200191610759565b820191906000526020600020905b81548152906001019060200180831161073c57829003601f168201915b5050505050905090565b6000610777610770611be7565b8484611bef565b6001905092915050565b610789611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080d906132bd565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60159054906101000a900460ff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b60006108aa848484611dba565b61096b846108b6611be7565b6109668560405180606001604052806028815260200161399760289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061091c611be7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f319092919063ffffffff16565b611bef565b600190509392505050565b61097e611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a02906132bd565b60405180910390fd5b80600e60156101000a81548160ff0219169083151502179055507fd9fca2a469120637ae54e43ab68dfdcd9354db52d615dea3d3a66a085e6f41b981604051610a5491906131e5565b60405180910390a150565b6000600760009054906101000a900460ff16905090565b6000610b1f610a83611be7565b84610b1a8560026000610a94611be7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9590919063ffffffff16565b611bef565b6001905092915050565b610b31611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb5906132bd565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c0957600080fd5b505afa158015610c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c419190612d7f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610ca357600080fd5b505afa158015610cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdb9190612d7f565b6040518363ffffffff1660e01b8152600401610cf892919061315b565b602060405180830381600087803b158015610d1257600080fd5b505af1158015610d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4a9190612d7f565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610dd7611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b906132bd565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610eed611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f71906132bd565b60405180910390fd5b6000610f8530610fef565b9050610f9081611ff3565b50565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611040611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c4906132bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611193611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611217906132bd565b60405180910390fd5b6000600a819055506000600881905550600854600981905550600a54600b819055506000600e60156101000a81548160ff0219169083151502179055507fd9fca2a469120637ae54e43ab68dfdcd9354db52d615dea3d3a66a085e6f41b9600060405161128d91906131e5565b60405180910390a1565b61129f611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611323906132bd565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561138b57600080fd5b505afa15801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c39190612d7f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561142557600080fd5b505afa158015611439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145d9190612d7f565b6040518363ffffffff1660e01b815260040161147a92919061315b565b602060405180830381600087803b15801561149457600080fd5b505af11580156114a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cc9190612d7f565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016003600061155b61165c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507333206057141941e54914a425716576d7e9083b3c600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546116949061363e565b80601f01602080910402602001604051908101604052809291908181526020018280546116c09061363e565b801561170d5780601f106116e25761010080835404028352916020019161170d565b820191906000526020600020905b8154815290600101906020018083116116f057829003601f168201915b5050505050905090565b60006117da611724611be7565b846117d5856040518060600160405280602581526020016139bf602591396002600061174e611be7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f319092919063ffffffff16565b611bef565b6001905092915050565b60006117f86117f1611be7565b8484611dba565b6001905092915050565b600a5481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611897611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b906132bd565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611987611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b906132bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7b9061323d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b49611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd906132bd565b60405180910390fd5b6000479050611be4816122b7565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c569061331d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc69061325d565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611dad919061333d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e21906132fd565b60405180910390fd5b60008111611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e64906132dd565b60405180910390fd5b6000611e7830610fef565b90506000600f548210159050808015611e9e5750600e60149054906101000a900460ff16155b8015611ef85750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611f105750600e60159054906101000a900460ff165b15611f1f57611f1e82612323565b5b611f2a858585612514565b5050505050565b6000838311158290611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f70919061321b565b60405180910390fd5b5060008385611f88919061353a565b9050809150509392505050565b6000808284611fa49190613459565b905083811015611fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe09061327d565b60405180910390fd5b8091505092915050565b6000600267ffffffffffffffff811115612036577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156120645781602001602082028036833780820191505090505b50905030816000815181106120a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561214457600080fd5b505afa158015612158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217c9190612d7f565b816001815181106121b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061221d30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611bef565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612281959493929190613358565b600060405180830381600087803b15801561229b57600080fd5b505af11580156122af573d6000803e3d6000fd5b505050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561231f573d6000803e3d6000fd5b5050565b6001600e60146101000a81548160ff0219169083151502179055506000612357600854600a54611f9590919063ffffffff16565b90506000612382826123746008548661282f90919063ffffffff16565b6128aa90919063ffffffff16565b905060006123ad8361239f600a548761282f90919063ffffffff16565b6128aa90919063ffffffff16565b905060006123c56002846128aa90919063ffffffff16565b905060004790506123e76123e28385611f9590919063ffffffff16565b611ff3565b60006123fc82476128f490919063ffffffff16565b905060008111156124f057600061243361242260026008546128aa90919063ffffffff16565b600a54611f9590919063ffffffff16565b905060006124718261246361245460026008546128aa90919063ffffffff16565b8661282f90919063ffffffff16565b6128aa90919063ffffffff16565b9050600061249c8361248e600a548761282f90919063ffffffff16565b6128aa90919063ffffffff16565b90506124a8868361293e565b6124b1816122b7565b7fde5dc13a2b8fbf9f269bdce69d222005ffba359902a9bb02390154e42a89ced38a83836040516124e4939291906133b2565b60405180910390a15050505b5050505050506000600e60146101000a81548160ff02191690831515021790555050565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125b55750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125c3576125c2612a32565b5b60008060006125d184612a75565b92509250925061262983600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126be83600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9590919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061270a82612acf565b61271381612b67565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127b45750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127c2576127c1612bff565b5b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161281f919061333d565b60405180910390a3505050505050565b60008083141561284257600090506128a4565b6000828461285091906134e0565b905082848261285f91906134af565b1461289f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128969061329d565b60405180910390fd5b809150505b92915050565b60006128ec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c13565b905092915050565b600061293683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f31565b905092915050565b61296b30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611bef565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129b761165c565b426040518863ffffffff1660e01b81526004016129d996959493929190613184565b6060604051808303818588803b1580156129f257600080fd5b505af1158015612a06573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a2b9190612ec1565b5050505050565b6000600854148015612a4657506000600a54145b15612a5057612a73565b600854600981905550600a54600b8190555060006008819055506000600a819055505b565b600080600080612a8485612c76565b90506000612a9186612ca7565b90506000612aba82612aac858a6128f490919063ffffffff16565b6128f490919063ffffffff16565b90508083839550955095505050509193909250565b612b2181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9590919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b612bb981600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9590919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b600954600881905550600b54600a81905550565b60008083118290612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c51919061321b565b60405180910390fd5b5060008385612c6991906134af565b9050809150509392505050565b6000612ca06064612c926008548561282f90919063ffffffff16565b6128aa90919063ffffffff16565b9050919050565b6000612cd16064612cc3600a548561282f90919063ffffffff16565b6128aa90919063ffffffff16565b9050919050565b600081359050612ce78161393a565b92915050565b600081519050612cfc8161393a565b92915050565b600081359050612d1181613951565b92915050565b600081359050612d2681613968565b92915050565b600081359050612d3b8161397f565b92915050565b600081519050612d508161397f565b92915050565b600060208284031215612d6857600080fd5b6000612d7684828501612cd8565b91505092915050565b600060208284031215612d9157600080fd5b6000612d9f84828501612ced565b91505092915050565b600060208284031215612dba57600080fd5b6000612dc884828501612d02565b91505092915050565b60008060408385031215612de457600080fd5b6000612df285828601612cd8565b9250506020612e0385828601612cd8565b9150509250929050565b600080600060608486031215612e2257600080fd5b6000612e3086828701612cd8565b9350506020612e4186828701612cd8565b9250506040612e5286828701612d2c565b9150509250925092565b60008060408385031215612e6f57600080fd5b6000612e7d85828601612cd8565b9250506020612e8e85828601612d2c565b9150509250929050565b600060208284031215612eaa57600080fd5b6000612eb884828501612d17565b91505092915050565b600080600060608486031215612ed657600080fd5b6000612ee486828701612d41565b9350506020612ef586828701612d41565b9250506040612f0686828701612d41565b9150509250925092565b6000612f1c8383612f28565b60208301905092915050565b612f318161356e565b82525050565b612f408161356e565b82525050565b6000612f5182613414565b612f5b8185613437565b9350612f6683613404565b8060005b83811015612f97578151612f7e8882612f10565b9750612f898361342a565b925050600181019050612f6a565b5085935050505092915050565b612fad81613592565b82525050565b612fbc816135d5565b82525050565b612fcb816135f9565b82525050565b6000612fdc8261341f565b612fe68185613448565b9350612ff681856020860161360b565b612fff816136fd565b840191505092915050565b6000613017602683613448565b91506130228261370e565b604082019050919050565b600061303a602283613448565b91506130458261375d565b604082019050919050565b600061305d601b83613448565b9150613068826137ac565b602082019050919050565b6000613080602183613448565b915061308b826137d5565b604082019050919050565b60006130a3602083613448565b91506130ae82613824565b602082019050919050565b60006130c6602983613448565b91506130d18261384d565b604082019050919050565b60006130e9602583613448565b91506130f48261389c565b604082019050919050565b600061310c602483613448565b9150613117826138eb565b604082019050919050565b61312b816135be565b82525050565b61313a816135c8565b82525050565b60006020820190506131556000830184612f37565b92915050565b60006040820190506131706000830185612f37565b61317d6020830184612f37565b9392505050565b600060c0820190506131996000830189612f37565b6131a66020830188613122565b6131b36040830187612fc2565b6131c06060830186612fc2565b6131cd6080830185612f37565b6131da60a0830184613122565b979650505050505050565b60006020820190506131fa6000830184612fa4565b92915050565b60006020820190506132156000830184612fb3565b92915050565b600060208201905081810360008301526132358184612fd1565b905092915050565b600060208201905081810360008301526132568161300a565b9050919050565b600060208201905081810360008301526132768161302d565b9050919050565b6000602082019050818103600083015261329681613050565b9050919050565b600060208201905081810360008301526132b681613073565b9050919050565b600060208201905081810360008301526132d681613096565b9050919050565b600060208201905081810360008301526132f6816130b9565b9050919050565b60006020820190508181036000830152613316816130dc565b9050919050565b60006020820190508181036000830152613336816130ff565b9050919050565b60006020820190506133526000830184613122565b92915050565b600060a08201905061336d6000830188613122565b61337a6020830187612fc2565b818103604083015261338c8186612f46565b905061339b6060830185612f37565b6133a86080830184613122565b9695505050505050565b60006060820190506133c76000830186613122565b6133d46020830185613122565b6133e16040830184613122565b949350505050565b60006020820190506133fe6000830184613131565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613464826135be565b915061346f836135be565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134a4576134a3613670565b5b828201905092915050565b60006134ba826135be565b91506134c5836135be565b9250826134d5576134d461369f565b5b828204905092915050565b60006134eb826135be565b91506134f6836135be565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561352f5761352e613670565b5b828202905092915050565b6000613545826135be565b9150613550836135be565b92508282101561356357613562613670565b5b828203905092915050565b60006135798261359e565b9050919050565b600061358b8261359e565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006135e0826135e7565b9050919050565b60006135f28261359e565b9050919050565b6000613604826135be565b9050919050565b60005b8381101561362957808201518184015260208101905061360e565b83811115613638576000848401525b50505050565b6000600282049050600182168061365657607f821691505b6020821081141561366a576136696136ce565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6139438161356e565b811461394e57600080fd5b50565b61395a81613580565b811461396557600080fd5b50565b61397181613592565b811461397c57600080fd5b50565b613988816135be565b811461399357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122038aba8252514addbc6be352dd34eb61b536283b03a8685c0709d3525e9cbc35f64736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101c65760003560e01c80635342acb4116100f757806395d89b4111610095578063dd62ed3e11610064578063dd62ed3e1461062b578063ea2f0b3714610668578063f2fde38b14610691578063f4293890146106ba576101cd565b806395d89b411461055b578063a457c2d714610586578063a9059cbb146105c3578063aa45026b14610600576101cd565b8063715018a6116100d1578063715018a6146104eb578063741af87f146105025780638203f5fe146105195780638da5cb5b14610530576101cd565b80635342acb4146104465780636bc87c3a1461048357806370a08231146104ae576101cd565b806326b6308d1161016457806341cb87fc1161013e57806341cb87fc146103b2578063437823ec146103db57806349bd5a5e1461040457806351bc3c851461042f576101cd565b806326b6308d14610321578063313ce5671461034a5780633950935114610375576101cd565b8063113201fa116101a0578063113201fa146102635780631694505e1461028e57806318160ddd146102b957806323b872dd146102e4576101cd565b806306fdde03146101d2578063095ea7b3146101fd5780630a1f8ea81461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e76106d1565b6040516101f4919061321b565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f9190612e5c565b610763565b60405161023191906131e5565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190612da8565b610781565b005b34801561026f57600080fd5b5061027861085a565b60405161028591906131e5565b60405180910390f35b34801561029a57600080fd5b506102a361086d565b6040516102b09190613200565b60405180910390f35b3480156102c557600080fd5b506102ce610893565b6040516102db919061333d565b60405180910390f35b3480156102f057600080fd5b5061030b60048036038101906103069190612e0d565b61089d565b60405161031891906131e5565b60405180910390f35b34801561032d57600080fd5b5061034860048036038101906103439190612e98565b610976565b005b34801561035657600080fd5b5061035f610a5f565b60405161036c91906133e9565b60405180910390f35b34801561038157600080fd5b5061039c60048036038101906103979190612e5c565b610a76565b6040516103a991906131e5565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d49190612d56565b610b29565b005b3480156103e757600080fd5b5061040260048036038101906103fd9190612d56565b610dcf565b005b34801561041057600080fd5b50610419610ebf565b6040516104269190613140565b60405180910390f35b34801561043b57600080fd5b50610444610ee5565b005b34801561045257600080fd5b5061046d60048036038101906104689190612d56565b610f93565b60405161047a91906131e5565b60405180910390f35b34801561048f57600080fd5b50610498610fe9565b6040516104a5919061333d565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d09190612d56565b610fef565b6040516104e2919061333d565b60405180910390f35b3480156104f757600080fd5b50610500611038565b005b34801561050e57600080fd5b5061051761118b565b005b34801561052557600080fd5b5061052e611297565b005b34801561053c57600080fd5b5061054561165c565b6040516105529190613140565b60405180910390f35b34801561056757600080fd5b50610570611685565b60405161057d919061321b565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a89190612e5c565b611717565b6040516105ba91906131e5565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190612e5c565b6117e4565b6040516105f791906131e5565b60405180910390f35b34801561060c57600080fd5b50610615611802565b604051610622919061333d565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190612dd1565b611808565b60405161065f919061333d565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190612d56565b61188f565b005b34801561069d57600080fd5b506106b860048036038101906106b39190612d56565b61197f565b005b3480156106c657600080fd5b506106cf611b41565b005b6060600580546106e09061363e565b80601f016020809104026020016040519081016040528092919081815260200182805461070c9061363e565b80156107595780601f1061072e57610100808354040283529160200191610759565b820191906000526020600020905b81548152906001019060200180831161073c57829003601f168201915b5050505050905090565b6000610777610770611be7565b8484611bef565b6001905092915050565b610789611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080d906132bd565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60159054906101000a900460ff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b60006108aa848484611dba565b61096b846108b6611be7565b6109668560405180606001604052806028815260200161399760289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061091c611be7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f319092919063ffffffff16565b611bef565b600190509392505050565b61097e611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a02906132bd565b60405180910390fd5b80600e60156101000a81548160ff0219169083151502179055507fd9fca2a469120637ae54e43ab68dfdcd9354db52d615dea3d3a66a085e6f41b981604051610a5491906131e5565b60405180910390a150565b6000600760009054906101000a900460ff16905090565b6000610b1f610a83611be7565b84610b1a8560026000610a94611be7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9590919063ffffffff16565b611bef565b6001905092915050565b610b31611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb5906132bd565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c0957600080fd5b505afa158015610c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c419190612d7f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610ca357600080fd5b505afa158015610cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdb9190612d7f565b6040518363ffffffff1660e01b8152600401610cf892919061315b565b602060405180830381600087803b158015610d1257600080fd5b505af1158015610d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4a9190612d7f565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610dd7611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b906132bd565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610eed611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f71906132bd565b60405180910390fd5b6000610f8530610fef565b9050610f9081611ff3565b50565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611040611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c4906132bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611193611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611217906132bd565b60405180910390fd5b6000600a819055506000600881905550600854600981905550600a54600b819055506000600e60156101000a81548160ff0219169083151502179055507fd9fca2a469120637ae54e43ab68dfdcd9354db52d615dea3d3a66a085e6f41b9600060405161128d91906131e5565b60405180910390a1565b61129f611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611323906132bd565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561138b57600080fd5b505afa15801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c39190612d7f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561142557600080fd5b505afa158015611439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145d9190612d7f565b6040518363ffffffff1660e01b815260040161147a92919061315b565b602060405180830381600087803b15801561149457600080fd5b505af11580156114a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cc9190612d7f565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016003600061155b61165c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507333206057141941e54914a425716576d7e9083b3c600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546116949061363e565b80601f01602080910402602001604051908101604052809291908181526020018280546116c09061363e565b801561170d5780601f106116e25761010080835404028352916020019161170d565b820191906000526020600020905b8154815290600101906020018083116116f057829003601f168201915b5050505050905090565b60006117da611724611be7565b846117d5856040518060600160405280602581526020016139bf602591396002600061174e611be7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f319092919063ffffffff16565b611bef565b6001905092915050565b60006117f86117f1611be7565b8484611dba565b6001905092915050565b600a5481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611897611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b906132bd565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611987611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b906132bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7b9061323d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b49611be7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd906132bd565b60405180910390fd5b6000479050611be4816122b7565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c569061331d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc69061325d565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611dad919061333d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e21906132fd565b60405180910390fd5b60008111611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e64906132dd565b60405180910390fd5b6000611e7830610fef565b90506000600f548210159050808015611e9e5750600e60149054906101000a900460ff16155b8015611ef85750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611f105750600e60159054906101000a900460ff165b15611f1f57611f1e82612323565b5b611f2a858585612514565b5050505050565b6000838311158290611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f70919061321b565b60405180910390fd5b5060008385611f88919061353a565b9050809150509392505050565b6000808284611fa49190613459565b905083811015611fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe09061327d565b60405180910390fd5b8091505092915050565b6000600267ffffffffffffffff811115612036577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156120645781602001602082028036833780820191505090505b50905030816000815181106120a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561214457600080fd5b505afa158015612158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217c9190612d7f565b816001815181106121b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061221d30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611bef565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612281959493929190613358565b600060405180830381600087803b15801561229b57600080fd5b505af11580156122af573d6000803e3d6000fd5b505050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561231f573d6000803e3d6000fd5b5050565b6001600e60146101000a81548160ff0219169083151502179055506000612357600854600a54611f9590919063ffffffff16565b90506000612382826123746008548661282f90919063ffffffff16565b6128aa90919063ffffffff16565b905060006123ad8361239f600a548761282f90919063ffffffff16565b6128aa90919063ffffffff16565b905060006123c56002846128aa90919063ffffffff16565b905060004790506123e76123e28385611f9590919063ffffffff16565b611ff3565b60006123fc82476128f490919063ffffffff16565b905060008111156124f057600061243361242260026008546128aa90919063ffffffff16565b600a54611f9590919063ffffffff16565b905060006124718261246361245460026008546128aa90919063ffffffff16565b8661282f90919063ffffffff16565b6128aa90919063ffffffff16565b9050600061249c8361248e600a548761282f90919063ffffffff16565b6128aa90919063ffffffff16565b90506124a8868361293e565b6124b1816122b7565b7fde5dc13a2b8fbf9f269bdce69d222005ffba359902a9bb02390154e42a89ced38a83836040516124e4939291906133b2565b60405180910390a15050505b5050505050506000600e60146101000a81548160ff02191690831515021790555050565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125b55750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125c3576125c2612a32565b5b60008060006125d184612a75565b92509250925061262983600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126be83600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9590919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061270a82612acf565b61271381612b67565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127b45750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127c2576127c1612bff565b5b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161281f919061333d565b60405180910390a3505050505050565b60008083141561284257600090506128a4565b6000828461285091906134e0565b905082848261285f91906134af565b1461289f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128969061329d565b60405180910390fd5b809150505b92915050565b60006128ec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c13565b905092915050565b600061293683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f31565b905092915050565b61296b30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611bef565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129b761165c565b426040518863ffffffff1660e01b81526004016129d996959493929190613184565b6060604051808303818588803b1580156129f257600080fd5b505af1158015612a06573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a2b9190612ec1565b5050505050565b6000600854148015612a4657506000600a54145b15612a5057612a73565b600854600981905550600a54600b8190555060006008819055506000600a819055505b565b600080600080612a8485612c76565b90506000612a9186612ca7565b90506000612aba82612aac858a6128f490919063ffffffff16565b6128f490919063ffffffff16565b90508083839550955095505050509193909250565b612b2181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9590919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b612bb981600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9590919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b600954600881905550600b54600a81905550565b60008083118290612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c51919061321b565b60405180910390fd5b5060008385612c6991906134af565b9050809150509392505050565b6000612ca06064612c926008548561282f90919063ffffffff16565b6128aa90919063ffffffff16565b9050919050565b6000612cd16064612cc3600a548561282f90919063ffffffff16565b6128aa90919063ffffffff16565b9050919050565b600081359050612ce78161393a565b92915050565b600081519050612cfc8161393a565b92915050565b600081359050612d1181613951565b92915050565b600081359050612d2681613968565b92915050565b600081359050612d3b8161397f565b92915050565b600081519050612d508161397f565b92915050565b600060208284031215612d6857600080fd5b6000612d7684828501612cd8565b91505092915050565b600060208284031215612d9157600080fd5b6000612d9f84828501612ced565b91505092915050565b600060208284031215612dba57600080fd5b6000612dc884828501612d02565b91505092915050565b60008060408385031215612de457600080fd5b6000612df285828601612cd8565b9250506020612e0385828601612cd8565b9150509250929050565b600080600060608486031215612e2257600080fd5b6000612e3086828701612cd8565b9350506020612e4186828701612cd8565b9250506040612e5286828701612d2c565b9150509250925092565b60008060408385031215612e6f57600080fd5b6000612e7d85828601612cd8565b9250506020612e8e85828601612d2c565b9150509250929050565b600060208284031215612eaa57600080fd5b6000612eb884828501612d17565b91505092915050565b600080600060608486031215612ed657600080fd5b6000612ee486828701612d41565b9350506020612ef586828701612d41565b9250506040612f0686828701612d41565b9150509250925092565b6000612f1c8383612f28565b60208301905092915050565b612f318161356e565b82525050565b612f408161356e565b82525050565b6000612f5182613414565b612f5b8185613437565b9350612f6683613404565b8060005b83811015612f97578151612f7e8882612f10565b9750612f898361342a565b925050600181019050612f6a565b5085935050505092915050565b612fad81613592565b82525050565b612fbc816135d5565b82525050565b612fcb816135f9565b82525050565b6000612fdc8261341f565b612fe68185613448565b9350612ff681856020860161360b565b612fff816136fd565b840191505092915050565b6000613017602683613448565b91506130228261370e565b604082019050919050565b600061303a602283613448565b91506130458261375d565b604082019050919050565b600061305d601b83613448565b9150613068826137ac565b602082019050919050565b6000613080602183613448565b915061308b826137d5565b604082019050919050565b60006130a3602083613448565b91506130ae82613824565b602082019050919050565b60006130c6602983613448565b91506130d18261384d565b604082019050919050565b60006130e9602583613448565b91506130f48261389c565b604082019050919050565b600061310c602483613448565b9150613117826138eb565b604082019050919050565b61312b816135be565b82525050565b61313a816135c8565b82525050565b60006020820190506131556000830184612f37565b92915050565b60006040820190506131706000830185612f37565b61317d6020830184612f37565b9392505050565b600060c0820190506131996000830189612f37565b6131a66020830188613122565b6131b36040830187612fc2565b6131c06060830186612fc2565b6131cd6080830185612f37565b6131da60a0830184613122565b979650505050505050565b60006020820190506131fa6000830184612fa4565b92915050565b60006020820190506132156000830184612fb3565b92915050565b600060208201905081810360008301526132358184612fd1565b905092915050565b600060208201905081810360008301526132568161300a565b9050919050565b600060208201905081810360008301526132768161302d565b9050919050565b6000602082019050818103600083015261329681613050565b9050919050565b600060208201905081810360008301526132b681613073565b9050919050565b600060208201905081810360008301526132d681613096565b9050919050565b600060208201905081810360008301526132f6816130b9565b9050919050565b60006020820190508181036000830152613316816130dc565b9050919050565b60006020820190508181036000830152613336816130ff565b9050919050565b60006020820190506133526000830184613122565b92915050565b600060a08201905061336d6000830188613122565b61337a6020830187612fc2565b818103604083015261338c8186612f46565b905061339b6060830185612f37565b6133a86080830184613122565b9695505050505050565b60006060820190506133c76000830186613122565b6133d46020830185613122565b6133e16040830184613122565b949350505050565b60006020820190506133fe6000830184613131565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613464826135be565b915061346f836135be565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134a4576134a3613670565b5b828201905092915050565b60006134ba826135be565b91506134c5836135be565b9250826134d5576134d461369f565b5b828204905092915050565b60006134eb826135be565b91506134f6836135be565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561352f5761352e613670565b5b828202905092915050565b6000613545826135be565b9150613550836135be565b92508282101561356357613562613670565b5b828203905092915050565b60006135798261359e565b9050919050565b600061358b8261359e565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006135e0826135e7565b9050919050565b60006135f28261359e565b9050919050565b6000613604826135be565b9050919050565b60005b8381101561362957808201518184015260208101905061360e565b83811115613638576000848401525b50505050565b6000600282049050600182168061365657607f821691505b6020821081141561366a576136696136ce565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6139438161356e565b811461394e57600080fd5b50565b61395a81613580565b811461396557600080fd5b50565b61397181613592565b811461397c57600080fd5b50565b613988816135be565b811461399357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122038aba8252514addbc6be352dd34eb61b536283b03a8685c0709d3525e9cbc35f64736f6c63430008040033
Deployed Bytecode Sourcemap
25235:12555:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27479:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28317:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37130:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26092:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25974:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27756:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28486:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37599:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27665:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28807:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37265:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36588:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26022:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36254:156;;;;;;;;;;;;;:::i;:::-;;32962:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25738:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27864:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16721:148;;;;;;;;;;;;;:::i;:::-;;36833:289;;;;;;;;;;;;;:::i;:::-;;26769:702;;;;;;;;;;;;;:::i;:::-;;16078:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27570:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29033:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27991:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25839:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28166:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36711:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17024:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36418:162;;;;;;;;;;;;;:::i;:::-;;27479:83;27516:13;27549:5;27542:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27479:83;:::o;28317:161::-;28392:4;28409:39;28418:12;:10;:12::i;:::-;28432:7;28441:6;28409:8;:39::i;:::-;28466:4;28459:11;;28317:161;;;;:::o;37130:127::-;16300:12;:10;:12::i;:::-;16290:22;;:6;;;;;;;;;;:22;;;16282:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37235:14:::1;37217:15;;:32;;;;;;;;;;;;;;;;;;37130:127:::0;:::o;26092:48::-;;;;;;;;;;;;;:::o;25974:41::-;;;;;;;;;;;;;:::o;27756:100::-;27809:7;27836:12;;27829:19;;27756:100;:::o;28486:313::-;28584:4;28601:36;28611:6;28619:9;28630:6;28601:9;:36::i;:::-;28648:121;28657:6;28665:12;:10;:12::i;:::-;28679:89;28717:6;28679:89;;;;;;;;;;;;;;;;;:11;:19;28691:6;28679:19;;;;;;;;;;;;;;;:33;28699:12;:10;:12::i;:::-;28679:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;28648:8;:121::i;:::-;28787:4;28780:11;;28486:313;;;;;:::o;37599:188::-;16300:12;:10;:12::i;:::-;16290:22;;:6;;;;;;;;;;:22;;;16282:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37716:8:::1;37684:29;;:40;;;;;;;;;;;;;;;;;;37740:39;37770:8;37740:39;;;;;;:::i;:::-;;;;;;;;37599:188:::0;:::o;27665:83::-;27706:5;27731:9;;;;;;;;;;;27724:16;;27665:83;:::o;28807:218::-;28895:4;28912:83;28921:12;:10;:12::i;:::-;28935:7;28944:50;28983:10;28944:11;:25;28956:12;:10;:12::i;:::-;28944:25;;;;;;;;;;;;;;;:34;28970:7;28944:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;28912:8;:83::i;:::-;29013:4;29006:11;;28807:218;;;;:::o;37265:322::-;16300:12;:10;:12::i;:::-;16290:22;;:6;;;;;;;;;;:22;;;16282:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37340:36:::1;37398:9;37340:68;;37453:17;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37435:57;;;37501:4;37508:17;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37435:98;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37419:13;;:114;;;;;;;;;;;;;;;;;;37562:17;37544:15;;:35;;;;;;;;;;;;;;;;;;16360:1;37265:322:::0;:::o;36588:111::-;16300:12;:10;:12::i;:::-;16290:22;;:6;;;;;;;;;;:22;;;16282:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36687:4:::1;36657:18;:27;36676:7;36657:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;36588:111:::0;:::o;26022:28::-;;;;;;;;;;;;;:::o;36254:156::-;16300:12;:10;:12::i;:::-;16290:22;;:6;;;;;;;;;;:22;;;16282:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36308:23:::1;36334:24;36352:4;36334:9;:24::i;:::-;36308:50;;36369:33;36386:15;36369:16;:33::i;:::-;16360:1;36254:156::o:0;32962:123::-;33026:4;33050:18;:27;33069:7;33050:27;;;;;;;;;;;;;;;;;;;;;;;;;33043:34;;32962:123;;;:::o;25738:32::-;;;;:::o;27864:119::-;27930:7;27957:9;:18;27967:7;27957:18;;;;;;;;;;;;;;;;27950:25;;27864:119;;;:::o;16721:148::-;16300:12;:10;:12::i;:::-;16290:22;;:6;;;;;;;;;;:22;;;16282:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16828:1:::1;16791:40;;16812:6;::::0;::::1;;;;;;;;16791:40;;;;;;;;;;;;16859:1;16842:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16721:148::o:0;36833:289::-;16300:12;:10;:12::i;:::-;16290:22;;:6;;;;;;;;;;:22;;;16282:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36901:1:::1;36891:7;:11;;;;36929:1;36913:13;:17;;;;36965:13;;36941:21;:37;;;;37007:7;;36989:15;:25;;;;37057:5;37025:29;;:37;;;;;;;;;;;;;;;;;;37078:36;37108:5;37078:36;;;;;;:::i;:::-;;;;;;;;36833:289::o:0;26769:702::-;16300:12;:10;:12::i;:::-;16290:22;;:6;;;;;;;;;;:22;;;16282:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26825:35:::1;26882:42;26825:100;;27024:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27006:70;;;27085:4;27092:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27006:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26990:13;;:126;;;;;;;;;;;;;;;;;;27198:16;27180:15;;:34;;;;;;;;;;;;;;;;;;27318:4;27288:18;:27;27307:7;:5;:7::i;:::-;27288:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;27369:4;27333:18;:33;27360:4;27333:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;27420:42;27394:15;;:69;;;;;;;;;;;;;;;;;;16360:1;26769:702::o:0;16078:79::-;16116:7;16143:6;;;;;;;;;;;16136:13;;16078:79;:::o;27570:87::-;27609:13;27642:7;27635:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27570:87;:::o;29033:269::-;29126:4;29143:129;29152:12;:10;:12::i;:::-;29166:7;29175:96;29214:15;29175:96;;;;;;;;;;;;;;;;;:11;:25;29187:12;:10;:12::i;:::-;29175:25;;;;;;;;;;;;;;;:34;29201:7;29175:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29143:8;:129::i;:::-;29290:4;29283:11;;29033:269;;;;:::o;27991:167::-;28069:4;28086:42;28096:12;:10;:12::i;:::-;28110:9;28121:6;28086:9;:42::i;:::-;28146:4;28139:11;;27991:167;;;;:::o;25839:26::-;;;;:::o;28166:143::-;28247:7;28274:11;:18;28286:5;28274:18;;;;;;;;;;;;;;;:27;28293:7;28274:27;;;;;;;;;;;;;;;;28267:34;;28166:143;;;;:::o;36711:110::-;16300:12;:10;:12::i;:::-;16290:22;;:6;;;;;;;;;;:22;;;16282:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36808:5:::1;36778:18;:27;36797:7;36778:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;36711:110:::0;:::o;17024:244::-;16300:12;:10;:12::i;:::-;16290:22;;:6;;;;;;;;;;:22;;;16282:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17133:1:::1;17113:22;;:8;:22;;;;17105:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17223:8;17194:38;;17215:6;::::0;::::1;;;;;;;;17194:38;;;;;;;;;;;;17252:8;17243:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17024:244:::0;:::o;36418:162::-;16300:12;:10;:12::i;:::-;16290:22;;:6;;;;;;;;;;:22;;;16282:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36472:26:::1;36501:21;36472:50;;36533:39;36553:18;36533:19;:39::i;:::-;16360:1;36418:162::o:0;8572:98::-;8625:7;8652:10;8645:17;;8572:98;:::o;29310:337::-;29420:1;29403:19;;:5;:19;;;;29395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29501:1;29482:21;;:7;:21;;;;29474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29585:6;29555:11;:18;29567:5;29555:18;;;;;;;;;;;;;;;:27;29574:7;29555:27;;;;;;;;;;;;;;;:36;;;;29623:7;29607:32;;29616:5;29607:32;;;29632:6;29607:32;;;;;;:::i;:::-;;;;;;;;29310:337;;;:::o;29655:1091::-;29793:1;29777:18;;:4;:18;;;;29769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29865:1;29856:6;:10;29848:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30207:28;30238:24;30256:4;30238:9;:24::i;:::-;30207:55;;30281:24;30332:29;;30308:20;:53;;30281:80;;30390:19;:54;;;;;30427:17;;;;;;;;;;;30426:18;30390:54;:92;;;;;30469:13;;;;;;;;;;;30461:21;;:4;:21;;;;30390:92;:138;;;;;30499:29;;;;;;;;;;;30390:138;30372:286;;;30602:44;30625:20;30602:22;:44::i;:::-;30372:286;30706:32;30721:4;30727:2;30731:6;30706:14;:32::i;:::-;29655:1091;;;;;:::o;4982:192::-;5068:7;5101:1;5096;:6;;5104:12;5088:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5128:9;5144:1;5140;:5;;;;:::i;:::-;5128:17;;5165:1;5158:8;;;4982:192;;;;;:::o;4079:181::-;4137:7;4157:9;4173:1;4169;:5;;;;:::i;:::-;4157:17;;4198:1;4193;:6;;4185:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4251:1;4244:8;;;4079:181;;;;:::o;35131:589::-;35257:21;35295:1;35281:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35257:40;;35326:4;35308;35313:1;35308:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;35352:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35342:4;35347:1;35342:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;35387:62;35404:4;35419:15;;;;;;;;;;;35437:11;35387:8;:62::i;:::-;35488:15;;;;;;;;;;;:66;;;35569:11;35595:1;35639:4;35666;35686:15;35488:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35131:589;;:::o;35019:104::-;35083:15;;;;;;;;;;;:24;;:32;35108:6;35083:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35019:104;:::o;33093:1914::-;26547:4;26527:17;;:24;;;;;;;;;;;;;;;;;;33244:29:::1;33276:26;33288:13;;33276:7;;:11;;:26;;;;:::i;:::-;33244:58;;33313:29;33345:66;33389:21;33345:39;33370:13;;33345:20;:24;;:39;;;;:::i;:::-;:43;;:66;;;;:::i;:::-;33313:98;;33422:23;33448:60;33486:21;33448:33;33473:7;;33448:20;:24;;:33;;;;:::i;:::-;:37;;:60;;;;:::i;:::-;33422:86;;33581:21;33605:28;33631:1;33605:21;:25;;:28;;;;:::i;:::-;33581:52;;33914:22;33939:21;33914:46;;34013:52;34030:34;34050:13;34030:15;:19;;:34;;;;:::i;:::-;34013:16;:52::i;:::-;34086:18;34107:41;34133:14;34107:21;:25;;:41;;;;:::i;:::-;34086:62;;34185:1;34172:10;:14;34169:831;;;34275:27;34305:33;34317:20;34335:1;34317:13;;:17;;:20;;;;:::i;:::-;34305:7;;:11;;:33;;;;:::i;:::-;34275:63;;34353:27;34383:61;34424:19;34383:36;34398:20;34416:1;34398:13;;:17;;:20;;;;:::i;:::-;34383:10;:14;;:36;;;;:::i;:::-;:40;;:61;;;;:::i;:::-;34353:91;;34459:21;34483:48;34511:19;34483:23;34498:7;;34483:10;:14;;:23;;;;:::i;:::-;:27;;:48;;;;:::i;:::-;34459:72;;34647:48;34660:13;34675:19;34647:12;:48::i;:::-;34838:34;34858:13;34838:19;:34::i;:::-;34906:82;34931:20;34953:19;34974:13;34906:82;;;;;;;;:::i;:::-;;;;;;;;34169:831;;;;26562:1;;;;;;26594:5:::0;26574:17;;:25;;;;;;;;;;;;;;;;;;33093:1914;:::o;30835:696::-;30932:18;:26;30951:6;30932:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;30962:18;:29;30981:9;30962:29;;;;;;;;;;;;;;;;;;;;;;;;;30932:59;30929:105;;;31008:14;:12;:14::i;:::-;30929:105;31047:23;31072:18;31092:12;31108:18;31119:6;31108:10;:18::i;:::-;31046:80;;;;;;31157:38;31179:15;31157:9;:17;31167:6;31157:17;;;;;;;;;;;;;;;;:21;;:38;;;;:::i;:::-;31137:9;:17;31147:6;31137:17;;;;;;;;;;;;;;;:58;;;;31229:41;31254:15;31229:9;:20;31239:9;31229:20;;;;;;;;;;;;;;;;:24;;:41;;;;:::i;:::-;31206:9;:20;31216:9;31206:20;;;;;;;;;;;;;;;:64;;;;31281:26;31296:10;31281:14;:26::i;:::-;31318:17;31330:4;31318:11;:17::i;:::-;31351:18;:26;31370:6;31351:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;31381:18;:29;31400:9;31381:29;;;;;;;;;;;;;;;;;;;;;;;;;31351:59;31348:106;;;31427:15;:13;:15::i;:::-;31348:106;31496:9;31479:44;;31488:6;31479:44;;;31507:15;31479:44;;;;;;:::i;:::-;;;;;;;;30835:696;;;;;;:::o;5433:471::-;5491:7;5741:1;5736;:6;5732:47;;;5766:1;5759:8;;;;5732:47;5791:9;5807:1;5803;:5;;;;:::i;:::-;5791:17;;5836:1;5831;5827;:5;;;;:::i;:::-;:10;5819:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5895:1;5888:8;;;5433:471;;;;;:::o;6380:132::-;6438:7;6465:39;6469:1;6472;6465:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6458:46;;6380:132;;;;:::o;4543:136::-;4601:7;4628:43;4632:1;4635;4628:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4621:50;;4543:136;;;;:::o;35728:514::-;35876:62;35893:4;35908:15;;;;;;;;;;;35926:11;35876:8;:62::i;:::-;35981:15;;;;;;;;;;;:31;;;36020:9;36054:4;36074:11;36100:1;36143;36186:7;:5;:7::i;:::-;36208:15;35981:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35728:514;;:::o;32566:249::-;32629:1;32612:13;;:18;:33;;;;;32644:1;32634:7;;:11;32612:33;32609:45;;;32647:7;;32609:45;32698:13;;32674:21;:37;;;;32740:7;;32722:15;:25;;;;32784:1;32768:13;:17;;;;32806:1;32796:7;:11;;;;32566:249;:::o;31632:329::-;31691:7;31700;31709;31729:18;31750:30;31772:7;31750:21;:30::i;:::-;31729:51;;31791:12;31806:24;31822:7;31806:15;:24::i;:::-;31791:39;;31841:23;31867:33;31895:4;31867:23;31879:10;31867:7;:11;;:23;;;;:::i;:::-;:27;;:33;;;;:::i;:::-;31841:59;;31919:15;31936:10;31948:4;31911:42;;;;;;;;;31632:329;;;;;:::o;31973:148::-;32068:45;32097:15;32068:9;:24;32086:4;32068:24;;;;;;;;;;;;;;;;:28;;:45;;;;:::i;:::-;32041:9;:24;32059:4;32041:24;;;;;;;;;;;;;;;:72;;;;31973:148;:::o;32133:133::-;32219:39;32248:9;32219;:24;32237:4;32219:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;32192:9;:24;32210:4;32192:24;;;;;;;;;;;;;;;:66;;;;32133:133;:::o;32827:123::-;32886:21;;32870:13;:37;;;;32927:15;;32917:7;:25;;;;32827:123::o;7008:278::-;7094:7;7126:1;7122;:5;7129:12;7114:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7153:9;7169:1;7165;:5;;;;:::i;:::-;7153:17;;7277:1;7270:8;;;7008:278;;;;;:::o;32414:140::-;32484:7;32511:35;32542:3;32511:26;32523:13;;32511:7;:11;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;32504:42;;32414:140;;;:::o;32278:128::-;32342:7;32369:29;32394:3;32369:20;32381:7;;32369;:11;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;32362:36;;32278:128;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:155::-;355:5;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;361:95;;;;:::o;462:133::-;505:5;543:6;530:20;521:29;;559:30;583:5;559:30;:::i;:::-;511:84;;;;:::o;601:139::-;647:5;685:6;672:20;663:29;;701:33;728:5;701:33;:::i;:::-;653:87;;;;:::o;746:143::-;803:5;834:6;828:13;819:22;;850:33;877:5;850:33;:::i;:::-;809:80;;;;:::o;895:262::-;954:6;1003:2;991:9;982:7;978:23;974:32;971:2;;;1019:1;1016;1009:12;971:2;1062:1;1087:53;1132:7;1123:6;1112:9;1108:22;1087:53;:::i;:::-;1077:63;;1033:117;961:196;;;;:::o;1163:284::-;1233:6;1282:2;1270:9;1261:7;1257:23;1253:32;1250:2;;;1298:1;1295;1288:12;1250:2;1341:1;1366:64;1422:7;1413:6;1402:9;1398:22;1366:64;:::i;:::-;1356:74;;1312:128;1240:207;;;;:::o;1453:278::-;1520:6;1569:2;1557:9;1548:7;1544:23;1540:32;1537:2;;;1585:1;1582;1575:12;1537:2;1628:1;1653:61;1706:7;1697:6;1686:9;1682:22;1653:61;:::i;:::-;1643:71;;1599:125;1527:204;;;;:::o;1737:407::-;1805:6;1813;1862:2;1850:9;1841:7;1837:23;1833:32;1830:2;;;1878:1;1875;1868:12;1830:2;1921:1;1946:53;1991:7;1982:6;1971:9;1967:22;1946:53;:::i;:::-;1936:63;;1892:117;2048:2;2074:53;2119:7;2110:6;2099:9;2095:22;2074:53;:::i;:::-;2064:63;;2019:118;1820:324;;;;;:::o;2150:552::-;2227:6;2235;2243;2292:2;2280:9;2271:7;2267:23;2263:32;2260:2;;;2308:1;2305;2298:12;2260:2;2351:1;2376:53;2421:7;2412:6;2401:9;2397:22;2376:53;:::i;:::-;2366:63;;2322:117;2478:2;2504:53;2549:7;2540:6;2529:9;2525:22;2504:53;:::i;:::-;2494:63;;2449:118;2606:2;2632:53;2677:7;2668:6;2657:9;2653:22;2632:53;:::i;:::-;2622:63;;2577:118;2250:452;;;;;:::o;2708:407::-;2776:6;2784;2833:2;2821:9;2812:7;2808:23;2804:32;2801:2;;;2849:1;2846;2839:12;2801:2;2892:1;2917:53;2962:7;2953:6;2942:9;2938:22;2917:53;:::i;:::-;2907:63;;2863:117;3019:2;3045:53;3090:7;3081:6;3070:9;3066:22;3045:53;:::i;:::-;3035:63;;2990:118;2791:324;;;;;:::o;3121:256::-;3177:6;3226:2;3214:9;3205:7;3201:23;3197:32;3194:2;;;3242:1;3239;3232:12;3194:2;3285:1;3310:50;3352:7;3343:6;3332:9;3328:22;3310:50;:::i;:::-;3300:60;;3256:114;3184:193;;;;:::o;3383:596::-;3471:6;3479;3487;3536:2;3524:9;3515:7;3511:23;3507:32;3504:2;;;3552:1;3549;3542:12;3504:2;3595:1;3620:64;3676:7;3667:6;3656:9;3652:22;3620:64;:::i;:::-;3610:74;;3566:128;3733:2;3759:64;3815:7;3806:6;3795:9;3791:22;3759:64;:::i;:::-;3749:74;;3704:129;3872:2;3898:64;3954:7;3945:6;3934:9;3930:22;3898:64;:::i;:::-;3888:74;;3843:129;3494:485;;;;;:::o;3985:179::-;4054:10;4075:46;4117:3;4109:6;4075:46;:::i;:::-;4153:4;4148:3;4144:14;4130:28;;4065:99;;;;:::o;4170:108::-;4247:24;4265:5;4247:24;:::i;:::-;4242:3;4235:37;4225:53;;:::o;4284:118::-;4371:24;4389:5;4371:24;:::i;:::-;4366:3;4359:37;4349:53;;:::o;4438:732::-;4557:3;4586:54;4634:5;4586:54;:::i;:::-;4656:86;4735:6;4730:3;4656:86;:::i;:::-;4649:93;;4766:56;4816:5;4766:56;:::i;:::-;4845:7;4876:1;4861:284;4886:6;4883:1;4880:13;4861:284;;;4962:6;4956:13;4989:63;5048:3;5033:13;4989:63;:::i;:::-;4982:70;;5075:60;5128:6;5075:60;:::i;:::-;5065:70;;4921:224;4908:1;4905;4901:9;4896:14;;4861:284;;;4865:14;5161:3;5154:10;;4562:608;;;;;;;:::o;5176:109::-;5257:21;5272:5;5257:21;:::i;:::-;5252:3;5245:34;5235:50;;:::o;5291:185::-;5405:64;5463:5;5405:64;:::i;:::-;5400:3;5393:77;5383:93;;:::o;5482:147::-;5577:45;5616:5;5577:45;:::i;:::-;5572:3;5565:58;5555:74;;:::o;5635:364::-;5723:3;5751:39;5784:5;5751:39;:::i;:::-;5806:71;5870:6;5865:3;5806:71;:::i;:::-;5799:78;;5886:52;5931:6;5926:3;5919:4;5912:5;5908:16;5886:52;:::i;:::-;5963:29;5985:6;5963:29;:::i;:::-;5958:3;5954:39;5947:46;;5727:272;;;;;:::o;6005:366::-;6147:3;6168:67;6232:2;6227:3;6168:67;:::i;:::-;6161:74;;6244:93;6333:3;6244:93;:::i;:::-;6362:2;6357:3;6353:12;6346:19;;6151:220;;;:::o;6377:366::-;6519:3;6540:67;6604:2;6599:3;6540:67;:::i;:::-;6533:74;;6616:93;6705:3;6616:93;:::i;:::-;6734:2;6729:3;6725:12;6718:19;;6523:220;;;:::o;6749:366::-;6891:3;6912:67;6976:2;6971:3;6912:67;:::i;:::-;6905:74;;6988:93;7077:3;6988:93;:::i;:::-;7106:2;7101:3;7097:12;7090:19;;6895:220;;;:::o;7121:366::-;7263:3;7284:67;7348:2;7343:3;7284:67;:::i;:::-;7277:74;;7360:93;7449:3;7360:93;:::i;:::-;7478:2;7473:3;7469:12;7462:19;;7267:220;;;:::o;7493:366::-;7635:3;7656:67;7720:2;7715:3;7656:67;:::i;:::-;7649:74;;7732:93;7821:3;7732:93;:::i;:::-;7850:2;7845:3;7841:12;7834:19;;7639:220;;;:::o;7865:366::-;8007:3;8028:67;8092:2;8087:3;8028:67;:::i;:::-;8021:74;;8104:93;8193:3;8104:93;:::i;:::-;8222:2;8217:3;8213:12;8206:19;;8011:220;;;:::o;8237:366::-;8379:3;8400:67;8464:2;8459:3;8400:67;:::i;:::-;8393:74;;8476:93;8565:3;8476:93;:::i;:::-;8594:2;8589:3;8585:12;8578:19;;8383:220;;;:::o;8609:366::-;8751:3;8772:67;8836:2;8831:3;8772:67;:::i;:::-;8765:74;;8848:93;8937:3;8848:93;:::i;:::-;8966:2;8961:3;8957:12;8950:19;;8755:220;;;:::o;8981:118::-;9068:24;9086:5;9068:24;:::i;:::-;9063:3;9056:37;9046:53;;:::o;9105:112::-;9188:22;9204:5;9188:22;:::i;:::-;9183:3;9176:35;9166:51;;:::o;9223:222::-;9316:4;9354:2;9343:9;9339:18;9331:26;;9367:71;9435:1;9424:9;9420:17;9411:6;9367:71;:::i;:::-;9321:124;;;;:::o;9451:332::-;9572:4;9610:2;9599:9;9595:18;9587:26;;9623:71;9691:1;9680:9;9676:17;9667:6;9623:71;:::i;:::-;9704:72;9772:2;9761:9;9757:18;9748:6;9704:72;:::i;:::-;9577:206;;;;;:::o;9789:807::-;10038:4;10076:3;10065:9;10061:19;10053:27;;10090:71;10158:1;10147:9;10143:17;10134:6;10090:71;:::i;:::-;10171:72;10239:2;10228:9;10224:18;10215:6;10171:72;:::i;:::-;10253:80;10329:2;10318:9;10314:18;10305:6;10253:80;:::i;:::-;10343;10419:2;10408:9;10404:18;10395:6;10343:80;:::i;:::-;10433:73;10501:3;10490:9;10486:19;10477:6;10433:73;:::i;:::-;10516;10584:3;10573:9;10569:19;10560:6;10516:73;:::i;:::-;10043:553;;;;;;;;;:::o;10602:210::-;10689:4;10727:2;10716:9;10712:18;10704:26;;10740:65;10802:1;10791:9;10787:17;10778:6;10740:65;:::i;:::-;10694:118;;;;:::o;10818:276::-;10938:4;10976:2;10965:9;10961:18;10953:26;;10989:98;11084:1;11073:9;11069:17;11060:6;10989:98;:::i;:::-;10943:151;;;;:::o;11100:313::-;11213:4;11251:2;11240:9;11236:18;11228:26;;11300:9;11294:4;11290:20;11286:1;11275:9;11271:17;11264:47;11328:78;11401:4;11392:6;11328:78;:::i;:::-;11320:86;;11218:195;;;;:::o;11419:419::-;11585:4;11623:2;11612:9;11608:18;11600:26;;11672:9;11666:4;11662:20;11658:1;11647:9;11643:17;11636:47;11700:131;11826:4;11700:131;:::i;:::-;11692:139;;11590:248;;;:::o;11844:419::-;12010:4;12048:2;12037:9;12033:18;12025:26;;12097:9;12091:4;12087:20;12083:1;12072:9;12068:17;12061:47;12125:131;12251:4;12125:131;:::i;:::-;12117:139;;12015:248;;;:::o;12269:419::-;12435:4;12473:2;12462:9;12458:18;12450:26;;12522:9;12516:4;12512:20;12508:1;12497:9;12493:17;12486:47;12550:131;12676:4;12550:131;:::i;:::-;12542:139;;12440:248;;;:::o;12694:419::-;12860:4;12898:2;12887:9;12883:18;12875:26;;12947:9;12941:4;12937:20;12933:1;12922:9;12918:17;12911:47;12975:131;13101:4;12975:131;:::i;:::-;12967:139;;12865:248;;;:::o;13119:419::-;13285:4;13323:2;13312:9;13308:18;13300:26;;13372:9;13366:4;13362:20;13358:1;13347:9;13343:17;13336:47;13400:131;13526:4;13400:131;:::i;:::-;13392:139;;13290:248;;;:::o;13544:419::-;13710:4;13748:2;13737:9;13733:18;13725:26;;13797:9;13791:4;13787:20;13783:1;13772:9;13768:17;13761:47;13825:131;13951:4;13825:131;:::i;:::-;13817:139;;13715:248;;;:::o;13969:419::-;14135:4;14173:2;14162:9;14158:18;14150:26;;14222:9;14216:4;14212:20;14208:1;14197:9;14193:17;14186:47;14250:131;14376:4;14250:131;:::i;:::-;14242:139;;14140:248;;;:::o;14394:419::-;14560:4;14598:2;14587:9;14583:18;14575:26;;14647:9;14641:4;14637:20;14633:1;14622:9;14618:17;14611:47;14675:131;14801:4;14675:131;:::i;:::-;14667:139;;14565:248;;;:::o;14819:222::-;14912:4;14950:2;14939:9;14935:18;14927:26;;14963:71;15031:1;15020:9;15016:17;15007:6;14963:71;:::i;:::-;14917:124;;;;:::o;15047:831::-;15310:4;15348:3;15337:9;15333:19;15325:27;;15362:71;15430:1;15419:9;15415:17;15406:6;15362:71;:::i;:::-;15443:80;15519:2;15508:9;15504:18;15495:6;15443:80;:::i;:::-;15570:9;15564:4;15560:20;15555:2;15544:9;15540:18;15533:48;15598:108;15701:4;15692:6;15598:108;:::i;:::-;15590:116;;15716:72;15784:2;15773:9;15769:18;15760:6;15716:72;:::i;:::-;15798:73;15866:3;15855:9;15851:19;15842:6;15798:73;:::i;:::-;15315:563;;;;;;;;:::o;15884:442::-;16033:4;16071:2;16060:9;16056:18;16048:26;;16084:71;16152:1;16141:9;16137:17;16128:6;16084:71;:::i;:::-;16165:72;16233:2;16222:9;16218:18;16209:6;16165:72;:::i;:::-;16247;16315:2;16304:9;16300:18;16291:6;16247:72;:::i;:::-;16038:288;;;;;;:::o;16332:214::-;16421:4;16459:2;16448:9;16444:18;16436:26;;16472:67;16536:1;16525:9;16521:17;16512:6;16472:67;:::i;:::-;16426:120;;;;:::o;16552:132::-;16619:4;16642:3;16634:11;;16672:4;16667:3;16663:14;16655:22;;16624:60;;;:::o;16690:114::-;16757:6;16791:5;16785:12;16775:22;;16764:40;;;:::o;16810:99::-;16862:6;16896:5;16890:12;16880:22;;16869:40;;;:::o;16915:113::-;16985:4;17017;17012:3;17008:14;17000:22;;16990:38;;;:::o;17034:184::-;17133:11;17167:6;17162:3;17155:19;17207:4;17202:3;17198:14;17183:29;;17145:73;;;;:::o;17224:169::-;17308:11;17342:6;17337:3;17330:19;17382:4;17377:3;17373:14;17358:29;;17320:73;;;;:::o;17399:305::-;17439:3;17458:20;17476:1;17458:20;:::i;:::-;17453:25;;17492:20;17510:1;17492:20;:::i;:::-;17487:25;;17646:1;17578:66;17574:74;17571:1;17568:81;17565:2;;;17652:18;;:::i;:::-;17565:2;17696:1;17693;17689:9;17682:16;;17443:261;;;;:::o;17710:185::-;17750:1;17767:20;17785:1;17767:20;:::i;:::-;17762:25;;17801:20;17819:1;17801:20;:::i;:::-;17796:25;;17840:1;17830:2;;17845:18;;:::i;:::-;17830:2;17887:1;17884;17880:9;17875:14;;17752:143;;;;:::o;17901:348::-;17941:7;17964:20;17982:1;17964:20;:::i;:::-;17959:25;;17998:20;18016:1;17998:20;:::i;:::-;17993:25;;18186:1;18118:66;18114:74;18111:1;18108:81;18103:1;18096:9;18089:17;18085:105;18082:2;;;18193:18;;:::i;:::-;18082:2;18241:1;18238;18234:9;18223:20;;17949:300;;;;:::o;18255:191::-;18295:4;18315:20;18333:1;18315:20;:::i;:::-;18310:25;;18349:20;18367:1;18349:20;:::i;:::-;18344:25;;18388:1;18385;18382:8;18379:2;;;18393:18;;:::i;:::-;18379:2;18438:1;18435;18431:9;18423:17;;18300:146;;;;:::o;18452:96::-;18489:7;18518:24;18536:5;18518:24;:::i;:::-;18507:35;;18497:51;;;:::o;18554:104::-;18599:7;18628:24;18646:5;18628:24;:::i;:::-;18617:35;;18607:51;;;:::o;18664:90::-;18698:7;18741:5;18734:13;18727:21;18716:32;;18706:48;;;:::o;18760:126::-;18797:7;18837:42;18830:5;18826:54;18815:65;;18805:81;;;:::o;18892:77::-;18929:7;18958:5;18947:16;;18937:32;;;:::o;18975:86::-;19010:7;19050:4;19043:5;19039:16;19028:27;;19018:43;;;:::o;19067:180::-;19144:9;19177:64;19235:5;19177:64;:::i;:::-;19164:77;;19154:93;;;:::o;19253:140::-;19330:9;19363:24;19381:5;19363:24;:::i;:::-;19350:37;;19340:53;;;:::o;19399:121::-;19457:9;19490:24;19508:5;19490:24;:::i;:::-;19477:37;;19467:53;;;:::o;19526:307::-;19594:1;19604:113;19618:6;19615:1;19612:13;19604:113;;;19703:1;19698:3;19694:11;19688:18;19684:1;19679:3;19675:11;19668:39;19640:2;19637:1;19633:10;19628:15;;19604:113;;;19735:6;19732:1;19729:13;19726:2;;;19815:1;19806:6;19801:3;19797:16;19790:27;19726:2;19575:258;;;;:::o;19839:320::-;19883:6;19920:1;19914:4;19910:12;19900:22;;19967:1;19961:4;19957:12;19988:18;19978:2;;20044:4;20036:6;20032:17;20022:27;;19978:2;20106;20098:6;20095:14;20075:18;20072:38;20069:2;;;20125:18;;:::i;:::-;20069:2;19890:269;;;;:::o;20165:180::-;20213:77;20210:1;20203:88;20310:4;20307:1;20300:15;20334:4;20331:1;20324:15;20351:180;20399:77;20396:1;20389:88;20496:4;20493:1;20486:15;20520:4;20517:1;20510:15;20537:180;20585:77;20582:1;20575:88;20682:4;20679:1;20672:15;20706:4;20703:1;20696:15;20723:102;20764:6;20815:2;20811:7;20806:2;20799:5;20795:14;20791:28;20781:38;;20771:54;;;:::o;20831:225::-;20971:34;20967:1;20959:6;20955:14;20948:58;21040:8;21035:2;21027:6;21023:15;21016:33;20937:119;:::o;21062:221::-;21202:34;21198:1;21190:6;21186:14;21179:58;21271:4;21266:2;21258:6;21254:15;21247:29;21168:115;:::o;21289:177::-;21429:29;21425:1;21417:6;21413:14;21406:53;21395:71;:::o;21472:220::-;21612:34;21608:1;21600:6;21596:14;21589:58;21681:3;21676:2;21668:6;21664:15;21657:28;21578:114;:::o;21698:182::-;21838:34;21834:1;21826:6;21822:14;21815:58;21804:76;:::o;21886:228::-;22026:34;22022:1;22014:6;22010:14;22003:58;22095:11;22090:2;22082:6;22078:15;22071:36;21992:122;:::o;22120:224::-;22260:34;22256:1;22248:6;22244:14;22237:58;22329:7;22324:2;22316:6;22312:15;22305:32;22226:118;:::o;22350:223::-;22490:34;22486:1;22478:6;22474:14;22467:58;22559:6;22554:2;22546:6;22542:15;22535:31;22456:117;:::o;22579:122::-;22652:24;22670:5;22652:24;:::i;:::-;22645:5;22642:35;22632:2;;22691:1;22688;22681:12;22632:2;22622:79;:::o;22707:138::-;22788:32;22814:5;22788:32;:::i;:::-;22781:5;22778:43;22768:2;;22835:1;22832;22825:12;22768:2;22758:87;:::o;22851:116::-;22921:21;22936:5;22921:21;:::i;:::-;22914:5;22911:32;22901:2;;22957:1;22954;22947:12;22901:2;22891:76;:::o;22973:122::-;23046:24;23064:5;23046:24;:::i;:::-;23039:5;23036:35;23026:2;;23085:1;23082;23075:12;23026:2;23016:79;:::o
Swarm Source
ipfs://38aba8252514addbc6be352dd34eb61b536283b03a8685c0709d3525e9cbc35f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.