Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 289 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 18441972 | 397 days ago | IN | 0 ETH | 0.00062857 | ||||
Approve | 17997155 | 459 days ago | IN | 0 ETH | 0.00036951 | ||||
Approve | 17049811 | 592 days ago | IN | 0 ETH | 0.00127207 | ||||
Approve | 17037859 | 594 days ago | IN | 0 ETH | 0.00174864 | ||||
Approve | 17010924 | 598 days ago | IN | 0 ETH | 0.00055235 | ||||
Approve | 16989376 | 601 days ago | IN | 0 ETH | 0.00128266 | ||||
Approve | 16905722 | 612 days ago | IN | 0 ETH | 0.00101086 | ||||
Approve | 16892625 | 614 days ago | IN | 0 ETH | 0.00163546 | ||||
Approve | 16879746 | 616 days ago | IN | 0 ETH | 0.00063974 | ||||
Approve | 16867126 | 618 days ago | IN | 0 ETH | 0.00061367 | ||||
Approve | 16859534 | 619 days ago | IN | 0 ETH | 0.00034934 | ||||
Approve | 16855238 | 619 days ago | IN | 0 ETH | 0.00086481 | ||||
Transfer | 16851228 | 620 days ago | IN | 0 ETH | 0.00755303 | ||||
Approve | 16839631 | 622 days ago | IN | 0 ETH | 0.00086011 | ||||
Approve | 16835242 | 622 days ago | IN | 0 ETH | 0.00134957 | ||||
Approve | 16833359 | 623 days ago | IN | 0 ETH | 0.00141519 | ||||
Approve | 16832566 | 623 days ago | IN | 0 ETH | 0.00087311 | ||||
Approve | 16832097 | 623 days ago | IN | 0 ETH | 0.00092804 | ||||
Approve | 16832081 | 623 days ago | IN | 0 ETH | 0.000524 | ||||
Approve | 16832081 | 623 days ago | IN | 0 ETH | 0.00088324 | ||||
Approve | 16822037 | 624 days ago | IN | 0 ETH | 0.00101471 | ||||
Approve | 16819304 | 625 days ago | IN | 0 ETH | 0.00065857 | ||||
Approve | 16819282 | 625 days ago | IN | 0 ETH | 0.00134358 | ||||
Approve | 16802832 | 627 days ago | IN | 0 ETH | 0.00424099 | ||||
Approve | 16799986 | 627 days ago | IN | 0 ETH | 0.0018228 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17037867 | 594 days ago | 0.0045201 ETH | ||||
17037867 | 594 days ago | 0.0045201 ETH | ||||
16879763 | 616 days ago | 0.00478375 ETH | ||||
16879763 | 616 days ago | 0.00478375 ETH | ||||
16851228 | 620 days ago | 0.00569505 ETH | ||||
16851228 | 620 days ago | 0.00569505 ETH | ||||
16832570 | 623 days ago | 0.00602812 ETH | ||||
16832570 | 623 days ago | 0.00602812 ETH | ||||
16816785 | 625 days ago | 0.00716332 ETH | ||||
16816785 | 625 days ago | 0.00716332 ETH | ||||
16810411 | 626 days ago | 0.0051628 ETH | ||||
16810411 | 626 days ago | 0.0051628 ETH | ||||
16806989 | 626 days ago | 0.00797585 ETH | ||||
16806989 | 626 days ago | 0.00797585 ETH | ||||
16798272 | 628 days ago | 0.00513505 ETH | ||||
16798272 | 628 days ago | 0.00513505 ETH | ||||
16797188 | 628 days ago | 0.01063104 ETH | ||||
16797188 | 628 days ago | 0.01063104 ETH | ||||
16795338 | 628 days ago | 0.00917081 ETH | ||||
16795338 | 628 days ago | 0.00917081 ETH | ||||
16794149 | 628 days ago | 0.02665327 ETH | ||||
16794149 | 628 days ago | 0.02665327 ETH | ||||
16792616 | 628 days ago | 0.01076806 ETH | ||||
16792616 | 628 days ago | 0.01076806 ETH | ||||
16792200 | 628 days ago | 0.00917862 ETH |
Loading...
Loading
Contract Name:
TAILTOOLS
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-07 */ // File: TAILTOOLS.sol // $TAIL - TAIL TOOLS // https://t.me/TAILTools // https://twitter.com/TailTools // https://tail-tools.com/ // https://medium.com/@tail.tools pragma solidity ^0.8.13; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence.... */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`... */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract TAILTOOLS is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address private devOpsWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; bool public enableEarlySellTax = true; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; // Blacklist Map mapping (address => bool) private _blacklist; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyDevOpsFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellDevOpsFee; uint256 public sellLiquidityFee; uint256 public earlySellLiquidityFee; uint256 public earlySellDevOpsFee; uint256 public tokensForDevOps; uint256 public tokensForLiquidity; uint256 public tokensForDev; // block number of opened trading uint256 launchedAt; /******************/ // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event devOpsWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("TAIL TOOLS", "TAIL") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyDevOpsFee = 5; uint256 _buyLiquidityFee = 0; uint256 _sellDevOpsFee = 5; uint256 _sellLiquidityFee = 0; uint256 _earlySellLiquidityFee = 0; uint256 _earlySellDevOpsFee = 5; uint256 totalSupply = 1 * 1e13 * 1e18; maxTransactionAmount = totalSupply * 30 / 1000; // 3% maxTransactionAmountTxn maxWallet = totalSupply * 30 / 1000; // 3% maxWallet swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet buyDevOpsFee = _buyDevOpsFee; buyLiquidityFee = _buyLiquidityFee; buyTotalFees = buyDevOpsFee + buyLiquidityFee; sellDevOpsFee = _sellDevOpsFee; sellLiquidityFee = _sellLiquidityFee; sellTotalFees = sellDevOpsFee + sellLiquidityFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellDevOpsFee = _earlySellDevOpsFee; devOpsWallet = address(0xD68433805b5f1D89DC87fC9e682f2CB6C78fC48D); // set as devOps wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(0xD68433805b5f1D89DC87fC9e682f2CB6C78fC48D), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); excludeFromMaxTransaction(address(0xD68433805b5f1D89DC87fC9e682f2CB6C78fC48D), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } function setEarlySellTax(bool onoff) external onlyOwner { enableEarlySellTax = onoff; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _devOpsFee, uint256 _liquidityFee) external onlyOwner { buyDevOpsFee = _devOpsFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyDevOpsFee + buyLiquidityFee; require(buyTotalFees <= 20, "Must keep fees at 20% or less"); } function updateSellFees(uint256 _devOpsFee, uint256 _liquidityFee, uint256 _earlySellLiquidityFee, uint256 _earlySellDevOpsFee) external onlyOwner { sellDevOpsFee = _devOpsFee; sellLiquidityFee = _liquidityFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellDevOpsFee = _earlySellDevOpsFee; sellTotalFees = sellDevOpsFee + sellLiquidityFee; require(sellTotalFees <= 20, "Must keep fees at 20% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function blacklistAccount (address account, bool isBlacklisted) public onlyOwner { require(block.number < launchedAt + 40, "Waited too long to blacklist"); _blacklist[account] = isBlacklisted; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateDevOpsWallet(address newDevOpsWallet) external onlyOwner { emit devOpsWalletUpdated(newDevOpsWallet, devOpsWallet); devOpsWallet = newDevOpsWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } // early sell logic bool isBuy = from == uniswapV2Pair; if (!isBuy && enableEarlySellTax) { if (_holderFirstBuyTimestamp[from] != 0 && (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp)) { sellLiquidityFee = earlySellLiquidityFee; sellDevOpsFee = earlySellDevOpsFee; sellTotalFees = sellDevOpsFee + sellLiquidityFee; } } else { if (_holderFirstBuyTimestamp[to] == 0) { _holderFirstBuyTimestamp[to] = block.timestamp; } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDevOps += fees * sellDevOpsFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDevOps += fees * buyDevOpsFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForDevOps + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForDevOps = ethBalance.mul(tokensForDevOps).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForDevOps - ethForDev; tokensForLiquidity = 0; tokensForDevOps = 0; tokensForDev = 0; if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(devOpsWallet).call{value: address(this).balance}(""); } }
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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devOpsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellDevOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevOps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devOpsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevOpsWallet","type":"address"}],"name":"updateDevOpsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devOpsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevOpsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055506001600a60036101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600a81526020017f5441494c20544f4f4c53000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5441494c0000000000000000000000000000000000000000000000000000000081525081600390805190602001906200011d92919062000b84565b5080600490805190602001906200013692919062000b84565b50505060006200014b6200065160201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002168160016200065960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bc919062000c9e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034a919062000c9e565b6040518363ffffffff1660e01b81526004016200036992919062000ce1565b6020604051808303816000875af115801562000389573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003af919062000c9e565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003f760a05160016200065960201b60201c565b6200040c60a05160016200075660201b60201c565b6000600590506000806005905060008060006005905060006c7e37be2022c0914b268000000090506103e8601e8262000446919062000d47565b62000452919062000dd7565b6007819055506103e8601e826200046a919062000d47565b62000476919062000dd7565b600981905550612710600a826200048e919062000d47565b6200049a919062000dd7565b6008819055508660108190555085601181905550601154601054620004c0919062000e0f565b600f819055508460138190555083601481905550601454601354620004e6919062000e0f565b601281905550826015819055508160168190555073d68433805b5f1d89dc87fc9e682f2cb6c78fc48d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057162000563620007f760201b60201c565b60016200082160201b60201c565b620005843060016200082160201b60201c565b6200059961dead60016200082160201b60201c565b620005c073d68433805b5f1d89dc87fc9e682f2cb6c78fc48d60016200082160201b60201c565b620005e2620005d4620007f760201b60201c565b60016200065960201b60201c565b620005f53060016200065960201b60201c565b6200060a61dead60016200065960201b60201c565b6200063173d68433805b5f1d89dc87fc9e682f2cb6c78fc48d60016200065960201b60201c565b6200064333826200096e60201b60201c565b50505050505050506200109f565b600033905090565b620006696200065160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f29062000ecd565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008316200065160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ba9062000ecd565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000962919062000f0c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d79062000f79565b60405180910390fd5b620009f46000838362000b1c60201b60201c565b62000a108160025462000b2160201b6200259b1790919060201c565b60028190555062000a6e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b2160201b6200259b1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b10919062000fac565b60405180910390a35050565b505050565b600080828462000b32919062000e0f565b90508381101562000b7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b719062001019565b60405180910390fd5b8091505092915050565b82805462000b92906200106a565b90600052602060002090601f01602090048101928262000bb6576000855562000c02565b82601f1062000bd157805160ff191683800117855562000c02565b8280016001018555821562000c02579182015b8281111562000c0157825182559160200191906001019062000be4565b5b50905062000c11919062000c15565b5090565b5b8082111562000c3057600081600090555060010162000c16565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c668262000c39565b9050919050565b62000c788162000c59565b811462000c8457600080fd5b50565b60008151905062000c988162000c6d565b92915050565b60006020828403121562000cb75762000cb662000c34565b5b600062000cc78482850162000c87565b91505092915050565b62000cdb8162000c59565b82525050565b600060408201905062000cf8600083018562000cd0565b62000d07602083018462000cd0565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d548262000d0e565b915062000d618362000d0e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d9d5762000d9c62000d18565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000de48262000d0e565b915062000df18362000d0e565b92508262000e045762000e0362000da8565b5b828204905092915050565b600062000e1c8262000d0e565b915062000e298362000d0e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e615762000e6062000d18565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000eb560208362000e6c565b915062000ec28262000e7d565b602082019050919050565b6000602082019050818103600083015262000ee88162000ea6565b9050919050565b60008115159050919050565b62000f068162000eef565b82525050565b600060208201905062000f23600083018462000efb565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f61601f8362000e6c565b915062000f6e8262000f29565b602082019050919050565b6000602082019050818103600083015262000f948162000f52565b9050919050565b62000fa68162000d0e565b82525050565b600060208201905062000fc3600083018462000f9b565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001001601b8362000e6c565b91506200100e8262000fc9565b602082019050919050565b60006020820190508181036000830152620010348162000ff2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200108357607f821691505b6020821081036200109957620010986200103b565b5b50919050565b60805160a05161571962001104600039600081816111a40152818161198501528181612c62015261306b015260008181610d6901528181612c0a01528181613e5101528181613f3201528181613f5901528181613ff5015261401c01526157196000f3fe60806040526004361061031e5760003560e01c8063924de9b7116101ab578063c0246668116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610bed578063f2fde38b14610c18578063f637434214610c41578063f8b45b0514610c6c57610325565b8063e2f4560514610b6e578063e7ad9fcd14610b99578063e884f26014610bc257610325565b8063c8c8ebe4116100d1578063c8c8ebe414610a9e578063d257b34f14610ac9578063d85ba06314610b06578063dd62ed3e14610b3157610325565b8063c024666814610a21578063c18bc19514610a4a578063c876d0b914610a7357610325565b8063a4d15b6411610164578063b2b2c0bb1161013e578063b2b2c0bb14610965578063b62496f514610990578063bbc0c742146109cd578063bde73318146109f857610325565b8063a4d15b64146108d2578063a5cf68ef146108fd578063a9059cbb1461092857610325565b8063924de9b7146107c457806395d89b41146107ed5780639a7a23d6146108185780639fccce3214610841578063a26577781461086c578063a457c2d71461089557610325565b80634a62bb651161026a57806370a08231116102235780637571336a116101fd5780637571336a1461072e578063762d868a146107575780638a8c523c146107825780638da5cb5b1461079957610325565b806370a08231146106af578063715018a6146106ec578063751039fc1461070357610325565b80634a62bb651461059d5780634fbee193146105c8578063541a43cf1461060557806366ca9b83146106305780636a486a8e146106595780636ddd17131461068457610325565b80631b5cc613116102d75780632d5a5d34116102b15780632d5a5d34146104e1578063313ce5671461050a578063395093511461053557806349bd5a5e1461057257610325565b80631b5cc61314610450578063203e727e1461047b57806323b872dd146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631a8145bb1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c97565b60405161034c91906141c5565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614280565b610d29565b60405161038991906142db565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906142f6565b610d47565b6040516103c691906142db565b60405180910390f35b3480156103db57600080fd5b506103e4610d67565b6040516103f19190614382565b60405180910390f35b34801561040657600080fd5b5061040f610d8b565b60405161041c91906143ac565b60405180910390f35b34801561043157600080fd5b5061043a610d95565b60405161044791906143ac565b60405180910390f35b34801561045c57600080fd5b50610465610d9b565b60405161047291906143ac565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906143c7565b610da1565b005b3480156104b057600080fd5b506104cb60048036038101906104c691906143f4565b610ecb565b6040516104d891906142db565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190614473565b610fa4565b005b34801561051657600080fd5b5061051f6110e6565b60405161052c91906144cf565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614280565b6110ef565b60405161056991906142db565b60405180910390f35b34801561057e57600080fd5b506105876111a2565b60405161059491906144f9565b60405180910390f35b3480156105a957600080fd5b506105b26111c6565b6040516105bf91906142db565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea91906142f6565b6111d9565b6040516105fc91906142db565b60405180910390f35b34801561061157600080fd5b5061061a61122f565b60405161062791906143ac565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190614514565b611235565b005b34801561066557600080fd5b5061066e61133a565b60405161067b91906143ac565b60405180910390f35b34801561069057600080fd5b50610699611340565b6040516106a691906142db565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906142f6565b611353565b6040516106e391906143ac565b60405180910390f35b3480156106f857600080fd5b5061070161139b565b005b34801561070f57600080fd5b506107186114f3565b60405161072591906142db565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614473565b6115ae565b005b34801561076357600080fd5b5061076c6116a0565b60405161077991906143ac565b60405180910390f35b34801561078e57600080fd5b506107976116a6565b005b3480156107a557600080fd5b506107ae61177c565b6040516107bb91906144f9565b60405180910390f35b3480156107d057600080fd5b506107eb60048036038101906107e69190614554565b6117a6565b005b3480156107f957600080fd5b5061080261185a565b60405161080f91906141c5565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190614473565b6118ec565b005b34801561084d57600080fd5b50610856611a1f565b60405161086391906143ac565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614554565b611a25565b005b3480156108a157600080fd5b506108bc60048036038101906108b79190614280565b611ad9565b6040516108c991906142db565b60405180910390f35b3480156108de57600080fd5b506108e7611ba6565b6040516108f491906142db565b60405180910390f35b34801561090957600080fd5b50610912611bb9565b60405161091f91906143ac565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a9190614280565b611bbf565b60405161095c91906142db565b60405180910390f35b34801561097157600080fd5b5061097a611bdd565b60405161098791906143ac565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b291906142f6565b611be3565b6040516109c491906142db565b60405180910390f35b3480156109d957600080fd5b506109e2611c03565b6040516109ef91906142db565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a91906142f6565b611c16565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190614473565b611d6d565b005b348015610a5657600080fd5b50610a716004803603810190610a6c91906143c7565b611ead565b005b348015610a7f57600080fd5b50610a88611fd7565b604051610a9591906142db565b60405180910390f35b348015610aaa57600080fd5b50610ab3611fea565b604051610ac091906143ac565b60405180910390f35b348015610ad557600080fd5b50610af06004803603810190610aeb91906143c7565b611ff0565b604051610afd91906142db565b60405180910390f35b348015610b1257600080fd5b50610b1b612160565b604051610b2891906143ac565b60405180910390f35b348015610b3d57600080fd5b50610b586004803603810190610b539190614581565b612166565b604051610b6591906143ac565b60405180910390f35b348015610b7a57600080fd5b50610b836121ed565b604051610b9091906143ac565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb91906145c1565b6121f3565b005b348015610bce57600080fd5b50610bd7612308565b604051610be491906142db565b60405180910390f35b348015610bf957600080fd5b50610c026123c3565b604051610c0f91906143ac565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a91906142f6565b6123c9565b005b348015610c4d57600080fd5b50610c5661258f565b604051610c6391906143ac565b60405180910390f35b348015610c7857600080fd5b50610c81612595565b604051610c8e91906143ac565b60405180910390f35b606060038054610ca690614657565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd290614657565b8015610d1f5780601f10610cf457610100808354040283529160200191610d1f565b820191906000526020600020905b815481529060010190602001808311610d0257829003601f168201915b5050505050905090565b6000610d3d610d366125f9565b8484612601565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60185481565b60165481565b610da96125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f906146d4565b60405180910390fd5b670de0b6b3a76400006103e86001610e4e610d8b565b610e589190614723565b610e6291906147ac565b610e6c91906147ac565b811015610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea59061484f565b60405180910390fd5b670de0b6b3a764000081610ec29190614723565b60078190555050565b6000610ed88484846127ca565b610f9984610ee46125f9565b610f948560405180606001604052806028815260200161569760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f4a6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b612601565b600190509392505050565b610fac6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611032906146d4565b60405180910390fd5b6028601a5461104a919061486f565b431061108b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108290614911565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006111986110fc6125f9565b84611193856001600061110d6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b612601565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b61123d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c3906146d4565b60405180910390fd5b81601081905550806011819055506011546010546112ea919061486f565b600f819055506014600f541115611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d9061497d565b60405180910390fd5b5050565b60125481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113a36125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906146d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114fd6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611583906146d4565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b6115b66125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c906146d4565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b6116ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611734906146d4565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906146d4565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461186990614657565b80601f016020809104026020016040519081016040528092919081815260200182805461189590614657565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b6118f46125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a906146d4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614a0f565b60405180910390fd5b611a1b8282613712565b5050565b60195481565b611a2d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab3906146d4565b60405180910390fd5b80600a60036101000a81548160ff02191690831515021790555050565b6000611b9c611ae66125f9565b84611b97856040518060600160405280602581526020016156bf6025913960016000611b106125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b612601565b6001905092915050565b600a60039054906101000a900460ff1681565b60105481565b6000611bd3611bcc6125f9565b84846127ca565b6001905092915050565b60175481565b601d6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611c1e6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca4906146d4565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbdcddef9ef45c223fdd883851191fd9fa95aa9b793f97f720258493ceed93d7560405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d756125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfb906146d4565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ea191906142db565b60405180910390a25050565b611eb56125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b906146d4565b60405180910390fd5b670de0b6b3a76400006103e86005611f5a610d8b565b611f649190614723565b611f6e91906147ac565b611f7891906147ac565b811015611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190614aa1565b60405180910390fd5b670de0b6b3a764000081611fce9190614723565b60098190555050565b600e60009054906101000a900460ff1681565b60075481565b6000611ffa6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612089576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612080906146d4565b60405180910390fd5b620186a06001612097610d8b565b6120a19190614723565b6120ab91906147ac565b8210156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614b33565b60405180910390fd5b6103e860056120fa610d8b565b6121049190614723565b61210e91906147ac565b821115612150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214790614bc5565b60405180910390fd5b8160088190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6121fb6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461228a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612281906146d4565b60405180910390fd5b836013819055508260148190555081601581905550806016819055506014546013546122b6919061486f565b60128190555060146012541115612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f99061497d565b60405180910390fd5b50505050565b60006123126125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612398906146d4565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6123d16125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612460576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612457906146d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690614c57565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60095481565b60008082846125aa919061486f565b9050838110156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614cc3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790614d55565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614de7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127bd91906143ac565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090614e79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f90614f0b565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561294c5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61298b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298290614f9d565b60405180910390fd5b600081036129a45761299f838360006137b3565b6136a9565b600a60009054906101000a900460ff1615613067576129c161177c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a2f57506129ff61177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a685750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612abb5750600560149054906101000a900460ff16155b1561306657600a60019054906101000a900460ff16612bb557601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b755750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab90615009565b60405180910390fd5b5b600e60009054906101000a900460ff1615612d7d57612bd261177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c5957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d7c5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e906150c1565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e205750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec757600754811115612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6190615153565b60405180910390fd5b600954612e7683611353565b82612e81919061486f565b1115612ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb9906151bf565b60405180910390fd5b613065565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6a5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fb957600754811115612fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fab90615251565b60405180910390fd5b613064565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130635760095461301683611353565b82613021919061486f565b1115613062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613059906151bf565b60405180910390fd5b5b5b5b5b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156130d45750600a60039054906101000a900460ff165b156131a9576000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561317657504262015180600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613173919061486f565b10155b156131a45760155460148190555060165460138190555060145460135461319d919061486f565b6012819055505b613236565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036132355742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600061324130611353565b9050600060085482101590508080156132665750600a60029054906101000a900460ff165b801561327f5750600560149054906101000a900460ff16155b80156132d55750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561332b5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133815750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133c5576001600560146101000a81548160ff0219169083151502179055506133a9613a46565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061347b5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561348557600090505b6000811561369857601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134e857506000601254115b1561358257613515606461350760125489613c9f90919063ffffffff16565b613d1990919063ffffffff16565b9050601254601454826135289190614723565b61353291906147ac565b60186000828254613543919061486f565b925050819055506012546013548261355b9190614723565b61356591906147ac565b60176000828254613576919061486f565b92505081905550613674565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135dd57506000600f54115b156136735761360a60646135fc600f5489613c9f90919063ffffffff16565b613d1990919063ffffffff16565b9050600f546011548261361d9190614723565b61362791906147ac565b60186000828254613638919061486f565b92505081905550600f54601054826136509190614723565b61365a91906147ac565b6017600082825461366b919061486f565b925050819055505b5b6000811115613689576136888830836137b3565b5b80866136959190615271565b95505b6136a38888886137b3565b50505050505b505050565b60008383111582906136f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ed91906141c5565b60405180910390fd5b50600083856137059190615271565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381990614e79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388890614f0b565b60405180910390fd5b61389c838383613d63565b61390781604051806060016040528060268152602001615671602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a3991906143ac565b60405180910390a3505050565b6000613a5130611353565b90506000601954601754601854613a68919061486f565b613a72919061486f565b9050600080831480613a845750600082145b15613a9157505050613c9d565b6014600854613aa09190614723565b831115613ab9576014600854613ab69190614723565b92505b600060028360185486613acc9190614723565b613ad691906147ac565b613ae091906147ac565b90506000613af78286613d6890919063ffffffff16565b90506000479050613b0782613db2565b6000613b1c8247613d6890919063ffffffff16565b90506000613b4787613b3960175485613c9f90919063ffffffff16565b613d1990919063ffffffff16565b90506000613b7288613b6460195486613c9f90919063ffffffff16565b613d1990919063ffffffff16565b90506000818385613b839190615271565b613b8d9190615271565b9050600060188190555060006017819055506000601981905550600087118015613bb75750600081115b15613c0457613bc68782613fef565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613bfb939291906152a5565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c4a9061530d565b60006040518083038185875af1925050503d8060008114613c87576040519150601f19603f3d011682016040523d82523d6000602084013e613c8c565b606091505b505080985050505050505050505050505b565b6000808303613cb15760009050613d13565b60008284613cbf9190614723565b9050828482613cce91906147ac565b14613d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0590615394565b60405180910390fd5b809150505b92915050565b6000613d5b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140c9565b905092915050565b505050565b6000613daa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136ae565b905092915050565b6000600267ffffffffffffffff811115613dcf57613dce6153b4565b5b604051908082528060200260200182016040528015613dfd5781602001602082028036833780820191505090505b5090503081600081518110613e1557613e146153e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ede9190615427565b81600181518110613ef257613ef16153e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f57307f000000000000000000000000000000000000000000000000000000000000000084612601565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fb995949392919061554d565b600060405180830381600087803b158015613fd357600080fd5b505af1158015613fe7573d6000803e3d6000fd5b505050505050565b61401a307f000000000000000000000000000000000000000000000000000000000000000084612601565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161407f969594939291906155a7565b60606040518083038185885af115801561409d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140c2919061561d565b5050505050565b60008083118290614110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410791906141c5565b60405180910390fd5b506000838561411f91906147ac565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561416657808201518184015260208101905061414b565b83811115614175576000848401525b50505050565b6000601f19601f8301169050919050565b60006141978261412c565b6141a18185614137565b93506141b1818560208601614148565b6141ba8161417b565b840191505092915050565b600060208201905081810360008301526141df818461418c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614217826141ec565b9050919050565b6142278161420c565b811461423257600080fd5b50565b6000813590506142448161421e565b92915050565b6000819050919050565b61425d8161424a565b811461426857600080fd5b50565b60008135905061427a81614254565b92915050565b60008060408385031215614297576142966141e7565b5b60006142a585828601614235565b92505060206142b68582860161426b565b9150509250929050565b60008115159050919050565b6142d5816142c0565b82525050565b60006020820190506142f060008301846142cc565b92915050565b60006020828403121561430c5761430b6141e7565b5b600061431a84828501614235565b91505092915050565b6000819050919050565b600061434861434361433e846141ec565b614323565b6141ec565b9050919050565b600061435a8261432d565b9050919050565b600061436c8261434f565b9050919050565b61437c81614361565b82525050565b60006020820190506143976000830184614373565b92915050565b6143a68161424a565b82525050565b60006020820190506143c1600083018461439d565b92915050565b6000602082840312156143dd576143dc6141e7565b5b60006143eb8482850161426b565b91505092915050565b60008060006060848603121561440d5761440c6141e7565b5b600061441b86828701614235565b935050602061442c86828701614235565b925050604061443d8682870161426b565b9150509250925092565b614450816142c0565b811461445b57600080fd5b50565b60008135905061446d81614447565b92915050565b6000806040838503121561448a576144896141e7565b5b600061449885828601614235565b92505060206144a98582860161445e565b9150509250929050565b600060ff82169050919050565b6144c9816144b3565b82525050565b60006020820190506144e460008301846144c0565b92915050565b6144f38161420c565b82525050565b600060208201905061450e60008301846144ea565b92915050565b6000806040838503121561452b5761452a6141e7565b5b60006145398582860161426b565b925050602061454a8582860161426b565b9150509250929050565b60006020828403121561456a576145696141e7565b5b60006145788482850161445e565b91505092915050565b60008060408385031215614598576145976141e7565b5b60006145a685828601614235565b92505060206145b785828601614235565b9150509250929050565b600080600080608085870312156145db576145da6141e7565b5b60006145e98782880161426b565b94505060206145fa8782880161426b565b935050604061460b8782880161426b565b925050606061461c8782880161426b565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061466f57607f821691505b60208210810361468257614681614628565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146be602083614137565b91506146c982614688565b602082019050919050565b600060208201905081810360008301526146ed816146b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061472e8261424a565b91506147398361424a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614772576147716146f4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147b78261424a565b91506147c28361424a565b9250826147d2576147d161477d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614839602f83614137565b9150614844826147dd565b604082019050919050565b600060208201905081810360008301526148688161482c565b9050919050565b600061487a8261424a565b91506148858361424a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ba576148b96146f4565b5b828201905092915050565b7f57616974656420746f6f206c6f6e6720746f20626c61636b6c69737400000000600082015250565b60006148fb601c83614137565b9150614906826148c5565b602082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614967601d83614137565b915061497282614931565b602082019050919050565b600060208201905081810360008301526149968161495a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149f9603983614137565b9150614a048261499d565b604082019050919050565b60006020820190508181036000830152614a28816149ec565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a8b602483614137565b9150614a9682614a2f565b604082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b1d603583614137565b9150614b2882614ac1565b604082019050919050565b60006020820190508181036000830152614b4c81614b10565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614baf603483614137565b9150614bba82614b53565b604082019050919050565b60006020820190508181036000830152614bde81614ba2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c41602683614137565b9150614c4c82614be5565b604082019050919050565b60006020820190508181036000830152614c7081614c34565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cad601b83614137565b9150614cb882614c77565b602082019050919050565b60006020820190508181036000830152614cdc81614ca0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d3f602483614137565b9150614d4a82614ce3565b604082019050919050565b60006020820190508181036000830152614d6e81614d32565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dd1602283614137565b9150614ddc82614d75565b604082019050919050565b60006020820190508181036000830152614e0081614dc4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e63602583614137565b9150614e6e82614e07565b604082019050919050565b60006020820190508181036000830152614e9281614e56565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ef5602383614137565b9150614f0082614e99565b604082019050919050565b60006020820190508181036000830152614f2481614ee8565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614f87603183614137565b9150614f9282614f2b565b604082019050919050565b60006020820190508181036000830152614fb681614f7a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ff3601683614137565b9150614ffe82614fbd565b602082019050919050565b6000602082019050818103600083015261502281614fe6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150ab604983614137565b91506150b682615029565b606082019050919050565b600060208201905081810360008301526150da8161509e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061513d603583614137565b9150615148826150e1565b604082019050919050565b6000602082019050818103600083015261516c81615130565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151a9601383614137565b91506151b482615173565b602082019050919050565b600060208201905081810360008301526151d88161519c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061523b603683614137565b9150615246826151df565b604082019050919050565b6000602082019050818103600083015261526a8161522e565b9050919050565b600061527c8261424a565b91506152878361424a565b92508282101561529a576152996146f4565b5b828203905092915050565b60006060820190506152ba600083018661439d565b6152c7602083018561439d565b6152d4604083018461439d565b949350505050565b600081905092915050565b50565b60006152f76000836152dc565b9150615302826152e7565b600082019050919050565b6000615318826152ea565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061537e602183614137565b915061538982615322565b604082019050919050565b600060208201905081810360008301526153ad81615371565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154218161421e565b92915050565b60006020828403121561543d5761543c6141e7565b5b600061544b84828501615412565b91505092915050565b6000819050919050565b600061547961547461546f84615454565b614323565b61424a565b9050919050565b6154898161545e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154c48161420c565b82525050565b60006154d683836154bb565b60208301905092915050565b6000602082019050919050565b60006154fa8261548f565b615504818561549a565b935061550f836154ab565b8060005b8381101561554057815161552788826154ca565b9750615532836154e2565b925050600181019050615513565b5085935050505092915050565b600060a082019050615562600083018861439d565b61556f6020830187615480565b818103604083015261558181866154ef565b905061559060608301856144ea565b61559d608083018461439d565b9695505050505050565b600060c0820190506155bc60008301896144ea565b6155c9602083018861439d565b6155d66040830187615480565b6155e36060830186615480565b6155f060808301856144ea565b6155fd60a083018461439d565b979650505050505050565b60008151905061561781614254565b92915050565b600080600060608486031215615636576156356141e7565b5b600061564486828701615608565b935050602061565586828701615608565b925050604061566686828701615608565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d4ea0ed2f1451ce329859f20702abd10cc49b0ed744550a6e9cf9b9962e246dd64736f6c634300080d0033
Deployed Bytecode
0x60806040526004361061031e5760003560e01c8063924de9b7116101ab578063c0246668116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610bed578063f2fde38b14610c18578063f637434214610c41578063f8b45b0514610c6c57610325565b8063e2f4560514610b6e578063e7ad9fcd14610b99578063e884f26014610bc257610325565b8063c8c8ebe4116100d1578063c8c8ebe414610a9e578063d257b34f14610ac9578063d85ba06314610b06578063dd62ed3e14610b3157610325565b8063c024666814610a21578063c18bc19514610a4a578063c876d0b914610a7357610325565b8063a4d15b6411610164578063b2b2c0bb1161013e578063b2b2c0bb14610965578063b62496f514610990578063bbc0c742146109cd578063bde73318146109f857610325565b8063a4d15b64146108d2578063a5cf68ef146108fd578063a9059cbb1461092857610325565b8063924de9b7146107c457806395d89b41146107ed5780639a7a23d6146108185780639fccce3214610841578063a26577781461086c578063a457c2d71461089557610325565b80634a62bb651161026a57806370a08231116102235780637571336a116101fd5780637571336a1461072e578063762d868a146107575780638a8c523c146107825780638da5cb5b1461079957610325565b806370a08231146106af578063715018a6146106ec578063751039fc1461070357610325565b80634a62bb651461059d5780634fbee193146105c8578063541a43cf1461060557806366ca9b83146106305780636a486a8e146106595780636ddd17131461068457610325565b80631b5cc613116102d75780632d5a5d34116102b15780632d5a5d34146104e1578063313ce5671461050a578063395093511461053557806349bd5a5e1461057257610325565b80631b5cc61314610450578063203e727e1461047b57806323b872dd146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631a8145bb1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c97565b60405161034c91906141c5565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614280565b610d29565b60405161038991906142db565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906142f6565b610d47565b6040516103c691906142db565b60405180910390f35b3480156103db57600080fd5b506103e4610d67565b6040516103f19190614382565b60405180910390f35b34801561040657600080fd5b5061040f610d8b565b60405161041c91906143ac565b60405180910390f35b34801561043157600080fd5b5061043a610d95565b60405161044791906143ac565b60405180910390f35b34801561045c57600080fd5b50610465610d9b565b60405161047291906143ac565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906143c7565b610da1565b005b3480156104b057600080fd5b506104cb60048036038101906104c691906143f4565b610ecb565b6040516104d891906142db565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190614473565b610fa4565b005b34801561051657600080fd5b5061051f6110e6565b60405161052c91906144cf565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614280565b6110ef565b60405161056991906142db565b60405180910390f35b34801561057e57600080fd5b506105876111a2565b60405161059491906144f9565b60405180910390f35b3480156105a957600080fd5b506105b26111c6565b6040516105bf91906142db565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea91906142f6565b6111d9565b6040516105fc91906142db565b60405180910390f35b34801561061157600080fd5b5061061a61122f565b60405161062791906143ac565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190614514565b611235565b005b34801561066557600080fd5b5061066e61133a565b60405161067b91906143ac565b60405180910390f35b34801561069057600080fd5b50610699611340565b6040516106a691906142db565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906142f6565b611353565b6040516106e391906143ac565b60405180910390f35b3480156106f857600080fd5b5061070161139b565b005b34801561070f57600080fd5b506107186114f3565b60405161072591906142db565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614473565b6115ae565b005b34801561076357600080fd5b5061076c6116a0565b60405161077991906143ac565b60405180910390f35b34801561078e57600080fd5b506107976116a6565b005b3480156107a557600080fd5b506107ae61177c565b6040516107bb91906144f9565b60405180910390f35b3480156107d057600080fd5b506107eb60048036038101906107e69190614554565b6117a6565b005b3480156107f957600080fd5b5061080261185a565b60405161080f91906141c5565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190614473565b6118ec565b005b34801561084d57600080fd5b50610856611a1f565b60405161086391906143ac565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614554565b611a25565b005b3480156108a157600080fd5b506108bc60048036038101906108b79190614280565b611ad9565b6040516108c991906142db565b60405180910390f35b3480156108de57600080fd5b506108e7611ba6565b6040516108f491906142db565b60405180910390f35b34801561090957600080fd5b50610912611bb9565b60405161091f91906143ac565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a9190614280565b611bbf565b60405161095c91906142db565b60405180910390f35b34801561097157600080fd5b5061097a611bdd565b60405161098791906143ac565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b291906142f6565b611be3565b6040516109c491906142db565b60405180910390f35b3480156109d957600080fd5b506109e2611c03565b6040516109ef91906142db565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a91906142f6565b611c16565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190614473565b611d6d565b005b348015610a5657600080fd5b50610a716004803603810190610a6c91906143c7565b611ead565b005b348015610a7f57600080fd5b50610a88611fd7565b604051610a9591906142db565b60405180910390f35b348015610aaa57600080fd5b50610ab3611fea565b604051610ac091906143ac565b60405180910390f35b348015610ad557600080fd5b50610af06004803603810190610aeb91906143c7565b611ff0565b604051610afd91906142db565b60405180910390f35b348015610b1257600080fd5b50610b1b612160565b604051610b2891906143ac565b60405180910390f35b348015610b3d57600080fd5b50610b586004803603810190610b539190614581565b612166565b604051610b6591906143ac565b60405180910390f35b348015610b7a57600080fd5b50610b836121ed565b604051610b9091906143ac565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb91906145c1565b6121f3565b005b348015610bce57600080fd5b50610bd7612308565b604051610be491906142db565b60405180910390f35b348015610bf957600080fd5b50610c026123c3565b604051610c0f91906143ac565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a91906142f6565b6123c9565b005b348015610c4d57600080fd5b50610c5661258f565b604051610c6391906143ac565b60405180910390f35b348015610c7857600080fd5b50610c81612595565b604051610c8e91906143ac565b60405180910390f35b606060038054610ca690614657565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd290614657565b8015610d1f5780601f10610cf457610100808354040283529160200191610d1f565b820191906000526020600020905b815481529060010190602001808311610d0257829003601f168201915b5050505050905090565b6000610d3d610d366125f9565b8484612601565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60185481565b60165481565b610da96125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f906146d4565b60405180910390fd5b670de0b6b3a76400006103e86001610e4e610d8b565b610e589190614723565b610e6291906147ac565b610e6c91906147ac565b811015610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea59061484f565b60405180910390fd5b670de0b6b3a764000081610ec29190614723565b60078190555050565b6000610ed88484846127ca565b610f9984610ee46125f9565b610f948560405180606001604052806028815260200161569760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f4a6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b612601565b600190509392505050565b610fac6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611032906146d4565b60405180910390fd5b6028601a5461104a919061486f565b431061108b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108290614911565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006111986110fc6125f9565b84611193856001600061110d6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b612601565b6001905092915050565b7f000000000000000000000000d4549d6a814f3b080ec98abb400301ba812a6f8f81565b600a60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b61123d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c3906146d4565b60405180910390fd5b81601081905550806011819055506011546010546112ea919061486f565b600f819055506014600f541115611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d9061497d565b60405180910390fd5b5050565b60125481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113a36125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906146d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114fd6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611583906146d4565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b6115b66125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c906146d4565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b6116ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611734906146d4565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906146d4565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461186990614657565b80601f016020809104026020016040519081016040528092919081815260200182805461189590614657565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b6118f46125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a906146d4565b60405180910390fd5b7f000000000000000000000000d4549d6a814f3b080ec98abb400301ba812a6f8f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614a0f565b60405180910390fd5b611a1b8282613712565b5050565b60195481565b611a2d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab3906146d4565b60405180910390fd5b80600a60036101000a81548160ff02191690831515021790555050565b6000611b9c611ae66125f9565b84611b97856040518060600160405280602581526020016156bf6025913960016000611b106125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b612601565b6001905092915050565b600a60039054906101000a900460ff1681565b60105481565b6000611bd3611bcc6125f9565b84846127ca565b6001905092915050565b60175481565b601d6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611c1e6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca4906146d4565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbdcddef9ef45c223fdd883851191fd9fa95aa9b793f97f720258493ceed93d7560405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d756125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfb906146d4565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ea191906142db565b60405180910390a25050565b611eb56125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b906146d4565b60405180910390fd5b670de0b6b3a76400006103e86005611f5a610d8b565b611f649190614723565b611f6e91906147ac565b611f7891906147ac565b811015611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190614aa1565b60405180910390fd5b670de0b6b3a764000081611fce9190614723565b60098190555050565b600e60009054906101000a900460ff1681565b60075481565b6000611ffa6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612089576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612080906146d4565b60405180910390fd5b620186a06001612097610d8b565b6120a19190614723565b6120ab91906147ac565b8210156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614b33565b60405180910390fd5b6103e860056120fa610d8b565b6121049190614723565b61210e91906147ac565b821115612150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214790614bc5565b60405180910390fd5b8160088190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6121fb6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461228a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612281906146d4565b60405180910390fd5b836013819055508260148190555081601581905550806016819055506014546013546122b6919061486f565b60128190555060146012541115612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f99061497d565b60405180910390fd5b50505050565b60006123126125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612398906146d4565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6123d16125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612460576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612457906146d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690614c57565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60095481565b60008082846125aa919061486f565b9050838110156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614cc3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790614d55565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614de7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127bd91906143ac565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090614e79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f90614f0b565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561294c5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61298b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298290614f9d565b60405180910390fd5b600081036129a45761299f838360006137b3565b6136a9565b600a60009054906101000a900460ff1615613067576129c161177c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a2f57506129ff61177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a685750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612abb5750600560149054906101000a900460ff16155b1561306657600a60019054906101000a900460ff16612bb557601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b755750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab90615009565b60405180910390fd5b5b600e60009054906101000a900460ff1615612d7d57612bd261177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c5957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb157507f000000000000000000000000d4549d6a814f3b080ec98abb400301ba812a6f8f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d7c5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e906150c1565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e205750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec757600754811115612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6190615153565b60405180910390fd5b600954612e7683611353565b82612e81919061486f565b1115612ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb9906151bf565b60405180910390fd5b613065565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6a5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fb957600754811115612fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fab90615251565b60405180910390fd5b613064565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130635760095461301683611353565b82613021919061486f565b1115613062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613059906151bf565b60405180910390fd5b5b5b5b5b5b60007f000000000000000000000000d4549d6a814f3b080ec98abb400301ba812a6f8f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156130d45750600a60039054906101000a900460ff165b156131a9576000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561317657504262015180600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613173919061486f565b10155b156131a45760155460148190555060165460138190555060145460135461319d919061486f565b6012819055505b613236565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036132355742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600061324130611353565b9050600060085482101590508080156132665750600a60029054906101000a900460ff165b801561327f5750600560149054906101000a900460ff16155b80156132d55750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561332b5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133815750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133c5576001600560146101000a81548160ff0219169083151502179055506133a9613a46565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061347b5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561348557600090505b6000811561369857601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134e857506000601254115b1561358257613515606461350760125489613c9f90919063ffffffff16565b613d1990919063ffffffff16565b9050601254601454826135289190614723565b61353291906147ac565b60186000828254613543919061486f565b925050819055506012546013548261355b9190614723565b61356591906147ac565b60176000828254613576919061486f565b92505081905550613674565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135dd57506000600f54115b156136735761360a60646135fc600f5489613c9f90919063ffffffff16565b613d1990919063ffffffff16565b9050600f546011548261361d9190614723565b61362791906147ac565b60186000828254613638919061486f565b92505081905550600f54601054826136509190614723565b61365a91906147ac565b6017600082825461366b919061486f565b925050819055505b5b6000811115613689576136888830836137b3565b5b80866136959190615271565b95505b6136a38888886137b3565b50505050505b505050565b60008383111582906136f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ed91906141c5565b60405180910390fd5b50600083856137059190615271565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381990614e79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388890614f0b565b60405180910390fd5b61389c838383613d63565b61390781604051806060016040528060268152602001615671602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a3991906143ac565b60405180910390a3505050565b6000613a5130611353565b90506000601954601754601854613a68919061486f565b613a72919061486f565b9050600080831480613a845750600082145b15613a9157505050613c9d565b6014600854613aa09190614723565b831115613ab9576014600854613ab69190614723565b92505b600060028360185486613acc9190614723565b613ad691906147ac565b613ae091906147ac565b90506000613af78286613d6890919063ffffffff16565b90506000479050613b0782613db2565b6000613b1c8247613d6890919063ffffffff16565b90506000613b4787613b3960175485613c9f90919063ffffffff16565b613d1990919063ffffffff16565b90506000613b7288613b6460195486613c9f90919063ffffffff16565b613d1990919063ffffffff16565b90506000818385613b839190615271565b613b8d9190615271565b9050600060188190555060006017819055506000601981905550600087118015613bb75750600081115b15613c0457613bc68782613fef565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613bfb939291906152a5565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c4a9061530d565b60006040518083038185875af1925050503d8060008114613c87576040519150601f19603f3d011682016040523d82523d6000602084013e613c8c565b606091505b505080985050505050505050505050505b565b6000808303613cb15760009050613d13565b60008284613cbf9190614723565b9050828482613cce91906147ac565b14613d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0590615394565b60405180910390fd5b809150505b92915050565b6000613d5b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140c9565b905092915050565b505050565b6000613daa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136ae565b905092915050565b6000600267ffffffffffffffff811115613dcf57613dce6153b4565b5b604051908082528060200260200182016040528015613dfd5781602001602082028036833780820191505090505b5090503081600081518110613e1557613e146153e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ede9190615427565b81600181518110613ef257613ef16153e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f57307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612601565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fb995949392919061554d565b600060405180830381600087803b158015613fd357600080fd5b505af1158015613fe7573d6000803e3d6000fd5b505050505050565b61401a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612601565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161407f969594939291906155a7565b60606040518083038185885af115801561409d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140c2919061561d565b5050505050565b60008083118290614110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410791906141c5565b60405180910390fd5b506000838561411f91906147ac565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561416657808201518184015260208101905061414b565b83811115614175576000848401525b50505050565b6000601f19601f8301169050919050565b60006141978261412c565b6141a18185614137565b93506141b1818560208601614148565b6141ba8161417b565b840191505092915050565b600060208201905081810360008301526141df818461418c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614217826141ec565b9050919050565b6142278161420c565b811461423257600080fd5b50565b6000813590506142448161421e565b92915050565b6000819050919050565b61425d8161424a565b811461426857600080fd5b50565b60008135905061427a81614254565b92915050565b60008060408385031215614297576142966141e7565b5b60006142a585828601614235565b92505060206142b68582860161426b565b9150509250929050565b60008115159050919050565b6142d5816142c0565b82525050565b60006020820190506142f060008301846142cc565b92915050565b60006020828403121561430c5761430b6141e7565b5b600061431a84828501614235565b91505092915050565b6000819050919050565b600061434861434361433e846141ec565b614323565b6141ec565b9050919050565b600061435a8261432d565b9050919050565b600061436c8261434f565b9050919050565b61437c81614361565b82525050565b60006020820190506143976000830184614373565b92915050565b6143a68161424a565b82525050565b60006020820190506143c1600083018461439d565b92915050565b6000602082840312156143dd576143dc6141e7565b5b60006143eb8482850161426b565b91505092915050565b60008060006060848603121561440d5761440c6141e7565b5b600061441b86828701614235565b935050602061442c86828701614235565b925050604061443d8682870161426b565b9150509250925092565b614450816142c0565b811461445b57600080fd5b50565b60008135905061446d81614447565b92915050565b6000806040838503121561448a576144896141e7565b5b600061449885828601614235565b92505060206144a98582860161445e565b9150509250929050565b600060ff82169050919050565b6144c9816144b3565b82525050565b60006020820190506144e460008301846144c0565b92915050565b6144f38161420c565b82525050565b600060208201905061450e60008301846144ea565b92915050565b6000806040838503121561452b5761452a6141e7565b5b60006145398582860161426b565b925050602061454a8582860161426b565b9150509250929050565b60006020828403121561456a576145696141e7565b5b60006145788482850161445e565b91505092915050565b60008060408385031215614598576145976141e7565b5b60006145a685828601614235565b92505060206145b785828601614235565b9150509250929050565b600080600080608085870312156145db576145da6141e7565b5b60006145e98782880161426b565b94505060206145fa8782880161426b565b935050604061460b8782880161426b565b925050606061461c8782880161426b565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061466f57607f821691505b60208210810361468257614681614628565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146be602083614137565b91506146c982614688565b602082019050919050565b600060208201905081810360008301526146ed816146b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061472e8261424a565b91506147398361424a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614772576147716146f4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147b78261424a565b91506147c28361424a565b9250826147d2576147d161477d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614839602f83614137565b9150614844826147dd565b604082019050919050565b600060208201905081810360008301526148688161482c565b9050919050565b600061487a8261424a565b91506148858361424a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ba576148b96146f4565b5b828201905092915050565b7f57616974656420746f6f206c6f6e6720746f20626c61636b6c69737400000000600082015250565b60006148fb601c83614137565b9150614906826148c5565b602082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614967601d83614137565b915061497282614931565b602082019050919050565b600060208201905081810360008301526149968161495a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149f9603983614137565b9150614a048261499d565b604082019050919050565b60006020820190508181036000830152614a28816149ec565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a8b602483614137565b9150614a9682614a2f565b604082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b1d603583614137565b9150614b2882614ac1565b604082019050919050565b60006020820190508181036000830152614b4c81614b10565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614baf603483614137565b9150614bba82614b53565b604082019050919050565b60006020820190508181036000830152614bde81614ba2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c41602683614137565b9150614c4c82614be5565b604082019050919050565b60006020820190508181036000830152614c7081614c34565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cad601b83614137565b9150614cb882614c77565b602082019050919050565b60006020820190508181036000830152614cdc81614ca0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d3f602483614137565b9150614d4a82614ce3565b604082019050919050565b60006020820190508181036000830152614d6e81614d32565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dd1602283614137565b9150614ddc82614d75565b604082019050919050565b60006020820190508181036000830152614e0081614dc4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e63602583614137565b9150614e6e82614e07565b604082019050919050565b60006020820190508181036000830152614e9281614e56565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ef5602383614137565b9150614f0082614e99565b604082019050919050565b60006020820190508181036000830152614f2481614ee8565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614f87603183614137565b9150614f9282614f2b565b604082019050919050565b60006020820190508181036000830152614fb681614f7a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ff3601683614137565b9150614ffe82614fbd565b602082019050919050565b6000602082019050818103600083015261502281614fe6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150ab604983614137565b91506150b682615029565b606082019050919050565b600060208201905081810360008301526150da8161509e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061513d603583614137565b9150615148826150e1565b604082019050919050565b6000602082019050818103600083015261516c81615130565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151a9601383614137565b91506151b482615173565b602082019050919050565b600060208201905081810360008301526151d88161519c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061523b603683614137565b9150615246826151df565b604082019050919050565b6000602082019050818103600083015261526a8161522e565b9050919050565b600061527c8261424a565b91506152878361424a565b92508282101561529a576152996146f4565b5b828203905092915050565b60006060820190506152ba600083018661439d565b6152c7602083018561439d565b6152d4604083018461439d565b949350505050565b600081905092915050565b50565b60006152f76000836152dc565b9150615302826152e7565b600082019050919050565b6000615318826152ea565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061537e602183614137565b915061538982615322565b604082019050919050565b600060208201905081810360008301526153ad81615371565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154218161421e565b92915050565b60006020828403121561543d5761543c6141e7565b5b600061544b84828501615412565b91505092915050565b6000819050919050565b600061547961547461546f84615454565b614323565b61424a565b9050919050565b6154898161545e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154c48161420c565b82525050565b60006154d683836154bb565b60208301905092915050565b6000602082019050919050565b60006154fa8261548f565b615504818561549a565b935061550f836154ab565b8060005b8381101561554057815161552788826154ca565b9750615532836154e2565b925050600181019050615513565b5085935050505092915050565b600060a082019050615562600083018861439d565b61556f6020830187615480565b818103604083015261558181866154ef565b905061559060608301856144ea565b61559d608083018461439d565b9695505050505050565b600060c0820190506155bc60008301896144ea565b6155c9602083018861439d565b6155d66040830187615480565b6155e36060830186615480565b6155f060808301856144ea565b6155fd60a083018461439d565b979650505050505050565b60008151905061561781614254565b92915050565b600080600060608486031215615636576156356141e7565b5b600061564486828701615608565b935050602061565586828701615608565b925050604061566686828701615608565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d4ea0ed2f1451ce329859f20702abd10cc49b0ed744550a6e9cf9b9962e246dd64736f6c634300080d0033
Deployed Bytecode Sourcemap
28945:16028:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7043:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9217:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30503:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29025:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8166:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30217:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30137;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34861:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9869:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36660:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8007:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10634:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29083:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29316:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37540:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30094:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35679:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29983:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29396:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8338:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21545:148;;;;;;;;;;;;;:::i;:::-;;33967:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35328:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30018:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33766:148;;;;;;;;;;;;;:::i;:::-;;20901:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35569:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7263:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36886:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30257:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34292:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11356:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29434:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29909:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8679:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30180:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30726:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29356:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37338:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36469:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35104:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29826:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29200:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34466:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29875:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8918:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29242:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35986:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34149:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29943:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21849:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30053:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29282:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7043:100;7097:13;7130:5;7123:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7043:100;:::o;9217:169::-;9300:4;9317:39;9326:12;:10;:12::i;:::-;9340:7;9349:6;9317:8;:39::i;:::-;9374:4;9367:11;;9217:169;;;;:::o;30503:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29025:51::-;;;:::o;8166:108::-;8227:7;8254:12;;8247:19;;8166:108;:::o;30217:33::-;;;;:::o;30137:::-;;;;:::o;34861:234::-;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34980:4:::1;34974;34970:1;34954:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34953:31;;;;:::i;:::-;34943:6;:41;;34935:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35080:6;35070;:17;;;;:::i;:::-;35047:20;:40;;;;34861:234:::0;:::o;9869:355::-;10009:4;10026:36;10036:6;10044:9;10055:6;10026:9;:36::i;:::-;10073:121;10082:6;10090:12;:10;:12::i;:::-;10104:89;10142:6;10104:89;;;;;;;;;;;;;;;;;:11;:19;10116:6;10104:19;;;;;;;;;;;;;;;:33;10124:12;:10;:12::i;:::-;10104:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10073:8;:121::i;:::-;10212:4;10205:11;;9869:355;;;;;:::o;36660:217::-;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36788:2:::1;36775:10;;:15;;;;:::i;:::-;36760:12;:30;36752:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36856:13;36834:10;:19;36845:7;36834:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;36660:217:::0;;:::o;8007:93::-;8065:5;8090:2;8083:9;;8007:93;:::o;10634:218::-;10722:4;10739:83;10748:12;:10;:12::i;:::-;10762:7;10771:50;10810:10;10771:11;:25;10783:12;:10;:12::i;:::-;10771:25;;;;;;;;;;;;;;;:34;10797:7;10771:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10739:8;:83::i;:::-;10840:4;10833:11;;10634:218;;;;:::o;29083:38::-;;;:::o;29316:33::-;;;;;;;;;;;;;:::o;37540:125::-;37605:4;37629:19;:28;37649:7;37629:28;;;;;;;;;;;;;;;;;;;;;;;;;37622:35;;37540:125;;;:::o;30094:36::-;;;;:::o;35679:298::-;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35790:10:::1;35775:12;:25;;;;35829:13;35811:15;:31;;;;35883:15;;35868:12;;:30;;;;:::i;:::-;35853:12;:45;;;;35933:2;35917:12;;:18;;35909:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35679:298:::0;;:::o;29983:28::-;;;;:::o;29396:31::-;;;;;;;;;;;;;:::o;8338:127::-;8412:7;8439:9;:18;8449:7;8439:18;;;;;;;;;;;;;;;;8432:25;;8338:127;;;:::o;21545:148::-;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21652:1:::1;21615:40;;21636:6;;;;;;;;;;;21615:40;;;;;;;;;;;;21683:1;21666:6;;:19;;;;;;;;;;;;;;;;;;21545:148::o:0;33967:120::-;34019:4;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34052:5:::1;34035:14;;:22;;;;;;;;;;;;;;;;;;34075:4;34068:11;;33967:120:::0;:::o;35328:144::-;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35460:4:::1;35418:31;:39;35450:6;35418:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35328:144:::0;;:::o;30018:28::-;;;;:::o;33766:148::-;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33837:4:::1;33821:13;;:20;;;;;;;;;;;;;;;;;;33866:4;33852:11;;:18;;;;;;;;;;;;;;;;;;33894:12;33881:10;:25;;;;33766:148::o:0;20901:79::-;20939:7;20966:6;;;;;;;;;;;20959:13;;20901:79;:::o;35569:101::-;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35655:7:::1;35641:11;;:21;;;;;;;;;;;;;;;;;;35569:101:::0;:::o;7263:104::-;7319:13;7352:7;7345:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7263:104;:::o;36886:245::-;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36993:13:::1;36985:21;;:4;:21;;::::0;36977:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37082:41;37111:4;37117:5;37082:28;:41::i;:::-;36886:245:::0;;:::o;30257:27::-;;;;:::o;34292:102::-;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34381:5:::1;34360:18;;:26;;;;;;;;;;;;;;;;;;34292:102:::0;:::o;11356:269::-;11449:4;11466:129;11475:12;:10;:12::i;:::-;11489:7;11498:96;11537:15;11498:96;;;;;;;;;;;;;;;;;:11;:25;11510:12;:10;:12::i;:::-;11498:25;;;;;;;;;;;;;;;:34;11524:7;11498:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11466:8;:129::i;:::-;11613:4;11606:11;;11356:269;;;;:::o;29434:37::-;;;;;;;;;;;;;:::o;29909:27::-;;;;:::o;8679:175::-;8765:4;8782:42;8792:12;:10;:12::i;:::-;8806:9;8817:6;8782:9;:42::i;:::-;8842:4;8835:11;;8679:175;;;;:::o;30180:30::-;;;;:::o;30726:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29356:33::-;;;;;;;;;;;;;:::o;37338:187::-;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37463:12:::1;;;;;;;;;;;37426:50;;37446:15;37426:50;;;;;;;;;;;;37502:15;37487:12;;:30;;;;;;;;;;;;;;;;;;37338:187:::0;:::o;36469:182::-;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36585:8:::1;36554:19;:28;36574:7;36554:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36625:7;36609:34;;;36634:8;36609:34;;;;;;:::i;:::-;;;;;;;;36469:182:::0;;:::o;35104:215::-;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35226:4:::1;35220;35216:1;35200:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35199:31;;;;:::i;:::-;35189:6;:41;;35181:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35304:6;35294;:17;;;;:::i;:::-;35282:9;:29;;;;35104:215:::0;:::o;29826:39::-;;;;;;;;;;;;;:::o;29200:35::-;;;;:::o;34466:386::-;34547:4;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34604:6:::1;34600:1;34584:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34571:9;:39;;34563:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34720:4;34716:1;34700:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34687:9;:37;;34679:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34813:9;34792:18;:30;;;;34840:4;34833:11;;34466:386:::0;;;:::o;29875:27::-;;;;:::o;8918:151::-;9007:7;9034:11;:18;9046:5;9034:18;;;;;;;;;;;;;;;:27;9053:7;9034:27;;;;;;;;;;;;;;;;9027:34;;8918:151;;;;:::o;29242:33::-;;;;:::o;35986:474::-;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36160:10:::1;36144:13;:26;;;;36200:13;36181:16;:32;;;;36248:22;36224:21;:46;;;;36302:19;36281:18;:40;;;;36364:16;;36348:13;;:32;;;;:::i;:::-;36332:13;:48;;;;36416:2;36399:13;;:19;;36391:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35986:474:::0;;;;:::o;34149:134::-;34209:4;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34248:5:::1;34225:20;;:28;;;;;;;;;;;;;;;;;;34271:4;34264:11;;34149:134:::0;:::o;29943:30::-;;;;:::o;21849:244::-;21124:12;:10;:12::i;:::-;21114:22;;:6;;;;;;;;;;;:22;;;21106:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21958:1:::1;21938:22;;:8;:22;;::::0;21930:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22048:8;22019:38;;22040:6;;;;;;;;;;;22019:38;;;;;;;;;;;;22077:8;22068:6;;:17;;;;;;;;;;;;;;;;;;21849:244:::0;:::o;30053:31::-;;;;:::o;29282:24::-;;;;:::o;15933:182::-;15991:7;16011:9;16027:1;16023;:5;;;;:::i;:::-;16011:17;;16052:1;16047;:6;;16039:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16106:1;16099:8;;;15933:182;;;;:::o;247:98::-;300:7;327:10;320:17;;247:98;:::o;14552:381::-;14705:1;14688:19;;:5;:19;;;14680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14786:1;14767:21;;:7;:21;;;14759:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14871:6;14841:11;:18;14853:5;14841:18;;;;;;;;;;;;;;;:27;14860:7;14841:27;;;;;;;;;;;;;;;:36;;;;14909:7;14893:32;;14902:5;14893:32;;;14918:6;14893:32;;;;;;:::i;:::-;;;;;;;;14552:381;;;:::o;37725:4621::-;37873:1;37857:18;;:4;:18;;;37849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37950:1;37936:16;;:2;:16;;;37928:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38012:10;:14;38023:2;38012:14;;;;;;;;;;;;;;;;;;;;;;;;;38011:15;:36;;;;;38031:10;:16;38042:4;38031:16;;;;;;;;;;;;;;;;;;;;;;;;;38030:17;38011:36;38003:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38126:1;38116:6;:11;38113:92;;38144:28;38160:4;38166:2;38170:1;38144:15;:28::i;:::-;38187:7;;38113:92;38221:14;;;;;;;;;;;38218:1811;;;38281:7;:5;:7::i;:::-;38273:15;;:4;:15;;;;:49;;;;;38315:7;:5;:7::i;:::-;38309:13;;:2;:13;;;;38273:49;:86;;;;;38357:1;38343:16;;:2;:16;;;;38273:86;:128;;;;;38394:6;38380:21;;:2;:21;;;;38273:128;:158;;;;;38423:8;;;;;;;;;;;38422:9;38273:158;38251:1767;;;38469:13;;;;;;;;;;;38465:148;;38514:19;:25;38534:4;38514:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38543:19;:23;38563:2;38543:23;;;;;;;;;;;;;;;;;;;;;;;;;38514:52;38506:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38465:148;38772:20;;;;;;;;;;;38768:423;;;38826:7;:5;:7::i;:::-;38820:13;;:2;:13;;;;:47;;;;;38851:15;38837:30;;:2;:30;;;;38820:47;:79;;;;;38885:13;38871:28;;:2;:28;;;;38820:79;38816:356;;;38977:12;38935:28;:39;38964:9;38935:39;;;;;;;;;;;;;;;;:54;38927:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39136:12;39094:28;:39;39123:9;39094:39;;;;;;;;;;;;;;;:54;;;;38816:356;38768:423;39244:25;:31;39270:4;39244:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39280:31;:35;39312:2;39280:35;;;;;;;;;;;;;;;;;;;;;;;;;39279:36;39244:71;39240:763;;;39362:20;;39352:6;:30;;39344:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39501:9;;39484:13;39494:2;39484:9;:13::i;:::-;39475:6;:22;;;;:::i;:::-;:35;;39467:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39240:763;;;39613:25;:29;39639:2;39613:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39647:31;:37;39679:4;39647:37;;;;;;;;;;;;;;;;;;;;;;;;;39646:38;39613:71;39609:394;;;39731:20;;39721:6;:30;;39713:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39609:394;;;39857:31;:35;39889:2;39857:35;;;;;;;;;;;;;;;;;;;;;;;;;39853:150;;39950:9;;39933:13;39943:2;39933:9;:13::i;:::-;39924:6;:22;;;;:::i;:::-;:35;;39916:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39853:150;39609:394;39240:763;38251:1767;38218:1811;40071:10;40092:13;40084:21;;:4;:21;;;40071:34;;40121:5;40120:6;:28;;;;;40130:18;;;;;;;;;;;40120:28;40116:535;;;40203:1;40169:24;:30;40194:4;40169:30;;;;;;;;;;;;;;;;:35;;:120;;;;;40273:15;40260:8;40226:24;:30;40251:4;40226:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;40169:120;40165:322;;;40330:21;;40311:16;:40;;;;40386:18;;40370:13;:34;;;;40455:16;;40439:13;;:32;;;;:::i;:::-;40423:13;:48;;;;40165:322;40116:535;;;40556:1;40524:24;:28;40549:2;40524:28;;;;;;;;;;;;;;;;:33;40520:120;;40609:15;40578:24;:28;40603:2;40578:28;;;;;;;;;;;;;;;:46;;;;40520:120;40116:535;40664:28;40695:24;40713:4;40695:9;:24::i;:::-;40664:55;;40733:12;40772:18;;40748:20;:42;;40733:57;;40822:7;:35;;;;;40846:11;;;;;;;;;;;40822:35;:61;;;;;40875:8;;;;;;;;;;;40874:9;40822:61;:110;;;;;40901:25;:31;40927:4;40901:31;;;;;;;;;;;;;;;;;;;;;;;;;40900:32;40822:110;:153;;;;;40950:19;:25;40970:4;40950:25;;;;;;;;;;;;;;;;;;;;;;;;;40949:26;40822:153;:194;;;;;40993:19;:23;41013:2;40993:23;;;;;;;;;;;;;;;;;;;;;;;;;40992:24;40822:194;40804:328;;;41054:4;41043:8;;:15;;;;;;;;;;;;;;;;;;41076:10;:8;:10::i;:::-;41115:5;41104:8;;:16;;;;;;;;;;;;;;;;;;40804:328;41145:12;41161:8;;;;;;;;;;;41160:9;41145:24;;41271:19;:25;41291:4;41271:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41300:19;:23;41320:2;41300:23;;;;;;;;;;;;;;;;;;;;;;;;;41271:52;41268:99;;;41350:5;41340:15;;41268:99;41380:12;41484:7;41481:811;;;41535:25;:29;41561:2;41535:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41584:1;41568:13;;:17;41535:50;41531:608;;;41612:34;41642:3;41612:25;41623:13;;41612:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41605:41;;41713:13;;41694:16;;41687:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41665:18;;:61;;;;;;;:::i;:::-;;;;;;;;41787:13;;41771;;41764:4;:20;;;;:::i;:::-;:36;;;;:::i;:::-;41745:15;;:55;;;;;;;:::i;:::-;;;;;;;;41531:608;;;41861:25;:31;41887:4;41861:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41911:1;41896:12;;:16;41861:51;41858:281;;;41940:33;41969:3;41940:24;41951:12;;41940:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41933:40;;42039:12;;42021:15;;42014:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41992:18;;:59;;;;;;;:::i;:::-;;;;;;;;42111:12;;42096;;42089:4;:19;;;;:::i;:::-;:34;;;;:::i;:::-;42070:15;;:53;;;;;;;:::i;:::-;;;;;;;;41858:281;41531:608;42166:1;42159:4;:8;42156:93;;;42191:42;42207:4;42221;42228;42191:15;:42::i;:::-;42156:93;42276:4;42266:14;;;;;:::i;:::-;;;41481:811;42305:33;42321:4;42327:2;42331:6;42305:15;:33::i;:::-;37838:4508;;;;;37725:4621;;;;:::o;16839:193::-;16925:7;16958:1;16953;:6;;16961:12;16945:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16985:9;17001:1;16997;:5;;;;:::i;:::-;16985:17;;17023:1;17016:8;;;16839:193;;;;;:::o;37140:189::-;37257:5;37223:25;:31;37249:4;37223:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37315:5;37281:40;;37309:4;37281:40;;;;;;;;;;;;37140:189;;:::o;12116:575::-;12274:1;12256:20;;:6;:20;;;12248:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12358:1;12337:23;;:9;:23;;;12329:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12414:47;12435:6;12443:9;12454:6;12414:20;:47::i;:::-;12495:71;12517:6;12495:71;;;;;;;;;;;;;;;;;:9;:17;12505:6;12495:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12475:9;:17;12485:6;12475:17;;;;;;;;;;;;;;;:91;;;;12600:32;12625:6;12600:9;:20;12610:9;12600:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12577:9;:20;12587:9;12577:20;;;;;;;;;;;;;;;:55;;;;12665:9;12648:35;;12657:6;12648:35;;;12676:6;12648:35;;;;;;:::i;:::-;;;;;;;;12116:575;;;:::o;43490:1478::-;43529:23;43555:24;43573:4;43555:9;:24::i;:::-;43529:50;;43590:25;43657:12;;43639:15;;43618:18;;:36;;;;:::i;:::-;:51;;;;:::i;:::-;43590:79;;43680:12;43728:1;43709:15;:20;:46;;;;43754:1;43733:17;:22;43709:46;43706:60;;;43758:7;;;;;43706:60;43821:2;43800:18;;:23;;;;:::i;:::-;43782:15;:41;43779:111;;;43876:2;43855:18;;:23;;;;:::i;:::-;43837:41;;43779:111;43952:23;44037:1;44017:17;43996:18;;43978:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43952:86;;44049:26;44078:36;44098:15;44078;:19;;:36;;;;:::i;:::-;44049:65;;44128:25;44156:21;44128:49;;44191:36;44208:18;44191:16;:36::i;:::-;44242:18;44263:44;44289:17;44263:21;:25;;:44;;;;:::i;:::-;44242:65;;44321:20;44344:54;44380:17;44344:31;44359:15;;44344:10;:14;;:31;;;;:::i;:::-;:35;;:54;;;;:::i;:::-;44321:77;;44409:17;44429:51;44462:17;44429:28;44444:12;;44429:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44409:71;;44491:23;44545:9;44530:12;44517:10;:25;;;;:::i;:::-;:37;;;;:::i;:::-;44491:63;;44592:1;44571:18;:22;;;;44622:1;44604:15;:19;;;;44649:1;44634:12;:16;;;;44685:1;44667:15;:19;:42;;;;;44708:1;44690:15;:19;44667:42;44664:210;;;44725:46;44738:15;44755;44725:12;:46::i;:::-;44791:71;44806:18;44826:15;44843:18;;44791:71;;;;;;;;:::i;:::-;;;;;;;;44664:210;44908:12;;;;;;;;;;;44900:26;;44934:21;44900:60;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44887:73;;;;;43518:1450;;;;;;;;;;43490:1478;:::o;17292:473::-;17350:7;17600:1;17595;:6;17591:47;;17625:1;17618:8;;;;17591:47;17651:9;17667:1;17663;:5;;;;:::i;:::-;17651:17;;17696:1;17691;17687;:5;;;;:::i;:::-;:10;17679:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17756:1;17749:8;;;17292:473;;;;;:::o;18242:132::-;18300:7;18327:39;18331:1;18334;18327:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18320:46;;18242:132;;;;:::o;15537:125::-;;;;:::o;16399:136::-;16457:7;16484:43;16488:1;16491;16484:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16477:50;;16399:136;;;;:::o;42355:597::-;42484:21;42522:1;42508:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42484:40;;42553:4;42535;42540:1;42535:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42579:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42569:4;42574:1;42569:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42615:62;42632:4;42647:15;42665:11;42615:8;:62::i;:::-;42717:15;:66;;;42798:11;42824:1;42868:4;42895;42915:15;42717:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42410:542;42355:597;:::o;42961:520::-;43109:62;43126:4;43141:15;43159:11;43109:8;:62::i;:::-;43215:15;:31;;;43254:9;43287:4;43307:11;43333:1;43376;43427:4;43447:15;43215:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42961:520;;:::o;18871:279::-;18957:7;18989:1;18985;:5;18992:12;18977:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19016:9;19032:1;19028;:5;;;;:::i;:::-;19016:17;;19141:1;19134:8;;;18871:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:116::-;6189:21;6204:5;6189:21;:::i;:::-;6182:5;6179:32;6169:60;;6225:1;6222;6215:12;6169:60;6119:116;:::o;6241:133::-;6284:5;6322:6;6309:20;6300:29;;6338:30;6362:5;6338:30;:::i;:::-;6241:133;;;;:::o;6380:468::-;6445:6;6453;6502:2;6490:9;6481:7;6477:23;6473:32;6470:119;;;6508:79;;:::i;:::-;6470:119;6628:1;6653:53;6698:7;6689:6;6678:9;6674:22;6653:53;:::i;:::-;6643:63;;6599:117;6755:2;6781:50;6823:7;6814:6;6803:9;6799:22;6781:50;:::i;:::-;6771:60;;6726:115;6380:468;;;;;:::o;6854:86::-;6889:7;6929:4;6922:5;6918:16;6907:27;;6854:86;;;:::o;6946:112::-;7029:22;7045:5;7029:22;:::i;:::-;7024:3;7017:35;6946:112;;:::o;7064:214::-;7153:4;7191:2;7180:9;7176:18;7168:26;;7204:67;7268:1;7257:9;7253:17;7244:6;7204:67;:::i;:::-;7064:214;;;;:::o;7284:118::-;7371:24;7389:5;7371:24;:::i;:::-;7366:3;7359:37;7284:118;;:::o;7408:222::-;7501:4;7539:2;7528:9;7524:18;7516:26;;7552:71;7620:1;7609:9;7605:17;7596:6;7552:71;:::i;:::-;7408:222;;;;:::o;7636:474::-;7704:6;7712;7761:2;7749:9;7740:7;7736:23;7732:32;7729:119;;;7767:79;;:::i;:::-;7729:119;7887:1;7912:53;7957:7;7948:6;7937:9;7933:22;7912:53;:::i;:::-;7902:63;;7858:117;8014:2;8040:53;8085:7;8076:6;8065:9;8061:22;8040:53;:::i;:::-;8030:63;;7985:118;7636:474;;;;;:::o;8116:323::-;8172:6;8221:2;8209:9;8200:7;8196:23;8192:32;8189:119;;;8227:79;;:::i;:::-;8189:119;8347:1;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8318:114;8116:323;;;;:::o;8445:474::-;8513:6;8521;8570:2;8558:9;8549:7;8545:23;8541:32;8538:119;;;8576:79;;:::i;:::-;8538:119;8696:1;8721:53;8766:7;8757:6;8746:9;8742:22;8721:53;:::i;:::-;8711:63;;8667:117;8823:2;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8794:118;8445:474;;;;;:::o;8925:765::-;9011:6;9019;9027;9035;9084:3;9072:9;9063:7;9059:23;9055:33;9052:120;;;9091:79;;:::i;:::-;9052:120;9211:1;9236:53;9281:7;9272:6;9261:9;9257:22;9236:53;:::i;:::-;9226:63;;9182:117;9338:2;9364:53;9409:7;9400:6;9389:9;9385:22;9364:53;:::i;:::-;9354:63;;9309:118;9466:2;9492:53;9537:7;9528:6;9517:9;9513:22;9492:53;:::i;:::-;9482:63;;9437:118;9594:2;9620:53;9665:7;9656:6;9645:9;9641:22;9620:53;:::i;:::-;9610:63;;9565:118;8925:765;;;;;;;:::o;9696:180::-;9744:77;9741:1;9734:88;9841:4;9838:1;9831:15;9865:4;9862:1;9855:15;9882:320;9926:6;9963:1;9957:4;9953:12;9943:22;;10010:1;10004:4;10000:12;10031:18;10021:81;;10087:4;10079:6;10075:17;10065:27;;10021:81;10149:2;10141:6;10138:14;10118:18;10115:38;10112:84;;10168:18;;:::i;:::-;10112:84;9933:269;9882:320;;;:::o;10208:182::-;10348:34;10344:1;10336:6;10332:14;10325:58;10208:182;:::o;10396:366::-;10538:3;10559:67;10623:2;10618:3;10559:67;:::i;:::-;10552:74;;10635:93;10724:3;10635:93;:::i;:::-;10753:2;10748:3;10744:12;10737:19;;10396:366;;;:::o;10768:419::-;10934:4;10972:2;10961:9;10957:18;10949:26;;11021:9;11015:4;11011:20;11007:1;10996:9;10992:17;10985:47;11049:131;11175:4;11049:131;:::i;:::-;11041:139;;10768:419;;;:::o;11193:180::-;11241:77;11238:1;11231:88;11338:4;11335:1;11328:15;11362:4;11359:1;11352:15;11379:348;11419:7;11442:20;11460:1;11442:20;:::i;:::-;11437:25;;11476:20;11494:1;11476:20;:::i;:::-;11471:25;;11664:1;11596:66;11592:74;11589:1;11586:81;11581:1;11574:9;11567:17;11563:105;11560:131;;;11671:18;;:::i;:::-;11560:131;11719:1;11716;11712:9;11701:20;;11379:348;;;;:::o;11733:180::-;11781:77;11778:1;11771:88;11878:4;11875:1;11868:15;11902:4;11899:1;11892:15;11919:185;11959:1;11976:20;11994:1;11976:20;:::i;:::-;11971:25;;12010:20;12028:1;12010:20;:::i;:::-;12005:25;;12049:1;12039:35;;12054:18;;:::i;:::-;12039:35;12096:1;12093;12089:9;12084:14;;11919:185;;;;:::o;12110:234::-;12250:34;12246:1;12238:6;12234:14;12227:58;12319:17;12314:2;12306:6;12302:15;12295:42;12110:234;:::o;12350:366::-;12492:3;12513:67;12577:2;12572:3;12513:67;:::i;:::-;12506:74;;12589:93;12678:3;12589:93;:::i;:::-;12707:2;12702:3;12698:12;12691:19;;12350:366;;;:::o;12722:419::-;12888:4;12926:2;12915:9;12911:18;12903:26;;12975:9;12969:4;12965:20;12961:1;12950:9;12946:17;12939:47;13003:131;13129:4;13003:131;:::i;:::-;12995:139;;12722:419;;;:::o;13147:305::-;13187:3;13206:20;13224:1;13206:20;:::i;:::-;13201:25;;13240:20;13258:1;13240:20;:::i;:::-;13235:25;;13394:1;13326:66;13322:74;13319:1;13316:81;13313:107;;;13400:18;;:::i;:::-;13313:107;13444:1;13441;13437:9;13430:16;;13147:305;;;;:::o;13458:178::-;13598:30;13594:1;13586:6;13582:14;13575:54;13458:178;:::o;13642:366::-;13784:3;13805:67;13869:2;13864:3;13805:67;:::i;:::-;13798:74;;13881:93;13970:3;13881:93;:::i;:::-;13999:2;13994:3;13990:12;13983:19;;13642:366;;;:::o;14014:419::-;14180:4;14218:2;14207:9;14203:18;14195:26;;14267:9;14261:4;14257:20;14253:1;14242:9;14238:17;14231:47;14295:131;14421:4;14295:131;:::i;:::-;14287:139;;14014:419;;;:::o;14439:179::-;14579:31;14575:1;14567:6;14563:14;14556:55;14439:179;:::o;14624:366::-;14766:3;14787:67;14851:2;14846:3;14787:67;:::i;:::-;14780:74;;14863:93;14952:3;14863:93;:::i;:::-;14981:2;14976:3;14972:12;14965:19;;14624:366;;;:::o;14996:419::-;15162:4;15200:2;15189:9;15185:18;15177:26;;15249:9;15243:4;15239:20;15235:1;15224:9;15220:17;15213:47;15277:131;15403:4;15277:131;:::i;:::-;15269:139;;14996:419;;;:::o;15421:244::-;15561:34;15557:1;15549:6;15545:14;15538:58;15630:27;15625:2;15617:6;15613:15;15606:52;15421:244;:::o;15671:366::-;15813:3;15834:67;15898:2;15893:3;15834:67;:::i;:::-;15827:74;;15910:93;15999:3;15910:93;:::i;:::-;16028:2;16023:3;16019:12;16012:19;;15671:366;;;:::o;16043:419::-;16209:4;16247:2;16236:9;16232:18;16224:26;;16296:9;16290:4;16286:20;16282:1;16271:9;16267:17;16260:47;16324:131;16450:4;16324:131;:::i;:::-;16316:139;;16043:419;;;:::o;16468:223::-;16608:34;16604:1;16596:6;16592:14;16585:58;16677:6;16672:2;16664:6;16660:15;16653:31;16468:223;:::o;16697:366::-;16839:3;16860:67;16924:2;16919:3;16860:67;:::i;:::-;16853:74;;16936:93;17025:3;16936:93;:::i;:::-;17054:2;17049:3;17045:12;17038:19;;16697:366;;;:::o;17069:419::-;17235:4;17273:2;17262:9;17258:18;17250:26;;17322:9;17316:4;17312:20;17308:1;17297:9;17293:17;17286:47;17350:131;17476:4;17350:131;:::i;:::-;17342:139;;17069:419;;;:::o;17494:240::-;17634:34;17630:1;17622:6;17618:14;17611:58;17703:23;17698:2;17690:6;17686:15;17679:48;17494:240;:::o;17740:366::-;17882:3;17903:67;17967:2;17962:3;17903:67;:::i;:::-;17896:74;;17979:93;18068:3;17979:93;:::i;:::-;18097:2;18092:3;18088:12;18081:19;;17740:366;;;:::o;18112:419::-;18278:4;18316:2;18305:9;18301:18;18293:26;;18365:9;18359:4;18355:20;18351:1;18340:9;18336:17;18329:47;18393:131;18519:4;18393:131;:::i;:::-;18385:139;;18112:419;;;:::o;18537:239::-;18677:34;18673:1;18665:6;18661:14;18654:58;18746:22;18741:2;18733:6;18729:15;18722:47;18537:239;:::o;18782:366::-;18924:3;18945:67;19009:2;19004:3;18945:67;:::i;:::-;18938:74;;19021:93;19110:3;19021:93;:::i;:::-;19139:2;19134:3;19130:12;19123:19;;18782:366;;;:::o;19154:419::-;19320:4;19358:2;19347:9;19343:18;19335:26;;19407:9;19401:4;19397:20;19393:1;19382:9;19378:17;19371:47;19435:131;19561:4;19435:131;:::i;:::-;19427:139;;19154:419;;;:::o;19579:225::-;19719:34;19715:1;19707:6;19703:14;19696:58;19788:8;19783:2;19775:6;19771:15;19764:33;19579:225;:::o;19810:366::-;19952:3;19973:67;20037:2;20032:3;19973:67;:::i;:::-;19966:74;;20049:93;20138:3;20049:93;:::i;:::-;20167:2;20162:3;20158:12;20151:19;;19810:366;;;:::o;20182:419::-;20348:4;20386:2;20375:9;20371:18;20363:26;;20435:9;20429:4;20425:20;20421:1;20410:9;20406:17;20399:47;20463:131;20589:4;20463:131;:::i;:::-;20455:139;;20182:419;;;:::o;20607:177::-;20747:29;20743:1;20735:6;20731:14;20724:53;20607:177;:::o;20790:366::-;20932:3;20953:67;21017:2;21012:3;20953:67;:::i;:::-;20946:74;;21029:93;21118:3;21029:93;:::i;:::-;21147:2;21142:3;21138:12;21131:19;;20790:366;;;:::o;21162:419::-;21328:4;21366:2;21355:9;21351:18;21343:26;;21415:9;21409:4;21405:20;21401:1;21390:9;21386:17;21379:47;21443:131;21569:4;21443:131;:::i;:::-;21435:139;;21162:419;;;:::o;21587:223::-;21727:34;21723:1;21715:6;21711:14;21704:58;21796:6;21791:2;21783:6;21779:15;21772:31;21587:223;:::o;21816:366::-;21958:3;21979:67;22043:2;22038:3;21979:67;:::i;:::-;21972:74;;22055:93;22144:3;22055:93;:::i;:::-;22173:2;22168:3;22164:12;22157:19;;21816:366;;;:::o;22188:419::-;22354:4;22392:2;22381:9;22377:18;22369:26;;22441:9;22435:4;22431:20;22427:1;22416:9;22412:17;22405:47;22469:131;22595:4;22469:131;:::i;:::-;22461:139;;22188:419;;;:::o;22613:221::-;22753:34;22749:1;22741:6;22737:14;22730:58;22822:4;22817:2;22809:6;22805:15;22798:29;22613:221;:::o;22840:366::-;22982:3;23003:67;23067:2;23062:3;23003:67;:::i;:::-;22996:74;;23079:93;23168:3;23079:93;:::i;:::-;23197:2;23192:3;23188:12;23181:19;;22840:366;;;:::o;23212:419::-;23378:4;23416:2;23405:9;23401:18;23393:26;;23465:9;23459:4;23455:20;23451:1;23440:9;23436:17;23429:47;23493:131;23619:4;23493:131;:::i;:::-;23485:139;;23212:419;;;:::o;23637:224::-;23777:34;23773:1;23765:6;23761:14;23754:58;23846:7;23841:2;23833:6;23829:15;23822:32;23637:224;:::o;23867:366::-;24009:3;24030:67;24094:2;24089:3;24030:67;:::i;:::-;24023:74;;24106:93;24195:3;24106:93;:::i;:::-;24224:2;24219:3;24215:12;24208:19;;23867:366;;;:::o;24239:419::-;24405:4;24443:2;24432:9;24428:18;24420:26;;24492:9;24486:4;24482:20;24478:1;24467:9;24463:17;24456:47;24520:131;24646:4;24520:131;:::i;:::-;24512:139;;24239:419;;;:::o;24664:222::-;24804:34;24800:1;24792:6;24788:14;24781:58;24873:5;24868:2;24860:6;24856:15;24849:30;24664:222;:::o;24892:366::-;25034:3;25055:67;25119:2;25114:3;25055:67;:::i;:::-;25048:74;;25131:93;25220:3;25131:93;:::i;:::-;25249:2;25244:3;25240:12;25233:19;;24892:366;;;:::o;25264:419::-;25430:4;25468:2;25457:9;25453:18;25445:26;;25517:9;25511:4;25507:20;25503:1;25492:9;25488:17;25481:47;25545:131;25671:4;25545:131;:::i;:::-;25537:139;;25264:419;;;:::o;25689:236::-;25829:34;25825:1;25817:6;25813:14;25806:58;25898:19;25893:2;25885:6;25881:15;25874:44;25689:236;:::o;25931:366::-;26073:3;26094:67;26158:2;26153:3;26094:67;:::i;:::-;26087:74;;26170:93;26259:3;26170:93;:::i;:::-;26288:2;26283:3;26279:12;26272:19;;25931:366;;;:::o;26303:419::-;26469:4;26507:2;26496:9;26492:18;26484:26;;26556:9;26550:4;26546:20;26542:1;26531:9;26527:17;26520:47;26584:131;26710:4;26584:131;:::i;:::-;26576:139;;26303:419;;;:::o;26728:172::-;26868:24;26864:1;26856:6;26852:14;26845:48;26728:172;:::o;26906:366::-;27048:3;27069:67;27133:2;27128:3;27069:67;:::i;:::-;27062:74;;27145:93;27234:3;27145:93;:::i;:::-;27263:2;27258:3;27254:12;27247:19;;26906:366;;;:::o;27278:419::-;27444:4;27482:2;27471:9;27467:18;27459:26;;27531:9;27525:4;27521:20;27517:1;27506:9;27502:17;27495:47;27559:131;27685:4;27559:131;:::i;:::-;27551:139;;27278:419;;;:::o;27703:297::-;27843:34;27839:1;27831:6;27827:14;27820:58;27912:34;27907:2;27899:6;27895:15;27888:59;27981:11;27976:2;27968:6;27964:15;27957:36;27703:297;:::o;28006:366::-;28148:3;28169:67;28233:2;28228:3;28169:67;:::i;:::-;28162:74;;28245:93;28334:3;28245:93;:::i;:::-;28363:2;28358:3;28354:12;28347:19;;28006:366;;;:::o;28378:419::-;28544:4;28582:2;28571:9;28567:18;28559:26;;28631:9;28625:4;28621:20;28617:1;28606:9;28602:17;28595:47;28659:131;28785:4;28659:131;:::i;:::-;28651:139;;28378:419;;;:::o;28803:240::-;28943:34;28939:1;28931:6;28927:14;28920:58;29012:23;29007:2;28999:6;28995:15;28988:48;28803:240;:::o;29049:366::-;29191:3;29212:67;29276:2;29271:3;29212:67;:::i;:::-;29205:74;;29288:93;29377:3;29288:93;:::i;:::-;29406:2;29401:3;29397:12;29390:19;;29049:366;;;:::o;29421:419::-;29587:4;29625:2;29614:9;29610:18;29602:26;;29674:9;29668:4;29664:20;29660:1;29649:9;29645:17;29638:47;29702:131;29828:4;29702:131;:::i;:::-;29694:139;;29421:419;;;:::o;29846:169::-;29986:21;29982:1;29974:6;29970:14;29963:45;29846:169;:::o;30021:366::-;30163:3;30184:67;30248:2;30243:3;30184:67;:::i;:::-;30177:74;;30260:93;30349:3;30260:93;:::i;:::-;30378:2;30373:3;30369:12;30362:19;;30021:366;;;:::o;30393:419::-;30559:4;30597:2;30586:9;30582:18;30574:26;;30646:9;30640:4;30636:20;30632:1;30621:9;30617:17;30610:47;30674:131;30800:4;30674:131;:::i;:::-;30666:139;;30393:419;;;:::o;30818:241::-;30958:34;30954:1;30946:6;30942:14;30935:58;31027:24;31022:2;31014:6;31010:15;31003:49;30818:241;:::o;31065:366::-;31207:3;31228:67;31292:2;31287:3;31228:67;:::i;:::-;31221:74;;31304:93;31393:3;31304:93;:::i;:::-;31422:2;31417:3;31413:12;31406:19;;31065:366;;;:::o;31437:419::-;31603:4;31641:2;31630:9;31626:18;31618:26;;31690:9;31684:4;31680:20;31676:1;31665:9;31661:17;31654:47;31718:131;31844:4;31718:131;:::i;:::-;31710:139;;31437:419;;;:::o;31862:191::-;31902:4;31922:20;31940:1;31922:20;:::i;:::-;31917:25;;31956:20;31974:1;31956:20;:::i;:::-;31951:25;;31995:1;31992;31989:8;31986:34;;;32000:18;;:::i;:::-;31986:34;32045:1;32042;32038:9;32030:17;;31862:191;;;;:::o;32059:442::-;32208:4;32246:2;32235:9;32231:18;32223:26;;32259:71;32327:1;32316:9;32312:17;32303:6;32259:71;:::i;:::-;32340:72;32408:2;32397:9;32393:18;32384:6;32340:72;:::i;:::-;32422;32490:2;32479:9;32475:18;32466:6;32422:72;:::i;:::-;32059:442;;;;;;:::o;32507:147::-;32608:11;32645:3;32630:18;;32507:147;;;;:::o;32660:114::-;;:::o;32780:398::-;32939:3;32960:83;33041:1;33036:3;32960:83;:::i;:::-;32953:90;;33052:93;33141:3;33052:93;:::i;:::-;33170:1;33165:3;33161:11;33154:18;;32780:398;;;:::o;33184:379::-;33368:3;33390:147;33533:3;33390:147;:::i;:::-;33383:154;;33554:3;33547:10;;33184:379;;;:::o;33569:220::-;33709:34;33705:1;33697:6;33693:14;33686:58;33778:3;33773:2;33765:6;33761:15;33754:28;33569:220;:::o;33795:366::-;33937:3;33958:67;34022:2;34017:3;33958:67;:::i;:::-;33951:74;;34034:93;34123:3;34034:93;:::i;:::-;34152:2;34147:3;34143:12;34136:19;;33795:366;;;:::o;34167:419::-;34333:4;34371:2;34360:9;34356:18;34348:26;;34420:9;34414:4;34410:20;34406:1;34395:9;34391:17;34384:47;34448:131;34574:4;34448:131;:::i;:::-;34440:139;;34167:419;;;:::o;34592:180::-;34640:77;34637:1;34630:88;34737:4;34734:1;34727:15;34761:4;34758:1;34751:15;34778:180;34826:77;34823:1;34816:88;34923:4;34920:1;34913:15;34947:4;34944:1;34937:15;34964:143;35021:5;35052:6;35046:13;35037:22;;35068:33;35095:5;35068:33;:::i;:::-;34964:143;;;;:::o;35113:351::-;35183:6;35232:2;35220:9;35211:7;35207:23;35203:32;35200:119;;;35238:79;;:::i;:::-;35200:119;35358:1;35383:64;35439:7;35430:6;35419:9;35415:22;35383:64;:::i;:::-;35373:74;;35329:128;35113:351;;;;:::o;35470:85::-;35515:7;35544:5;35533:16;;35470:85;;;:::o;35561:158::-;35619:9;35652:61;35670:42;35679:32;35705:5;35679:32;:::i;:::-;35670:42;:::i;:::-;35652:61;:::i;:::-;35639:74;;35561:158;;;:::o;35725:147::-;35820:45;35859:5;35820:45;:::i;:::-;35815:3;35808:58;35725:147;;:::o;35878:114::-;35945:6;35979:5;35973:12;35963:22;;35878:114;;;:::o;35998:184::-;36097:11;36131:6;36126:3;36119:19;36171:4;36166:3;36162:14;36147:29;;35998:184;;;;:::o;36188:132::-;36255:4;36278:3;36270:11;;36308:4;36303:3;36299:14;36291:22;;36188:132;;;:::o;36326:108::-;36403:24;36421:5;36403:24;:::i;:::-;36398:3;36391:37;36326:108;;:::o;36440:179::-;36509:10;36530:46;36572:3;36564:6;36530:46;:::i;:::-;36608:4;36603:3;36599:14;36585:28;;36440:179;;;;:::o;36625:113::-;36695:4;36727;36722:3;36718:14;36710:22;;36625:113;;;:::o;36774:732::-;36893:3;36922:54;36970:5;36922:54;:::i;:::-;36992:86;37071:6;37066:3;36992:86;:::i;:::-;36985:93;;37102:56;37152:5;37102:56;:::i;:::-;37181:7;37212:1;37197:284;37222:6;37219:1;37216:13;37197:284;;;37298:6;37292:13;37325:63;37384:3;37369:13;37325:63;:::i;:::-;37318:70;;37411:60;37464:6;37411:60;:::i;:::-;37401:70;;37257:224;37244:1;37241;37237:9;37232:14;;37197:284;;;37201:14;37497:3;37490:10;;36898:608;;;36774:732;;;;:::o;37512:831::-;37775:4;37813:3;37802:9;37798:19;37790:27;;37827:71;37895:1;37884:9;37880:17;37871:6;37827:71;:::i;:::-;37908:80;37984:2;37973:9;37969:18;37960:6;37908:80;:::i;:::-;38035:9;38029:4;38025:20;38020:2;38009:9;38005:18;37998:48;38063:108;38166:4;38157:6;38063:108;:::i;:::-;38055:116;;38181:72;38249:2;38238:9;38234:18;38225:6;38181:72;:::i;:::-;38263:73;38331:3;38320:9;38316:19;38307:6;38263:73;:::i;:::-;37512:831;;;;;;;;:::o;38349:807::-;38598:4;38636:3;38625:9;38621:19;38613:27;;38650:71;38718:1;38707:9;38703:17;38694:6;38650:71;:::i;:::-;38731:72;38799:2;38788:9;38784:18;38775:6;38731:72;:::i;:::-;38813:80;38889:2;38878:9;38874:18;38865:6;38813:80;:::i;:::-;38903;38979:2;38968:9;38964:18;38955:6;38903:80;:::i;:::-;38993:73;39061:3;39050:9;39046:19;39037:6;38993:73;:::i;:::-;39076;39144:3;39133:9;39129:19;39120:6;39076:73;:::i;:::-;38349:807;;;;;;;;;:::o;39162:143::-;39219:5;39250:6;39244:13;39235:22;;39266:33;39293:5;39266:33;:::i;:::-;39162:143;;;;:::o;39311:663::-;39399:6;39407;39415;39464:2;39452:9;39443:7;39439:23;39435:32;39432:119;;;39470:79;;:::i;:::-;39432:119;39590:1;39615:64;39671:7;39662:6;39651:9;39647:22;39615:64;:::i;:::-;39605:74;;39561:128;39728:2;39754:64;39810:7;39801:6;39790:9;39786:22;39754:64;:::i;:::-;39744:74;;39699:129;39867:2;39893:64;39949:7;39940:6;39929:9;39925:22;39893:64;:::i;:::-;39883:74;;39838:129;39311:663;;;;;:::o
Swarm Source
ipfs://d4ea0ed2f1451ce329859f20702abd10cc49b0ed744550a6e9cf9b9962e246dd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.