ERC-20
Overview
Max Total Supply
1,000,000,000,000,000 MAROSCA
Holders
342
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.014154296875 MAROSCAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MaroscaInu
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC20.sol"; import "./Ownable.sol"; import "./SafeMath.sol"; import "./IUniswapV2Pair.sol"; import "./IUniswapV2Router02.sol"; import "./IUniswapV2Factory.sol"; /* <> Cristiano Inu: Cristiano Ronaldo has an inu named Marosca. <> Website - https://Maroscainu.net/ Telegram - https://t.me/Maroscainu */ contract MaroscaInu is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 private uniswapV2Router; address private uniswapV2Pair; mapping (address => bool) private _isBlacklisted; bool private _swapping; uint256 private _launchTime; address private feeWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public earlySellActive = true; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public totalFees; uint256 private _marketingFee; uint256 private _liquidityFee; uint256 private _tokensForMarketing; uint256 private _tokensForLiquidity; // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) private _isExcludedMaxTransactionAmount; // To watch for early sells mapping (address => uint256) private _holderFirstBuyTimestamp; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) private automatedMarketMakerPairs; event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event feeWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity); constructor() ERC20("Marosca Inu", "MAROSCA") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 marketingFee = 15; uint256 liquidityFee = 0; uint256 totalSupply = 1e15 * 1e18; maxTransactionAmount = totalSupply * 9 / 1000; maxWallet = totalSupply * 2 / 100; swapTokensAtAmount = totalSupply * 15 / 10000; _marketingFee = marketingFee; _liquidityFee = liquidityFee; totalFees = _marketingFee + _liquidityFee; feeWallet = address(owner()); // set as fee wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; _launchTime = block.timestamp; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // disable early selling tax function disableEarlySells() external onlyOwner returns (bool) { earlySellActive = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * 1e18; } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * 1e18; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateFees(uint256 marketingFee, uint256 liquidityFee) external onlyOwner { _marketingFee = marketingFee; _liquidityFee = liquidityFee; totalFees = _marketingFee + _liquidityFee; require(totalFees <= 15, "Must keep fees at 15% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateFeeWallet(address newWallet) external onlyOwner { emit feeWalletUpdated(newWallet, feeWallet); feeWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function setBlacklisted(address[] memory blacklisted_) public onlyOwner { for (uint i = 0; i < blacklisted_.length; i++) { if (blacklisted_[i] != uniswapV2Pair && blacklisted_[i] != address(uniswapV2Router)) { _isBlacklisted[blacklisted_[i]] = false; } } } function delBlacklisted(address[] memory blacklisted_) public onlyOwner { for (uint i = 0; i < blacklisted_.length; i++) { _isBlacklisted[blacklisted_[i]] = false; } } function isSniper(address addr) public view returns (bool) { return _isBlacklisted[addr]; } 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(!_isBlacklisted[from], "Your address has been marked as a sniper, you are unable to transfer or swap."); if (amount == 0) { super._transfer(from, to, 0); return; } if (block.timestamp <= _launchTime) _isBlacklisted[to] = true; 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."); } // set first time buy timestamp if (balanceOf(to) == 0 && _holderFirstBuyTimestamp[to] == 0) { _holderFirstBuyTimestamp[to] = block.timestamp; } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } // when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } // when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if (!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && !_swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { _swapping = true; swapBack(); _swapping = false; } bool takeFee = !_swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; if (takeFee) { if ( automatedMarketMakerPairs[to] && earlySellActive && _holderFirstBuyTimestamp[from] != 0 && (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp) ) { uint256 earlyLiquidityFee = 0; uint256 earlyMarketingFee = 15; uint256 earlyTotalFees = earlyMarketingFee.add(earlyLiquidityFee); fees = amount.mul(earlyTotalFees).div(100); _tokensForLiquidity += fees * earlyLiquidityFee / earlyTotalFees; _tokensForMarketing += fees * earlyMarketingFee / earlyTotalFees; } else { fees = amount.mul(totalFees).div(100); _tokensForLiquidity += fees * _liquidityFee / totalFees; _tokensForMarketing += fees * _marketingFee / totalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function _swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing; if (contractBalance == 0 || totalTokensToSwap == 0) return; if (contractBalance > swapTokensAtAmount) { contractBalance = swapTokensAtAmount; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; _swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing; _tokensForLiquidity = 0; _tokensForMarketing = 0; (bool success, ) = address(feeWallet).call{value: ethForMarketing}(""); if (liquidityTokens > 0 && ethForLiquidity > 0) { _addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity); } } function forceSwap() external onlyOwner { _swapTokensForEth(balanceOf(address(this))); (bool success, ) = address(feeWallet).call{value: address(this).balance}(""); } function forceSend() external onlyOwner { (bool success, ) = address(feeWallet).call{value: address(this).balance}(""); } receive() external payable {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./IERC20Metadata.sol"; import "./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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * 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}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `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, _allowances[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 = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `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; } _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; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * 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 (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `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); /** * @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); }
// 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 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; }
// SPDX-License-Identifier: MIT 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; }
// SPDX-License-Identifier: MIT 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); }
// SPDX-License-Identifier: MIT 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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "./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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeWalletUpdated","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":"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":[],"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":"blacklisted_","type":"address[]"}],"name":"delBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableEarlySells","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"blacklisted_","type":"address[]"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","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":"totalFees","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff0219169083151502179055506001601160006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600b81526020017f4d61726f73636120496e750000000000000000000000000000000000000000008152506040518060400160405280600781526020017f4d41524f5343410000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000ad5565b5080600490805190602001906200011b92919062000ad5565b5050506200013e620001326200059560201b60201c565b6200059d60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200016a8160016200066360201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001f257600080fd5b505afa15801562000207573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022d919062000b9c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029057600080fd5b505afa158015620002a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cb919062000b9c565b6040518363ffffffff1660e01b8152600401620002ea92919062000c7f565b602060405180830381600087803b1580156200030557600080fd5b505af11580156200031a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000340919062000b9c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003b5600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066360201b60201c565b620003ea600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200074d60201b60201c565b6000600f90506000806d314dc6448d9338c15b0a0000000090506103e860098262000416919062000dd0565b62000422919062000d98565b600c81905550606460028262000439919062000dd0565b62000445919062000d98565b600e81905550612710600f826200045d919062000dd0565b62000469919062000d98565b600d8190555082601381905550816014819055506014546013546200048f919062000d3b565b601281905550620004a5620007ee60201b60201c565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000507620004f9620007ee60201b60201c565b60016200081860201b60201c565b6200051a3060016200081860201b60201c565b6200052f61dead60016200081860201b60201c565b6200055162000543620007ee60201b60201c565b60016200066360201b60201c565b620005643060016200066360201b60201c565b6200057961dead60016200066360201b60201c565b6200058b33826200095260201b60201c565b5050505062000f58565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006736200059560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000699620007ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e99062000cc9565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008286200059560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200084e620007ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089e9062000cc9565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000946919062000cac565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009bc9062000ceb565b60405180910390fd5b620009d96000838362000acb60201b60201c565b8060026000828254620009ed919062000d3b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a44919062000d3b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aab919062000d0d565b60405180910390a362000ac76000838362000ad060201b60201c565b5050565b505050565b505050565b82805462000ae39062000e7b565b90600052602060002090601f01602090048101928262000b07576000855562000b53565b82601f1062000b2257805160ff191683800117855562000b53565b8280016001018555821562000b53579182015b8281111562000b5257825182559160200191906001019062000b35565b5b50905062000b62919062000b66565b5090565b5b8082111562000b8157600081600090555060010162000b67565b5090565b60008151905062000b968162000f3e565b92915050565b60006020828403121562000baf57600080fd5b600062000bbf8482850162000b85565b91505092915050565b62000bd38162000e31565b82525050565b62000be48162000e45565b82525050565b600062000bf960208362000d2a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600062000c3b601f8362000d2a565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b62000c798162000e71565b82525050565b600060408201905062000c96600083018562000bc8565b62000ca5602083018462000bc8565b9392505050565b600060208201905062000cc3600083018462000bd9565b92915050565b6000602082019050818103600083015262000ce48162000bea565b9050919050565b6000602082019050818103600083015262000d068162000c2c565b9050919050565b600060208201905062000d24600083018462000c6e565b92915050565b600082825260208201905092915050565b600062000d488262000e71565b915062000d558362000e71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d8d5762000d8c62000eb1565b5b828201905092915050565b600062000da58262000e71565b915062000db28362000e71565b92508262000dc55762000dc462000ee0565b5b828204905092915050565b600062000ddd8262000e71565b915062000dea8362000e71565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e265762000e2562000eb1565b5b828202905092915050565b600062000e3e8262000e51565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000e9457607f821691505b6020821081141562000eab5762000eaa62000f0f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b62000f498162000e31565b811462000f5557600080fd5b50565b61503c8062000f686000396000f3fe60806040526004361061023f5760003560e01c806375c5df911161012e578063c8125e45116100ab578063df778d261161006f578063df778d2614610892578063e2f45605146108a9578063e884f260146108d4578063f2fde38b146108ff578063f8b45b051461092857610246565b8063c8125e4514610799578063c876d0b9146107c2578063c8c8ebe4146107ed578063d257b34f14610818578063dd62ed3e1461085557610246565b8063a457c2d7116100f2578063a457c2d7146106a2578063a9059cbb146106df578063bbc0c7421461071c578063c024666814610747578063c18bc1951461077057610246565b806375c5df91146105e15780638a8c523c1461060c5780638da5cb5b1461062357806395d89b411461064e5780639a7a23d61461067957610246565b8063313ce567116101bc5780636db79437116101805780636db794371461051057806370a0823114610539578063715018a614610576578063751039fc1461058d5780637571336a146105b857610246565b8063313ce5671461041757806339509351146104425780634a62bb651461047f5780634fbee193146104aa57806366718524146104e757610246565b806312b77e8a1161020357806312b77e8a1461034457806313114a9d1461035b57806318160ddd14610386578063203e727e146103b157806323b872dd146103da57610246565b8063056415ca1461024b57806306fdde0314610276578063095ea7b3146102a15780630b559c6f146102de5780630f3a325f1461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610953565b60405161026d9190614869565b60405180910390f35b34801561028257600080fd5b5061028b6109f3565b6040516102989190614884565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190613d98565b610a85565b6040516102d59190614869565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613dd4565b610aa8565b005b34801561031357600080fd5b5061032e60048036038101906103299190613c7f565b610d11565b60405161033b9190614869565b60405180910390f35b34801561035057600080fd5b50610359610d67565b005b34801561036757600080fd5b50610370610e74565b60405161037d9190614b46565b60405180910390f35b34801561039257600080fd5b5061039b610e7a565b6040516103a89190614b46565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613e15565b610e84565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190613d0d565b610f93565b60405161040e9190614869565b60405180910390f35b34801561042357600080fd5b5061042c610fc2565b6040516104399190614bf2565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190613d98565b610fcb565b6040516104769190614869565b60405180910390f35b34801561048b57600080fd5b50610494611075565b6040516104a19190614869565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613c7f565b611088565b6040516104de9190614869565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613c7f565b6110de565b005b34801561051c57600080fd5b5061053760048036038101906105329190613e3e565b61121a565b005b34801561054557600080fd5b50610560600480360381019061055b9190613c7f565b611304565b60405161056d9190614b46565b60405180910390f35b34801561058257600080fd5b5061058b61134c565b005b34801561059957600080fd5b506105a26113d4565b6040516105af9190614869565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190613d5c565b611474565b005b3480156105ed57600080fd5b506105f661154b565b6040516106039190614869565b60405180910390f35b34801561061857600080fd5b5061062161155e565b005b34801561062f57600080fd5b506106386115fe565b60405161064591906147ed565b60405180910390f35b34801561065a57600080fd5b50610663611628565b6040516106709190614884565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613d5c565b6116ba565b005b3480156106ae57600080fd5b506106c960048036038101906106c49190613d98565b6117d5565b6040516106d69190614869565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190613d98565b6118bf565b6040516107139190614869565b60405180910390f35b34801561072857600080fd5b506107316118e2565b60405161073e9190614869565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190613d5c565b6118f5565b005b34801561077c57600080fd5b5061079760048036038101906107929190613e15565b611a1a565b005b3480156107a557600080fd5b506107c060048036038101906107bb9190613dd4565b611b29565b005b3480156107ce57600080fd5b506107d7611c60565b6040516107e49190614869565b60405180910390f35b3480156107f957600080fd5b50610802611c73565b60405161080f9190614b46565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190613e15565b611c79565b60405161084c9190614869565b60405180910390f35b34801561086157600080fd5b5061087c60048036038101906108779190613cd1565b611dce565b6040516108899190614b46565b60405180910390f35b34801561089e57600080fd5b506108a7611e55565b005b3480156108b557600080fd5b506108be611f73565b6040516108cb9190614b46565b60405180910390f35b3480156108e057600080fd5b506108e9611f79565b6040516108f69190614869565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190613c7f565b612019565b005b34801561093457600080fd5b5061093d612111565b60405161094a9190614b46565b60405180910390f35b600061095d612117565b73ffffffffffffffffffffffffffffffffffffffff1661097b6115fe565b73ffffffffffffffffffffffffffffffffffffffff16146109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c890614a66565b60405180910390fd5b6000600f60026101000a81548160ff0219169083151502179055506001905090565b606060038054610a0290614e79565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2e90614e79565b8015610a7b5780601f10610a5057610100808354040283529160200191610a7b565b820191906000526020600020905b815481529060010190602001808311610a5e57829003601f168201915b5050505050905090565b600080610a90612117565b9050610a9d81858561211f565b600191505092915050565b610ab0612117565b73ffffffffffffffffffffffffffffffffffffffff16610ace6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90614a66565b60405180910390fd5b60005b8151811015610d0d57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610ba2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610c5c5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610c3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610cfa57600060086000848481518110610ca0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610d0590614eab565b915050610b27565b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d6f612117565b73ffffffffffffffffffffffffffffffffffffffff16610d8d6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90614a66565b60405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610e2b906147d8565b60006040518083038185875af1925050503d8060008114610e68576040519150601f19603f3d011682016040523d82523d6000602084013e610e6d565b606091505b5050905050565b60125481565b6000600254905090565b610e8c612117565b73ffffffffffffffffffffffffffffffffffffffff16610eaa6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790614a66565b60405180910390fd5b670de0b6b3a76400006103e86001610f16610e7a565b610f209190614d51565b610f2a9190614d20565b610f349190614d20565b811015610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90614b26565b60405180910390fd5b670de0b6b3a764000081610f8a9190614d51565b600c8190555050565b600080610f9e612117565b9050610fab8582856122ea565b610fb6858585612376565b60019150509392505050565b60006012905090565b600080610fd6612117565b905061106a818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110659190614cca565b61211f565b600191505092915050565b600f60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110e6612117565b73ffffffffffffffffffffffffffffffffffffffff166111046115fe565b73ffffffffffffffffffffffffffffffffffffffff161461115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190614a66565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611222612117565b73ffffffffffffffffffffffffffffffffffffffff166112406115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90614a66565b60405180910390fd5b81601381905550806014819055506014546013546112b49190614cca565b601281905550600f6012541115611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f7906148c6565b60405180910390fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611354612117565b73ffffffffffffffffffffffffffffffffffffffff166113726115fe565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90614a66565b60405180910390fd5b6113d2600061318b565b565b60006113de612117565b73ffffffffffffffffffffffffffffffffffffffff166113fc6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990614a66565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b61147c612117565b73ffffffffffffffffffffffffffffffffffffffff1661149a6115fe565b73ffffffffffffffffffffffffffffffffffffffff16146114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790614a66565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f60029054906101000a900460ff1681565b611566612117565b73ffffffffffffffffffffffffffffffffffffffff166115846115fe565b73ffffffffffffffffffffffffffffffffffffffff16146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614a66565b60405180910390fd5b6001600f60016101000a81548160ff02191690831515021790555042600a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461163790614e79565b80601f016020809104026020016040519081016040528092919081815260200182805461166390614e79565b80156116b05780601f10611685576101008083540402835291602001916116b0565b820191906000526020600020905b81548152906001019060200180831161169357829003601f168201915b5050505050905090565b6116c2612117565b73ffffffffffffffffffffffffffffffffffffffff166116e06115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90614a66565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be90614966565b60405180910390fd5b6117d18282613251565b5050565b6000806117e0612117565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90614b06565b60405180910390fd5b6118b3828686840361211f565b60019250505092915050565b6000806118ca612117565b90506118d7818585612376565b600191505092915050565b600f60019054906101000a900460ff1681565b6118fd612117565b73ffffffffffffffffffffffffffffffffffffffff1661191b6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890614a66565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a0e9190614869565b60405180910390a25050565b611a22612117565b73ffffffffffffffffffffffffffffffffffffffff16611a406115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d90614a66565b60405180910390fd5b670de0b6b3a76400006103e86005611aac610e7a565b611ab69190614d51565b611ac09190614d20565b611aca9190614d20565b811015611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390614946565b60405180910390fd5b670de0b6b3a764000081611b209190614d51565b600e8190555050565b611b31612117565b73ffffffffffffffffffffffffffffffffffffffff16611b4f6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90614a66565b60405180910390fd5b60005b8151811015611c5c57600060086000848481518110611bf0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611c5490614eab565b915050611ba8565b5050565b601160009054906101000a900460ff1681565b600c5481565b6000611c83612117565b73ffffffffffffffffffffffffffffffffffffffff16611ca16115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90614a66565b60405180910390fd5b620186a06001611d05610e7a565b611d0f9190614d51565b611d199190614d20565b821015611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d52906149e6565b60405180910390fd5b6103e86005611d68610e7a565b611d729190614d51565b611d7c9190614d20565b821115611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590614a06565b60405180910390fd5b81600d8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e5d612117565b73ffffffffffffffffffffffffffffffffffffffff16611e7b6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec890614a66565b60405180910390fd5b611ee2611edd30611304565b6132f2565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611f2a906147d8565b60006040518083038185875af1925050503d8060008114611f67576040519150601f19603f3d011682016040523d82523d6000602084013e611f6c565b606091505b5050905050565b600d5481565b6000611f83612117565b73ffffffffffffffffffffffffffffffffffffffff16611fa16115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee90614a66565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b612021612117565b73ffffffffffffffffffffffffffffffffffffffff1661203f6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208c90614a66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fc90614906565b60405180910390fd5b61210e8161318b565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614ac6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f690614926565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122dd9190614b46565b60405180910390a3505050565b60006122f68484611dce565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123705781811015612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235990614986565b60405180910390fd5b61236f848484840361211f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dd90614a86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d906148a6565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614aa6565b60405180910390fd5b60008114156124fd576124f8838360006135b6565b613186565b600a54421161255f576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600f60009054906101000a900460ff1615612cc75761257c6115fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125ea57506125ba6115fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126235750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561265d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126765750600960009054906101000a900460ff16155b15612cc657600f60019054906101000a900460ff1661277057601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127305750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61276f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612766906148e6565b60405180910390fd5b5b600061277b83611304565b1480156127c757506000601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156128115742601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601160009054906101000a900460ff16156129dd5761282e6115fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156128b75750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129115750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129dc5743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298e90614a46565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a805750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b2757600c54811115612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190614a26565b60405180910390fd5b600e54612ad683611304565b82612ae19190614cca565b1115612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1990614ae6565b60405180910390fd5b612cc5565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bca5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c1957600c54811115612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b906149c6565b60405180910390fd5b612cc4565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cc357600e54612c7683611304565b82612c819190614cca565b1115612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990614ae6565b60405180910390fd5b5b5b5b5b5b6000612cd230611304565b90506000600d548210159050808015612cf85750600960009054906101000a900460ff16155b8015612d4e5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612da45750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dfa5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3e576001600960006101000a81548160ff021916908315150217905550612e22613837565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ef45750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612efe57600090505b6000811561317657601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6b5750600f60029054906101000a900460ff165b8015612fb757506000601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b801561301057504262015180601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300d9190614cca565b10155b156130c157600080600f905060006130318383613a2a90919063ffffffff16565b9050613059606461304b838b613a4090919063ffffffff16565b613a5690919063ffffffff16565b93508083856130689190614d51565b6130729190614d20565b601660008282546130839190614cca565b925050819055508082856130979190614d51565b6130a19190614d20565b601560008282546130b29190614cca565b92505081905550505050613152565b6130e960646130db60125488613a4090919063ffffffff16565b613a5690919063ffffffff16565b9050601254601454826130fc9190614d51565b6131069190614d20565b601660008282546131179190614cca565b925050819055506012546013548261312f9190614d51565b6131399190614d20565b6015600082825461314a9190614cca565b925050819055505b6000811115613167576131668730836135b6565b5b80856131739190614dab565b94505b6131818787876135b6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115613335577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156133635781602001602082028036833780820191505090505b50905030816000815181106133a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561344357600080fd5b505afa158015613457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347b9190613ca8565b816001815181106134b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061351c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461211f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613580959493929190614b61565b600060405180830381600087803b15801561359a57600080fd5b505af11580156135ae573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361d90614a86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368d906148a6565b60405180910390fd5b6136a1838383613a6c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371e906149a6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137ba9190614cca565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161381e9190614b46565b60405180910390a3613831848484613a71565b50505050565b600061384230611304565b905060006015546016546138569190614cca565b905060008214806138675750600081145b15613873575050613a28565b600d5482111561388357600d5491505b6000600282601654856138969190614d51565b6138a09190614d20565b6138aa9190614d20565b905060006138c18285613a7690919063ffffffff16565b905060004790506138d1826132f2565b60006138e68247613a7690919063ffffffff16565b905060006139118661390360155485613a4090919063ffffffff16565b613a5690919063ffffffff16565b9050600081836139219190614dab565b9050600060168190555060006015819055506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161397b906147d8565b60006040518083038185875af1925050503d80600081146139b8576040519150601f19603f3d011682016040523d82523d6000602084013e6139bd565b606091505b505090506000871180156139d15750600082115b15613a1e576139e08783613a8c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618683601654604051613a1593929190614bbb565b60405180910390a15b5050505050505050505b565b60008183613a389190614cca565b905092915050565b60008183613a4e9190614d51565b905092915050565b60008183613a649190614d20565b905092915050565b505050565b505050565b60008183613a849190614dab565b905092915050565b613ab930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461211f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b056115fe565b426040518863ffffffff1660e01b8152600401613b2796959493929190614808565b6060604051808303818588803b158015613b4057600080fd5b505af1158015613b54573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b799190613e7a565b5050505050565b6000613b93613b8e84614c3e565b614c0d565b90508083825260208201905082856020860282011115613bb257600080fd5b60005b85811015613be25781613bc88882613bec565b845260208401935060208301925050600181019050613bb5565b5050509392505050565b600081359050613bfb81614fc1565b92915050565b600081519050613c1081614fc1565b92915050565b600082601f830112613c2757600080fd5b8135613c37848260208601613b80565b91505092915050565b600081359050613c4f81614fd8565b92915050565b600081359050613c6481614fef565b92915050565b600081519050613c7981614fef565b92915050565b600060208284031215613c9157600080fd5b6000613c9f84828501613bec565b91505092915050565b600060208284031215613cba57600080fd5b6000613cc884828501613c01565b91505092915050565b60008060408385031215613ce457600080fd5b6000613cf285828601613bec565b9250506020613d0385828601613bec565b9150509250929050565b600080600060608486031215613d2257600080fd5b6000613d3086828701613bec565b9350506020613d4186828701613bec565b9250506040613d5286828701613c55565b9150509250925092565b60008060408385031215613d6f57600080fd5b6000613d7d85828601613bec565b9250506020613d8e85828601613c40565b9150509250929050565b60008060408385031215613dab57600080fd5b6000613db985828601613bec565b9250506020613dca85828601613c55565b9150509250929050565b600060208284031215613de657600080fd5b600082013567ffffffffffffffff811115613e0057600080fd5b613e0c84828501613c16565b91505092915050565b600060208284031215613e2757600080fd5b6000613e3584828501613c55565b91505092915050565b60008060408385031215613e5157600080fd5b6000613e5f85828601613c55565b9250506020613e7085828601613c55565b9150509250929050565b600080600060608486031215613e8f57600080fd5b6000613e9d86828701613c6a565b9350506020613eae86828701613c6a565b9250506040613ebf86828701613c6a565b9150509250925092565b6000613ed58383613ee1565b60208301905092915050565b613eea81614ddf565b82525050565b613ef981614ddf565b82525050565b6000613f0a82614c7a565b613f148185614c9d565b9350613f1f83614c6a565b8060005b83811015613f50578151613f378882613ec9565b9750613f4283614c90565b925050600181019050613f23565b5085935050505092915050565b613f6681614df1565b82525050565b613f7581614e34565b82525050565b6000613f8682614c85565b613f908185614cb9565b9350613fa0818560208601614e46565b613fa981614fb0565b840191505092915050565b6000613fc1602383614cb9565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614027601d83614cb9565b91507f4d757374206b656570206665657320617420313525206f72206c6573730000006000830152602082019050919050565b6000614067601683614cb9565b91507f54726164696e67206973206e6f74206163746976652e000000000000000000006000830152602082019050919050565b60006140a7602683614cb9565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061410d602283614cb9565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614173602483614cb9565b91507f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008301527f302e3525000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141d9603983614cb9565b91507f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008301527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006020830152604082019050919050565b600061423f601d83614cb9565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b600061427f602683614cb9565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142e5603683614cb9565b91507f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008301527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006020830152604082019050919050565b600061434b603583614cb9565b91507f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008301527f20302e3030312520746f74616c20737570706c792e00000000000000000000006020830152604082019050919050565b60006143b1603483614cb9565b91507f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008301527f6e20302e352520746f74616c20737570706c792e0000000000000000000000006020830152604082019050919050565b6000614417603583614cb9565b91507f427579207472616e7366657220616d6f756e742065786365656473207468652060008301527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006020830152604082019050919050565b600061447d604983614cb9565b91507f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008301527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208301527f20616c6c6f7765642e00000000000000000000000000000000000000000000006040830152606082019050919050565b6000614509602083614cb9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614549602583614cb9565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145af600083614cae565b9150600082019050919050565b60006145c9604d83614cb9565b91507f596f7572206164647265737320686173206265656e206d61726b65642061732060008301527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208301527f73666572206f7220737761702e000000000000000000000000000000000000006040830152606082019050919050565b6000614655602483614cb9565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146bb601383614cb9565b91507f4d61782077616c6c6574206578636565646564000000000000000000000000006000830152602082019050919050565b60006146fb602583614cb9565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614761602f83614cb9565b91507f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008301527f6c6f776572207468616e20302e312500000000000000000000000000000000006020830152604082019050919050565b6147c381614e1d565b82525050565b6147d281614e27565b82525050565b60006147e3826145a2565b9150819050919050565b60006020820190506148026000830184613ef0565b92915050565b600060c08201905061481d6000830189613ef0565b61482a60208301886147ba565b6148376040830187613f6c565b6148446060830186613f6c565b6148516080830185613ef0565b61485e60a08301846147ba565b979650505050505050565b600060208201905061487e6000830184613f5d565b92915050565b6000602082019050818103600083015261489e8184613f7b565b905092915050565b600060208201905081810360008301526148bf81613fb4565b9050919050565b600060208201905081810360008301526148df8161401a565b9050919050565b600060208201905081810360008301526148ff8161405a565b9050919050565b6000602082019050818103600083015261491f8161409a565b9050919050565b6000602082019050818103600083015261493f81614100565b9050919050565b6000602082019050818103600083015261495f81614166565b9050919050565b6000602082019050818103600083015261497f816141cc565b9050919050565b6000602082019050818103600083015261499f81614232565b9050919050565b600060208201905081810360008301526149bf81614272565b9050919050565b600060208201905081810360008301526149df816142d8565b9050919050565b600060208201905081810360008301526149ff8161433e565b9050919050565b60006020820190508181036000830152614a1f816143a4565b9050919050565b60006020820190508181036000830152614a3f8161440a565b9050919050565b60006020820190508181036000830152614a5f81614470565b9050919050565b60006020820190508181036000830152614a7f816144fc565b9050919050565b60006020820190508181036000830152614a9f8161453c565b9050919050565b60006020820190508181036000830152614abf816145bc565b9050919050565b60006020820190508181036000830152614adf81614648565b9050919050565b60006020820190508181036000830152614aff816146ae565b9050919050565b60006020820190508181036000830152614b1f816146ee565b9050919050565b60006020820190508181036000830152614b3f81614754565b9050919050565b6000602082019050614b5b60008301846147ba565b92915050565b600060a082019050614b7660008301886147ba565b614b836020830187613f6c565b8181036040830152614b958186613eff565b9050614ba46060830185613ef0565b614bb160808301846147ba565b9695505050505050565b6000606082019050614bd060008301866147ba565b614bdd60208301856147ba565b614bea60408301846147ba565b949350505050565b6000602082019050614c0760008301846147c9565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614c3457614c33614f81565b5b8060405250919050565b600067ffffffffffffffff821115614c5957614c58614f81565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614cd582614e1d565b9150614ce083614e1d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d1557614d14614ef4565b5b828201905092915050565b6000614d2b82614e1d565b9150614d3683614e1d565b925082614d4657614d45614f23565b5b828204905092915050565b6000614d5c82614e1d565b9150614d6783614e1d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614da057614d9f614ef4565b5b828202905092915050565b6000614db682614e1d565b9150614dc183614e1d565b925082821015614dd457614dd3614ef4565b5b828203905092915050565b6000614dea82614dfd565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e3f82614e1d565b9050919050565b60005b83811015614e64578082015181840152602081019050614e49565b83811115614e73576000848401525b50505050565b60006002820490506001821680614e9157607f821691505b60208210811415614ea557614ea4614f52565b5b50919050565b6000614eb682614e1d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ee957614ee8614ef4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614fca81614ddf565b8114614fd557600080fd5b50565b614fe181614df1565b8114614fec57600080fd5b50565b614ff881614e1d565b811461500357600080fd5b5056fea26469706673582212205073ffa2cfaa2dbf1b96cdb2788712cdc6991d0c980830f1d33ee11ccf5807bd64736f6c63430008000033
Deployed Bytecode
0x60806040526004361061023f5760003560e01c806375c5df911161012e578063c8125e45116100ab578063df778d261161006f578063df778d2614610892578063e2f45605146108a9578063e884f260146108d4578063f2fde38b146108ff578063f8b45b051461092857610246565b8063c8125e4514610799578063c876d0b9146107c2578063c8c8ebe4146107ed578063d257b34f14610818578063dd62ed3e1461085557610246565b8063a457c2d7116100f2578063a457c2d7146106a2578063a9059cbb146106df578063bbc0c7421461071c578063c024666814610747578063c18bc1951461077057610246565b806375c5df91146105e15780638a8c523c1461060c5780638da5cb5b1461062357806395d89b411461064e5780639a7a23d61461067957610246565b8063313ce567116101bc5780636db79437116101805780636db794371461051057806370a0823114610539578063715018a614610576578063751039fc1461058d5780637571336a146105b857610246565b8063313ce5671461041757806339509351146104425780634a62bb651461047f5780634fbee193146104aa57806366718524146104e757610246565b806312b77e8a1161020357806312b77e8a1461034457806313114a9d1461035b57806318160ddd14610386578063203e727e146103b157806323b872dd146103da57610246565b8063056415ca1461024b57806306fdde0314610276578063095ea7b3146102a15780630b559c6f146102de5780630f3a325f1461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610953565b60405161026d9190614869565b60405180910390f35b34801561028257600080fd5b5061028b6109f3565b6040516102989190614884565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190613d98565b610a85565b6040516102d59190614869565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613dd4565b610aa8565b005b34801561031357600080fd5b5061032e60048036038101906103299190613c7f565b610d11565b60405161033b9190614869565b60405180910390f35b34801561035057600080fd5b50610359610d67565b005b34801561036757600080fd5b50610370610e74565b60405161037d9190614b46565b60405180910390f35b34801561039257600080fd5b5061039b610e7a565b6040516103a89190614b46565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613e15565b610e84565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190613d0d565b610f93565b60405161040e9190614869565b60405180910390f35b34801561042357600080fd5b5061042c610fc2565b6040516104399190614bf2565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190613d98565b610fcb565b6040516104769190614869565b60405180910390f35b34801561048b57600080fd5b50610494611075565b6040516104a19190614869565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613c7f565b611088565b6040516104de9190614869565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613c7f565b6110de565b005b34801561051c57600080fd5b5061053760048036038101906105329190613e3e565b61121a565b005b34801561054557600080fd5b50610560600480360381019061055b9190613c7f565b611304565b60405161056d9190614b46565b60405180910390f35b34801561058257600080fd5b5061058b61134c565b005b34801561059957600080fd5b506105a26113d4565b6040516105af9190614869565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190613d5c565b611474565b005b3480156105ed57600080fd5b506105f661154b565b6040516106039190614869565b60405180910390f35b34801561061857600080fd5b5061062161155e565b005b34801561062f57600080fd5b506106386115fe565b60405161064591906147ed565b60405180910390f35b34801561065a57600080fd5b50610663611628565b6040516106709190614884565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613d5c565b6116ba565b005b3480156106ae57600080fd5b506106c960048036038101906106c49190613d98565b6117d5565b6040516106d69190614869565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190613d98565b6118bf565b6040516107139190614869565b60405180910390f35b34801561072857600080fd5b506107316118e2565b60405161073e9190614869565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190613d5c565b6118f5565b005b34801561077c57600080fd5b5061079760048036038101906107929190613e15565b611a1a565b005b3480156107a557600080fd5b506107c060048036038101906107bb9190613dd4565b611b29565b005b3480156107ce57600080fd5b506107d7611c60565b6040516107e49190614869565b60405180910390f35b3480156107f957600080fd5b50610802611c73565b60405161080f9190614b46565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190613e15565b611c79565b60405161084c9190614869565b60405180910390f35b34801561086157600080fd5b5061087c60048036038101906108779190613cd1565b611dce565b6040516108899190614b46565b60405180910390f35b34801561089e57600080fd5b506108a7611e55565b005b3480156108b557600080fd5b506108be611f73565b6040516108cb9190614b46565b60405180910390f35b3480156108e057600080fd5b506108e9611f79565b6040516108f69190614869565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190613c7f565b612019565b005b34801561093457600080fd5b5061093d612111565b60405161094a9190614b46565b60405180910390f35b600061095d612117565b73ffffffffffffffffffffffffffffffffffffffff1661097b6115fe565b73ffffffffffffffffffffffffffffffffffffffff16146109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c890614a66565b60405180910390fd5b6000600f60026101000a81548160ff0219169083151502179055506001905090565b606060038054610a0290614e79565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2e90614e79565b8015610a7b5780601f10610a5057610100808354040283529160200191610a7b565b820191906000526020600020905b815481529060010190602001808311610a5e57829003601f168201915b5050505050905090565b600080610a90612117565b9050610a9d81858561211f565b600191505092915050565b610ab0612117565b73ffffffffffffffffffffffffffffffffffffffff16610ace6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90614a66565b60405180910390fd5b60005b8151811015610d0d57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610ba2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610c5c5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610c3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610cfa57600060086000848481518110610ca0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610d0590614eab565b915050610b27565b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d6f612117565b73ffffffffffffffffffffffffffffffffffffffff16610d8d6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90614a66565b60405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610e2b906147d8565b60006040518083038185875af1925050503d8060008114610e68576040519150601f19603f3d011682016040523d82523d6000602084013e610e6d565b606091505b5050905050565b60125481565b6000600254905090565b610e8c612117565b73ffffffffffffffffffffffffffffffffffffffff16610eaa6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790614a66565b60405180910390fd5b670de0b6b3a76400006103e86001610f16610e7a565b610f209190614d51565b610f2a9190614d20565b610f349190614d20565b811015610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90614b26565b60405180910390fd5b670de0b6b3a764000081610f8a9190614d51565b600c8190555050565b600080610f9e612117565b9050610fab8582856122ea565b610fb6858585612376565b60019150509392505050565b60006012905090565b600080610fd6612117565b905061106a818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110659190614cca565b61211f565b600191505092915050565b600f60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110e6612117565b73ffffffffffffffffffffffffffffffffffffffff166111046115fe565b73ffffffffffffffffffffffffffffffffffffffff161461115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190614a66565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611222612117565b73ffffffffffffffffffffffffffffffffffffffff166112406115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90614a66565b60405180910390fd5b81601381905550806014819055506014546013546112b49190614cca565b601281905550600f6012541115611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f7906148c6565b60405180910390fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611354612117565b73ffffffffffffffffffffffffffffffffffffffff166113726115fe565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90614a66565b60405180910390fd5b6113d2600061318b565b565b60006113de612117565b73ffffffffffffffffffffffffffffffffffffffff166113fc6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990614a66565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b61147c612117565b73ffffffffffffffffffffffffffffffffffffffff1661149a6115fe565b73ffffffffffffffffffffffffffffffffffffffff16146114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790614a66565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f60029054906101000a900460ff1681565b611566612117565b73ffffffffffffffffffffffffffffffffffffffff166115846115fe565b73ffffffffffffffffffffffffffffffffffffffff16146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614a66565b60405180910390fd5b6001600f60016101000a81548160ff02191690831515021790555042600a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461163790614e79565b80601f016020809104026020016040519081016040528092919081815260200182805461166390614e79565b80156116b05780601f10611685576101008083540402835291602001916116b0565b820191906000526020600020905b81548152906001019060200180831161169357829003601f168201915b5050505050905090565b6116c2612117565b73ffffffffffffffffffffffffffffffffffffffff166116e06115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90614a66565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be90614966565b60405180910390fd5b6117d18282613251565b5050565b6000806117e0612117565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90614b06565b60405180910390fd5b6118b3828686840361211f565b60019250505092915050565b6000806118ca612117565b90506118d7818585612376565b600191505092915050565b600f60019054906101000a900460ff1681565b6118fd612117565b73ffffffffffffffffffffffffffffffffffffffff1661191b6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890614a66565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a0e9190614869565b60405180910390a25050565b611a22612117565b73ffffffffffffffffffffffffffffffffffffffff16611a406115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d90614a66565b60405180910390fd5b670de0b6b3a76400006103e86005611aac610e7a565b611ab69190614d51565b611ac09190614d20565b611aca9190614d20565b811015611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390614946565b60405180910390fd5b670de0b6b3a764000081611b209190614d51565b600e8190555050565b611b31612117565b73ffffffffffffffffffffffffffffffffffffffff16611b4f6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90614a66565b60405180910390fd5b60005b8151811015611c5c57600060086000848481518110611bf0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611c5490614eab565b915050611ba8565b5050565b601160009054906101000a900460ff1681565b600c5481565b6000611c83612117565b73ffffffffffffffffffffffffffffffffffffffff16611ca16115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90614a66565b60405180910390fd5b620186a06001611d05610e7a565b611d0f9190614d51565b611d199190614d20565b821015611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d52906149e6565b60405180910390fd5b6103e86005611d68610e7a565b611d729190614d51565b611d7c9190614d20565b821115611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590614a06565b60405180910390fd5b81600d8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e5d612117565b73ffffffffffffffffffffffffffffffffffffffff16611e7b6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec890614a66565b60405180910390fd5b611ee2611edd30611304565b6132f2565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611f2a906147d8565b60006040518083038185875af1925050503d8060008114611f67576040519150601f19603f3d011682016040523d82523d6000602084013e611f6c565b606091505b5050905050565b600d5481565b6000611f83612117565b73ffffffffffffffffffffffffffffffffffffffff16611fa16115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee90614a66565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b612021612117565b73ffffffffffffffffffffffffffffffffffffffff1661203f6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208c90614a66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fc90614906565b60405180910390fd5b61210e8161318b565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614ac6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f690614926565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122dd9190614b46565b60405180910390a3505050565b60006122f68484611dce565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123705781811015612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235990614986565b60405180910390fd5b61236f848484840361211f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dd90614a86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d906148a6565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614aa6565b60405180910390fd5b60008114156124fd576124f8838360006135b6565b613186565b600a54421161255f576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600f60009054906101000a900460ff1615612cc75761257c6115fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125ea57506125ba6115fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126235750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561265d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126765750600960009054906101000a900460ff16155b15612cc657600f60019054906101000a900460ff1661277057601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127305750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61276f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612766906148e6565b60405180910390fd5b5b600061277b83611304565b1480156127c757506000601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156128115742601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601160009054906101000a900460ff16156129dd5761282e6115fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156128b75750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129115750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129dc5743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298e90614a46565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a805750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b2757600c54811115612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190614a26565b60405180910390fd5b600e54612ad683611304565b82612ae19190614cca565b1115612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1990614ae6565b60405180910390fd5b612cc5565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bca5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c1957600c54811115612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b906149c6565b60405180910390fd5b612cc4565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cc357600e54612c7683611304565b82612c819190614cca565b1115612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990614ae6565b60405180910390fd5b5b5b5b5b5b6000612cd230611304565b90506000600d548210159050808015612cf85750600960009054906101000a900460ff16155b8015612d4e5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612da45750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dfa5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3e576001600960006101000a81548160ff021916908315150217905550612e22613837565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ef45750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612efe57600090505b6000811561317657601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6b5750600f60029054906101000a900460ff165b8015612fb757506000601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b801561301057504262015180601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300d9190614cca565b10155b156130c157600080600f905060006130318383613a2a90919063ffffffff16565b9050613059606461304b838b613a4090919063ffffffff16565b613a5690919063ffffffff16565b93508083856130689190614d51565b6130729190614d20565b601660008282546130839190614cca565b925050819055508082856130979190614d51565b6130a19190614d20565b601560008282546130b29190614cca565b92505081905550505050613152565b6130e960646130db60125488613a4090919063ffffffff16565b613a5690919063ffffffff16565b9050601254601454826130fc9190614d51565b6131069190614d20565b601660008282546131179190614cca565b925050819055506012546013548261312f9190614d51565b6131399190614d20565b6015600082825461314a9190614cca565b925050819055505b6000811115613167576131668730836135b6565b5b80856131739190614dab565b94505b6131818787876135b6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115613335577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156133635781602001602082028036833780820191505090505b50905030816000815181106133a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561344357600080fd5b505afa158015613457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347b9190613ca8565b816001815181106134b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061351c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461211f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613580959493929190614b61565b600060405180830381600087803b15801561359a57600080fd5b505af11580156135ae573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361d90614a86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368d906148a6565b60405180910390fd5b6136a1838383613a6c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371e906149a6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137ba9190614cca565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161381e9190614b46565b60405180910390a3613831848484613a71565b50505050565b600061384230611304565b905060006015546016546138569190614cca565b905060008214806138675750600081145b15613873575050613a28565b600d5482111561388357600d5491505b6000600282601654856138969190614d51565b6138a09190614d20565b6138aa9190614d20565b905060006138c18285613a7690919063ffffffff16565b905060004790506138d1826132f2565b60006138e68247613a7690919063ffffffff16565b905060006139118661390360155485613a4090919063ffffffff16565b613a5690919063ffffffff16565b9050600081836139219190614dab565b9050600060168190555060006015819055506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161397b906147d8565b60006040518083038185875af1925050503d80600081146139b8576040519150601f19603f3d011682016040523d82523d6000602084013e6139bd565b606091505b505090506000871180156139d15750600082115b15613a1e576139e08783613a8c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618683601654604051613a1593929190614bbb565b60405180910390a15b5050505050505050505b565b60008183613a389190614cca565b905092915050565b60008183613a4e9190614d51565b905092915050565b60008183613a649190614d20565b905092915050565b505050565b505050565b60008183613a849190614dab565b905092915050565b613ab930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461211f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b056115fe565b426040518863ffffffff1660e01b8152600401613b2796959493929190614808565b6060604051808303818588803b158015613b4057600080fd5b505af1158015613b54573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b799190613e7a565b5050505050565b6000613b93613b8e84614c3e565b614c0d565b90508083825260208201905082856020860282011115613bb257600080fd5b60005b85811015613be25781613bc88882613bec565b845260208401935060208301925050600181019050613bb5565b5050509392505050565b600081359050613bfb81614fc1565b92915050565b600081519050613c1081614fc1565b92915050565b600082601f830112613c2757600080fd5b8135613c37848260208601613b80565b91505092915050565b600081359050613c4f81614fd8565b92915050565b600081359050613c6481614fef565b92915050565b600081519050613c7981614fef565b92915050565b600060208284031215613c9157600080fd5b6000613c9f84828501613bec565b91505092915050565b600060208284031215613cba57600080fd5b6000613cc884828501613c01565b91505092915050565b60008060408385031215613ce457600080fd5b6000613cf285828601613bec565b9250506020613d0385828601613bec565b9150509250929050565b600080600060608486031215613d2257600080fd5b6000613d3086828701613bec565b9350506020613d4186828701613bec565b9250506040613d5286828701613c55565b9150509250925092565b60008060408385031215613d6f57600080fd5b6000613d7d85828601613bec565b9250506020613d8e85828601613c40565b9150509250929050565b60008060408385031215613dab57600080fd5b6000613db985828601613bec565b9250506020613dca85828601613c55565b9150509250929050565b600060208284031215613de657600080fd5b600082013567ffffffffffffffff811115613e0057600080fd5b613e0c84828501613c16565b91505092915050565b600060208284031215613e2757600080fd5b6000613e3584828501613c55565b91505092915050565b60008060408385031215613e5157600080fd5b6000613e5f85828601613c55565b9250506020613e7085828601613c55565b9150509250929050565b600080600060608486031215613e8f57600080fd5b6000613e9d86828701613c6a565b9350506020613eae86828701613c6a565b9250506040613ebf86828701613c6a565b9150509250925092565b6000613ed58383613ee1565b60208301905092915050565b613eea81614ddf565b82525050565b613ef981614ddf565b82525050565b6000613f0a82614c7a565b613f148185614c9d565b9350613f1f83614c6a565b8060005b83811015613f50578151613f378882613ec9565b9750613f4283614c90565b925050600181019050613f23565b5085935050505092915050565b613f6681614df1565b82525050565b613f7581614e34565b82525050565b6000613f8682614c85565b613f908185614cb9565b9350613fa0818560208601614e46565b613fa981614fb0565b840191505092915050565b6000613fc1602383614cb9565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614027601d83614cb9565b91507f4d757374206b656570206665657320617420313525206f72206c6573730000006000830152602082019050919050565b6000614067601683614cb9565b91507f54726164696e67206973206e6f74206163746976652e000000000000000000006000830152602082019050919050565b60006140a7602683614cb9565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061410d602283614cb9565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614173602483614cb9565b91507f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008301527f302e3525000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141d9603983614cb9565b91507f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008301527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006020830152604082019050919050565b600061423f601d83614cb9565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b600061427f602683614cb9565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142e5603683614cb9565b91507f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008301527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006020830152604082019050919050565b600061434b603583614cb9565b91507f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008301527f20302e3030312520746f74616c20737570706c792e00000000000000000000006020830152604082019050919050565b60006143b1603483614cb9565b91507f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008301527f6e20302e352520746f74616c20737570706c792e0000000000000000000000006020830152604082019050919050565b6000614417603583614cb9565b91507f427579207472616e7366657220616d6f756e742065786365656473207468652060008301527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006020830152604082019050919050565b600061447d604983614cb9565b91507f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008301527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208301527f20616c6c6f7765642e00000000000000000000000000000000000000000000006040830152606082019050919050565b6000614509602083614cb9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614549602583614cb9565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145af600083614cae565b9150600082019050919050565b60006145c9604d83614cb9565b91507f596f7572206164647265737320686173206265656e206d61726b65642061732060008301527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208301527f73666572206f7220737761702e000000000000000000000000000000000000006040830152606082019050919050565b6000614655602483614cb9565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146bb601383614cb9565b91507f4d61782077616c6c6574206578636565646564000000000000000000000000006000830152602082019050919050565b60006146fb602583614cb9565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614761602f83614cb9565b91507f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008301527f6c6f776572207468616e20302e312500000000000000000000000000000000006020830152604082019050919050565b6147c381614e1d565b82525050565b6147d281614e27565b82525050565b60006147e3826145a2565b9150819050919050565b60006020820190506148026000830184613ef0565b92915050565b600060c08201905061481d6000830189613ef0565b61482a60208301886147ba565b6148376040830187613f6c565b6148446060830186613f6c565b6148516080830185613ef0565b61485e60a08301846147ba565b979650505050505050565b600060208201905061487e6000830184613f5d565b92915050565b6000602082019050818103600083015261489e8184613f7b565b905092915050565b600060208201905081810360008301526148bf81613fb4565b9050919050565b600060208201905081810360008301526148df8161401a565b9050919050565b600060208201905081810360008301526148ff8161405a565b9050919050565b6000602082019050818103600083015261491f8161409a565b9050919050565b6000602082019050818103600083015261493f81614100565b9050919050565b6000602082019050818103600083015261495f81614166565b9050919050565b6000602082019050818103600083015261497f816141cc565b9050919050565b6000602082019050818103600083015261499f81614232565b9050919050565b600060208201905081810360008301526149bf81614272565b9050919050565b600060208201905081810360008301526149df816142d8565b9050919050565b600060208201905081810360008301526149ff8161433e565b9050919050565b60006020820190508181036000830152614a1f816143a4565b9050919050565b60006020820190508181036000830152614a3f8161440a565b9050919050565b60006020820190508181036000830152614a5f81614470565b9050919050565b60006020820190508181036000830152614a7f816144fc565b9050919050565b60006020820190508181036000830152614a9f8161453c565b9050919050565b60006020820190508181036000830152614abf816145bc565b9050919050565b60006020820190508181036000830152614adf81614648565b9050919050565b60006020820190508181036000830152614aff816146ae565b9050919050565b60006020820190508181036000830152614b1f816146ee565b9050919050565b60006020820190508181036000830152614b3f81614754565b9050919050565b6000602082019050614b5b60008301846147ba565b92915050565b600060a082019050614b7660008301886147ba565b614b836020830187613f6c565b8181036040830152614b958186613eff565b9050614ba46060830185613ef0565b614bb160808301846147ba565b9695505050505050565b6000606082019050614bd060008301866147ba565b614bdd60208301856147ba565b614bea60408301846147ba565b949350505050565b6000602082019050614c0760008301846147c9565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614c3457614c33614f81565b5b8060405250919050565b600067ffffffffffffffff821115614c5957614c58614f81565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614cd582614e1d565b9150614ce083614e1d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d1557614d14614ef4565b5b828201905092915050565b6000614d2b82614e1d565b9150614d3683614e1d565b925082614d4657614d45614f23565b5b828204905092915050565b6000614d5c82614e1d565b9150614d6783614e1d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614da057614d9f614ef4565b5b828202905092915050565b6000614db682614e1d565b9150614dc183614e1d565b925082821015614dd457614dd3614ef4565b5b828203905092915050565b6000614dea82614dfd565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e3f82614e1d565b9050919050565b60005b83811015614e64578082015181840152602081019050614e49565b83811115614e73576000848401525b50505050565b60006002820490506001821680614e9157607f821691505b60208210811415614ea557614ea4614f52565b5b50919050565b6000614eb682614e1d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ee957614ee8614ef4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614fca81614ddf565b8114614fd557600080fd5b50565b614fe181614df1565b8114614fec57600080fd5b50565b614ff881614e1d565b811461500357600080fd5b5056fea26469706673582212205073ffa2cfaa2dbf1b96cdb2788712cdc6991d0c980830f1d33ee11ccf5807bd64736f6c63430008000033
Deployed Bytecode Sourcemap
402:14569:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4290:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2196:100:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4547:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6946:322:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7495:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14806:125;;;;;;;;;;;;;:::i;:::-;;1203:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3316:108:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5086:232:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5328:295:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3158:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6032:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;850:33:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6809:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6644:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5705:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3487:127:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1714:103:9;;;;;;;;;;;;;:::i;:::-;;4127:121:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5549:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;930:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3948:123;;;;;;;;;;;;;:::i;:::-;;1063:87:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2415:104:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6192:244:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6775:438:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3820:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;890:33:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6002:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5326:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7280:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1155:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;727:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4692:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4076:151:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14627:175:8;;;;;;;;;;;;;:::i;:::-;;769:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4482:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1972:201:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;809:24:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4290:127;4347:4;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4382:5:8::1;4364:15;;:23;;;;;;;;;;;;;;;;;;4405:4;4398:11;;4290:127:::0;:::o;2196:100:1:-;2250:13;2283:5;2276:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2196:100;:::o;4547:201::-;4630:4;4647:13;4663:12;:10;:12::i;:::-;4647:28;;4686:32;4695:5;4702:7;4711:6;4686:8;:32::i;:::-;4736:4;4729:11;;;4547:201;;;;:::o;6946:322:8:-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7034:6:8::1;7029:232;7050:12;:19;7046:1;:23;7029:232;;;7114:13;;;;;;;;;;;7095:32;;:12;7108:1;7095:15;;;;;;;;;;;;;;;;;;;;;;:32;;;;:79;;;;;7158:15;;;;;;;;;;;7131:43;;:12;7144:1;7131:15;;;;;;;;;;;;;;;;;;;;;;:43;;;;7095:79;7091:159;;;7229:5;7195:14;:31;7210:12;7223:1;7210:15;;;;;;;;;;;;;;;;;;;;;;7195:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7091:159;7071:3;;;;;:::i;:::-;;;;7029:232;;;;6946:322:::0;:::o;7495:105::-;7548:4;7572:14;:20;7587:4;7572:20;;;;;;;;;;;;;;;;;;;;;;;;;7565:27;;7495:105;;;:::o;14806:125::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14852:12:8::1;14878:9;;;;;;;;;;;14870:23;;14901:21;14870:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14851:76;;;1354:1:9;14806:125:8:o:0;1203:24::-;;;;:::o;3316:108:1:-;3377:7;3404:12;;3397:19;;3316:108;:::o;5086:232:8:-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5207:4:8::1;5199;5195:1;5179:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;5178:33;;;;:::i;:::-;5168:6;:43;;5160:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5306:4;5297:6;:13;;;;:::i;:::-;5274:20;:36;;;;5086:232:::0;:::o;5328:295:1:-;5459:4;5476:15;5494:12;:10;:12::i;:::-;5476:30;;5517:38;5533:4;5539:7;5548:6;5517:15;:38::i;:::-;5566:27;5576:4;5582:2;5586:6;5566:9;:27::i;:::-;5611:4;5604:11;;;5328:295;;;;;:::o;3158:93::-;3216:5;3241:2;3234:9;;3158:93;:::o;6032:240::-;6120:4;6137:13;6153:12;:10;:12::i;:::-;6137:28;;6176:66;6185:5;6192:7;6231:10;6201:11;:18;6213:5;6201:18;;;;;;;;;;;;;;;:27;6220:7;6201:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;6176:8;:66::i;:::-;6260:4;6253:11;;;6032:240;;;;:::o;850:33:8:-;;;;;;;;;;;;;:::o;6809:125::-;6874:4;6898:19;:28;6918:7;6898:28;;;;;;;;;;;;;;;;;;;;;;;;;6891:35;;6809:125;;;:::o;6644:157::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6751:9:8::1;;;;;;;;;;;6723:38;;6740:9;6723:38;;;;;;;;;;;;6784:9;6772;;:21;;;;;;;;;;;;;;;;;;6644:157:::0;:::o;5705:289::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5815:12:8::1;5799:13;:28;;;;5854:12;5838:13;:28;;;;5905:13;;5889;;:29;;;;:::i;:::-;5877:9;:41;;;;5950:2;5937:9;;:15;;5929:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;5705:289:::0;;:::o;3487:127:1:-;3561:7;3588:9;:18;3598:7;3588:18;;;;;;;;;;;;;;;;3581:25;;3487:127;;;:::o;1714:103:9:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;4127:121:8:-;4179:4;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4213:5:8::1;4196:14;;:22;;;;;;;;;;;;;;;;;;4236:4;4229:11;;4127:121:::0;:::o;5549:144::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5681:4:8::1;5639:31;:39;5671:6;5639:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;5549:144:::0;;:::o;930:34::-;;;;;;;;;;;;;:::o;3948:123::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4019:4:8::1;4003:13;;:20;;;;;;;;;;;;;;;;;;4048:15;4034:11;:29;;;;3948:123::o:0;1063:87:9:-;1109:7;1136:6;;;;;;;;;;;1129:13;;1063:87;:::o;2415:104:1:-;2471:13;2504:7;2497:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2415:104;:::o;6192:244:8:-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6299:13:8::1;;;;;;;;;;;6291:21;;:4;:21;;;;6283:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;6387:41;6416:4;6422:5;6387:28;:41::i;:::-;6192:244:::0;;:::o;6775:438:1:-;6868:4;6885:13;6901:12;:10;:12::i;:::-;6885:28;;6924:24;6951:11;:18;6963:5;6951:18;;;;;;;;;;;;;;;:27;6970:7;6951:27;;;;;;;;;;;;;;;;6924:54;;7017:15;6997:16;:35;;6989:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;7110:60;7119:5;7126:7;7154:15;7135:16;:34;7110:8;:60::i;:::-;7201:4;7194:11;;;;6775:438;;;;:::o;3820:193::-;3899:4;3916:13;3932:12;:10;:12::i;:::-;3916:28;;3955;3965:5;3972:2;3976:6;3955:9;:28::i;:::-;4001:4;3994:11;;;3820:193;;;;:::o;890:33:8:-;;;;;;;;;;;;;:::o;6002:182::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6118:8:8::1;6087:19;:28;6107:7;6087:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;6158:7;6142:34;;;6167:8;6142:34;;;;;;:::i;:::-;;;;;;;;6002:182:::0;;:::o;5326:211::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5448:4:8::1;5442;5438:1;5422:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;5421:31;;;;:::i;:::-;5411:6;:41;;5403:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;5525:4;5516:6;:13;;;;:::i;:::-;5504:9;:25;;;;5326:211:::0;:::o;7280:203::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7368:6:8::1;7363:113;7384:12;:19;7380:1;:23;7363:113;;;7459:5;7425:14;:31;7440:12;7453:1;7440:15;;;;;;;;;;;;;;;;;;;;;;7425:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7405:3;;;;;:::i;:::-;;;;7363:113;;;;7280:203:::0;:::o;1155:39::-;;;;;;;;;;;;;:::o;727:35::-;;;;:::o;4692:382::-;4773:4;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4830:6:8::1;4826:1;4810:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;4797:9;:39;;4789:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;4945:4;4941:1;4925:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;4912:9;:37;;4904:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;5037:9;5016:18;:30;;;;5063:4;5056:11;;4692:382:::0;;;:::o;4076:151:1:-;4165:7;4192:11;:18;4204:5;4192:18;;;;;;;;;;;;;;;:27;4211:7;4192:27;;;;;;;;;;;;;;;;4185:34;;4076:151;;;;:::o;14627:175:8:-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14672:43:8::1;14690:24;14708:4;14690:9;:24::i;:::-;14672:17;:43::i;:::-;14723:12;14749:9;;;;;;;;;;;14741:23;;14772:21;14741:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14722:76;;;1354:1:9;14627:175:8:o:0;769:33::-;;;;:::o;4482:135::-;4542:4;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4582:5:8::1;4559:20;;:28;;;;;;;;;;;;;;;;;;4605:4;4598:11;;4482:135:::0;:::o;1972:201:9:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:1:::1;2061:22;;:8;:22;;;;2053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2137:28;2156:8;2137:18;:28::i;:::-;1972:201:::0;:::o;809:24:8:-;;;;:::o;656:98:0:-;709:7;736:10;729:17;;656:98;:::o;10411:380:1:-;10564:1;10547:19;;:5;:19;;;;10539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10645:1;10626:21;;:7;:21;;;;10618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10729:6;10699:11;:18;10711:5;10699:18;;;;;;;;;;;;;;;:27;10718:7;10699:27;;;;;;;;;;;;;;;:36;;;;10767:7;10751:32;;10760:5;10751:32;;;10776:6;10751:32;;;;;;:::i;:::-;;;;;;;;10411:380;;;:::o;11078:453::-;11213:24;11240:25;11250:5;11257:7;11240:9;:25::i;:::-;11213:52;;11300:17;11280:16;:37;11276:248;;11362:6;11342:16;:26;;11334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11446:51;11455:5;11462:7;11490:6;11471:16;:25;11446:8;:51::i;:::-;11276:248;11078:453;;;;:::o;7608:4520:8:-;7756:1;7740:18;;:4;:18;;;;7732:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7833:1;7819:16;;:2;:16;;;;7811:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7895:14;:20;7910:4;7895:20;;;;;;;;;;;;;;;;;;;;;;;;;7894:21;7886:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;8033:1;8023:6;:11;8019:93;;;8051:28;8067:4;8073:2;8077:1;8051:15;:28::i;:::-;8094:7;;8019:93;8147:11;;8128:15;:30;8124:61;;8181:4;8160:14;:18;8175:2;8160:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;8124:61;8210:14;;;;;;;;;;;8206:2057;;;8271:7;:5;:7::i;:::-;8263:15;;:4;:15;;;;:49;;;;;8305:7;:5;:7::i;:::-;8299:13;;:2;:13;;;;8263:49;:86;;;;;8347:1;8333:16;;:2;:16;;;;8263:86;:128;;;;;8384:6;8370:21;;:2;:21;;;;8263:128;:159;;;;;8413:9;;;;;;;;;;;8412:10;8263:159;8241:2011;;;8462:13;;;;;;;;;;;8457:150;;8508:19;:25;8528:4;8508:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;8537:19;:23;8557:2;8537:23;;;;;;;;;;;;;;;;;;;;;;;;;8508:52;8500:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;8457:150;8697:1;8680:13;8690:2;8680:9;:13::i;:::-;:18;:55;;;;;8734:1;8702:24;:28;8727:2;8702:28;;;;;;;;;;;;;;;;:33;8680:55;8676:150;;;8791:15;8760:24;:28;8785:2;8760:28;;;;;;;;;;;;;;;:46;;;;8676:150;8984:20;;;;;;;;;;;8980:423;;;9038:7;:5;:7::i;:::-;9032:13;;:2;:13;;;;:47;;;;;9063:15;;;;;;;;;;;9049:30;;:2;:30;;;;9032:47;:79;;;;;9097:13;;;;;;;;;;;9083:28;;:2;:28;;;;9032:79;9028:356;;;9189:12;9147:28;:39;9176:9;9147:39;;;;;;;;;;;;;;;;:54;9139:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;9348:12;9306:28;:39;9335:9;9306:39;;;;;;;;;;;;;;;:54;;;;9028:356;8980:423;9473:25;:31;9499:4;9473:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;9509:31;:35;9541:2;9509:35;;;;;;;;;;;;;;;;;;;;;;;;;9508:36;9473:71;9469:768;;;9587:20;;9577:6;:30;;9569:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;9722:9;;9705:13;9715:2;9705:9;:13::i;:::-;9696:6;:22;;;;:::i;:::-;:35;;9688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9469:768;;;9850:25;:29;9876:2;9850:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;9884:31;:37;9916:4;9884:37;;;;;;;;;;;;;;;;;;;;;;;;;9883:38;9850:71;9846:391;;;9964:20;;9954:6;:30;;9946:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;9846:391;;;10091:31;:35;10123:2;10091:35;;;;;;;;;;;;;;;;;;;;;;;;;10086:151;;10184:9;;10167:13;10177:2;10167:9;:13::i;:::-;10158:6;:22;;;;:::i;:::-;:35;;10150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10086:151;9846:391;9469:768;8241:2011;8206:2057;10277:28;10308:24;10326:4;10308:9;:24::i;:::-;10277:55;;10343:12;10382:18;;10358:20;:42;;10343:57;;10429:7;:34;;;;;10454:9;;;;;;;;;;;10453:10;10429:34;:83;;;;;10481:25;:31;10507:4;10481:31;;;;;;;;;;;;;;;;;;;;;;;;;10480:32;10429:83;:126;;;;;10530:19;:25;10550:4;10530:25;;;;;;;;;;;;;;;;;;;;;;;;;10529:26;10429:126;:167;;;;;10573:19;:23;10593:2;10573:23;;;;;;;;;;;;;;;;;;;;;;;;;10572:24;10429:167;10411:297;;;10635:4;10623:9;;:16;;;;;;;;;;;;;;;;;;10654:10;:8;:10::i;:::-;10691:5;10679:9;;:17;;;;;;;;;;;;;;;;;;10411:297;10720:12;10736:9;;;;;;;;;;;10735:10;10720:25;;10847:19;:25;10867:4;10847:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;10876:19;:23;10896:2;10876:23;;;;;;;;;;;;;;;;;;;;;;;;;10847:52;10843:100;;;10926:5;10916:15;;10843:100;10955:12;10986:7;10982:1093;;;11032:25;:29;11058:2;11032:29;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;11083:15;;;;;;;;;;;11032:66;:122;;;;;11153:1;11119:24;:30;11144:4;11119:30;;;;;;;;;;;;;;;;:35;;11032:122;:208;;;;;11224:15;11211:8;11177:24;:30;11202:4;11177:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;11032:208;11010:898;;;11275:25;11323;11351:2;11323:30;;11372:22;11397:40;11419:17;11397;:21;;:40;;;;:::i;:::-;11372:65;;11465:35;11496:3;11465:26;11476:14;11465:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;11458:42;;11569:14;11549:17;11542:4;:24;;;;:::i;:::-;:41;;;;:::i;:::-;11519:19;;:64;;;;;;;:::i;:::-;;;;;;;;11652:14;11632:17;11625:4;:24;;;;:::i;:::-;:41;;;;:::i;:::-;11602:19;;:64;;;;;;;:::i;:::-;;;;;;;;11010:898;;;;;;11714:30;11740:3;11714:21;11725:9;;11714:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;11707:37;;11809:9;;11793:13;;11786:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;11763:19;;:55;;;;;;;:::i;:::-;;;;;;;;11883:9;;11867:13;;11860:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;11837:19;;:55;;;;;;;:::i;:::-;;;;;;;;11010:898;11947:1;11940:4;:8;11936:91;;;11969:42;11985:4;11999;12006;11969:15;:42::i;:::-;11936:91;12059:4;12049:14;;;;;:::i;:::-;;;10982:1093;12087:33;12103:4;12109:2;12113:6;12087:15;:33::i;:::-;7608:4520;;;;;;;;:::o;2333:191:9:-;2407:16;2426:6;;;;;;;;;;;2407:25;;2452:8;2443:6;;:17;;;;;;;;;;;;;;;;;;2507:8;2476:40;;2497:8;2476:40;;;;;;;;;;;;2333:191;;:::o;6444:188:8:-;6561:5;6527:25;:31;6553:4;6527:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;6618:5;6584:40;;6612:4;6584:40;;;;;;;;;;;;6444:188;;:::o;12136:590::-;12263:21;12301:1;12287:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12263:40;;12332:4;12314;12319:1;12314:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12358:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12348:4;12353:1;12348:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;12393:62;12410:4;12425:15;;;;;;;;;;;12443:11;12393:8;:62::i;:::-;12494:15;;;;;;;;;;;:66;;;12575:11;12601:1;12645:4;12672;12692:15;12494:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12136:590;;:::o;7692:671:1:-;7839:1;7823:18;;:4;:18;;;;7815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7916:1;7902:16;;:2;:16;;;;7894:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7971:38;7992:4;7998:2;8002:6;7971:20;:38::i;:::-;8022:19;8044:9;:15;8054:4;8044:15;;;;;;;;;;;;;;;;8022:37;;8093:6;8078:11;:21;;8070:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;8210:6;8196:11;:20;8178:9;:15;8188:4;8178:15;;;;;;;;;;;;;;;:38;;;;8255:6;8238:9;:13;8248:2;8238:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;8294:2;8279:26;;8288:4;8279:26;;;8298:6;8279:26;;;;;;:::i;:::-;;;;;;;;8318:37;8338:4;8344:2;8348:6;8318:19;:37::i;:::-;7692:671;;;;:::o;13260:1362:8:-;13299:23;13325:24;13343:4;13325:9;:24::i;:::-;13299:50;;13360:25;13410:19;;13388;;:41;;;;:::i;:::-;13360:69;;13473:1;13454:15;:20;:46;;;;13499:1;13478:17;:22;13454:46;13450:59;;;13502:7;;;;13450:59;13541:18;;13523:15;:36;13519:103;;;13592:18;;13574:36;;13519:103;13681:23;13767:1;13747:17;13725:19;;13707:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;13681:87;;13779:26;13808:36;13828:15;13808;:19;;:36;;;;:::i;:::-;13779:65;;13865:25;13893:21;13865:49;;13927:37;13945:18;13927:17;:37::i;:::-;13986:18;14007:44;14033:17;14007:21;:25;;:44;;;;:::i;:::-;13986:65;;14062:23;14088:58;14128:17;14088:35;14103:19;;14088:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;14062:84;;14157:23;14196:15;14183:10;:28;;;;:::i;:::-;14157:54;;14254:1;14232:19;:23;;;;14288:1;14266:19;:23;;;;14303:12;14329:9;;;;;;;;;;;14321:23;;14352:15;14321:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14302:70;;;14423:1;14405:15;:19;:42;;;;;14446:1;14428:15;:19;14405:42;14401:214;;;14464:47;14478:15;14495;14464:13;:47::i;:::-;14531:72;14546:18;14566:15;14583:19;;14531:72;;;;;;;;:::i;:::-;;;;;;;;14401:214;13260:1362;;;;;;;;;;:::o;2833:98:10:-;2891:7;2922:1;2918;:5;;;;:::i;:::-;2911:12;;2833:98;;;;:::o;3571:::-;3629:7;3660:1;3656;:5;;;;:::i;:::-;3649:12;;3571:98;;;;:::o;3970:::-;4028:7;4059:1;4055;:5;;;;:::i;:::-;4048:12;;3970:98;;;;:::o;12131:125:1:-;;;;:::o;12860:124::-;;;;:::o;3214:98:10:-;3272:7;3303:1;3299;:5;;;;:::i;:::-;3292:12;;3214:98;;;;:::o;12738:514:8:-;12887:62;12904:4;12919:15;;;;;;;;;;;12937:11;12887:8;:62::i;:::-;12992:15;;;;;;;;;;;:31;;;13031:9;13064:4;13084:11;13110:1;13153;13196:7;:5;:7::i;:::-;13218:15;12992:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12738:514;;:::o;24:622:11:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:139::-;;736:6;723:20;714:29;;752:33;779:5;752:33;:::i;:::-;704:87;;;;:::o;797:143::-;;885:6;879:13;870:22;;901:33;928:5;901:33;:::i;:::-;860:80;;;;:::o;963:303::-;;1083:3;1076:4;1068:6;1064:17;1060:27;1050:2;;1101:1;1098;1091:12;1050:2;1141:6;1128:20;1166:94;1256:3;1248:6;1241:4;1233:6;1229:17;1166:94;:::i;:::-;1157:103;;1040:226;;;;;:::o;1272:133::-;;1353:6;1340:20;1331:29;;1369:30;1393:5;1369:30;:::i;:::-;1321:84;;;;:::o;1411:139::-;;1495:6;1482:20;1473:29;;1511:33;1538:5;1511:33;:::i;:::-;1463:87;;;;:::o;1556:143::-;;1644:6;1638:13;1629:22;;1660:33;1687:5;1660:33;:::i;:::-;1619:80;;;;:::o;1705:262::-;;1813:2;1801:9;1792:7;1788:23;1784:32;1781:2;;;1829:1;1826;1819:12;1781:2;1872:1;1897:53;1942:7;1933:6;1922:9;1918:22;1897:53;:::i;:::-;1887:63;;1843:117;1771:196;;;;:::o;1973:284::-;;2092:2;2080:9;2071:7;2067:23;2063:32;2060:2;;;2108:1;2105;2098:12;2060:2;2151:1;2176:64;2232:7;2223:6;2212:9;2208:22;2176:64;:::i;:::-;2166:74;;2122:128;2050:207;;;;:::o;2263:407::-;;;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:552::-;;;;2818:2;2806:9;2797:7;2793:23;2789:32;2786:2;;;2834:1;2831;2824:12;2786:2;2877:1;2902:53;2947:7;2938:6;2927:9;2923:22;2902:53;:::i;:::-;2892:63;;2848:117;3004:2;3030:53;3075:7;3066:6;3055:9;3051:22;3030:53;:::i;:::-;3020:63;;2975:118;3132:2;3158:53;3203:7;3194:6;3183:9;3179:22;3158:53;:::i;:::-;3148:63;;3103:118;2776:452;;;;;:::o;3234:401::-;;;3356:2;3344:9;3335:7;3331:23;3327:32;3324:2;;;3372:1;3369;3362:12;3324:2;3415:1;3440:53;3485:7;3476:6;3465:9;3461:22;3440:53;:::i;:::-;3430:63;;3386:117;3542:2;3568:50;3610:7;3601:6;3590:9;3586:22;3568:50;:::i;:::-;3558:60;;3513:115;3314:321;;;;;:::o;3641:407::-;;;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:53;3895:7;3886:6;3875:9;3871:22;3850:53;:::i;:::-;3840:63;;3796:117;3952:2;3978:53;4023:7;4014:6;4003:9;3999:22;3978:53;:::i;:::-;3968:63;;3923:118;3724:324;;;;;:::o;4054:405::-;;4187:2;4175:9;4166:7;4162:23;4158:32;4155:2;;;4203:1;4200;4193:12;4155:2;4274:1;4263:9;4259:17;4246:31;4304:18;4296:6;4293:30;4290:2;;;4336:1;4333;4326:12;4290:2;4364:78;4434:7;4425:6;4414:9;4410:22;4364:78;:::i;:::-;4354:88;;4217:235;4145:314;;;;:::o;4465:262::-;;4573:2;4561:9;4552:7;4548:23;4544:32;4541:2;;;4589:1;4586;4579:12;4541:2;4632:1;4657:53;4702:7;4693:6;4682:9;4678:22;4657:53;:::i;:::-;4647:63;;4603:117;4531:196;;;;:::o;4733:407::-;;;4858:2;4846:9;4837:7;4833:23;4829:32;4826:2;;;4874:1;4871;4864:12;4826:2;4917:1;4942:53;4987:7;4978:6;4967:9;4963:22;4942:53;:::i;:::-;4932:63;;4888:117;5044:2;5070:53;5115:7;5106:6;5095:9;5091:22;5070:53;:::i;:::-;5060:63;;5015:118;4816:324;;;;;:::o;5146:596::-;;;;5299:2;5287:9;5278:7;5274:23;5270:32;5267:2;;;5315:1;5312;5305:12;5267:2;5358:1;5383:64;5439:7;5430:6;5419:9;5415:22;5383:64;:::i;:::-;5373:74;;5329:128;5496:2;5522:64;5578:7;5569:6;5558:9;5554:22;5522:64;:::i;:::-;5512:74;;5467:129;5635:2;5661:64;5717:7;5708:6;5697:9;5693:22;5661:64;:::i;:::-;5651:74;;5606:129;5257:485;;;;;:::o;5748:179::-;;5838:46;5880:3;5872:6;5838:46;:::i;:::-;5916:4;5911:3;5907:14;5893:28;;5828:99;;;;:::o;5933:108::-;6010:24;6028:5;6010:24;:::i;:::-;6005:3;5998:37;5988:53;;:::o;6047:118::-;6134:24;6152:5;6134:24;:::i;:::-;6129:3;6122:37;6112:53;;:::o;6201:732::-;;6349:54;6397:5;6349:54;:::i;:::-;6419:86;6498:6;6493:3;6419:86;:::i;:::-;6412:93;;6529:56;6579:5;6529:56;:::i;:::-;6608:7;6639:1;6624:284;6649:6;6646:1;6643:13;6624:284;;;6725:6;6719:13;6752:63;6811:3;6796:13;6752:63;:::i;:::-;6745:70;;6838:60;6891:6;6838:60;:::i;:::-;6828:70;;6684:224;6671:1;6668;6664:9;6659:14;;6624:284;;;6628:14;6924:3;6917:10;;6325:608;;;;;;;:::o;6939:109::-;7020:21;7035:5;7020:21;:::i;:::-;7015:3;7008:34;6998:50;;:::o;7054:147::-;7149:45;7188:5;7149:45;:::i;:::-;7144:3;7137:58;7127:74;;:::o;7207:364::-;;7323:39;7356:5;7323:39;:::i;:::-;7378:71;7442:6;7437:3;7378:71;:::i;:::-;7371:78;;7458:52;7503:6;7498:3;7491:4;7484:5;7480:16;7458:52;:::i;:::-;7535:29;7557:6;7535:29;:::i;:::-;7530:3;7526:39;7519:46;;7299:272;;;;;:::o;7577:367::-;;7740:67;7804:2;7799:3;7740:67;:::i;:::-;7733:74;;7837:34;7833:1;7828:3;7824:11;7817:55;7903:5;7898:2;7893:3;7889:12;7882:27;7935:2;7930:3;7926:12;7919:19;;7723:221;;;:::o;7950:327::-;;8113:67;8177:2;8172:3;8113:67;:::i;:::-;8106:74;;8210:31;8206:1;8201:3;8197:11;8190:52;8268:2;8263:3;8259:12;8252:19;;8096:181;;;:::o;8283:320::-;;8446:67;8510:2;8505:3;8446:67;:::i;:::-;8439:74;;8543:24;8539:1;8534:3;8530:11;8523:45;8594:2;8589:3;8585:12;8578:19;;8429:174;;;:::o;8609:370::-;;8772:67;8836:2;8831:3;8772:67;:::i;:::-;8765:74;;8869:34;8865:1;8860:3;8856:11;8849:55;8935:8;8930:2;8925:3;8921:12;8914:30;8970:2;8965:3;8961:12;8954:19;;8755:224;;;:::o;8985:366::-;;9148:67;9212:2;9207:3;9148:67;:::i;:::-;9141:74;;9245:34;9241:1;9236:3;9232:11;9225:55;9311:4;9306:2;9301:3;9297:12;9290:26;9342:2;9337:3;9333:12;9326:19;;9131:220;;;:::o;9357:368::-;;9520:67;9584:2;9579:3;9520:67;:::i;:::-;9513:74;;9617:34;9613:1;9608:3;9604:11;9597:55;9683:6;9678:2;9673:3;9669:12;9662:28;9716:2;9711:3;9707:12;9700:19;;9503:222;;;:::o;9731:389::-;;9894:67;9958:2;9953:3;9894:67;:::i;:::-;9887:74;;9991:34;9987:1;9982:3;9978:11;9971:55;10057:27;10052:2;10047:3;10043:12;10036:49;10111:2;10106:3;10102:12;10095:19;;9877:243;;;:::o;10126:327::-;;10289:67;10353:2;10348:3;10289:67;:::i;:::-;10282:74;;10386:31;10382:1;10377:3;10373:11;10366:52;10444:2;10439:3;10435:12;10428:19;;10272:181;;;:::o;10459:370::-;;10622:67;10686:2;10681:3;10622:67;:::i;:::-;10615:74;;10719:34;10715:1;10710:3;10706:11;10699:55;10785:8;10780:2;10775:3;10771:12;10764:30;10820:2;10815:3;10811:12;10804:19;;10605:224;;;:::o;10835:386::-;;10998:67;11062:2;11057:3;10998:67;:::i;:::-;10991:74;;11095:34;11091:1;11086:3;11082:11;11075:55;11161:24;11156:2;11151:3;11147:12;11140:46;11212:2;11207:3;11203:12;11196:19;;10981:240;;;:::o;11227:385::-;;11390:67;11454:2;11449:3;11390:67;:::i;:::-;11383:74;;11487:34;11483:1;11478:3;11474:11;11467:55;11553:23;11548:2;11543:3;11539:12;11532:45;11603:2;11598:3;11594:12;11587:19;;11373:239;;;:::o;11618:384::-;;11781:67;11845:2;11840:3;11781:67;:::i;:::-;11774:74;;11878:34;11874:1;11869:3;11865:11;11858:55;11944:22;11939:2;11934:3;11930:12;11923:44;11993:2;11988:3;11984:12;11977:19;;11764:238;;;:::o;12008:385::-;;12171:67;12235:2;12230:3;12171:67;:::i;:::-;12164:74;;12268:34;12264:1;12259:3;12255:11;12248:55;12334:23;12329:2;12324:3;12320:12;12313:45;12384:2;12379:3;12375:12;12368:19;;12154:239;;;:::o;12399:439::-;;12562:67;12626:2;12621:3;12562:67;:::i;:::-;12555:74;;12659:34;12655:1;12650:3;12646:11;12639:55;12725:34;12720:2;12715:3;12711:12;12704:56;12791:11;12786:2;12781:3;12777:12;12770:33;12829:2;12824:3;12820:12;12813:19;;12545:293;;;:::o;12844:330::-;;13007:67;13071:2;13066:3;13007:67;:::i;:::-;13000:74;;13104:34;13100:1;13095:3;13091:11;13084:55;13165:2;13160:3;13156:12;13149:19;;12990:184;;;:::o;13180:369::-;;13343:67;13407:2;13402:3;13343:67;:::i;:::-;13336:74;;13440:34;13436:1;13431:3;13427:11;13420:55;13506:7;13501:2;13496:3;13492:12;13485:29;13540:2;13535:3;13531:12;13524:19;;13326:223;;;:::o;13555:297::-;;13735:83;13816:1;13811:3;13735:83;:::i;:::-;13728:90;;13844:1;13839:3;13835:11;13828:18;;13718:134;;;:::o;13858:443::-;;14021:67;14085:2;14080:3;14021:67;:::i;:::-;14014:74;;14118:34;14114:1;14109:3;14105:11;14098:55;14184:34;14179:2;14174:3;14170:12;14163:56;14250:15;14245:2;14240:3;14236:12;14229:37;14292:2;14287:3;14283:12;14276:19;;14004:297;;;:::o;14307:368::-;;14470:67;14534:2;14529:3;14470:67;:::i;:::-;14463:74;;14567:34;14563:1;14558:3;14554:11;14547:55;14633:6;14628:2;14623:3;14619:12;14612:28;14666:2;14661:3;14657:12;14650:19;;14453:222;;;:::o;14681:317::-;;14844:67;14908:2;14903:3;14844:67;:::i;:::-;14837:74;;14941:21;14937:1;14932:3;14928:11;14921:42;14989:2;14984:3;14980:12;14973:19;;14827:171;;;:::o;15004:369::-;;15167:67;15231:2;15226:3;15167:67;:::i;:::-;15160:74;;15264:34;15260:1;15255:3;15251:11;15244:55;15330:7;15325:2;15320:3;15316:12;15309:29;15364:2;15359:3;15355:12;15348:19;;15150:223;;;:::o;15379:379::-;;15542:67;15606:2;15601:3;15542:67;:::i;:::-;15535:74;;15639:34;15635:1;15630:3;15626:11;15619:55;15705:17;15700:2;15695:3;15691:12;15684:39;15749:2;15744:3;15740:12;15733:19;;15525:233;;;:::o;15764:118::-;15851:24;15869:5;15851:24;:::i;:::-;15846:3;15839:37;15829:53;;:::o;15888:112::-;15971:22;15987:5;15971:22;:::i;:::-;15966:3;15959:35;15949:51;;:::o;16006:379::-;;16212:147;16355:3;16212:147;:::i;:::-;16205:154;;16376:3;16369:10;;16194:191;;;:::o;16391:222::-;;16522:2;16511:9;16507:18;16499:26;;16535:71;16603:1;16592:9;16588:17;16579:6;16535:71;:::i;:::-;16489:124;;;;:::o;16619:807::-;;16906:3;16895:9;16891:19;16883:27;;16920:71;16988:1;16977:9;16973:17;16964:6;16920:71;:::i;:::-;17001:72;17069:2;17058:9;17054:18;17045:6;17001:72;:::i;:::-;17083:80;17159:2;17148:9;17144:18;17135:6;17083:80;:::i;:::-;17173;17249:2;17238:9;17234:18;17225:6;17173:80;:::i;:::-;17263:73;17331:3;17320:9;17316:19;17307:6;17263:73;:::i;:::-;17346;17414:3;17403:9;17399:19;17390:6;17346:73;:::i;:::-;16873:553;;;;;;;;;:::o;17432:210::-;;17557:2;17546:9;17542:18;17534:26;;17570:65;17632:1;17621:9;17617:17;17608:6;17570:65;:::i;:::-;17524:118;;;;:::o;17648:313::-;;17799:2;17788:9;17784:18;17776:26;;17848:9;17842:4;17838:20;17834:1;17823:9;17819:17;17812:47;17876:78;17949:4;17940:6;17876:78;:::i;:::-;17868:86;;17766:195;;;;:::o;17967:419::-;;18171:2;18160:9;18156:18;18148:26;;18220:9;18214:4;18210:20;18206:1;18195:9;18191:17;18184:47;18248:131;18374:4;18248:131;:::i;:::-;18240:139;;18138:248;;;:::o;18392:419::-;;18596:2;18585:9;18581:18;18573:26;;18645:9;18639:4;18635:20;18631:1;18620:9;18616:17;18609:47;18673:131;18799:4;18673:131;:::i;:::-;18665:139;;18563:248;;;:::o;18817:419::-;;19021:2;19010:9;19006:18;18998:26;;19070:9;19064:4;19060:20;19056:1;19045:9;19041:17;19034:47;19098:131;19224:4;19098:131;:::i;:::-;19090:139;;18988:248;;;:::o;19242:419::-;;19446:2;19435:9;19431:18;19423:26;;19495:9;19489:4;19485:20;19481:1;19470:9;19466:17;19459:47;19523:131;19649:4;19523:131;:::i;:::-;19515:139;;19413:248;;;:::o;19667:419::-;;19871:2;19860:9;19856:18;19848:26;;19920:9;19914:4;19910:20;19906:1;19895:9;19891:17;19884:47;19948:131;20074:4;19948:131;:::i;:::-;19940:139;;19838:248;;;:::o;20092:419::-;;20296:2;20285:9;20281:18;20273:26;;20345:9;20339:4;20335:20;20331:1;20320:9;20316:17;20309:47;20373:131;20499:4;20373:131;:::i;:::-;20365:139;;20263:248;;;:::o;20517:419::-;;20721:2;20710:9;20706:18;20698:26;;20770:9;20764:4;20760:20;20756:1;20745:9;20741:17;20734:47;20798:131;20924:4;20798:131;:::i;:::-;20790:139;;20688:248;;;:::o;20942:419::-;;21146:2;21135:9;21131:18;21123:26;;21195:9;21189:4;21185:20;21181:1;21170:9;21166:17;21159:47;21223:131;21349:4;21223:131;:::i;:::-;21215:139;;21113:248;;;:::o;21367:419::-;;21571:2;21560:9;21556:18;21548:26;;21620:9;21614:4;21610:20;21606:1;21595:9;21591:17;21584:47;21648:131;21774:4;21648:131;:::i;:::-;21640:139;;21538:248;;;:::o;21792:419::-;;21996:2;21985:9;21981:18;21973:26;;22045:9;22039:4;22035:20;22031:1;22020:9;22016:17;22009:47;22073:131;22199:4;22073:131;:::i;:::-;22065:139;;21963:248;;;:::o;22217:419::-;;22421:2;22410:9;22406:18;22398:26;;22470:9;22464:4;22460:20;22456:1;22445:9;22441:17;22434:47;22498:131;22624:4;22498:131;:::i;:::-;22490:139;;22388:248;;;:::o;22642:419::-;;22846:2;22835:9;22831:18;22823:26;;22895:9;22889:4;22885:20;22881:1;22870:9;22866:17;22859:47;22923:131;23049:4;22923:131;:::i;:::-;22915:139;;22813:248;;;:::o;23067:419::-;;23271:2;23260:9;23256:18;23248:26;;23320:9;23314:4;23310:20;23306:1;23295:9;23291:17;23284:47;23348:131;23474:4;23348:131;:::i;:::-;23340:139;;23238:248;;;:::o;23492:419::-;;23696:2;23685:9;23681:18;23673:26;;23745:9;23739:4;23735:20;23731:1;23720:9;23716:17;23709:47;23773:131;23899:4;23773:131;:::i;:::-;23765:139;;23663:248;;;:::o;23917:419::-;;24121:2;24110:9;24106:18;24098:26;;24170:9;24164:4;24160:20;24156:1;24145:9;24141:17;24134:47;24198:131;24324:4;24198:131;:::i;:::-;24190:139;;24088:248;;;:::o;24342:419::-;;24546:2;24535:9;24531:18;24523:26;;24595:9;24589:4;24585:20;24581:1;24570:9;24566:17;24559:47;24623:131;24749:4;24623:131;:::i;:::-;24615:139;;24513:248;;;:::o;24767:419::-;;24971:2;24960:9;24956:18;24948:26;;25020:9;25014:4;25010:20;25006:1;24995:9;24991:17;24984:47;25048:131;25174:4;25048:131;:::i;:::-;25040:139;;24938:248;;;:::o;25192:419::-;;25396:2;25385:9;25381:18;25373:26;;25445:9;25439:4;25435:20;25431:1;25420:9;25416:17;25409:47;25473:131;25599:4;25473:131;:::i;:::-;25465:139;;25363:248;;;:::o;25617:419::-;;25821:2;25810:9;25806:18;25798:26;;25870:9;25864:4;25860:20;25856:1;25845:9;25841:17;25834:47;25898:131;26024:4;25898:131;:::i;:::-;25890:139;;25788:248;;;:::o;26042:419::-;;26246:2;26235:9;26231:18;26223:26;;26295:9;26289:4;26285:20;26281:1;26270:9;26266:17;26259:47;26323:131;26449:4;26323:131;:::i;:::-;26315:139;;26213:248;;;:::o;26467:419::-;;26671:2;26660:9;26656:18;26648:26;;26720:9;26714:4;26710:20;26706:1;26695:9;26691:17;26684:47;26748:131;26874:4;26748:131;:::i;:::-;26740:139;;26638:248;;;:::o;26892:222::-;;27023:2;27012:9;27008:18;27000:26;;27036:71;27104:1;27093:9;27089:17;27080:6;27036:71;:::i;:::-;26990:124;;;;:::o;27120:831::-;;27421:3;27410:9;27406:19;27398:27;;27435:71;27503:1;27492:9;27488:17;27479:6;27435:71;:::i;:::-;27516:80;27592:2;27581:9;27577:18;27568:6;27516:80;:::i;:::-;27643:9;27637:4;27633:20;27628:2;27617:9;27613:18;27606:48;27671:108;27774:4;27765:6;27671:108;:::i;:::-;27663:116;;27789:72;27857:2;27846:9;27842:18;27833:6;27789:72;:::i;:::-;27871:73;27939:3;27928:9;27924:19;27915:6;27871:73;:::i;:::-;27388:563;;;;;;;;:::o;27957:442::-;;28144:2;28133:9;28129:18;28121:26;;28157:71;28225:1;28214:9;28210:17;28201:6;28157:71;:::i;:::-;28238:72;28306:2;28295:9;28291:18;28282:6;28238:72;:::i;:::-;28320;28388:2;28377:9;28373:18;28364:6;28320:72;:::i;:::-;28111:288;;;;;;:::o;28405:214::-;;28532:2;28521:9;28517:18;28509:26;;28545:67;28609:1;28598:9;28594:17;28585:6;28545:67;:::i;:::-;28499:120;;;;:::o;28625:283::-;;28691:2;28685:9;28675:19;;28733:4;28725:6;28721:17;28840:6;28828:10;28825:22;28804:18;28792:10;28789:34;28786:62;28783:2;;;28851:18;;:::i;:::-;28783:2;28891:10;28887:2;28880:22;28665:243;;;;:::o;28914:311::-;;29081:18;29073:6;29070:30;29067:2;;;29103:18;;:::i;:::-;29067:2;29153:4;29145:6;29141:17;29133:25;;29213:4;29207;29203:15;29195:23;;28996:229;;;:::o;29231:132::-;;29321:3;29313:11;;29351:4;29346:3;29342:14;29334:22;;29303:60;;;:::o;29369:114::-;;29470:5;29464:12;29454:22;;29443:40;;;:::o;29489:99::-;;29575:5;29569:12;29559:22;;29548:40;;;:::o;29594:113::-;;29696:4;29691:3;29687:14;29679:22;;29669:38;;;:::o;29713:184::-;;29846:6;29841:3;29834:19;29886:4;29881:3;29877:14;29862:29;;29824:73;;;;:::o;29903:147::-;;30041:3;30026:18;;30016:34;;;;:::o;30056:169::-;;30174:6;30169:3;30162:19;30214:4;30209:3;30205:14;30190:29;;30152:73;;;;:::o;30231:305::-;;30290:20;30308:1;30290:20;:::i;:::-;30285:25;;30324:20;30342:1;30324:20;:::i;:::-;30319:25;;30478:1;30410:66;30406:74;30403:1;30400:81;30397:2;;;30484:18;;:::i;:::-;30397:2;30528:1;30525;30521:9;30514:16;;30275:261;;;;:::o;30542:185::-;;30599:20;30617:1;30599:20;:::i;:::-;30594:25;;30633:20;30651:1;30633:20;:::i;:::-;30628:25;;30672:1;30662:2;;30677:18;;:::i;:::-;30662:2;30719:1;30716;30712:9;30707:14;;30584:143;;;;:::o;30733:348::-;;30796:20;30814:1;30796:20;:::i;:::-;30791:25;;30830:20;30848:1;30830:20;:::i;:::-;30825:25;;31018:1;30950:66;30946:74;30943:1;30940:81;30935:1;30928:9;30921:17;30917:105;30914:2;;;31025:18;;:::i;:::-;30914:2;31073:1;31070;31066:9;31055:20;;30781:300;;;;:::o;31087:191::-;;31147:20;31165:1;31147:20;:::i;:::-;31142:25;;31181:20;31199:1;31181:20;:::i;:::-;31176:25;;31220:1;31217;31214:8;31211:2;;;31225:18;;:::i;:::-;31211:2;31270:1;31267;31263:9;31255:17;;31132:146;;;;:::o;31284:96::-;;31350:24;31368:5;31350:24;:::i;:::-;31339:35;;31329:51;;;:::o;31386:90::-;;31463:5;31456:13;31449:21;31438:32;;31428:48;;;:::o;31482:126::-;;31559:42;31552:5;31548:54;31537:65;;31527:81;;;:::o;31614:77::-;;31680:5;31669:16;;31659:32;;;:::o;31697:86::-;;31772:4;31765:5;31761:16;31750:27;;31740:43;;;:::o;31789:121::-;;31880:24;31898:5;31880:24;:::i;:::-;31867:37;;31857:53;;;:::o;31916:307::-;31984:1;31994:113;32008:6;32005:1;32002:13;31994:113;;;32093:1;32088:3;32084:11;32078:18;32074:1;32069:3;32065:11;32058:39;32030:2;32027:1;32023:10;32018:15;;31994:113;;;32125:6;32122:1;32119:13;32116:2;;;32205:1;32196:6;32191:3;32187:16;32180:27;32116:2;31965:258;;;;:::o;32229:320::-;;32310:1;32304:4;32300:12;32290:22;;32357:1;32351:4;32347:12;32378:18;32368:2;;32434:4;32426:6;32422:17;32412:27;;32368:2;32496;32488:6;32485:14;32465:18;32462:38;32459:2;;;32515:18;;:::i;:::-;32459:2;32280:269;;;;:::o;32555:233::-;;32617:24;32635:5;32617:24;:::i;:::-;32608:33;;32663:66;32656:5;32653:77;32650:2;;;32733:18;;:::i;:::-;32650:2;32780:1;32773:5;32769:13;32762:20;;32598:190;;;:::o;32794:180::-;32842:77;32839:1;32832:88;32939:4;32936:1;32929:15;32963:4;32960:1;32953:15;32980:180;33028:77;33025:1;33018:88;33125:4;33122:1;33115:15;33149:4;33146:1;33139:15;33166:180;33214:77;33211:1;33204:88;33311:4;33308:1;33301:15;33335:4;33332:1;33325:15;33352:180;33400:77;33397:1;33390:88;33497:4;33494:1;33487:15;33521:4;33518:1;33511:15;33538:102;;33630:2;33626:7;33621:2;33614:5;33610:14;33606:28;33596:38;;33586:54;;;:::o;33646:122::-;33719:24;33737:5;33719:24;:::i;:::-;33712:5;33709:35;33699:2;;33758:1;33755;33748:12;33699:2;33689:79;:::o;33774:116::-;33844:21;33859:5;33844:21;:::i;:::-;33837:5;33834:32;33824:2;;33880:1;33877;33870:12;33824:2;33814:76;:::o;33896:122::-;33969:24;33987:5;33969:24;:::i;:::-;33962:5;33959:35;33949:2;;34008:1;34005;33998:12;33949:2;33939:79;:::o
Swarm Source
ipfs://5073ffa2cfaa2dbf1b96cdb2788712cdc6991d0c980830f1d33ee11ccf5807bd
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.