ERC-20
Overview
Max Total Supply
1,000,000,000 WUKONG
Holders
124
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000000000001 WUKONGValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
WUKONG
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT /* TG: https://t.me/WuKongCoinETH WEB: https://wukongcoin.wtf/ Twitter: https://x.com/WuKongCoin_ETH */ pragma solidity ^0.8.12; import {Ownable} from "./Ownable.sol"; import {ERC20} from "./ERC20.sol"; import {IERC20} from "./IERC20.sol"; import {SafeMath} from "./SafeMath.sol"; import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; contract WUKONG is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapRouter; address public uniswapV2Pair; bool private swapping; address public WUKONGWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => bool) blacklisted; uint256 public buyTotalFees; uint256 public buyWUKONGFee; uint256 public sellTotalFees; uint256 public sellWUKONGFee; uint256 public tokensForWUKONG; /******************/ // exclude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapRouter( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event WUKONGWalletUpdated( address indexed newWallet, address indexed oldWallet ); constructor() ERC20("WUKONG", "WUKONG") { IUniswapV2Router02 _uniswapRouter = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniswapRouter), true); uniswapRouter = _uniswapRouter; uint256 _buyWUKONGFee = 30; uint256 _sellWUKONGFee = 30; uint256 totalSupply = 1_000_000_000 * 1e18; maxTransactionAmount = 20_000_000 * 1e18; maxWallet = 20_000_000 * 1e18; swapTokensAtAmount = (totalSupply * 10) / 10000; buyWUKONGFee = _buyWUKONGFee; buyTotalFees = buyWUKONGFee; sellWUKONGFee = _sellWUKONGFee; sellTotalFees = sellWUKONGFee; WUKONGWallet = msg.sender; excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); _mint(msg.sender, totalSupply); _approve(msg.sender, address(_uniswapRouter), totalSupply); uniswapV2Pair = IUniswapV2Factory(uniswapRouter.factory()).createPair( address(this), uniswapRouter.WETH() ); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); } receive() external payable {} function enableTrading() external onlyOwner { require( !tradingActive, "trading" ); tradingActive = true; swapEnabled = true; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 10) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 1.0%" ); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 20) / 1000) / 1e18, "Cannot set maxWallet lower than 2.0%" ); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees(uint256 _WUKONGFee) external onlyOwner { buyWUKONGFee = _WUKONGFee; buyTotalFees = buyWUKONGFee; } function updateSellFees(uint256 _WUKONGFee) external onlyOwner { sellWUKONGFee = _WUKONGFee; sellTotalFees = sellWUKONGFee; } function setSellFees(uint256 _WUKONGFee) external onlyOwner { sellWUKONGFee = _WUKONGFee; sellTotalFees = sellWUKONGFee; } 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 updateWUKONGWallet(address newWallet) external onlyOwner { emit WUKONGWalletUpdated(newWallet, WUKONGWallet); WUKONGWallet = newWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function isBlacklisted(address account) public view returns (bool) { return blacklisted[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!blacklisted[from], "Sender blacklisted"); require(!blacklisted[to], "Receiver blacklisted"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } //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 && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForWUKONG += (fees * sellWUKONGFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForWUKONG += (fees * buyWUKONGFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapRouter.WETH(); _approve(address(this), address(uniswapRouter), tokenAmount); // make the swap uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapRouter), tokenAmount); // add the liquidity uniswapRouter.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 = tokensForWUKONG; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } uint256 amountToSwapForETH = contractBalance; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); tokensForWUKONG = 0; (success, ) = address(WUKONGWallet).call{value: ethBalance}(""); } function withdrawWUKONG() external onlyOwner { uint256 balance = IERC20(address(this)).balanceOf(address(this)); IERC20(address(this)).transfer(msg.sender, balance); payable(msg.sender).transfer(address(this).balance); } function withdrawWUKONGTokens(address _token, address _to) external onlyOwner { require(_token != address(0), "_token address cannot be 0"); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); IERC20(_token).transfer(_to, _contractBalance); } function withdrawETH(address toAddr) external onlyOwner { (bool success, ) = toAddr.call{value: address(this).balance}(""); require(success); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol) pragma solidity ^0.8.19; /** * @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; } }
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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import {IERC20} from "./IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. */ 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); }
pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
pragma solidity >=0.6.2; interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.19; import {Context} from "./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); } }
pragma solidity ^0.8.19; /** * @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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WUKONGWalletUpdated","type":"event"},{"inputs":[],"name":"WUKONGWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyWUKONGFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellWUKONGFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_WUKONGFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForWUKONG","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_WUKONGFee","type":"uint256"}],"name":"updateBuyFees","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":"_WUKONGFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateWUKONGWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddr","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawWUKONG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawWUKONGTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff02191690831515021790555034801561005d575f80fd5b506040518060400160405280600681526020017f57554b4f4e4700000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f57554b4f4e47000000000000000000000000000000000000000000000000000081525081600390816100d99190610dad565b5080600490816100e99190610dad565b5050506101086100fd6104a560201b60201c565b6104ac60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061013181600161056f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505f601e90505f601e90505f6b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006008819055506a108b2a2c28029094000000600a81905550612710600a826101b39190610ea9565b6101bd9190610f17565b60098190555082600e81905550600e54600d8190555081601081905550601054600f819055503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061024161023461064f60201b60201c565b600161067760201b60201c565b61025230600161067760201b60201c565b61027061026361064f60201b60201c565b600161056f60201b60201c565b61028130600161056f60201b60201c565b61029133826107a560201b60201c565b6102a233858361090860201b60201c565b60805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103119190610fa5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610378573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039c9190610fa5565b6040518363ffffffff1660e01b81526004016103b9929190610fdf565b6020604051808303815f875af11580156103d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f99190610fa5565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061046a60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161056f60201b60201c565b61049c60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610acb60201b60201c565b50505050611290565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61057d6104a560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166105a161064f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146105f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ee90611060565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106856104a560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166106a961064f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146106ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f690611060565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516107999190611098565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080a906110fb565b60405180910390fd5b6108245f8383610b6960201b60201c565b8060025f8282546108359190611119565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108879190611119565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108eb919061115b565b60405180910390a36109045f8383610b6e60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096d906111e4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db90611272565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610abe919061115b565b60405180910390a3505050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610bee57607f821691505b602082108103610c0157610c00610baa565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610c637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610c28565b610c6d8683610c28565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610cb1610cac610ca784610c85565b610c8e565b610c85565b9050919050565b5f819050919050565b610cca83610c97565b610cde610cd682610cb8565b848454610c34565b825550505050565b5f90565b610cf2610ce6565b610cfd818484610cc1565b505050565b5b81811015610d2057610d155f82610cea565b600181019050610d03565b5050565b601f821115610d6557610d3681610c07565b610d3f84610c19565b81016020851015610d4e578190505b610d62610d5a85610c19565b830182610d02565b50505b505050565b5f82821c905092915050565b5f610d855f1984600802610d6a565b1980831691505092915050565b5f610d9d8383610d76565b9150826002028217905092915050565b610db682610b73565b67ffffffffffffffff811115610dcf57610dce610b7d565b5b610dd98254610bd7565b610de4828285610d24565b5f60209050601f831160018114610e15575f8415610e03578287015190505b610e0d8582610d92565b865550610e74565b601f198416610e2386610c07565b5f5b82811015610e4a57848901518255600182019150602085019450602081019050610e25565b86831015610e675784890151610e63601f891682610d76565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610eb382610c85565b9150610ebe83610c85565b9250828202610ecc81610c85565b91508282048414831517610ee357610ee2610e7c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610f2182610c85565b9150610f2c83610c85565b925082610f3c57610f3b610eea565b5b828204905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f7482610f4b565b9050919050565b610f8481610f6a565b8114610f8e575f80fd5b50565b5f81519050610f9f81610f7b565b92915050565b5f60208284031215610fba57610fb9610f47565b5b5f610fc784828501610f91565b91505092915050565b610fd981610f6a565b82525050565b5f604082019050610ff25f830185610fd0565b610fff6020830184610fd0565b9392505050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61104a602083611006565b915061105582611016565b602082019050919050565b5f6020820190508181035f8301526110778161103e565b9050919050565b5f8115159050919050565b6110928161107e565b82525050565b5f6020820190506110ab5f830184611089565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6110e5601f83611006565b91506110f0826110b1565b602082019050919050565b5f6020820190508181035f830152611112816110d9565b9050919050565b5f61112382610c85565b915061112e83610c85565b925082820190508082111561114657611145610e7c565b5b92915050565b61115581610c85565b82525050565b5f60208201905061116e5f83018461114c565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6111ce602483611006565b91506111d982611174565b604082019050919050565b5f6020820190508181035f8301526111fb816111c2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61125c602283611006565b915061126782611202565b604082019050919050565b5f6020820190508181035f83015261128981611250565b9050919050565b6080516148e76112bd5f395f81816112b6015281816134a20152818161358101526135a801526148e75ff3fe608060405260043610610296575f3560e01c80638a8c523c11610159578063c18bc195116100c0578063e2f4560511610079578063e2f45605146109f9578063eba4c33314610a23578063edea7ab114610a4b578063f2fde38b14610a75578063f8b45b0514610a9d578063fe575a8714610ac75761029d565b8063c18bc195146108db578063c8c8ebe414610903578063d257b34f1461092d578063d85ba06314610969578063dbf894e814610993578063dd62ed3e146109bd5761029d565b80639a7a23d6116101125780639a7a23d6146107ad578063a457c2d7146107d5578063a9059cbb14610811578063b62496f51461084d578063bbc0c74214610889578063c0246668146108b35761029d565b80638a8c523c146106c95780638da5cb5b146106df578063924de9b71461070957806395927c251461073157806395d89b411461075957806398975867146107835761029d565b80634fbee193116101fd57806371fc4688116101b657806371fc4688146105e7578063735de9f71461060f578063751039fc146106395780637571336a14610663578063825686761461068b578063871d767a146106a15761029d565b80634fbee193146104dd578063690d8320146105195780636a486a8e146105415780636ddd17131461056b57806370a0823114610595578063715018a6146105d15761029d565b8063231d4c901161024f578063231d4c90146103bf57806323b872dd146103e7578063313ce56714610423578063395093511461044d57806349bd5a5e146104895780634a62bb65146104b35761029d565b806306fdde03146102a1578063095ea7b3146102cb5780630f34dfac1461030757806310d5de531461033157806318160ddd1461036d578063203e727e146103975761029d565b3661029d57005b5f80fd5b3480156102ac575f80fd5b506102b5610b03565b6040516102c291906136bd565b60405180910390f35b3480156102d6575f80fd5b506102f160048036038101906102ec919061376e565b610b93565b6040516102fe91906137c6565b60405180910390f35b348015610312575f80fd5b5061031b610bb0565b60405161032891906137ee565b60405180910390f35b34801561033c575f80fd5b5061035760048036038101906103529190613807565b610bb6565b60405161036491906137c6565b60405180910390f35b348015610378575f80fd5b50610381610bd3565b60405161038e91906137ee565b60405180910390f35b3480156103a2575f80fd5b506103bd60048036038101906103b89190613832565b610bdc565b005b3480156103ca575f80fd5b506103e560048036038101906103e09190613807565b610ceb565b005b3480156103f2575f80fd5b5061040d6004803603810190610408919061385d565b610e25565b60405161041a91906137c6565b60405180910390f35b34801561042e575f80fd5b50610437610f17565b60405161044491906138c8565b60405180910390f35b348015610458575f80fd5b50610473600480360381019061046e919061376e565b610f1f565b60405161048091906137c6565b60405180910390f35b348015610494575f80fd5b5061049d610fc6565b6040516104aa91906138f0565b60405180910390f35b3480156104be575f80fd5b506104c7610feb565b6040516104d491906137c6565b60405180910390f35b3480156104e8575f80fd5b5061050360048036038101906104fe9190613807565b610ffd565b60405161051091906137c6565b60405180910390f35b348015610524575f80fd5b5061053f600480360381019061053a9190613807565b61104f565b005b34801561054c575f80fd5b50610555611140565b60405161056291906137ee565b60405180910390f35b348015610576575f80fd5b5061057f611146565b60405161058c91906137c6565b60405180910390f35b3480156105a0575f80fd5b506105bb60048036038101906105b69190613807565b611159565b6040516105c891906137ee565b60405180910390f35b3480156105dc575f80fd5b506105e561119e565b005b3480156105f2575f80fd5b5061060d60048036038101906106089190613832565b611225565b005b34801561061a575f80fd5b506106236112b4565b6040516106309190613964565b60405180910390f35b348015610644575f80fd5b5061064d6112d8565b60405161065a91906137c6565b60405180910390f35b34801561066e575f80fd5b50610689600480360381019061068491906139a7565b611375565b005b348015610696575f80fd5b5061069f611449565b005b3480156106ac575f80fd5b506106c760048036038101906106c291906139e5565b611603565b005b3480156106d4575f80fd5b506106dd6117e9565b005b3480156106ea575f80fd5b506106f36118ed565b60405161070091906138f0565b60405180910390f35b348015610714575f80fd5b5061072f600480360381019061072a9190613a23565b611915565b005b34801561073c575f80fd5b5061075760048036038101906107529190613832565b6119ae565b005b348015610764575f80fd5b5061076d611a3d565b60405161077a91906136bd565b60405180910390f35b34801561078e575f80fd5b50610797611acd565b6040516107a491906138f0565b60405180910390f35b3480156107b8575f80fd5b506107d360048036038101906107ce91906139a7565b611af2565b005b3480156107e0575f80fd5b506107fb60048036038101906107f6919061376e565b611c0b565b60405161080891906137c6565b60405180910390f35b34801561081c575f80fd5b506108376004803603810190610832919061376e565b611cf1565b60405161084491906137c6565b60405180910390f35b348015610858575f80fd5b50610873600480360381019061086e9190613807565b611d0e565b60405161088091906137c6565b60405180910390f35b348015610894575f80fd5b5061089d611d2b565b6040516108aa91906137c6565b60405180910390f35b3480156108be575f80fd5b506108d960048036038101906108d491906139a7565b611d3e565b005b3480156108e6575f80fd5b5061090160048036038101906108fc9190613832565b611e60565b005b34801561090e575f80fd5b50610917611f6f565b60405161092491906137ee565b60405180910390f35b348015610938575f80fd5b50610953600480360381019061094e9190613832565b611f75565b60405161096091906137c6565b60405180910390f35b348015610974575f80fd5b5061097d612002565b60405161098a91906137ee565b60405180910390f35b34801561099e575f80fd5b506109a7612008565b6040516109b491906137ee565b60405180910390f35b3480156109c8575f80fd5b506109e360048036038101906109de91906139e5565b61200e565b6040516109f091906137ee565b60405180910390f35b348015610a04575f80fd5b50610a0d612090565b604051610a1a91906137ee565b60405180910390f35b348015610a2e575f80fd5b50610a496004803603810190610a449190613832565b612096565b005b348015610a56575f80fd5b50610a5f612125565b604051610a6c91906137ee565b60405180910390f35b348015610a80575f80fd5b50610a9b6004803603810190610a969190613807565b61212b565b005b348015610aa8575f80fd5b50610ab1612221565b604051610abe91906137ee565b60405180910390f35b348015610ad2575f80fd5b50610aed6004803603810190610ae89190613807565b612227565b604051610afa91906137c6565b60405180910390f35b606060038054610b1290613a7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e90613a7b565b8015610b895780601f10610b6057610100808354040283529160200191610b89565b820191905f5260205f20905b815481529060010190602001808311610b6c57829003601f168201915b5050505050905090565b5f610ba6610b9f612279565b8484612280565b6001905092915050565b600e5481565b6013602052805f5260405f205f915054906101000a900460ff1681565b5f600254905090565b610be4612279565b73ffffffffffffffffffffffffffffffffffffffff16610c026118ed565b73ffffffffffffffffffffffffffffffffffffffff1614610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f90613af5565b60405180910390fd5b670de0b6b3a76400006103e8600a610c6e610bd3565b610c789190613b40565b610c829190613bae565b610c8c9190613bae565b811015610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613c4e565b60405180910390fd5b670de0b6b3a764000081610ce29190613b40565b60088190555050565b610cf3612279565b73ffffffffffffffffffffffffffffffffffffffff16610d116118ed565b73ffffffffffffffffffffffffffffffffffffffff1614610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e90613af5565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff0157bad4f2d796e99d6576c1a22cd624d0b99ba3f00cade42cc334120d5975760405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f610e31848484612443565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e78612279565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee90613cdc565b60405180910390fd5b610f0b85610f03612279565b858403612280565b60019150509392505050565b5f6012905090565b5f610fbc610f2b612279565b848460015f610f38612279565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610fb79190613cfa565b612280565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5f9054906101000a900460ff1681565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611057612279565b73ffffffffffffffffffffffffffffffffffffffff166110756118ed565b73ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290613af5565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff16476040516110f090613d5a565b5f6040518083038185875af1925050503d805f811461112a576040519150601f19603f3d011682016040523d82523d5f602084013e61112f565b606091505b505090508061113c575f80fd5b5050565b600f5481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111a6612279565b73ffffffffffffffffffffffffffffffffffffffff166111c46118ed565b73ffffffffffffffffffffffffffffffffffffffff161461121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121190613af5565b60405180910390fd5b6112235f612ee5565b565b61122d612279565b73ffffffffffffffffffffffffffffffffffffffff1661124b6118ed565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129890613af5565b60405180910390fd5b80600e81905550600e54600d8190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6112e1612279565b73ffffffffffffffffffffffffffffffffffffffff166112ff6118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90613af5565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b61137d612279565b73ffffffffffffffffffffffffffffffffffffffff1661139b6118ed565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890613af5565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611451612279565b73ffffffffffffffffffffffffffffffffffffffff1661146f6118ed565b73ffffffffffffffffffffffffffffffffffffffff16146114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc90613af5565b60405180910390fd5b5f3073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114ff91906138f0565b602060405180830381865afa15801561151a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153e9190613d82565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161157b929190613dad565b6020604051808303815f875af1158015611597573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115bb9190613de8565b503373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156115ff573d5f803e3d5ffd5b5050565b61160b612279565b73ffffffffffffffffffffffffffffffffffffffff166116296118ed565b73ffffffffffffffffffffffffffffffffffffffff161461167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690613af5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e490613e5d565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161172791906138f0565b602060405180830381865afa158015611742573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117669190613d82565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016117a3929190613dad565b6020604051808303815f875af11580156117bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e39190613de8565b50505050565b6117f1612279565b73ffffffffffffffffffffffffffffffffffffffff1661180f6118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c90613af5565b60405180910390fd5b600b60019054906101000a900460ff16156118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac90613ec5565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61191d612279565b73ffffffffffffffffffffffffffffffffffffffff1661193b6118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198890613af5565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6119b6612279565b73ffffffffffffffffffffffffffffffffffffffff166119d46118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190613af5565b60405180910390fd5b80601081905550601054600f8190555050565b606060048054611a4c90613a7b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7890613a7b565b8015611ac35780601f10611a9a57610100808354040283529160200191611ac3565b820191905f5260205f20905b815481529060010190602001808311611aa657829003601f168201915b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611afa612279565b73ffffffffffffffffffffffffffffffffffffffff16611b186118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590613af5565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490613f53565b60405180910390fd5b611c078282612fa8565b5050565b5f8060015f611c18612279565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc990613fe1565b60405180910390fd5b611ce6611cdd612279565b85858403612280565b600191505092915050565b5f611d04611cfd612279565b8484612443565b6001905092915050565b6014602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611d46612279565b73ffffffffffffffffffffffffffffffffffffffff16611d646118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190613af5565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e5491906137c6565b60405180910390a25050565b611e68612279565b73ffffffffffffffffffffffffffffffffffffffff16611e866118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390613af5565b60405180910390fd5b670de0b6b3a76400006103e86014611ef2610bd3565b611efc9190613b40565b611f069190613bae565b611f109190613bae565b811015611f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f499061406f565b60405180910390fd5b670de0b6b3a764000081611f669190613b40565b600a8190555050565b60085481565b5f611f7e612279565b73ffffffffffffffffffffffffffffffffffffffff16611f9c6118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe990613af5565b60405180910390fd5b8160098190555060019050919050565b600d5481565b60105481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b61209e612279565b73ffffffffffffffffffffffffffffffffffffffff166120bc6118ed565b73ffffffffffffffffffffffffffffffffffffffff1614612112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210990613af5565b60405180910390fd5b80601081905550601054600f8190555050565b60115481565b612133612279565b73ffffffffffffffffffffffffffffffffffffffff166121516118ed565b73ffffffffffffffffffffffffffffffffffffffff16146121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e90613af5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c906140fd565b60405180910390fd5b61221e81612ee5565b50565b600a5481565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e59061418b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235390614219565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161243691906137ee565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a8906142a7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361251f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251690614335565b60405180910390fd5b600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a09061439d565b60405180910390fd5b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a90614405565b60405180910390fd5b5f810361264a5761264583835f613046565b612ee0565b600b5f9054906101000a900460ff1615612af4576126666118ed565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126d457506126a46118ed565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561270c57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127255750600660149054906101000a900460ff16155b15612af357600b60019054906101000a900460ff166128195760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127d9575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280f9061446d565b60405180910390fd5b5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128b6575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561295d57600854811115612900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f7906144fb565b60405180910390fd5b600a5461290c83611159565b826129179190613cfa565b1115612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294f90614563565b60405180910390fd5b612af2565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129fa575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a4957600854811115612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b906145f1565b60405180910390fd5b612af1565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612af057600a54612aa383611159565b82612aae9190613cfa565b1115612aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae690614563565b60405180910390fd5b5b5b5b5b5b5f612afe30611159565b90505f6009548210159050808015612b225750600b60029054906101000a900460ff165b8015612b3b5750600660149054906101000a900460ff16155b8015612b8e575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612be1575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c34575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c77576001600660146101000a81548160ff021916908315150217905550612c5c6132bb565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d26575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d2f575f90505b5f8115612ed05760145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d8d57505f600f54115b15612df357612dba6064612dac600f54886133d190919063ffffffff16565b6133e690919063ffffffff16565b9050600f5460105482612dcd9190613b40565b612dd79190613bae565b60115f828254612de79190613cfa565b92505081905550612ead565b60145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e4a57505f600d54115b15612eac57612e776064612e69600d54886133d190919063ffffffff16565b6133e690919063ffffffff16565b9050600d54600e5482612e8a9190613b40565b612e949190613bae565b60115f828254612ea49190613cfa565b925050819055505b5b5f811115612ec157612ec0873083613046565b5b8085612ecd919061460f565b94505b612edb878787613046565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ab906142a7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311990614335565b60405180910390fd5b61312d8383836133fb565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156131b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a7906146b2565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461323e9190613cfa565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132a291906137ee565b60405180910390a36132b5848484613400565b50505050565b5f6132c530611159565b90505f60115490505f808314806132db57505f82145b156132e8575050506133cf565b60146009546132f79190613b40565b83111561331057601460095461330d9190613b40565b92505b5f8390505f47905061332182613405565b5f613335824761363890919063ffffffff16565b90505f60118190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161338390613d5a565b5f6040518083038185875af1925050503d805f81146133bd576040519150601f19603f3d011682016040523d82523d5f602084013e6133c2565b606091505b5050809450505050505050505b565b5f81836133de9190613b40565b905092915050565b5f81836133f39190613bae565b905092915050565b505050565b505050565b5f600267ffffffffffffffff811115613421576134206146d0565b5b60405190808252806020026020018201604052801561344f5781602001602082028036833780820191505090505b50905030815f81518110613466576134656146fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613509573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061352d919061473e565b81600181518110613541576135406146fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135a6307f000000000000000000000000000000000000000000000000000000000000000084612280565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613607959493929190614859565b5f604051808303815f87803b15801561361e575f80fd5b505af1158015613630573d5f803e3d5ffd5b505050505050565b5f8183613645919061460f565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61368f8261364d565b6136998185613657565b93506136a9818560208601613667565b6136b281613675565b840191505092915050565b5f6020820190508181035f8301526136d58184613685565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61370a826136e1565b9050919050565b61371a81613700565b8114613724575f80fd5b50565b5f8135905061373581613711565b92915050565b5f819050919050565b61374d8161373b565b8114613757575f80fd5b50565b5f8135905061376881613744565b92915050565b5f8060408385031215613784576137836136dd565b5b5f61379185828601613727565b92505060206137a28582860161375a565b9150509250929050565b5f8115159050919050565b6137c0816137ac565b82525050565b5f6020820190506137d95f8301846137b7565b92915050565b6137e88161373b565b82525050565b5f6020820190506138015f8301846137df565b92915050565b5f6020828403121561381c5761381b6136dd565b5b5f61382984828501613727565b91505092915050565b5f60208284031215613847576138466136dd565b5b5f6138548482850161375a565b91505092915050565b5f805f60608486031215613874576138736136dd565b5b5f61388186828701613727565b935050602061389286828701613727565b92505060406138a38682870161375a565b9150509250925092565b5f60ff82169050919050565b6138c2816138ad565b82525050565b5f6020820190506138db5f8301846138b9565b92915050565b6138ea81613700565b82525050565b5f6020820190506139035f8301846138e1565b92915050565b5f819050919050565b5f61392c613927613922846136e1565b613909565b6136e1565b9050919050565b5f61393d82613912565b9050919050565b5f61394e82613933565b9050919050565b61395e81613944565b82525050565b5f6020820190506139775f830184613955565b92915050565b613986816137ac565b8114613990575f80fd5b50565b5f813590506139a18161397d565b92915050565b5f80604083850312156139bd576139bc6136dd565b5b5f6139ca85828601613727565b92505060206139db85828601613993565b9150509250929050565b5f80604083850312156139fb576139fa6136dd565b5b5f613a0885828601613727565b9250506020613a1985828601613727565b9150509250929050565b5f60208284031215613a3857613a376136dd565b5b5f613a4584828501613993565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a9257607f821691505b602082108103613aa557613aa4613a4e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613adf602083613657565b9150613aea82613aab565b602082019050919050565b5f6020820190508181035f830152613b0c81613ad3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b4a8261373b565b9150613b558361373b565b9250828202613b638161373b565b91508282048414831517613b7a57613b79613b13565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613bb88261373b565b9150613bc38361373b565b925082613bd357613bd2613b81565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20312e30250000000000000000000000000000000000602082015250565b5f613c38602f83613657565b9150613c4382613bde565b604082019050919050565b5f6020820190508181035f830152613c6581613c2c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613cc6602883613657565b9150613cd182613c6c565b604082019050919050565b5f6020820190508181035f830152613cf381613cba565b9050919050565b5f613d048261373b565b9150613d0f8361373b565b9250828201905080821115613d2757613d26613b13565b5b92915050565b5f81905092915050565b50565b5f613d455f83613d2d565b9150613d5082613d37565b5f82019050919050565b5f613d6482613d3a565b9150819050919050565b5f81519050613d7c81613744565b92915050565b5f60208284031215613d9757613d966136dd565b5b5f613da484828501613d6e565b91505092915050565b5f604082019050613dc05f8301856138e1565b613dcd60208301846137df565b9392505050565b5f81519050613de28161397d565b92915050565b5f60208284031215613dfd57613dfc6136dd565b5b5f613e0a84828501613dd4565b91505092915050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f613e47601a83613657565b9150613e5282613e13565b602082019050919050565b5f6020820190508181035f830152613e7481613e3b565b9050919050565b7f74726164696e67000000000000000000000000000000000000000000000000005f82015250565b5f613eaf600783613657565b9150613eba82613e7b565b602082019050919050565b5f6020820190508181035f830152613edc81613ea3565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613f3d603983613657565b9150613f4882613ee3565b604082019050919050565b5f6020820190508181035f830152613f6a81613f31565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613fcb602583613657565b9150613fd682613f71565b604082019050919050565b5f6020820190508181035f830152613ff881613fbf565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f322e302500000000000000000000000000000000000000000000000000000000602082015250565b5f614059602483613657565b915061406482613fff565b604082019050919050565b5f6020820190508181035f8301526140868161404d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140e7602683613657565b91506140f28261408d565b604082019050919050565b5f6020820190508181035f830152614114816140db565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614175602483613657565b91506141808261411b565b604082019050919050565b5f6020820190508181035f8301526141a281614169565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614203602283613657565b915061420e826141a9565b604082019050919050565b5f6020820190508181035f830152614230816141f7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614291602583613657565b915061429c82614237565b604082019050919050565b5f6020820190508181035f8301526142be81614285565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61431f602383613657565b915061432a826142c5565b604082019050919050565b5f6020820190508181035f83015261434c81614313565b9050919050565b7f53656e64657220626c61636b6c697374656400000000000000000000000000005f82015250565b5f614387601283613657565b915061439282614353565b602082019050919050565b5f6020820190508181035f8301526143b48161437b565b9050919050565b7f526563656976657220626c61636b6c69737465640000000000000000000000005f82015250565b5f6143ef601483613657565b91506143fa826143bb565b602082019050919050565b5f6020820190508181035f83015261441c816143e3565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614457601683613657565b915061446282614423565b602082019050919050565b5f6020820190508181035f8301526144848161444b565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6144e5603583613657565b91506144f08261448b565b604082019050919050565b5f6020820190508181035f830152614512816144d9565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61454d601383613657565b915061455882614519565b602082019050919050565b5f6020820190508181035f83015261457a81614541565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6145db603683613657565b91506145e682614581565b604082019050919050565b5f6020820190508181035f830152614608816145cf565b9050919050565b5f6146198261373b565b91506146248361373b565b925082820390508181111561463c5761463b613b13565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61469c602683613657565b91506146a782614642565b604082019050919050565b5f6020820190508181035f8301526146c981614690565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061473881613711565b92915050565b5f60208284031215614753576147526136dd565b5b5f6147608482850161472a565b91505092915050565b5f819050919050565b5f61478c61478761478284614769565b613909565b61373b565b9050919050565b61479c81614772565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6147d481613700565b82525050565b5f6147e583836147cb565b60208301905092915050565b5f602082019050919050565b5f614807826147a2565b61481181856147ac565b935061481c836147bc565b805f5b8381101561484c57815161483388826147da565b975061483e836147f1565b92505060018101905061481f565b5085935050505092915050565b5f60a08201905061486c5f8301886137df565b6148796020830187614793565b818103604083015261488b81866147fd565b905061489a60608301856138e1565b6148a760808301846137df565b969550505050505056fea264697066735822122012b00b5776b4646f7a61cca448b30388272c81ec12569164ed92fe5ebce8163c64736f6c634300081a0033
Deployed Bytecode
0x608060405260043610610296575f3560e01c80638a8c523c11610159578063c18bc195116100c0578063e2f4560511610079578063e2f45605146109f9578063eba4c33314610a23578063edea7ab114610a4b578063f2fde38b14610a75578063f8b45b0514610a9d578063fe575a8714610ac75761029d565b8063c18bc195146108db578063c8c8ebe414610903578063d257b34f1461092d578063d85ba06314610969578063dbf894e814610993578063dd62ed3e146109bd5761029d565b80639a7a23d6116101125780639a7a23d6146107ad578063a457c2d7146107d5578063a9059cbb14610811578063b62496f51461084d578063bbc0c74214610889578063c0246668146108b35761029d565b80638a8c523c146106c95780638da5cb5b146106df578063924de9b71461070957806395927c251461073157806395d89b411461075957806398975867146107835761029d565b80634fbee193116101fd57806371fc4688116101b657806371fc4688146105e7578063735de9f71461060f578063751039fc146106395780637571336a14610663578063825686761461068b578063871d767a146106a15761029d565b80634fbee193146104dd578063690d8320146105195780636a486a8e146105415780636ddd17131461056b57806370a0823114610595578063715018a6146105d15761029d565b8063231d4c901161024f578063231d4c90146103bf57806323b872dd146103e7578063313ce56714610423578063395093511461044d57806349bd5a5e146104895780634a62bb65146104b35761029d565b806306fdde03146102a1578063095ea7b3146102cb5780630f34dfac1461030757806310d5de531461033157806318160ddd1461036d578063203e727e146103975761029d565b3661029d57005b5f80fd5b3480156102ac575f80fd5b506102b5610b03565b6040516102c291906136bd565b60405180910390f35b3480156102d6575f80fd5b506102f160048036038101906102ec919061376e565b610b93565b6040516102fe91906137c6565b60405180910390f35b348015610312575f80fd5b5061031b610bb0565b60405161032891906137ee565b60405180910390f35b34801561033c575f80fd5b5061035760048036038101906103529190613807565b610bb6565b60405161036491906137c6565b60405180910390f35b348015610378575f80fd5b50610381610bd3565b60405161038e91906137ee565b60405180910390f35b3480156103a2575f80fd5b506103bd60048036038101906103b89190613832565b610bdc565b005b3480156103ca575f80fd5b506103e560048036038101906103e09190613807565b610ceb565b005b3480156103f2575f80fd5b5061040d6004803603810190610408919061385d565b610e25565b60405161041a91906137c6565b60405180910390f35b34801561042e575f80fd5b50610437610f17565b60405161044491906138c8565b60405180910390f35b348015610458575f80fd5b50610473600480360381019061046e919061376e565b610f1f565b60405161048091906137c6565b60405180910390f35b348015610494575f80fd5b5061049d610fc6565b6040516104aa91906138f0565b60405180910390f35b3480156104be575f80fd5b506104c7610feb565b6040516104d491906137c6565b60405180910390f35b3480156104e8575f80fd5b5061050360048036038101906104fe9190613807565b610ffd565b60405161051091906137c6565b60405180910390f35b348015610524575f80fd5b5061053f600480360381019061053a9190613807565b61104f565b005b34801561054c575f80fd5b50610555611140565b60405161056291906137ee565b60405180910390f35b348015610576575f80fd5b5061057f611146565b60405161058c91906137c6565b60405180910390f35b3480156105a0575f80fd5b506105bb60048036038101906105b69190613807565b611159565b6040516105c891906137ee565b60405180910390f35b3480156105dc575f80fd5b506105e561119e565b005b3480156105f2575f80fd5b5061060d60048036038101906106089190613832565b611225565b005b34801561061a575f80fd5b506106236112b4565b6040516106309190613964565b60405180910390f35b348015610644575f80fd5b5061064d6112d8565b60405161065a91906137c6565b60405180910390f35b34801561066e575f80fd5b50610689600480360381019061068491906139a7565b611375565b005b348015610696575f80fd5b5061069f611449565b005b3480156106ac575f80fd5b506106c760048036038101906106c291906139e5565b611603565b005b3480156106d4575f80fd5b506106dd6117e9565b005b3480156106ea575f80fd5b506106f36118ed565b60405161070091906138f0565b60405180910390f35b348015610714575f80fd5b5061072f600480360381019061072a9190613a23565b611915565b005b34801561073c575f80fd5b5061075760048036038101906107529190613832565b6119ae565b005b348015610764575f80fd5b5061076d611a3d565b60405161077a91906136bd565b60405180910390f35b34801561078e575f80fd5b50610797611acd565b6040516107a491906138f0565b60405180910390f35b3480156107b8575f80fd5b506107d360048036038101906107ce91906139a7565b611af2565b005b3480156107e0575f80fd5b506107fb60048036038101906107f6919061376e565b611c0b565b60405161080891906137c6565b60405180910390f35b34801561081c575f80fd5b506108376004803603810190610832919061376e565b611cf1565b60405161084491906137c6565b60405180910390f35b348015610858575f80fd5b50610873600480360381019061086e9190613807565b611d0e565b60405161088091906137c6565b60405180910390f35b348015610894575f80fd5b5061089d611d2b565b6040516108aa91906137c6565b60405180910390f35b3480156108be575f80fd5b506108d960048036038101906108d491906139a7565b611d3e565b005b3480156108e6575f80fd5b5061090160048036038101906108fc9190613832565b611e60565b005b34801561090e575f80fd5b50610917611f6f565b60405161092491906137ee565b60405180910390f35b348015610938575f80fd5b50610953600480360381019061094e9190613832565b611f75565b60405161096091906137c6565b60405180910390f35b348015610974575f80fd5b5061097d612002565b60405161098a91906137ee565b60405180910390f35b34801561099e575f80fd5b506109a7612008565b6040516109b491906137ee565b60405180910390f35b3480156109c8575f80fd5b506109e360048036038101906109de91906139e5565b61200e565b6040516109f091906137ee565b60405180910390f35b348015610a04575f80fd5b50610a0d612090565b604051610a1a91906137ee565b60405180910390f35b348015610a2e575f80fd5b50610a496004803603810190610a449190613832565b612096565b005b348015610a56575f80fd5b50610a5f612125565b604051610a6c91906137ee565b60405180910390f35b348015610a80575f80fd5b50610a9b6004803603810190610a969190613807565b61212b565b005b348015610aa8575f80fd5b50610ab1612221565b604051610abe91906137ee565b60405180910390f35b348015610ad2575f80fd5b50610aed6004803603810190610ae89190613807565b612227565b604051610afa91906137c6565b60405180910390f35b606060038054610b1290613a7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e90613a7b565b8015610b895780601f10610b6057610100808354040283529160200191610b89565b820191905f5260205f20905b815481529060010190602001808311610b6c57829003601f168201915b5050505050905090565b5f610ba6610b9f612279565b8484612280565b6001905092915050565b600e5481565b6013602052805f5260405f205f915054906101000a900460ff1681565b5f600254905090565b610be4612279565b73ffffffffffffffffffffffffffffffffffffffff16610c026118ed565b73ffffffffffffffffffffffffffffffffffffffff1614610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f90613af5565b60405180910390fd5b670de0b6b3a76400006103e8600a610c6e610bd3565b610c789190613b40565b610c829190613bae565b610c8c9190613bae565b811015610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613c4e565b60405180910390fd5b670de0b6b3a764000081610ce29190613b40565b60088190555050565b610cf3612279565b73ffffffffffffffffffffffffffffffffffffffff16610d116118ed565b73ffffffffffffffffffffffffffffffffffffffff1614610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e90613af5565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff0157bad4f2d796e99d6576c1a22cd624d0b99ba3f00cade42cc334120d5975760405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f610e31848484612443565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e78612279565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee90613cdc565b60405180910390fd5b610f0b85610f03612279565b858403612280565b60019150509392505050565b5f6012905090565b5f610fbc610f2b612279565b848460015f610f38612279565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610fb79190613cfa565b612280565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5f9054906101000a900460ff1681565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611057612279565b73ffffffffffffffffffffffffffffffffffffffff166110756118ed565b73ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290613af5565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff16476040516110f090613d5a565b5f6040518083038185875af1925050503d805f811461112a576040519150601f19603f3d011682016040523d82523d5f602084013e61112f565b606091505b505090508061113c575f80fd5b5050565b600f5481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111a6612279565b73ffffffffffffffffffffffffffffffffffffffff166111c46118ed565b73ffffffffffffffffffffffffffffffffffffffff161461121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121190613af5565b60405180910390fd5b6112235f612ee5565b565b61122d612279565b73ffffffffffffffffffffffffffffffffffffffff1661124b6118ed565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129890613af5565b60405180910390fd5b80600e81905550600e54600d8190555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f6112e1612279565b73ffffffffffffffffffffffffffffffffffffffff166112ff6118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90613af5565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b61137d612279565b73ffffffffffffffffffffffffffffffffffffffff1661139b6118ed565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890613af5565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611451612279565b73ffffffffffffffffffffffffffffffffffffffff1661146f6118ed565b73ffffffffffffffffffffffffffffffffffffffff16146114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc90613af5565b60405180910390fd5b5f3073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114ff91906138f0565b602060405180830381865afa15801561151a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153e9190613d82565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161157b929190613dad565b6020604051808303815f875af1158015611597573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115bb9190613de8565b503373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156115ff573d5f803e3d5ffd5b5050565b61160b612279565b73ffffffffffffffffffffffffffffffffffffffff166116296118ed565b73ffffffffffffffffffffffffffffffffffffffff161461167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690613af5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e490613e5d565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161172791906138f0565b602060405180830381865afa158015611742573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117669190613d82565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016117a3929190613dad565b6020604051808303815f875af11580156117bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e39190613de8565b50505050565b6117f1612279565b73ffffffffffffffffffffffffffffffffffffffff1661180f6118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c90613af5565b60405180910390fd5b600b60019054906101000a900460ff16156118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac90613ec5565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61191d612279565b73ffffffffffffffffffffffffffffffffffffffff1661193b6118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198890613af5565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6119b6612279565b73ffffffffffffffffffffffffffffffffffffffff166119d46118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190613af5565b60405180910390fd5b80601081905550601054600f8190555050565b606060048054611a4c90613a7b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7890613a7b565b8015611ac35780601f10611a9a57610100808354040283529160200191611ac3565b820191905f5260205f20905b815481529060010190602001808311611aa657829003601f168201915b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611afa612279565b73ffffffffffffffffffffffffffffffffffffffff16611b186118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590613af5565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490613f53565b60405180910390fd5b611c078282612fa8565b5050565b5f8060015f611c18612279565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc990613fe1565b60405180910390fd5b611ce6611cdd612279565b85858403612280565b600191505092915050565b5f611d04611cfd612279565b8484612443565b6001905092915050565b6014602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611d46612279565b73ffffffffffffffffffffffffffffffffffffffff16611d646118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190613af5565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e5491906137c6565b60405180910390a25050565b611e68612279565b73ffffffffffffffffffffffffffffffffffffffff16611e866118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390613af5565b60405180910390fd5b670de0b6b3a76400006103e86014611ef2610bd3565b611efc9190613b40565b611f069190613bae565b611f109190613bae565b811015611f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f499061406f565b60405180910390fd5b670de0b6b3a764000081611f669190613b40565b600a8190555050565b60085481565b5f611f7e612279565b73ffffffffffffffffffffffffffffffffffffffff16611f9c6118ed565b73ffffffffffffffffffffffffffffffffffffffff1614611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe990613af5565b60405180910390fd5b8160098190555060019050919050565b600d5481565b60105481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b61209e612279565b73ffffffffffffffffffffffffffffffffffffffff166120bc6118ed565b73ffffffffffffffffffffffffffffffffffffffff1614612112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210990613af5565b60405180910390fd5b80601081905550601054600f8190555050565b60115481565b612133612279565b73ffffffffffffffffffffffffffffffffffffffff166121516118ed565b73ffffffffffffffffffffffffffffffffffffffff16146121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e90613af5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c906140fd565b60405180910390fd5b61221e81612ee5565b50565b600a5481565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e59061418b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235390614219565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161243691906137ee565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a8906142a7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361251f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251690614335565b60405180910390fd5b600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a09061439d565b60405180910390fd5b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a90614405565b60405180910390fd5b5f810361264a5761264583835f613046565b612ee0565b600b5f9054906101000a900460ff1615612af4576126666118ed565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126d457506126a46118ed565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561270c57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127255750600660149054906101000a900460ff16155b15612af357600b60019054906101000a900460ff166128195760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127d9575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280f9061446d565b60405180910390fd5b5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128b6575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561295d57600854811115612900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f7906144fb565b60405180910390fd5b600a5461290c83611159565b826129179190613cfa565b1115612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294f90614563565b60405180910390fd5b612af2565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129fa575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a4957600854811115612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b906145f1565b60405180910390fd5b612af1565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612af057600a54612aa383611159565b82612aae9190613cfa565b1115612aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae690614563565b60405180910390fd5b5b5b5b5b5b5f612afe30611159565b90505f6009548210159050808015612b225750600b60029054906101000a900460ff165b8015612b3b5750600660149054906101000a900460ff16155b8015612b8e575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612be1575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c34575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c77576001600660146101000a81548160ff021916908315150217905550612c5c6132bb565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d26575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d2f575f90505b5f8115612ed05760145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d8d57505f600f54115b15612df357612dba6064612dac600f54886133d190919063ffffffff16565b6133e690919063ffffffff16565b9050600f5460105482612dcd9190613b40565b612dd79190613bae565b60115f828254612de79190613cfa565b92505081905550612ead565b60145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e4a57505f600d54115b15612eac57612e776064612e69600d54886133d190919063ffffffff16565b6133e690919063ffffffff16565b9050600d54600e5482612e8a9190613b40565b612e949190613bae565b60115f828254612ea49190613cfa565b925050819055505b5b5f811115612ec157612ec0873083613046565b5b8085612ecd919061460f565b94505b612edb878787613046565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ab906142a7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311990614335565b60405180910390fd5b61312d8383836133fb565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156131b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a7906146b2565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461323e9190613cfa565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132a291906137ee565b60405180910390a36132b5848484613400565b50505050565b5f6132c530611159565b90505f60115490505f808314806132db57505f82145b156132e8575050506133cf565b60146009546132f79190613b40565b83111561331057601460095461330d9190613b40565b92505b5f8390505f47905061332182613405565b5f613335824761363890919063ffffffff16565b90505f60118190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161338390613d5a565b5f6040518083038185875af1925050503d805f81146133bd576040519150601f19603f3d011682016040523d82523d5f602084013e6133c2565b606091505b5050809450505050505050505b565b5f81836133de9190613b40565b905092915050565b5f81836133f39190613bae565b905092915050565b505050565b505050565b5f600267ffffffffffffffff811115613421576134206146d0565b5b60405190808252806020026020018201604052801561344f5781602001602082028036833780820191505090505b50905030815f81518110613466576134656146fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613509573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061352d919061473e565b81600181518110613541576135406146fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135a6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612280565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613607959493929190614859565b5f604051808303815f87803b15801561361e575f80fd5b505af1158015613630573d5f803e3d5ffd5b505050505050565b5f8183613645919061460f565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61368f8261364d565b6136998185613657565b93506136a9818560208601613667565b6136b281613675565b840191505092915050565b5f6020820190508181035f8301526136d58184613685565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61370a826136e1565b9050919050565b61371a81613700565b8114613724575f80fd5b50565b5f8135905061373581613711565b92915050565b5f819050919050565b61374d8161373b565b8114613757575f80fd5b50565b5f8135905061376881613744565b92915050565b5f8060408385031215613784576137836136dd565b5b5f61379185828601613727565b92505060206137a28582860161375a565b9150509250929050565b5f8115159050919050565b6137c0816137ac565b82525050565b5f6020820190506137d95f8301846137b7565b92915050565b6137e88161373b565b82525050565b5f6020820190506138015f8301846137df565b92915050565b5f6020828403121561381c5761381b6136dd565b5b5f61382984828501613727565b91505092915050565b5f60208284031215613847576138466136dd565b5b5f6138548482850161375a565b91505092915050565b5f805f60608486031215613874576138736136dd565b5b5f61388186828701613727565b935050602061389286828701613727565b92505060406138a38682870161375a565b9150509250925092565b5f60ff82169050919050565b6138c2816138ad565b82525050565b5f6020820190506138db5f8301846138b9565b92915050565b6138ea81613700565b82525050565b5f6020820190506139035f8301846138e1565b92915050565b5f819050919050565b5f61392c613927613922846136e1565b613909565b6136e1565b9050919050565b5f61393d82613912565b9050919050565b5f61394e82613933565b9050919050565b61395e81613944565b82525050565b5f6020820190506139775f830184613955565b92915050565b613986816137ac565b8114613990575f80fd5b50565b5f813590506139a18161397d565b92915050565b5f80604083850312156139bd576139bc6136dd565b5b5f6139ca85828601613727565b92505060206139db85828601613993565b9150509250929050565b5f80604083850312156139fb576139fa6136dd565b5b5f613a0885828601613727565b9250506020613a1985828601613727565b9150509250929050565b5f60208284031215613a3857613a376136dd565b5b5f613a4584828501613993565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a9257607f821691505b602082108103613aa557613aa4613a4e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613adf602083613657565b9150613aea82613aab565b602082019050919050565b5f6020820190508181035f830152613b0c81613ad3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b4a8261373b565b9150613b558361373b565b9250828202613b638161373b565b91508282048414831517613b7a57613b79613b13565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613bb88261373b565b9150613bc38361373b565b925082613bd357613bd2613b81565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20312e30250000000000000000000000000000000000602082015250565b5f613c38602f83613657565b9150613c4382613bde565b604082019050919050565b5f6020820190508181035f830152613c6581613c2c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613cc6602883613657565b9150613cd182613c6c565b604082019050919050565b5f6020820190508181035f830152613cf381613cba565b9050919050565b5f613d048261373b565b9150613d0f8361373b565b9250828201905080821115613d2757613d26613b13565b5b92915050565b5f81905092915050565b50565b5f613d455f83613d2d565b9150613d5082613d37565b5f82019050919050565b5f613d6482613d3a565b9150819050919050565b5f81519050613d7c81613744565b92915050565b5f60208284031215613d9757613d966136dd565b5b5f613da484828501613d6e565b91505092915050565b5f604082019050613dc05f8301856138e1565b613dcd60208301846137df565b9392505050565b5f81519050613de28161397d565b92915050565b5f60208284031215613dfd57613dfc6136dd565b5b5f613e0a84828501613dd4565b91505092915050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f613e47601a83613657565b9150613e5282613e13565b602082019050919050565b5f6020820190508181035f830152613e7481613e3b565b9050919050565b7f74726164696e67000000000000000000000000000000000000000000000000005f82015250565b5f613eaf600783613657565b9150613eba82613e7b565b602082019050919050565b5f6020820190508181035f830152613edc81613ea3565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613f3d603983613657565b9150613f4882613ee3565b604082019050919050565b5f6020820190508181035f830152613f6a81613f31565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613fcb602583613657565b9150613fd682613f71565b604082019050919050565b5f6020820190508181035f830152613ff881613fbf565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f322e302500000000000000000000000000000000000000000000000000000000602082015250565b5f614059602483613657565b915061406482613fff565b604082019050919050565b5f6020820190508181035f8301526140868161404d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140e7602683613657565b91506140f28261408d565b604082019050919050565b5f6020820190508181035f830152614114816140db565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614175602483613657565b91506141808261411b565b604082019050919050565b5f6020820190508181035f8301526141a281614169565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614203602283613657565b915061420e826141a9565b604082019050919050565b5f6020820190508181035f830152614230816141f7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614291602583613657565b915061429c82614237565b604082019050919050565b5f6020820190508181035f8301526142be81614285565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61431f602383613657565b915061432a826142c5565b604082019050919050565b5f6020820190508181035f83015261434c81614313565b9050919050565b7f53656e64657220626c61636b6c697374656400000000000000000000000000005f82015250565b5f614387601283613657565b915061439282614353565b602082019050919050565b5f6020820190508181035f8301526143b48161437b565b9050919050565b7f526563656976657220626c61636b6c69737465640000000000000000000000005f82015250565b5f6143ef601483613657565b91506143fa826143bb565b602082019050919050565b5f6020820190508181035f83015261441c816143e3565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614457601683613657565b915061446282614423565b602082019050919050565b5f6020820190508181035f8301526144848161444b565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6144e5603583613657565b91506144f08261448b565b604082019050919050565b5f6020820190508181035f830152614512816144d9565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61454d601383613657565b915061455882614519565b602082019050919050565b5f6020820190508181035f83015261457a81614541565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6145db603683613657565b91506145e682614581565b604082019050919050565b5f6020820190508181035f830152614608816145cf565b9050919050565b5f6146198261373b565b91506146248361373b565b925082820390508181111561463c5761463b613b13565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61469c602683613657565b91506146a782614642565b604082019050919050565b5f6020820190508181035f8301526146c981614690565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061473881613711565b92915050565b5f60208284031215614753576147526136dd565b5b5f6147608482850161472a565b91505092915050565b5f819050919050565b5f61478c61478761478284614769565b613909565b61373b565b9050919050565b61479c81614772565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6147d481613700565b82525050565b5f6147e583836147cb565b60208301905092915050565b5f602082019050919050565b5f614807826147a2565b61481181856147ac565b935061481c836147bc565b805f5b8381101561484c57815161483388826147da565b975061483e836147f1565b92505060018101905061481f565b5085935050505092915050565b5f60a08201905061486c5f8301886137df565b6148796020830187614793565b818103604083015261488b81866147fd565b905061489a60608301856138e1565b6148a760808301846137df565b969550505050505056fea264697066735822122012b00b5776b4646f7a61cca448b30388272c81ec12569164ed92fe5ebce8163c64736f6c634300081a0033
Deployed Bytecode Sourcemap
438:12036:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2088:100:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4255:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1020:27:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1296:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3208:108:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3935:270:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5948:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4906:492:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3050:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5807:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;566:28:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;774:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6120:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12309:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1054:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;852:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3379:127:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1745:103:6;;;;;;;;;;;;;:::i;:::-;;4827:141:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;511:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3561:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4468:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11763:248;;;;;;;;;;;;;:::i;:::-;;12017:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3325:187;;;;;;;;;;;;;:::i;:::-;;1094:87:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4723:98:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5125:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2307:104:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;629:27:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5458:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6525:413:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3719:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1513:57:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;813:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5273:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4211:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;663:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3746:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;987:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1088:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3957:151:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;704:33:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4974:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1123:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2003:201:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;743:24:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6250:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2088:100:1;2142:13;2175:5;2168:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2088:100;:::o;4255:169::-;4338:4;4355:39;4364:12;:10;:12::i;:::-;4378:7;4387:6;4355:8;:39::i;:::-;4412:4;4405:11;;4255:169;;;;:::o;1020:27:8:-;;;;:::o;1296:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;3208:108:1:-;3269:7;3296:12;;3289:19;;3208:108;:::o;3935:270:8:-;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4071:4:8::1;4063;4057:2;4041:13;:11;:13::i;:::-;:18;;;;:::i;:::-;4040:27;;;;:::i;:::-;4039:36;;;;:::i;:::-;4029:6;:46;;4008:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;4191:6;4181;:17;;;;:::i;:::-;4158:20;:40;;;;3935:270:::0;:::o;5948:166::-;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6060:12:8::1;;;;;;;;;;;6029:44;;6049:9;6029:44;;;;;;;;;;;;6098:9;6083:12;;:24;;;;;;;;;;;;;;;;;;5948:166:::0;:::o;4906:492:1:-;5046:4;5063:36;5073:6;5081:9;5092:6;5063:9;:36::i;:::-;5112:24;5139:11;:19;5151:6;5139:19;;;;;;;;;;;;;;;:33;5159:12;:10;:12::i;:::-;5139:33;;;;;;;;;;;;;;;;5112:60;;5211:6;5191:16;:26;;5183:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5298:57;5307:6;5315:12;:10;:12::i;:::-;5348:6;5329:16;:25;5298:8;:57::i;:::-;5386:4;5379:11;;;4906:492;;;;;:::o;3050:93::-;3108:5;3133:2;3126:9;;3050:93;:::o;5807:215::-;5895:4;5912:80;5921:12;:10;:12::i;:::-;5935:7;5981:10;5944:11;:25;5956:12;:10;:12::i;:::-;5944:25;;;;;;;;;;;;;;;:34;5970:7;5944:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5912:8;:80::i;:::-;6010:4;6003:11;;5807:215;;;;:::o;566:28:8:-;;;;;;;;;;;;;:::o;774:33::-;;;;;;;;;;;;;:::o;6120:124::-;6186:4;6209:19;:28;6229:7;6209:28;;;;;;;;;;;;;;;;;;;;;;;;;6202:35;;6120:124;;;:::o;12309:163::-;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12376:12:8::1;12394:6;:11;;12413:21;12394:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12375:64;;;12457:7;12449:16;;;::::0;::::1;;12365:107;12309:163:::0;:::o;1054:28::-;;;;:::o;852:31::-;;;;;;;;;;;;;:::o;3379:127:1:-;3453:7;3480:9;:18;3490:7;3480:18;;;;;;;;;;;;;;;;3473:25;;3379:127;;;:::o;1745:103:6:-;1325:12;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1810:30:::1;1837:1;1810:18;:30::i;:::-;1745:103::o:0;4827:141:8:-;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4914:10:8::1;4899:12;:25;;;;4949:12;;4934;:27;;;;4827:141:::0;:::o;511:49::-;;;:::o;3561:118::-;3613:4;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3646:5:8::1;3629:14;;:22;;;;;;;;;;;;;;;;;;3668:4;3661:11;;3561:118:::0;:::o;4468:162::-;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4619:4:8::1;4577:31;:39;4609:6;4577:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;4468:162:::0;;:::o;11763:248::-;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11818:15:8::1;11851:4;11836:31;;;11876:4;11836:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11818:64;;11907:4;11892:30;;;11923:10;11935:7;11892:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11961:10;11953:28;;:51;11982:21;11953:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;11808:203;11763:248::o:0;12017:286::-;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12131:1:8::1;12113:20;;:6;:20;;::::0;12105:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12174:24;12208:6;12201:24;;;12234:4;12201:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12174:66;;12257:6;12250:23;;;12274:3;12279:16;12250:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12095:208;12017:286:::0;;:::o;3325:187::-;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3401:13:8::1;;;;;;;;;;;3400:14;3379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3473:4;3457:13;;:20;;;;;;;;;;;;;;;;;;3501:4;3487:11;;:18;;;;;;;;;;;;;;;;;;3325:187::o:0;1094:87:6:-;1140:7;1167:6;;;;;;;;;;;1160:13;;1094:87;:::o;4723:98:8:-;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4807:7:8::1;4793:11;;:21;;;;;;;;;;;;;;;;;;4723:98:::0;:::o;5125:142::-;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5211:10:8::1;5195:13;:26;;;;5247:13;;5231;:29;;;;5125:142:::0;:::o;2307:104:1:-;2363:13;2396:7;2389:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2307:104;:::o;629:27:8:-;;;;;;;;;;;;;:::o;5458:294::-;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5597:13:8::1;;;;;;;;;;;5589:21;;:4;:21;;::::0;5568:125:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5704:41;5733:4;5739:5;5704:28;:41::i;:::-;5458:294:::0;;:::o;6525:413:1:-;6618:4;6635:24;6662:11;:25;6674:12;:10;:12::i;:::-;6662:25;;;;;;;;;;;;;;;:34;6688:7;6662:34;;;;;;;;;;;;;;;;6635:61;;6735:15;6715:16;:35;;6707:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6828:67;6837:12;:10;:12::i;:::-;6851:7;6879:15;6860:16;:34;6828:8;:67::i;:::-;6926:4;6919:11;;;6525:413;;;;:::o;3719:175::-;3805:4;3822:42;3832:12;:10;:12::i;:::-;3846:9;3857:6;3822:9;:42::i;:::-;3882:4;3875:11;;3719:175;;;;:::o;1513:57:8:-;;;;;;;;;;;;;;;;;;;;;;:::o;813:33::-;;;;;;;;;;;;;:::o;5273:179::-;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5388:8:8::1;5357:19;:28;5377:7;5357:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;5427:7;5411:34;;;5436:8;5411:34;;;;;;:::i;:::-;;;;;;;;5273:179:::0;;:::o;4211:251::-;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4350:4:8::1;4342;4336:2;4320:13;:11;:13::i;:::-;:18;;;;:::i;:::-;4319:27;;;;:::i;:::-;4318:36;;;;:::i;:::-;4308:6;:46;;4287:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;4448:6;4438;:17;;;;:::i;:::-;4426:9;:29;;;;4211:251:::0;:::o;663:35::-;;;;:::o;3746:183::-;3851:4;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3892:9:8::1;3871:18;:30;;;;3918:4;3911:11;;3746:183:::0;;;:::o;987:27::-;;;;:::o;1088:28::-;;;;:::o;3957:151:1:-;4046:7;4073:11;:18;4085:5;4073:18;;;;;;;;;;;;;;;:27;4092:7;4073:27;;;;;;;;;;;;;;;;4066:34;;3957:151;;;;:::o;704:33:8:-;;;;:::o;4974:145::-;1325:12:6;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5063:10:8::1;5047:13;:26;;;;5099:13;;5083;:29;;;;4974:145:::0;:::o;1123:30::-;;;;:::o;2003:201:6:-;1325:12;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2112:1:::1;2092:22;;:8;:22;;::::0;2084:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2168:28;2187:8;2168:18;:28::i;:::-;2003:201:::0;:::o;743:24:8:-;;;;:::o;6250:111::-;6311:4;6334:11;:20;6346:7;6334:20;;;;;;;;;;;;;;;;;;;;;;;;;6327:27;;6250:111;;;:::o;672:98:0:-;725:7;752:10;745:17;;672:98;:::o;10209:380:1:-;10362:1;10345:19;;:5;:19;;;10337:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10443:1;10424:21;;:7;:21;;;10416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10527:6;10497:11;:18;10509:5;10497:18;;;;;;;;;;;;;;;:27;10516:7;10497:27;;;;;;;;;;;;;;;:36;;;;10565:7;10549:32;;10558:5;10549:32;;;10574:6;10549:32;;;;;;:::i;:::-;;;;;;;;10209:380;;;:::o;6367:3581:8:-;6510:1;6494:18;;:4;:18;;;6486:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6586:1;6572:16;;:2;:16;;;6564:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;6647:11;:17;6659:4;6647:17;;;;;;;;;;;;;;;;;;;;;;;;;6646:18;6638:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;6706:11;:15;6718:2;6706:15;;;;;;;;;;;;;;;;;;;;;;;;;6705:16;6697:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;6771:1;6761:6;:11;6757:90;;6788:28;6804:4;6810:2;6814:1;6788:15;:28::i;:::-;6830:7;;6757:90;6861:14;;;;;;;;;;;6857:1608;;;6920:7;:5;:7::i;:::-;6912:15;;:4;:15;;;;:48;;;;;6953:7;:5;:7::i;:::-;6947:13;;:2;:13;;;;6912:48;:84;;;;;6994:1;6980:16;;:2;:16;;;;6912:84;:113;;;;;7017:8;;;;;;;;;;;7016:9;6912:113;6891:1564;;;7063:13;;;;;;;;;;;7058:218;;7133:19;:25;7153:4;7133:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;7162:19;:23;7182:2;7162:23;;;;;;;;;;;;;;;;;;;;;;;;;7133:52;7100:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;7058:218;7346:25;:31;7372:4;7346:31;;;;;;;;;;;;;;;;;;;;;;;;;:91;;;;;7402:31;:35;7434:2;7402:35;;;;;;;;;;;;;;;;;;;;;;;;;7401:36;7346:91;7321:1120;;;7521:20;;7511:6;:30;;7478:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;7725:9;;7708:13;7718:2;7708:9;:13::i;:::-;7699:6;:22;;;;:::i;:::-;:35;;7666:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;7321:1120;;;7897:25;:29;7923:2;7897:29;;;;;;;;;;;;;;;;;;;;;;;;;:91;;;;;7951:31;:37;7983:4;7951:37;;;;;;;;;;;;;;;;;;;;;;;;;7950:38;7897:91;7872:569;;;8072:20;;8062:6;:30;;8029:167;;;;;;;;;;;;:::i;:::-;;;;;;;;;7872:569;;;8226:31;:35;8258:2;8226:35;;;;;;;;;;;;;;;;;;;;;;;;;8221:220;;8344:9;;8327:13;8337:2;8327:9;:13::i;:::-;8318:6;:22;;;;:::i;:::-;:35;;8285:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;8221:220;7872:569;7321:1120;6891:1564;6857:1608;8475:28;8506:24;8524:4;8506:9;:24::i;:::-;8475:55;;8541:12;8580:18;;8556:20;:42;;8541:57;;8626:7;:34;;;;;8649:11;;;;;;;;;;;8626:34;:59;;;;;8677:8;;;;;;;;;;;8676:9;8626:59;:107;;;;;8702:25;:31;8728:4;8702:31;;;;;;;;;;;;;;;;;;;;;;;;;8701:32;8626:107;:149;;;;;8750:19;:25;8770:4;8750:25;;;;;;;;;;;;;;;;;;;;;;;;;8749:26;8626:149;:189;;;;;8792:19;:23;8812:2;8792:23;;;;;;;;;;;;;;;;;;;;;;;;;8791:24;8626:189;8609:313;;;8851:4;8840:8;;:15;;;;;;;;;;;;;;;;;;8870:10;:8;:10::i;:::-;8906:5;8895:8;;:16;;;;;;;;;;;;;;;;;;8609:313;8932:12;8948:8;;;;;;;;;;;8947:9;8932:24;;9055:19;:25;9075:4;9055:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;9084:19;:23;9104:2;9084:23;;;;;;;;;;;;;;;;;;;;;;;;;9055:52;9051:98;;;9133:5;9123:15;;9051:98;9159:12;9262:7;9258:640;;;9312:25;:29;9338:2;9312:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;9361:1;9345:13;;:17;9312:50;9308:448;;;9389:34;9419:3;9389:25;9400:13;;9389:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;9382:41;;9485:13;;9468;;9461:4;:20;;;;:::i;:::-;9460:38;;;;:::i;:::-;9441:15;;:57;;;;;;;:::i;:::-;;;;;;;;9308:448;;;9557:25;:31;9583:4;9557:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;9607:1;9592:12;;:16;9557:51;9553:203;;;9635:33;9664:3;9635:24;9646:12;;9635:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;9628:40;;9729:12;;9713;;9706:4;:19;;;;:::i;:::-;9705:36;;;;:::i;:::-;9686:15;;:55;;;;;;;:::i;:::-;;;;;;;;9553:203;9308:448;9781:1;9774:4;:8;9770:89;;;9802:42;9818:4;9832;9839;9802:15;:42::i;:::-;9770:89;9883:4;9873:14;;;;;:::i;:::-;;;9258:640;9908:33;9924:4;9930:2;9934:6;9908:15;:33::i;:::-;6476:3472;;;;6367:3581;;;;:::o;2364:191:6:-;2438:16;2457:6;;;;;;;;;;;2438:25;;2483:8;2474:6;;:17;;;;;;;;;;;;;;;;;;2538:8;2507:40;;2528:8;2507:40;;;;;;;;;;;;2427:128;2364:191;:::o;5758:184:8:-;5874:5;5840:25;:31;5866:4;5840:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;5929:5;5895:40;;5923:4;5895:40;;;;;;;;;;;;5758:184;;:::o;7428:733:1:-;7586:1;7568:20;;:6;:20;;;7560:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7670:1;7649:23;;:9;:23;;;7641:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7725:47;7746:6;7754:9;7765:6;7725:20;:47::i;:::-;7785:21;7809:9;:17;7819:6;7809:17;;;;;;;;;;;;;;;;7785:41;;7862:6;7845:13;:23;;7837:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7983:6;7967:13;:22;7947:9;:17;7957:6;7947:17;;;;;;;;;;;;;;;:42;;;;8035:6;8011:9;:20;8021:9;8011:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8076:9;8059:35;;8068:6;8059:35;;;8087:6;8059:35;;;;;;:::i;:::-;;;;;;;;8107:46;8127:6;8135:9;8146:6;8107:19;:46::i;:::-;7549:612;7428:733;;;:::o;11029:728:8:-;11067:23;11093:24;11111:4;11093:9;:24::i;:::-;11067:50;;11127:25;11155:15;;11127:43;;11180:12;11226:1;11207:15;:20;:46;;;;11252:1;11231:17;:22;11207:46;11203:83;;;11269:7;;;;;11203:83;11339:2;11318:18;;:23;;;;:::i;:::-;11300:15;:41;11296:113;;;11396:2;11375:18;;:23;;;;:::i;:::-;11357:41;;11296:113;11419:26;11448:15;11419:44;;11474:25;11502:21;11474:49;;11534:36;11551:18;11534:16;:36::i;:::-;11581:18;11602:44;11628:17;11602:21;:25;;:44;;;;:::i;:::-;11581:65;;11675:1;11657:15;:19;;;;11709:12;;;;;;;;;;;11701:26;;11735:10;11701:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11687:63;;;;;11057:700;;;;;;11029:728;:::o;3320:98:7:-;3378:7;3409:1;3405;:5;;;;:::i;:::-;3398:12;;3320:98;;;;:::o;3719:::-;3777:7;3808:1;3804;:5;;;;:::i;:::-;3797:12;;3719:98;;;;:::o;11189:125:1:-;;;;:::o;11918:124::-;;;;:::o;9954:567:8:-;10078:21;10116:1;10102:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10078:40;;10146:4;10128;10133:1;10128:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;10171:13;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10161:4;10166:1;10161:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;10202:60;10219:4;10234:13;10250:11;10202:8;:60::i;:::-;10298:13;:64;;;10376:11;10401:1;10444:4;10470;10489:15;10298:216;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10009:512;9954:567;:::o;2963:98:7:-;3021:7;3052:1;3048;:5;;;;:::i;:::-;3041:12;;2963:98;;;;:::o;7:99:9:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:329::-;3750:6;3799:2;3787:9;3778:7;3774:23;3770:32;3767:119;;;3805:79;;:::i;:::-;3767:119;3925:1;3950:53;3995:7;3986:6;3975:9;3971:22;3950:53;:::i;:::-;3940:63;;3896:117;3691:329;;;;:::o;4026:::-;4085:6;4134:2;4122:9;4113:7;4109:23;4105:32;4102:119;;;4140:79;;:::i;:::-;4102:119;4260:1;4285:53;4330:7;4321:6;4310:9;4306:22;4285:53;:::i;:::-;4275:63;;4231:117;4026:329;;;;:::o;4361:619::-;4438:6;4446;4454;4503:2;4491:9;4482:7;4478:23;4474:32;4471:119;;;4509:79;;:::i;:::-;4471:119;4629:1;4654:53;4699:7;4690:6;4679:9;4675:22;4654:53;:::i;:::-;4644:63;;4600:117;4756:2;4782:53;4827:7;4818:6;4807:9;4803:22;4782:53;:::i;:::-;4772:63;;4727:118;4884:2;4910:53;4955:7;4946:6;4935:9;4931:22;4910:53;:::i;:::-;4900:63;;4855:118;4361:619;;;;;:::o;4986:86::-;5021:7;5061:4;5054:5;5050:16;5039:27;;4986:86;;;:::o;5078:112::-;5161:22;5177:5;5161:22;:::i;:::-;5156:3;5149:35;5078:112;;:::o;5196:214::-;5285:4;5323:2;5312:9;5308:18;5300:26;;5336:67;5400:1;5389:9;5385:17;5376:6;5336:67;:::i;:::-;5196:214;;;;:::o;5416:118::-;5503:24;5521:5;5503:24;:::i;:::-;5498:3;5491:37;5416:118;;:::o;5540:222::-;5633:4;5671:2;5660:9;5656:18;5648:26;;5684:71;5752:1;5741:9;5737:17;5728:6;5684:71;:::i;:::-;5540:222;;;;:::o;5768:60::-;5796:3;5817:5;5810:12;;5768:60;;;:::o;5834:142::-;5884:9;5917:53;5935:34;5944:24;5962:5;5944:24;:::i;:::-;5935:34;:::i;:::-;5917:53;:::i;:::-;5904:66;;5834:142;;;:::o;5982:126::-;6032:9;6065:37;6096:5;6065:37;:::i;:::-;6052:50;;5982:126;;;:::o;6114:152::-;6190:9;6223:37;6254:5;6223:37;:::i;:::-;6210:50;;6114:152;;;:::o;6272:183::-;6385:63;6442:5;6385:63;:::i;:::-;6380:3;6373:76;6272:183;;:::o;6461:274::-;6580:4;6618:2;6607:9;6603:18;6595:26;;6631:97;6725:1;6714:9;6710:17;6701:6;6631:97;:::i;:::-;6461:274;;;;:::o;6741:116::-;6811:21;6826:5;6811:21;:::i;:::-;6804:5;6801:32;6791:60;;6847:1;6844;6837:12;6791:60;6741:116;:::o;6863:133::-;6906:5;6944:6;6931:20;6922:29;;6960:30;6984:5;6960:30;:::i;:::-;6863:133;;;;:::o;7002:468::-;7067:6;7075;7124:2;7112:9;7103:7;7099:23;7095:32;7092:119;;;7130:79;;:::i;:::-;7092:119;7250:1;7275:53;7320:7;7311:6;7300:9;7296:22;7275:53;:::i;:::-;7265:63;;7221:117;7377:2;7403:50;7445:7;7436:6;7425:9;7421:22;7403:50;:::i;:::-;7393:60;;7348:115;7002:468;;;;;:::o;7476:474::-;7544:6;7552;7601:2;7589:9;7580:7;7576:23;7572:32;7569:119;;;7607:79;;:::i;:::-;7569:119;7727:1;7752:53;7797:7;7788:6;7777:9;7773:22;7752:53;:::i;:::-;7742:63;;7698:117;7854:2;7880:53;7925:7;7916:6;7905:9;7901:22;7880:53;:::i;:::-;7870:63;;7825:118;7476:474;;;;;:::o;7956:323::-;8012:6;8061:2;8049:9;8040:7;8036:23;8032:32;8029:119;;;8067:79;;:::i;:::-;8029:119;8187:1;8212:50;8254:7;8245:6;8234:9;8230:22;8212:50;:::i;:::-;8202:60;;8158:114;7956:323;;;;:::o;8285:180::-;8333:77;8330:1;8323:88;8430:4;8427:1;8420:15;8454:4;8451:1;8444:15;8471:320;8515:6;8552:1;8546:4;8542:12;8532:22;;8599:1;8593:4;8589:12;8620:18;8610:81;;8676:4;8668:6;8664:17;8654:27;;8610:81;8738:2;8730:6;8727:14;8707:18;8704:38;8701:84;;8757:18;;:::i;:::-;8701:84;8522:269;8471:320;;;:::o;8797:182::-;8937:34;8933:1;8925:6;8921:14;8914:58;8797:182;:::o;8985:366::-;9127:3;9148:67;9212:2;9207:3;9148:67;:::i;:::-;9141:74;;9224:93;9313:3;9224:93;:::i;:::-;9342:2;9337:3;9333:12;9326:19;;8985:366;;;:::o;9357:419::-;9523:4;9561:2;9550:9;9546:18;9538:26;;9610:9;9604:4;9600:20;9596:1;9585:9;9581:17;9574:47;9638:131;9764:4;9638:131;:::i;:::-;9630:139;;9357:419;;;:::o;9782:180::-;9830:77;9827:1;9820:88;9927:4;9924:1;9917:15;9951:4;9948:1;9941:15;9968:410;10008:7;10031:20;10049:1;10031:20;:::i;:::-;10026:25;;10065:20;10083:1;10065:20;:::i;:::-;10060:25;;10120:1;10117;10113:9;10142:30;10160:11;10142:30;:::i;:::-;10131:41;;10321:1;10312:7;10308:15;10305:1;10302:22;10282:1;10275:9;10255:83;10232:139;;10351:18;;:::i;:::-;10232:139;10016:362;9968:410;;;;:::o;10384:180::-;10432:77;10429:1;10422:88;10529:4;10526:1;10519:15;10553:4;10550:1;10543:15;10570:185;10610:1;10627:20;10645:1;10627:20;:::i;:::-;10622:25;;10661:20;10679:1;10661:20;:::i;:::-;10656:25;;10700:1;10690:35;;10705:18;;:::i;:::-;10690:35;10747:1;10744;10740:9;10735:14;;10570:185;;;;:::o;10761:234::-;10901:34;10897:1;10889:6;10885:14;10878:58;10970:17;10965:2;10957:6;10953:15;10946:42;10761:234;:::o;11001:366::-;11143:3;11164:67;11228:2;11223:3;11164:67;:::i;:::-;11157:74;;11240:93;11329:3;11240:93;:::i;:::-;11358:2;11353:3;11349:12;11342:19;;11001:366;;;:::o;11373:419::-;11539:4;11577:2;11566:9;11562:18;11554:26;;11626:9;11620:4;11616:20;11612:1;11601:9;11597:17;11590:47;11654:131;11780:4;11654:131;:::i;:::-;11646:139;;11373:419;;;:::o;11798:227::-;11938:34;11934:1;11926:6;11922:14;11915:58;12007:10;12002:2;11994:6;11990:15;11983:35;11798:227;:::o;12031:366::-;12173:3;12194:67;12258:2;12253:3;12194:67;:::i;:::-;12187:74;;12270:93;12359:3;12270:93;:::i;:::-;12388:2;12383:3;12379:12;12372:19;;12031:366;;;:::o;12403:419::-;12569:4;12607:2;12596:9;12592:18;12584:26;;12656:9;12650:4;12646:20;12642:1;12631:9;12627:17;12620:47;12684:131;12810:4;12684:131;:::i;:::-;12676:139;;12403:419;;;:::o;12828:191::-;12868:3;12887:20;12905:1;12887:20;:::i;:::-;12882:25;;12921:20;12939:1;12921:20;:::i;:::-;12916:25;;12964:1;12961;12957:9;12950:16;;12985:3;12982:1;12979:10;12976:36;;;12992:18;;:::i;:::-;12976:36;12828:191;;;;:::o;13025:147::-;13126:11;13163:3;13148:18;;13025:147;;;;:::o;13178:114::-;;:::o;13298:398::-;13457:3;13478:83;13559:1;13554:3;13478:83;:::i;:::-;13471:90;;13570:93;13659:3;13570:93;:::i;:::-;13688:1;13683:3;13679:11;13672:18;;13298:398;;;:::o;13702:379::-;13886:3;13908:147;14051:3;13908:147;:::i;:::-;13901:154;;14072:3;14065:10;;13702:379;;;:::o;14087:143::-;14144:5;14175:6;14169:13;14160:22;;14191:33;14218:5;14191:33;:::i;:::-;14087:143;;;;:::o;14236:351::-;14306:6;14355:2;14343:9;14334:7;14330:23;14326:32;14323:119;;;14361:79;;:::i;:::-;14323:119;14481:1;14506:64;14562:7;14553:6;14542:9;14538:22;14506:64;:::i;:::-;14496:74;;14452:128;14236:351;;;;:::o;14593:332::-;14714:4;14752:2;14741:9;14737:18;14729:26;;14765:71;14833:1;14822:9;14818:17;14809:6;14765:71;:::i;:::-;14846:72;14914:2;14903:9;14899:18;14890:6;14846:72;:::i;:::-;14593:332;;;;;:::o;14931:137::-;14985:5;15016:6;15010:13;15001:22;;15032:30;15056:5;15032:30;:::i;:::-;14931:137;;;;:::o;15074:345::-;15141:6;15190:2;15178:9;15169:7;15165:23;15161:32;15158:119;;;15196:79;;:::i;:::-;15158:119;15316:1;15341:61;15394:7;15385:6;15374:9;15370:22;15341:61;:::i;:::-;15331:71;;15287:125;15074:345;;;;:::o;15425:176::-;15565:28;15561:1;15553:6;15549:14;15542:52;15425:176;:::o;15607:366::-;15749:3;15770:67;15834:2;15829:3;15770:67;:::i;:::-;15763:74;;15846:93;15935:3;15846:93;:::i;:::-;15964:2;15959:3;15955:12;15948:19;;15607:366;;;:::o;15979:419::-;16145:4;16183:2;16172:9;16168:18;16160:26;;16232:9;16226:4;16222:20;16218:1;16207:9;16203:17;16196:47;16260:131;16386:4;16260:131;:::i;:::-;16252:139;;15979:419;;;:::o;16404:157::-;16544:9;16540:1;16532:6;16528:14;16521:33;16404:157;:::o;16567:365::-;16709:3;16730:66;16794:1;16789:3;16730:66;:::i;:::-;16723:73;;16805:93;16894:3;16805:93;:::i;:::-;16923:2;16918:3;16914:12;16907:19;;16567:365;;;:::o;16938:419::-;17104:4;17142:2;17131:9;17127:18;17119:26;;17191:9;17185:4;17181:20;17177:1;17166:9;17162:17;17155:47;17219:131;17345:4;17219:131;:::i;:::-;17211:139;;16938:419;;;:::o;17363:244::-;17503:34;17499:1;17491:6;17487:14;17480:58;17572:27;17567:2;17559:6;17555:15;17548:52;17363:244;:::o;17613:366::-;17755:3;17776:67;17840:2;17835:3;17776:67;:::i;:::-;17769:74;;17852:93;17941:3;17852:93;:::i;:::-;17970:2;17965:3;17961:12;17954:19;;17613:366;;;:::o;17985:419::-;18151:4;18189:2;18178:9;18174:18;18166:26;;18238:9;18232:4;18228:20;18224:1;18213:9;18209:17;18202:47;18266:131;18392:4;18266:131;:::i;:::-;18258:139;;17985:419;;;:::o;18410:224::-;18550:34;18546:1;18538:6;18534:14;18527:58;18619:7;18614:2;18606:6;18602:15;18595:32;18410:224;:::o;18640:366::-;18782:3;18803:67;18867:2;18862:3;18803:67;:::i;:::-;18796:74;;18879:93;18968:3;18879:93;:::i;:::-;18997:2;18992:3;18988:12;18981:19;;18640:366;;;:::o;19012:419::-;19178:4;19216:2;19205:9;19201:18;19193:26;;19265:9;19259:4;19255:20;19251:1;19240:9;19236:17;19229:47;19293:131;19419:4;19293:131;:::i;:::-;19285:139;;19012:419;;;:::o;19437:223::-;19577:34;19573:1;19565:6;19561:14;19554:58;19646:6;19641:2;19633:6;19629:15;19622:31;19437:223;:::o;19666:366::-;19808:3;19829:67;19893:2;19888:3;19829:67;:::i;:::-;19822:74;;19905:93;19994:3;19905:93;:::i;:::-;20023:2;20018:3;20014:12;20007:19;;19666:366;;;:::o;20038:419::-;20204:4;20242:2;20231:9;20227:18;20219:26;;20291:9;20285:4;20281:20;20277:1;20266:9;20262:17;20255:47;20319:131;20445:4;20319:131;:::i;:::-;20311:139;;20038:419;;;:::o;20463:225::-;20603:34;20599:1;20591:6;20587:14;20580:58;20672:8;20667:2;20659:6;20655:15;20648:33;20463:225;:::o;20694:366::-;20836:3;20857:67;20921:2;20916:3;20857:67;:::i;:::-;20850:74;;20933:93;21022:3;20933:93;:::i;:::-;21051:2;21046:3;21042:12;21035:19;;20694:366;;;:::o;21066:419::-;21232:4;21270:2;21259:9;21255:18;21247:26;;21319:9;21313:4;21309:20;21305:1;21294:9;21290:17;21283:47;21347:131;21473:4;21347:131;:::i;:::-;21339:139;;21066:419;;;:::o;21491:223::-;21631:34;21627:1;21619:6;21615:14;21608:58;21700:6;21695:2;21687:6;21683:15;21676:31;21491:223;:::o;21720:366::-;21862:3;21883:67;21947:2;21942:3;21883:67;:::i;:::-;21876:74;;21959:93;22048:3;21959:93;:::i;:::-;22077:2;22072:3;22068:12;22061:19;;21720:366;;;:::o;22092:419::-;22258:4;22296:2;22285:9;22281:18;22273:26;;22345:9;22339:4;22335:20;22331:1;22320:9;22316:17;22309:47;22373:131;22499:4;22373:131;:::i;:::-;22365:139;;22092:419;;;:::o;22517:221::-;22657:34;22653:1;22645:6;22641:14;22634:58;22726:4;22721:2;22713:6;22709:15;22702:29;22517:221;:::o;22744:366::-;22886:3;22907:67;22971:2;22966:3;22907:67;:::i;:::-;22900:74;;22983:93;23072:3;22983:93;:::i;:::-;23101:2;23096:3;23092:12;23085:19;;22744:366;;;:::o;23116:419::-;23282:4;23320:2;23309:9;23305:18;23297:26;;23369:9;23363:4;23359:20;23355:1;23344:9;23340:17;23333:47;23397:131;23523:4;23397:131;:::i;:::-;23389:139;;23116:419;;;:::o;23541:224::-;23681:34;23677:1;23669:6;23665:14;23658:58;23750:7;23745:2;23737:6;23733:15;23726:32;23541:224;:::o;23771:366::-;23913:3;23934:67;23998:2;23993:3;23934:67;:::i;:::-;23927:74;;24010:93;24099:3;24010:93;:::i;:::-;24128:2;24123:3;24119:12;24112:19;;23771:366;;;:::o;24143:419::-;24309:4;24347:2;24336:9;24332:18;24324:26;;24396:9;24390:4;24386:20;24382:1;24371:9;24367:17;24360:47;24424:131;24550:4;24424:131;:::i;:::-;24416:139;;24143:419;;;:::o;24568:222::-;24708:34;24704:1;24696:6;24692:14;24685:58;24777:5;24772:2;24764:6;24760:15;24753:30;24568:222;:::o;24796:366::-;24938:3;24959:67;25023:2;25018:3;24959:67;:::i;:::-;24952:74;;25035:93;25124:3;25035:93;:::i;:::-;25153:2;25148:3;25144:12;25137:19;;24796:366;;;:::o;25168:419::-;25334:4;25372:2;25361:9;25357:18;25349:26;;25421:9;25415:4;25411:20;25407:1;25396:9;25392:17;25385:47;25449:131;25575:4;25449:131;:::i;:::-;25441:139;;25168:419;;;:::o;25593:168::-;25733:20;25729:1;25721:6;25717:14;25710:44;25593:168;:::o;25767:366::-;25909:3;25930:67;25994:2;25989:3;25930:67;:::i;:::-;25923:74;;26006:93;26095:3;26006:93;:::i;:::-;26124:2;26119:3;26115:12;26108:19;;25767:366;;;:::o;26139:419::-;26305:4;26343:2;26332:9;26328:18;26320:26;;26392:9;26386:4;26382:20;26378:1;26367:9;26363:17;26356:47;26420:131;26546:4;26420:131;:::i;:::-;26412:139;;26139:419;;;:::o;26564:170::-;26704:22;26700:1;26692:6;26688:14;26681:46;26564:170;:::o;26740:366::-;26882:3;26903:67;26967:2;26962:3;26903:67;:::i;:::-;26896:74;;26979:93;27068:3;26979:93;:::i;:::-;27097:2;27092:3;27088:12;27081:19;;26740:366;;;:::o;27112:419::-;27278:4;27316:2;27305:9;27301:18;27293:26;;27365:9;27359:4;27355:20;27351:1;27340:9;27336:17;27329:47;27393:131;27519:4;27393:131;:::i;:::-;27385:139;;27112:419;;;:::o;27537:172::-;27677:24;27673:1;27665:6;27661:14;27654:48;27537:172;:::o;27715:366::-;27857:3;27878:67;27942:2;27937:3;27878:67;:::i;:::-;27871:74;;27954:93;28043:3;27954:93;:::i;:::-;28072:2;28067:3;28063:12;28056:19;;27715:366;;;:::o;28087:419::-;28253:4;28291:2;28280:9;28276:18;28268:26;;28340:9;28334:4;28330:20;28326:1;28315:9;28311:17;28304:47;28368:131;28494:4;28368:131;:::i;:::-;28360:139;;28087:419;;;:::o;28512:240::-;28652:34;28648:1;28640:6;28636:14;28629:58;28721:23;28716:2;28708:6;28704:15;28697:48;28512:240;:::o;28758:366::-;28900:3;28921:67;28985:2;28980:3;28921:67;:::i;:::-;28914:74;;28997:93;29086:3;28997:93;:::i;:::-;29115:2;29110:3;29106:12;29099:19;;28758:366;;;:::o;29130:419::-;29296:4;29334:2;29323:9;29319:18;29311:26;;29383:9;29377:4;29373:20;29369:1;29358:9;29354:17;29347:47;29411:131;29537:4;29411:131;:::i;:::-;29403:139;;29130:419;;;:::o;29555:169::-;29695:21;29691:1;29683:6;29679:14;29672:45;29555:169;:::o;29730:366::-;29872:3;29893:67;29957:2;29952:3;29893:67;:::i;:::-;29886:74;;29969:93;30058:3;29969:93;:::i;:::-;30087:2;30082:3;30078:12;30071:19;;29730:366;;;:::o;30102:419::-;30268:4;30306:2;30295:9;30291:18;30283:26;;30355:9;30349:4;30345:20;30341:1;30330:9;30326:17;30319:47;30383:131;30509:4;30383:131;:::i;:::-;30375:139;;30102:419;;;:::o;30527:241::-;30667:34;30663:1;30655:6;30651:14;30644:58;30736:24;30731:2;30723:6;30719:15;30712:49;30527:241;:::o;30774:366::-;30916:3;30937:67;31001:2;30996:3;30937:67;:::i;:::-;30930:74;;31013:93;31102:3;31013:93;:::i;:::-;31131:2;31126:3;31122:12;31115:19;;30774:366;;;:::o;31146:419::-;31312:4;31350:2;31339:9;31335:18;31327:26;;31399:9;31393:4;31389:20;31385:1;31374:9;31370:17;31363:47;31427:131;31553:4;31427:131;:::i;:::-;31419:139;;31146:419;;;:::o;31571:194::-;31611:4;31631:20;31649:1;31631:20;:::i;:::-;31626:25;;31665:20;31683:1;31665:20;:::i;:::-;31660:25;;31709:1;31706;31702:9;31694:17;;31733:1;31727:4;31724:11;31721:37;;;31738:18;;:::i;:::-;31721:37;31571:194;;;;:::o;31771:225::-;31911:34;31907:1;31899:6;31895:14;31888:58;31980:8;31975:2;31967:6;31963:15;31956:33;31771:225;:::o;32002:366::-;32144:3;32165:67;32229:2;32224:3;32165:67;:::i;:::-;32158:74;;32241:93;32330:3;32241:93;:::i;:::-;32359:2;32354:3;32350:12;32343:19;;32002:366;;;:::o;32374:419::-;32540:4;32578:2;32567:9;32563:18;32555:26;;32627:9;32621:4;32617:20;32613:1;32602:9;32598:17;32591:47;32655:131;32781:4;32655:131;:::i;:::-;32647:139;;32374:419;;;:::o;32799:180::-;32847:77;32844:1;32837:88;32944:4;32941:1;32934:15;32968:4;32965:1;32958:15;32985:180;33033:77;33030:1;33023:88;33130:4;33127:1;33120:15;33154:4;33151:1;33144:15;33171:143;33228:5;33259:6;33253:13;33244:22;;33275:33;33302:5;33275:33;:::i;:::-;33171:143;;;;:::o;33320:351::-;33390:6;33439:2;33427:9;33418:7;33414:23;33410:32;33407:119;;;33445:79;;:::i;:::-;33407:119;33565:1;33590:64;33646:7;33637:6;33626:9;33622:22;33590:64;:::i;:::-;33580:74;;33536:128;33320:351;;;;:::o;33677:85::-;33722:7;33751:5;33740:16;;33677:85;;;:::o;33768:158::-;33826:9;33859:61;33877:42;33886:32;33912:5;33886:32;:::i;:::-;33877:42;:::i;:::-;33859:61;:::i;:::-;33846:74;;33768:158;;;:::o;33932:147::-;34027:45;34066:5;34027:45;:::i;:::-;34022:3;34015:58;33932:147;;:::o;34085:114::-;34152:6;34186:5;34180:12;34170:22;;34085:114;;;:::o;34205:184::-;34304:11;34338:6;34333:3;34326:19;34378:4;34373:3;34369:14;34354:29;;34205:184;;;;:::o;34395:132::-;34462:4;34485:3;34477:11;;34515:4;34510:3;34506:14;34498:22;;34395:132;;;:::o;34533:108::-;34610:24;34628:5;34610:24;:::i;:::-;34605:3;34598:37;34533:108;;:::o;34647:179::-;34716:10;34737:46;34779:3;34771:6;34737:46;:::i;:::-;34815:4;34810:3;34806:14;34792:28;;34647:179;;;;:::o;34832:113::-;34902:4;34934;34929:3;34925:14;34917:22;;34832:113;;;:::o;34981:732::-;35100:3;35129:54;35177:5;35129:54;:::i;:::-;35199:86;35278:6;35273:3;35199:86;:::i;:::-;35192:93;;35309:56;35359:5;35309:56;:::i;:::-;35388:7;35419:1;35404:284;35429:6;35426:1;35423:13;35404:284;;;35505:6;35499:13;35532:63;35591:3;35576:13;35532:63;:::i;:::-;35525:70;;35618:60;35671:6;35618:60;:::i;:::-;35608:70;;35464:224;35451:1;35448;35444:9;35439:14;;35404:284;;;35408:14;35704:3;35697:10;;35105:608;;;34981:732;;;;:::o;35719:831::-;35982:4;36020:3;36009:9;36005:19;35997:27;;36034:71;36102:1;36091:9;36087:17;36078:6;36034:71;:::i;:::-;36115:80;36191:2;36180:9;36176:18;36167:6;36115:80;:::i;:::-;36242:9;36236:4;36232:20;36227:2;36216:9;36212:18;36205:48;36270:108;36373:4;36364:6;36270:108;:::i;:::-;36262:116;;36388:72;36456:2;36445:9;36441:18;36432:6;36388:72;:::i;:::-;36470:73;36538:3;36527:9;36523:19;36514:6;36470:73;:::i;:::-;35719:831;;;;;;;;:::o
Swarm Source
ipfs://12b00b5776b4646f7a61cca448b30388272c81ec12569164ed92fe5ebce8163c
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.