ERC-20
Overview
Max Total Supply
1,000,000,000 ALCAZAR
Holders
903
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Alcazar
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-24 */ /** *Submitted for verification at Etherscan.io on 2022-10-23 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.17; // ERC Standard Objects // -------------------------------------------------------------- /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } 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"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @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 _allowances; 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 _allowances[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(), _allowances[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, _allowances[_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, _allowances[_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"); _allowances[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; } // Main Contract Logic // -------------------------------------------------------------- contract Alcazar is Context, IERC20, Ownable { // Imports using SafeMath for uint256; using Address for address; // Configurables ----------------------------- // Context string private _name = "Alcazar"; string private _symbol = "ALCAZAR"; uint8 private _decimals = 18; // Supply uint256 private _totalSupply = 1 * 1e9 * 1e18; uint256 private minimumTokensBeforeSwap = _totalSupply * 25 / 100000; // Restrictions uint256 public _maxTxAmount = (_totalSupply * 8) / 1000; uint256 public _walletMax = (_totalSupply * 8) / 1000; bool public checkWalletLimit = true; // wallets address payable public liquidityWallet = payable(0x2FF9d7be466f674c8640466A55fFdd02b3a00864); address payable public operationsWallet = payable(0x2FF9d7be466f674c8640466A55fFdd02b3a00864); address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; // fees uint256 public liquidityFeeBuy = 2; uint256 public operationsFeeBuy = 1; uint256 public totalFeesBuy; uint256 public maxTotalFeeBuy = 10; // fees uint256 public liquidityFeeSell = 2; uint256 public operationsFeeSell = 1; uint256 public totalFeesSell; uint256 public maxTotalFeeSell = 10; // distribution ratio uint256 public _liquiditySharePercentage = 67; uint256 public _operationsSharePercentage = 33; uint256 public _totalDistributionShares; // max amounts mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) public isExcludedFromFee; mapping (address => bool) public isWalletLimitExempt; mapping (address => bool) isTxLimitExempt; // Router Information mapping (address => bool) public isMarketPair; IUniswapV2Router02 public uniswapV2Router; address public uniswapPair; // toggle swap back (fees) bool inSwapAndLiquify; uint256 public tokensForLiquidity; uint256 public tokensForOperations; // Launch Settings bool public tradingOpen = false; // events event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet); event OperationsWalletUpdated(address indexed newOperationsWallet, address indexed oldOperationsWallet); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); event SwapTokensForETH(uint256 amountIn, address[] path); // toogle to stop swap if already underway modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { // load total fees totalFeesBuy = operationsFeeBuy + liquidityFeeBuy; totalFeesSell = operationsFeeSell + liquidityFeeSell; // load total distribution _totalDistributionShares = _liquiditySharePercentage + _operationsSharePercentage; // create router ------------------------------ IUniswapV2Router02 _uniswapV2Router; if (block.chainid == 1) { _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); } else if (block.chainid == 5) { _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); } else revert(); // Create a uniswap pair for this new token uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; isMarketPair[address(uniswapPair)] = true; // set allowances _allowances[address(this)][address(uniswapV2Router)] = _totalSupply; // exclude from paying fees or having max transaction amount isExcludedFromFee[owner()] = true; isExcludedFromFee[address(this)] = true; isExcludedFromFee[address(0xdead)] = true; isExcludedFromFee[liquidityWallet] = true; isExcludedFromFee[operationsWallet] = true; // exclude contracts from max wallet size isWalletLimitExempt[owner()] = true; isWalletLimitExempt[address(uniswapPair)] = true; isWalletLimitExempt[address(this)] = true; isWalletLimitExempt[liquidityWallet] = true; isWalletLimitExempt[operationsWallet] = true; // exclude contracts from max wallet size isTxLimitExempt[owner()] = true; isTxLimitExempt[address(this)] = true; _balances[_msgSender()] = _totalSupply; emit Transfer(address(0), _msgSender(), _totalSupply); } receive() external payable { } // @dev 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 _allowances[owner][spender]; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } // get minimum tokens before swap function minimumTokensBeforeSwapAmount() public view returns (uint256) { return minimumTokensBeforeSwap; } // approve spending methods 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"); _allowances[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; } // @dev Owner functions start ------------------------------------- // toogle market pair status function setMarketPairStatus(address account, bool newValue) public onlyOwner { isMarketPair[account] = newValue; } // set excluded xx limit function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner { isTxLimitExempt[holder] = exempt; } // update max tx amount function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; } // set excluded tax function setIsExcludedFromFee(address account, bool newValue) public onlyOwner { isExcludedFromFee[account] = newValue; } // update fees function updateFees(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner { operationsFeeBuy = _operationsFee; liquidityFeeBuy = _liquidityFee; totalFeesBuy = operationsFeeBuy + liquidityFeeBuy; require(totalFeesBuy <= maxTotalFeeBuy, "Must keep fees at maxTotalFeeBuy or less"); } function updateFeesSell(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner { operationsFeeSell = _operationsFee; liquidityFeeSell = _liquidityFee; totalFeesSell = operationsFeeSell + liquidityFeeSell; require(totalFeesSell <= maxTotalFeeSell, "Must keep fees at maxTotalFeeSell or less"); } // set distribution settings function setDistributionSettings(uint256 newLiquidityShare, uint256 newOperationsShare) external onlyOwner() { _liquiditySharePercentage = newLiquidityShare; _operationsSharePercentage = newOperationsShare; _totalDistributionShares = _liquiditySharePercentage + _operationsSharePercentage; require(_totalDistributionShares == 100, "Distribution needs to total to 100"); } // remove wallet limit function enableDisableWalletLimit(bool newValue) external onlyOwner { checkWalletLimit = newValue; } // set excluded wallet limit function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner { isWalletLimitExempt[holder] = exempt; } // update wallet limit function setWalletLimit(uint256 newLimit) external onlyOwner { _walletMax = newLimit; } // change the minimum amount of tokens to sell from fees function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() { minimumTokensBeforeSwap = newLimit; } // sets the wallet that receives LP tokens to lock function updateLiquidityWallet(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); } // updates the operations wallet (marketing, charity, etc.) function updateOperationsWallet(address newAddress) external onlyOwner { require(newAddress != address(0), "Cannot set to address 0"); isExcludedFromFee[newAddress] = true; isExcludedFromFee[operationsWallet] = false; emit OperationsWalletUpdated(newAddress, operationsWallet); operationsWallet = payable(newAddress); } // transfer amount to address function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } // change router address function changeRouterAddress(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; } // pre airdrop to any holders function airdropToWallets(address[] memory airdropWallets, uint256[] memory amount) external onlyOwner() { require(airdropWallets.length == amount.length, "airdropToWallets:: Arrays must be the same length"); for(uint256 i = 0; i < airdropWallets.length; i++){ address wallet = airdropWallets[i]; uint256 airdropAmount = amount[i]; emit Transfer(msg.sender, wallet, airdropAmount); } } // @dev Views start here ------------------------------------ // @dev User Callable Functions start here! --------------------------------------------- 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(), _allowances[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"); // check trading open if (!tradingOpen) { require(sender == owner(), "TOKEN: This account cannot send tokens until trading is enabled"); } if(inSwapAndLiquify) { return _basicTransfer(sender, recipient, amount); } else { // required for wallet distribution if (sender != owner() && recipient != owner()){ _checkTxLimit(sender,amount); } // check can swap for fees and liq uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender]) { swapAndLiquify(contractTokenBalance); } // check senders balance _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? amount : takeFee(sender, recipient, amount); // check wallet holding limit if(checkWalletLimit && !isWalletLimitExempt[recipient]) require(balanceOf(recipient).add(finalAmount) <= _walletMax); // continue _balances[recipient] = _balances[recipient].add(finalAmount); emit Transfer(sender, recipient, finalAmount); return true; } } // transfer for 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; } // take fee method 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); } // swap tokens for fees and liq function swapAndLiquify(uint256 swapAmount) private lockTheSwap { // check there are currently tokens to sell uint256 tokensForLP = swapAmount.mul(_liquiditySharePercentage).div(_totalDistributionShares).div(2); uint256 tokensForSwap = swapAmount.sub(tokensForLP); // swap tokens swapTokensForEth(tokensForSwap); // received amount uint256 amountReceived = address(this).balance; // work out distribution uint256 totalFee = _totalDistributionShares.sub(_liquiditySharePercentage.div(2)); uint256 amountLiquidity = amountReceived.mul(_liquiditySharePercentage).div(totalFee).div(2); uint256 amountOperations = amountReceived.sub(amountLiquidity); if(amountOperations > 0) transferToAddressETH(operationsWallet, amountOperations); 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); } // add liqiudity 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 ); } // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders. function buyBackTokens(uint256 ETHAmountInWei) external onlyOwner { // generate the uniswap pair path of weth -> eth 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 ); } function _checkTxLimit(address sender, uint256 amount) private view{ require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded"); } }
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":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOperationsWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldOperationsWallet","type":"address"}],"name":"OperationsWalletUpdated","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":"_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":"_operationsSharePercentage","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":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ETHAmountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterAddress","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"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":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","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":"operationsFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":"newOperationsShare","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","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":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateOperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e0604052600760a09081526620b631b0bd30b960c91b60c052600190620000289082620006c5565b5060408051808201909152600781526620a621a0ad20a960c91b6020820152600290620000569082620006c5565b506003805460ff191660121790556b033b2e3c9fd0803ce80000006004819055620186a09062000088906019620007a7565b620000949190620007c7565b6005556103e86004546008620000ab9190620007a7565b620000b79190620007c7565b6006556103e86004546008620000ce9190620007a7565b620000da9190620007c7565b60075560088054742ff9d7be466f674c8640466a55ffdd02b3a00864016001600160a81b0319909116179055600980546001600160a01b031916732ff9d7be466f674c8640466a55ffdd02b3a0086417905561dead6080526002600a8181556001600b819055600d829055600e92909255600f9190915560115560436012556021601355601f805460ff191690553480156200017557600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a54600b54620001c99190620007ea565b600c55600e54600f54620001de9190620007ea565b601055601354601254620001f39190620007ea565b6014556000466001036200021d5750737a250d5630b4cf539739df2c5dacb4c659f2488d62000247565b46600503620002425750737a250d5630b4cf539739df2c5dacb4c659f2488d62000247565b600080fd5b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac919062000800565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000320919062000800565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200036e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000394919062000800565b601c80546001600160a01b03199081166001600160a01b03938416908117909255601b80549091168484161781556000918252601a60209081526040808420805460ff19166001908117909155600454308652601684528286209454909616855292909152822092909255601790620004156000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260179093528183208054851660019081179091557f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b030380548616821790556008546101009004821684528284208054861682179055600954909116835290822080549093168117909255601890620004c56000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601c54821681526018909352818320805485166001908117909155308452828420805486168217905560085461010090048216845282842080548616821790556009549091168352908220805490931681179092556019906200055e6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260199092528120805490921660011790915560045490601590620005ae3390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040516200061191815260200190565b60405180910390a35062000832565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200064b57607f821691505b6020821081036200066c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006c057600081815260208120601f850160051c810160208610156200069b5750805b601f850160051c820191505b81811015620006bc57828155600101620006a7565b5050505b505050565b81516001600160401b03811115620006e157620006e162000620565b620006f981620006f2845462000636565b8462000672565b602080601f831160018114620007315760008415620007185750858301515b600019600386901b1c1916600185901b178555620006bc565b600085815260208120601f198616915b82811015620007625788860151825594840194600190910190840162000741565b5085821015620007815787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620007c157620007c162000791565b92915050565b600082620007e557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620007c157620007c162000791565b6000602082840312156200081357600080fd5b81516001600160a01b03811681146200082b57600080fd5b9392505050565b608051612d4a620008556000396000818161057001526110ea0152612d4a6000f3fe6080604052600436106103905760003560e01c80637c519ffb116101dc578063d469801611610102578063f1d5f517116100a0578063fb002c971161006f578063fb002c9714610a5f578063fc155d1d14610a75578063fd72e22a14610a95578063ffb54a9914610ab557600080fd5b8063f1d5f517146109e5578063f2fde38b14610a05578063f84ba65d14610a25578063f872858a14610a4557600080fd5b8063e37ba8f9116100dc578063e37ba8f914610965578063ec28438a14610985578063eea5b63f146109a5578063ef422a18146109c557600080fd5b8063d4698016146108e4578063dd62ed3e14610909578063e10e9f321461094f57600080fd5b806395d89b411161017a578063a9059cbb11610149578063a9059cbb1461085e578063ac23ca591461087e578063c816841b14610894578063c867d60b146108b457600080fd5b806395d89b41146107fe578063a073d37f14610813578063a08e671f14610828578063a457c2d71461083e57600080fd5b806382d20116116101b657806382d201161461078a578063844d591c146107a0578063876b6f8e146107c05780638da5cb5b146107e057600080fd5b80637c519ffb146107495780637d1db4a51461075e578063807c2d9c1461077457600080fd5b806327c8f835116102c15780633b97084a1161025f5780636db794371161022e5780636db79437146106c857806370a08231146106e8578063715018a61461071e5780637849c1cd1461073357600080fd5b80633b97084a146106325780633ecad271146106525780634b743995146106825780635342acb41461069857600080fd5b80632e97766d1161029b5780632e97766d146105bd57806330d5d18d146105d0578063313ce567146105f0578063395093511461061257600080fd5b806327c8f8351461055e5780632b112e49146105925780632baa7217146105a757600080fd5b806318160ddd1161032e5780632198cf6c116103085780632198cf6c146104dc5780632307b441146104fe57806323b872dd1461051e5780632563ae831461053e57600080fd5b806318160ddd1461049b57806319c59e2c146104b05780631a8145bb146104c657600080fd5b8063095ea7b31161036a578063095ea7b31461041f5780630e47e8221461044f5780631107b3a5146104655780631694505e1461047b57600080fd5b8063031d6cd01461039c57806304db6e68146103c557806306fdde03146103fd57600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b2600f5481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b506103e56103e036600461272a565b610acf565b6040516001600160a01b0390911681526020016103bc565b34801561040957600080fd5b50610412610e10565b6040516103bc9190612747565b34801561042b57600080fd5b5061043f61043a366004612795565b610ea2565b60405190151581526020016103bc565b34801561045b57600080fd5b506103b260105481565b34801561047157600080fd5b506103b2600e5481565b34801561048757600080fd5b50601b546103e5906001600160a01b031681565b3480156104a757600080fd5b506004546103b2565b3480156104bc57600080fd5b506103b2600c5481565b3480156104d257600080fd5b506103b2601d5481565b3480156104e857600080fd5b506104fc6104f73660046127d6565b610eb9565b005b34801561050a57600080fd5b506104fc6105193660046128e1565b610f0e565b34801561052a57600080fd5b5061043f6105393660046129a3565b611040565b34801561054a57600080fd5b506104fc6105593660046129e4565b6110ab565b34801561056a57600080fd5b506103e57f000000000000000000000000000000000000000000000000000000000000000081565b34801561059e57600080fd5b506103b26110e8565b3480156105b357600080fd5b506103b260135481565b3480156105c957600080fd5b50436103b2565b3480156105dc57600080fd5b506104fc6105eb36600461272a565b611132565b3480156105fc57600080fd5b5060035460405160ff90911681526020016103bc565b34801561061e57600080fd5b5061043f61062d366004612795565b611233565b34801561063e57600080fd5b506104fc61064d3660046129ff565b611269565b34801561065e57600080fd5b5061043f61066d36600461272a565b601a6020526000908152604090205460ff1681565b34801561068e57600080fd5b506103b260115481565b3480156106a457600080fd5b5061043f6106b336600461272a565b60176020526000908152604090205460ff1681565b3480156106d457600080fd5b506104fc6106e3366004612a18565b611298565b3480156106f457600080fd5b506103b261070336600461272a565b6001600160a01b031660009081526015602052604090205490565b34801561072a57600080fd5b506104fc611341565b34801561073f57600080fd5b506103b2600b5481565b34801561075557600080fd5b506104fc6113b5565b34801561076a57600080fd5b506103b260065481565b34801561078057600080fd5b506103b260075481565b34801561079657600080fd5b506103b2600a5481565b3480156107ac57600080fd5b506104fc6107bb3660046127d6565b6113ee565b3480156107cc57600080fd5b506104fc6107db366004612a18565b611443565b3480156107ec57600080fd5b506000546001600160a01b03166103e5565b34801561080a57600080fd5b506104126114e9565b34801561081f57600080fd5b506005546103b2565b34801561083457600080fd5b506103b260145481565b34801561084a57600080fd5b5061043f610859366004612795565b6114f8565b34801561086a57600080fd5b5061043f610879366004612795565b611547565b34801561088a57600080fd5b506103b260125481565b3480156108a057600080fd5b50601c546103e5906001600160a01b031681565b3480156108c057600080fd5b5061043f6108cf36600461272a565b60186020526000908152604090205460ff1681565b3480156108f057600080fd5b506008546103e59061010090046001600160a01b031681565b34801561091557600080fd5b506103b2610924366004612a3a565b6001600160a01b03918216600090815260166020908152604080832093909416825291909152205490565b34801561095b57600080fd5b506103b2600d5481565b34801561097157600080fd5b506104fc61098036600461272a565b611554565b34801561099157600080fd5b506104fc6109a03660046129ff565b611665565b3480156109b157600080fd5b506104fc6109c0366004612a18565b611694565b3480156109d157600080fd5b506104fc6109e03660046127d6565b611731565b3480156109f157600080fd5b506104fc610a003660046129ff565b611786565b348015610a1157600080fd5b506104fc610a2036600461272a565b6117b5565b348015610a3157600080fd5b506104fc610a403660046127d6565b61189f565b348015610a5157600080fd5b5060085461043f9060ff1681565b348015610a6b57600080fd5b506103b2601e5481565b348015610a8157600080fd5b506104fc610a903660046129ff565b6118f4565b348015610aa157600080fd5b506009546103e5906001600160a01b031681565b348015610ac157600080fd5b50601f5461043f9060ff1681565b600080546001600160a01b03163314610b035760405162461bcd60e51b8152600401610afa90612a73565b60405180910390fd5b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6a9190612aa8565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdb9190612aa8565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4a9190612aa8565b91506001600160a01b038216610da157806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbc9190612aa8565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2d9190612aa8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e9190612aa8565b91505b601c80546001600160a01b03199081166001600160a01b038581169182178455601b8054909316948116949094179091556000908152601860209081526040808320805460ff19908116600190811790925594549095168352601a909152902080549091169091179055919050565b606060018054610e1f90612ac5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4b90612ac5565b8015610e985780601f10610e6d57610100808354040283529160200191610e98565b820191906000526020600020905b815481529060010190602001808311610e7b57829003601f168201915b5050505050905090565b6000610eaf338484611a71565b5060015b92915050565b6000546001600160a01b03163314610ee35760405162461bcd60e51b8152600401610afa90612a73565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f385760405162461bcd60e51b8152600401610afa90612a73565b8051825114610fa35760405162461bcd60e51b815260206004820152603160248201527f61697264726f70546f57616c6c6574733a3a20417272617973206d75737420626044820152700ca40e8d0ca40e6c2daca40d8cadccee8d607b1b6064820152608401610afa565b60005b825181101561103b576000838281518110610fc357610fc3612aff565b602002602001015190506000838381518110610fe157610fe1612aff565b60200260200101519050816001600160a01b0316336001600160a01b0316600080516020612cd08339815191528360405161101e91815260200190565b60405180910390a35050808061103390612b2b565b915050610fa6565b505050565b600061104d848484611b95565b506110a0843361109b85604051806060016040528060288152602001612ca8602891396001600160a01b038a1660009081526016602090815260408083203384529091529020549190611f42565b611a71565b5060015b9392505050565b6000546001600160a01b031633146110d55760405162461bcd60e51b8152600401610afa90612a73565b6008805460ff1916911515919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660009081526015602052604081205460045461112d91611f7c565b905090565b6000546001600160a01b0316331461115c5760405162461bcd60e51b8152600401610afa90612a73565b6001600160a01b0381166111ac5760405162461bcd60e51b8152602060048201526017602482015276043616e6e6f742073657420746f2061646472657373203604c1b6044820152606401610afa565b6001600160a01b03808216600081815260176020526040808220805460ff19908116600117909155600980548616845282842080549092169091555490519316927f086aa05ff00214e2d0c7c02b8a46b2614ad955732e6b43aa8afca69ed1ad76f89190a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526016602090815260408083206001600160a01b03871684529091528120549091610eaf91859061109b9086611fbe565b6000546001600160a01b031633146112935760405162461bcd60e51b8152600401610afa90612a73565b600555565b6000546001600160a01b031633146112c25760405162461bcd60e51b8152600401610afa90612a73565b600b829055600a8190556112d68183612b44565b600c819055600d54101561133d5760405162461bcd60e51b815260206004820152602860248201527f4d757374206b6565702066656573206174206d6178546f74616c466565427579604482015267206f72206c65737360c01b6064820152608401610afa565b5050565b6000546001600160a01b0316331461136b5760405162461bcd60e51b8152600401610afa90612a73565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113df5760405162461bcd60e51b8152600401610afa90612a73565b601f805460ff19166001179055565b6000546001600160a01b031633146114185760405162461bcd60e51b8152600401610afa90612a73565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461146d5760405162461bcd60e51b8152600401610afa90612a73565b600f829055600e8190556114818183612b44565b6010819055601154101561133d5760405162461bcd60e51b815260206004820152602960248201527f4d757374206b6565702066656573206174206d6178546f74616c46656553656c6044820152686c206f72206c65737360b81b6064820152608401610afa565b606060028054610e1f90612ac5565b6000610eaf338461109b85604051806060016040528060258152602001612cf0602591393360009081526016602090815260408083206001600160a01b038d1684529091529020549190611f42565b60006110a0338484611b95565b6000546001600160a01b0316331461157e5760405162461bcd60e51b8152600401610afa90612a73565b6001600160a01b0381166115ce5760405162461bcd60e51b8152602060048201526017602482015276043616e6e6f742073657420746f2061646472657373203604c1b6044820152606401610afa565b6001600160a01b03808216600081815260176020526040808220805460ff1990811660011790915560088054610100908190048716855283852080549093169092555491519104909316927f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e9190a3600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b0316331461168f5760405162461bcd60e51b8152600401610afa90612a73565b600655565b6000546001600160a01b031633146116be5760405162461bcd60e51b8152600401610afa90612a73565b601282905560138190556116d28183612b44565b601481905560641461133d5760405162461bcd60e51b815260206004820152602260248201527f446973747269627574696f6e206e6565647320746f20746f74616c20746f2031604482015261030360f41b6064820152608401610afa565b6000546001600160a01b0316331461175b5760405162461bcd60e51b8152600401610afa90612a73565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117b05760405162461bcd60e51b8152600401610afa90612a73565b600755565b6000546001600160a01b031633146117df5760405162461bcd60e51b8152600401610afa90612a73565b6001600160a01b0381166118445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610afa565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118c95760405162461bcd60e51b8152600401610afa90612a73565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461191e5760405162461bcd60e51b8152600401610afa90612a73565b6040805160028082526060820183526000926020830190803683375050601b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611988573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ac9190612aa8565b816000815181106119bf576119bf612aff565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106119f3576119f3612aff565b6001600160a01b039283166020918202929092010152601b5460405163b6f9de9560e01b815291169063b6f9de95908490611a3b90600090869061dead904290600401612b9b565b6000604051808303818588803b158015611a5457600080fd5b505af1158015611a68573d6000803e3d6000fd5b50505050505050565b6001600160a01b038316611ad35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610afa565b6001600160a01b038216611b345760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610afa565b6001600160a01b0383811660008181526016602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611bfb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610afa565b6001600160a01b038316611c5d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610afa565b601f5460ff16611cea576000546001600160a01b03858116911614611cea5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610afa565b601c54600160a01b900460ff1615611d0e57611d0784848461201d565b90506110a4565b6000546001600160a01b03858116911614801590611d3a57506000546001600160a01b03848116911614155b15611d4957611d4984836120f1565b3060009081526015602052604090205460055481108015908190611d775750601c54600160a01b900460ff16155b8015611d9c57506001600160a01b0386166000908152601a602052604090205460ff16155b15611daa57611daa8261215a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260159091529190912054611dfc918690611f42565b6001600160a01b038716600090815260156020908152604080832093909355601790529081205460ff1680611e4957506001600160a01b03861660009081526017602052604090205460ff165b611e5d57611e5887878761228e565b611e5f565b845b60085490915060ff168015611e8d57506001600160a01b03861660009081526018602052604090205460ff16155b15611ec957600754611ebe82611eb8896001600160a01b031660009081526015602052604090205490565b90611fbe565b1115611ec957600080fd5b6001600160a01b038616600090815260156020526040902054611eec9082611fbe565b6001600160a01b038088166000818152601560205260409081902093909355915190891690600080516020612cd083398151915290611f2e9085815260200190565b60405180910390a3600193505050506110a4565b60008184841115611f665760405162461bcd60e51b8152600401610afa9190612747565b506000611f738486612bd0565b95945050505050565b60006110a483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f42565b600080611fcb8385612b44565b9050838110156110a45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610afa565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260159091529182205461206e918490611f42565b6001600160a01b03808616600090815260156020526040808220939093559085168152205461209d9083611fbe565b6001600160a01b038085166000818152601560205260409081902093909355915190861690600080516020612cd0833981519152906120df9086815260200190565b60405180910390a35060019392505050565b6006548111158061211a57506001600160a01b03821660009081526019602052604090205460ff165b61133d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610afa565b601c805460ff60a01b1916600160a01b1790556014546012546000916121909160029161218a9182908790612382565b90612404565b9050600061219e8383611f7c565b90506121a981612446565b60125447906000906121c9906121c0906002612404565b60145490611f7c565b905060006121eb600261218a8461218a6012548861238290919063ffffffff16565b905060006121f98483611f7c565b9050801561221757600954612217906001600160a01b0316826125d9565b6000821180156122275750600086115b1561227857612236868361260f565b60408051868152602081018490529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601c805460ff60a01b191690555050505050565b6001600160a01b0383166000908152601a6020526040812054819060ff16156122d2576122cb606461218a600c548661238290919063ffffffff16565b9050612310565b6001600160a01b0384166000908152601a602052604090205460ff16156123105761230d606461218a6010548661238290919063ffffffff16565b90505b801561237857306000908152601560205260409020546123309082611fbe565b30600081815260156020526040908190209290925590516001600160a01b03871690600080516020612cd08339815191529061236f9085815260200190565b60405180910390a35b611f738382611f7c565b60008260000361239457506000610eb3565b60006123a08385612be3565b9050826123ad8583612bfa565b146110a45760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610afa565b60006110a483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126e4565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061247b5761247b612aff565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156124d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f89190612aa8565b8160018151811061250b5761250b612aff565b6001600160a01b039283166020918202929092010152601b546125319130911684611a71565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061256a908590600090869030904290600401612c1c565b600060405180830381600087803b15801561258457600080fd5b505af1158015612598573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516125cd929190612c58565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561103b573d6000803e3d6000fd5b601b546126279030906001600160a01b031684611a71565b601b546001600160a01b031663f305d7198230856000806126506000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156126b8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126dd9190612c79565b5050505050565b600081836127055760405162461bcd60e51b8152600401610afa9190612747565b506000611f738486612bfa565b6001600160a01b038116811461272757600080fd5b50565b60006020828403121561273c57600080fd5b81356110a481612712565b600060208083528351808285015260005b8181101561277457858101830151858201604001528201612758565b506000604082860101526040601f19601f8301168501019250505092915050565b600080604083850312156127a857600080fd5b82356127b381612712565b946020939093013593505050565b803580151581146127d157600080fd5b919050565b600080604083850312156127e957600080fd5b82356127f481612712565b9150612802602084016127c1565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561284a5761284a61280b565b604052919050565b600067ffffffffffffffff82111561286c5761286c61280b565b5060051b60200190565b600082601f83011261288757600080fd5b8135602061289c61289783612852565b612821565b82815260059290921b840181019181810190868411156128bb57600080fd5b8286015b848110156128d657803583529183019183016128bf565b509695505050505050565b600080604083850312156128f457600080fd5b823567ffffffffffffffff8082111561290c57600080fd5b818501915085601f83011261292057600080fd5b8135602061293061289783612852565b82815260059290921b8401810191818101908984111561294f57600080fd5b948201945b8386101561297657853561296781612712565b82529482019490820190612954565b9650508601359250508082111561298c57600080fd5b5061299985828601612876565b9150509250929050565b6000806000606084860312156129b857600080fd5b83356129c381612712565b925060208401356129d381612712565b929592945050506040919091013590565b6000602082840312156129f657600080fd5b6110a4826127c1565b600060208284031215612a1157600080fd5b5035919050565b60008060408385031215612a2b57600080fd5b50508035926020909101359150565b60008060408385031215612a4d57600080fd5b8235612a5881612712565b91506020830135612a6881612712565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612aba57600080fd5b81516110a481612712565b600181811c90821680612ad957607f821691505b602082108103612af957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612b3d57612b3d612b15565b5060010190565b80820180821115610eb357610eb3612b15565b600081518084526020808501945080840160005b83811015612b905781516001600160a01b031687529582019590820190600101612b6b565b509495945050505050565b848152608060208201526000612bb46080830186612b57565b6001600160a01b03949094166040830152506060015292915050565b81810381811115610eb357610eb3612b15565b8082028115828204841417610eb357610eb3612b15565b600082612c1757634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a060408201526000612c3b60a0830186612b57565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612c716040830184612b57565b949350505050565b600080600060608486031215612c8e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122050fddfd4ba31e04840c42e05d5bca10d4463bcb8e0657ca3a4293ce939d7066f64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106103905760003560e01c80637c519ffb116101dc578063d469801611610102578063f1d5f517116100a0578063fb002c971161006f578063fb002c9714610a5f578063fc155d1d14610a75578063fd72e22a14610a95578063ffb54a9914610ab557600080fd5b8063f1d5f517146109e5578063f2fde38b14610a05578063f84ba65d14610a25578063f872858a14610a4557600080fd5b8063e37ba8f9116100dc578063e37ba8f914610965578063ec28438a14610985578063eea5b63f146109a5578063ef422a18146109c557600080fd5b8063d4698016146108e4578063dd62ed3e14610909578063e10e9f321461094f57600080fd5b806395d89b411161017a578063a9059cbb11610149578063a9059cbb1461085e578063ac23ca591461087e578063c816841b14610894578063c867d60b146108b457600080fd5b806395d89b41146107fe578063a073d37f14610813578063a08e671f14610828578063a457c2d71461083e57600080fd5b806382d20116116101b657806382d201161461078a578063844d591c146107a0578063876b6f8e146107c05780638da5cb5b146107e057600080fd5b80637c519ffb146107495780637d1db4a51461075e578063807c2d9c1461077457600080fd5b806327c8f835116102c15780633b97084a1161025f5780636db794371161022e5780636db79437146106c857806370a08231146106e8578063715018a61461071e5780637849c1cd1461073357600080fd5b80633b97084a146106325780633ecad271146106525780634b743995146106825780635342acb41461069857600080fd5b80632e97766d1161029b5780632e97766d146105bd57806330d5d18d146105d0578063313ce567146105f0578063395093511461061257600080fd5b806327c8f8351461055e5780632b112e49146105925780632baa7217146105a757600080fd5b806318160ddd1161032e5780632198cf6c116103085780632198cf6c146104dc5780632307b441146104fe57806323b872dd1461051e5780632563ae831461053e57600080fd5b806318160ddd1461049b57806319c59e2c146104b05780631a8145bb146104c657600080fd5b8063095ea7b31161036a578063095ea7b31461041f5780630e47e8221461044f5780631107b3a5146104655780631694505e1461047b57600080fd5b8063031d6cd01461039c57806304db6e68146103c557806306fdde03146103fd57600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b2600f5481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b506103e56103e036600461272a565b610acf565b6040516001600160a01b0390911681526020016103bc565b34801561040957600080fd5b50610412610e10565b6040516103bc9190612747565b34801561042b57600080fd5b5061043f61043a366004612795565b610ea2565b60405190151581526020016103bc565b34801561045b57600080fd5b506103b260105481565b34801561047157600080fd5b506103b2600e5481565b34801561048757600080fd5b50601b546103e5906001600160a01b031681565b3480156104a757600080fd5b506004546103b2565b3480156104bc57600080fd5b506103b2600c5481565b3480156104d257600080fd5b506103b2601d5481565b3480156104e857600080fd5b506104fc6104f73660046127d6565b610eb9565b005b34801561050a57600080fd5b506104fc6105193660046128e1565b610f0e565b34801561052a57600080fd5b5061043f6105393660046129a3565b611040565b34801561054a57600080fd5b506104fc6105593660046129e4565b6110ab565b34801561056a57600080fd5b506103e57f000000000000000000000000000000000000000000000000000000000000dead81565b34801561059e57600080fd5b506103b26110e8565b3480156105b357600080fd5b506103b260135481565b3480156105c957600080fd5b50436103b2565b3480156105dc57600080fd5b506104fc6105eb36600461272a565b611132565b3480156105fc57600080fd5b5060035460405160ff90911681526020016103bc565b34801561061e57600080fd5b5061043f61062d366004612795565b611233565b34801561063e57600080fd5b506104fc61064d3660046129ff565b611269565b34801561065e57600080fd5b5061043f61066d36600461272a565b601a6020526000908152604090205460ff1681565b34801561068e57600080fd5b506103b260115481565b3480156106a457600080fd5b5061043f6106b336600461272a565b60176020526000908152604090205460ff1681565b3480156106d457600080fd5b506104fc6106e3366004612a18565b611298565b3480156106f457600080fd5b506103b261070336600461272a565b6001600160a01b031660009081526015602052604090205490565b34801561072a57600080fd5b506104fc611341565b34801561073f57600080fd5b506103b2600b5481565b34801561075557600080fd5b506104fc6113b5565b34801561076a57600080fd5b506103b260065481565b34801561078057600080fd5b506103b260075481565b34801561079657600080fd5b506103b2600a5481565b3480156107ac57600080fd5b506104fc6107bb3660046127d6565b6113ee565b3480156107cc57600080fd5b506104fc6107db366004612a18565b611443565b3480156107ec57600080fd5b506000546001600160a01b03166103e5565b34801561080a57600080fd5b506104126114e9565b34801561081f57600080fd5b506005546103b2565b34801561083457600080fd5b506103b260145481565b34801561084a57600080fd5b5061043f610859366004612795565b6114f8565b34801561086a57600080fd5b5061043f610879366004612795565b611547565b34801561088a57600080fd5b506103b260125481565b3480156108a057600080fd5b50601c546103e5906001600160a01b031681565b3480156108c057600080fd5b5061043f6108cf36600461272a565b60186020526000908152604090205460ff1681565b3480156108f057600080fd5b506008546103e59061010090046001600160a01b031681565b34801561091557600080fd5b506103b2610924366004612a3a565b6001600160a01b03918216600090815260166020908152604080832093909416825291909152205490565b34801561095b57600080fd5b506103b2600d5481565b34801561097157600080fd5b506104fc61098036600461272a565b611554565b34801561099157600080fd5b506104fc6109a03660046129ff565b611665565b3480156109b157600080fd5b506104fc6109c0366004612a18565b611694565b3480156109d157600080fd5b506104fc6109e03660046127d6565b611731565b3480156109f157600080fd5b506104fc610a003660046129ff565b611786565b348015610a1157600080fd5b506104fc610a2036600461272a565b6117b5565b348015610a3157600080fd5b506104fc610a403660046127d6565b61189f565b348015610a5157600080fd5b5060085461043f9060ff1681565b348015610a6b57600080fd5b506103b2601e5481565b348015610a8157600080fd5b506104fc610a903660046129ff565b6118f4565b348015610aa157600080fd5b506009546103e5906001600160a01b031681565b348015610ac157600080fd5b50601f5461043f9060ff1681565b600080546001600160a01b03163314610b035760405162461bcd60e51b8152600401610afa90612a73565b60405180910390fd5b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6a9190612aa8565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdb9190612aa8565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4a9190612aa8565b91506001600160a01b038216610da157806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbc9190612aa8565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2d9190612aa8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e9190612aa8565b91505b601c80546001600160a01b03199081166001600160a01b038581169182178455601b8054909316948116949094179091556000908152601860209081526040808320805460ff19908116600190811790925594549095168352601a909152902080549091169091179055919050565b606060018054610e1f90612ac5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4b90612ac5565b8015610e985780601f10610e6d57610100808354040283529160200191610e98565b820191906000526020600020905b815481529060010190602001808311610e7b57829003601f168201915b5050505050905090565b6000610eaf338484611a71565b5060015b92915050565b6000546001600160a01b03163314610ee35760405162461bcd60e51b8152600401610afa90612a73565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f385760405162461bcd60e51b8152600401610afa90612a73565b8051825114610fa35760405162461bcd60e51b815260206004820152603160248201527f61697264726f70546f57616c6c6574733a3a20417272617973206d75737420626044820152700ca40e8d0ca40e6c2daca40d8cadccee8d607b1b6064820152608401610afa565b60005b825181101561103b576000838281518110610fc357610fc3612aff565b602002602001015190506000838381518110610fe157610fe1612aff565b60200260200101519050816001600160a01b0316336001600160a01b0316600080516020612cd08339815191528360405161101e91815260200190565b60405180910390a35050808061103390612b2b565b915050610fa6565b505050565b600061104d848484611b95565b506110a0843361109b85604051806060016040528060288152602001612ca8602891396001600160a01b038a1660009081526016602090815260408083203384529091529020549190611f42565b611a71565b5060015b9392505050565b6000546001600160a01b031633146110d55760405162461bcd60e51b8152600401610afa90612a73565b6008805460ff1916911515919091179055565b7f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b031660009081526015602052604081205460045461112d91611f7c565b905090565b6000546001600160a01b0316331461115c5760405162461bcd60e51b8152600401610afa90612a73565b6001600160a01b0381166111ac5760405162461bcd60e51b8152602060048201526017602482015276043616e6e6f742073657420746f2061646472657373203604c1b6044820152606401610afa565b6001600160a01b03808216600081815260176020526040808220805460ff19908116600117909155600980548616845282842080549092169091555490519316927f086aa05ff00214e2d0c7c02b8a46b2614ad955732e6b43aa8afca69ed1ad76f89190a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526016602090815260408083206001600160a01b03871684529091528120549091610eaf91859061109b9086611fbe565b6000546001600160a01b031633146112935760405162461bcd60e51b8152600401610afa90612a73565b600555565b6000546001600160a01b031633146112c25760405162461bcd60e51b8152600401610afa90612a73565b600b829055600a8190556112d68183612b44565b600c819055600d54101561133d5760405162461bcd60e51b815260206004820152602860248201527f4d757374206b6565702066656573206174206d6178546f74616c466565427579604482015267206f72206c65737360c01b6064820152608401610afa565b5050565b6000546001600160a01b0316331461136b5760405162461bcd60e51b8152600401610afa90612a73565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113df5760405162461bcd60e51b8152600401610afa90612a73565b601f805460ff19166001179055565b6000546001600160a01b031633146114185760405162461bcd60e51b8152600401610afa90612a73565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461146d5760405162461bcd60e51b8152600401610afa90612a73565b600f829055600e8190556114818183612b44565b6010819055601154101561133d5760405162461bcd60e51b815260206004820152602960248201527f4d757374206b6565702066656573206174206d6178546f74616c46656553656c6044820152686c206f72206c65737360b81b6064820152608401610afa565b606060028054610e1f90612ac5565b6000610eaf338461109b85604051806060016040528060258152602001612cf0602591393360009081526016602090815260408083206001600160a01b038d1684529091529020549190611f42565b60006110a0338484611b95565b6000546001600160a01b0316331461157e5760405162461bcd60e51b8152600401610afa90612a73565b6001600160a01b0381166115ce5760405162461bcd60e51b8152602060048201526017602482015276043616e6e6f742073657420746f2061646472657373203604c1b6044820152606401610afa565b6001600160a01b03808216600081815260176020526040808220805460ff1990811660011790915560088054610100908190048716855283852080549093169092555491519104909316927f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e9190a3600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b0316331461168f5760405162461bcd60e51b8152600401610afa90612a73565b600655565b6000546001600160a01b031633146116be5760405162461bcd60e51b8152600401610afa90612a73565b601282905560138190556116d28183612b44565b601481905560641461133d5760405162461bcd60e51b815260206004820152602260248201527f446973747269627574696f6e206e6565647320746f20746f74616c20746f2031604482015261030360f41b6064820152608401610afa565b6000546001600160a01b0316331461175b5760405162461bcd60e51b8152600401610afa90612a73565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117b05760405162461bcd60e51b8152600401610afa90612a73565b600755565b6000546001600160a01b031633146117df5760405162461bcd60e51b8152600401610afa90612a73565b6001600160a01b0381166118445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610afa565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118c95760405162461bcd60e51b8152600401610afa90612a73565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461191e5760405162461bcd60e51b8152600401610afa90612a73565b6040805160028082526060820183526000926020830190803683375050601b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611988573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ac9190612aa8565b816000815181106119bf576119bf612aff565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106119f3576119f3612aff565b6001600160a01b039283166020918202929092010152601b5460405163b6f9de9560e01b815291169063b6f9de95908490611a3b90600090869061dead904290600401612b9b565b6000604051808303818588803b158015611a5457600080fd5b505af1158015611a68573d6000803e3d6000fd5b50505050505050565b6001600160a01b038316611ad35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610afa565b6001600160a01b038216611b345760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610afa565b6001600160a01b0383811660008181526016602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611bfb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610afa565b6001600160a01b038316611c5d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610afa565b601f5460ff16611cea576000546001600160a01b03858116911614611cea5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610afa565b601c54600160a01b900460ff1615611d0e57611d0784848461201d565b90506110a4565b6000546001600160a01b03858116911614801590611d3a57506000546001600160a01b03848116911614155b15611d4957611d4984836120f1565b3060009081526015602052604090205460055481108015908190611d775750601c54600160a01b900460ff16155b8015611d9c57506001600160a01b0386166000908152601a602052604090205460ff16155b15611daa57611daa8261215a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260159091529190912054611dfc918690611f42565b6001600160a01b038716600090815260156020908152604080832093909355601790529081205460ff1680611e4957506001600160a01b03861660009081526017602052604090205460ff165b611e5d57611e5887878761228e565b611e5f565b845b60085490915060ff168015611e8d57506001600160a01b03861660009081526018602052604090205460ff16155b15611ec957600754611ebe82611eb8896001600160a01b031660009081526015602052604090205490565b90611fbe565b1115611ec957600080fd5b6001600160a01b038616600090815260156020526040902054611eec9082611fbe565b6001600160a01b038088166000818152601560205260409081902093909355915190891690600080516020612cd083398151915290611f2e9085815260200190565b60405180910390a3600193505050506110a4565b60008184841115611f665760405162461bcd60e51b8152600401610afa9190612747565b506000611f738486612bd0565b95945050505050565b60006110a483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f42565b600080611fcb8385612b44565b9050838110156110a45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610afa565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260159091529182205461206e918490611f42565b6001600160a01b03808616600090815260156020526040808220939093559085168152205461209d9083611fbe565b6001600160a01b038085166000818152601560205260409081902093909355915190861690600080516020612cd0833981519152906120df9086815260200190565b60405180910390a35060019392505050565b6006548111158061211a57506001600160a01b03821660009081526019602052604090205460ff165b61133d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610afa565b601c805460ff60a01b1916600160a01b1790556014546012546000916121909160029161218a9182908790612382565b90612404565b9050600061219e8383611f7c565b90506121a981612446565b60125447906000906121c9906121c0906002612404565b60145490611f7c565b905060006121eb600261218a8461218a6012548861238290919063ffffffff16565b905060006121f98483611f7c565b9050801561221757600954612217906001600160a01b0316826125d9565b6000821180156122275750600086115b1561227857612236868361260f565b60408051868152602081018490529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601c805460ff60a01b191690555050505050565b6001600160a01b0383166000908152601a6020526040812054819060ff16156122d2576122cb606461218a600c548661238290919063ffffffff16565b9050612310565b6001600160a01b0384166000908152601a602052604090205460ff16156123105761230d606461218a6010548661238290919063ffffffff16565b90505b801561237857306000908152601560205260409020546123309082611fbe565b30600081815260156020526040908190209290925590516001600160a01b03871690600080516020612cd08339815191529061236f9085815260200190565b60405180910390a35b611f738382611f7c565b60008260000361239457506000610eb3565b60006123a08385612be3565b9050826123ad8583612bfa565b146110a45760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610afa565b60006110a483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126e4565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061247b5761247b612aff565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156124d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f89190612aa8565b8160018151811061250b5761250b612aff565b6001600160a01b039283166020918202929092010152601b546125319130911684611a71565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061256a908590600090869030904290600401612c1c565b600060405180830381600087803b15801561258457600080fd5b505af1158015612598573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516125cd929190612c58565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561103b573d6000803e3d6000fd5b601b546126279030906001600160a01b031684611a71565b601b546001600160a01b031663f305d7198230856000806126506000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156126b8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126dd9190612c79565b5050505050565b600081836127055760405162461bcd60e51b8152600401610afa9190612747565b506000611f738486612bfa565b6001600160a01b038116811461272757600080fd5b50565b60006020828403121561273c57600080fd5b81356110a481612712565b600060208083528351808285015260005b8181101561277457858101830151858201604001528201612758565b506000604082860101526040601f19601f8301168501019250505092915050565b600080604083850312156127a857600080fd5b82356127b381612712565b946020939093013593505050565b803580151581146127d157600080fd5b919050565b600080604083850312156127e957600080fd5b82356127f481612712565b9150612802602084016127c1565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561284a5761284a61280b565b604052919050565b600067ffffffffffffffff82111561286c5761286c61280b565b5060051b60200190565b600082601f83011261288757600080fd5b8135602061289c61289783612852565b612821565b82815260059290921b840181019181810190868411156128bb57600080fd5b8286015b848110156128d657803583529183019183016128bf565b509695505050505050565b600080604083850312156128f457600080fd5b823567ffffffffffffffff8082111561290c57600080fd5b818501915085601f83011261292057600080fd5b8135602061293061289783612852565b82815260059290921b8401810191818101908984111561294f57600080fd5b948201945b8386101561297657853561296781612712565b82529482019490820190612954565b9650508601359250508082111561298c57600080fd5b5061299985828601612876565b9150509250929050565b6000806000606084860312156129b857600080fd5b83356129c381612712565b925060208401356129d381612712565b929592945050506040919091013590565b6000602082840312156129f657600080fd5b6110a4826127c1565b600060208284031215612a1157600080fd5b5035919050565b60008060408385031215612a2b57600080fd5b50508035926020909101359150565b60008060408385031215612a4d57600080fd5b8235612a5881612712565b91506020830135612a6881612712565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612aba57600080fd5b81516110a481612712565b600181811c90821680612ad957607f821691505b602082108103612af957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612b3d57612b3d612b15565b5060010190565b80820180821115610eb357610eb3612b15565b600081518084526020808501945080840160005b83811015612b905781516001600160a01b031687529582019590820190600101612b6b565b509495945050505050565b848152608060208201526000612bb46080830186612b57565b6001600160a01b03949094166040830152506060015292915050565b81810381811115610eb357610eb3612b15565b8082028115828204841417610eb357610eb3612b15565b600082612c1757634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a060408201526000612c3b60a0830186612b57565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612c716040830184612b57565b949350505050565b600080600060608486031215612c8e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122050fddfd4ba31e04840c42e05d5bca10d4463bcb8e0657ca3a4293ce939d7066f64736f6c63430008110033
Deployed Bytecode Sourcemap
31843:18647:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33062:36;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;33062:36:0;;;;;;;;42646:772;;;;;;;;;;-1:-1:-1;42646:772:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;748:32:1;;;730:51;;718:2;703:18;42646:772:0;584:203:1;36838:83:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;38237:161::-;;;;;;;;;;-1:-1:-1;38237:161:0;;;;;:::i;:::-;;:::i;:::-;;;1830:14:1;;1823:22;1805:41;;1793:2;1778:18;38237:161:0;1665:187:1;33105:28:0;;;;;;;;;;;;;;;;33020:35;;;;;;;;;;;;;;;;33758:41;;;;;;;;;;-1:-1:-1;33758:41:0;;;;-1:-1:-1;;;;;33758:41:0;;;37115:100;;;;;;;;;;-1:-1:-1;37195:12:0;;37115:100;;32930:27;;;;;;;;;;;;;;;;33906:33;;;;;;;;;;;;;;;;41085:135;;;;;;;;;;-1:-1:-1;41085:135:0;;;;;:::i;:::-;;:::i;:::-;;43605:456;;;;;;;;;;-1:-1:-1;43605:456:0;;;;;:::i;:::-;;:::i;44413:313::-;;;;;;;;;;-1:-1:-1;44413:313:0;;;;;:::i;:::-;;:::i;40925:113::-;;;;;;;;;;-1:-1:-1;40925:113:0;;;;;:::i;:::-;;:::i;32736:81::-;;;;;;;;;;;;;;;38751:128;;;;;;;;;;;;;:::i;33263:46::-;;;;;;;;;;;;;;;;38891:87;;;;;;;;;;-1:-1:-1;38958:12:0;38891:87;;42066:369;;;;;;;;;;-1:-1:-1;42066:369:0;;;;;:::i;:::-;;:::i;37024:83::-;;;;;;;;;;-1:-1:-1;37090:9:0;;37024:83;;37090:9;;;;5852:36:1;;5840:2;5825:18;37024:83:0;5710:184:1;37532:218:0;;;;;;;;;;-1:-1:-1;37532:218:0;;;;;:::i;:::-;;:::i;41436:124::-;;;;;;;;;;-1:-1:-1;41436:124:0;;;;;:::i;:::-;;:::i;33706:45::-;;;;;;;;;;-1:-1:-1;33706:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33140:35;;;;;;;;;;;;;;;;33509:50;;;;;;;;;;-1:-1:-1;33509:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39742:334;;;;;;;;;;-1:-1:-1;39742:334:0;;;;;:::i;:::-;;:::i;37223:119::-;;;;;;;;;;-1:-1:-1;37223:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;37316:18:0;37289:7;37316:18;;;:9;:18;;;;;;;37223:119;4852:148;;;;;;;;;;;;;:::i;32888:35::-;;;;;;;;;;;;;;;;43472:76;;;;;;;;;;;;;:::i;32343:55::-;;;;;;;;;;;;;;;;32411:53;;;;;;;;;;;;;;;;32847:34;;;;;;;;;;;;;;;;39098:129;;;;;;;;;;-1:-1:-1;39098:129:0;;;;;:::i;:::-;;:::i;40084:346::-;;;;;;;;;;-1:-1:-1;40084:346:0;;;;;:::i;:::-;;:::i;4210:79::-;;;;;;;;;;-1:-1:-1;4248:7:0;4275:6;-1:-1:-1;;;;;4275:6:0;4210:79;;36929:87;;;;;;;;;;;;;:::i;38076:120::-;;;;;;;;;;-1:-1:-1;38165:23:0;;38076:120;;33316:39;;;;;;;;;;;;;;;;37756:269;;;;;;;;;;-1:-1:-1;37756:269:0;;;;;:::i;:::-;;:::i;44238:167::-;;;;;;;;;;-1:-1:-1;44238:167:0;;;;;:::i;:::-;;:::i;33211:45::-;;;;;;;;;;;;;;;;33806:26;;;;;;;;;;-1:-1:-1;33806:26:0;;;;-1:-1:-1;;;;;33806:26:0;;;33566:52;;;;;;;;;;-1:-1:-1;33566:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32536:92;;;;;;;;;;-1:-1:-1;32536:92:0;;;;;;;-1:-1:-1;;;;;32536:92:0;;;37383:143;;;;;;;;;;-1:-1:-1;37383:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;37491:18:0;;;37464:7;37491:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;37383:143;32964:34;;;;;;;;;;;;;;;;41624:365;;;;;;;;;;-1:-1:-1;41624:365:0;;;;;:::i;:::-;;:::i;39430:111::-;;;;;;;;;;-1:-1:-1;39430:111:0;;;;;:::i;:::-;;:::i;40476:413::-;;;;;;;;;;-1:-1:-1;40476:413:0;;;;;:::i;:::-;;:::i;39575:135::-;;;;;;;;;;-1:-1:-1;39575:135:0;;;;;:::i;:::-;;:::i;41260:102::-;;;;;;;;;;-1:-1:-1;41260:102:0;;;;;:::i;:::-;;:::i;5155:244::-;;;;;;;;;;-1:-1:-1;5155:244:0;;;;;:::i;:::-;;:::i;39266:127::-;;;;;;;;;;-1:-1:-1;39266:127:0;;;;;:::i;:::-;;:::i;32472:35::-;;;;;;;;;;-1:-1:-1;32472:35:0;;;;;;;;33946:34;;;;;;;;;;;;;;;;49786:527;;;;;;;;;;-1:-1:-1;49786:527:0;;;;;:::i;:::-;;:::i;32635:94::-;;;;;;;;;;-1:-1:-1;32635:94:0;;;;-1:-1:-1;;;;;32635:94:0;;;34017:31;;;;;;;;;;-1:-1:-1;34017:31:0;;;;;;;;42646:772;42726:22;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;;;;;;;;;42763:35:::1;42820:16;42763:74;;42884:16;-1:-1:-1::0;;;;;42884:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42866:53:0::1;;42928:4;42935:16;-1:-1:-1::0;;;;;42935:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42866:93;::::0;-1:-1:-1;;;;;;42866:93:0::1;::::0;;;;;;-1:-1:-1;;;;;7801:15:1;;;42866:93:0::1;::::0;::::1;7783:34:1::0;7853:15;;7833:18;;;7826:43;7718:18;;42866:93:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42849:110:::0;-1:-1:-1;;;;;;43014:28:0;::::1;43011:201;;43104:16;-1:-1:-1::0;;;;;43104:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43086:74:0::1;;43169:4;43176:16;-1:-1:-1::0;;;;;43176:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43086:114;::::0;-1:-1:-1;;;;;;43086:114:0::1;::::0;;;;;;-1:-1:-1;;;;;7801:15:1;;;43086:114:0::1;::::0;::::1;7783:34:1::0;7853:15;;7833:18;;;7826:43;7718:18;;43086:114:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43069:131;;43011:201;43224:11;:28:::0;;-1:-1:-1;;;;;;43224:28:0;;::::1;-1:-1:-1::0;;;;;43224:28:0;;::::1;::::0;;::::1;::::0;;43264:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;43310:41:0;;;:19:::1;:41;::::0;;;;;;;:48;;-1:-1:-1;;43310:48:0;;::::1;-1:-1:-1::0;43310:48:0;;::::1;::::0;;;43390:11;;;;::::1;43369:34:::0;;:12:::1;:34:::0;;;;;:41;;;;::::1;::::0;;::::1;::::0;;43224:28;43238:14;-1:-1:-1;42646:772:0:o;36838:83::-;36875:13;36908:5;36901:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36838:83;:::o;38237:161::-;38312:4;38329:39;847:10;38352:7;38361:6;38329:8;:39::i;:::-;-1:-1:-1;38386:4:0;38237:161;;;;;:::o;41085:135::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41176:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;41176:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41085:135::o;43605:456::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;43754:6:::1;:13;43729:14;:21;:38;43721:100;;;::::0;-1:-1:-1;;;43721:100:0;;8467:2:1;43721:100:0::1;::::0;::::1;8449:21:1::0;8506:2;8486:18;;;8479:30;8545:34;8525:18;;;8518:62;-1:-1:-1;;;8596:18:1;;;8589:47;8653:19;;43721:100:0::1;8265:413:1::0;43721:100:0::1;43836:9;43832:222;43855:14;:21;43851:1;:25;43832:222;;;43897:14;43914;43929:1;43914:17;;;;;;;;:::i;:::-;;;;;;;43897:34;;43946:21;43970:6;43977:1;43970:9;;;;;;;;:::i;:::-;;;;;;;43946:33;;44020:6;-1:-1:-1::0;;;;;43999:43:0::1;44008:10;-1:-1:-1::0;;;;;43999:43:0::1;-1:-1:-1::0;;;;;;;;;;;44028:13:0::1;43999:43;;;;160:25:1::0;;148:2;133:18;;14:177;43999:43:0::1;;;;;;;;43882:172;;43878:3;;;;;:::i;:::-;;;;43832:222;;;;43605:456:::0;;:::o;44413:313::-;44511:4;44528:36;44538:6;44546:9;44557:6;44528:9;:36::i;:::-;-1:-1:-1;44575:121:0;44584:6;847:10;44606:89;44644:6;44606:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44606:19:0;;;;;;:11;:19;;;;;;;;847:10;44606:33;;;;;;;;;;:37;:89::i;:::-;44575:8;:121::i;:::-;-1:-1:-1;44714:4:0;44413:313;;;;;;:::o;40925:113::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;41003:16:::1;:27:::0;;-1:-1:-1;;41003:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40925:113::o;38751:128::-;38858:11;-1:-1:-1;;;;;37316:18:0;38804:7;37316:18;;;:9;:18;;;;;;38831:12;;:40;;:16;:40::i;:::-;38824:47;;38751:128;:::o;42066:369::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42156:24:0;::::1;42148:60;;;::::0;-1:-1:-1;;;42148:60:0;;9289:2:1;42148:60:0::1;::::0;::::1;9271:21:1::0;9328:2;9308:18;;;9301:30;-1:-1:-1;;;9347:18:1;;;9340:53;9410:18;;42148:60:0::1;9087:347:1::0;42148:60:0::1;-1:-1:-1::0;;;;;42219:29:0;;::::1;;::::0;;;:17:::1;:29;::::0;;;;;:36;;-1:-1:-1;;42219:36:0;;::::1;42251:4;42219:36;::::0;;;42284:16:::1;::::0;;;::::1;42266:35:::0;;;;;:43;;;;::::1;::::0;;;42361:16;42325:53;;42361:16;::::1;::::0;42325:53:::1;::::0;42219:29;42325:53:::1;42389:16;:38:::0;;-1:-1:-1;;;;;;42389:38:0::1;-1:-1:-1::0;;;;;42389:38:0;;;::::1;::::0;;;::::1;::::0;;42066:369::o;37532:218::-;847:10;37620:4;37669:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;37669:34:0;;;;;;;;;;37620:4;;37637:83;;37660:7;;37669:50;;37708:10;37669:38;:50::i;41436:124::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;41518:23:::1;:34:::0;41436:124::o;39742:334::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;39839:16:::1;:33:::0;;;39883:15:::1;:31:::0;;;39940:34:::1;39901:13:::0;39858:14;39940:34:::1;:::i;:::-;39925:12;:49:::0;;;40009:14:::1;::::0;-1:-1:-1;39993:30:0::1;39985:83;;;::::0;-1:-1:-1;;;39985:83:0;;9771:2:1;39985:83:0::1;::::0;::::1;9753:21:1::0;9810:2;9790:18;;;9783:30;9849:34;9829:18;;;9822:62;-1:-1:-1;;;9900:18:1;;;9893:38;9948:19;;39985:83:0::1;9569:404:1::0;39985:83:0::1;39742:334:::0;;:::o;4852:148::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;4959:1:::1;4943:6:::0;;4922:40:::1;::::0;-1:-1:-1;;;;;4943:6:0;;::::1;::::0;4922:40:::1;::::0;4959:1;;4922:40:::1;4990:1;4973:19:::0;;-1:-1:-1;;;;;;4973:19:0::1;::::0;;4852:148::o;43472:76::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;43522:11:::1;:18:::0;;-1:-1:-1;;43522:18:0::1;43536:4;43522:18;::::0;;43472:76::o;39098:129::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39187:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;39187:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39098:129::o;40084:346::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;40185:17:::1;:34:::0;;;40230:16:::1;:32:::0;;;40289:36:::1;40249:13:::0;40205:14;40289:36:::1;:::i;:::-;40273:13;:52:::0;;;40361:15:::1;::::0;-1:-1:-1;40344:32:0::1;40336:86;;;::::0;-1:-1:-1;;;40336:86:0;;10180:2:1;40336:86:0::1;::::0;::::1;10162:21:1::0;10219:2;10199:18;;;10192:30;10258:34;10238:18;;;10231:62;-1:-1:-1;;;10309:18:1;;;10302:39;10358:19;;40336:86:0::1;9978:405:1::0;36929:87:0;36968:13;37001:7;36994:14;;;;;:::i;37756:269::-;37849:4;37866:129;847:10;37889:7;37898:96;37937:15;37898:96;;;;;;;;;;;;;;;;;847:10;37898:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;37898:34:0;;;;;;;;;;;;:38;:96::i;44238:167::-;44316:4;44333:42;847:10;44357:9;44368:6;44333:9;:42::i;41624:365::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41713:24:0;::::1;41705:60;;;::::0;-1:-1:-1;;;41705:60:0;;9289:2:1;41705:60:0::1;::::0;::::1;9271:21:1::0;9328:2;9308:18;;;9301:30;-1:-1:-1;;;9347:18:1;;;9340:53;9410:18;;41705:60:0::1;9087:347:1::0;41705:60:0::1;-1:-1:-1::0;;;;;41776:29:0;;::::1;;::::0;;;:17:::1;:29;::::0;;;;;:36;;-1:-1:-1;;41776:36:0;;::::1;41808:4;41776:36;::::0;;;41841:15:::1;::::0;;41776:36:::1;41841:15:::0;;;::::1;::::0;::::1;41823:34:::0;;;;;:42;;;;::::1;::::0;;;41916:15;41881:51;;41916:15;::::1;::::0;;::::1;::::0;41881:51:::1;::::0;41776:29;41881:51:::1;41943:15;:38:::0;;-1:-1:-1;;;;;41943:38:0;;::::1;;;-1:-1:-1::0;;;;;;41943:38:0;;::::1;::::0;;;::::1;::::0;;41624:365::o;39430:111::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;39507:12:::1;:26:::0;39430:111::o;40476:413::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;40596:25:::1;:45:::0;;;40652:26:::1;:47:::0;;;40738:54:::1;40681:18:::0;40624:17;40738:54:::1;:::i;:::-;40711:24;:81:::0;;;40839:3:::1;40811:31;40803:78;;;::::0;-1:-1:-1;;;40803:78:0;;10590:2:1;40803:78:0::1;::::0;::::1;10572:21:1::0;10629:2;10609:18;;;10602:30;10668:34;10648:18;;;10641:62;-1:-1:-1;;;10719:18:1;;;10712:32;10761:19;;40803:78:0::1;10388:398:1::0;39575:135:0;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39665:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;39665:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39575:135::o;41260:102::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;41332:10:::1;:22:::0;41260:102::o;5155:244::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5244:22:0;::::1;5236:73;;;::::0;-1:-1:-1;;;5236:73:0;;10993:2:1;5236:73:0::1;::::0;::::1;10975:21:1::0;11032:2;11012:18;;;11005:30;11071:34;11051:18;;;11044:62;-1:-1:-1;;;11122:18:1;;;11115:36;11168:19;;5236:73:0::1;10791:402:1::0;5236:73:0::1;5346:6;::::0;;5325:38:::1;::::0;-1:-1:-1;;;;;5325:38:0;;::::1;::::0;5346:6;::::1;::::0;5325:38:::1;::::0;::::1;5374:6;:17:::0;;-1:-1:-1;;;;;;5374:17:0::1;-1:-1:-1::0;;;;;5374:17:0;;;::::1;::::0;;;::::1;::::0;;5155:244::o;39266:127::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39353:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;39353:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39266:127::o;49786:527::-;4422:6;;-1:-1:-1;;;;;4422:6:0;847:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;49945:16:::1;::::0;;49959:1:::1;49945:16:::0;;;;;::::1;::::0;;49921:21:::1;::::0;49945:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;49982:15:0::1;::::0;:22:::1;::::0;;-1:-1:-1;;;49982:22:0;;;;49921:40;;-1:-1:-1;;;;;;49982:15:0;;::::1;::::0;:20:::1;::::0;-1:-1:-1;49982:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49972:4;49977:1;49972:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;49972:32:0::1;;;-1:-1:-1::0;;;;;49972:32:0::1;;;::::0;::::1;50033:4;50015;50020:1;50015:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;50015:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;50077:15:::1;::::0;:228:::1;::::0;-1:-1:-1;;;50077:228:0;;:15;::::1;::::0;:66:::1;::::0;50151:14;;50077:228:::1;::::0;:15:::1;::::0;50230:4;;50257:6:::1;::::0;50279:15:::1;::::0;50077:228:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;49852:461;49786:527:::0;:::o;38404:335::-;-1:-1:-1;;;;;38497:19:0;;38489:68;;;;-1:-1:-1;;;38489:68:0;;12381:2:1;38489:68:0;;;12363:21:1;12420:2;12400:18;;;12393:30;12459:34;12439:18;;;12432:62;-1:-1:-1;;;12510:18:1;;;12503:34;12554:19;;38489:68:0;12179:400:1;38489:68:0;-1:-1:-1;;;;;38576:21:0;;38568:68;;;;-1:-1:-1;;;38568:68:0;;12786:2:1;38568:68:0;;;12768:21:1;12825:2;12805:18;;;12798:30;12864:34;12844:18;;;12837:62;-1:-1:-1;;;12915:18:1;;;12908:32;12957:19;;38568:68:0;12584:398:1;38568:68:0;-1:-1:-1;;;;;38647:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;38699:32;;160:25:1;;;38699:32:0;;133:18:1;38699:32:0;;;;;;;38404:335;;;:::o;44737:1870::-;44824:4;-1:-1:-1;;;;;44849:20:0;;44841:70;;;;-1:-1:-1;;;44841:70:0;;13189:2:1;44841:70:0;;;13171:21:1;13228:2;13208:18;;;13201:30;13267:34;13247:18;;;13240:62;-1:-1:-1;;;13318:18:1;;;13311:35;13363:19;;44841:70:0;12987:401:1;44841:70:0;-1:-1:-1;;;;;44930:23:0;;44922:71;;;;-1:-1:-1;;;44922:71:0;;13595:2:1;44922:71:0;;;13577:21:1;13634:2;13614:18;;;13607:30;13673:34;13653:18;;;13646:62;-1:-1:-1;;;13724:18:1;;;13717:33;13767:19;;44922:71:0;13393:399:1;44922:71:0;45042:11;;;;45037:138;;4248:7;4275:6;-1:-1:-1;;;;;45078:17:0;;;4275:6;;45078:17;45070:93;;;;-1:-1:-1;;;45070:93:0;;13999:2:1;45070:93:0;;;13981:21:1;14038:2;14018:18;;;14011:30;14077:34;14057:18;;;14050:62;14148:33;14128:18;;;14121:61;14199:19;;45070:93:0;13797:427:1;45070:93:0;45190:16;;-1:-1:-1;;;45190:16:0;;;;45187:1413;;;45240:41;45255:6;45263:9;45274:6;45240:14;:41::i;:::-;45233:48;;;;45187:1413;4248:7;4275:6;-1:-1:-1;;;;;45393:17:0;;;4275:6;;45393:17;;;;:41;;-1:-1:-1;4248:7:0;4275:6;-1:-1:-1;;;;;45414:20:0;;;4275:6;;45414:20;;45393:41;45389:111;;;45455:28;45469:6;45476;45455:13;:28::i;:::-;45613:4;45564:28;37316:18;;;:9;:18;;;;;;45689:23;;45665:47;;;;;;;45731:44;;-1:-1:-1;45759:16:0;;-1:-1:-1;;;45759:16:0;;;;45758:17;45731:44;:69;;;;-1:-1:-1;;;;;;45780:20:0;;;;;;:12;:20;;;;;;;;45779:21;45731:69;45727:164;;;45835:36;45850:20;45835:14;:36::i;:::-;45965:53;;;;;;;;;;;-1:-1:-1;;;45965:53:0;;;;;;;;-1:-1:-1;;;;;45965:17:0;;-1:-1:-1;45965:17:0;;;:9;:17;;;;;;;;:53;;45987:6;;45965:21;:53::i;:::-;-1:-1:-1;;;;;45945:17:0;;;;;;:9;:17;;;;;;;;:73;;;;46056:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;46085:28:0;;;;;;:17;:28;;;;;;;;46056:57;46055:148;;46169:34;46177:6;46185:9;46196:6;46169:7;:34::i;:::-;46055:148;;;46160:6;46055:148;46266:16;;46033:170;;-1:-1:-1;46266:16:0;;:51;;;;-1:-1:-1;;;;;;46287:30:0;;;;;;:19;:30;;;;;;;;46286:31;46266:51;46263:133;;;46385:10;;46344:37;46369:11;46344:20;46354:9;-1:-1:-1;;;;;37316:18:0;37289:7;37316:18;;;:9;:18;;;;;;;37223:119;46344:20;:24;;:37::i;:::-;:51;;46336:60;;;;;;-1:-1:-1;;;;;46465:20:0;;;;;;:9;:20;;;;;;:37;;46490:11;46465:24;:37::i;:::-;-1:-1:-1;;;;;46442:20:0;;;;;;;:9;:20;;;;;;;:60;;;;46522:40;;;;;;-1:-1:-1;;;;;;;;;;;46522:40:0;;;46550:11;160:25:1;;148:2;133:18;;14:177;46522:40:0;;;;;;;;46584:4;46577:11;;;;;;;9956:192;10042:7;10078:12;10070:6;;;;10062:29;;;;-1:-1:-1;;;10062:29:0;;;;;;;;:::i;:::-;-1:-1:-1;10102:9:0;10114:5;10118:1;10114;:5;:::i;:::-;10102:17;9956:192;-1:-1:-1;;;;;9956:192:0:o;9517:136::-;9575:7;9602:43;9606:1;9609;9602:43;;;;;;;;;;;;;;;;;:3;:43::i;9053:181::-;9111:7;;9143:5;9147:1;9143;:5;:::i;:::-;9131:17;;9172:1;9167;:6;;9159:46;;;;-1:-1:-1;;;9159:46:0;;14564:2:1;9159:46:0;;;14546:21:1;14603:2;14583:18;;;14576:30;14642:29;14622:18;;;14615:57;14689:18;;9159:46:0;14362:351:1;46641:330:0;46771:53;;;;;;;;;;;-1:-1:-1;;;46771:53:0;;;;;;;;-1:-1:-1;;;;;46771:17:0;;46734:4;46771:17;;;:9;:17;;;;;;;:53;;46793:6;;46771:21;:53::i;:::-;-1:-1:-1;;;;;46751:17:0;;;;;;;:9;:17;;;;;;:73;;;;46858:20;;;;;;;:32;;46883:6;46858:24;:32::i;:::-;-1:-1:-1;;;;;46835:20:0;;;;;;;:9;:20;;;;;;;:55;;;;46906:35;;;;;;-1:-1:-1;;;;;;;;;;;46906:35:0;;;46934:6;160:25:1;;148:2;133:18;;14:177;46906:35:0;;;;;;;;-1:-1:-1;46959:4:0;46641:330;;;;;:::o;50321:166::-;50418:12;;50408:6;:22;;:49;;;-1:-1:-1;;;;;;50434:23:0;;;;;;:15;:23;;;;;;;;50408:49;50400:79;;;;-1:-1:-1;;;50400:79:0;;14920:2:1;50400:79:0;;;14902:21:1;14959:2;14939:18;;;14932:30;-1:-1:-1;;;14978:18:1;;;14971:47;15035:18;;50400:79:0;14718:341:1;47632:1095:0;34547:16;:23;;-1:-1:-1;;;;34547:23:0;-1:-1:-1;;;34547:23:0;;;:16;47830:24;47799:25:::1;::::0;34547:23;;47784:78:::1;::::0;47860:1:::1;::::0;47784:71:::1;::::0;;;:10;;:14:::1;:41::i;:::-;:45:::0;::::1;:71::i;:78::-;47762:100:::0;-1:-1:-1;47873:21:0::1;47897:27;:10:::0;47762:100;47897:14:::1;:27::i;:::-;47873:51;;47964:31;47981:13;47964:16;:31::i;:::-;48185:25;::::0;48061:21:::1;::::0;48036:22:::1;::::0;48156:62:::1;::::0;48185:32:::1;::::0;48215:1:::1;48185:29;:32::i;:::-;48156:24;::::0;;:28:::1;:62::i;:::-;48137:81;;48229:23;48255:66;48319:1;48255:59;48305:8;48255:45;48274:25;;48255:14;:18;;:45;;;;:::i;:66::-;48229:92:::0;-1:-1:-1;48348:24:0::1;48375:35;:14:::0;48229:92;48375:18:::1;:35::i;:::-;48348:62:::0;-1:-1:-1;48426:20:0;;48423:94:::1;;48482:16;::::0;48461:56:::1;::::0;-1:-1:-1;;;;;48482:16:0::1;48500::::0;48461:20:::1;:56::i;:::-;48551:1;48533:15;:19;:38;;;;;48570:1;48556:11;:15;48533:38;48530:190;;;48587:42;48600:11;48613:15;48587:12;:42::i;:::-;48649:59;::::0;;15266:25:1;;;15322:2;15307:18;;15300:34;;;15350:18;;;15343:34;;;48649:59:0::1;::::0;15254:2:1;15239:18;48649:59:0::1;;;;;;;48530:190;-1:-1:-1::0;;34593:16:0;:24;;-1:-1:-1;;;;34593:24:0;;;-1:-1:-1;;;;;47632:1095:0:o;47007:580::-;-1:-1:-1;;;;;47148:20:0;;47093:7;47148:20;;;:12;:20;;;;;;47093:7;;47148:20;;47145:213;;;47197:33;47226:3;47197:24;47208:12;;47197:6;:10;;:24;;;;:::i;:33::-;47185:45;;47145:213;;;-1:-1:-1;;;;;47260:23:0;;;;;;:12;:23;;;;;;;;47257:101;;;47312:34;47342:3;47312:25;47323:13;;47312:6;:10;;:25;;;;:::i;:34::-;47300:46;;47257:101;47371:13;;47368:173;;47446:4;47428:24;;;;:9;:24;;;;;;:39;;47457:9;47428:28;:39::i;:::-;47419:4;47401:24;;;;:9;:24;;;;;;;:66;;;;47487:42;;-1:-1:-1;;;;;47487:42:0;;;-1:-1:-1;;;;;;;;;;;47487:42:0;;;47519:9;160:25:1;;148:2;133:18;;14:177;47487:42:0;;;;;;;;47368:173;47558:21;:6;47569:9;47558:10;:21::i;10407:471::-;10465:7;10710:1;10715;10710:6;10706:47;;-1:-1:-1;10740:1:0;10733:8;;10706:47;10765:9;10777:5;10781:1;10777;:5;:::i;:::-;10765:17;-1:-1:-1;10810:1:0;10801:5;10805:1;10765:17;10801:5;:::i;:::-;:10;10793:56;;;;-1:-1:-1;;;10793:56:0;;15985:2:1;10793:56:0;;;15967:21:1;16024:2;16004:18;;;15997:30;16063:34;16043:18;;;16036:62;-1:-1:-1;;;16114:18:1;;;16107:31;16155:19;;10793:56:0;15783:397:1;11354:132:0;11412:7;11439:39;11443:1;11446;11439:39;;;;;;;;;;;;;;;;;:3;:39::i;48762:524::-;48852:16;;;48866:1;48852:16;;;;;;;;48828:21;;48852:16;;;;;;;;;;-1:-1:-1;48852:16:0;48828:40;;48897:4;48879;48884:1;48879:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48879:23:0;;;:7;;;;;;;;;;:23;;;;48923:15;;:22;;;-1:-1:-1;;;48923:22:0;;;;:15;;;;;:20;;:22;;;;;48879:7;;48923:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48913:4;48918:1;48913:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48913:32:0;;;:7;;;;;;;;;:32;48988:15;;48956:62;;48973:4;;48988:15;49006:11;48956:8;:62::i;:::-;49029:15;;:198;;-1:-1:-1;;;49029:198:0;;-1:-1:-1;;;;;49029:15:0;;;;:66;;:198;;49110:11;;49029:15;;49153:4;;49180;;49201:15;;49029:198;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49243:35;49260:11;49273:4;49243:35;;;;;;;:::i;:::-;;;;;;;;48817:469;48762:524;:::o;42482:126::-;42574:26;;-1:-1:-1;;;;;42574:18:0;;;:26;;;;;42593:6;;42574:26;;;;42593:6;42574:18;:26;;;;;;;;;;;;;;;;;;;49317:362;49430:15;;49398:62;;49415:4;;-1:-1:-1;;;;;49430:15:0;49448:11;49398:8;:62::i;:::-;49471:15;;-1:-1:-1;;;;;49471:15:0;:31;49510:9;49543:4;49563:11;49471:15;;49623:7;4248;4275:6;-1:-1:-1;;;;;4275:6:0;;4210:79;49623:7;49471:200;;;;;;-1:-1:-1;;;;;;49471:200:0;;;-1:-1:-1;;;;;17468:15:1;;;49471:200:0;;;17450:34:1;17500:18;;;17493:34;;;;17543:18;;;17536:34;;;;17586:18;;;17579:34;17650:15;;;17629:19;;;17622:44;49645:15:0;17682:19:1;;;17675:35;17384:19;;49471:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;49317:362;;:::o;11982:278::-;12068:7;12103:12;12096:5;12088:28;;;;-1:-1:-1;;;12088:28:0;;;;;;;;:::i;:::-;-1:-1:-1;12127:9:0;12139:5;12143:1;12139;:5;:::i;196:131:1:-;-1:-1:-1;;;;;271:31:1;;261:42;;251:70;;317:1;314;307:12;251:70;196:131;:::o;332:247::-;391:6;444:2;432:9;423:7;419:23;415:32;412:52;;;460:1;457;450:12;412:52;499:9;486:23;518:31;543:5;518:31;:::i;792:548::-;904:4;933:2;962;951:9;944:21;994:6;988:13;1037:6;1032:2;1021:9;1017:18;1010:34;1062:1;1072:140;1086:6;1083:1;1080:13;1072:140;;;1181:14;;;1177:23;;1171:30;1147:17;;;1166:2;1143:26;1136:66;1101:10;;1072:140;;;1076:3;1261:1;1256:2;1247:6;1236:9;1232:22;1228:31;1221:42;1331:2;1324;1320:7;1315:2;1307:6;1303:15;1299:29;1288:9;1284:45;1280:54;1272:62;;;;792:548;;;;:::o;1345:315::-;1413:6;1421;1474:2;1462:9;1453:7;1449:23;1445:32;1442:52;;;1490:1;1487;1480:12;1442:52;1529:9;1516:23;1548:31;1573:5;1548:31;:::i;:::-;1598:5;1650:2;1635:18;;;;1622:32;;-1:-1:-1;;;1345:315:1:o;2092:160::-;2157:20;;2213:13;;2206:21;2196:32;;2186:60;;2242:1;2239;2232:12;2186:60;2092:160;;;:::o;2257:315::-;2322:6;2330;2383:2;2371:9;2362:7;2358:23;2354:32;2351:52;;;2399:1;2396;2389:12;2351:52;2438:9;2425:23;2457:31;2482:5;2457:31;:::i;:::-;2507:5;-1:-1:-1;2531:35:1;2562:2;2547:18;;2531:35;:::i;:::-;2521:45;;2257:315;;;;;:::o;2577:127::-;2638:10;2633:3;2629:20;2626:1;2619:31;2669:4;2666:1;2659:15;2693:4;2690:1;2683:15;2709:275;2780:2;2774:9;2845:2;2826:13;;-1:-1:-1;;2822:27:1;2810:40;;2880:18;2865:34;;2901:22;;;2862:62;2859:88;;;2927:18;;:::i;:::-;2963:2;2956:22;2709:275;;-1:-1:-1;2709:275:1:o;2989:183::-;3049:4;3082:18;3074:6;3071:30;3068:56;;;3104:18;;:::i;:::-;-1:-1:-1;3149:1:1;3145:14;3161:4;3141:25;;2989:183::o;3177:662::-;3231:5;3284:3;3277:4;3269:6;3265:17;3261:27;3251:55;;3302:1;3299;3292:12;3251:55;3338:6;3325:20;3364:4;3388:60;3404:43;3444:2;3404:43;:::i;:::-;3388:60;:::i;:::-;3482:15;;;3568:1;3564:10;;;;3552:23;;3548:32;;;3513:12;;;;3592:15;;;3589:35;;;3620:1;3617;3610:12;3589:35;3656:2;3648:6;3644:15;3668:142;3684:6;3679:3;3676:15;3668:142;;;3750:17;;3738:30;;3788:12;;;;3701;;3668:142;;;-1:-1:-1;3828:5:1;3177:662;-1:-1:-1;;;;;;3177:662:1:o;3844:1215::-;3962:6;3970;4023:2;4011:9;4002:7;3998:23;3994:32;3991:52;;;4039:1;4036;4029:12;3991:52;4079:9;4066:23;4108:18;4149:2;4141:6;4138:14;4135:34;;;4165:1;4162;4155:12;4135:34;4203:6;4192:9;4188:22;4178:32;;4248:7;4241:4;4237:2;4233:13;4229:27;4219:55;;4270:1;4267;4260:12;4219:55;4306:2;4293:16;4328:4;4352:60;4368:43;4408:2;4368:43;:::i;4352:60::-;4446:15;;;4528:1;4524:10;;;;4516:19;;4512:28;;;4477:12;;;;4552:19;;;4549:39;;;4584:1;4581;4574:12;4549:39;4608:11;;;;4628:217;4644:6;4639:3;4636:15;4628:217;;;4724:3;4711:17;4741:31;4766:5;4741:31;:::i;:::-;4785:18;;4661:12;;;;4823;;;;4628:217;;;4864:5;-1:-1:-1;;4907:18:1;;4894:32;;-1:-1:-1;;4938:16:1;;;4935:36;;;4967:1;4964;4957:12;4935:36;;4990:63;5045:7;5034:8;5023:9;5019:24;4990:63;:::i;:::-;4980:73;;;3844:1215;;;;;:::o;5064:456::-;5141:6;5149;5157;5210:2;5198:9;5189:7;5185:23;5181:32;5178:52;;;5226:1;5223;5216:12;5178:52;5265:9;5252:23;5284:31;5309:5;5284:31;:::i;:::-;5334:5;-1:-1:-1;5391:2:1;5376:18;;5363:32;5404:33;5363:32;5404:33;:::i;:::-;5064:456;;5456:7;;-1:-1:-1;;;5510:2:1;5495:18;;;;5482:32;;5064:456::o;5525:180::-;5581:6;5634:2;5622:9;5613:7;5609:23;5605:32;5602:52;;;5650:1;5647;5640:12;5602:52;5673:26;5689:9;5673:26;:::i;5899:180::-;5958:6;6011:2;5999:9;5990:7;5986:23;5982:32;5979:52;;;6027:1;6024;6017:12;5979:52;-1:-1:-1;6050:23:1;;5899:180;-1:-1:-1;5899:180:1:o;6084:248::-;6152:6;6160;6213:2;6201:9;6192:7;6188:23;6184:32;6181:52;;;6229:1;6226;6219:12;6181:52;-1:-1:-1;;6252:23:1;;;6322:2;6307:18;;;6294:32;;-1:-1:-1;6084:248:1:o;6561:388::-;6629:6;6637;6690:2;6678:9;6669:7;6665:23;6661:32;6658:52;;;6706:1;6703;6696:12;6658:52;6745:9;6732:23;6764:31;6789:5;6764:31;:::i;:::-;6814:5;-1:-1:-1;6871:2:1;6856:18;;6843:32;6884:33;6843:32;6884:33;:::i;:::-;6936:7;6926:17;;;6561:388;;;;;:::o;6954:356::-;7156:2;7138:21;;;7175:18;;;7168:30;7234:34;7229:2;7214:18;;7207:62;7301:2;7286:18;;6954:356::o;7315:251::-;7385:6;7438:2;7426:9;7417:7;7413:23;7409:32;7406:52;;;7454:1;7451;7444:12;7406:52;7486:9;7480:16;7505:31;7530:5;7505:31;:::i;7880:380::-;7959:1;7955:12;;;;8002;;;8023:61;;8077:4;8069:6;8065:17;8055:27;;8023:61;8130:2;8122:6;8119:14;8099:18;8096:38;8093:161;;8176:10;8171:3;8167:20;8164:1;8157:31;8211:4;8208:1;8201:15;8239:4;8236:1;8229:15;8093:161;;7880:380;;;:::o;8683:127::-;8744:10;8739:3;8735:20;8732:1;8725:31;8775:4;8772:1;8765:15;8799:4;8796:1;8789:15;8815:127;8876:10;8871:3;8867:20;8864:1;8857:31;8907:4;8904:1;8897:15;8931:4;8928:1;8921:15;8947:135;8986:3;9007:17;;;9004:43;;9027:18;;:::i;:::-;-1:-1:-1;9074:1:1;9063:13;;8947:135::o;9439:125::-;9504:9;;;9525:10;;;9522:36;;;9538:18;;:::i;11198:461::-;11251:3;11289:5;11283:12;11316:6;11311:3;11304:19;11342:4;11371:2;11366:3;11362:12;11355:19;;11408:2;11401:5;11397:14;11429:1;11439:195;11453:6;11450:1;11447:13;11439:195;;;11518:13;;-1:-1:-1;;;;;11514:39:1;11502:52;;11574:12;;;;11609:15;;;;11550:1;11468:9;11439:195;;;-1:-1:-1;11650:3:1;;11198:461;-1:-1:-1;;;;;11198:461:1:o;11664:510::-;11935:6;11924:9;11917:25;11978:3;11973:2;11962:9;11958:18;11951:31;11898:4;11999:57;12051:3;12040:9;12036:19;12028:6;11999:57;:::i;:::-;-1:-1:-1;;;;;12092:32:1;;;;12087:2;12072:18;;12065:60;-1:-1:-1;12156:2:1;12141:18;12134:34;11991:65;11664:510;-1:-1:-1;;11664:510:1:o;14229:128::-;14296:9;;;14317:11;;;14314:37;;;14331:18;;:::i;15388:168::-;15461:9;;;15492;;15509:15;;;15503:22;;15489:37;15479:71;;15530:18;;:::i;15561:217::-;15601:1;15627;15617:132;;15671:10;15666:3;15662:20;15659:1;15652:31;15706:4;15703:1;15696:15;15734:4;15731:1;15724:15;15617:132;-1:-1:-1;15763:9:1;;15561:217::o;16185:582::-;16484:6;16473:9;16466:25;16527:6;16522:2;16511:9;16507:18;16500:34;16570:3;16565:2;16554:9;16550:18;16543:31;16447:4;16591:57;16643:3;16632:9;16628:19;16620:6;16591:57;:::i;:::-;-1:-1:-1;;;;;16684:32:1;;;;16679:2;16664:18;;16657:60;-1:-1:-1;16748:3:1;16733:19;16726:35;16583:65;16185:582;-1:-1:-1;;;16185:582:1:o;16772:332::-;16979:6;16968:9;16961:25;17022:2;17017;17006:9;17002:18;16995:30;16942:4;17042:56;17094:2;17083:9;17079:18;17071:6;17042:56;:::i;:::-;17034:64;16772:332;-1:-1:-1;;;;16772:332:1:o;17721:306::-;17809:6;17817;17825;17878:2;17866:9;17857:7;17853:23;17849:32;17846:52;;;17894:1;17891;17884:12;17846:52;17923:9;17917:16;17907:26;;17973:2;17962:9;17958:18;17952:25;17942:35;;18017:2;18006:9;18002:18;17996:25;17986:35;;17721:306;;;;;:::o
Swarm Source
ipfs://50fddfd4ba31e04840c42e05d5bca10d4463bcb8e0657ca3a4293ce939d7066f
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.