ERC-20
Overview
Max Total Supply
77,941,163.475718348645136102 CLOAK
Holders
574
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
$8,117.66
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
3,540.311545428533438054 CLOAKValue
$0.37 ( ~9.14614779125067E-05 Eth) [0.0045%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Cloak
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT /* ▄████▄ ██▓ ▒█████ ▄▄▄ ██ ▄█▀ ▒██▀ ▀█ ▓██▒ ▒██▒ ██▒▒████▄ ██▄█▒ ▒▓█ ▄ ▒██░ ▒██░ ██▒▒██ ▀█▄ ▓███▄░ ▒▓▓▄ ▄██▒▒██░ ▒██ ██░░██▄▄▄▄██ ▓██ █▄ ▒ ▓███▀ ░░██████▒░ ████▓▒░ ▓█ ▓██▒▒██▒ █▄ ░ ░▒ ▒ ░░ ▒░▓ ░░ ▒░▒░▒░ ▒▒ ▓▒█░▒ ▒▒ ▓▒ ░ ▒ ░ ░ ▒ ░ ░ ▒ ▒░ ▒ ▒▒ ░░ ░▒ ▒░ ░ ░ ░ ░ ░ ░ ▒ ░ ▒ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ The purpose-built Web3 GenAI engine for the privacy conscious individual or business. Website: https://cloakai.xyz/ Litepaper: https://cloak-2.gitbook.io/cloak-docs Twitter: https://twitter.com/Cloak_xyz Telegram: https://t.me/cloakai */ pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol"; import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol"; import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol"; contract Cloak is ERC20, Ownable { using Address for address; IUniswapV2Router02 public immutable uniswapRouter; address public uniswapPair; address public protocolWallet; bool public tradingActive = false; bool public swapEnabled = false; bool public limitsInEffect = true; uint256 public maxTransaction; uint256 public swapTokensAtAmount; uint256 public maxWalletSize; uint256 public protocolBuyFee; uint256 public protocolSellFee; uint256 public tokensForProtocol; bool private swapping; mapping(address => bool) private isBlackList; mapping(address => bool) public isExcludedFromFees; mapping(address => bool) public isExcludeMaxTransaction; mapping(address => bool) public ammPairs; constructor() ERC20("Cloak", "CLOAK") { uniswapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).createPair(address(this), uniswapRouter.WETH()); protocolWallet = address(0x07DDBa2cc45970BBf81A79406DB9b19C68943F88); isExcludeMaxTransaction[address(uniswapRouter)] = true; isExcludeMaxTransaction[address(uniswapPair)] = true; isExcludeMaxTransaction[owner()] = true; isExcludeMaxTransaction[address(this)] = true; isExcludeMaxTransaction[address(0xdead)] = true; isExcludedFromFees[owner()] = true; isExcludedFromFees[address(this)] = true; isExcludedFromFees[address(0xdead)] = true; ammPairs[address(uniswapPair)] = true; uint256 totalSupply = 100_000_000 * 1e18; swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet maxTransaction = 1_300_000 * 1e18; // 1.3% from total supply maxTransactionTxn maxWalletSize = 1_300_000 * 1e18; // 1.3% from total supply maxWalletSize protocolBuyFee = 5; protocolSellFee = 5; _mint(owner(), 41_101_699_010 * 1e15); // Remaining in liq pool } receive() external payable {} // Claim new $CLOAK tokens, send old to protocol wallet function claim(address claimer) external { require( IERC20(0xa62aF006902a53D03F819D0e0BE0609893EC3099).balanceOf(claimer) > 0, "No old CLOAK to exchange" ); IERC20 oldCloak = IERC20(0xa62aF006902a53D03F819D0e0BE0609893EC3099); uint256 amount = oldCloak.balanceOf(claimer); oldCloak.transferFrom(claimer, address(protocolWallet), amount); _mint(claimer, amount); } // Tansfer eth to protocol function transferEth(uint256 amount) external onlyOwner { require(amount > 0, "Invalid amount of eth"); require(amount <= address(this).balance, "Not enough eth"); bool success; (success, ) = address(protocolWallet).call{value: amount}(""); } function setProtocolWallet(address protocolWallet_) external onlyOwner { protocolWallet = protocolWallet_; } function openTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } function excludeFromMaxTransaction(address addr, bool value) external onlyOwner { isExcludeMaxTransaction[addr] = value; } function excludeFromFees(address account, bool value) external onlyOwner { isExcludedFromFees[account] = value; } function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateMaxWalletSize(uint256 newNum) external onlyOwner { require(newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWalletSize lower than 0.5%"); maxWalletSize = newNum * (10**18); } function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTransaction(uint256 newNum) external onlyOwner { require(newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransaction lower than 0.1%"); maxTransaction = newNum * (10**18); } function updateBuyFee(uint256 newBuyFee) external onlyOwner { require(newBuyFee <= 25, "Must keep fees at 25% or less"); protocolBuyFee = newBuyFee; } function updateSellFee(uint256 newSellFee) external onlyOwner { require(newSellFee <= 25, "Must keep fees at 25% or less"); protocolSellFee = newSellFee; } function setAMMPair(address pair, bool value) external onlyOwner { require(pair != uniswapPair, "The pair cannot be removed from ammPairs"); ammPairs[pair] = value; } function setBlackList(address addr, bool enable) external onlyOwner { isBlackList[addr] = enable; } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); bool success; if (contractBalance == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } uint256 initialETHBalance = address(this).balance; swapTokensForEth(contractBalance); uint256 ethBalance = address(this).balance - initialETHBalance; tokensForProtocol = 0; (success, ) = address(protocolWallet).call{value: ethBalance}(""); } 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] = uniswapRouter.WETH(); _approve(address(this), address(uniswapRouter), tokenAmount); // make the swap uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function _transfer(address from, address to, uint256 amount) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!isBlackList[from], "[from] black list"); require(!isBlackList[to], "[to] black list"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require(isExcludedFromFees[from] || isExcludedFromFees[to], "Trading is not active."); } //when buy if (ammPairs[from] && !isExcludeMaxTransaction[to]) { require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransaction."); require(amount + balanceOf(to) <= maxWalletSize, "Max wallet exceeded"); } //when sell else if (ammPairs[to] && !isExcludeMaxTransaction[from]) { require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransaction."); } else if (!isExcludeMaxTransaction[to]) { require(amount + balanceOf(to) <= maxWalletSize, "Max wallet exceeded"); } } } uint256 contractBalance = balanceOf(address(this)); bool canSwap = contractBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !ammPairs[from] && !isExcludedFromFees[from] && !isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; if (isExcludedFromFees[from] || isExcludedFromFees[to]) { takeFee = false; } uint256 fee = 0; if (takeFee) { // on sell if (ammPairs[to] && protocolSellFee > 0) { fee = amount * protocolSellFee / 100; tokensForProtocol += fee; } // on buy else if (ammPairs[from] && protocolBuyFee > 0) { fee = amount * protocolBuyFee / 100; tokensForProtocol += fee; } if (fee > 0) { super._transfer(from, address(this), fee); } amount -= fee; } super._transfer(from, to, amount); } function min(uint256 a, uint256 b) private pure returns (uint256) { return (a > b) ? b : a; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ 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}. * * 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 default value returned by this function, unless * it's 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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, 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) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, 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) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * 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: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, 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; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _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; // Overflow not possible: amount <= accountBalance <= totalSupply. _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 Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - 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 {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
{ "evmVersion": "paris", "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"","type":"address"}],"name":"ammPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"claimer","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","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":"","type":"address"}],"name":"isExcludeMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSize","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolWallet","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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"protocolWallet_","type":"address"}],"name":"setProtocolWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForProtocol","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSellFee","type":"uint256"}],"name":"updateSellFee","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
60a06040526000600760146101000a81548160ff0219169083151502179055506000600760156101000a81548160ff0219169083151502179055506001600760166101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600581526020017f436c6f616b0000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f434c4f414b0000000000000000000000000000000000000000000000000000008152508160039081620000e0919062000c5f565b508060049081620000f2919062000c5f565b50505062000115620001096200077660201b60201c565b6200077e60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d1919062000db0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000261919062000db0565b6040518363ffffffff1660e01b81526004016200028092919062000df3565b6020604051808303816000875af1158015620002a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c6919062000db0565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507307ddba2cc45970bbf81a79406db9b19c68943f88600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016011600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160116000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160116000620004456200084460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016011600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060006200055e6200084460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006a52b7d2dcc80cd2e40000009050612710600582620006fd919062000e4f565b62000709919062000ec9565b6009819055506a011349242670ce848000006008819055506a011349242670ce84800000600a819055506005600b819055506005600c819055506200076f620007576200084460201b60201c565b6a21ff9f9166c49c1bed00006200086e60201b60201c565b5062000fed565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d79062000f62565b60405180910390fd5b620008f460008383620009db60201b60201c565b806002600082825462000908919062000f84565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009bb919062000fd0565b60405180910390a3620009d760008383620009e060201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a6757607f821691505b60208210810362000a7d5762000a7c62000a1f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ae77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aa8565b62000af3868362000aa8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b4062000b3a62000b348462000b0b565b62000b15565b62000b0b565b9050919050565b6000819050919050565b62000b5c8362000b1f565b62000b7462000b6b8262000b47565b84845462000ab5565b825550505050565b600090565b62000b8b62000b7c565b62000b9881848462000b51565b505050565b5b8181101562000bc05762000bb460008262000b81565b60018101905062000b9e565b5050565b601f82111562000c0f5762000bd98162000a83565b62000be48462000a98565b8101602085101562000bf4578190505b62000c0c62000c038562000a98565b83018262000b9d565b50505b505050565b600082821c905092915050565b600062000c346000198460080262000c14565b1980831691505092915050565b600062000c4f838362000c21565b9150826002028217905092915050565b62000c6a82620009e5565b67ffffffffffffffff81111562000c865762000c85620009f0565b5b62000c92825462000a4e565b62000c9f82828562000bc4565b600060209050601f83116001811462000cd7576000841562000cc2578287015190505b62000cce858262000c41565b86555062000d3e565b601f19841662000ce78662000a83565b60005b8281101562000d115784890151825560018201915060208501945060208101905062000cea565b8683101562000d31578489015162000d2d601f89168262000c21565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d788262000d4b565b9050919050565b62000d8a8162000d6b565b811462000d9657600080fd5b50565b60008151905062000daa8162000d7f565b92915050565b60006020828403121562000dc95762000dc862000d46565b5b600062000dd98482850162000d99565b91505092915050565b62000ded8162000d6b565b82525050565b600060408201905062000e0a600083018562000de2565b62000e19602083018462000de2565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e5c8262000b0b565b915062000e698362000b0b565b925082820262000e798162000b0b565b9150828204841483151762000e935762000e9262000e20565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ed68262000b0b565b915062000ee38362000b0b565b92508262000ef65762000ef562000e9a565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f4a601f8362000f01565b915062000f578262000f12565b602082019050919050565b6000602082019050818103600083015262000f7d8162000f3b565b9050919050565b600062000f918262000b0b565b915062000f9e8362000b0b565b925082820190508082111562000fb95762000fb862000e20565b5b92915050565b62000fca8162000b0b565b82525050565b600060208201905062000fe7600083018462000fbf565b92915050565b60805161439d6200101e600039600081816112d601528181612c5001528181612d310152612d58015261439d6000f3fe60806040526004361061026b5760003560e01c8063735de9f711610144578063a9059cbb116100b6578063c9567bf91161007a578063c9567bf914610951578063d257b34f14610968578063dd62ed3e146109a5578063e2f45605146109e2578063f01e9a8b14610a0d578063f2fde38b14610a3657610272565b8063a9059cbb1461086a578063bbc0c742146108a7578063c0246668146108d2578063c3f70b52146108fb578063c816841b1461092657610272565b8063924de9b711610108578063924de9b714610734578063953e04631461075d57806395d89b411461079a5780639a6bed25146107c5578063a457c2d7146107f0578063a72905a21461082d57610272565b8063735de9f71461065f578063751039fc1461068a5780637571336a146106b55780638da5cb5b146106de5780638f3fa8601461070957610272565b8063313ce567116101dd5780634e046c21116101a15780634e046c211461054f5780634fbee1931461057a57806368092bd9146105b75780636ddd1713146105e057806370a082311461060b578063715018a61461064857610272565b8063313ce5671461046857806339509351146104935780633c3a9ee2146104d0578063467abe0a146104fb5780634a62bb651461052457610272565b80631d933a4a1161022f5780631d933a4a1461035e5780631e83409a146103875780631f57256f146103b057806323b872dd146103d957806324887e80146104165780632d99d32e1461043f57610272565b80630517d13d1461027757806306d6e63f146102a057806306fdde03146102cb578063095ea7b3146102f657806318160ddd1461033357610272565b3661027257005b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190612e29565b610a5f565b005b3480156102ac57600080fd5b506102b5610afa565b6040516102c29190612e97565b60405180910390f35b3480156102d757600080fd5b506102e0610b20565b6040516102ed9190612f42565b60405180910390f35b34801561030257600080fd5b5061031d60048036038101906103189190612f90565b610bb2565b60405161032a9190612feb565b60405180910390f35b34801561033f57600080fd5b50610348610bd5565b6040516103559190613015565b60405180910390f35b34801561036a57600080fd5b5061038560048036038101906103809190612e29565b610bdf565b005b34801561039357600080fd5b506103ae60048036038101906103a99190613030565b610c35565b005b3480156103bc57600080fd5b506103d760048036038101906103d29190612e29565b610e4e565b005b3480156103e557600080fd5b5061040060048036038101906103fb919061305d565b610f70565b60405161040d9190612feb565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190612e29565b610f9f565b005b34801561044b57600080fd5b50610466600480360381019061046191906130dc565b61103a565b005b34801561047457600080fd5b5061047d61112d565b60405161048a9190613138565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b59190612f90565b611136565b6040516104c79190612feb565b60405180910390f35b3480156104dc57600080fd5b506104e561116d565b6040516104f29190613015565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190612e29565b611173565b005b34801561053057600080fd5b506105396111c9565b6040516105469190612feb565b60405180910390f35b34801561055b57600080fd5b506105646111dc565b6040516105719190613015565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c9190613030565b6111e2565b6040516105ae9190612feb565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d991906130dc565b611202565b005b3480156105ec57600080fd5b506105f5611265565b6040516106029190612feb565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190613030565b611278565b60405161063f9190613015565b60405180910390f35b34801561065457600080fd5b5061065d6112c0565b005b34801561066b57600080fd5b506106746112d4565b60405161068191906131b2565b60405180910390f35b34801561069657600080fd5b5061069f6112f8565b6040516106ac9190612feb565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d791906130dc565b611324565b005b3480156106ea57600080fd5b506106f3611387565b6040516107009190612e97565b60405180910390f35b34801561071557600080fd5b5061071e6113b1565b60405161072b9190613015565b60405180910390f35b34801561074057600080fd5b5061075b600480360381019061075691906131cd565b6113b7565b005b34801561076957600080fd5b50610784600480360381019061077f9190613030565b6113dc565b6040516107919190612feb565b60405180910390f35b3480156107a657600080fd5b506107af6113fc565b6040516107bc9190612f42565b60405180910390f35b3480156107d157600080fd5b506107da61148e565b6040516107e79190613015565b60405180910390f35b3480156107fc57600080fd5b5061081760048036038101906108129190612f90565b611494565b6040516108249190612feb565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f9190613030565b61150b565b6040516108619190612feb565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c9190612f90565b61152b565b60405161089e9190612feb565b60405180910390f35b3480156108b357600080fd5b506108bc61154e565b6040516108c99190612feb565b60405180910390f35b3480156108de57600080fd5b506108f960048036038101906108f491906130dc565b611561565b005b34801561090757600080fd5b506109106115c4565b60405161091d9190613015565b60405180910390f35b34801561093257600080fd5b5061093b6115ca565b6040516109489190612e97565b60405180910390f35b34801561095d57600080fd5b506109666115f0565b005b34801561097457600080fd5b5061098f600480360381019061098a9190612e29565b611630565b60405161099c9190612feb565b60405180910390f35b3480156109b157600080fd5b506109cc60048036038101906109c791906131fa565b611711565b6040516109d99190613015565b60405180910390f35b3480156109ee57600080fd5b506109f7611798565b604051610a049190613015565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613030565b61179e565b005b348015610a4257600080fd5b50610a5d6004803603810190610a589190613030565b6117ea565b005b610a6761186d565b670de0b6b3a76400006103e86001610a7d610bd5565b610a879190613269565b610a9191906132da565b610a9b91906132da565b811015610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad49061337d565b60405180910390fd5b670de0b6b3a764000081610af19190613269565b60088190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610b2f906133cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5b906133cc565b8015610ba85780601f10610b7d57610100808354040283529160200191610ba8565b820191906000526020600020905b815481529060010190602001808311610b8b57829003601f168201915b5050505050905090565b600080610bbd6118eb565b9050610bca8185856118f3565b600191505092915050565b6000600254905090565b610be761186d565b6019811115610c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2290613449565b60405180910390fd5b80600c8190555050565b600073a62af006902a53d03f819d0e0be0609893ec309973ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610c849190612e97565b602060405180830381865afa158015610ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc5919061347e565b11610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc906134f7565b60405180910390fd5b600073a62af006902a53d03f819d0e0be0609893ec3099905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610d599190612e97565b602060405180830381865afa158015610d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9a919061347e565b90508173ffffffffffffffffffffffffffffffffffffffff166323b872dd84600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401610dfb93929190613517565b6020604051808303816000875af1158015610e1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3e9190613563565b50610e498382611abc565b505050565b610e5661186d565b60008111610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e90906135dc565b60405180910390fd5b47811115610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed390613648565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610f2490613699565b60006040518083038185875af1925050503d8060008114610f61576040519150601f19603f3d011682016040523d82523d6000602084013e610f66565b606091505b5050809150505050565b600080610f7b6118eb565b9050610f88858285611c12565b610f93858585611c9e565b60019150509392505050565b610fa761186d565b670de0b6b3a76400006103e86005610fbd610bd5565b610fc79190613269565b610fd191906132da565b610fdb91906132da565b81101561101d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101490613720565b60405180910390fd5b670de0b6b3a7640000816110319190613269565b600a8190555050565b61104261186d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c9906137b2565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b6000806111416118eb565b90506111628185856111538589611711565b61115d91906137d2565b6118f3565b600191505092915050565b600b5481565b61117b61186d565b60198111156111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b690613449565b60405180910390fd5b80600b8190555050565b600760169054906101000a900460ff1681565b600c5481565b60106020528060005260406000206000915054906101000a900460ff1681565b61120a61186d565b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112c861186d565b6112d2600061276b565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061130261186d565b6000600760166101000a81548160ff0219169083151502179055506001905090565b61132c61186d565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5481565b6113bf61186d565b80600760156101000a81548160ff02191690831515021790555050565b60116020528060005260406000206000915054906101000a900460ff1681565b60606004805461140b906133cc565b80601f0160208091040260200160405190810160405280929190818152602001828054611437906133cc565b80156114845780601f1061145957610100808354040283529160200191611484565b820191906000526020600020905b81548152906001019060200180831161146757829003601f168201915b5050505050905090565b600d5481565b60008061149f6118eb565b905060006114ad8286611711565b9050838110156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990613878565b60405180910390fd5b6114ff82868684036118f3565b60019250505092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b6000806115366118eb565b9050611543818585611c9e565b600191505092915050565b600760149054906101000a900460ff1681565b61156961186d565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60085481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115f861186d565b6001600760146101000a81548160ff0219169083151502179055506001600760156101000a81548160ff021916908315150217905550565b600061163a61186d565b620186a06001611648610bd5565b6116529190613269565b61165c91906132da565b82101561169e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116959061390a565b60405180910390fd5b6103e860056116ab610bd5565b6116b59190613269565b6116bf91906132da565b821115611701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f89061399c565b60405180910390fd5b8160098190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6117a661186d565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117f261186d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185890613a2e565b60405180910390fd5b61186a8161276b565b50565b6118756118eb565b73ffffffffffffffffffffffffffffffffffffffff16611893611387565b73ffffffffffffffffffffffffffffffffffffffff16146118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090613a9a565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195990613b2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890613bbe565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611aaf9190613015565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290613c2a565b60405180910390fd5b611b3760008383612831565b8060026000828254611b4991906137d2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bfa9190613015565b60405180910390a3611c0e60008383612836565b5050565b6000611c1e8484611711565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c985781811015611c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8190613c96565b60405180910390fd5b611c9784848484036118f3565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490613d28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7390613dba565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0090613e26565b60405180910390fd5b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8d90613e92565b60405180910390fd5b60008103611eaf57611eaa8383600061283b565b612766565b600760169054906101000a900460ff16156123aa57611ecc611387565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f3a5750611f0a611387565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611f735750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fad575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fc65750600e60009054906101000a900460ff16155b156123a957600760149054906101000a900460ff166120c057601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120805750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690613efe565b60405180910390fd5b5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121635750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561220a576008548111156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a490613f90565b60405180910390fd5b600a546121b983611278565b826121c491906137d2565b1115612205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fc90613ffc565b60405180910390fd5b6123a8565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122ad5750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122fc576008548111156122f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ee9061408e565b60405180910390fd5b6123a7565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123a657600a5461235983611278565b8261236491906137d2565b11156123a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239c90613ffc565b60405180910390fd5b5b5b5b5b5b60006123b530611278565b9050600060095482101590508080156123da5750600760159054906101000a900460ff165b80156123f35750600e60009054906101000a900460ff16155b80156124495750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561249f5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124f55750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612539576001600e60006101000a81548160ff02191690831515021790555061251d612ab1565b6000600e60006101000a81548160ff0219169083151502179055505b6000600e60009054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125ef5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125f957600090505b6000811561275657601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561265c57506000600c54115b1561269b576064600c54866126719190613269565b61267b91906132da565b905080600d600082825461268f91906137d2565b92505081905550612732565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126f657506000600b54115b15612731576064600b548661270b9190613269565b61271591906132da565b905080600d600082825461272991906137d2565b925050819055505b5b60008111156127475761274687308361283b565b5b808561275391906140ae565b94505b61276187878761283b565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a190613d28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291090613dba565b60405180910390fd5b612924838383612831565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156129aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a190614154565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a989190613015565b60405180910390a3612aab848484612836565b50505050565b6000612abc30611278565b90506000808203612ace575050612baf565b6014600954612add9190613269565b821115612af6576014600954612af39190613269565b91505b6000479050612b0483612bb1565b60008147612b1291906140ae565b90506000600d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612b6290613699565b60006040518083038185875af1925050503d8060008114612b9f576040519150601f19603f3d011682016040523d82523d6000602084013e612ba4565b606091505b505080935050505050505b565b6000600267ffffffffffffffff811115612bce57612bcd614174565b5b604051908082528060200260200182016040528015612bfc5781602001602082028036833780820191505090505b5090503081600081518110612c1457612c136141a3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdd91906141e7565b81600181518110612cf157612cf06141a3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d56307f0000000000000000000000000000000000000000000000000000000000000000846118f3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612db895949392919061430d565b600060405180830381600087803b158015612dd257600080fd5b505af1158015612de6573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b612e0681612df3565b8114612e1157600080fd5b50565b600081359050612e2381612dfd565b92915050565b600060208284031215612e3f57612e3e612dee565b5b6000612e4d84828501612e14565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8182612e56565b9050919050565b612e9181612e76565b82525050565b6000602082019050612eac6000830184612e88565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612eec578082015181840152602081019050612ed1565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f1482612eb2565b612f1e8185612ebd565b9350612f2e818560208601612ece565b612f3781612ef8565b840191505092915050565b60006020820190508181036000830152612f5c8184612f09565b905092915050565b612f6d81612e76565b8114612f7857600080fd5b50565b600081359050612f8a81612f64565b92915050565b60008060408385031215612fa757612fa6612dee565b5b6000612fb585828601612f7b565b9250506020612fc685828601612e14565b9150509250929050565b60008115159050919050565b612fe581612fd0565b82525050565b60006020820190506130006000830184612fdc565b92915050565b61300f81612df3565b82525050565b600060208201905061302a6000830184613006565b92915050565b60006020828403121561304657613045612dee565b5b600061305484828501612f7b565b91505092915050565b60008060006060848603121561307657613075612dee565b5b600061308486828701612f7b565b935050602061309586828701612f7b565b92505060406130a686828701612e14565b9150509250925092565b6130b981612fd0565b81146130c457600080fd5b50565b6000813590506130d6816130b0565b92915050565b600080604083850312156130f3576130f2612dee565b5b600061310185828601612f7b565b9250506020613112858286016130c7565b9150509250929050565b600060ff82169050919050565b6131328161311c565b82525050565b600060208201905061314d6000830184613129565b92915050565b6000819050919050565b600061317861317361316e84612e56565b613153565b612e56565b9050919050565b600061318a8261315d565b9050919050565b600061319c8261317f565b9050919050565b6131ac81613191565b82525050565b60006020820190506131c760008301846131a3565b92915050565b6000602082840312156131e3576131e2612dee565b5b60006131f1848285016130c7565b91505092915050565b6000806040838503121561321157613210612dee565b5b600061321f85828601612f7b565b925050602061323085828601612f7b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061327482612df3565b915061327f83612df3565b925082820261328d81612df3565b915082820484148315176132a4576132a361323a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006132e582612df3565b91506132f083612df3565b925082613300576132ff6132ab565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000613367602983612ebd565b91506133728261330b565b604082019050919050565b600060208201905081810360008301526133968161335a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806133e457607f821691505b6020821081036133f7576133f661339d565b5b50919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000613433601d83612ebd565b915061343e826133fd565b602082019050919050565b6000602082019050818103600083015261346281613426565b9050919050565b60008151905061347881612dfd565b92915050565b60006020828403121561349457613493612dee565b5b60006134a284828501613469565b91505092915050565b7f4e6f206f6c6420434c4f414b20746f2065786368616e67650000000000000000600082015250565b60006134e1601883612ebd565b91506134ec826134ab565b602082019050919050565b60006020820190508181036000830152613510816134d4565b9050919050565b600060608201905061352c6000830186612e88565b6135396020830185612e88565b6135466040830184613006565b949350505050565b60008151905061355d816130b0565b92915050565b60006020828403121561357957613578612dee565b5b60006135878482850161354e565b91505092915050565b7f496e76616c696420616d6f756e74206f66206574680000000000000000000000600082015250565b60006135c6601583612ebd565b91506135d182613590565b602082019050919050565b600060208201905081810360008301526135f5816135b9565b9050919050565b7f4e6f7420656e6f75676820657468000000000000000000000000000000000000600082015250565b6000613632600e83612ebd565b915061363d826135fc565b602082019050919050565b6000602082019050818103600083015261366181613625565b9050919050565b600081905092915050565b50565b6000613683600083613668565b915061368e82613673565b600082019050919050565b60006136a482613676565b9150819050919050565b7f43616e6e6f7420736574206d617857616c6c657453697a65206c6f776572207460008201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b600061370a602883612ebd565b9150613715826136ae565b604082019050919050565b60006020820190508181036000830152613739816136fd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f616d6d5061697273000000000000000000000000000000000000000000000000602082015250565b600061379c602883612ebd565b91506137a782613740565b604082019050919050565b600060208201905081810360008301526137cb8161378f565b9050919050565b60006137dd82612df3565b91506137e883612df3565b9250828201905080821115613800576137ff61323a565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613862602583612ebd565b915061386d82613806565b604082019050919050565b6000602082019050818103600083015261389181613855565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006138f4603583612ebd565b91506138ff82613898565b604082019050919050565b60006020820190508181036000830152613923816138e7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613986603483612ebd565b91506139918261392a565b604082019050919050565b600060208201905081810360008301526139b581613979565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a18602683612ebd565b9150613a23826139bc565b604082019050919050565b60006020820190508181036000830152613a4781613a0b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a84602083612ebd565b9150613a8f82613a4e565b602082019050919050565b60006020820190508181036000830152613ab381613a77565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b16602483612ebd565b9150613b2182613aba565b604082019050919050565b60006020820190508181036000830152613b4581613b09565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ba8602283612ebd565b9150613bb382613b4c565b604082019050919050565b60006020820190508181036000830152613bd781613b9b565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613c14601f83612ebd565b9150613c1f82613bde565b602082019050919050565b60006020820190508181036000830152613c4381613c07565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613c80601d83612ebd565b9150613c8b82613c4a565b602082019050919050565b60006020820190508181036000830152613caf81613c73565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613d12602583612ebd565b9150613d1d82613cb6565b604082019050919050565b60006020820190508181036000830152613d4181613d05565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613da4602383612ebd565b9150613daf82613d48565b604082019050919050565b60006020820190508181036000830152613dd381613d97565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000613e10601183612ebd565b9150613e1b82613dda565b602082019050919050565b60006020820190508181036000830152613e3f81613e03565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000613e7c600f83612ebd565b9150613e8782613e46565b602082019050919050565b60006020820190508181036000830152613eab81613e6f565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613ee8601683612ebd565b9150613ef382613eb2565b602082019050919050565b60006020820190508181036000830152613f1781613edb565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000613f7a602f83612ebd565b9150613f8582613f1e565b604082019050919050565b60006020820190508181036000830152613fa981613f6d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613fe6601383612ebd565b9150613ff182613fb0565b602082019050919050565b6000602082019050818103600083015261401581613fd9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b6000614078603083612ebd565b91506140838261401c565b604082019050919050565b600060208201905081810360008301526140a78161406b565b9050919050565b60006140b982612df3565b91506140c483612df3565b92508282039050818111156140dc576140db61323a565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061413e602683612ebd565b9150614149826140e2565b604082019050919050565b6000602082019050818103600083015261416d81614131565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506141e181612f64565b92915050565b6000602082840312156141fd576141fc612dee565b5b600061420b848285016141d2565b91505092915050565b6000819050919050565b600061423961423461422f84614214565b613153565b612df3565b9050919050565b6142498161421e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61428481612e76565b82525050565b6000614296838361427b565b60208301905092915050565b6000602082019050919050565b60006142ba8261424f565b6142c4818561425a565b93506142cf8361426b565b8060005b838110156143005781516142e7888261428a565b97506142f2836142a2565b9250506001810190506142d3565b5085935050505092915050565b600060a0820190506143226000830188613006565b61432f6020830187614240565b818103604083015261434181866142af565b90506143506060830185612e88565b61435d6080830184613006565b969550505050505056fea26469706673582212202ebb5fe62649d47a0fb8e5e109e2b97dd57e234e79e8c705c10a6d46c400e60c64736f6c63430008180033
Deployed Bytecode
0x60806040526004361061026b5760003560e01c8063735de9f711610144578063a9059cbb116100b6578063c9567bf91161007a578063c9567bf914610951578063d257b34f14610968578063dd62ed3e146109a5578063e2f45605146109e2578063f01e9a8b14610a0d578063f2fde38b14610a3657610272565b8063a9059cbb1461086a578063bbc0c742146108a7578063c0246668146108d2578063c3f70b52146108fb578063c816841b1461092657610272565b8063924de9b711610108578063924de9b714610734578063953e04631461075d57806395d89b411461079a5780639a6bed25146107c5578063a457c2d7146107f0578063a72905a21461082d57610272565b8063735de9f71461065f578063751039fc1461068a5780637571336a146106b55780638da5cb5b146106de5780638f3fa8601461070957610272565b8063313ce567116101dd5780634e046c21116101a15780634e046c211461054f5780634fbee1931461057a57806368092bd9146105b75780636ddd1713146105e057806370a082311461060b578063715018a61461064857610272565b8063313ce5671461046857806339509351146104935780633c3a9ee2146104d0578063467abe0a146104fb5780634a62bb651461052457610272565b80631d933a4a1161022f5780631d933a4a1461035e5780631e83409a146103875780631f57256f146103b057806323b872dd146103d957806324887e80146104165780632d99d32e1461043f57610272565b80630517d13d1461027757806306d6e63f146102a057806306fdde03146102cb578063095ea7b3146102f657806318160ddd1461033357610272565b3661027257005b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190612e29565b610a5f565b005b3480156102ac57600080fd5b506102b5610afa565b6040516102c29190612e97565b60405180910390f35b3480156102d757600080fd5b506102e0610b20565b6040516102ed9190612f42565b60405180910390f35b34801561030257600080fd5b5061031d60048036038101906103189190612f90565b610bb2565b60405161032a9190612feb565b60405180910390f35b34801561033f57600080fd5b50610348610bd5565b6040516103559190613015565b60405180910390f35b34801561036a57600080fd5b5061038560048036038101906103809190612e29565b610bdf565b005b34801561039357600080fd5b506103ae60048036038101906103a99190613030565b610c35565b005b3480156103bc57600080fd5b506103d760048036038101906103d29190612e29565b610e4e565b005b3480156103e557600080fd5b5061040060048036038101906103fb919061305d565b610f70565b60405161040d9190612feb565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190612e29565b610f9f565b005b34801561044b57600080fd5b50610466600480360381019061046191906130dc565b61103a565b005b34801561047457600080fd5b5061047d61112d565b60405161048a9190613138565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b59190612f90565b611136565b6040516104c79190612feb565b60405180910390f35b3480156104dc57600080fd5b506104e561116d565b6040516104f29190613015565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190612e29565b611173565b005b34801561053057600080fd5b506105396111c9565b6040516105469190612feb565b60405180910390f35b34801561055b57600080fd5b506105646111dc565b6040516105719190613015565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c9190613030565b6111e2565b6040516105ae9190612feb565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d991906130dc565b611202565b005b3480156105ec57600080fd5b506105f5611265565b6040516106029190612feb565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190613030565b611278565b60405161063f9190613015565b60405180910390f35b34801561065457600080fd5b5061065d6112c0565b005b34801561066b57600080fd5b506106746112d4565b60405161068191906131b2565b60405180910390f35b34801561069657600080fd5b5061069f6112f8565b6040516106ac9190612feb565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d791906130dc565b611324565b005b3480156106ea57600080fd5b506106f3611387565b6040516107009190612e97565b60405180910390f35b34801561071557600080fd5b5061071e6113b1565b60405161072b9190613015565b60405180910390f35b34801561074057600080fd5b5061075b600480360381019061075691906131cd565b6113b7565b005b34801561076957600080fd5b50610784600480360381019061077f9190613030565b6113dc565b6040516107919190612feb565b60405180910390f35b3480156107a657600080fd5b506107af6113fc565b6040516107bc9190612f42565b60405180910390f35b3480156107d157600080fd5b506107da61148e565b6040516107e79190613015565b60405180910390f35b3480156107fc57600080fd5b5061081760048036038101906108129190612f90565b611494565b6040516108249190612feb565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f9190613030565b61150b565b6040516108619190612feb565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c9190612f90565b61152b565b60405161089e9190612feb565b60405180910390f35b3480156108b357600080fd5b506108bc61154e565b6040516108c99190612feb565b60405180910390f35b3480156108de57600080fd5b506108f960048036038101906108f491906130dc565b611561565b005b34801561090757600080fd5b506109106115c4565b60405161091d9190613015565b60405180910390f35b34801561093257600080fd5b5061093b6115ca565b6040516109489190612e97565b60405180910390f35b34801561095d57600080fd5b506109666115f0565b005b34801561097457600080fd5b5061098f600480360381019061098a9190612e29565b611630565b60405161099c9190612feb565b60405180910390f35b3480156109b157600080fd5b506109cc60048036038101906109c791906131fa565b611711565b6040516109d99190613015565b60405180910390f35b3480156109ee57600080fd5b506109f7611798565b604051610a049190613015565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613030565b61179e565b005b348015610a4257600080fd5b50610a5d6004803603810190610a589190613030565b6117ea565b005b610a6761186d565b670de0b6b3a76400006103e86001610a7d610bd5565b610a879190613269565b610a9191906132da565b610a9b91906132da565b811015610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad49061337d565b60405180910390fd5b670de0b6b3a764000081610af19190613269565b60088190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610b2f906133cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5b906133cc565b8015610ba85780601f10610b7d57610100808354040283529160200191610ba8565b820191906000526020600020905b815481529060010190602001808311610b8b57829003601f168201915b5050505050905090565b600080610bbd6118eb565b9050610bca8185856118f3565b600191505092915050565b6000600254905090565b610be761186d565b6019811115610c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2290613449565b60405180910390fd5b80600c8190555050565b600073a62af006902a53d03f819d0e0be0609893ec309973ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610c849190612e97565b602060405180830381865afa158015610ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc5919061347e565b11610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc906134f7565b60405180910390fd5b600073a62af006902a53d03f819d0e0be0609893ec3099905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610d599190612e97565b602060405180830381865afa158015610d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9a919061347e565b90508173ffffffffffffffffffffffffffffffffffffffff166323b872dd84600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401610dfb93929190613517565b6020604051808303816000875af1158015610e1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3e9190613563565b50610e498382611abc565b505050565b610e5661186d565b60008111610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e90906135dc565b60405180910390fd5b47811115610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed390613648565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610f2490613699565b60006040518083038185875af1925050503d8060008114610f61576040519150601f19603f3d011682016040523d82523d6000602084013e610f66565b606091505b5050809150505050565b600080610f7b6118eb565b9050610f88858285611c12565b610f93858585611c9e565b60019150509392505050565b610fa761186d565b670de0b6b3a76400006103e86005610fbd610bd5565b610fc79190613269565b610fd191906132da565b610fdb91906132da565b81101561101d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101490613720565b60405180910390fd5b670de0b6b3a7640000816110319190613269565b600a8190555050565b61104261186d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c9906137b2565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b6000806111416118eb565b90506111628185856111538589611711565b61115d91906137d2565b6118f3565b600191505092915050565b600b5481565b61117b61186d565b60198111156111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b690613449565b60405180910390fd5b80600b8190555050565b600760169054906101000a900460ff1681565b600c5481565b60106020528060005260406000206000915054906101000a900460ff1681565b61120a61186d565b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112c861186d565b6112d2600061276b565b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600061130261186d565b6000600760166101000a81548160ff0219169083151502179055506001905090565b61132c61186d565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5481565b6113bf61186d565b80600760156101000a81548160ff02191690831515021790555050565b60116020528060005260406000206000915054906101000a900460ff1681565b60606004805461140b906133cc565b80601f0160208091040260200160405190810160405280929190818152602001828054611437906133cc565b80156114845780601f1061145957610100808354040283529160200191611484565b820191906000526020600020905b81548152906001019060200180831161146757829003601f168201915b5050505050905090565b600d5481565b60008061149f6118eb565b905060006114ad8286611711565b9050838110156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990613878565b60405180910390fd5b6114ff82868684036118f3565b60019250505092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b6000806115366118eb565b9050611543818585611c9e565b600191505092915050565b600760149054906101000a900460ff1681565b61156961186d565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60085481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115f861186d565b6001600760146101000a81548160ff0219169083151502179055506001600760156101000a81548160ff021916908315150217905550565b600061163a61186d565b620186a06001611648610bd5565b6116529190613269565b61165c91906132da565b82101561169e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116959061390a565b60405180910390fd5b6103e860056116ab610bd5565b6116b59190613269565b6116bf91906132da565b821115611701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f89061399c565b60405180910390fd5b8160098190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6117a661186d565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117f261186d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185890613a2e565b60405180910390fd5b61186a8161276b565b50565b6118756118eb565b73ffffffffffffffffffffffffffffffffffffffff16611893611387565b73ffffffffffffffffffffffffffffffffffffffff16146118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090613a9a565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195990613b2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890613bbe565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611aaf9190613015565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290613c2a565b60405180910390fd5b611b3760008383612831565b8060026000828254611b4991906137d2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bfa9190613015565b60405180910390a3611c0e60008383612836565b5050565b6000611c1e8484611711565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c985781811015611c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8190613c96565b60405180910390fd5b611c9784848484036118f3565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490613d28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7390613dba565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0090613e26565b60405180910390fd5b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8d90613e92565b60405180910390fd5b60008103611eaf57611eaa8383600061283b565b612766565b600760169054906101000a900460ff16156123aa57611ecc611387565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f3a5750611f0a611387565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611f735750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fad575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fc65750600e60009054906101000a900460ff16155b156123a957600760149054906101000a900460ff166120c057601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120805750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690613efe565b60405180910390fd5b5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121635750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561220a576008548111156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a490613f90565b60405180910390fd5b600a546121b983611278565b826121c491906137d2565b1115612205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fc90613ffc565b60405180910390fd5b6123a8565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122ad5750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122fc576008548111156122f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ee9061408e565b60405180910390fd5b6123a7565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123a657600a5461235983611278565b8261236491906137d2565b11156123a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239c90613ffc565b60405180910390fd5b5b5b5b5b5b60006123b530611278565b9050600060095482101590508080156123da5750600760159054906101000a900460ff165b80156123f35750600e60009054906101000a900460ff16155b80156124495750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561249f5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124f55750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612539576001600e60006101000a81548160ff02191690831515021790555061251d612ab1565b6000600e60006101000a81548160ff0219169083151502179055505b6000600e60009054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125ef5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125f957600090505b6000811561275657601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561265c57506000600c54115b1561269b576064600c54866126719190613269565b61267b91906132da565b905080600d600082825461268f91906137d2565b92505081905550612732565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126f657506000600b54115b15612731576064600b548661270b9190613269565b61271591906132da565b905080600d600082825461272991906137d2565b925050819055505b5b60008111156127475761274687308361283b565b5b808561275391906140ae565b94505b61276187878761283b565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a190613d28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291090613dba565b60405180910390fd5b612924838383612831565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156129aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a190614154565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a989190613015565b60405180910390a3612aab848484612836565b50505050565b6000612abc30611278565b90506000808203612ace575050612baf565b6014600954612add9190613269565b821115612af6576014600954612af39190613269565b91505b6000479050612b0483612bb1565b60008147612b1291906140ae565b90506000600d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612b6290613699565b60006040518083038185875af1925050503d8060008114612b9f576040519150601f19603f3d011682016040523d82523d6000602084013e612ba4565b606091505b505080935050505050505b565b6000600267ffffffffffffffff811115612bce57612bcd614174565b5b604051908082528060200260200182016040528015612bfc5781602001602082028036833780820191505090505b5090503081600081518110612c1457612c136141a3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdd91906141e7565b81600181518110612cf157612cf06141a3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d56307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846118f3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612db895949392919061430d565b600060405180830381600087803b158015612dd257600080fd5b505af1158015612de6573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b612e0681612df3565b8114612e1157600080fd5b50565b600081359050612e2381612dfd565b92915050565b600060208284031215612e3f57612e3e612dee565b5b6000612e4d84828501612e14565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8182612e56565b9050919050565b612e9181612e76565b82525050565b6000602082019050612eac6000830184612e88565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612eec578082015181840152602081019050612ed1565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f1482612eb2565b612f1e8185612ebd565b9350612f2e818560208601612ece565b612f3781612ef8565b840191505092915050565b60006020820190508181036000830152612f5c8184612f09565b905092915050565b612f6d81612e76565b8114612f7857600080fd5b50565b600081359050612f8a81612f64565b92915050565b60008060408385031215612fa757612fa6612dee565b5b6000612fb585828601612f7b565b9250506020612fc685828601612e14565b9150509250929050565b60008115159050919050565b612fe581612fd0565b82525050565b60006020820190506130006000830184612fdc565b92915050565b61300f81612df3565b82525050565b600060208201905061302a6000830184613006565b92915050565b60006020828403121561304657613045612dee565b5b600061305484828501612f7b565b91505092915050565b60008060006060848603121561307657613075612dee565b5b600061308486828701612f7b565b935050602061309586828701612f7b565b92505060406130a686828701612e14565b9150509250925092565b6130b981612fd0565b81146130c457600080fd5b50565b6000813590506130d6816130b0565b92915050565b600080604083850312156130f3576130f2612dee565b5b600061310185828601612f7b565b9250506020613112858286016130c7565b9150509250929050565b600060ff82169050919050565b6131328161311c565b82525050565b600060208201905061314d6000830184613129565b92915050565b6000819050919050565b600061317861317361316e84612e56565b613153565b612e56565b9050919050565b600061318a8261315d565b9050919050565b600061319c8261317f565b9050919050565b6131ac81613191565b82525050565b60006020820190506131c760008301846131a3565b92915050565b6000602082840312156131e3576131e2612dee565b5b60006131f1848285016130c7565b91505092915050565b6000806040838503121561321157613210612dee565b5b600061321f85828601612f7b565b925050602061323085828601612f7b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061327482612df3565b915061327f83612df3565b925082820261328d81612df3565b915082820484148315176132a4576132a361323a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006132e582612df3565b91506132f083612df3565b925082613300576132ff6132ab565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000613367602983612ebd565b91506133728261330b565b604082019050919050565b600060208201905081810360008301526133968161335a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806133e457607f821691505b6020821081036133f7576133f661339d565b5b50919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000613433601d83612ebd565b915061343e826133fd565b602082019050919050565b6000602082019050818103600083015261346281613426565b9050919050565b60008151905061347881612dfd565b92915050565b60006020828403121561349457613493612dee565b5b60006134a284828501613469565b91505092915050565b7f4e6f206f6c6420434c4f414b20746f2065786368616e67650000000000000000600082015250565b60006134e1601883612ebd565b91506134ec826134ab565b602082019050919050565b60006020820190508181036000830152613510816134d4565b9050919050565b600060608201905061352c6000830186612e88565b6135396020830185612e88565b6135466040830184613006565b949350505050565b60008151905061355d816130b0565b92915050565b60006020828403121561357957613578612dee565b5b60006135878482850161354e565b91505092915050565b7f496e76616c696420616d6f756e74206f66206574680000000000000000000000600082015250565b60006135c6601583612ebd565b91506135d182613590565b602082019050919050565b600060208201905081810360008301526135f5816135b9565b9050919050565b7f4e6f7420656e6f75676820657468000000000000000000000000000000000000600082015250565b6000613632600e83612ebd565b915061363d826135fc565b602082019050919050565b6000602082019050818103600083015261366181613625565b9050919050565b600081905092915050565b50565b6000613683600083613668565b915061368e82613673565b600082019050919050565b60006136a482613676565b9150819050919050565b7f43616e6e6f7420736574206d617857616c6c657453697a65206c6f776572207460008201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b600061370a602883612ebd565b9150613715826136ae565b604082019050919050565b60006020820190508181036000830152613739816136fd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f616d6d5061697273000000000000000000000000000000000000000000000000602082015250565b600061379c602883612ebd565b91506137a782613740565b604082019050919050565b600060208201905081810360008301526137cb8161378f565b9050919050565b60006137dd82612df3565b91506137e883612df3565b9250828201905080821115613800576137ff61323a565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613862602583612ebd565b915061386d82613806565b604082019050919050565b6000602082019050818103600083015261389181613855565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006138f4603583612ebd565b91506138ff82613898565b604082019050919050565b60006020820190508181036000830152613923816138e7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613986603483612ebd565b91506139918261392a565b604082019050919050565b600060208201905081810360008301526139b581613979565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a18602683612ebd565b9150613a23826139bc565b604082019050919050565b60006020820190508181036000830152613a4781613a0b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a84602083612ebd565b9150613a8f82613a4e565b602082019050919050565b60006020820190508181036000830152613ab381613a77565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b16602483612ebd565b9150613b2182613aba565b604082019050919050565b60006020820190508181036000830152613b4581613b09565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ba8602283612ebd565b9150613bb382613b4c565b604082019050919050565b60006020820190508181036000830152613bd781613b9b565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613c14601f83612ebd565b9150613c1f82613bde565b602082019050919050565b60006020820190508181036000830152613c4381613c07565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613c80601d83612ebd565b9150613c8b82613c4a565b602082019050919050565b60006020820190508181036000830152613caf81613c73565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613d12602583612ebd565b9150613d1d82613cb6565b604082019050919050565b60006020820190508181036000830152613d4181613d05565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613da4602383612ebd565b9150613daf82613d48565b604082019050919050565b60006020820190508181036000830152613dd381613d97565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000613e10601183612ebd565b9150613e1b82613dda565b602082019050919050565b60006020820190508181036000830152613e3f81613e03565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000613e7c600f83612ebd565b9150613e8782613e46565b602082019050919050565b60006020820190508181036000830152613eab81613e6f565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613ee8601683612ebd565b9150613ef382613eb2565b602082019050919050565b60006020820190508181036000830152613f1781613edb565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000613f7a602f83612ebd565b9150613f8582613f1e565b604082019050919050565b60006020820190508181036000830152613fa981613f6d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613fe6601383612ebd565b9150613ff182613fb0565b602082019050919050565b6000602082019050818103600083015261401581613fd9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b6000614078603083612ebd565b91506140838261401c565b604082019050919050565b600060208201905081810360008301526140a78161406b565b9050919050565b60006140b982612df3565b91506140c483612df3565b92508282039050818111156140dc576140db61323a565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061413e602683612ebd565b9150614149826140e2565b604082019050919050565b6000602082019050818103600083015261416d81614131565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506141e181612f64565b92915050565b6000602082840312156141fd576141fc612dee565b5b600061420b848285016141d2565b91505092915050565b6000819050919050565b600061423961423461422f84614214565b613153565b612df3565b9050919050565b6142498161421e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61428481612e76565b82525050565b6000614296838361427b565b60208301905092915050565b6000602082019050919050565b60006142ba8261424f565b6142c4818561425a565b93506142cf8361426b565b8060005b838110156143005781516142e7888261428a565b97506142f2836142a2565b9250506001810190506142d3565b5085935050505092915050565b600060a0820190506143226000830188613006565b61432f6020830187614240565b818103604083015261434181866142af565b90506143506060830185612e88565b61435d6080830184613006565b969550505050505056fea26469706673582212202ebb5fe62649d47a0fb8e5e109e2b97dd57e234e79e8c705c10a6d46c400e60c64736f6c63430008180033
Deployed Bytecode Sourcemap
1549:9197:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5806:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1708:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2158:98:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4444:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3255:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6213:175:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3671:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4150:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5203:256:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5186:222:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6394:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3104:91:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5854:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1969:29:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6037:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1820:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2004:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2158:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6586:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1783:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3419:125:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1824:101:0;;;;;;;;;;;;;:::i;:::-;;1620:49:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4958:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4687:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1201:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1934:28:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5082:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2214:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2369:102:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2041:32:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6575:427:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2276:40:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3740:189:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1744:33:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4827:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1860:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1675:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4574:107;;;;;;;;;;;;;:::i;:::-;;5414:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3987:149:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1895:33:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4448:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2074:198:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5806:225:10;1094:13:0;:11;:13::i;:::-;5930:4:10::1;5922;5917:1;5901:13;:11;:13::i;:::-;:17;;;;:::i;:::-;5900:26;;;;:::i;:::-;5899:35;;;;:::i;:::-;5889:6;:45;;5881:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;6017:6;6007;:17;;;;:::i;:::-;5990:14;:34;;;;5806:225:::0;:::o;1708:29::-;;;;;;;;;;;;;:::o;2158:98:1:-;2212:13;2244:5;2237:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2158:98;:::o;4444:197::-;4527:4;4543:13;4559:12;:10;:12::i;:::-;4543:28;;4581:32;4590:5;4597:7;4606:6;4581:8;:32::i;:::-;4630:4;4623:11;;;4444:197;;;;:::o;3255:106::-;3316:7;3342:12;;3335:19;;3255:106;:::o;6213:175:10:-;1094:13:0;:11;:13::i;:::-;6307:2:10::1;6293:10;:16;;6285:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;6371:10;6353:15;:28;;;;6213:175:::0;:::o;3671:442::-;3815:1;3750:42;3743:60;;;3804:7;3743:69;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:73;3722:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;3877:15;3902:42;3877:68;;3955:14;3972:8;:18;;;3991:7;3972:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3955:44;;4010:8;:21;;;4032:7;4049:14;;;;;;;;;;;4066:6;4010:63;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4083:22;4089:7;4098:6;4083:5;:22::i;:::-;3712:401;;3671:442;:::o;4150:292::-;1094:13:0;:11;:13::i;:::-;4233:1:10::1;4224:6;:10;4216:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;4288:21;4278:6;:31;;4270:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;4347:12;4396:14;;;;;;;;;;;4388:28;;4424:6;4388:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4374:61;;;;;4206:236;4150:292:::0;:::o;5203:256:1:-;5300:4;5316:15;5334:12;:10;:12::i;:::-;5316:30;;5356:38;5372:4;5378:7;5387:6;5356:15;:38::i;:::-;5404:27;5414:4;5420:2;5424:6;5404:9;:27::i;:::-;5448:4;5441:11;;;5203:256;;;;;:::o;5186:222:10:-;1094:13:0;:11;:13::i;:::-;5309:4:10::1;5301;5296:1;5280:13;:11;:13::i;:::-;:17;;;;:::i;:::-;5279:26;;;;:::i;:::-;5278:35;;;;:::i;:::-;5268:6;:45;;5260:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;5394:6;5384;:17;;;;:::i;:::-;5368:13;:33;;;;5186:222:::0;:::o;6394:186::-;1094:13:0;:11;:13::i;:::-;6485:11:10::1;;;;;;;;;;;6477:19;;:4;:19;;::::0;6469:72:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6568:5;6551:8;:14;6560:4;6551:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;6394:186:::0;;:::o;3104:91:1:-;3162:5;3186:2;3179:9;;3104:91;:::o;5854:234::-;5942:4;5958:13;5974:12;:10;:12::i;:::-;5958:28;;5996:64;6005:5;6012:7;6049:10;6021:25;6031:5;6038:7;6021:9;:25::i;:::-;:38;;;;:::i;:::-;5996:8;:64::i;:::-;6077:4;6070:11;;;5854:234;;;;:::o;1969:29:10:-;;;;:::o;6037:170::-;1094:13:0;:11;:13::i;:::-;6128:2:10::1;6115:9;:15;;6107:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;6191:9;6174:14;:26;;;;6037:170:::0;:::o;1820:33::-;;;;;;;;;;;;;:::o;2004:30::-;;;;:::o;2158:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;6586:111::-;1094:13:0;:11;:13::i;:::-;6684:6:10::1;6664:11;:17;6676:4;6664:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;6586:111:::0;;:::o;1783:31::-;;;;;;;;;;;;;:::o;3419:125:1:-;3493:7;3519:9;:18;3529:7;3519:18;;;;;;;;;;;;;;;;3512:25;;3419:125;;;:::o;1824:101:0:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1620:49:10:-;;;:::o;4958:118::-;5010:4;1094:13:0;:11;:13::i;:::-;5043:5:10::1;5026:14;;:22;;;;;;;;;;;;;;;;;;5065:4;5058:11;;4958:118:::0;:::o;4687:134::-;1094:13:0;:11;:13::i;:::-;4809:5:10::1;4777:23;:29;4801:4;4777:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;4687:134:::0;;:::o;1201:85:0:-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;1934:28:10:-;;;;:::o;5082:98::-;1094:13:0;:11;:13::i;:::-;5166:7:10::1;5152:11;;:21;;;;;;;;;;;;;;;;;;5082:98:::0;:::o;2214:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;2369:102:1:-;2425:13;2457:7;2450:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2369:102;:::o;2041:32:10:-;;;;:::o;6575:427:1:-;6668:4;6684:13;6700:12;:10;:12::i;:::-;6684:28;;6722:24;6749:25;6759:5;6766:7;6749:9;:25::i;:::-;6722:52;;6812:15;6792:16;:35;;6784:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6903:60;6912:5;6919:7;6947:15;6928:16;:34;6903:8;:60::i;:::-;6991:4;6984:11;;;;6575:427;;;;:::o;2276:40:10:-;;;;;;;;;;;;;;;;;;;;;;:::o;3740:189:1:-;3819:4;3835:13;3851:12;:10;:12::i;:::-;3835:28;;3873;3883:5;3890:2;3894:6;3873:9;:28::i;:::-;3918:4;3911:11;;;3740:189;;;;:::o;1744:33:10:-;;;;;;;;;;;;;:::o;4827:125::-;1094:13:0;:11;:13::i;:::-;4940:5:10::1;4910:18;:27;4929:7;4910:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;4827:125:::0;;:::o;1860:29::-;;;;:::o;1675:26::-;;;;;;;;;;;;;:::o;4574:107::-;1094:13:0;:11;:13::i;:::-;4642:4:10::1;4626:13;;:20;;;;;;;;;;;;;;;;;;4670:4;4656:11;;:18;;;;;;;;;;;;;;;;;;4574:107::o:0;5414:386::-;5495:4;1094:13:0;:11;:13::i;:::-;5554:6:10::1;5549:1;5533:13;:11;:13::i;:::-;:17;;;;:::i;:::-;5532:28;;;;:::i;:::-;5519:9;:41;;5511:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;5671:4;5666:1;5650:13;:11;:13::i;:::-;:17;;;;:::i;:::-;5649:26;;;;:::i;:::-;5636:9;:39;;5628:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;5763:9;5742:18;:30;;;;5789:4;5782:11;;5414:386:::0;;;:::o;3987:149:1:-;4076:7;4102:11;:18;4114:5;4102:18;;;;;;;;;;;;;;;:27;4121:7;4102:27;;;;;;;;;;;;;;;;4095:34;;3987:149;;;;:::o;1895:33:10:-;;;;:::o;4448:120::-;1094:13:0;:11;:13::i;:::-;4546:15:10::1;4529:14;;:32;;;;;;;;;;;;;;;;;;4448:120:::0;:::o;2074:198:0:-;1094:13;:11;:13::i;:::-;2182:1:::1;2162:22;;:8;:22;;::::0;2154:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;1359:130::-;1433:12;:10;:12::i;:::-;1422:23;;:7;:5;:7::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;655:96:5:-;708:7;734:10;727:17;;655:96;:::o;10457:340:1:-;10575:1;10558:19;;:5;:19;;;10550:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10655:1;10636:21;;:7;:21;;;10628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10737:6;10707:11;:18;10719:5;10707:18;;;;;;;;;;;;;;;:27;10726:7;10707:27;;;;;;;;;;;;;;;:36;;;;10774:7;10758:32;;10767:5;10758:32;;;10783:6;10758:32;;;;;;:::i;:::-;;;;;;;;10457:340;;;:::o;8520:535::-;8622:1;8603:21;;:7;:21;;;8595:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;8671:49;8700:1;8704:7;8713:6;8671:20;:49::i;:::-;8747:6;8731:12;;:22;;;;;;;:::i;:::-;;;;;;;;8921:6;8899:9;:18;8909:7;8899:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;8973:7;8952:37;;8969:1;8952:37;;;8982:6;8952:37;;;;;;:::i;:::-;;;;;;;;9000:48;9028:1;9032:7;9041:6;9000:19;:48::i;:::-;8520:535;;:::o;11078:411::-;11178:24;11205:25;11215:5;11222:7;11205:9;:25::i;:::-;11178:52;;11264:17;11244:16;:37;11240:243;;11325:6;11305:16;:26;;11297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11407:51;11416:5;11423:7;11451:6;11432:16;:25;11407:8;:51::i;:::-;11240:243;11168:321;11078:411;;;:::o;7873:2760:10:-;7986:1;7970:18;;:4;:18;;;7962:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8062:1;8048:16;;:2;:16;;;8040:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8123:11;:17;8135:4;8123:17;;;;;;;;;;;;;;;;;;;;;;;;;8122:18;8114:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;8181:11;:15;8193:2;8181:15;;;;;;;;;;;;;;;;;;;;;;;;;8180:16;8172:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;8241:1;8231:6;:11;8227:90;;8258:28;8274:4;8280:2;8284:1;8258:15;:28::i;:::-;8300:7;;8227:90;8331:14;;;;;;;;;;;8327:1123;;;8390:7;:5;:7::i;:::-;8382:15;;:4;:15;;;;:48;;;;;8423:7;:5;:7::i;:::-;8417:13;;:2;:13;;;;8382:48;:84;;;;;8464:1;8450:16;;:2;:16;;;;8382:84;:125;;;;;8500:6;8486:21;;:2;:21;;;;8382:125;:154;;;;;8528:8;;;;;;;;;;;8527:9;8382:154;8361:1079;;;8574:13;;;;;;;;;;;8569:146;;8619:18;:24;8638:4;8619:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;8647:18;:22;8666:2;8647:22;;;;;;;;;;;;;;;;;;;;;;;;;8619:50;8611:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;8569:146;8764:8;:14;8773:4;8764:14;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;8783:23;:27;8807:2;8783:27;;;;;;;;;;;;;;;;;;;;;;;;;8782:28;8764:46;8760:666;;;8852:14;;8842:6;:24;;8834:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;8974:13;;8957;8967:2;8957:9;:13::i;:::-;8948:6;:22;;;;:::i;:::-;:39;;8940:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8760:666;;;9084:8;:12;9093:2;9084:12;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;9101:23;:29;9125:4;9101:29;;;;;;;;;;;;;;;;;;;;;;;;;9100:30;9084:46;9080:346;;;9172:14;;9162:6;:24;;9154:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9080:346;;;9285:23;:27;9309:2;9285:27;;;;;;;;;;;;;;;;;;;;;;;;;9280:146;;9370:13;;9353;9363:2;9353:9;:13::i;:::-;9344:6;:22;;;;:::i;:::-;:39;;9336:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9280:146;9080:346;8760:666;8361:1079;8327:1123;9460:23;9486:24;9504:4;9486:9;:24::i;:::-;9460:50;;9520:12;9554:18;;9535:15;:37;;9520:52;;9599:7;:34;;;;;9622:11;;;;;;;;;;;9599:34;:59;;;;;9650:8;;;;;;;;;;;9649:9;9599:59;:90;;;;;9675:8;:14;9684:4;9675:14;;;;;;;;;;;;;;;;;;;;;;;;;9674:15;9599:90;:131;;;;;9706:18;:24;9725:4;9706:24;;;;;;;;;;;;;;;;;;;;;;;;;9705:25;9599:131;:170;;;;;9747:18;:22;9766:2;9747:22;;;;;;;;;;;;;;;;;;;;;;;;;9746:23;9599:170;9582:293;;;9806:4;9795:8;;:15;;;;;;;;;;;;;;;;;;9824:10;:8;:10::i;:::-;9859:5;9848:8;;:16;;;;;;;;;;;;;;;;;;9582:293;9885:12;9901:8;;;;;;;;;;;9900:9;9885:24;;9923:18;:24;9942:4;9923:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;9951:18;:22;9970:2;9951:22;;;;;;;;;;;;;;;;;;;;;;;;;9923:50;9919:96;;;9999:5;9989:15;;9919:96;10025:11;10054:7;10050:533;;;10104:8;:12;10113:2;10104:12;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;;;10138:1;10120:15;;:19;10104:35;10100:344;;;10192:3;10174:15;;10165:6;:24;;;;:::i;:::-;:30;;;;:::i;:::-;10159:36;;10234:3;10213:17;;:24;;;;;;;:::i;:::-;;;;;;;;10100:344;;;10296:8;:14;10305:4;10296:14;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;10331:1;10314:14;;:18;10296:36;10292:152;;;10384:3;10367:14;;10358:6;:23;;;;:::i;:::-;:29;;;;:::i;:::-;10352:35;;10426:3;10405:17;;:24;;;;;;;:::i;:::-;;;;;;;;10292:152;10100:344;10468:1;10462:3;:7;10458:87;;;10489:41;10505:4;10519;10526:3;10489:15;:41::i;:::-;10458:87;10569:3;10559:13;;;;;:::i;:::-;;;10050:533;10593:33;10609:4;10615:2;10619:6;10593:15;:33::i;:::-;7952:2681;;;;7873:2760;;;;:::o;2426:187:0:-;2499:16;2518:6;;;;;;;;;;;2499:25;;2543:8;2534:6;;:17;;;;;;;;;;;;;;;;;;2597:8;2566:40;;2587:8;2566:40;;;;;;;;;;;;2489:124;2426:187;:::o;12073:91:1:-;;;;:::o;12752:90::-;;;;:::o;7456:788::-;7568:1;7552:18;;:4;:18;;;7544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7644:1;7630:16;;:2;:16;;;7622:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7697:38;7718:4;7724:2;7728:6;7697:20;:38::i;:::-;7746:19;7768:9;:15;7778:4;7768:15;;;;;;;;;;;;;;;;7746:37;;7816:6;7801:11;:21;;7793:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7931:6;7917:11;:20;7899:9;:15;7909:4;7899:15;;;;;;;;;;;;;;;:38;;;;8131:6;8114:9;:13;8124:2;8114:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;8178:2;8163:26;;8172:4;8163:26;;;8182:6;8163:26;;;;;;:::i;:::-;;;;;;;;8200:37;8220:4;8226:2;8230:6;8200:19;:37::i;:::-;7534:710;7456:788;;;:::o;6703:591:10:-;6741:23;6767:24;6785:4;6767:9;:24::i;:::-;6741:50;;6801:12;6847:1;6828:15;:20;6824:57;;6864:7;;;;6824:57;6934:2;6913:18;;:23;;;;:::i;:::-;6895:15;:41;6891:113;;;6991:2;6970:18;;:23;;;;:::i;:::-;6952:41;;6891:113;7014:25;7042:21;7014:49;;7073:33;7090:15;7073:16;:33::i;:::-;7117:18;7162:17;7138:21;:41;;;;:::i;:::-;7117:62;;7210:1;7190:17;:21;;;;7244:14;;;;;;;;;;;7236:28;;7272:10;7236:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7222:65;;;;;6731:563;;;;6703:591;:::o;7300:567::-;7424:21;7462:1;7448:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7424:40;;7492:4;7474;7479:1;7474:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;7517:13;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7507:4;7512:1;7507:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;7548:60;7565:4;7580:13;7596:11;7548:8;:60::i;:::-;7644:13;:64;;;7722:11;7747:1;7790:4;7816;7835:15;7644:216;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7355:512;7300:567;:::o;88:117:11:-;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:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:126::-;1062:7;1102:42;1095:5;1091:54;1080:65;;1025:126;;;:::o;1157:96::-;1194:7;1223:24;1241:5;1223:24;:::i;:::-;1212:35;;1157:96;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:99::-;1663:6;1697:5;1691:12;1681:22;;1611:99;;;:::o;1716:169::-;1800:11;1834:6;1829:3;1822:19;1874:4;1869:3;1865:14;1850:29;;1716:169;;;;:::o;1891:246::-;1972:1;1982:113;1996:6;1993:1;1990:13;1982:113;;;2081:1;2076:3;2072:11;2066:18;2062:1;2057:3;2053:11;2046:39;2018:2;2015:1;2011:10;2006:15;;1982:113;;;2129:1;2120:6;2115:3;2111:16;2104:27;1953:184;1891:246;;;:::o;2143:102::-;2184:6;2235:2;2231:7;2226:2;2219:5;2215:14;2211:28;2201:38;;2143:102;;;:::o;2251:377::-;2339:3;2367:39;2400:5;2367:39;:::i;:::-;2422:71;2486:6;2481:3;2422:71;:::i;:::-;2415:78;;2502:65;2560:6;2555:3;2548:4;2541:5;2537:16;2502:65;:::i;:::-;2592:29;2614:6;2592:29;:::i;:::-;2587:3;2583:39;2576:46;;2343:285;2251:377;;;;:::o;2634:313::-;2747:4;2785:2;2774:9;2770:18;2762:26;;2834:9;2828:4;2824:20;2820:1;2809:9;2805:17;2798:47;2862:78;2935:4;2926:6;2862:78;:::i;:::-;2854:86;;2634:313;;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:118::-;4220:24;4238:5;4220:24;:::i;:::-;4215:3;4208:37;4133:118;;:::o;4257:222::-;4350:4;4388:2;4377:9;4373:18;4365:26;;4401:71;4469:1;4458:9;4454:17;4445:6;4401:71;:::i;:::-;4257:222;;;;:::o;4485:329::-;4544:6;4593:2;4581:9;4572:7;4568:23;4564:32;4561:119;;;4599:79;;:::i;:::-;4561:119;4719:1;4744:53;4789:7;4780:6;4769:9;4765:22;4744:53;:::i;:::-;4734:63;;4690:117;4485:329;;;;:::o;4820:619::-;4897:6;4905;4913;4962:2;4950:9;4941:7;4937:23;4933:32;4930:119;;;4968:79;;:::i;:::-;4930:119;5088:1;5113:53;5158:7;5149:6;5138:9;5134:22;5113:53;:::i;:::-;5103:63;;5059:117;5215:2;5241:53;5286:7;5277:6;5266:9;5262:22;5241:53;:::i;:::-;5231:63;;5186:118;5343:2;5369:53;5414:7;5405:6;5394:9;5390:22;5369:53;:::i;:::-;5359:63;;5314:118;4820:619;;;;;:::o;5445:116::-;5515:21;5530:5;5515:21;:::i;:::-;5508:5;5505:32;5495:60;;5551:1;5548;5541:12;5495:60;5445:116;:::o;5567:133::-;5610:5;5648:6;5635:20;5626:29;;5664:30;5688:5;5664:30;:::i;:::-;5567:133;;;;:::o;5706:468::-;5771:6;5779;5828:2;5816:9;5807:7;5803:23;5799:32;5796:119;;;5834:79;;:::i;:::-;5796:119;5954:1;5979:53;6024:7;6015:6;6004:9;6000:22;5979:53;:::i;:::-;5969:63;;5925:117;6081:2;6107:50;6149:7;6140:6;6129:9;6125:22;6107:50;:::i;:::-;6097:60;;6052:115;5706:468;;;;;:::o;6180:86::-;6215:7;6255:4;6248:5;6244:16;6233:27;;6180:86;;;:::o;6272:112::-;6355:22;6371:5;6355:22;:::i;:::-;6350:3;6343:35;6272:112;;:::o;6390:214::-;6479:4;6517:2;6506:9;6502:18;6494:26;;6530:67;6594:1;6583:9;6579:17;6570:6;6530:67;:::i;:::-;6390:214;;;;:::o;6610:60::-;6638:3;6659:5;6652:12;;6610:60;;;:::o;6676:142::-;6726:9;6759:53;6777:34;6786:24;6804:5;6786:24;:::i;:::-;6777:34;:::i;:::-;6759:53;:::i;:::-;6746:66;;6676:142;;;:::o;6824:126::-;6874:9;6907:37;6938:5;6907:37;:::i;:::-;6894:50;;6824:126;;;:::o;6956:153::-;7033:9;7066:37;7097:5;7066:37;:::i;:::-;7053:50;;6956:153;;;:::o;7115:185::-;7229:64;7287:5;7229:64;:::i;:::-;7224:3;7217:77;7115:185;;:::o;7306:276::-;7426:4;7464:2;7453:9;7449:18;7441:26;;7477:98;7572:1;7561:9;7557:17;7548:6;7477:98;:::i;:::-;7306:276;;;;:::o;7588:323::-;7644:6;7693:2;7681:9;7672:7;7668:23;7664:32;7661:119;;;7699:79;;:::i;:::-;7661:119;7819:1;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7790:114;7588:323;;;;:::o;7917:474::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8295:2;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8266:118;7917:474;;;;;:::o;8397:180::-;8445:77;8442:1;8435:88;8542:4;8539:1;8532:15;8566:4;8563:1;8556:15;8583:410;8623:7;8646:20;8664:1;8646:20;:::i;:::-;8641:25;;8680:20;8698:1;8680:20;:::i;:::-;8675:25;;8735:1;8732;8728:9;8757:30;8775:11;8757:30;:::i;:::-;8746:41;;8936:1;8927:7;8923:15;8920:1;8917:22;8897:1;8890:9;8870:83;8847:139;;8966:18;;:::i;:::-;8847:139;8631:362;8583:410;;;;:::o;8999:180::-;9047:77;9044:1;9037:88;9144:4;9141:1;9134:15;9168:4;9165:1;9158:15;9185:185;9225:1;9242:20;9260:1;9242:20;:::i;:::-;9237:25;;9276:20;9294:1;9276:20;:::i;:::-;9271:25;;9315:1;9305:35;;9320:18;;:::i;:::-;9305:35;9362:1;9359;9355:9;9350:14;;9185:185;;;;:::o;9376:228::-;9516:34;9512:1;9504:6;9500:14;9493:58;9585:11;9580:2;9572:6;9568:15;9561:36;9376:228;:::o;9610:366::-;9752:3;9773:67;9837:2;9832:3;9773:67;:::i;:::-;9766:74;;9849:93;9938:3;9849:93;:::i;:::-;9967:2;9962:3;9958:12;9951:19;;9610:366;;;:::o;9982:419::-;10148:4;10186:2;10175:9;10171:18;10163:26;;10235:9;10229:4;10225:20;10221:1;10210:9;10206:17;10199:47;10263:131;10389:4;10263:131;:::i;:::-;10255:139;;9982:419;;;:::o;10407:180::-;10455:77;10452:1;10445:88;10552:4;10549:1;10542:15;10576:4;10573:1;10566:15;10593:320;10637:6;10674:1;10668:4;10664:12;10654:22;;10721:1;10715:4;10711:12;10742:18;10732:81;;10798:4;10790:6;10786:17;10776:27;;10732:81;10860:2;10852:6;10849:14;10829:18;10826:38;10823:84;;10879:18;;:::i;:::-;10823:84;10644:269;10593:320;;;:::o;10919:179::-;11059:31;11055:1;11047:6;11043:14;11036:55;10919:179;:::o;11104:366::-;11246:3;11267:67;11331:2;11326:3;11267:67;:::i;:::-;11260:74;;11343:93;11432:3;11343:93;:::i;:::-;11461:2;11456:3;11452:12;11445:19;;11104:366;;;:::o;11476:419::-;11642:4;11680:2;11669:9;11665:18;11657:26;;11729:9;11723:4;11719:20;11715:1;11704:9;11700:17;11693:47;11757:131;11883:4;11757:131;:::i;:::-;11749:139;;11476:419;;;:::o;11901:143::-;11958:5;11989:6;11983:13;11974:22;;12005:33;12032:5;12005:33;:::i;:::-;11901:143;;;;:::o;12050:351::-;12120:6;12169:2;12157:9;12148:7;12144:23;12140:32;12137:119;;;12175:79;;:::i;:::-;12137:119;12295:1;12320:64;12376:7;12367:6;12356:9;12352:22;12320:64;:::i;:::-;12310:74;;12266:128;12050:351;;;;:::o;12407:174::-;12547:26;12543:1;12535:6;12531:14;12524:50;12407:174;:::o;12587:366::-;12729:3;12750:67;12814:2;12809:3;12750:67;:::i;:::-;12743:74;;12826:93;12915:3;12826:93;:::i;:::-;12944:2;12939:3;12935:12;12928:19;;12587:366;;;:::o;12959:419::-;13125:4;13163:2;13152:9;13148:18;13140:26;;13212:9;13206:4;13202:20;13198:1;13187:9;13183:17;13176:47;13240:131;13366:4;13240:131;:::i;:::-;13232:139;;12959:419;;;:::o;13384:442::-;13533:4;13571:2;13560:9;13556:18;13548:26;;13584:71;13652:1;13641:9;13637:17;13628:6;13584:71;:::i;:::-;13665:72;13733:2;13722:9;13718:18;13709:6;13665:72;:::i;:::-;13747;13815:2;13804:9;13800:18;13791:6;13747:72;:::i;:::-;13384:442;;;;;;:::o;13832:137::-;13886:5;13917:6;13911:13;13902:22;;13933:30;13957:5;13933:30;:::i;:::-;13832:137;;;;:::o;13975:345::-;14042:6;14091:2;14079:9;14070:7;14066:23;14062:32;14059:119;;;14097:79;;:::i;:::-;14059:119;14217:1;14242:61;14295:7;14286:6;14275:9;14271:22;14242:61;:::i;:::-;14232:71;;14188:125;13975:345;;;;:::o;14326:171::-;14466:23;14462:1;14454:6;14450:14;14443:47;14326:171;:::o;14503:366::-;14645:3;14666:67;14730:2;14725:3;14666:67;:::i;:::-;14659:74;;14742:93;14831:3;14742:93;:::i;:::-;14860:2;14855:3;14851:12;14844:19;;14503:366;;;:::o;14875:419::-;15041:4;15079:2;15068:9;15064:18;15056:26;;15128:9;15122:4;15118:20;15114:1;15103:9;15099:17;15092:47;15156:131;15282:4;15156:131;:::i;:::-;15148:139;;14875:419;;;:::o;15300:164::-;15440:16;15436:1;15428:6;15424:14;15417:40;15300:164;:::o;15470:366::-;15612:3;15633:67;15697:2;15692:3;15633:67;:::i;:::-;15626:74;;15709:93;15798:3;15709:93;:::i;:::-;15827:2;15822:3;15818:12;15811:19;;15470:366;;;:::o;15842:419::-;16008:4;16046:2;16035:9;16031:18;16023:26;;16095:9;16089:4;16085:20;16081:1;16070:9;16066:17;16059:47;16123:131;16249:4;16123:131;:::i;:::-;16115:139;;15842:419;;;:::o;16267:147::-;16368:11;16405:3;16390:18;;16267:147;;;;:::o;16420:114::-;;:::o;16540:398::-;16699:3;16720:83;16801:1;16796:3;16720:83;:::i;:::-;16713:90;;16812:93;16901:3;16812:93;:::i;:::-;16930:1;16925:3;16921:11;16914:18;;16540:398;;;:::o;16944:379::-;17128:3;17150:147;17293:3;17150:147;:::i;:::-;17143:154;;17314:3;17307:10;;16944:379;;;:::o;17329:227::-;17469:34;17465:1;17457:6;17453:14;17446:58;17538:10;17533:2;17525:6;17521:15;17514:35;17329:227;:::o;17562:366::-;17704:3;17725:67;17789:2;17784:3;17725:67;:::i;:::-;17718:74;;17801:93;17890:3;17801:93;:::i;:::-;17919:2;17914:3;17910:12;17903:19;;17562:366;;;:::o;17934:419::-;18100:4;18138:2;18127:9;18123:18;18115:26;;18187:9;18181:4;18177:20;18173:1;18162:9;18158:17;18151:47;18215:131;18341:4;18215:131;:::i;:::-;18207:139;;17934:419;;;:::o;18359:227::-;18499:34;18495:1;18487:6;18483:14;18476:58;18568:10;18563:2;18555:6;18551:15;18544:35;18359:227;:::o;18592:366::-;18734:3;18755:67;18819:2;18814:3;18755:67;:::i;:::-;18748:74;;18831:93;18920:3;18831:93;:::i;:::-;18949:2;18944:3;18940:12;18933:19;;18592:366;;;:::o;18964:419::-;19130:4;19168:2;19157:9;19153:18;19145:26;;19217:9;19211:4;19207:20;19203:1;19192:9;19188:17;19181:47;19245:131;19371:4;19245:131;:::i;:::-;19237:139;;18964:419;;;:::o;19389:191::-;19429:3;19448:20;19466:1;19448:20;:::i;:::-;19443:25;;19482:20;19500:1;19482:20;:::i;:::-;19477:25;;19525:1;19522;19518:9;19511:16;;19546:3;19543:1;19540:10;19537:36;;;19553:18;;:::i;:::-;19537:36;19389:191;;;;:::o;19586:224::-;19726:34;19722:1;19714:6;19710:14;19703:58;19795:7;19790:2;19782:6;19778:15;19771:32;19586:224;:::o;19816:366::-;19958:3;19979:67;20043:2;20038:3;19979:67;:::i;:::-;19972:74;;20055:93;20144:3;20055:93;:::i;:::-;20173:2;20168:3;20164:12;20157:19;;19816:366;;;:::o;20188:419::-;20354:4;20392:2;20381:9;20377:18;20369:26;;20441:9;20435:4;20431:20;20427:1;20416:9;20412:17;20405:47;20469:131;20595:4;20469:131;:::i;:::-;20461:139;;20188:419;;;:::o;20613:240::-;20753:34;20749:1;20741:6;20737:14;20730:58;20822:23;20817:2;20809:6;20805:15;20798:48;20613:240;:::o;20859:366::-;21001:3;21022:67;21086:2;21081:3;21022:67;:::i;:::-;21015:74;;21098:93;21187:3;21098:93;:::i;:::-;21216:2;21211:3;21207:12;21200:19;;20859:366;;;:::o;21231:419::-;21397:4;21435:2;21424:9;21420:18;21412:26;;21484:9;21478:4;21474:20;21470:1;21459:9;21455:17;21448:47;21512:131;21638:4;21512:131;:::i;:::-;21504:139;;21231:419;;;:::o;21656:239::-;21796:34;21792:1;21784:6;21780:14;21773:58;21865:22;21860:2;21852:6;21848:15;21841:47;21656:239;:::o;21901:366::-;22043:3;22064:67;22128:2;22123:3;22064:67;:::i;:::-;22057:74;;22140:93;22229:3;22140:93;:::i;:::-;22258:2;22253:3;22249:12;22242:19;;21901:366;;;:::o;22273:419::-;22439:4;22477:2;22466:9;22462:18;22454:26;;22526:9;22520:4;22516:20;22512:1;22501:9;22497:17;22490:47;22554:131;22680:4;22554:131;:::i;:::-;22546:139;;22273:419;;;:::o;22698:225::-;22838:34;22834:1;22826:6;22822:14;22815:58;22907:8;22902:2;22894:6;22890:15;22883:33;22698:225;:::o;22929:366::-;23071:3;23092:67;23156:2;23151:3;23092:67;:::i;:::-;23085:74;;23168:93;23257:3;23168:93;:::i;:::-;23286:2;23281:3;23277:12;23270:19;;22929:366;;;:::o;23301:419::-;23467:4;23505:2;23494:9;23490:18;23482:26;;23554:9;23548:4;23544:20;23540:1;23529:9;23525:17;23518:47;23582:131;23708:4;23582:131;:::i;:::-;23574:139;;23301:419;;;:::o;23726:182::-;23866:34;23862:1;23854:6;23850:14;23843:58;23726:182;:::o;23914:366::-;24056:3;24077:67;24141:2;24136:3;24077:67;:::i;:::-;24070:74;;24153:93;24242:3;24153:93;:::i;:::-;24271:2;24266:3;24262:12;24255:19;;23914:366;;;:::o;24286:419::-;24452:4;24490:2;24479:9;24475:18;24467:26;;24539:9;24533:4;24529:20;24525:1;24514:9;24510:17;24503:47;24567:131;24693:4;24567:131;:::i;:::-;24559:139;;24286:419;;;:::o;24711:223::-;24851:34;24847:1;24839:6;24835:14;24828:58;24920:6;24915:2;24907:6;24903:15;24896:31;24711:223;:::o;24940:366::-;25082:3;25103:67;25167:2;25162:3;25103:67;:::i;:::-;25096:74;;25179:93;25268:3;25179:93;:::i;:::-;25297:2;25292:3;25288:12;25281:19;;24940:366;;;:::o;25312:419::-;25478:4;25516:2;25505:9;25501:18;25493:26;;25565:9;25559:4;25555:20;25551:1;25540:9;25536:17;25529:47;25593:131;25719:4;25593:131;:::i;:::-;25585:139;;25312:419;;;:::o;25737:221::-;25877:34;25873:1;25865:6;25861:14;25854:58;25946:4;25941:2;25933:6;25929:15;25922:29;25737:221;:::o;25964:366::-;26106:3;26127:67;26191:2;26186:3;26127:67;:::i;:::-;26120:74;;26203:93;26292:3;26203:93;:::i;:::-;26321:2;26316:3;26312:12;26305:19;;25964:366;;;:::o;26336:419::-;26502:4;26540:2;26529:9;26525:18;26517:26;;26589:9;26583:4;26579:20;26575:1;26564:9;26560:17;26553:47;26617:131;26743:4;26617:131;:::i;:::-;26609:139;;26336:419;;;:::o;26761:181::-;26901:33;26897:1;26889:6;26885:14;26878:57;26761:181;:::o;26948:366::-;27090:3;27111:67;27175:2;27170:3;27111:67;:::i;:::-;27104:74;;27187:93;27276:3;27187:93;:::i;:::-;27305:2;27300:3;27296:12;27289:19;;26948:366;;;:::o;27320:419::-;27486:4;27524:2;27513:9;27509:18;27501:26;;27573:9;27567:4;27563:20;27559:1;27548:9;27544:17;27537:47;27601:131;27727:4;27601:131;:::i;:::-;27593:139;;27320:419;;;:::o;27745:179::-;27885:31;27881:1;27873:6;27869:14;27862:55;27745:179;:::o;27930:366::-;28072:3;28093:67;28157:2;28152:3;28093:67;:::i;:::-;28086:74;;28169:93;28258:3;28169:93;:::i;:::-;28287:2;28282:3;28278:12;28271:19;;27930:366;;;:::o;28302:419::-;28468:4;28506:2;28495:9;28491:18;28483:26;;28555:9;28549:4;28545:20;28541:1;28530:9;28526:17;28519:47;28583:131;28709:4;28583:131;:::i;:::-;28575:139;;28302:419;;;:::o;28727:224::-;28867:34;28863:1;28855:6;28851:14;28844:58;28936:7;28931:2;28923:6;28919:15;28912:32;28727:224;:::o;28957:366::-;29099:3;29120:67;29184:2;29179:3;29120:67;:::i;:::-;29113:74;;29196:93;29285:3;29196:93;:::i;:::-;29314:2;29309:3;29305:12;29298:19;;28957:366;;;:::o;29329:419::-;29495:4;29533:2;29522:9;29518:18;29510:26;;29582:9;29576:4;29572:20;29568:1;29557:9;29553:17;29546:47;29610:131;29736:4;29610:131;:::i;:::-;29602:139;;29329:419;;;:::o;29754:222::-;29894:34;29890:1;29882:6;29878:14;29871:58;29963:5;29958:2;29950:6;29946:15;29939:30;29754:222;:::o;29982:366::-;30124:3;30145:67;30209:2;30204:3;30145:67;:::i;:::-;30138:74;;30221:93;30310:3;30221:93;:::i;:::-;30339:2;30334:3;30330:12;30323:19;;29982:366;;;:::o;30354:419::-;30520:4;30558:2;30547:9;30543:18;30535:26;;30607:9;30601:4;30597:20;30593:1;30582:9;30578:17;30571:47;30635:131;30761:4;30635:131;:::i;:::-;30627:139;;30354:419;;;:::o;30779:167::-;30919:19;30915:1;30907:6;30903:14;30896:43;30779:167;:::o;30952:366::-;31094:3;31115:67;31179:2;31174:3;31115:67;:::i;:::-;31108:74;;31191:93;31280:3;31191:93;:::i;:::-;31309:2;31304:3;31300:12;31293:19;;30952:366;;;:::o;31324:419::-;31490:4;31528:2;31517:9;31513:18;31505:26;;31577:9;31571:4;31567:20;31563:1;31552:9;31548:17;31541:47;31605:131;31731:4;31605:131;:::i;:::-;31597:139;;31324:419;;;:::o;31749:165::-;31889:17;31885:1;31877:6;31873:14;31866:41;31749:165;:::o;31920:366::-;32062:3;32083:67;32147:2;32142:3;32083:67;:::i;:::-;32076:74;;32159:93;32248:3;32159:93;:::i;:::-;32277:2;32272:3;32268:12;32261:19;;31920:366;;;:::o;32292:419::-;32458:4;32496:2;32485:9;32481:18;32473:26;;32545:9;32539:4;32535:20;32531:1;32520:9;32516:17;32509:47;32573:131;32699:4;32573:131;:::i;:::-;32565:139;;32292:419;;;:::o;32717:172::-;32857:24;32853:1;32845:6;32841:14;32834:48;32717:172;:::o;32895:366::-;33037:3;33058:67;33122:2;33117:3;33058:67;:::i;:::-;33051:74;;33134:93;33223:3;33134:93;:::i;:::-;33252:2;33247:3;33243:12;33236:19;;32895:366;;;:::o;33267:419::-;33433:4;33471:2;33460:9;33456:18;33448:26;;33520:9;33514:4;33510:20;33506:1;33495:9;33491:17;33484:47;33548:131;33674:4;33548:131;:::i;:::-;33540:139;;33267:419;;;:::o;33692:234::-;33832:34;33828:1;33820:6;33816:14;33809:58;33901:17;33896:2;33888:6;33884:15;33877:42;33692:234;:::o;33932:366::-;34074:3;34095:67;34159:2;34154:3;34095:67;:::i;:::-;34088:74;;34171:93;34260:3;34171:93;:::i;:::-;34289:2;34284:3;34280:12;34273:19;;33932:366;;;:::o;34304:419::-;34470:4;34508:2;34497:9;34493:18;34485:26;;34557:9;34551:4;34547:20;34543:1;34532:9;34528:17;34521:47;34585:131;34711:4;34585:131;:::i;:::-;34577:139;;34304:419;;;:::o;34729:169::-;34869:21;34865:1;34857:6;34853:14;34846:45;34729:169;:::o;34904:366::-;35046:3;35067:67;35131:2;35126:3;35067:67;:::i;:::-;35060:74;;35143:93;35232:3;35143:93;:::i;:::-;35261:2;35256:3;35252:12;35245:19;;34904:366;;;:::o;35276:419::-;35442:4;35480:2;35469:9;35465:18;35457:26;;35529:9;35523:4;35519:20;35515:1;35504:9;35500:17;35493:47;35557:131;35683:4;35557:131;:::i;:::-;35549:139;;35276:419;;;:::o;35701:235::-;35841:34;35837:1;35829:6;35825:14;35818:58;35910:18;35905:2;35897:6;35893:15;35886:43;35701:235;:::o;35942:366::-;36084:3;36105:67;36169:2;36164:3;36105:67;:::i;:::-;36098:74;;36181:93;36270:3;36181:93;:::i;:::-;36299:2;36294:3;36290:12;36283:19;;35942:366;;;:::o;36314:419::-;36480:4;36518:2;36507:9;36503:18;36495:26;;36567:9;36561:4;36557:20;36553:1;36542:9;36538:17;36531:47;36595:131;36721:4;36595:131;:::i;:::-;36587:139;;36314:419;;;:::o;36739:194::-;36779:4;36799:20;36817:1;36799:20;:::i;:::-;36794:25;;36833:20;36851:1;36833:20;:::i;:::-;36828:25;;36877:1;36874;36870:9;36862:17;;36901:1;36895:4;36892:11;36889:37;;;36906:18;;:::i;:::-;36889:37;36739:194;;;;:::o;36939:225::-;37079:34;37075:1;37067:6;37063:14;37056:58;37148:8;37143:2;37135:6;37131:15;37124:33;36939:225;:::o;37170:366::-;37312:3;37333:67;37397:2;37392:3;37333:67;:::i;:::-;37326:74;;37409:93;37498:3;37409:93;:::i;:::-;37527:2;37522:3;37518:12;37511:19;;37170:366;;;:::o;37542:419::-;37708:4;37746:2;37735:9;37731:18;37723:26;;37795:9;37789:4;37785:20;37781:1;37770:9;37766:17;37759:47;37823:131;37949:4;37823:131;:::i;:::-;37815:139;;37542:419;;;:::o;37967:180::-;38015:77;38012:1;38005:88;38112:4;38109:1;38102:15;38136:4;38133:1;38126:15;38153:180;38201:77;38198:1;38191:88;38298:4;38295:1;38288:15;38322:4;38319:1;38312:15;38339:143;38396:5;38427:6;38421:13;38412:22;;38443:33;38470:5;38443:33;:::i;:::-;38339:143;;;;:::o;38488:351::-;38558:6;38607:2;38595:9;38586:7;38582:23;38578:32;38575:119;;;38613:79;;:::i;:::-;38575:119;38733:1;38758:64;38814:7;38805:6;38794:9;38790:22;38758:64;:::i;:::-;38748:74;;38704:128;38488:351;;;;:::o;38845:85::-;38890:7;38919:5;38908:16;;38845:85;;;:::o;38936:158::-;38994:9;39027:61;39045:42;39054:32;39080:5;39054:32;:::i;:::-;39045:42;:::i;:::-;39027:61;:::i;:::-;39014:74;;38936:158;;;:::o;39100:147::-;39195:45;39234:5;39195:45;:::i;:::-;39190:3;39183:58;39100:147;;:::o;39253:114::-;39320:6;39354:5;39348:12;39338:22;;39253:114;;;:::o;39373:184::-;39472:11;39506:6;39501:3;39494:19;39546:4;39541:3;39537:14;39522:29;;39373:184;;;;:::o;39563:132::-;39630:4;39653:3;39645:11;;39683:4;39678:3;39674:14;39666:22;;39563:132;;;:::o;39701:108::-;39778:24;39796:5;39778:24;:::i;:::-;39773:3;39766:37;39701:108;;:::o;39815:179::-;39884:10;39905:46;39947:3;39939:6;39905:46;:::i;:::-;39983:4;39978:3;39974:14;39960:28;;39815:179;;;;:::o;40000:113::-;40070:4;40102;40097:3;40093:14;40085:22;;40000:113;;;:::o;40149:732::-;40268:3;40297:54;40345:5;40297:54;:::i;:::-;40367:86;40446:6;40441:3;40367:86;:::i;:::-;40360:93;;40477:56;40527:5;40477:56;:::i;:::-;40556:7;40587:1;40572:284;40597:6;40594:1;40591:13;40572:284;;;40673:6;40667:13;40700:63;40759:3;40744:13;40700:63;:::i;:::-;40693:70;;40786:60;40839:6;40786:60;:::i;:::-;40776:70;;40632:224;40619:1;40616;40612:9;40607:14;;40572:284;;;40576:14;40872:3;40865:10;;40273:608;;;40149:732;;;;:::o;40887:831::-;41150:4;41188:3;41177:9;41173:19;41165:27;;41202:71;41270:1;41259:9;41255:17;41246:6;41202:71;:::i;:::-;41283:80;41359:2;41348:9;41344:18;41335:6;41283:80;:::i;:::-;41410:9;41404:4;41400:20;41395:2;41384:9;41380:18;41373:48;41438:108;41541:4;41532:6;41438:108;:::i;:::-;41430:116;;41556:72;41624:2;41613:9;41609:18;41600:6;41556:72;:::i;:::-;41638:73;41706:3;41695:9;41691:19;41682:6;41638:73;:::i;:::-;40887:831;;;;;;;;:::o
Swarm Source
ipfs://2ebb5fe62649d47a0fb8e5e109e2b97dd57e234e79e8c705c10a6d46c400e60c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.