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 84 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 20243803 | 222 days ago | IN | 0 ETH | 0.00012803 | ||||
Update Buy Fees | 18078629 | 525 days ago | IN | 0 ETH | 0.0008124 | ||||
Update Sell Fees | 18078618 | 525 days ago | IN | 0 ETH | 0.00100739 | ||||
Approve | 18078125 | 525 days ago | IN | 0 ETH | 0.00201814 | ||||
Approve | 18078118 | 525 days ago | IN | 0 ETH | 0.00218485 | ||||
Approve | 18078116 | 525 days ago | IN | 0 ETH | 0.00219247 | ||||
Approve | 18078107 | 525 days ago | IN | 0 ETH | 0.00226851 | ||||
Approve | 18078001 | 525 days ago | IN | 0 ETH | 0.00154775 | ||||
Approve | 18077963 | 525 days ago | IN | 0 ETH | 0.00144045 | ||||
Approve | 18077924 | 525 days ago | IN | 0 ETH | 0.00131529 | ||||
Approve | 18077916 | 525 days ago | IN | 0 ETH | 0.00133103 | ||||
Approve | 18077830 | 525 days ago | IN | 0 ETH | 0.00103529 | ||||
Approve | 18077772 | 525 days ago | IN | 0 ETH | 0.00098404 | ||||
Approve | 18077765 | 525 days ago | IN | 0 ETH | 0.00083732 | ||||
Approve | 18077755 | 525 days ago | IN | 0 ETH | 0.00108108 | ||||
Approve | 18077676 | 525 days ago | IN | 0 ETH | 0.00154861 | ||||
Update Sell Fees | 18077661 | 525 days ago | IN | 0 ETH | 0.00103531 | ||||
Update Buy Fees | 18077660 | 525 days ago | IN | 0 ETH | 0.00100998 | ||||
Approve | 18077656 | 525 days ago | IN | 0 ETH | 0.00125187 | ||||
Approve | 18077633 | 525 days ago | IN | 0 ETH | 0.00107361 | ||||
Approve | 18077632 | 525 days ago | IN | 0 ETH | 0.00132855 | ||||
Approve | 18077624 | 525 days ago | IN | 0 ETH | 0.00120578 | ||||
Approve | 18077616 | 525 days ago | IN | 0 ETH | 0.00128846 | ||||
Approve | 18077612 | 525 days ago | IN | 0 ETH | 0.00136469 | ||||
Approve | 18077602 | 525 days ago | IN | 0 ETH | 0.00125241 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
18086358 | 524 days ago | 0.00126207 ETH | ||||
18086358 | 524 days ago | 0.00126207 ETH | ||||
18086358 | 524 days ago | 0.00252414 ETH | ||||
18086344 | 524 days ago | 0.00076366 ETH | ||||
18086344 | 524 days ago | 0.00076366 ETH | ||||
18086344 | 524 days ago | 0.00152733 ETH | ||||
18084571 | 524 days ago | 0.00118524 ETH | ||||
18084571 | 524 days ago | 0.00118524 ETH | ||||
18084571 | 524 days ago | 0.00237048 ETH | ||||
18083845 | 525 days ago | 0.00125545 ETH | ||||
18083845 | 525 days ago | 0.00125545 ETH | ||||
18083845 | 525 days ago | 0.0025109 ETH | ||||
18083379 | 525 days ago | 0.001304 ETH | ||||
18083379 | 525 days ago | 0.001304 ETH | ||||
18083379 | 525 days ago | 0.00260801 ETH | ||||
18080950 | 525 days ago | 0.00135543 ETH | ||||
18080950 | 525 days ago | 0.00135543 ETH | ||||
18080950 | 525 days ago | 0.00271086 ETH | ||||
18080744 | 525 days ago | 0.00140996 ETH | ||||
18080744 | 525 days ago | 0.00140996 ETH | ||||
18080744 | 525 days ago | 0.00281992 ETH | ||||
18080703 | 525 days ago | 0.00163131 ETH | ||||
18080703 | 525 days ago | 0.00163131 ETH | ||||
18080703 | 525 days ago | 0.00326263 ETH | ||||
18078823 | 525 days ago | 0.00106385 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
TOXIN
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-06 */ /** * SPDX-License-Identifier: MIT */ pragma solidity 0.8.19; library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { 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); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } 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] + 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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This 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); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(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 += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(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); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(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 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } abstract 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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract TOXIN is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); // Swapback bool private swapping; bool public swapEnabled = false; uint256 public swapTokensAtAmount; uint256 public maxTokensForSwapback; //Anti-whale bool public limitsInEffect = true; bool public transferDelayEnabled = true; uint256 public maxWallet; uint256 public maxTransactionAmount; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Fee receivers address public marketingWallet; address public stakingAddress; bool public tradingActive = false; uint256 public totalFeesBuy; uint256 public buyMarketingFee; uint256 public buyStakingFee; uint256 public totalFeesSell; uint256 public sellMarketingFee; uint256 public sellStakingFee; uint256 public tokensForMarketing; uint256 public tokensForStaking; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isFeeExempt; mapping(address => bool) public _isTxLimitExempt; // 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 marketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event stakingAddressUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("TOXIN", "TOXIN") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 25; uint256 _buyStakingFee = 25; uint256 _sellMarketingFee = 25; uint256 _sellStakingFee = 25; uint256 totalSupply = 100000000 * 1e18; maxTransactionAmount = (totalSupply * 15) / 1000; // 1.5% of total supply maxWallet = (totalSupply * 25) / 1000; // 2.5% of total supply swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapback trigger maxTokensForSwapback = (totalSupply * 6) / 1000; // 0.6% max swapback buyMarketingFee = _buyMarketingFee; buyStakingFee = _buyStakingFee; totalFeesBuy = buyMarketingFee + buyStakingFee; sellMarketingFee = _sellMarketingFee; sellStakingFee = _sellStakingFee; totalFeesSell = sellMarketingFee + sellStakingFee; marketingWallet = address(msg.sender); stakingAddress = address(msg.sender); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(marketingWallet, true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); excludeFromMaxTransaction(marketingWallet, 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 {} /// @notice Launches the token and enables trading. Irriversable. function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } /// @notice Removes the max wallet and max transaction limits function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } /// @notice Disables the Same wallet block transfer delay function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } /// @notice Changes the minimum balance of tokens the contract must have before swapping tokens for ETH. Base 100000, so 0.5% = 500. function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= totalSupply()/ 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= 500 * totalSupply()/ 100000, "Swap amount cannot be higher than 0.5% total supply." ); require( newAmount <= maxTokensForSwapback, "Swap amount cannot be higher than maxTokensForSwapback" ); swapTokensAtAmount = newAmount; return true; } /// @notice Changes the maximum amount of tokens the contract can swap for ETH. Base 10000, so 0.5% = 50. function updateMaxTokensForSwapback(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= swapTokensAtAmount, "Swap amount cannot be lower than swapTokensAtAmount" ); maxTokensForSwapback = newAmount; return true; } /// @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction /// @param newNum Base 1000, so 1% = 10 function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= 2, "Cannot set maxTransactionAmount lower than 0.2%" ); maxTransactionAmount = newNum * (10**18); } /// @notice Changes the maximum amount of tokens a wallet can hold /// @param newNum Base 1000, so 1% = 10 function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= 5, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * totalSupply()/1000; } /// @notice Sets if a wallet is excluded from the max wallet and tx limits /// @param updAds The wallet to update /// @param isEx If the wallet is excluded or not function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isTxLimitExempt[updAds] = isEx; } /// @notice Sets if the contract can sell tokens /// @param enabled set to false to disable selling function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } /// @notice Sets the fees for buys /// @param _marketingFee The fee for the marketing wallet /// @param _stakingFee The fee for staking function updateBuyFees( uint256 _marketingFee, uint256 _stakingFee ) external onlyOwner { buyMarketingFee = _marketingFee; buyStakingFee = _stakingFee; totalFeesBuy = buyMarketingFee + buyStakingFee; require(totalFeesBuy <= 100, "Must keep fees at 10% or less"); } /// @notice Sets the fees for sells /// @param _marketingFee The fee for the marketing wallet /// @param _stakingFee The fee for staking function updateSellFees( uint256 _marketingFee, uint256 _stakingFee ) external onlyOwner { sellMarketingFee = _marketingFee; sellStakingFee = _stakingFee; totalFeesSell = sellMarketingFee + sellStakingFee; require(totalFeesSell <= 100, "Must keep fees at 10% or less"); } /// @notice Sets if a wallet is excluded from fees /// @param account The wallet to update /// @param excluded If the wallet is excluded or not function excludeFromFees(address account, bool excluded) public onlyOwner { _isFeeExempt[account] = excluded; emit ExcludeFromFees(account, excluded); } /// @notice Sets an address as a new liquidity pair. You probably dont want to do this. /// @param pair The new pair 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 updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateStakingPool(address newWallet) external onlyOwner { emit stakingAddressUpdated(newWallet, stakingAddress); stakingAddress = newWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isFeeExempt[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); 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( _isFeeExempt[from] || _isFeeExempt[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] && !_isTxLimitExempt[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isTxLimitExempt[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isTxLimitExempt[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isFeeExempt[from] && !_isFeeExempt[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isFeeExempt[from] || _isFeeExempt[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] && totalFeesSell > 0) { fees = amount.mul(totalFeesSell).div(1000); tokensForStaking += (fees * sellStakingFee) / totalFeesSell; tokensForMarketing += (fees * sellMarketingFee) / totalFeesSell; } // on buy else if (automatedMarketMakerPairs[from] && totalFeesBuy > 0) { fees = amount.mul(totalFeesBuy).div(1000); tokensForStaking += (fees * buyStakingFee) / totalFeesBuy; tokensForMarketing += (fees * buyMarketingFee) / totalFeesBuy; } 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 swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForMarketing + tokensForStaking; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > maxTokensForSwapback) { contractBalance = maxTokensForSwapback; } // Halve the amount of liquidity tokens uint256 amountToSwapForETH = contractBalance; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForStaking = ethBalance.mul(tokensForStaking).div(totalTokensToSwap); tokensForMarketing = 0; tokensForStaking = 0; (success, ) = address(stakingAddress).call{value: ethForStaking}(""); (success, ) = address(marketingWallet).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":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"stakingAddressUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyStakingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensForSwapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellStakingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxTokensForSwapback","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateStakingPool","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
60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055506000600d60146101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600581526020017f544f58494e0000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f544f58494e0000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000dad565b5080600490816200010d919062000dad565b5050506200013062000124620005f460201b60201c565b620005fc60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c816001620006c260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062000efe565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000efe565b6040518363ffffffff1660e01b8152600401620002af92919062000f41565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000efe565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a0516001620006c260201b60201c565b6200035260a0516001620007ac60201b60201c565b60006019905060006019905060006019905060006019905060006a52b7d2dcc80cd2e400000090506103e8600f826200038c919062000f9d565b62000398919062001017565b600a819055506103e8601982620003b0919062000f9d565b620003bc919062001017565b600981905550612710600582620003d4919062000f9d565b620003e0919062001017565b6006819055506103e8600682620003f8919062000f9d565b62000404919062001017565b60078190555084600f8190555083601081905550601054600f546200042a91906200104f565b600e8190555082601281905550816013819055506013546012546200045091906200104f565b60118190555033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004fa620004ec6200084d60201b60201c565b60016200087760201b60201c565b6200050d3060016200087760201b60201c565b6200052261dead60016200087760201b60201c565b62000557600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200087760201b60201c565b620005796200056b6200084d60201b60201c565b6001620006c260201b60201c565b6200058c306001620006c260201b60201c565b620005a161dead6001620006c260201b60201c565b620005d6600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006c260201b60201c565b620005e83382620009b160201b60201c565b505050505050620011e7565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006d2620005f460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006f86200084d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000751576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074890620010eb565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000887620005f460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008ad6200084d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000906576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008fd90620010eb565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009a591906200112a565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a1a9062001197565b60405180910390fd5b62000a376000838362000b2960201b60201c565b806002600082825462000a4b91906200104f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000aa291906200104f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b099190620011ca565b60405180910390a362000b256000838362000b2e60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bb557607f821691505b60208210810362000bcb5762000bca62000b6d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bf6565b62000c41868362000bf6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c8e62000c8862000c828462000c59565b62000c63565b62000c59565b9050919050565b6000819050919050565b62000caa8362000c6d565b62000cc262000cb98262000c95565b84845462000c03565b825550505050565b600090565b62000cd962000cca565b62000ce681848462000c9f565b505050565b5b8181101562000d0e5762000d0260008262000ccf565b60018101905062000cec565b5050565b601f82111562000d5d5762000d278162000bd1565b62000d328462000be6565b8101602085101562000d42578190505b62000d5a62000d518562000be6565b83018262000ceb565b50505b505050565b600082821c905092915050565b600062000d826000198460080262000d62565b1980831691505092915050565b600062000d9d838362000d6f565b9150826002028217905092915050565b62000db88262000b33565b67ffffffffffffffff81111562000dd45762000dd362000b3e565b5b62000de0825462000b9c565b62000ded82828562000d12565b600060209050601f83116001811462000e25576000841562000e10578287015190505b62000e1c858262000d8f565b86555062000e8c565b601f19841662000e358662000bd1565b60005b8281101562000e5f5784890151825560018201915060208501945060208101905062000e38565b8683101562000e7f578489015162000e7b601f89168262000d6f565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ec68262000e99565b9050919050565b62000ed88162000eb9565b811462000ee457600080fd5b50565b60008151905062000ef88162000ecd565b92915050565b60006020828403121562000f175762000f1662000e94565b5b600062000f278482850162000ee7565b91505092915050565b62000f3b8162000eb9565b82525050565b600060408201905062000f58600083018562000f30565b62000f67602083018462000f30565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000faa8262000c59565b915062000fb78362000c59565b925082820262000fc78162000c59565b9150828204841483151762000fe15762000fe062000f6e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010248262000c59565b9150620010318362000c59565b92508262001044576200104362000fe8565b5b828204905092915050565b60006200105c8262000c59565b9150620010698362000c59565b925082820190508082111562001084576200108362000f6e565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010d36020836200108a565b9150620010e0826200109b565b602082019050919050565b600060208201905081810360008301526200110681620010c4565b9050919050565b60008115159050919050565b62001124816200110d565b82525050565b600060208201905062001141600083018462001119565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200117f601f836200108a565b91506200118c8262001147565b602082019050919050565b60006020820190508181036000830152620011b28162001170565b9050919050565b620011c48162000c59565b82525050565b6000602082019050620011e16000830184620011b9565b92915050565b60805160a051614df9620012376000396000818161111d015281816118840152612885015260008181610e4d0152818161282d0152818161379701528181613878015261389f0152614df96000f3fe60806040526004361061031e5760003560e01c80637af8ed9c116101ab578063b62496f5116100f7578063d25e5ea111610095578063e2f456051161006f578063e2f4560514610c01578063e884f26014610c2c578063f2fde38b14610c57578063f8b45b0514610c8057610325565b8063d25e5ea114610b6e578063d7b4be2414610b99578063dd62ed3e14610bc457610325565b8063c18bc195116100d1578063c18bc19514610ab2578063c876d0b914610adb578063c8c8ebe414610b06578063d257b34f14610b3157610325565b8063b62496f514610a21578063bbc0c74214610a5e578063c024666814610a8957610325565b806395d89b4111610164578063a457c2d71161013e578063a457c2d714610955578063a9059cbb14610992578063a99bc409146109cf578063aacebbe3146109f857610325565b806395d89b41146108c45780639a7a23d6146108ef578063a0c973f11461091857610325565b80637af8ed9c146107c65780637bce5a04146108035780638a8c523c1461082e5780638da5cb5b146108455780639213691314610870578063924de9b71461089b57610325565b8063439be3511161026a57806370a0823111610223578063751039fc116101fd578063751039fc1461071c5780637571336a1461074757806375f0a8741461077057806377c183521461079b57610325565b806370a082311461069d578063715018a6146106da578063742bd2a5146106f157610325565b8063439be3511461058b57806349bd5a5e146105b65780634a62bb65146105e15780634fbee1931461060c57806366ca9b83146106495780636ddd17131461067257610325565b806319c59e2c116102d757806323b872dd116102b157806323b872dd146104bb57806327c8f835146104f8578063313ce56714610523578063395093511461054e57610325565b806319c59e2c1461043c5780631f3fed8f14610467578063203e727e1461049257610325565b806302dbd8f81461032a57806306fdde0314610353578063095ea7b31461037e5780630e47e822146103bb5780631694505e146103e657806318160ddd1461041157610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c9190613986565b610cab565b005b34801561035f57600080fd5b50610368610d95565b6040516103759190613a56565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613ad6565b610e27565b6040516103b29190613b31565b60405180910390f35b3480156103c757600080fd5b506103d0610e45565b6040516103dd9190613b5b565b60405180910390f35b3480156103f257600080fd5b506103fb610e4b565b6040516104089190613bd5565b60405180910390f35b34801561041d57600080fd5b50610426610e6f565b6040516104339190613b5b565b60405180910390f35b34801561044857600080fd5b50610451610e79565b60405161045e9190613b5b565b60405180910390f35b34801561047357600080fd5b5061047c610e7f565b6040516104899190613b5b565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190613bf0565b610e85565b005b3480156104c757600080fd5b506104e260048036038101906104dd9190613c1d565b610f62565b6040516104ef9190613b31565b60405180910390f35b34801561050457600080fd5b5061050d61105a565b60405161051a9190613c7f565b60405180910390f35b34801561052f57600080fd5b50610538611060565b6040516105459190613cb6565b60405180910390f35b34801561055a57600080fd5b5061057560048036038101906105709190613ad6565b611069565b6040516105829190613b31565b60405180910390f35b34801561059757600080fd5b506105a0611115565b6040516105ad9190613b5b565b60405180910390f35b3480156105c257600080fd5b506105cb61111b565b6040516105d89190613c7f565b60405180910390f35b3480156105ed57600080fd5b506105f661113f565b6040516106039190613b31565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190613cd1565b611152565b6040516106409190613b31565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190613986565b6111a8565b005b34801561067e57600080fd5b50610687611292565b6040516106949190613b31565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190613cd1565b6112a5565b6040516106d19190613b5b565b60405180910390f35b3480156106e657600080fd5b506106ef6112ed565b005b3480156106fd57600080fd5b50610706611375565b6040516107139190613b5b565b60405180910390f35b34801561072857600080fd5b5061073161137b565b60405161073e9190613b31565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190613d2a565b61141b565b005b34801561077c57600080fd5b506107856114f2565b6040516107929190613c7f565b60405180910390f35b3480156107a757600080fd5b506107b0611518565b6040516107bd9190613b5b565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190613bf0565b61151e565b6040516107fa9190613b31565b60405180910390f35b34801561080f57600080fd5b506108186115f1565b6040516108259190613b5b565b60405180910390f35b34801561083a57600080fd5b506108436115f7565b005b34801561085157600080fd5b5061085a6116ab565b6040516108679190613c7f565b60405180910390f35b34801561087c57600080fd5b506108856116d5565b6040516108929190613b5b565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190613d6a565b6116db565b005b3480156108d057600080fd5b506108d9611774565b6040516108e69190613a56565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190613d2a565b611806565b005b34801561092457600080fd5b5061093f600480360381019061093a9190613cd1565b61191e565b60405161094c9190613b31565b60405180910390f35b34801561096157600080fd5b5061097c60048036038101906109779190613ad6565b61193e565b6040516109899190613b31565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613ad6565b611a29565b6040516109c69190613b31565b60405180910390f35b3480156109db57600080fd5b506109f660048036038101906109f19190613cd1565b611a47565b005b348015610a0457600080fd5b50610a1f6004803603810190610a1a9190613cd1565b611b83565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190613cd1565b611cbf565b604051610a559190613b31565b60405180910390f35b348015610a6a57600080fd5b50610a73611cdf565b604051610a809190613b31565b60405180910390f35b348015610a9557600080fd5b50610ab06004803603810190610aab9190613d2a565b611cf2565b005b348015610abe57600080fd5b50610ad96004803603810190610ad49190613bf0565b611e17565b005b348015610ae757600080fd5b50610af0611f00565b604051610afd9190613b31565b60405180910390f35b348015610b1257600080fd5b50610b1b611f13565b604051610b289190613b5b565b60405180910390f35b348015610b3d57600080fd5b50610b586004803603810190610b539190613bf0565b611f19565b604051610b659190613b31565b60405180910390f35b348015610b7a57600080fd5b50610b836120a9565b604051610b909190613b5b565b60405180910390f35b348015610ba557600080fd5b50610bae6120af565b604051610bbb9190613c7f565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190613d97565b6120d5565b604051610bf89190613b5b565b60405180910390f35b348015610c0d57600080fd5b50610c1661215c565b604051610c239190613b5b565b60405180910390f35b348015610c3857600080fd5b50610c41612162565b604051610c4e9190613b31565b60405180910390f35b348015610c6357600080fd5b50610c7e6004803603810190610c799190613cd1565b612202565b005b348015610c8c57600080fd5b50610c956122f9565b604051610ca29190613b5b565b60405180910390f35b610cb36122ff565b73ffffffffffffffffffffffffffffffffffffffff16610cd16116ab565b73ffffffffffffffffffffffffffffffffffffffff1614610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90613e23565b60405180910390fd5b8160128190555080601381905550601354601254610d459190613e72565b60118190555060646011541115610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890613ef2565b60405180910390fd5b5050565b606060038054610da490613f41565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd090613f41565b8015610e1d5780601f10610df257610100808354040283529160200191610e1d565b820191906000526020600020905b815481529060010190602001808311610e0057829003601f168201915b5050505050905090565b6000610e3b610e346122ff565b8484612307565b6001905092915050565b60115481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600e5481565b60145481565b610e8d6122ff565b73ffffffffffffffffffffffffffffffffffffffff16610eab6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890613e23565b60405180910390fd5b6002811015610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c90613fe4565b60405180910390fd5b670de0b6b3a764000081610f599190614004565b600a8190555050565b6000610f6f8484846124d0565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fba6122ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561103a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611031906140b8565b60405180910390fd5b61104e856110466122ff565b858403612307565b60019150509392505050565b61dead81565b60006012905090565b600061110b6110766122ff565b8484600160006110846122ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111069190613e72565b612307565b6001905092915050565b60105481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600860009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111b06122ff565b73ffffffffffffffffffffffffffffffffffffffff166111ce6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90613e23565b60405180910390fd5b81600f8190555080601081905550601054600f546112429190613e72565b600e819055506064600e54111561128e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128590613ef2565b60405180910390fd5b5050565b600560159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112f56122ff565b73ffffffffffffffffffffffffffffffffffffffff166113136116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136090613e23565b60405180910390fd5b6113736000613103565b565b60135481565b60006113856122ff565b73ffffffffffffffffffffffffffffffffffffffff166113a36116ab565b73ffffffffffffffffffffffffffffffffffffffff16146113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f090613e23565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055506001905090565b6114236122ff565b73ffffffffffffffffffffffffffffffffffffffff166114416116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90613e23565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60006115286122ff565b73ffffffffffffffffffffffffffffffffffffffff166115466116ab565b73ffffffffffffffffffffffffffffffffffffffff161461159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390613e23565b60405180910390fd5b6006548210156115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d89061414a565b60405180910390fd5b8160078190555060019050919050565b600f5481565b6115ff6122ff565b73ffffffffffffffffffffffffffffffffffffffff1661161d6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a90613e23565b60405180910390fd5b6001600d60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b6116e36122ff565b73ffffffffffffffffffffffffffffffffffffffff166117016116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e90613e23565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b60606004805461178390613f41565b80601f01602080910402602001604051908101604052809291908181526020018280546117af90613f41565b80156117fc5780601f106117d1576101008083540402835291602001916117fc565b820191906000526020600020905b8154815290600101906020018083116117df57829003601f168201915b5050505050905090565b61180e6122ff565b73ffffffffffffffffffffffffffffffffffffffff1661182c6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187990613e23565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611907906141dc565b60405180910390fd5b61191a82826131c9565b5050565b60176020528060005260406000206000915054906101000a900460ff1681565b6000806001600061194d6122ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a019061426e565b60405180910390fd5b611a1e611a156122ff565b85858403612307565b600191505092915050565b6000611a3d611a366122ff565b84846124d0565b6001905092915050565b611a4f6122ff565b73ffffffffffffffffffffffffffffffffffffffff16611a6d6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba90613e23565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4a4da411311bb63fb05ca7ccac438c8b8d4e33e7227d017faefe40e2381f56df60405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b8b6122ff565b73ffffffffffffffffffffffffffffffffffffffff16611ba96116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf690613e23565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60186020528060005260406000206000915054906101000a900460ff1681565b600d60149054906101000a900460ff1681565b611cfa6122ff565b73ffffffffffffffffffffffffffffffffffffffff16611d186116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590613e23565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e0b9190613b31565b60405180910390a25050565b611e1f6122ff565b73ffffffffffffffffffffffffffffffffffffffff16611e3d6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a90613e23565b60405180910390fd5b6005811015611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece90614300565b60405180910390fd5b6103e8611ee2610e6f565b82611eed9190614004565b611ef7919061434f565b60098190555050565b600860019054906101000a900460ff1681565b600a5481565b6000611f236122ff565b73ffffffffffffffffffffffffffffffffffffffff16611f416116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8e90613e23565b60405180910390fd5b620186a0611fa3610e6f565b611fad919061434f565b821015611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe6906143f2565b60405180910390fd5b620186a0611ffb610e6f565b6101f46120089190614004565b612012919061434f565b821115612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204b90614484565b60405180910390fd5b600754821115612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090614516565b60405180910390fd5b8160068190555060019050919050565b60155481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b600061216c6122ff565b73ffffffffffffffffffffffffffffffffffffffff1661218a6116ab565b73ffffffffffffffffffffffffffffffffffffffff16146121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d790613e23565b60405180910390fd5b6000600860016101000a81548160ff0219169083151502179055506001905090565b61220a6122ff565b73ffffffffffffffffffffffffffffffffffffffff166122286116ab565b73ffffffffffffffffffffffffffffffffffffffff161461227e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227590613e23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e4906145a8565b60405180910390fd5b6122f681613103565b50565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236d9061463a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc906146cc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124c39190613b5b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061475e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a5906147f0565b60405180910390fd5b600081036125c7576125c28383600061326a565b6130fe565b600860009054906101000a900460ff1615612c8a576125e46116ab565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561265257506126226116ab565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561268b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126c5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126de5750600560149054906101000a900460ff16155b15612c8957600d60149054906101000a900460ff166127d857601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127985750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ce9061485c565b60405180910390fd5b5b600860019054906101000a900460ff16156129a0576127f56116ab565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561287c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128d457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561299f5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061295a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295190614914565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a435750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612aea57600a54811115612a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a84906149a6565b60405180910390fd5b600954612a99836112a5565b82612aa49190613e72565b1115612ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adc90614a12565b60405180910390fd5b612c88565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b8d5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bdc57600a54811115612bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bce90614aa4565b60405180910390fd5b612c87565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c8657600954612c39836112a5565b82612c449190613e72565b1115612c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7c90614a12565b60405180910390fd5b5b5b5b5b5b6000612c95306112a5565b905060006006548210159050808015612cba5750600560159054906101000a900460ff165b8015612cd35750600560149054906101000a900460ff16155b8015612d295750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d7f5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dd55750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e19576001600560146101000a81548160ff021916908315150217905550612dfd6134e9565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ecf5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ed957600090505b600081156130ee57601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f3c57506000601154115b15612fd757612f6a6103e8612f5c601154886136c290919063ffffffff16565b6136d890919063ffffffff16565b905060115460135482612f7d9190614004565b612f87919061434f565b60156000828254612f989190613e72565b9250508190555060115460125482612fb09190614004565b612fba919061434f565b60146000828254612fcb9190613e72565b925050819055506130ca565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303257506000600e54115b156130c9576130606103e8613052600e54886136c290919063ffffffff16565b6136d890919063ffffffff16565b9050600e54601054826130739190614004565b61307d919061434f565b6015600082825461308e9190613e72565b92505081905550600e54600f54826130a69190614004565b6130b0919061434f565b601460008282546130c19190613e72565b925050819055505b5b60008111156130df576130de87308361326a565b5b80856130eb9190614ac4565b94505b6130f987878761326a565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d09061475e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333f906147f0565b60405180910390fd5b6133538383836136ee565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156133d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d090614b6a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461346c9190613e72565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134d09190613b5b565b60405180910390a36134e38484846136f3565b50505050565b60006134f4306112a5565b905060006015546014546135089190613e72565b905060008083148061351a5750600082145b15613527575050506136c0565b6007548311156135375760075492505b6000839050600047905061354a826136f8565b600061355f824761393590919063ffffffff16565b9050600061358a8661357c601554856136c290919063ffffffff16565b6136d890919063ffffffff16565b905060006014819055506000601581905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516135e290614bbb565b60006040518083038185875af1925050503d806000811461361f576040519150601f19603f3d011682016040523d82523d6000602084013e613624565b606091505b505080955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161367090614bbb565b60006040518083038185875af1925050503d80600081146136ad576040519150601f19603f3d011682016040523d82523d6000602084013e6136b2565b606091505b505080955050505050505050505b565b600081836136d09190614004565b905092915050565b600081836136e6919061434f565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561371557613714614bd0565b5b6040519080825280602002602001820160405280156137435781602001602082028036833780820191505090505b509050308160008151811061375b5761375a614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613800573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138249190614c43565b8160018151811061383857613837614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061389d307f000000000000000000000000000000000000000000000000000000000000000084612307565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138ff959493929190614d69565b600060405180830381600087803b15801561391957600080fd5b505af115801561392d573d6000803e3d6000fd5b505050505050565b600081836139439190614ac4565b905092915050565b600080fd5b6000819050919050565b61396381613950565b811461396e57600080fd5b50565b6000813590506139808161395a565b92915050565b6000806040838503121561399d5761399c61394b565b5b60006139ab85828601613971565b92505060206139bc85828601613971565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a005780820151818401526020810190506139e5565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a28826139c6565b613a3281856139d1565b9350613a428185602086016139e2565b613a4b81613a0c565b840191505092915050565b60006020820190508181036000830152613a708184613a1d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613aa382613a78565b9050919050565b613ab381613a98565b8114613abe57600080fd5b50565b600081359050613ad081613aaa565b92915050565b60008060408385031215613aed57613aec61394b565b5b6000613afb85828601613ac1565b9250506020613b0c85828601613971565b9150509250929050565b60008115159050919050565b613b2b81613b16565b82525050565b6000602082019050613b466000830184613b22565b92915050565b613b5581613950565b82525050565b6000602082019050613b706000830184613b4c565b92915050565b6000819050919050565b6000613b9b613b96613b9184613a78565b613b76565b613a78565b9050919050565b6000613bad82613b80565b9050919050565b6000613bbf82613ba2565b9050919050565b613bcf81613bb4565b82525050565b6000602082019050613bea6000830184613bc6565b92915050565b600060208284031215613c0657613c0561394b565b5b6000613c1484828501613971565b91505092915050565b600080600060608486031215613c3657613c3561394b565b5b6000613c4486828701613ac1565b9350506020613c5586828701613ac1565b9250506040613c6686828701613971565b9150509250925092565b613c7981613a98565b82525050565b6000602082019050613c946000830184613c70565b92915050565b600060ff82169050919050565b613cb081613c9a565b82525050565b6000602082019050613ccb6000830184613ca7565b92915050565b600060208284031215613ce757613ce661394b565b5b6000613cf584828501613ac1565b91505092915050565b613d0781613b16565b8114613d1257600080fd5b50565b600081359050613d2481613cfe565b92915050565b60008060408385031215613d4157613d4061394b565b5b6000613d4f85828601613ac1565b9250506020613d6085828601613d15565b9150509250929050565b600060208284031215613d8057613d7f61394b565b5b6000613d8e84828501613d15565b91505092915050565b60008060408385031215613dae57613dad61394b565b5b6000613dbc85828601613ac1565b9250506020613dcd85828601613ac1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e0d6020836139d1565b9150613e1882613dd7565b602082019050919050565b60006020820190508181036000830152613e3c81613e00565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e7d82613950565b9150613e8883613950565b9250828201905080821115613ea057613e9f613e43565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613edc601d836139d1565b9150613ee782613ea6565b602082019050919050565b60006020820190508181036000830152613f0b81613ecf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f5957607f821691505b602082108103613f6c57613f6b613f12565b5b50919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e32250000000000000000000000000000000000602082015250565b6000613fce602f836139d1565b9150613fd982613f72565b604082019050919050565b60006020820190508181036000830152613ffd81613fc1565b9050919050565b600061400f82613950565b915061401a83613950565b925082820261402881613950565b9150828204841483151761403f5761403e613e43565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006140a26028836139d1565b91506140ad82614046565b604082019050919050565b600060208201905081810360008301526140d181614095565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f2073776170546f6b656e734174416d6f756e7400000000000000000000000000602082015250565b60006141346033836139d1565b915061413f826140d8565b604082019050919050565b6000602082019050818103600083015261416381614127565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006141c66039836139d1565b91506141d18261416a565b604082019050919050565b600060208201905081810360008301526141f5816141b9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006142586025836139d1565b9150614263826141fc565b604082019050919050565b600060208201905081810360008301526142878161424b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006142ea6024836139d1565b91506142f58261428e565b604082019050919050565b60006020820190508181036000830152614319816142dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061435a82613950565b915061436583613950565b92508261437557614374614320565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006143dc6035836139d1565b91506143e782614380565b604082019050919050565b6000602082019050818103600083015261440b816143cf565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061446e6034836139d1565b915061447982614412565b604082019050919050565b6000602082019050818103600083015261449d81614461565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178546f6b656e73466f72537761706261636b00000000000000000000602082015250565b60006145006036836139d1565b915061450b826144a4565b604082019050919050565b6000602082019050818103600083015261452f816144f3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145926026836139d1565b915061459d82614536565b604082019050919050565b600060208201905081810360008301526145c181614585565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146246024836139d1565b915061462f826145c8565b604082019050919050565b6000602082019050818103600083015261465381614617565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146b66022836139d1565b91506146c18261465a565b604082019050919050565b600060208201905081810360008301526146e5816146a9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147486025836139d1565b9150614753826146ec565b604082019050919050565b600060208201905081810360008301526147778161473b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147da6023836139d1565b91506147e58261477e565b604082019050919050565b60006020820190508181036000830152614809816147cd565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148466016836139d1565b915061485182614810565b602082019050919050565b6000602082019050818103600083015261487581614839565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006148fe6049836139d1565b91506149098261487c565b606082019050919050565b6000602082019050818103600083015261492d816148f1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006149906035836139d1565b915061499b82614934565b604082019050919050565b600060208201905081810360008301526149bf81614983565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149fc6013836139d1565b9150614a07826149c6565b602082019050919050565b60006020820190508181036000830152614a2b816149ef565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a8e6036836139d1565b9150614a9982614a32565b604082019050919050565b60006020820190508181036000830152614abd81614a81565b9050919050565b6000614acf82613950565b9150614ada83613950565b9250828203905081811115614af257614af1613e43565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614b546026836139d1565b9150614b5f82614af8565b604082019050919050565b60006020820190508181036000830152614b8381614b47565b9050919050565b600081905092915050565b50565b6000614ba5600083614b8a565b9150614bb082614b95565b600082019050919050565b6000614bc682614b98565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c3d81613aaa565b92915050565b600060208284031215614c5957614c5861394b565b5b6000614c6784828501614c2e565b91505092915050565b6000819050919050565b6000614c95614c90614c8b84614c70565b613b76565b613950565b9050919050565b614ca581614c7a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ce081613a98565b82525050565b6000614cf28383614cd7565b60208301905092915050565b6000602082019050919050565b6000614d1682614cab565b614d208185614cb6565b9350614d2b83614cc7565b8060005b83811015614d5c578151614d438882614ce6565b9750614d4e83614cfe565b925050600181019050614d2f565b5085935050505092915050565b600060a082019050614d7e6000830188613b4c565b614d8b6020830187614c9c565b8181036040830152614d9d8186614d0b565b9050614dac6060830185613c70565b614db96080830184613b4c565b969550505050505056fea2646970667358221220a7e0f66d175668a6eacb2d6acda21db71f35ad0480360250592473e17af48cdd64736f6c63430008130033
Deployed Bytecode
0x60806040526004361061031e5760003560e01c80637af8ed9c116101ab578063b62496f5116100f7578063d25e5ea111610095578063e2f456051161006f578063e2f4560514610c01578063e884f26014610c2c578063f2fde38b14610c57578063f8b45b0514610c8057610325565b8063d25e5ea114610b6e578063d7b4be2414610b99578063dd62ed3e14610bc457610325565b8063c18bc195116100d1578063c18bc19514610ab2578063c876d0b914610adb578063c8c8ebe414610b06578063d257b34f14610b3157610325565b8063b62496f514610a21578063bbc0c74214610a5e578063c024666814610a8957610325565b806395d89b4111610164578063a457c2d71161013e578063a457c2d714610955578063a9059cbb14610992578063a99bc409146109cf578063aacebbe3146109f857610325565b806395d89b41146108c45780639a7a23d6146108ef578063a0c973f11461091857610325565b80637af8ed9c146107c65780637bce5a04146108035780638a8c523c1461082e5780638da5cb5b146108455780639213691314610870578063924de9b71461089b57610325565b8063439be3511161026a57806370a0823111610223578063751039fc116101fd578063751039fc1461071c5780637571336a1461074757806375f0a8741461077057806377c183521461079b57610325565b806370a082311461069d578063715018a6146106da578063742bd2a5146106f157610325565b8063439be3511461058b57806349bd5a5e146105b65780634a62bb65146105e15780634fbee1931461060c57806366ca9b83146106495780636ddd17131461067257610325565b806319c59e2c116102d757806323b872dd116102b157806323b872dd146104bb57806327c8f835146104f8578063313ce56714610523578063395093511461054e57610325565b806319c59e2c1461043c5780631f3fed8f14610467578063203e727e1461049257610325565b806302dbd8f81461032a57806306fdde0314610353578063095ea7b31461037e5780630e47e822146103bb5780631694505e146103e657806318160ddd1461041157610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c9190613986565b610cab565b005b34801561035f57600080fd5b50610368610d95565b6040516103759190613a56565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613ad6565b610e27565b6040516103b29190613b31565b60405180910390f35b3480156103c757600080fd5b506103d0610e45565b6040516103dd9190613b5b565b60405180910390f35b3480156103f257600080fd5b506103fb610e4b565b6040516104089190613bd5565b60405180910390f35b34801561041d57600080fd5b50610426610e6f565b6040516104339190613b5b565b60405180910390f35b34801561044857600080fd5b50610451610e79565b60405161045e9190613b5b565b60405180910390f35b34801561047357600080fd5b5061047c610e7f565b6040516104899190613b5b565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190613bf0565b610e85565b005b3480156104c757600080fd5b506104e260048036038101906104dd9190613c1d565b610f62565b6040516104ef9190613b31565b60405180910390f35b34801561050457600080fd5b5061050d61105a565b60405161051a9190613c7f565b60405180910390f35b34801561052f57600080fd5b50610538611060565b6040516105459190613cb6565b60405180910390f35b34801561055a57600080fd5b5061057560048036038101906105709190613ad6565b611069565b6040516105829190613b31565b60405180910390f35b34801561059757600080fd5b506105a0611115565b6040516105ad9190613b5b565b60405180910390f35b3480156105c257600080fd5b506105cb61111b565b6040516105d89190613c7f565b60405180910390f35b3480156105ed57600080fd5b506105f661113f565b6040516106039190613b31565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190613cd1565b611152565b6040516106409190613b31565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190613986565b6111a8565b005b34801561067e57600080fd5b50610687611292565b6040516106949190613b31565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190613cd1565b6112a5565b6040516106d19190613b5b565b60405180910390f35b3480156106e657600080fd5b506106ef6112ed565b005b3480156106fd57600080fd5b50610706611375565b6040516107139190613b5b565b60405180910390f35b34801561072857600080fd5b5061073161137b565b60405161073e9190613b31565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190613d2a565b61141b565b005b34801561077c57600080fd5b506107856114f2565b6040516107929190613c7f565b60405180910390f35b3480156107a757600080fd5b506107b0611518565b6040516107bd9190613b5b565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190613bf0565b61151e565b6040516107fa9190613b31565b60405180910390f35b34801561080f57600080fd5b506108186115f1565b6040516108259190613b5b565b60405180910390f35b34801561083a57600080fd5b506108436115f7565b005b34801561085157600080fd5b5061085a6116ab565b6040516108679190613c7f565b60405180910390f35b34801561087c57600080fd5b506108856116d5565b6040516108929190613b5b565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190613d6a565b6116db565b005b3480156108d057600080fd5b506108d9611774565b6040516108e69190613a56565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190613d2a565b611806565b005b34801561092457600080fd5b5061093f600480360381019061093a9190613cd1565b61191e565b60405161094c9190613b31565b60405180910390f35b34801561096157600080fd5b5061097c60048036038101906109779190613ad6565b61193e565b6040516109899190613b31565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613ad6565b611a29565b6040516109c69190613b31565b60405180910390f35b3480156109db57600080fd5b506109f660048036038101906109f19190613cd1565b611a47565b005b348015610a0457600080fd5b50610a1f6004803603810190610a1a9190613cd1565b611b83565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190613cd1565b611cbf565b604051610a559190613b31565b60405180910390f35b348015610a6a57600080fd5b50610a73611cdf565b604051610a809190613b31565b60405180910390f35b348015610a9557600080fd5b50610ab06004803603810190610aab9190613d2a565b611cf2565b005b348015610abe57600080fd5b50610ad96004803603810190610ad49190613bf0565b611e17565b005b348015610ae757600080fd5b50610af0611f00565b604051610afd9190613b31565b60405180910390f35b348015610b1257600080fd5b50610b1b611f13565b604051610b289190613b5b565b60405180910390f35b348015610b3d57600080fd5b50610b586004803603810190610b539190613bf0565b611f19565b604051610b659190613b31565b60405180910390f35b348015610b7a57600080fd5b50610b836120a9565b604051610b909190613b5b565b60405180910390f35b348015610ba557600080fd5b50610bae6120af565b604051610bbb9190613c7f565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190613d97565b6120d5565b604051610bf89190613b5b565b60405180910390f35b348015610c0d57600080fd5b50610c1661215c565b604051610c239190613b5b565b60405180910390f35b348015610c3857600080fd5b50610c41612162565b604051610c4e9190613b31565b60405180910390f35b348015610c6357600080fd5b50610c7e6004803603810190610c799190613cd1565b612202565b005b348015610c8c57600080fd5b50610c956122f9565b604051610ca29190613b5b565b60405180910390f35b610cb36122ff565b73ffffffffffffffffffffffffffffffffffffffff16610cd16116ab565b73ffffffffffffffffffffffffffffffffffffffff1614610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90613e23565b60405180910390fd5b8160128190555080601381905550601354601254610d459190613e72565b60118190555060646011541115610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890613ef2565b60405180910390fd5b5050565b606060038054610da490613f41565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd090613f41565b8015610e1d5780601f10610df257610100808354040283529160200191610e1d565b820191906000526020600020905b815481529060010190602001808311610e0057829003601f168201915b5050505050905090565b6000610e3b610e346122ff565b8484612307565b6001905092915050565b60115481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600e5481565b60145481565b610e8d6122ff565b73ffffffffffffffffffffffffffffffffffffffff16610eab6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890613e23565b60405180910390fd5b6002811015610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c90613fe4565b60405180910390fd5b670de0b6b3a764000081610f599190614004565b600a8190555050565b6000610f6f8484846124d0565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fba6122ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561103a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611031906140b8565b60405180910390fd5b61104e856110466122ff565b858403612307565b60019150509392505050565b61dead81565b60006012905090565b600061110b6110766122ff565b8484600160006110846122ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111069190613e72565b612307565b6001905092915050565b60105481565b7f000000000000000000000000bd8e2f0b36426d26c8bb3656111bc6ce962b0cb081565b600860009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111b06122ff565b73ffffffffffffffffffffffffffffffffffffffff166111ce6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90613e23565b60405180910390fd5b81600f8190555080601081905550601054600f546112429190613e72565b600e819055506064600e54111561128e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128590613ef2565b60405180910390fd5b5050565b600560159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112f56122ff565b73ffffffffffffffffffffffffffffffffffffffff166113136116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136090613e23565b60405180910390fd5b6113736000613103565b565b60135481565b60006113856122ff565b73ffffffffffffffffffffffffffffffffffffffff166113a36116ab565b73ffffffffffffffffffffffffffffffffffffffff16146113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f090613e23565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055506001905090565b6114236122ff565b73ffffffffffffffffffffffffffffffffffffffff166114416116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90613e23565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60006115286122ff565b73ffffffffffffffffffffffffffffffffffffffff166115466116ab565b73ffffffffffffffffffffffffffffffffffffffff161461159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390613e23565b60405180910390fd5b6006548210156115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d89061414a565b60405180910390fd5b8160078190555060019050919050565b600f5481565b6115ff6122ff565b73ffffffffffffffffffffffffffffffffffffffff1661161d6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a90613e23565b60405180910390fd5b6001600d60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b6116e36122ff565b73ffffffffffffffffffffffffffffffffffffffff166117016116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e90613e23565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b60606004805461178390613f41565b80601f01602080910402602001604051908101604052809291908181526020018280546117af90613f41565b80156117fc5780601f106117d1576101008083540402835291602001916117fc565b820191906000526020600020905b8154815290600101906020018083116117df57829003601f168201915b5050505050905090565b61180e6122ff565b73ffffffffffffffffffffffffffffffffffffffff1661182c6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187990613e23565b60405180910390fd5b7f000000000000000000000000bd8e2f0b36426d26c8bb3656111bc6ce962b0cb073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611907906141dc565b60405180910390fd5b61191a82826131c9565b5050565b60176020528060005260406000206000915054906101000a900460ff1681565b6000806001600061194d6122ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a019061426e565b60405180910390fd5b611a1e611a156122ff565b85858403612307565b600191505092915050565b6000611a3d611a366122ff565b84846124d0565b6001905092915050565b611a4f6122ff565b73ffffffffffffffffffffffffffffffffffffffff16611a6d6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba90613e23565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4a4da411311bb63fb05ca7ccac438c8b8d4e33e7227d017faefe40e2381f56df60405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b8b6122ff565b73ffffffffffffffffffffffffffffffffffffffff16611ba96116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf690613e23565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60186020528060005260406000206000915054906101000a900460ff1681565b600d60149054906101000a900460ff1681565b611cfa6122ff565b73ffffffffffffffffffffffffffffffffffffffff16611d186116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590613e23565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e0b9190613b31565b60405180910390a25050565b611e1f6122ff565b73ffffffffffffffffffffffffffffffffffffffff16611e3d6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a90613e23565b60405180910390fd5b6005811015611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece90614300565b60405180910390fd5b6103e8611ee2610e6f565b82611eed9190614004565b611ef7919061434f565b60098190555050565b600860019054906101000a900460ff1681565b600a5481565b6000611f236122ff565b73ffffffffffffffffffffffffffffffffffffffff16611f416116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8e90613e23565b60405180910390fd5b620186a0611fa3610e6f565b611fad919061434f565b821015611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe6906143f2565b60405180910390fd5b620186a0611ffb610e6f565b6101f46120089190614004565b612012919061434f565b821115612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204b90614484565b60405180910390fd5b600754821115612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090614516565b60405180910390fd5b8160068190555060019050919050565b60155481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b600061216c6122ff565b73ffffffffffffffffffffffffffffffffffffffff1661218a6116ab565b73ffffffffffffffffffffffffffffffffffffffff16146121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d790613e23565b60405180910390fd5b6000600860016101000a81548160ff0219169083151502179055506001905090565b61220a6122ff565b73ffffffffffffffffffffffffffffffffffffffff166122286116ab565b73ffffffffffffffffffffffffffffffffffffffff161461227e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227590613e23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e4906145a8565b60405180910390fd5b6122f681613103565b50565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236d9061463a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc906146cc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124c39190613b5b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061475e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a5906147f0565b60405180910390fd5b600081036125c7576125c28383600061326a565b6130fe565b600860009054906101000a900460ff1615612c8a576125e46116ab565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561265257506126226116ab565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561268b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126c5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126de5750600560149054906101000a900460ff16155b15612c8957600d60149054906101000a900460ff166127d857601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127985750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ce9061485c565b60405180910390fd5b5b600860019054906101000a900460ff16156129a0576127f56116ab565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561287c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128d457507f000000000000000000000000bd8e2f0b36426d26c8bb3656111bc6ce962b0cb073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561299f5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061295a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295190614914565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a435750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612aea57600a54811115612a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a84906149a6565b60405180910390fd5b600954612a99836112a5565b82612aa49190613e72565b1115612ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adc90614a12565b60405180910390fd5b612c88565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b8d5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bdc57600a54811115612bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bce90614aa4565b60405180910390fd5b612c87565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c8657600954612c39836112a5565b82612c449190613e72565b1115612c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7c90614a12565b60405180910390fd5b5b5b5b5b5b6000612c95306112a5565b905060006006548210159050808015612cba5750600560159054906101000a900460ff165b8015612cd35750600560149054906101000a900460ff16155b8015612d295750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d7f5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dd55750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e19576001600560146101000a81548160ff021916908315150217905550612dfd6134e9565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ecf5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ed957600090505b600081156130ee57601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f3c57506000601154115b15612fd757612f6a6103e8612f5c601154886136c290919063ffffffff16565b6136d890919063ffffffff16565b905060115460135482612f7d9190614004565b612f87919061434f565b60156000828254612f989190613e72565b9250508190555060115460125482612fb09190614004565b612fba919061434f565b60146000828254612fcb9190613e72565b925050819055506130ca565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303257506000600e54115b156130c9576130606103e8613052600e54886136c290919063ffffffff16565b6136d890919063ffffffff16565b9050600e54601054826130739190614004565b61307d919061434f565b6015600082825461308e9190613e72565b92505081905550600e54600f54826130a69190614004565b6130b0919061434f565b601460008282546130c19190613e72565b925050819055505b5b60008111156130df576130de87308361326a565b5b80856130eb9190614ac4565b94505b6130f987878761326a565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d09061475e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333f906147f0565b60405180910390fd5b6133538383836136ee565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156133d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d090614b6a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461346c9190613e72565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134d09190613b5b565b60405180910390a36134e38484846136f3565b50505050565b60006134f4306112a5565b905060006015546014546135089190613e72565b905060008083148061351a5750600082145b15613527575050506136c0565b6007548311156135375760075492505b6000839050600047905061354a826136f8565b600061355f824761393590919063ffffffff16565b9050600061358a8661357c601554856136c290919063ffffffff16565b6136d890919063ffffffff16565b905060006014819055506000601581905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516135e290614bbb565b60006040518083038185875af1925050503d806000811461361f576040519150601f19603f3d011682016040523d82523d6000602084013e613624565b606091505b505080955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161367090614bbb565b60006040518083038185875af1925050503d80600081146136ad576040519150601f19603f3d011682016040523d82523d6000602084013e6136b2565b606091505b505080955050505050505050505b565b600081836136d09190614004565b905092915050565b600081836136e6919061434f565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561371557613714614bd0565b5b6040519080825280602002602001820160405280156137435781602001602082028036833780820191505090505b509050308160008151811061375b5761375a614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613800573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138249190614c43565b8160018151811061383857613837614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061389d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612307565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138ff959493929190614d69565b600060405180830381600087803b15801561391957600080fd5b505af115801561392d573d6000803e3d6000fd5b505050505050565b600081836139439190614ac4565b905092915050565b600080fd5b6000819050919050565b61396381613950565b811461396e57600080fd5b50565b6000813590506139808161395a565b92915050565b6000806040838503121561399d5761399c61394b565b5b60006139ab85828601613971565b92505060206139bc85828601613971565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a005780820151818401526020810190506139e5565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a28826139c6565b613a3281856139d1565b9350613a428185602086016139e2565b613a4b81613a0c565b840191505092915050565b60006020820190508181036000830152613a708184613a1d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613aa382613a78565b9050919050565b613ab381613a98565b8114613abe57600080fd5b50565b600081359050613ad081613aaa565b92915050565b60008060408385031215613aed57613aec61394b565b5b6000613afb85828601613ac1565b9250506020613b0c85828601613971565b9150509250929050565b60008115159050919050565b613b2b81613b16565b82525050565b6000602082019050613b466000830184613b22565b92915050565b613b5581613950565b82525050565b6000602082019050613b706000830184613b4c565b92915050565b6000819050919050565b6000613b9b613b96613b9184613a78565b613b76565b613a78565b9050919050565b6000613bad82613b80565b9050919050565b6000613bbf82613ba2565b9050919050565b613bcf81613bb4565b82525050565b6000602082019050613bea6000830184613bc6565b92915050565b600060208284031215613c0657613c0561394b565b5b6000613c1484828501613971565b91505092915050565b600080600060608486031215613c3657613c3561394b565b5b6000613c4486828701613ac1565b9350506020613c5586828701613ac1565b9250506040613c6686828701613971565b9150509250925092565b613c7981613a98565b82525050565b6000602082019050613c946000830184613c70565b92915050565b600060ff82169050919050565b613cb081613c9a565b82525050565b6000602082019050613ccb6000830184613ca7565b92915050565b600060208284031215613ce757613ce661394b565b5b6000613cf584828501613ac1565b91505092915050565b613d0781613b16565b8114613d1257600080fd5b50565b600081359050613d2481613cfe565b92915050565b60008060408385031215613d4157613d4061394b565b5b6000613d4f85828601613ac1565b9250506020613d6085828601613d15565b9150509250929050565b600060208284031215613d8057613d7f61394b565b5b6000613d8e84828501613d15565b91505092915050565b60008060408385031215613dae57613dad61394b565b5b6000613dbc85828601613ac1565b9250506020613dcd85828601613ac1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e0d6020836139d1565b9150613e1882613dd7565b602082019050919050565b60006020820190508181036000830152613e3c81613e00565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e7d82613950565b9150613e8883613950565b9250828201905080821115613ea057613e9f613e43565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613edc601d836139d1565b9150613ee782613ea6565b602082019050919050565b60006020820190508181036000830152613f0b81613ecf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f5957607f821691505b602082108103613f6c57613f6b613f12565b5b50919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e32250000000000000000000000000000000000602082015250565b6000613fce602f836139d1565b9150613fd982613f72565b604082019050919050565b60006020820190508181036000830152613ffd81613fc1565b9050919050565b600061400f82613950565b915061401a83613950565b925082820261402881613950565b9150828204841483151761403f5761403e613e43565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006140a26028836139d1565b91506140ad82614046565b604082019050919050565b600060208201905081810360008301526140d181614095565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f2073776170546f6b656e734174416d6f756e7400000000000000000000000000602082015250565b60006141346033836139d1565b915061413f826140d8565b604082019050919050565b6000602082019050818103600083015261416381614127565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006141c66039836139d1565b91506141d18261416a565b604082019050919050565b600060208201905081810360008301526141f5816141b9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006142586025836139d1565b9150614263826141fc565b604082019050919050565b600060208201905081810360008301526142878161424b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006142ea6024836139d1565b91506142f58261428e565b604082019050919050565b60006020820190508181036000830152614319816142dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061435a82613950565b915061436583613950565b92508261437557614374614320565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006143dc6035836139d1565b91506143e782614380565b604082019050919050565b6000602082019050818103600083015261440b816143cf565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061446e6034836139d1565b915061447982614412565b604082019050919050565b6000602082019050818103600083015261449d81614461565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178546f6b656e73466f72537761706261636b00000000000000000000602082015250565b60006145006036836139d1565b915061450b826144a4565b604082019050919050565b6000602082019050818103600083015261452f816144f3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145926026836139d1565b915061459d82614536565b604082019050919050565b600060208201905081810360008301526145c181614585565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146246024836139d1565b915061462f826145c8565b604082019050919050565b6000602082019050818103600083015261465381614617565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146b66022836139d1565b91506146c18261465a565b604082019050919050565b600060208201905081810360008301526146e5816146a9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147486025836139d1565b9150614753826146ec565b604082019050919050565b600060208201905081810360008301526147778161473b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147da6023836139d1565b91506147e58261477e565b604082019050919050565b60006020820190508181036000830152614809816147cd565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148466016836139d1565b915061485182614810565b602082019050919050565b6000602082019050818103600083015261487581614839565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006148fe6049836139d1565b91506149098261487c565b606082019050919050565b6000602082019050818103600083015261492d816148f1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006149906035836139d1565b915061499b82614934565b604082019050919050565b600060208201905081810360008301526149bf81614983565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149fc6013836139d1565b9150614a07826149c6565b602082019050919050565b60006020820190508181036000830152614a2b816149ef565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a8e6036836139d1565b9150614a9982614a32565b604082019050919050565b60006020820190508181036000830152614abd81614a81565b9050919050565b6000614acf82613950565b9150614ada83613950565b9250828203905081811115614af257614af1613e43565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614b546026836139d1565b9150614b5f82614af8565b604082019050919050565b60006020820190508181036000830152614b8381614b47565b9050919050565b600081905092915050565b50565b6000614ba5600083614b8a565b9150614bb082614b95565b600082019050919050565b6000614bc682614b98565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c3d81613aaa565b92915050565b600060208284031215614c5957614c5861394b565b5b6000614c6784828501614c2e565b91505092915050565b6000819050919050565b6000614c95614c90614c8b84614c70565b613b76565b613950565b9050919050565b614ca581614c7a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ce081613a98565b82525050565b6000614cf28383614cd7565b60208301905092915050565b6000602082019050919050565b6000614d1682614cab565b614d208185614cb6565b9350614d2b83614cc7565b8060005b83811015614d5c578151614d438882614ce6565b9750614d4e83614cfe565b925050600181019050614d2f565b5085935050505092915050565b600060a082019050614d7e6000830188613b4c565b614d8b6020830187614c9c565b8181036040830152614d9d8186614d0b565b9050614dac6060830185613c70565b614db96080830184613b4c565b969550505050505056fea2646970667358221220a7e0f66d175668a6eacb2d6acda21db71f35ad0480360250592473e17af48cdd64736f6c63430008130033
Deployed Bytecode Sourcemap
24887:16253:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33097:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10710:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12877:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25845:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24962:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11830:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25737:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25956:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31290:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13528:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25065:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11672:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14429:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25808:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25020:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25312:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34838:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32609:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25172:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12001:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21734:103;;;;;;;;;;;;;:::i;:::-;;25918:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29564:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32076:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25618:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25250:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30795:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25771:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29377:112;;;;;;;;;;;;;:::i;:::-;;21083:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25880:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32346:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10929:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33909:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26169:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15147:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12341:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34656:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34417:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26375:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25695:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33599:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31656:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25352:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25429:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30037:639;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25996:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25655:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12579:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25210:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29756:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21992:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25398:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33097:335;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33239:13:::1;33220:16;:32;;;;33280:11;33263:14;:28;;;;33337:14;;33318:16;;:33;;;;:::i;:::-;33302:13;:49;;;;33387:3;33370:13;;:20;;33362:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33097:335:::0;;:::o;10710:100::-;10764:13;10797:5;10790:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10710:100;:::o;12877:169::-;12960:4;12977:39;12986:12;:10;:12::i;:::-;13000:7;13009:6;12977:8;:39::i;:::-;13034:4;13027:11;;12877:169;;;;:::o;25845:28::-;;;;:::o;24962:51::-;;;:::o;11830:108::-;11891:7;11918:12;;11911:19;;11830:108;:::o;25737:27::-;;;;:::o;25956:33::-;;;;:::o;31290:241::-;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31396:1:::1;31386:6;:11;;31364:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;31516:6;31506;:17;;;;:::i;:::-;31483:20;:40;;;;31290:241:::0;:::o;13528:492::-;13668:4;13685:36;13695:6;13703:9;13714:6;13685:9;:36::i;:::-;13734:24;13761:11;:19;13773:6;13761:19;;;;;;;;;;;;;;;:33;13781:12;:10;:12::i;:::-;13761:33;;;;;;;;;;;;;;;;13734:60;;13833:6;13813:16;:26;;13805:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;13920:57;13929:6;13937:12;:10;:12::i;:::-;13970:6;13951:16;:25;13920:8;:57::i;:::-;14008:4;14001:11;;;13528:492;;;;;:::o;25065:53::-;25111:6;25065:53;:::o;11672:93::-;11730:5;11755:2;11748:9;;11672:93;:::o;14429:215::-;14517:4;14534:80;14543:12;:10;:12::i;:::-;14557:7;14603:10;14566:11;:25;14578:12;:10;:12::i;:::-;14566:25;;;;;;;;;;;;;;;:34;14592:7;14566:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14534:8;:80::i;:::-;14632:4;14625:11;;14429:215;;;;:::o;25808:28::-;;;;:::o;25020:38::-;;;:::o;25312:33::-;;;;;;;;;;;;;:::o;34838:119::-;34904:4;34928:12;:21;34941:7;34928:21;;;;;;;;;;;;;;;;;;;;;;;;;34921:28;;34838:119;;;:::o;32609:328::-;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32749:13:::1;32731:15;:31;;;;32789:11;32773:13;:27;;;;32844:13;;32826:15;;:31;;;;:::i;:::-;32811:12;:46;;;;32892:3;32876:12;;:19;;32868:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32609:328:::0;;:::o;25172:31::-;;;;;;;;;;;;;:::o;12001:127::-;12075:7;12102:9;:18;12112:7;12102:18;;;;;;;;;;;;;;;;12095:25;;12001:127;;;:::o;21734:103::-;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21799:30:::1;21826:1;21799:18;:30::i;:::-;21734:103::o:0;25918:29::-;;;;:::o;29564:121::-;29616:4;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29650:5:::1;29633:14;;:22;;;;;;;;;;;;;;;;;;29673:4;29666:11;;29564:121:::0;:::o;32076:152::-;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32216:4:::1;32189:16;:24;32206:6;32189:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;32076:152:::0;;:::o;25618:30::-;;;;;;;;;;;;;:::o;25250:35::-;;;;:::o;30795:337::-;30905:4;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30962:18:::1;;30949:9;:31;;30927:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;31093:9;31070:20;:32;;;;31120:4;31113:11;;30795:337:::0;;;:::o;25771:30::-;;;;:::o;29377:112::-;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29448:4:::1;29432:13;;:20;;;;;;;;;;;;;;;;;;29477:4;29463:11;;:18;;;;;;;;;;;;;;;;;;29377:112::o:0;21083:87::-;21129:7;21156:6;;;;;;;;;;;21149:13;;21083:87;:::o;25880:31::-;;;;:::o;32346:100::-;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32431:7:::1;32417:11;;:21;;;;;;;;;;;;;;;;;;32346:100:::0;:::o;10929:104::-;10985:13;11018:7;11011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10929:104;:::o;33909:304::-;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34053:13:::1;34045:21;;:4;:21;;::::0;34023:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34164:41;34193:4;34199:5;34164:28;:41::i;:::-;33909:304:::0;;:::o;26169:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15147:413::-;15240:4;15257:24;15284:11;:25;15296:12;:10;:12::i;:::-;15284:25;;;;;;;;;;;;;;;:34;15310:7;15284:34;;;;;;;;;;;;;;;;15257:61;;15357:15;15337:16;:35;;15329:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15450:67;15459:12;:10;:12::i;:::-;15473:7;15501:15;15482:16;:34;15450:8;:67::i;:::-;15548:4;15541:11;;;15147:413;;;;:::o;12341:175::-;12427:4;12444:42;12454:12;:10;:12::i;:::-;12468:9;12479:6;12444:9;:42::i;:::-;12504:4;12497:11;;12341:175;;;;:::o;34656:174::-;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34770:14:::1;;;;;;;;;;;34737:48;;34759:9;34737:48;;;;;;;;;;;;34813:9;34796:14;;:26;;;;;;;;;;;;;;;;;;34656:174:::0;:::o;34417:231::-;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34577:15:::1;;;;;;;;;;;34534:59;;34557:18;34534:59;;;;;;;;;;;;34622:18;34604:15;;:36;;;;;;;;;;;;;;;;;;34417:231:::0;:::o;26375:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;25695:33::-;;;;;;;;;;;;;:::o;33599:175::-;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33708:8:::1;33684:12;:21;33697:7;33684:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;33748:7;33732:34;;;33757:8;33732:34;;;;;;:::i;:::-;;;;;;;;33599:175:::0;;:::o;31656:232::-;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31765:1:::1;31755:6;:11;;31733:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;31876:4;31862:13;:11;:13::i;:::-;31853:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;31841:9;:39;;;;31656:232:::0;:::o;25352:39::-;;;;;;;;;;;;;:::o;25429:35::-;;;;:::o;30037:639::-;30145:4;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30217:6:::1;30202:13;:11;:13::i;:::-;:21;;;;:::i;:::-;30189:9;:34;;30167:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;30371:6;30356:13;:11;:13::i;:::-;30350:3;:19;;;;:::i;:::-;:27;;;;:::i;:::-;30337:9;:40;;30315:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30503:20;;30490:9;:33;;30468:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;30637:9;30616:18;:30;;;;30664:4;30657:11;;30037:639:::0;;;:::o;25996:31::-;;;;:::o;25655:29::-;;;;;;;;;;;;;:::o;12579:151::-;12668:7;12695:11;:18;12707:5;12695:18;;;;;;;;;;;;;;;:27;12714:7;12695:27;;;;;;;;;;;;;;;;12688:34;;12579:151;;;;:::o;25210:33::-;;;;:::o;29756:135::-;29816:4;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29856:5:::1;29833:20;;:28;;;;;;;;;;;;;;;;;;29879:4;29872:11;;29756:135:::0;:::o;21992:201::-;21314:12;:10;:12::i;:::-;21303:23;;:7;:5;:7::i;:::-;:23;;;21295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22101:1:::1;22081:22;;:8;:22;;::::0;22073:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22157:28;22176:8;22157:18;:28::i;:::-;21992:201:::0;:::o;25398:24::-;;;;:::o;9716:98::-;9769:7;9796:10;9789:17;;9716:98;:::o;18831:380::-;18984:1;18967:19;;:5;:19;;;18959:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19065:1;19046:21;;:7;:21;;;19038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19149:6;19119:11;:18;19131:5;19119:18;;;;;;;;;;;;;;;:27;19138:7;19119:27;;;;;;;;;;;;;;;:36;;;;19187:7;19171:32;;19180:5;19171:32;;;19196:6;19171:32;;;;;;:::i;:::-;;;;;;;;18831:380;;;:::o;34965:4486::-;35113:1;35097:18;;:4;:18;;;35089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35190:1;35176:16;;:2;:16;;;35168:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35259:1;35249:6;:11;35245:93;;35277:28;35293:4;35299:2;35303:1;35277:15;:28::i;:::-;35320:7;;35245:93;35354:14;;;;;;;;;;;35350:2428;;;35415:7;:5;:7::i;:::-;35407:15;;:4;:15;;;;:49;;;;;35449:7;:5;:7::i;:::-;35443:13;;:2;:13;;;;35407:49;:86;;;;;35491:1;35477:16;;:2;:16;;;;35407:86;:128;;;;;35528:6;35514:21;;:2;:21;;;;35407:128;:158;;;;;35557:8;;;;;;;;;;;35556:9;35407:158;35385:2382;;;35605:13;;;;;;;;;;;35600:209;;35677:12;:18;35690:4;35677:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;35699:12;:16;35712:2;35699:16;;;;;;;;;;;;;;;;;;;;;;;;;35677:38;35643:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;35600:209;35965:20;;;;;;;;;;;35961:641;;;36046:7;:5;:7::i;:::-;36040:13;;:2;:13;;;;:72;;;;;36096:15;36082:30;;:2;:30;;;;36040:72;:129;;;;;36155:13;36141:28;;:2;:28;;;;36040:129;36010:573;;;36333:12;36258:28;:39;36287:9;36258:39;;;;;;;;;;;;;;;;:87;36220:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;36547:12;36505:28;:39;36534:9;36505:39;;;;;;;;;;;;;;;:54;;;;36010:573;35961:641;36676:25;:31;36702:4;36676:31;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;;36733:16;:20;36750:2;36733:20;;;;;;;;;;;;;;;;;;;;;;;;;36732:21;36676:77;36650:1102;;;36840:20;;36830:6;:30;;36796:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;37048:9;;37031:13;37041:2;37031:9;:13::i;:::-;37022:6;:22;;;;:::i;:::-;:35;;36988:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;36650:1102;;;37226:25;:29;37252:2;37226:29;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;;37281:16;:22;37298:4;37281:22;;;;;;;;;;;;;;;;;;;;;;;;;37280:23;37226:77;37200:552;;;37390:20;;37380:6;:30;;37346:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;37200:552;;;37547:16;:20;37564:2;37547:20;;;;;;;;;;;;;;;;;;;;;;;;;37542:210;;37652:9;;37635:13;37645:2;37635:9;:13::i;:::-;37626:6;:22;;;;:::i;:::-;:35;;37592:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37542:210;37200:552;36650:1102;35385:2382;35350:2428;37790:28;37821:24;37839:4;37821:9;:24::i;:::-;37790:55;;37858:12;37897:18;;37873:20;:42;;37858:57;;37946:7;:35;;;;;37970:11;;;;;;;;;;;37946:35;:61;;;;;37999:8;;;;;;;;;;;37998:9;37946:61;:110;;;;;38025:25;:31;38051:4;38025:31;;;;;;;;;;;;;;;;;;;;;;;;;38024:32;37946:110;:146;;;;;38074:12;:18;38087:4;38074:18;;;;;;;;;;;;;;;;;;;;;;;;;38073:19;37946:146;:180;;;;;38110:12;:16;38123:2;38110:16;;;;;;;;;;;;;;;;;;;;;;;;;38109:17;37946:180;37928:312;;;38164:4;38153:8;;:15;;;;;;;;;;;;;;;;;;38185:10;:8;:10::i;:::-;38223:5;38212:8;;:16;;;;;;;;;;;;;;;;;;37928:312;38252:12;38268:8;;;;;;;;;;;38267:9;38252:24;;38378:12;:18;38391:4;38378:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;38400:12;:16;38413:2;38400:16;;;;;;;;;;;;;;;;;;;;;;;;;38378:38;38374:86;;;38443:5;38433:15;;38374:86;38472:12;38577:7;38573:825;;;38629:25;:29;38655:2;38629:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38678:1;38662:13;;:17;38629:50;38625:624;;;38707:35;38737:4;38707:25;38718:13;;38707:6;:10;;:25;;;;:::i;:::-;:29;;:35;;;;:::i;:::-;38700:42;;38807:13;;38789:14;;38782:4;:21;;;;:::i;:::-;38781:39;;;;:::i;:::-;38761:16;;:59;;;;;;;:::i;:::-;;;;;;;;38889:13;;38869:16;;38862:4;:23;;;;:::i;:::-;38861:41;;;;:::i;:::-;38839:18;;:63;;;;;;;:::i;:::-;;;;;;;;38625:624;;;38964:25;:31;38990:4;38964:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39014:1;38999:12;;:16;38964:51;38960:289;;;39043:34;39072:4;39043:24;39054:12;;39043:6;:10;;:24;;;;:::i;:::-;:28;;:34;;;;:::i;:::-;39036:41;;39141:12;;39124:13;;39117:4;:20;;;;:::i;:::-;39116:37;;;;:::i;:::-;39096:16;;:57;;;;;;;:::i;:::-;;;;;;;;39221:12;;39202:15;;39195:4;:22;;;;:::i;:::-;39194:39;;;;:::i;:::-;39172:18;;:61;;;;;;;:::i;:::-;;;;;;;;38960:289;38625:624;39276:1;39269:4;:8;39265:91;;;39298:42;39314:4;39328;39335;39298:15;:42::i;:::-;39265:91;39382:4;39372:14;;;;;:::i;:::-;;;38573:825;39410:33;39426:4;39432:2;39436:6;39410:15;:33::i;:::-;35078:4373;;;;34965:4486;;;;:::o;22353:191::-;22427:16;22446:6;;;;;;;;;;;22427:25;;22472:8;22463:6;;:17;;;;;;;;;;;;;;;;;;22527:8;22496:40;;22517:8;22496:40;;;;;;;;;;;;22416:128;22353:191;:::o;34221:188::-;34338:5;34304:25;:31;34330:4;34304:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34395:5;34361:40;;34389:4;34361:40;;;;;;;;;;;;34221:188;;:::o;16050:733::-;16208:1;16190:20;;:6;:20;;;16182:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16292:1;16271:23;;:9;:23;;;16263:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16347:47;16368:6;16376:9;16387:6;16347:20;:47::i;:::-;16407:21;16431:9;:17;16441:6;16431:17;;;;;;;;;;;;;;;;16407:41;;16484:6;16467:13;:23;;16459:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16605:6;16589:13;:22;16569:9;:17;16579:6;16569:17;;;;;;;;;;;;;;;:42;;;;16657:6;16633:9;:20;16643:9;16633:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16698:9;16681:35;;16690:6;16681:35;;;16709:6;16681:35;;;;;;:::i;:::-;;;;;;;;16729:46;16749:6;16757:9;16768:6;16729:19;:46::i;:::-;16171:612;16050:733;;;:::o;40058:1077::-;40097:23;40123:24;40141:4;40123:9;:24::i;:::-;40097:50;;40158:25;40220:16;;40186:18;;:50;;;;:::i;:::-;40158:78;;40247:12;40295:1;40276:15;:20;:46;;;;40321:1;40300:17;:22;40276:46;40272:85;;;40339:7;;;;;40272:85;40391:20;;40373:15;:38;40369:109;;;40446:20;;40428:38;;40369:109;40541:26;40570:15;40541:44;;40598:25;40626:21;40598:49;;40660:36;40677:18;40660:16;:36::i;:::-;40709:18;40730:44;40756:17;40730:21;:25;;:44;;;;:::i;:::-;40709:65;;40787:21;40811:55;40848:17;40811:32;40826:16;;40811:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;40787:79;;40900:1;40879:18;:22;;;;40931:1;40912:16;:20;;;;40967:14;;;;;;;;;;;40959:28;;40995:13;40959:54;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40945:68;;;;;41048:15;;;;;;;;;;;41040:29;;41091:21;41040:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41026:101;;;;;40086:1049;;;;;;;40058:1077;:::o;3159:98::-;3217:7;3248:1;3244;:5;;;;:::i;:::-;3237:12;;3159:98;;;;:::o;3558:::-;3616:7;3647:1;3643;:5;;;;:::i;:::-;3636:12;;3558:98;;;;:::o;19811:125::-;;;;:::o;20540:124::-;;;;:::o;39459:589::-;39585:21;39623:1;39609:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39585:40;;39654:4;39636;39641:1;39636:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39680:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39670:4;39675:1;39670:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39715:62;39732:4;39747:15;39765:11;39715:8;:62::i;:::-;39816:15;:66;;;39897:11;39923:1;39967:4;39994;40014:15;39816:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39514:534;39459:589;:::o;2802:98::-;2860:7;2891:1;2887;:5;;;;:::i;:::-;2880:12;;2802:98;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:118::-;4013:24;4031:5;4013:24;:::i;:::-;4008:3;4001:37;3926:118;;:::o;4050:222::-;4143:4;4181:2;4170:9;4166:18;4158:26;;4194:71;4262:1;4251:9;4247:17;4238:6;4194:71;:::i;:::-;4050:222;;;;:::o;4278:60::-;4306:3;4327:5;4320:12;;4278:60;;;:::o;4344:142::-;4394:9;4427:53;4445:34;4454:24;4472:5;4454:24;:::i;:::-;4445:34;:::i;:::-;4427:53;:::i;:::-;4414:66;;4344:142;;;:::o;4492:126::-;4542:9;4575:37;4606:5;4575:37;:::i;:::-;4562:50;;4492:126;;;:::o;4624:153::-;4701:9;4734:37;4765:5;4734:37;:::i;:::-;4721:50;;4624:153;;;:::o;4783:185::-;4897:64;4955:5;4897:64;:::i;:::-;4892:3;4885:77;4783:185;;:::o;4974:276::-;5094:4;5132:2;5121:9;5117:18;5109:26;;5145:98;5240:1;5229:9;5225:17;5216:6;5145:98;:::i;:::-;4974:276;;;;:::o;5256:329::-;5315:6;5364:2;5352:9;5343:7;5339:23;5335:32;5332:119;;;5370:79;;:::i;:::-;5332:119;5490:1;5515:53;5560:7;5551:6;5540:9;5536:22;5515:53;:::i;:::-;5505:63;;5461:117;5256:329;;;;:::o;5591:619::-;5668:6;5676;5684;5733:2;5721:9;5712:7;5708:23;5704:32;5701:119;;;5739:79;;:::i;:::-;5701:119;5859:1;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5830:117;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6114:2;6140:53;6185:7;6176:6;6165:9;6161:22;6140:53;:::i;:::-;6130:63;;6085:118;5591:619;;;;;:::o;6216:118::-;6303:24;6321:5;6303:24;:::i;:::-;6298:3;6291:37;6216:118;;:::o;6340:222::-;6433:4;6471:2;6460:9;6456:18;6448:26;;6484:71;6552:1;6541:9;6537:17;6528:6;6484:71;:::i;:::-;6340:222;;;;:::o;6568:86::-;6603:7;6643:4;6636:5;6632:16;6621:27;;6568:86;;;:::o;6660:112::-;6743:22;6759:5;6743:22;:::i;:::-;6738:3;6731:35;6660:112;;:::o;6778:214::-;6867:4;6905:2;6894:9;6890:18;6882:26;;6918:67;6982:1;6971:9;6967:17;6958:6;6918:67;:::i;:::-;6778:214;;;;:::o;6998:329::-;7057:6;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;6998:329;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:468::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7842:1;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7813:117;7969:2;7995:50;8037:7;8028:6;8017:9;8013:22;7995:50;:::i;:::-;7985:60;;7940:115;7594:468;;;;;:::o;8068:323::-;8124:6;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8270:114;8068:323;;;;:::o;8397:474::-;8465:6;8473;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:53;8718:7;8709:6;8698:9;8694:22;8673:53;:::i;:::-;8663:63;;8619:117;8775:2;8801:53;8846:7;8837:6;8826:9;8822:22;8801:53;:::i;:::-;8791:63;;8746:118;8397:474;;;;;:::o;8877:182::-;9017:34;9013:1;9005:6;9001:14;8994:58;8877:182;:::o;9065:366::-;9207:3;9228:67;9292:2;9287:3;9228:67;:::i;:::-;9221:74;;9304:93;9393:3;9304:93;:::i;:::-;9422:2;9417:3;9413:12;9406:19;;9065:366;;;:::o;9437:419::-;9603:4;9641:2;9630:9;9626:18;9618:26;;9690:9;9684:4;9680:20;9676:1;9665:9;9661:17;9654:47;9718:131;9844:4;9718:131;:::i;:::-;9710:139;;9437:419;;;:::o;9862:180::-;9910:77;9907:1;9900:88;10007:4;10004:1;9997:15;10031:4;10028:1;10021:15;10048:191;10088:3;10107:20;10125:1;10107:20;:::i;:::-;10102:25;;10141:20;10159:1;10141:20;:::i;:::-;10136:25;;10184:1;10181;10177:9;10170:16;;10205:3;10202:1;10199:10;10196:36;;;10212:18;;:::i;:::-;10196:36;10048:191;;;;:::o;10245:179::-;10385:31;10381:1;10373:6;10369:14;10362:55;10245:179;:::o;10430:366::-;10572:3;10593:67;10657:2;10652:3;10593:67;:::i;:::-;10586:74;;10669:93;10758:3;10669:93;:::i;:::-;10787:2;10782:3;10778:12;10771:19;;10430:366;;;:::o;10802:419::-;10968:4;11006:2;10995:9;10991:18;10983:26;;11055:9;11049:4;11045:20;11041:1;11030:9;11026:17;11019:47;11083:131;11209:4;11083:131;:::i;:::-;11075:139;;10802:419;;;:::o;11227:180::-;11275:77;11272:1;11265:88;11372:4;11369:1;11362:15;11396:4;11393:1;11386:15;11413:320;11457:6;11494:1;11488:4;11484:12;11474:22;;11541:1;11535:4;11531:12;11562:18;11552:81;;11618:4;11610:6;11606:17;11596:27;;11552:81;11680:2;11672:6;11669:14;11649:18;11646:38;11643:84;;11699:18;;:::i;:::-;11643:84;11464:269;11413:320;;;:::o;11739:234::-;11879:34;11875:1;11867:6;11863:14;11856:58;11948:17;11943:2;11935:6;11931:15;11924:42;11739:234;:::o;11979:366::-;12121:3;12142:67;12206:2;12201:3;12142:67;:::i;:::-;12135:74;;12218:93;12307:3;12218:93;:::i;:::-;12336:2;12331:3;12327:12;12320:19;;11979:366;;;:::o;12351:419::-;12517:4;12555:2;12544:9;12540:18;12532:26;;12604:9;12598:4;12594:20;12590:1;12579:9;12575:17;12568:47;12632:131;12758:4;12632:131;:::i;:::-;12624:139;;12351:419;;;:::o;12776:410::-;12816:7;12839:20;12857:1;12839:20;:::i;:::-;12834:25;;12873:20;12891:1;12873:20;:::i;:::-;12868:25;;12928:1;12925;12921:9;12950:30;12968:11;12950:30;:::i;:::-;12939:41;;13129:1;13120:7;13116:15;13113:1;13110:22;13090:1;13083:9;13063:83;13040:139;;13159:18;;:::i;:::-;13040:139;12824:362;12776:410;;;;:::o;13192:227::-;13332:34;13328:1;13320:6;13316:14;13309:58;13401:10;13396:2;13388:6;13384:15;13377:35;13192:227;:::o;13425:366::-;13567:3;13588:67;13652:2;13647:3;13588:67;:::i;:::-;13581:74;;13664:93;13753:3;13664:93;:::i;:::-;13782:2;13777:3;13773:12;13766:19;;13425:366;;;:::o;13797:419::-;13963:4;14001:2;13990:9;13986:18;13978:26;;14050:9;14044:4;14040:20;14036:1;14025:9;14021:17;14014:47;14078:131;14204:4;14078:131;:::i;:::-;14070:139;;13797:419;;;:::o;14222:238::-;14362:34;14358:1;14350:6;14346:14;14339:58;14431:21;14426:2;14418:6;14414:15;14407:46;14222:238;:::o;14466:366::-;14608:3;14629:67;14693:2;14688:3;14629:67;:::i;:::-;14622:74;;14705:93;14794:3;14705:93;:::i;:::-;14823:2;14818:3;14814:12;14807:19;;14466:366;;;:::o;14838:419::-;15004:4;15042:2;15031:9;15027:18;15019:26;;15091:9;15085:4;15081:20;15077:1;15066:9;15062:17;15055:47;15119:131;15245:4;15119:131;:::i;:::-;15111:139;;14838:419;;;:::o;15263:244::-;15403:34;15399:1;15391:6;15387:14;15380:58;15472:27;15467:2;15459:6;15455:15;15448:52;15263:244;:::o;15513:366::-;15655:3;15676:67;15740:2;15735:3;15676:67;:::i;:::-;15669:74;;15752:93;15841:3;15752:93;:::i;:::-;15870:2;15865:3;15861:12;15854:19;;15513:366;;;:::o;15885:419::-;16051:4;16089:2;16078:9;16074:18;16066:26;;16138:9;16132:4;16128:20;16124:1;16113:9;16109:17;16102:47;16166:131;16292:4;16166:131;:::i;:::-;16158:139;;15885:419;;;:::o;16310:224::-;16450:34;16446:1;16438:6;16434:14;16427:58;16519:7;16514:2;16506:6;16502:15;16495:32;16310:224;:::o;16540:366::-;16682:3;16703:67;16767:2;16762:3;16703:67;:::i;:::-;16696:74;;16779:93;16868:3;16779:93;:::i;:::-;16897:2;16892:3;16888:12;16881:19;;16540:366;;;:::o;16912:419::-;17078:4;17116:2;17105:9;17101:18;17093:26;;17165:9;17159:4;17155:20;17151:1;17140:9;17136:17;17129:47;17193:131;17319:4;17193:131;:::i;:::-;17185:139;;16912:419;;;:::o;17337:223::-;17477:34;17473:1;17465:6;17461:14;17454:58;17546:6;17541:2;17533:6;17529:15;17522:31;17337:223;:::o;17566:366::-;17708:3;17729:67;17793:2;17788:3;17729:67;:::i;:::-;17722:74;;17805:93;17894:3;17805:93;:::i;:::-;17923:2;17918:3;17914:12;17907:19;;17566:366;;;:::o;17938:419::-;18104:4;18142:2;18131:9;18127:18;18119:26;;18191:9;18185:4;18181:20;18177:1;18166:9;18162:17;18155:47;18219:131;18345:4;18219:131;:::i;:::-;18211:139;;17938:419;;;:::o;18363:180::-;18411:77;18408:1;18401:88;18508:4;18505:1;18498:15;18532:4;18529:1;18522:15;18549:185;18589:1;18606:20;18624:1;18606:20;:::i;:::-;18601:25;;18640:20;18658:1;18640:20;:::i;:::-;18635:25;;18679:1;18669:35;;18684:18;;:::i;:::-;18669:35;18726:1;18723;18719:9;18714:14;;18549:185;;;;:::o;18740:240::-;18880:34;18876:1;18868:6;18864:14;18857:58;18949:23;18944:2;18936:6;18932:15;18925:48;18740:240;:::o;18986:366::-;19128:3;19149:67;19213:2;19208:3;19149:67;:::i;:::-;19142:74;;19225:93;19314:3;19225:93;:::i;:::-;19343:2;19338:3;19334:12;19327:19;;18986:366;;;:::o;19358:419::-;19524:4;19562:2;19551:9;19547:18;19539:26;;19611:9;19605:4;19601:20;19597:1;19586:9;19582:17;19575:47;19639:131;19765:4;19639:131;:::i;:::-;19631:139;;19358:419;;;:::o;19783:239::-;19923:34;19919:1;19911:6;19907:14;19900:58;19992:22;19987:2;19979:6;19975:15;19968:47;19783:239;:::o;20028:366::-;20170:3;20191:67;20255:2;20250:3;20191:67;:::i;:::-;20184:74;;20267:93;20356:3;20267:93;:::i;:::-;20385:2;20380:3;20376:12;20369:19;;20028:366;;;:::o;20400:419::-;20566:4;20604:2;20593:9;20589:18;20581:26;;20653:9;20647:4;20643:20;20639:1;20628:9;20624:17;20617:47;20681:131;20807:4;20681:131;:::i;:::-;20673:139;;20400:419;;;:::o;20825:241::-;20965:34;20961:1;20953:6;20949:14;20942:58;21034:24;21029:2;21021:6;21017:15;21010:49;20825:241;:::o;21072:366::-;21214:3;21235:67;21299:2;21294:3;21235:67;:::i;:::-;21228:74;;21311:93;21400:3;21311:93;:::i;:::-;21429:2;21424:3;21420:12;21413:19;;21072:366;;;:::o;21444:419::-;21610:4;21648:2;21637:9;21633:18;21625:26;;21697:9;21691:4;21687:20;21683:1;21672:9;21668:17;21661:47;21725:131;21851:4;21725:131;:::i;:::-;21717:139;;21444:419;;;:::o;21869:225::-;22009:34;22005:1;21997:6;21993:14;21986:58;22078:8;22073:2;22065:6;22061:15;22054:33;21869:225;:::o;22100:366::-;22242:3;22263:67;22327:2;22322:3;22263:67;:::i;:::-;22256:74;;22339:93;22428:3;22339:93;:::i;:::-;22457:2;22452:3;22448:12;22441:19;;22100:366;;;:::o;22472:419::-;22638:4;22676:2;22665:9;22661:18;22653:26;;22725:9;22719:4;22715:20;22711:1;22700:9;22696:17;22689:47;22753:131;22879:4;22753:131;:::i;:::-;22745:139;;22472:419;;;:::o;22897:223::-;23037:34;23033:1;23025:6;23021:14;23014:58;23106:6;23101:2;23093:6;23089:15;23082:31;22897:223;:::o;23126:366::-;23268:3;23289:67;23353:2;23348:3;23289:67;:::i;:::-;23282:74;;23365:93;23454:3;23365:93;:::i;:::-;23483:2;23478:3;23474:12;23467:19;;23126:366;;;:::o;23498:419::-;23664:4;23702:2;23691:9;23687:18;23679:26;;23751:9;23745:4;23741:20;23737:1;23726:9;23722:17;23715:47;23779:131;23905:4;23779:131;:::i;:::-;23771:139;;23498:419;;;:::o;23923:221::-;24063:34;24059:1;24051:6;24047:14;24040:58;24132:4;24127:2;24119:6;24115:15;24108:29;23923:221;:::o;24150:366::-;24292:3;24313:67;24377:2;24372:3;24313:67;:::i;:::-;24306:74;;24389:93;24478:3;24389:93;:::i;:::-;24507:2;24502:3;24498:12;24491:19;;24150:366;;;:::o;24522:419::-;24688:4;24726:2;24715:9;24711:18;24703:26;;24775:9;24769:4;24765:20;24761:1;24750:9;24746:17;24739:47;24803:131;24929:4;24803:131;:::i;:::-;24795:139;;24522:419;;;:::o;24947:224::-;25087:34;25083:1;25075:6;25071:14;25064:58;25156:7;25151:2;25143:6;25139:15;25132:32;24947:224;:::o;25177:366::-;25319:3;25340:67;25404:2;25399:3;25340:67;:::i;:::-;25333:74;;25416:93;25505:3;25416:93;:::i;:::-;25534:2;25529:3;25525:12;25518:19;;25177:366;;;:::o;25549:419::-;25715:4;25753:2;25742:9;25738:18;25730:26;;25802:9;25796:4;25792:20;25788:1;25777:9;25773:17;25766:47;25830:131;25956:4;25830:131;:::i;:::-;25822:139;;25549:419;;;:::o;25974:222::-;26114:34;26110:1;26102:6;26098:14;26091:58;26183:5;26178:2;26170:6;26166:15;26159:30;25974:222;:::o;26202:366::-;26344:3;26365:67;26429:2;26424:3;26365:67;:::i;:::-;26358:74;;26441:93;26530:3;26441:93;:::i;:::-;26559:2;26554:3;26550:12;26543:19;;26202:366;;;:::o;26574:419::-;26740:4;26778:2;26767:9;26763:18;26755:26;;26827:9;26821:4;26817:20;26813:1;26802:9;26798:17;26791:47;26855:131;26981:4;26855:131;:::i;:::-;26847:139;;26574:419;;;:::o;26999:172::-;27139:24;27135:1;27127:6;27123:14;27116:48;26999:172;:::o;27177:366::-;27319:3;27340:67;27404:2;27399:3;27340:67;:::i;:::-;27333:74;;27416:93;27505:3;27416:93;:::i;:::-;27534:2;27529:3;27525:12;27518:19;;27177:366;;;:::o;27549:419::-;27715:4;27753:2;27742:9;27738:18;27730:26;;27802:9;27796:4;27792:20;27788:1;27777:9;27773:17;27766:47;27830:131;27956:4;27830:131;:::i;:::-;27822:139;;27549:419;;;:::o;27974:297::-;28114:34;28110:1;28102:6;28098:14;28091:58;28183:34;28178:2;28170:6;28166:15;28159:59;28252:11;28247:2;28239:6;28235:15;28228:36;27974:297;:::o;28277:366::-;28419:3;28440:67;28504:2;28499:3;28440:67;:::i;:::-;28433:74;;28516:93;28605:3;28516:93;:::i;:::-;28634:2;28629:3;28625:12;28618:19;;28277:366;;;:::o;28649:419::-;28815:4;28853:2;28842:9;28838:18;28830:26;;28902:9;28896:4;28892:20;28888:1;28877:9;28873:17;28866:47;28930:131;29056:4;28930:131;:::i;:::-;28922:139;;28649:419;;;:::o;29074:240::-;29214:34;29210:1;29202:6;29198:14;29191:58;29283:23;29278:2;29270:6;29266:15;29259:48;29074:240;:::o;29320:366::-;29462:3;29483:67;29547:2;29542:3;29483:67;:::i;:::-;29476:74;;29559:93;29648:3;29559:93;:::i;:::-;29677:2;29672:3;29668:12;29661:19;;29320:366;;;:::o;29692:419::-;29858:4;29896:2;29885:9;29881:18;29873:26;;29945:9;29939:4;29935:20;29931:1;29920:9;29916:17;29909:47;29973:131;30099:4;29973:131;:::i;:::-;29965:139;;29692:419;;;:::o;30117:169::-;30257:21;30253:1;30245:6;30241:14;30234:45;30117:169;:::o;30292:366::-;30434:3;30455:67;30519:2;30514:3;30455:67;:::i;:::-;30448:74;;30531:93;30620:3;30531:93;:::i;:::-;30649:2;30644:3;30640:12;30633:19;;30292:366;;;:::o;30664:419::-;30830:4;30868:2;30857:9;30853:18;30845:26;;30917:9;30911:4;30907:20;30903:1;30892:9;30888:17;30881:47;30945:131;31071:4;30945:131;:::i;:::-;30937:139;;30664:419;;;:::o;31089:241::-;31229:34;31225:1;31217:6;31213:14;31206:58;31298:24;31293:2;31285:6;31281:15;31274:49;31089:241;:::o;31336:366::-;31478:3;31499:67;31563:2;31558:3;31499:67;:::i;:::-;31492:74;;31575:93;31664:3;31575:93;:::i;:::-;31693:2;31688:3;31684:12;31677:19;;31336:366;;;:::o;31708:419::-;31874:4;31912:2;31901:9;31897:18;31889:26;;31961:9;31955:4;31951:20;31947:1;31936:9;31932:17;31925:47;31989:131;32115:4;31989:131;:::i;:::-;31981:139;;31708:419;;;:::o;32133:194::-;32173:4;32193:20;32211:1;32193:20;:::i;:::-;32188:25;;32227:20;32245:1;32227:20;:::i;:::-;32222:25;;32271:1;32268;32264:9;32256:17;;32295:1;32289:4;32286:11;32283:37;;;32300:18;;:::i;:::-;32283:37;32133:194;;;;:::o;32333:225::-;32473:34;32469:1;32461:6;32457:14;32450:58;32542:8;32537:2;32529:6;32525:15;32518:33;32333:225;:::o;32564:366::-;32706:3;32727:67;32791:2;32786:3;32727:67;:::i;:::-;32720:74;;32803:93;32892:3;32803:93;:::i;:::-;32921:2;32916:3;32912:12;32905:19;;32564:366;;;:::o;32936:419::-;33102:4;33140:2;33129:9;33125:18;33117:26;;33189:9;33183:4;33179:20;33175:1;33164:9;33160:17;33153:47;33217:131;33343:4;33217:131;:::i;:::-;33209:139;;32936:419;;;:::o;33361:147::-;33462:11;33499:3;33484:18;;33361:147;;;;:::o;33514:114::-;;:::o;33634:398::-;33793:3;33814:83;33895:1;33890:3;33814:83;:::i;:::-;33807:90;;33906:93;33995:3;33906:93;:::i;:::-;34024:1;34019:3;34015:11;34008:18;;33634:398;;;:::o;34038:379::-;34222:3;34244:147;34387:3;34244:147;:::i;:::-;34237:154;;34408:3;34401:10;;34038:379;;;:::o;34423:180::-;34471:77;34468:1;34461:88;34568:4;34565:1;34558:15;34592:4;34589:1;34582:15;34609:180;34657:77;34654:1;34647:88;34754:4;34751:1;34744:15;34778:4;34775:1;34768:15;34795:143;34852:5;34883:6;34877:13;34868:22;;34899:33;34926:5;34899:33;:::i;:::-;34795:143;;;;:::o;34944:351::-;35014:6;35063:2;35051:9;35042:7;35038:23;35034:32;35031:119;;;35069:79;;:::i;:::-;35031:119;35189:1;35214:64;35270:7;35261:6;35250:9;35246:22;35214:64;:::i;:::-;35204:74;;35160:128;34944:351;;;;:::o;35301:85::-;35346:7;35375:5;35364:16;;35301:85;;;:::o;35392:158::-;35450:9;35483:61;35501:42;35510:32;35536:5;35510:32;:::i;:::-;35501:42;:::i;:::-;35483:61;:::i;:::-;35470:74;;35392:158;;;:::o;35556:147::-;35651:45;35690:5;35651:45;:::i;:::-;35646:3;35639:58;35556:147;;:::o;35709:114::-;35776:6;35810:5;35804:12;35794:22;;35709:114;;;:::o;35829:184::-;35928:11;35962:6;35957:3;35950:19;36002:4;35997:3;35993:14;35978:29;;35829:184;;;;:::o;36019:132::-;36086:4;36109:3;36101:11;;36139:4;36134:3;36130:14;36122:22;;36019:132;;;:::o;36157:108::-;36234:24;36252:5;36234:24;:::i;:::-;36229:3;36222:37;36157:108;;:::o;36271:179::-;36340:10;36361:46;36403:3;36395:6;36361:46;:::i;:::-;36439:4;36434:3;36430:14;36416:28;;36271:179;;;;:::o;36456:113::-;36526:4;36558;36553:3;36549:14;36541:22;;36456:113;;;:::o;36605:732::-;36724:3;36753:54;36801:5;36753:54;:::i;:::-;36823:86;36902:6;36897:3;36823:86;:::i;:::-;36816:93;;36933:56;36983:5;36933:56;:::i;:::-;37012:7;37043:1;37028:284;37053:6;37050:1;37047:13;37028:284;;;37129:6;37123:13;37156:63;37215:3;37200:13;37156:63;:::i;:::-;37149:70;;37242:60;37295:6;37242:60;:::i;:::-;37232:70;;37088:224;37075:1;37072;37068:9;37063:14;;37028:284;;;37032:14;37328:3;37321:10;;36729:608;;;36605:732;;;;:::o;37343:831::-;37606:4;37644:3;37633:9;37629:19;37621:27;;37658:71;37726:1;37715:9;37711:17;37702:6;37658:71;:::i;:::-;37739:80;37815:2;37804:9;37800:18;37791:6;37739:80;:::i;:::-;37866:9;37860:4;37856:20;37851:2;37840:9;37836:18;37829:48;37894:108;37997:4;37988:6;37894:108;:::i;:::-;37886:116;;38012:72;38080:2;38069:9;38065:18;38056:6;38012:72;:::i;:::-;38094:73;38162:3;38151:9;38147:19;38138:6;38094:73;:::i;:::-;37343:831;;;;;;;;:::o
Swarm Source
ipfs://a7e0f66d175668a6eacb2d6acda21db71f35ad0480360250592473e17af48cdd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 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.