Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 37 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 17655111 | 423 days ago | IN | 0 ETH | 0.00068615 | ||||
Exclude From Max... | 17655033 | 423 days ago | IN | 0 ETH | 0.00034466 | ||||
Update Swap Enab... | 17655024 | 423 days ago | IN | 0 ETH | 0.00035475 | ||||
Marketing Wallet... | 17654964 | 423 days ago | IN | 0 ETH | 0.00032989 | ||||
Exclude From Max... | 17654929 | 423 days ago | IN | 0 ETH | 0.00066203 | ||||
Marketing Wallet... | 17654926 | 423 days ago | IN | 0 ETH | 0.00036505 | ||||
Unlock | 17654800 | 423 days ago | IN | 0 ETH | 0.0003938 | ||||
Approve | 17641360 | 425 days ago | IN | 0 ETH | 0.00091499 | ||||
Approve | 17638056 | 425 days ago | IN | 0 ETH | 0.00101452 | ||||
Transfer | 17637831 | 425 days ago | IN | 0 ETH | 0.00103778 | ||||
Transfer | 17637791 | 425 days ago | IN | 0 ETH | 0.00225523 | ||||
Approve | 17637784 | 425 days ago | IN | 0 ETH | 0.00179261 | ||||
Approve | 17637735 | 425 days ago | IN | 0 ETH | 0.00206612 | ||||
Marketing Wallet... | 17637711 | 425 days ago | IN | 0 ETH | 0.00131806 | ||||
Marketing Wallet... | 17637709 | 425 days ago | IN | 0 ETH | 0.00123137 | ||||
Update Max Amoun... | 17637709 | 425 days ago | IN | 0 ETH | 0.00082932 | ||||
Update Max Amoun... | 17637709 | 425 days ago | IN | 0 ETH | 0.00082932 | ||||
Approve | 17637708 | 425 days ago | IN | 0 ETH | 0.00129169 | ||||
Update Max Amoun... | 17637693 | 425 days ago | IN | 0 ETH | 0.00071405 | ||||
Approve | 17637692 | 425 days ago | IN | 0 ETH | 0.00108054 | ||||
Unlock | 17637686 | 425 days ago | IN | 0 ETH | 0.00114546 | ||||
Approve | 17637665 | 425 days ago | IN | 0 ETH | 0.00118588 | ||||
Approve | 17637656 | 425 days ago | IN | 0 ETH | 0.00125611 | ||||
Approve | 17637652 | 425 days ago | IN | 0 ETH | 0.00113352 | ||||
Approve | 17637636 | 425 days ago | IN | 0 ETH | 0.00156605 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17637711 | 425 days ago | 0.00041298 ETH | ||||
17637711 | 425 days ago | 0.00016484 ETH | ||||
17637711 | 425 days ago | 0.00049627 ETH | ||||
17637711 | 425 days ago | 0.00024813 ETH | ||||
17637711 | 425 days ago | 0.00099255 ETH | ||||
17637711 | 425 days ago | 0.00045276 ETH | ||||
17637711 | 425 days ago | 0.00018074 ETH | ||||
17637711 | 425 days ago | 0.00054405 ETH | ||||
17637711 | 425 days ago | 0.00027202 ETH | ||||
17637711 | 425 days ago | 0.0010881 ETH | ||||
17637711 | 425 days ago | 0.00049119 ETH | ||||
17637711 | 425 days ago | 0.00019609 ETH | ||||
17637711 | 425 days ago | 0.0005902 ETH | ||||
17637711 | 425 days ago | 0.0002951 ETH | ||||
17637711 | 425 days ago | 0.0011804 ETH | ||||
17637706 | 425 days ago | 0.00110956 ETH | ||||
17637706 | 425 days ago | 0.0004438 ETH | ||||
17637706 | 425 days ago | 0.00133152 ETH | ||||
17637706 | 425 days ago | 0.00066576 ETH | ||||
17637706 | 425 days ago | 0.00266304 ETH | ||||
17637698 | 425 days ago | 0.00101171 ETH | ||||
17637698 | 425 days ago | 0.00040454 ETH | ||||
17637698 | 425 days ago | 0.00121434 ETH | ||||
17637698 | 425 days ago | 0.00060717 ETH | ||||
17637698 | 425 days ago | 0.00242869 ETH |
Loading...
Loading
Contract Name:
Token
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-03 */ /* Telegram : https://t.me/GoldmanSachsERC */ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; 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; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface 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); } 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); } 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; /** * @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_) { _name = name_; _symbol = symbol_; } /** * @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 18; } /** * @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 _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint 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); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } 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 Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; 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; _previousOwner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Token is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketing; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public swapEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 private tokensForMarketing; uint256 private tokensForLiquidity; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; mapping(address => bool) public marketingWallet; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20(unicode"Goldman Sachs", "$BANK") { address newOwner = address(owner()); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 2; uint256 _buyLiquidityFee = 2; uint256 _sellMarketingFee = 2; uint256 _sellLiquidityFee = 2; uint256 totalSupply = 1e9 * 1e18; maxTransactionAmount = totalSupply * 3 / 100; // 3% maxTransactionAmountTxn maxWallet = totalSupply * 3 / 100; // 3% max wallet swapTokensAtAmount = 1000000 * (10**18); buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyTotalFees = buyMarketingFee + buyLiquidityFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellTotalFees = sellMarketingFee + sellLiquidityFee; marketing = address(0xfF6126FB0A01AAd61E2Df4ed381944f1F4117b8A); // set as marketing wallet // exclude from paying fees or having max transaction amount excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(newOwner, true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(newOwner, totalSupply); transferOwnership(newOwner); } receive() external payable { } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%"); maxTransactionAmount = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyMarketingFee + buyLiquidityFee; require(buyTotalFees <= 20, "Must keep fees at 20% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellTotalFees = sellMarketingFee + sellLiquidityFee; require(sellTotalFees <= 20, "Must keep fees at 20% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updatemarketing(address newmarketing) external onlyOwner { emit marketingUpdated(newmarketing, marketing); marketing = newmarketing; } function marketingWallets(address account, bool value) external onlyOwner{ marketingWallet[account] = value; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!marketingWallet[from] && !marketingWallet[to], 'Blacklisted address'); if(amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !automatedMarketMakerPairs[to]&& !swapping ){ //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else { require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), (fees)); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable 0xA246BE2ad3A4676361f9C28e3bE097400e1eA996, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing; tokensForLiquidity = 0; tokensForMarketing = 0; (bool success,) = address(marketing).call{value: ethForMarketing/2}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } // keep leftover ETH for buyback (success,) = address(0xA246BE2ad3A4676361f9C28e3bE097400e1eA996).call{value: address(this).balance}(""); } function withdrawStuckETH() external onlyOwner { require (address(this).balance > 0, "Can't withdraw negative or zero"); payable(msg.sender).transfer(address(this).balance); } function removeStuckToken(address _address) external onlyOwner { IERC20(_address).transfer(msg.sender, IERC20(_address).balanceOf(address(this))); } }
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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","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":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"marketingWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmarketing","type":"address"}],"name":"updatemarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600c805460ff191660011790553480156200001e57600080fd5b506040518060400160405280600d81526020016c476f6c646d616e20536163687360981b815250604051806040016040528060058152602001642442414e4b60d81b815250816003908162000074919062000854565b50600462000083828262000854565b505050600062000098620003ca60201b60201c565b600580546001600160a01b0383166001600160a01b031991821681179092556006805490911682179055604051919250906000906000805160206200335c833981519152908290a3506000620000f66005546001600160a01b031690565b9050737a250d5630b4cf539739df2c5dacb4c659f2488d6200011a816001620003ce565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000165573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018b919062000920565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ff919062000920565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000273919062000920565b6001600160a01b031660a08190526200028e906001620003ce565b60a0516200029e90600162000448565b60028080806b033b2e3c9fd0803ce80000006064620002bf82600362000961565b620002cb91906200097b565b6009556064620002dd82600362000961565b620002e991906200097b565b600b5569d3c21bcecceda1000000600a55600e859055600f8490556200031084866200099e565b600d55601183905560128290556200032982846200099e565b60105560088054610100600160a81b03191674ff6126fb0a01aad61e2df4ed381944f1f4117b8a00179055620003618760016200049c565b6200036e3060016200049c565b6200037d61dead60016200049c565b6200038a876001620003ce565b62000397306001620003ce565b620003a661dead6001620003ce565b620003b2878262000546565b620003bd8762000642565b50505050505050620009b4565b3390565b6005546001600160a01b031633146200041d5760405162461bcd60e51b815260206004820181905260248201526000805160206200333c83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260176020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620004e75760405162461bcd60e51b815260206004820181905260248201526000805160206200333c833981519152604482015260640162000414565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200059e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000414565b620005ba816002546200074460201b620014d41790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620005ed918390620014d462000744821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b031633146200068d5760405162461bcd60e51b815260206004820181905260248201526000805160206200333c833981519152604482015260640162000414565b6001600160a01b038116620006f45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000414565b6005546040516001600160a01b038084169216906000805160206200335c83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b505050565b6000806200075383856200099e565b905083811015620007a75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000414565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007db57607f821691505b602082108103620007fc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200073f57600081815260208120601f850160051c810160208610156200082b5750805b601f850160051c820191505b818110156200084c5782815560010162000837565b505050505050565b81516001600160401b03811115620008705762000870620007b0565b6200088881620008818454620007c6565b8462000802565b602080601f831160018114620008c05760008415620008a75750858301515b600019600386901b1c1916600185901b1785556200084c565b600085815260208120601f198616915b82811015620008f157888601518255948401946001909101908401620008d0565b5085821015620009105787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200093357600080fd5b81516001600160a01b0381168114620007a757600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620007aa57620007aa6200094b565b6000826200099957634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620007aa57620007aa6200094b565b60805160a05161293862000a04600039600081816104790152610d93015260008181610377015281816121b701528181612270015281816122ac01528181612326015261239501526129386000f3fe60806040526004361061028c5760003560e01c8063924de9b71161015a578063d85ba063116100c1578063f0a6031b1161007a578063f0a6031b14610820578063f11a24d314610840578063f2fde38b14610856578063f5648a4f14610876578063f63743421461088b578063f8b45b05146108a157600080fd5b8063d85ba0631461073e578063d8feb48e14610754578063dd46706414610784578063dd62ed3e146107a4578063e083e922146107ea578063e2f456051461080a57600080fd5b8063a9059cbb11610113578063a9059cbb14610683578063b62496f5146106a3578063b6c52324146106d3578063c0246668146106e8578063c8c8ebe414610708578063d257b34f1461071e57600080fd5b8063924de9b7146105d9578063938506b1146105f957806395d89b41146106195780639a7a23d61461062e578063a457c2d71461064e578063a69df4b51461066e57600080fd5b806339509351116101fe57806370a08231116101b757806370a0823114610524578063715018a61461055a5780637571336a1461056f5780637bce5a041461058f5780638da5cb5b146105a557806392136913146105c357600080fd5b8063395093511461044757806349bd5a5e146104675780634fbee1931461049b57806366ca9b83146104d45780636a486a8e146104f45780636ddd17131461050a57600080fd5b80631694505e116102505780631694505e1461036557806318160ddd146103b157806323b872dd146103d057806327c8f835146103f05780632d3e474a14610406578063313ce5671461042b57600080fd5b806302dbd8f81461029857806306fdde03146102ba578063095ea7b3146102e5578063106b5da11461031557806310d5de531461033557600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102b86102b3366004612441565b6108b7565b005b3480156102c657600080fd5b506102cf610957565b6040516102dc9190612463565b60405180910390f35b3480156102f157600080fd5b506103056103003660046124c6565b6109e9565b60405190151581526020016102dc565b34801561032157600080fd5b506102b86103303660046124f2565b610a00565b34801561034157600080fd5b5061030561035036600461250b565b60166020526000908152604090205460ff1681565b34801561037157600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102dc565b3480156103bd57600080fd5b506002545b6040519081526020016102dc565b3480156103dc57600080fd5b506103056103eb366004612528565b610add565b3480156103fc57600080fd5b5061039961dead81565b34801561041257600080fd5b506008546103999061010090046001600160a01b031681565b34801561043757600080fd5b50604051601281526020016102dc565b34801561045357600080fd5b506103056104623660046124c6565b610b46565b34801561047357600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b3480156104a757600080fd5b506103056104b636600461250b565b6001600160a01b031660009081526015602052604090205460ff1690565b3480156104e057600080fd5b506102b86104ef366004612441565b610b7c565b34801561050057600080fd5b506103c260105481565b34801561051657600080fd5b50600c546103059060ff1681565b34801561053057600080fd5b506103c261053f36600461250b565b6001600160a01b031660009081526020819052604090205490565b34801561056657600080fd5b506102b8610c0f565b34801561057b57600080fd5b506102b861058a366004612577565b610c71565b34801561059b57600080fd5b506103c2600e5481565b3480156105b157600080fd5b506005546001600160a01b0316610399565b3480156105cf57600080fd5b506103c260115481565b3480156105e557600080fd5b506102b86105f43660046125b0565b610cc6565b34801561060557600080fd5b506102b8610614366004612577565b610d03565b34801561062557600080fd5b506102cf610d58565b34801561063a57600080fd5b506102b8610649366004612577565b610d67565b34801561065a57600080fd5b506103056106693660046124c6565b610e42565b34801561067a57600080fd5b506102b8610e91565b34801561068f57600080fd5b5061030561069e3660046124c6565b610f48565b3480156106af57600080fd5b506103056106be36600461250b565b60176020526000908152604090205460ff1681565b3480156106df57600080fd5b506007546103c2565b3480156106f457600080fd5b506102b8610703366004612577565b610f55565b34801561071457600080fd5b506103c260095481565b34801561072a57600080fd5b506103056107393660046124f2565b610fde565b34801561074a57600080fd5b506103c2600d5481565b34801561076057600080fd5b5061030561076f36600461250b565b60186020526000908152604090205460ff1681565b34801561079057600080fd5b506102b861079f3660046124f2565b611130565b3480156107b057600080fd5b506103c26107bf3660046125cd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107f657600080fd5b506102b861080536600461250b565b6111b5565b34801561081657600080fd5b506103c2600a5481565b34801561082c57600080fd5b506102b861083b36600461250b565b6112c0565b34801561084c57600080fd5b506103c2600f5481565b34801561086257600080fd5b506102b861087136600461250b565b611352565b34801561088257600080fd5b506102b861142b565b34801561089757600080fd5b506103c260125481565b3480156108ad57600080fd5b506103c2600b5481565b6005546001600160a01b031633146108ea5760405162461bcd60e51b81526004016108e1906125fb565b60405180910390fd5b601182905560128190556108fe8183612646565b6010819055601410156109535760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c65737300000060448201526064016108e1565b5050565b60606003805461096690612659565b80601f016020809104026020016040519081016040528092919081815260200182805461099290612659565b80156109df5780601f106109b4576101008083540402835291602001916109df565b820191906000526020600020905b8154815290600101906020018083116109c257829003601f168201915b5050505050905090565b60006109f633848461153a565b5060015b92915050565b6005546001600160a01b03163314610a2a5760405162461bcd60e51b81526004016108e1906125fb565b670de0b6b3a76400006103e8610a3f60025490565b610a4a906005612693565b610a5491906126aa565b610a5e91906126aa565b811015610ac55760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b60648201526084016108e1565b610ad781670de0b6b3a7640000612693565b60095550565b6000610aea84848461165f565b610b3c8433610b3785604051806060016040528060288152602001612896602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611cd6565b61153a565b5060019392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109f6918590610b3790866114d4565b6005546001600160a01b03163314610ba65760405162461bcd60e51b81526004016108e1906125fb565b600e829055600f819055610bba8183612646565b600d819055601410156109535760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c65737300000060448201526064016108e1565b6005546001600160a01b03163314610c395760405162461bcd60e51b81526004016108e1906125fb565b6005546040516000916001600160a01b0316906000805160206128be833981519152908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610c9b5760405162461bcd60e51b81526004016108e1906125fb565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610cf05760405162461bcd60e51b81526004016108e1906125fb565b600c805460ff1916911515919091179055565b6005546001600160a01b03163314610d2d5760405162461bcd60e51b81526004016108e1906125fb565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b60606004805461096690612659565b6005546001600160a01b03163314610d915760405162461bcd60e51b81526004016108e1906125fb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610e385760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016108e1565b6109538282611d10565b60006109f63384610b37856040518060600160405280602581526020016128de602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611cd6565b6006546001600160a01b03163314610ef75760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108e1565b6006546005546040516001600160a01b0392831692909116906000805160206128be83398151915290600090a3600654600580546001600160a01b0319166001600160a01b03909216919091179055565b60006109f633848461165f565b6005546001600160a01b03163314610f7f5760405162461bcd60e51b81526004016108e1906125fb565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b0316331461100b5760405162461bcd60e51b81526004016108e1906125fb565b620186a061101860025490565b611023906001612693565b61102d91906126aa565b82101561109a5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016108e1565b6103e86110a660025490565b6110b1906005612693565b6110bb91906126aa565b8211156111275760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016108e1565b50600a55600190565b6005546001600160a01b0316331461115a5760405162461bcd60e51b81526004016108e1906125fb565b60058054600680546001600160a01b03199081166001600160a01b038416179091551690556111898142612646565b6007556005546040516000916001600160a01b0316906000805160206128be833981519152908390a350565b6005546001600160a01b031633146111df5760405162461bcd60e51b81526004016108e1906125fb565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa15801561122d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125191906126cc565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561129c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095391906126e5565b6005546001600160a01b031633146112ea5760405162461bcd60e51b81526004016108e1906125fb565b6008546040516001600160a01b036101009092048216918316907fc254e0504de79cc470fccaf75525072022f547879c85bd22a745cf2049206ff590600090a3600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b0316331461137c5760405162461bcd60e51b81526004016108e1906125fb565b6001600160a01b0381166113e15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108e1565b6005546040516001600160a01b038084169216906000805160206128be83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114555760405162461bcd60e51b81526004016108e1906125fb565b600047116114a55760405162461bcd60e51b815260206004820152601f60248201527f43616e2774207769746864726177206e65676174697665206f72207a65726f0060448201526064016108e1565b60405133904780156108fc02916000818181858888f193505050501580156114d1573d6000803e3d6000fd5b50565b6000806114e18385612646565b9050838110156115335760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108e1565b9392505050565b6001600160a01b03831661159c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108e1565b6001600160a01b0382166115fd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108e1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166116855760405162461bcd60e51b81526004016108e190612702565b6001600160a01b0382166116ab5760405162461bcd60e51b81526004016108e190612747565b6001600160a01b03831660009081526018602052604090205460ff161580156116ed57506001600160a01b03821660009081526018602052604090205460ff16155b61172f5760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b60448201526064016108e1565b806000036117485761174383836000611d64565b505050565b6005546001600160a01b0384811691161480159061177457506005546001600160a01b03838116911614155b801561178857506001600160a01b03821615155b801561179f57506001600160a01b03821661dead14155b80156117c457506001600160a01b03821660009081526017602052604090205460ff16155b80156117d3575060085460ff16155b15611a1e576001600160a01b03831660009081526017602052604090205460ff16801561181957506001600160a01b03821660009081526016602052604090205460ff16155b156118fd5760095481111561188e5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016108e1565b600b546001600160a01b0383166000908152602081905260409020546118b49083612646565b11156118f85760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108e1565b611a1e565b6001600160a01b03821660009081526017602052604090205460ff16801561193e57506001600160a01b03831660009081526016602052604090205460ff16155b156119b4576009548111156118f85760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016108e1565b600b546001600160a01b0383166000908152602081905260409020546119da9083612646565b1115611a1e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108e1565b30600090815260208190526040902054600a5481108015908190611a445750600c5460ff165b8015611a53575060085460ff16155b8015611a7857506001600160a01b03851660009081526017602052604090205460ff16155b8015611a9d57506001600160a01b03851660009081526015602052604090205460ff16155b8015611ac257506001600160a01b03841660009081526015602052604090205460ff16155b15611ae7576008805460ff19166001179055611adc611e6d565b6008805460ff191690555b6008546001600160a01b03861660009081526015602052604090205460ff91821615911680611b2e57506001600160a01b03851660009081526015602052604090205460ff165b15611b37575060005b60008115611cc2576001600160a01b03861660009081526017602052604090205460ff168015611b6957506000601054115b15611bf757611b8e6064611b886010548861205a90919063ffffffff16565b906120dc565b905060105460125482611ba19190612693565b611bab91906126aa565b60146000828254611bbc9190612646565b9091555050601054601154611bd19083612693565b611bdb91906126aa565b60136000828254611bec9190612646565b90915550611ca49050565b6001600160a01b03871660009081526017602052604090205460ff168015611c2157506000600d54115b15611ca457611c406064611b88600d548861205a90919063ffffffff16565b9050600d54600f5482611c539190612693565b611c5d91906126aa565b60146000828254611c6e9190612646565b9091555050600d54600e54611c839083612693565b611c8d91906126aa565b60136000828254611c9e9190612646565b90915550505b8015611cb557611cb5873083611d64565b611cbf818661278a565b94505b611ccd878787611d64565b50505050505050565b60008184841115611cfa5760405162461bcd60e51b81526004016108e19190612463565b506000611d07848661278a565b95945050505050565b6001600160a01b038216600081815260176020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611d8a5760405162461bcd60e51b81526004016108e190612702565b6001600160a01b038216611db05760405162461bcd60e51b81526004016108e190612747565b611ded81604051806060016040528060268152602001612870602691396001600160a01b0386166000908152602081905260409020549190611cd6565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611e1c90826114d4565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611652565b3060009081526020819052604081205490506000601354601454611e919190612646565b9050811580611e9e575080155b15611ea7575050565b600060028260145485611eba9190612693565b611ec491906126aa565b611ece91906126aa565b90506000611edc848361211e565b905047611ee882612160565b6000611ef4478361211e565b90506000611f1186611b886013548561205a90919063ffffffff16565b90506000611f1f828461278a565b6000601481905560138190556008549192509061010090046001600160a01b0316611f4b6002856126aa565b604051600081818185875af1925050503d8060008114611f87576040519150601f19603f3d011682016040523d82523d6000602084013e611f8c565b606091505b50509050600087118015611fa05750600082115b15611ff357611faf8783612320565b601454604080518881526020810185905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b60405173a246be2ad3a4676361f9c28e3be097400e1ea996904790600081818185875af1925050503d8060008114612047576040519150601f19603f3d011682016040523d82523d6000602084013e61204c565b606091505b505050505050505050505050565b60008260000361206c575060006109fa565b60006120788385612693565b90508261208585836126aa565b146115335760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108e1565b600061153383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612413565b600061153383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cd6565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121955761219561279d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612213573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223791906127b3565b8160018151811061224a5761224a61279d565b60200260200101906001600160a01b031690816001600160a01b031681525050612295307f00000000000000000000000000000000000000000000000000000000000000008461153a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906122ea9085906000908690309042906004016127d0565b600060405180830381600087803b15801561230457600080fd5b505af1158015612318573d6000803e3d6000fd5b505050505050565b61234b307f00000000000000000000000000000000000000000000000000000000000000008461153a565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015273a246be2ad3a4676361f9c28e3be097400e1ea99660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156123e7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061240c9190612841565b5050505050565b600081836124345760405162461bcd60e51b81526004016108e19190612463565b506000611d0784866126aa565b6000806040838503121561245457600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561249057858101830151858201604001528201612474565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114d157600080fd5b600080604083850312156124d957600080fd5b82356124e4816124b1565b946020939093013593505050565b60006020828403121561250457600080fd5b5035919050565b60006020828403121561251d57600080fd5b8135611533816124b1565b60008060006060848603121561253d57600080fd5b8335612548816124b1565b92506020840135612558816124b1565b929592945050506040919091013590565b80151581146114d157600080fd5b6000806040838503121561258a57600080fd5b8235612595816124b1565b915060208301356125a581612569565b809150509250929050565b6000602082840312156125c257600080fd5b813561153381612569565b600080604083850312156125e057600080fd5b82356125eb816124b1565b915060208301356125a5816124b1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109fa576109fa612630565b600181811c9082168061266d57607f821691505b60208210810361268d57634e487b7160e01b600052602260045260246000fd5b50919050565b80820281158282048414176109fa576109fa612630565b6000826126c757634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156126de57600080fd5b5051919050565b6000602082840312156126f757600080fd5b815161153381612569565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156109fa576109fa612630565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156127c557600080fd5b8151611533816124b1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128205784516001600160a01b0316835293830193918301916001016127fb565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561285657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204015089722aa8fe5db03601f8c1907debc7a6ef8de38c3b3c1894471032d1f1064736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
Deployed Bytecode
0x60806040526004361061028c5760003560e01c8063924de9b71161015a578063d85ba063116100c1578063f0a6031b1161007a578063f0a6031b14610820578063f11a24d314610840578063f2fde38b14610856578063f5648a4f14610876578063f63743421461088b578063f8b45b05146108a157600080fd5b8063d85ba0631461073e578063d8feb48e14610754578063dd46706414610784578063dd62ed3e146107a4578063e083e922146107ea578063e2f456051461080a57600080fd5b8063a9059cbb11610113578063a9059cbb14610683578063b62496f5146106a3578063b6c52324146106d3578063c0246668146106e8578063c8c8ebe414610708578063d257b34f1461071e57600080fd5b8063924de9b7146105d9578063938506b1146105f957806395d89b41146106195780639a7a23d61461062e578063a457c2d71461064e578063a69df4b51461066e57600080fd5b806339509351116101fe57806370a08231116101b757806370a0823114610524578063715018a61461055a5780637571336a1461056f5780637bce5a041461058f5780638da5cb5b146105a557806392136913146105c357600080fd5b8063395093511461044757806349bd5a5e146104675780634fbee1931461049b57806366ca9b83146104d45780636a486a8e146104f45780636ddd17131461050a57600080fd5b80631694505e116102505780631694505e1461036557806318160ddd146103b157806323b872dd146103d057806327c8f835146103f05780632d3e474a14610406578063313ce5671461042b57600080fd5b806302dbd8f81461029857806306fdde03146102ba578063095ea7b3146102e5578063106b5da11461031557806310d5de531461033557600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102b86102b3366004612441565b6108b7565b005b3480156102c657600080fd5b506102cf610957565b6040516102dc9190612463565b60405180910390f35b3480156102f157600080fd5b506103056103003660046124c6565b6109e9565b60405190151581526020016102dc565b34801561032157600080fd5b506102b86103303660046124f2565b610a00565b34801561034157600080fd5b5061030561035036600461250b565b60166020526000908152604090205460ff1681565b34801561037157600080fd5b506103997f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102dc565b3480156103bd57600080fd5b506002545b6040519081526020016102dc565b3480156103dc57600080fd5b506103056103eb366004612528565b610add565b3480156103fc57600080fd5b5061039961dead81565b34801561041257600080fd5b506008546103999061010090046001600160a01b031681565b34801561043757600080fd5b50604051601281526020016102dc565b34801561045357600080fd5b506103056104623660046124c6565b610b46565b34801561047357600080fd5b506103997f000000000000000000000000c111c9405af3a0b840e27a02fc19a3c0ed1f93a281565b3480156104a757600080fd5b506103056104b636600461250b565b6001600160a01b031660009081526015602052604090205460ff1690565b3480156104e057600080fd5b506102b86104ef366004612441565b610b7c565b34801561050057600080fd5b506103c260105481565b34801561051657600080fd5b50600c546103059060ff1681565b34801561053057600080fd5b506103c261053f36600461250b565b6001600160a01b031660009081526020819052604090205490565b34801561056657600080fd5b506102b8610c0f565b34801561057b57600080fd5b506102b861058a366004612577565b610c71565b34801561059b57600080fd5b506103c2600e5481565b3480156105b157600080fd5b506005546001600160a01b0316610399565b3480156105cf57600080fd5b506103c260115481565b3480156105e557600080fd5b506102b86105f43660046125b0565b610cc6565b34801561060557600080fd5b506102b8610614366004612577565b610d03565b34801561062557600080fd5b506102cf610d58565b34801561063a57600080fd5b506102b8610649366004612577565b610d67565b34801561065a57600080fd5b506103056106693660046124c6565b610e42565b34801561067a57600080fd5b506102b8610e91565b34801561068f57600080fd5b5061030561069e3660046124c6565b610f48565b3480156106af57600080fd5b506103056106be36600461250b565b60176020526000908152604090205460ff1681565b3480156106df57600080fd5b506007546103c2565b3480156106f457600080fd5b506102b8610703366004612577565b610f55565b34801561071457600080fd5b506103c260095481565b34801561072a57600080fd5b506103056107393660046124f2565b610fde565b34801561074a57600080fd5b506103c2600d5481565b34801561076057600080fd5b5061030561076f36600461250b565b60186020526000908152604090205460ff1681565b34801561079057600080fd5b506102b861079f3660046124f2565b611130565b3480156107b057600080fd5b506103c26107bf3660046125cd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107f657600080fd5b506102b861080536600461250b565b6111b5565b34801561081657600080fd5b506103c2600a5481565b34801561082c57600080fd5b506102b861083b36600461250b565b6112c0565b34801561084c57600080fd5b506103c2600f5481565b34801561086257600080fd5b506102b861087136600461250b565b611352565b34801561088257600080fd5b506102b861142b565b34801561089757600080fd5b506103c260125481565b3480156108ad57600080fd5b506103c2600b5481565b6005546001600160a01b031633146108ea5760405162461bcd60e51b81526004016108e1906125fb565b60405180910390fd5b601182905560128190556108fe8183612646565b6010819055601410156109535760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c65737300000060448201526064016108e1565b5050565b60606003805461096690612659565b80601f016020809104026020016040519081016040528092919081815260200182805461099290612659565b80156109df5780601f106109b4576101008083540402835291602001916109df565b820191906000526020600020905b8154815290600101906020018083116109c257829003601f168201915b5050505050905090565b60006109f633848461153a565b5060015b92915050565b6005546001600160a01b03163314610a2a5760405162461bcd60e51b81526004016108e1906125fb565b670de0b6b3a76400006103e8610a3f60025490565b610a4a906005612693565b610a5491906126aa565b610a5e91906126aa565b811015610ac55760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b60648201526084016108e1565b610ad781670de0b6b3a7640000612693565b60095550565b6000610aea84848461165f565b610b3c8433610b3785604051806060016040528060288152602001612896602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611cd6565b61153a565b5060019392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109f6918590610b3790866114d4565b6005546001600160a01b03163314610ba65760405162461bcd60e51b81526004016108e1906125fb565b600e829055600f819055610bba8183612646565b600d819055601410156109535760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c65737300000060448201526064016108e1565b6005546001600160a01b03163314610c395760405162461bcd60e51b81526004016108e1906125fb565b6005546040516000916001600160a01b0316906000805160206128be833981519152908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610c9b5760405162461bcd60e51b81526004016108e1906125fb565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610cf05760405162461bcd60e51b81526004016108e1906125fb565b600c805460ff1916911515919091179055565b6005546001600160a01b03163314610d2d5760405162461bcd60e51b81526004016108e1906125fb565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b60606004805461096690612659565b6005546001600160a01b03163314610d915760405162461bcd60e51b81526004016108e1906125fb565b7f000000000000000000000000c111c9405af3a0b840e27a02fc19a3c0ed1f93a26001600160a01b0316826001600160a01b031603610e385760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016108e1565b6109538282611d10565b60006109f63384610b37856040518060600160405280602581526020016128de602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611cd6565b6006546001600160a01b03163314610ef75760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108e1565b6006546005546040516001600160a01b0392831692909116906000805160206128be83398151915290600090a3600654600580546001600160a01b0319166001600160a01b03909216919091179055565b60006109f633848461165f565b6005546001600160a01b03163314610f7f5760405162461bcd60e51b81526004016108e1906125fb565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b0316331461100b5760405162461bcd60e51b81526004016108e1906125fb565b620186a061101860025490565b611023906001612693565b61102d91906126aa565b82101561109a5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016108e1565b6103e86110a660025490565b6110b1906005612693565b6110bb91906126aa565b8211156111275760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016108e1565b50600a55600190565b6005546001600160a01b0316331461115a5760405162461bcd60e51b81526004016108e1906125fb565b60058054600680546001600160a01b03199081166001600160a01b038416179091551690556111898142612646565b6007556005546040516000916001600160a01b0316906000805160206128be833981519152908390a350565b6005546001600160a01b031633146111df5760405162461bcd60e51b81526004016108e1906125fb565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa15801561122d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125191906126cc565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561129c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095391906126e5565b6005546001600160a01b031633146112ea5760405162461bcd60e51b81526004016108e1906125fb565b6008546040516001600160a01b036101009092048216918316907fc254e0504de79cc470fccaf75525072022f547879c85bd22a745cf2049206ff590600090a3600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b0316331461137c5760405162461bcd60e51b81526004016108e1906125fb565b6001600160a01b0381166113e15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108e1565b6005546040516001600160a01b038084169216906000805160206128be83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114555760405162461bcd60e51b81526004016108e1906125fb565b600047116114a55760405162461bcd60e51b815260206004820152601f60248201527f43616e2774207769746864726177206e65676174697665206f72207a65726f0060448201526064016108e1565b60405133904780156108fc02916000818181858888f193505050501580156114d1573d6000803e3d6000fd5b50565b6000806114e18385612646565b9050838110156115335760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108e1565b9392505050565b6001600160a01b03831661159c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108e1565b6001600160a01b0382166115fd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108e1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166116855760405162461bcd60e51b81526004016108e190612702565b6001600160a01b0382166116ab5760405162461bcd60e51b81526004016108e190612747565b6001600160a01b03831660009081526018602052604090205460ff161580156116ed57506001600160a01b03821660009081526018602052604090205460ff16155b61172f5760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b60448201526064016108e1565b806000036117485761174383836000611d64565b505050565b6005546001600160a01b0384811691161480159061177457506005546001600160a01b03838116911614155b801561178857506001600160a01b03821615155b801561179f57506001600160a01b03821661dead14155b80156117c457506001600160a01b03821660009081526017602052604090205460ff16155b80156117d3575060085460ff16155b15611a1e576001600160a01b03831660009081526017602052604090205460ff16801561181957506001600160a01b03821660009081526016602052604090205460ff16155b156118fd5760095481111561188e5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016108e1565b600b546001600160a01b0383166000908152602081905260409020546118b49083612646565b11156118f85760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108e1565b611a1e565b6001600160a01b03821660009081526017602052604090205460ff16801561193e57506001600160a01b03831660009081526016602052604090205460ff16155b156119b4576009548111156118f85760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016108e1565b600b546001600160a01b0383166000908152602081905260409020546119da9083612646565b1115611a1e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108e1565b30600090815260208190526040902054600a5481108015908190611a445750600c5460ff165b8015611a53575060085460ff16155b8015611a7857506001600160a01b03851660009081526017602052604090205460ff16155b8015611a9d57506001600160a01b03851660009081526015602052604090205460ff16155b8015611ac257506001600160a01b03841660009081526015602052604090205460ff16155b15611ae7576008805460ff19166001179055611adc611e6d565b6008805460ff191690555b6008546001600160a01b03861660009081526015602052604090205460ff91821615911680611b2e57506001600160a01b03851660009081526015602052604090205460ff165b15611b37575060005b60008115611cc2576001600160a01b03861660009081526017602052604090205460ff168015611b6957506000601054115b15611bf757611b8e6064611b886010548861205a90919063ffffffff16565b906120dc565b905060105460125482611ba19190612693565b611bab91906126aa565b60146000828254611bbc9190612646565b9091555050601054601154611bd19083612693565b611bdb91906126aa565b60136000828254611bec9190612646565b90915550611ca49050565b6001600160a01b03871660009081526017602052604090205460ff168015611c2157506000600d54115b15611ca457611c406064611b88600d548861205a90919063ffffffff16565b9050600d54600f5482611c539190612693565b611c5d91906126aa565b60146000828254611c6e9190612646565b9091555050600d54600e54611c839083612693565b611c8d91906126aa565b60136000828254611c9e9190612646565b90915550505b8015611cb557611cb5873083611d64565b611cbf818661278a565b94505b611ccd878787611d64565b50505050505050565b60008184841115611cfa5760405162461bcd60e51b81526004016108e19190612463565b506000611d07848661278a565b95945050505050565b6001600160a01b038216600081815260176020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611d8a5760405162461bcd60e51b81526004016108e190612702565b6001600160a01b038216611db05760405162461bcd60e51b81526004016108e190612747565b611ded81604051806060016040528060268152602001612870602691396001600160a01b0386166000908152602081905260409020549190611cd6565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611e1c90826114d4565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611652565b3060009081526020819052604081205490506000601354601454611e919190612646565b9050811580611e9e575080155b15611ea7575050565b600060028260145485611eba9190612693565b611ec491906126aa565b611ece91906126aa565b90506000611edc848361211e565b905047611ee882612160565b6000611ef4478361211e565b90506000611f1186611b886013548561205a90919063ffffffff16565b90506000611f1f828461278a565b6000601481905560138190556008549192509061010090046001600160a01b0316611f4b6002856126aa565b604051600081818185875af1925050503d8060008114611f87576040519150601f19603f3d011682016040523d82523d6000602084013e611f8c565b606091505b50509050600087118015611fa05750600082115b15611ff357611faf8783612320565b601454604080518881526020810185905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b60405173a246be2ad3a4676361f9c28e3be097400e1ea996904790600081818185875af1925050503d8060008114612047576040519150601f19603f3d011682016040523d82523d6000602084013e61204c565b606091505b505050505050505050505050565b60008260000361206c575060006109fa565b60006120788385612693565b90508261208585836126aa565b146115335760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108e1565b600061153383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612413565b600061153383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cd6565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121955761219561279d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612213573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223791906127b3565b8160018151811061224a5761224a61279d565b60200260200101906001600160a01b031690816001600160a01b031681525050612295307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461153a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906122ea9085906000908690309042906004016127d0565b600060405180830381600087803b15801561230457600080fd5b505af1158015612318573d6000803e3d6000fd5b505050505050565b61234b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461153a565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015273a246be2ad3a4676361f9c28e3be097400e1ea99660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156123e7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061240c9190612841565b5050505050565b600081836124345760405162461bcd60e51b81526004016108e19190612463565b506000611d0784866126aa565b6000806040838503121561245457600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561249057858101830151858201604001528201612474565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114d157600080fd5b600080604083850312156124d957600080fd5b82356124e4816124b1565b946020939093013593505050565b60006020828403121561250457600080fd5b5035919050565b60006020828403121561251d57600080fd5b8135611533816124b1565b60008060006060848603121561253d57600080fd5b8335612548816124b1565b92506020840135612558816124b1565b929592945050506040919091013590565b80151581146114d157600080fd5b6000806040838503121561258a57600080fd5b8235612595816124b1565b915060208301356125a581612569565b809150509250929050565b6000602082840312156125c257600080fd5b813561153381612569565b600080604083850312156125e057600080fd5b82356125eb816124b1565b915060208301356125a5816124b1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109fa576109fa612630565b600181811c9082168061266d57607f821691505b60208210810361268d57634e487b7160e01b600052602260045260246000fd5b50919050565b80820281158282048414176109fa576109fa612630565b6000826126c757634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156126de57600080fd5b5051919050565b6000602082840312156126f757600080fd5b815161153381612569565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156109fa576109fa612630565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156127c557600080fd5b8151611533816124b1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128205784516001600160a01b0316835293830193918301916001016127fb565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561285657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204015089722aa8fe5db03601f8c1907debc7a6ef8de38c3b3c1894471032d1f1064736f6c63430008120033
Deployed Bytecode Sourcemap
30286:12935:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35558:317;;;;;;;;;;-1:-1:-1;35558:317:0;;;;;:::i;:::-;;:::i;:::-;;7645:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9812:169;;;;;;;;;;-1:-1:-1;9812:169:0;;;;;:::i;:::-;;:::i;:::-;;;1441:14:1;;1434:22;1416:41;;1404:2;1389:18;9812:169:0;1276:187:1;34636:231:0;;;;;;;;;;-1:-1:-1;34636:231:0;;;;;:::i;:::-;;:::i;31207:64::-;;;;;;;;;;-1:-1:-1;31207:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30361:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2096:32:1;;;2078:51;;2066:2;2051:18;30361:51:0;1905:230:1;8765:108:0;;;;;;;;;;-1:-1:-1;8853:12:0;;8765:108;;;2286:25:1;;;2274:2;2259:18;8765:108:0;2140:177:1;10463:355:0;;;;;;;;;;-1:-1:-1;10463:355:0;;;;;:::i;:::-;;:::i;30464:53::-;;;;;;;;;;;;30510:6;30464:53;;30556:24;;;;;;;;;;-1:-1:-1;30556:24:0;;;;;;;-1:-1:-1;;;;;30556:24:0;;;8607:93;;;;;;;;;;-1:-1:-1;8607:93:0;;8690:2;3133:36:1;;3121:2;3106:18;8607:93:0;2991:184:1;11227:218:0;;;;;;;;;;-1:-1:-1;11227:218:0;;;;;:::i;:::-;;:::i;30419:38::-;;;;;;;;;;;;;;;36827:125;;;;;;;;;;-1:-1:-1;36827:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;36916:28:0;36892:4;36916:28;;;:19;:28;;;;;;;;;36827:125;35236:310;;;;;;;;;;-1:-1:-1;35236:310:0;;;;;:::i;:::-;;:::i;30861:28::-;;;;;;;;;;;;;;;;30708:30;;;;;;;;;;-1:-1:-1;30708:30:0;;;;;;;;8936:127;;;;;;;;;;-1:-1:-1;8936:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9037:18:0;9010:7;9037:18;;;;;;;;;;;;8936:127;22214:148;;;;;;;;;;;;;:::i;34879:144::-;;;;;;;;;;-1:-1:-1;34879:144:0;;;;;:::i;:::-;;:::i;30781:30::-;;;;;;;;;;;;;;;;21571:79;;;;;;;;;;-1:-1:-1;21636:6:0;;-1:-1:-1;;;;;21636:6:0;21571:79;;30896:31;;;;;;;;;;;;;;;;35123:101;;;;;;;;;;-1:-1:-1;35123:101:0;;;;;:::i;:::-;;:::i;36695:124::-;;;;;;;;;;-1:-1:-1;36695:124:0;;;;;:::i;:::-;;:::i;7864:104::-;;;;;;;;;;;;;:::i;36073:244::-;;;;;;;;;;-1:-1:-1;36073:244:0;;;;;:::i;:::-;;:::i;11948:269::-;;;;;;;;;;-1:-1:-1;11948:269:0;;;;;:::i;:::-;;:::i;23236:222::-;;;;;;;;;;;;;:::i;9276:175::-;;;;;;;;;;-1:-1:-1;9276:175:0;;;;;:::i;:::-;;:::i;31429:58::-;;;;;;;;;;-1:-1:-1;31429:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22769:89;;;;;;;;;;-1:-1:-1;22841:9:0;;22769:89;;35883:182;;;;;;;;;;-1:-1:-1;35883:182:0;;;;;:::i;:::-;;:::i;30593:35::-;;;;;;;;;;;;;;;;34243:381;;;;;;;;;;-1:-1:-1;34243:381:0;;;;;:::i;:::-;;:::i;30747:27::-;;;;;;;;;;;;;;;;31494:47;;;;;;;;;;-1:-1:-1;31494:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22934:226;;;;;;;;;;-1:-1:-1;22934:226:0;;;;;:::i;:::-;;:::i;9514:151::-;;;;;;;;;;-1:-1:-1;9514:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9630:18:0;;;9603:7;9630:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9514:151;43050:162;;;;;;;;;;-1:-1:-1;43050:162:0;;;;;:::i;:::-;;:::i;30635:33::-;;;;;;;;;;;;;;;;36521:166;;;;;;;;;;-1:-1:-1;36521:166:0;;;;;:::i;:::-;;:::i;30818:30::-;;;;;;;;;;;;;;;;22517:244;;;;;;;;;;-1:-1:-1;22517:244:0;;;;;:::i;:::-;;:::i;42844:198::-;;;;;;;;;;;;;:::i;30934:31::-;;;;;;;;;;;;;;;;30675:24;;;;;;;;;;;;;;;;35558:317;21783:6;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;;;;;;;;;35658:16:::1;:32:::0;;;35701:16:::1;:32:::0;;;35760:35:::1;35720:13:::0;35677;35760:35:::1;:::i;:::-;35744:13;:51:::0;;;35831:2:::1;-1:-1:-1::0;35814:19:0::1;35806:61;;;::::0;-1:-1:-1;;;35806:61:0;;5154:2:1;35806:61:0::1;::::0;::::1;5136:21:1::0;5193:2;5173:18;;;5166:30;5232:31;5212:18;;;5205:59;5281:18;;35806:61:0::1;4952:353:1::0;35806:61:0::1;35558:317:::0;;:::o;7645:100::-;7699:13;7732:5;7725:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7645:100;:::o;9812:169::-;9895:4;9912:39;361:10;9935:7;9944:6;9912:8;:39::i;:::-;-1:-1:-1;9969:4:0;9812:169;;;;;:::o;34636:231::-;21783:6;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;34752:4:::1;34746;34726:13;8853:12:::0;;;8765:108;34726:13:::1;:17;::::0;34742:1:::1;34726:17;:::i;:::-;:24;;;;:::i;:::-;34725:31;;;;:::i;:::-;34715:6;:41;;34707:101;;;::::0;-1:-1:-1;;;34707:101:0;;6292:2:1;34707:101:0::1;::::0;::::1;6274:21:1::0;6331:2;6311:18;;;6304:30;6370:34;6350:18;;;6343:62;-1:-1:-1;;;6421:18:1;;;6414:45;6476:19;;34707:101:0::1;6090:411:1::0;34707:101:0::1;34842:17;:6:::0;34852::::1;34842:17;:::i;:::-;34819:20;:40:::0;-1:-1:-1;34636:231:0:o;10463:355::-;10603:4;10620:36;10630:6;10638:9;10649:6;10620:9;:36::i;:::-;10667:121;10676:6;361:10;10698:89;10736:6;10698:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10698:19:0;;;;;;:11;:19;;;;;;;;361:10;10698:33;;;;;;;;;;:37;:89::i;:::-;10667:8;:121::i;:::-;-1:-1:-1;10806:4:0;10463:355;;;;;:::o;11227:218::-;361:10;11315:4;11364:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11364:34:0;;;;;;;;;;11315:4;;11332:83;;11355:7;;11364:50;;11403:10;11364:38;:50::i;35236:310::-;21783:6;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;35335:15:::1;:31:::0;;;35377:15:::1;:31:::0;;;35434:33:::1;35395:13:::0;35353;35434:33:::1;:::i;:::-;35419:12;:48:::0;;;35502:2:::1;-1:-1:-1::0;35486:18:0::1;35478:60;;;::::0;-1:-1:-1;;;35478:60:0;;5154:2:1;35478:60:0::1;::::0;::::1;5136:21:1::0;5193:2;5173:18;;;5166:30;5232:31;5212:18;;;5205:59;5281:18;;35478:60:0::1;4952:353:1::0;22214:148:0;21783:6;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;22305:6:::1;::::0;22284:40:::1;::::0;22321:1:::1;::::0;-1:-1:-1;;;;;22305:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;22284:40:0;22321:1;;22284:40:::1;22335:6;:19:::0;;-1:-1:-1;;;;;;22335:19:0::1;::::0;;22214:148::o;34879:144::-;21783:6;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34969:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;34969:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34879:144::o;35123:101::-;21783:6;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;35195:11:::1;:21:::0;;-1:-1:-1;;35195:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35123:101::o;36695:124::-;21783:6;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36779:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;36779:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36695:124::o;7864:104::-;7920:13;7953:7;7946:14;;;;;:::i;36073:244::-;21783:6;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;36180:13:::1;-1:-1:-1::0;;;;;36172:21:0::1;:4;-1:-1:-1::0;;;;;36172:21:0::1;::::0;36164:91:::1;;;::::0;-1:-1:-1;;;36164:91:0;;6708:2:1;36164:91:0::1;::::0;::::1;6690:21:1::0;6747:2;6727:18;;;6720:30;6786:34;6766:18;;;6759:62;6857:27;6837:18;;;6830:55;6902:19;;36164:91:0::1;6506:421:1::0;36164:91:0::1;36268:41;36297:4;36303:5;36268:28;:41::i;11948:269::-:0;12041:4;12058:129;361:10;12081:7;12090:96;12129:15;12090:96;;;;;;;;;;;;;;;;;361:10;12090:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12090:34:0;;;;;;;;;;;;:38;:96::i;23236:222::-;23288:14;;-1:-1:-1;;;;;23288:14:0;23306:10;23288:28;23280:76;;;;-1:-1:-1;;;23280:76:0;;7134:2:1;23280:76:0;;;7116:21:1;7173:2;7153:18;;;7146:30;7212:34;7192:18;;;7185:62;-1:-1:-1;;;7263:18:1;;;7256:33;7306:19;;23280:76:0;6932:399:1;23280:76:0;23401:14;;23393:6;;23372:44;;-1:-1:-1;;;;;23401:14:0;;;;23393:6;;;;-1:-1:-1;;;;;;;;;;;23372:44:0;23401:14;;23372:44;23436:14;;23427:6;:23;;-1:-1:-1;;;;;;23427:23:0;-1:-1:-1;;;;;23436:14:0;;;23427:23;;;;;;23236:222::o;9276:175::-;9362:4;9379:42;361:10;9403:9;9414:6;9379:9;:42::i;35883:182::-;21783:6;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35968:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;35968:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36023:34;;1416:41:1;;;36023:34:0::1;::::0;1389:18:1;36023:34:0::1;;;;;;;35883:182:::0;;:::o;34243:381::-;21783:6;;34324:4;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;34380:6:::1;34360:13;8853:12:::0;;;8765:108;34360:13:::1;:17;::::0;34376:1:::1;34360:17;:::i;:::-;:26;;;;:::i;:::-;34347:9;:39;;34339:105;;;::::0;-1:-1:-1;;;34339:105:0;;7538:2:1;34339:105:0::1;::::0;::::1;7520:21:1::0;7577:2;7557:18;;;7550:30;7616:34;7596:18;;;7589:62;-1:-1:-1;;;7667:18:1;;;7660:51;7728:19;;34339:105:0::1;7336:417:1::0;34339:105:0::1;34495:4;34475:13;8853:12:::0;;;8765:108;34475:13:::1;:17;::::0;34491:1:::1;34475:17;:::i;:::-;:24;;;;:::i;:::-;34462:9;:37;;34454:102;;;::::0;-1:-1:-1;;;34454:102:0;;7960:2:1;34454:102:0::1;::::0;::::1;7942:21:1::0;7999:2;7979:18;;;7972:30;8038:34;8018:18;;;8011:62;-1:-1:-1;;;8089:18:1;;;8082:50;8149:19;;34454:102:0::1;7758:416:1::0;34454:102:0::1;-1:-1:-1::0;34566:18:0::1;:30:::0;34613:4:::1;::::0;34243:381::o;22934:226::-;21783:6;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;23015:6:::1;::::0;;22998:14:::1;:23:::0;;-1:-1:-1;;;;;;22998:23:0;;::::1;-1:-1:-1::0;;;;;23015:6:0;::::1;22998:23;::::0;;;23032:19:::1;::::0;;23074:22:::1;23092:4:::0;23074:15:::1;:22;:::i;:::-;23062:9;:34:::0;23133:6:::1;::::0;23112:40:::1;::::0;23149:1:::1;::::0;-1:-1:-1;;;;;23133:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;23112:40:0;23149:1;;23112:40:::1;22934:226:::0;:::o;43050:162::-;21783:6;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;43162:41:::1;::::0;-1:-1:-1;;;43162:41:0;;43197:4:::1;43162:41;::::0;::::1;2078:51:1::0;-1:-1:-1;;;;;43124:25:0;::::1;::::0;::::1;::::0;43150:10:::1;::::0;43124:25;;43162:26:::1;::::0;2051:18:1;;43162:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43124:80;::::0;-1:-1:-1;;;;;;43124:80:0::1;::::0;;;;;;-1:-1:-1;;;;;8560:32:1;;;43124:80:0::1;::::0;::::1;8542:51:1::0;8609:18;;;8602:34;8515:18;;43124:80:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36521:166::-:0;21783:6;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;36634:9:::1;::::0;36603:41:::1;::::0;-1:-1:-1;;;;;36634:9:0::1;::::0;;::::1;::::0;::::1;::::0;36603:41;::::1;::::0;::::1;::::0;;;::::1;36655:9;:24:::0;;-1:-1:-1;;;;;36655:24:0;;::::1;;;-1:-1:-1::0;;;;;;36655:24:0;;::::1;::::0;;;::::1;::::0;;36521:166::o;22517:244::-;21783:6;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22606:22:0;::::1;22598:73;;;::::0;-1:-1:-1;;;22598:73:0;;9099:2:1;22598:73:0::1;::::0;::::1;9081:21:1::0;9138:2;9118:18;;;9111:30;9177:34;9157:18;;;9150:62;-1:-1:-1;;;9228:18:1;;;9221:36;9274:19;;22598:73:0::1;8897:402:1::0;22598:73:0::1;22708:6;::::0;22687:38:::1;::::0;-1:-1:-1;;;;;22687:38:0;;::::1;::::0;22708:6:::1;::::0;-1:-1:-1;;;;;;;;;;;22687:38:0;22708:6:::1;::::0;22687:38:::1;22736:6;:17:::0;;-1:-1:-1;;;;;;22736:17:0::1;-1:-1:-1::0;;;;;22736:17:0;;;::::1;::::0;;;::::1;::::0;;22517:244::o;42844:198::-;21783:6;;-1:-1:-1;;;;;21783:6:0;361:10;21783:22;21775:67;;;;-1:-1:-1;;;21775:67:0;;;;;;;:::i;:::-;42935:1:::1;42911:21;:25;42902:70;;;::::0;-1:-1:-1;;;42902:70:0;;9506:2:1;42902:70:0::1;::::0;::::1;9488:21:1::0;9545:2;9525:18;;;9518:30;9584:33;9564:18;;;9557:61;9635:18;;42902:70:0::1;9304:355:1::0;42902:70:0::1;42983:51;::::0;42991:10:::1;::::0;43012:21:::1;42983:51:::0;::::1;;;::::0;::::1;::::0;;;43012:21;42991:10;42983:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;42844:198::o:0;16512:181::-;16570:7;;16602:5;16606:1;16602;:5;:::i;:::-;16590:17;;16631:1;16626;:6;;16618:46;;;;-1:-1:-1;;;16618:46:0;;9866:2:1;16618:46:0;;;9848:21:1;9905:2;9885:18;;;9878:30;9944:29;9924:18;;;9917:57;9991:18;;16618:46:0;9664:351:1;16618:46:0;16684:1;16512:181;-1:-1:-1;;;16512:181:0:o;15134:380::-;-1:-1:-1;;;;;15270:19:0;;15262:68;;;;-1:-1:-1;;;15262:68:0;;10222:2:1;15262:68:0;;;10204:21:1;10261:2;10241:18;;;10234:30;10300:34;10280:18;;;10273:62;-1:-1:-1;;;10351:18:1;;;10344:34;10395:19;;15262:68:0;10020:400:1;15262:68:0;-1:-1:-1;;;;;15349:21:0;;15341:68;;;;-1:-1:-1;;;15341:68:0;;10627:2:1;15341:68:0;;;10609:21:1;10666:2;10646:18;;;10639:30;10705:34;10685:18;;;10678:62;-1:-1:-1;;;10756:18:1;;;10749:32;10798:19;;15341:68:0;10425:398:1;15341:68:0;-1:-1:-1;;;;;15422:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15474:32;;2286:25:1;;;15474:32:0;;2259:18:1;15474:32:0;;;;;;;;15134:380;;;:::o;36960:3253::-;-1:-1:-1;;;;;37092:18:0;;37084:68;;;;-1:-1:-1;;;37084:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37171:16:0;;37163:64;;;;-1:-1:-1;;;37163:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37247:21:0;;;;;;:15;:21;;;;;;;;37246:22;:46;;;;-1:-1:-1;;;;;;37273:19:0;;;;;;:15;:19;;;;;;;;37272:20;37246:46;37238:78;;;;-1:-1:-1;;;37238:78:0;;11840:2:1;37238:78:0;;;11822:21:1;11879:2;11859:18;;;11852:30;-1:-1:-1;;;11898:18:1;;;11891:49;11957:18;;37238:78:0;11638:343:1;37238:78:0;37341:6;37351:1;37341:11;37338:92;;37369:28;37385:4;37391:2;37395:1;37369:15;:28::i;:::-;36960:3253;;;:::o;37338:92::-;21636:6;;-1:-1:-1;;;;;37466:15:0;;;21636:6;;37466:15;;;;:49;;-1:-1:-1;21636:6:0;;-1:-1:-1;;;;;37502:13:0;;;21636:6;;37502:13;;37466:49;:86;;;;-1:-1:-1;;;;;;37536:16:0;;;;37466:86;:128;;;;-1:-1:-1;;;;;;37573:21:0;;37587:6;37573:21;;37466:128;:179;;;;-1:-1:-1;;;;;;37616:29:0;;;;;;:25;:29;;;;;;;;37615:30;37466:179;:208;;;;-1:-1:-1;37666:8:0;;;;37665:9;37466:208;37444:1064;;;-1:-1:-1;;;;;37759:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;37795:35:0;;;;;;:31;:35;;;;;;;;37794:36;37759:71;37755:738;;;37877:20;;37867:6;:30;;37859:96;;;;-1:-1:-1;;;37859:96:0;;12188:2:1;37859:96:0;;;12170:21:1;12227:2;12207:18;;;12200:30;12266:34;12246:18;;;12239:62;-1:-1:-1;;;12317:18:1;;;12310:51;12378:19;;37859:96:0;11986:417:1;37859:96:0;38016:9;;-1:-1:-1;;;;;9037:18:0;;9010:7;9037:18;;;;;;;;;;;37990:22;;:6;:22;:::i;:::-;:35;;37982:67;;;;-1:-1:-1;;;37982:67:0;;12610:2:1;37982:67:0;;;12592:21:1;12649:2;12629:18;;;12622:30;-1:-1:-1;;;12668:18:1;;;12661:49;12727:18;;37982:67:0;12408:343:1;37982:67:0;37755:738;;;-1:-1:-1;;;;;38143:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;38177:37:0;;;;;;:31;:37;;;;;;;;38176:38;38143:71;38139:354;;;38261:20;;38251:6;:30;;38243:97;;;;-1:-1:-1;;;38243:97:0;;12958:2:1;38243:97:0;;;12940:21:1;12997:2;12977:18;;;12970:30;13036:34;13016:18;;;13009:62;-1:-1:-1;;;13087:18:1;;;13080:52;13149:19;;38243:97:0;12756:418:1;38139:354:0;38440:9;;-1:-1:-1;;;;;9037:18:0;;9010:7;9037:18;;;;;;;;;;;38414:22;;:6;:22;:::i;:::-;:35;;38406:67;;;;-1:-1:-1;;;38406:67:0;;12610:2:1;38406:67:0;;;12592:21:1;12649:2;12629:18;;;12622:30;-1:-1:-1;;;12668:18:1;;;12661:49;12727:18;;38406:67:0;12408:343:1;38406:67:0;38563:4;38514:28;9037:18;;;;;;;;;;;38629;;38605:42;;;;;;;38678:35;;-1:-1:-1;38702:11:0;;;;38678:35;:61;;;;-1:-1:-1;38731:8:0;;;;38730:9;38678:61;:110;;;;-1:-1:-1;;;;;;38757:31:0;;;;;;:25;:31;;;;;;;;38756:32;38678:110;:153;;;;-1:-1:-1;;;;;;38806:25:0;;;;;;:19;:25;;;;;;;;38805:26;38678:153;:194;;;;-1:-1:-1;;;;;;38849:23:0;;;;;;:19;:23;;;;;;;;38848:24;38678:194;38660:338;;;38899:8;:15;;-1:-1:-1;;38899:15:0;38910:4;38899:15;;;38943:10;:8;:10::i;:::-;38970:8;:16;;-1:-1:-1;;38970:16:0;;;38660:338;39034:8;;-1:-1:-1;;;;;39143:25:0;;39018:12;39143:25;;;:19;:25;;;;;;39034:8;;;;39033:9;;39143:25;;:52;;-1:-1:-1;;;;;;39172:23:0;;;;;;:19;:23;;;;;;;;39143:52;39140:99;;;-1:-1:-1;39222:5:0;39140:99;39259:12;39363:7;39360:800;;;-1:-1:-1;;;;;39390:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;39439:1;39423:13;;:17;39390:50;39386:614;;;39467:34;39497:3;39467:25;39478:13;;39467:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;39460:41;;39568:13;;39549:16;;39542:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39520:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;39648:13:0;;39629:16;;39622:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;39600:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;39386:614:0;;-1:-1:-1;39386:614:0;;-1:-1:-1;;;;;39722:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;39772:1;39757:12;;:16;39722:51;39719:281;;;39798:33;39827:3;39798:24;39809:12;;39798:6;:10;;:24;;;;:::i;:33::-;39791:40;;39894:12;;39876:15;;39869:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;39847:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;39972:12:0;;39954:15;;39947:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;39925:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;39719:281:0;40020:8;;40017:95;;40052:44;40068:4;40082;40090;40052:15;:44::i;:::-;40134:14;40144:4;40134:14;;:::i;:::-;;;39360:800;40172:33;40188:4;40194:2;40198:6;40172:15;:33::i;:::-;37073:3140;;;;36960:3253;;;:::o;17415:192::-;17501:7;17537:12;17529:6;;;;17521:29;;;;-1:-1:-1;;;17521:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17561:9:0;17573:5;17577:1;17573;:5;:::i;:::-;17561:17;17415:192;-1:-1:-1;;;;;17415:192:0:o;36325:188::-;-1:-1:-1;;;;;36408:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;36408:39:0;;;;;;;;;;36465:40;;36408:39;;:31;36465:40;;;36325:188;;:::o;12707:573::-;-1:-1:-1;;;;;12847:20:0;;12839:70;;;;-1:-1:-1;;;12839:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12928:23:0;;12920:71;;;;-1:-1:-1;;;12920:71:0;;;;;;;:::i;:::-;13084;13106:6;13084:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13084:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;13064:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13189:20;;;;;;;:32;;13214:6;13189:24;:32::i;:::-;-1:-1:-1;;;;;13166:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13237:35;2286:25:1;;;13166:20:0;;13237:35;;;;;;2259:18:1;13237:35:0;2140:177:1;41390:1446:0;41473:4;41429:23;9037:18;;;;;;;;;;;41429:50;;41490:25;41539:18;;41518;;:39;;;;:::i;:::-;41490:67;-1:-1:-1;41581:20:0;;;:46;;-1:-1:-1;41605:22:0;;41581:46;41578:60;;;41630:7;;41390:1446::o;41578:60::-;41707:23;41792:1;41772:17;41751:18;;41733:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;41707:86;-1:-1:-1;41804:26:0;41833:36;:15;41707:86;41833:19;:36::i;:::-;41804:65;-1:-1:-1;41918:21:0;41952:36;41804:65;41952:16;:36::i;:::-;42010:18;42031:44;:21;42057:17;42031:25;:44::i;:::-;42010:65;;42096:23;42122:57;42161:17;42122:34;42137:18;;42122:10;:14;;:34;;;;:::i;:57::-;42096:83;-1:-1:-1;42210:23:0;42236:28;42096:83;42236:10;:28;:::i;:::-;42316:1;42295:18;:22;;;42328:18;:22;;;42397:9;;42210:54;;-1:-1:-1;42316:1:0;42397:9;;;-1:-1:-1;;;;;42397:9:0;42420:17;42436:1;42420:15;:17;:::i;:::-;42389:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42371:71;;;42474:1;42456:15;:19;:42;;;;;42497:1;42479:15;:19;42456:42;42453:210;;;42514:46;42527:15;42544;42514:12;:46::i;:::-;42632:18;;42580:71;;;13724:25:1;;;13780:2;13765:18;;13758:34;;;13808:18;;;13801:34;;;;42580:71:0;;;;;;13712:2:1;42580:71:0;;;42453:210;42738:90;;42746:42;;42802:21;;42738:90;;;;42802:21;42746:42;42738:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;41390:1446:0:o;17866:471::-;17924:7;18169:1;18174;18169:6;18165:47;;-1:-1:-1;18199:1:0;18192:8;;18165:47;18224:9;18236:5;18240:1;18236;:5;:::i;:::-;18224:17;-1:-1:-1;18269:1:0;18260:5;18264:1;18224:17;18260:5;:::i;:::-;:10;18252:56;;;;-1:-1:-1;;;18252:56:0;;14048:2:1;18252:56:0;;;14030:21:1;14087:2;14067:18;;;14060:30;14126:34;14106:18;;;14099:62;-1:-1:-1;;;14177:18:1;;;14170:31;14218:19;;18252:56:0;13846:397:1;18813:132:0;18871:7;18898:39;18902:1;18905;18898:39;;;;;;;;;;;;;;;;;:3;:39::i;16976:136::-;17034:7;17061:43;17065:1;17068;17061:43;;;;;;;;;;;;;;;;;:3;:43::i;40221:601::-;40373:16;;;40387:1;40373:16;;;;;;;;40349:21;;40373:16;;;;;;;;;;-1:-1:-1;40373:16:0;40349:40;;40418:4;40400;40405:1;40400:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;40400:23:0;;;-1:-1:-1;;;;;40400:23:0;;;;;40444:15;-1:-1:-1;;;;;40444:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40434:4;40439:1;40434:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;40434:32:0;;;-1:-1:-1;;;;;40434:32:0;;;;;40479:62;40496:4;40511:15;40529:11;40479:8;:62::i;:::-;40580:224;;-1:-1:-1;;;40580:224:0;;-1:-1:-1;;;;;40580:15:0;:66;;;;:224;;40661:11;;40687:1;;40731:4;;40758;;40778:15;;40580:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40276:546;40221:601;:::o;40834:548::-;40982:62;40999:4;41014:15;41032:11;40982:8;:62::i;:::-;41087:287;;-1:-1:-1;;;41087:287:0;;41159:4;41087:287;;;16094:34:1;16144:18;;;16137:34;;;41205:1:0;16187:18:1;;;16180:34;;;16230:18;;;16223:34;41291:42:0;16273:19:1;;;16266:44;41348:15:0;16326:19:1;;;16319:35;41087:15:0;-1:-1:-1;;;;;41087:31:0;;;;41126:9;;16028:19:1;;41087:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40834:548;;:::o;19441:278::-;19527:7;19562:12;19555:5;19547:28;;;;-1:-1:-1;;;19547:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19586:9:0;19598:5;19602:1;19598;:5;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:548::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;551:3;736:1;731:2;722:6;711:9;707:22;703:31;696:42;806:2;799;795:7;790:2;782:6;778:15;774:29;763:9;759:45;755:54;747:62;;;;267:548;;;;:::o;820:131::-;-1:-1:-1;;;;;895:31:1;;885:42;;875:70;;941:1;938;931:12;956:315;1024:6;1032;1085:2;1073:9;1064:7;1060:23;1056:32;1053:52;;;1101:1;1098;1091:12;1053:52;1140:9;1127:23;1159:31;1184:5;1159:31;:::i;:::-;1209:5;1261:2;1246:18;;;;1233:32;;-1:-1:-1;;;956:315:1:o;1468:180::-;1527:6;1580:2;1568:9;1559:7;1555:23;1551:32;1548:52;;;1596:1;1593;1586:12;1548:52;-1:-1:-1;1619:23:1;;1468:180;-1:-1:-1;1468:180:1:o;1653:247::-;1712:6;1765:2;1753:9;1744:7;1740:23;1736:32;1733:52;;;1781:1;1778;1771:12;1733:52;1820:9;1807:23;1839:31;1864:5;1839:31;:::i;2322:456::-;2399:6;2407;2415;2468:2;2456:9;2447:7;2443:23;2439:32;2436:52;;;2484:1;2481;2474:12;2436:52;2523:9;2510:23;2542:31;2567:5;2542:31;:::i;:::-;2592:5;-1:-1:-1;2649:2:1;2634:18;;2621:32;2662:33;2621:32;2662:33;:::i;:::-;2322:456;;2714:7;;-1:-1:-1;;;2768:2:1;2753:18;;;;2740:32;;2322:456::o;3180:118::-;3266:5;3259:13;3252:21;3245:5;3242:32;3232:60;;3288:1;3285;3278:12;3303:382;3368:6;3376;3429:2;3417:9;3408:7;3404:23;3400:32;3397:52;;;3445:1;3442;3435:12;3397:52;3484:9;3471:23;3503:31;3528:5;3503:31;:::i;:::-;3553:5;-1:-1:-1;3610:2:1;3595:18;;3582:32;3623:30;3582:32;3623:30;:::i;:::-;3672:7;3662:17;;;3303:382;;;;;:::o;3690:241::-;3746:6;3799:2;3787:9;3778:7;3774:23;3770:32;3767:52;;;3815:1;3812;3805:12;3767:52;3854:9;3841:23;3873:28;3895:5;3873:28;:::i;3936:388::-;4004:6;4012;4065:2;4053:9;4044:7;4040:23;4036:32;4033:52;;;4081:1;4078;4071:12;4033:52;4120:9;4107:23;4139:31;4164:5;4139:31;:::i;:::-;4189:5;-1:-1:-1;4246:2:1;4231:18;;4218:32;4259:33;4218:32;4259:33;:::i;4329:356::-;4531:2;4513:21;;;4550:18;;;4543:30;4609:34;4604:2;4589:18;;4582:62;4676:2;4661:18;;4329:356::o;4690:127::-;4751:10;4746:3;4742:20;4739:1;4732:31;4782:4;4779:1;4772:15;4806:4;4803:1;4796:15;4822:125;4887:9;;;4908:10;;;4905:36;;;4921:18;;:::i;5310:380::-;5389:1;5385:12;;;;5432;;;5453:61;;5507:4;5499:6;5495:17;5485:27;;5453:61;5560:2;5552:6;5549:14;5529:18;5526:38;5523:161;;5606:10;5601:3;5597:20;5594:1;5587:31;5641:4;5638:1;5631:15;5669:4;5666:1;5659:15;5523:161;;5310:380;;;:::o;5695:168::-;5768:9;;;5799;;5816:15;;;5810:22;;5796:37;5786:71;;5837:18;;:::i;5868:217::-;5908:1;5934;5924:132;;5978:10;5973:3;5969:20;5966:1;5959:31;6013:4;6010:1;6003:15;6041:4;6038:1;6031:15;5924:132;-1:-1:-1;6070:9:1;;5868:217::o;8179:184::-;8249:6;8302:2;8290:9;8281:7;8277:23;8273:32;8270:52;;;8318:1;8315;8308:12;8270:52;-1:-1:-1;8341:16:1;;8179:184;-1:-1:-1;8179:184:1:o;8647:245::-;8714:6;8767:2;8755:9;8746:7;8742:23;8738:32;8735:52;;;8783:1;8780;8773:12;8735:52;8815:9;8809:16;8834:28;8856:5;8834:28;:::i;10828:401::-;11030:2;11012:21;;;11069:2;11049:18;;;11042:30;11108:34;11103:2;11088:18;;11081:62;-1:-1:-1;;;11174:2:1;11159:18;;11152:35;11219:3;11204:19;;10828:401::o;11234:399::-;11436:2;11418:21;;;11475:2;11455:18;;;11448:30;11514:34;11509:2;11494:18;;11487:62;-1:-1:-1;;;11580:2:1;11565:18;;11558:33;11623:3;11608:19;;11234:399::o;13179:128::-;13246:9;;;13267:11;;;13264:37;;;13281:18;;:::i;14380:127::-;14441:10;14436:3;14432:20;14429:1;14422:31;14472:4;14469:1;14462:15;14496:4;14493:1;14486:15;14512:251;14582:6;14635:2;14623:9;14614:7;14610:23;14606:32;14603:52;;;14651:1;14648;14641:12;14603:52;14683:9;14677:16;14702:31;14727:5;14702:31;:::i;14768:980::-;15030:4;15078:3;15067:9;15063:19;15109:6;15098:9;15091:25;15135:2;15173:6;15168:2;15157:9;15153:18;15146:34;15216:3;15211:2;15200:9;15196:18;15189:31;15240:6;15275;15269:13;15306:6;15298;15291:22;15344:3;15333:9;15329:19;15322:26;;15383:2;15375:6;15371:15;15357:29;;15404:1;15414:195;15428:6;15425:1;15422:13;15414:195;;;15493:13;;-1:-1:-1;;;;;15489:39:1;15477:52;;15584:15;;;;15549:12;;;;15525:1;15443:9;15414:195;;;-1:-1:-1;;;;;;;15665:32:1;;;;15660:2;15645:18;;15638:60;-1:-1:-1;;;15729:3:1;15714:19;15707:35;15626:3;14768:980;-1:-1:-1;;;14768:980:1:o;16365:306::-;16453:6;16461;16469;16522:2;16510:9;16501:7;16497:23;16493:32;16490:52;;;16538:1;16535;16528:12;16490:52;16567:9;16561:16;16551:26;;16617:2;16606:9;16602:18;16596:25;16586:35;;16661:2;16650:9;16646:18;16640:25;16630:35;;16365:306;;;;;:::o
Swarm Source
ipfs://4015089722aa8fe5db03601f8c1907debc7a6ef8de38c3b3c1894471032d1f10
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.