ERC-20
Overview
Max Total Supply
420,690,000,000,000 TRUMP
Holders
57
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000012016951424 TRUMPValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TRUMP
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-06-01 */ /** *Submitted for verification at Etherscan.io on 2024-05-31 */ /* * SPDX-License-Identifier: MIT * 100% to TRUMP */ pragma solidity 0.8.19; library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, uint256 amount ) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the upd 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 upd 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 upd allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IDexFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract TRUMP is ERC20, Ownable { using SafeMath for uint256; IDexRouter private immutable dexRouter; address public immutable dexPair; // Swapback bool private swapping; bool private swapbackEnabled = false; uint256 private swapBackValueMin; uint256 private swapBackValueMax; //Anti-whale bool private limitsEnabled = true; uint256 private maxWallet; uint256 private maxTx; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public tradingEnabled = false; // Fee receivers address private marketingWallet; address private projectWallet; uint256 private buyTaxTotal; uint256 private buyMarketingTax; uint256 private buyProjectTax; uint256 private sellTaxTotal; uint256 private sellMarketingTax; uint256 private sellProjectTax; uint256 private tokensForMarketing; uint256 private tokensForProject; /******************/ // exclude from fees and max transaction amount mapping(address => bool) private transferTaxExempt; mapping(address => bool) private transferLimitExempt; mapping(address => bool) private automatedMarketMakerPairs; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeFromLimits(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event TradingEnabled(uint256 indexed timestamp); event LimitsRemoved(uint256 indexed timestamp); event DisabledTransferDelay(uint256 indexed timestamp); event SwapbackSettingsUpdated( bool enabled, uint256 swapBackValueMin, uint256 swapBackValueMax ); event MaxTxUpdated(uint256 maxTx); event MaxWalletUpdated(uint256 maxWallet); event MarketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event ProjectWalletUpdated( address indexed newWallet, address indexed oldWallet ); event BuyFeeUpdated( uint256 buyTaxTotal, uint256 buyMarketingTax, uint256 buyProjectTax ); event SellFeeUpdated( uint256 sellTaxTotal, uint256 sellMarketingTax, uint256 sellProjectTax ); constructor() ERC20("To Trump", "TRUMP") { IDexRouter _dexRouter = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); limitsExempt(address(_dexRouter), true); dexRouter = _dexRouter; dexPair = IDexFactory(_dexRouter.factory()).createPair( address(this), _dexRouter.WETH() ); limitsExempt(address(dexPair), true); _setAutomatedMarketMakerPair(address(dexPair), true); uint256 _buyMarketingTax = 10; uint256 _buyProjectTax = 0; uint256 _sellMarketingTax = 10; uint256 _sellProjectTax = 0; uint256 _totalSupply = 420_690_000_000_000 * 10 ** decimals(); maxTx = (_totalSupply * 10) / 1000; maxWallet = (_totalSupply * 10) / 1000; swapBackValueMin = (_totalSupply * 1) / 1000; swapBackValueMax = (_totalSupply * 2) / 100; buyMarketingTax = _buyMarketingTax; buyProjectTax = _buyProjectTax; buyTaxTotal = buyMarketingTax + buyProjectTax; sellMarketingTax = _sellMarketingTax; sellProjectTax = _sellProjectTax; sellTaxTotal = sellMarketingTax + sellProjectTax; marketingWallet = address(0x94845333028B1204Fbe14E1278Fd4Adde46B22ce); projectWallet = address(msg.sender); // exclude from paying fees or having max transaction amount feeExempt(msg.sender, true); feeExempt(address(this), true); feeExempt(address(0xdead), true); feeExempt(marketingWallet, true); limitsExempt(msg.sender, true); limitsExempt(address(this), true); limitsExempt(address(0xdead), true); limitsExempt(marketingWallet, true); transferOwnership(msg.sender); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, _totalSupply); } receive() external payable {} /** * @notice Opens public trading for the token * @dev onlyOwner. */ function startTrading() external onlyOwner { tradingEnabled = true; swapbackEnabled = true; emit TradingEnabled(block.timestamp); } /** * @notice Removes the max wallet and max transaction limits * @dev onlyOwner. * Emits an {LimitsRemoved} event */ function disableTradingLimits() external onlyOwner { limitsEnabled = false; emit LimitsRemoved(block.timestamp); } /** * @notice sets if swapback is enabled and sets the minimum and maximum amounts * @dev onlyOwner. * Emits an {SwapbackSettingsUpdated} event * @param _enable If swapback is enabled * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100. * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100. */ function swapbackMinMaxValuesSet( bool _enable, uint256 _min, uint256 _max ) external onlyOwner { require( _min >= 1, "Swap amount cannot be lower than 0.01% total supply." ); require(_max >= _min, "maximum amount cant be higher than minimum"); swapbackEnabled = _enable; swapBackValueMin = (totalSupply() * _min) / 10000; swapBackValueMax = (totalSupply() * _max) / 10000; emit SwapbackSettingsUpdated(_enable, _min, _max); } /** * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction * @dev onlyOwner. * Emits an {MaxTxUpdated} event * @param newMaxTxLimit Base 1000, so 1% = 10 */ function maxTransactionSet(uint256 newMaxTxLimit) external onlyOwner { require(newMaxTxLimit >= 2, "Cannot set maxTx lower than 0.2%"); maxTx = (newMaxTxLimit * totalSupply()) / 1000; emit MaxTxUpdated(maxTx); } /** * @notice Changes the maximum amount of tokens a wallet can hold * @dev onlyOwner. * Emits an {MaxWalletUpdated} event * @param newMaxWalletLimit Base 1000, so 1% = 10 */ function maxWalletSet(uint256 newMaxWalletLimit) external onlyOwner { require(newMaxWalletLimit >= 5, "Cannot set maxWallet lower than 0.5%"); maxWallet = (newMaxWalletLimit * totalSupply()) / 1000; emit MaxWalletUpdated(maxWallet); } /** * @notice Sets if a wallet is excluded from the max wallet and tx limits * @dev onlyOwner. * Emits an {ExcludeFromLimits} event * @param updAds The wallet to update * @param isEx If the wallet is excluded or not */ function limitsExempt( address updAds, bool isEx ) public onlyOwner { transferLimitExempt[updAds] = isEx; emit ExcludeFromLimits(updAds, isEx); } /** * @notice Sets the fees for buys * @dev onlyOwner. * Emits a {BuyFeeUpdated} event * All fees added up must be less than 100 * @param _marketingFee The fee for the marketing wallet * @param _devFee The fee for the dev wallet */ function feesBuySet( uint256 _marketingFee, uint256 _devFee ) external onlyOwner { buyMarketingTax = _marketingFee; buyProjectTax = _devFee; buyTaxTotal = buyMarketingTax + buyProjectTax; require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%"); emit BuyFeeUpdated(buyTaxTotal, buyMarketingTax, buyProjectTax); } /** * @notice Sets the fees for sells * @dev onlyOwner. * Emits a {SellFeeUpdated} event * All fees added up must be less than 100 * @param _marketingFee The fee for the marketing wallet * @param _devFee The fee for the dev wallet */ function feesSellSet( uint256 _marketingFee, uint256 _devFee ) external onlyOwner { sellMarketingTax = _marketingFee; sellProjectTax = _devFee; sellTaxTotal = sellMarketingTax + sellProjectTax; require( sellTaxTotal <= 100, "Total sell fee cannot be higher than 100%" ); emit SellFeeUpdated(sellTaxTotal, sellMarketingTax, sellProjectTax); } /** * @notice Sets if an address is excluded from fees * @dev onlyOwner. * Emits an {ExcludeFromFees} event * @param account The wallet to update * @param excluded If the wallet is excluded or not */ function feeExempt(address account, bool excluded) public onlyOwner { transferTaxExempt[account] = excluded; emit ExcludeFromFees(account, excluded); } /** * @notice Sets an address as a new liquidity pair. You probably dont want to do this. * @dev onlyOwner. * Emits a {SetAutomatedMarketMakerPair} event * @param pair the address of the pair * @param value If the pair is a automated market maker pair or not */ function setAutomatedMarketMakerPair( address pair, bool value ) public onlyOwner { require( pair != dexPair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } /** * @notice Sets the marketing wallet * @dev onlyOwner. * Emits an {MarketingWalletUpdated} event * @param newWallet The new marketing wallet */ function marketingWalletSet(address newWallet) external onlyOwner { emit MarketingWalletUpdated(newWallet, marketingWallet); marketingWallet = newWallet; } /** * @notice Sets the project wallet * @dev onlyOwner. * Emits an {ProjectWalletUpdated} event * @param newWallet The new dev wallet */ function projectWalletSet(address newWallet) external onlyOwner { emit ProjectWalletUpdated(newWallet, projectWallet); projectWallet = newWallet; } /** * @notice Information about the swapback settings * @return _swapbackEnabled if swapback is enabled * @return _swapBackValueMin the minimum amount of tokens in the contract balance to trigger swapback * @return _swapBackValueMax the maximum amount of tokens in the contract balance to trigger swapback */ function swapbackInf() external view returns ( bool _swapbackEnabled, uint256 _swapBackValueMin, uint256 _swapBackValueMax ) { _swapbackEnabled = swapbackEnabled; _swapBackValueMin = swapBackValueMin; _swapBackValueMax = swapBackValueMax; } /** * @notice Information about the anti whale parameters * @return _limitsEnabled if the wallet limits are in effect * @return _maxWallet The maximum amount of tokens that can be held by a wallet * @return _maxTx The maximum amount of tokens that can be bought or sold in a single transaction */ function transactionWalletLimits() external view returns ( bool _limitsEnabled, uint256 _maxWallet, uint256 _maxTx ) { _limitsEnabled = limitsEnabled; _maxWallet = maxWallet; _maxTx = maxTx; } /** * @notice The wallets that receive the collected fees * @return _marketingWallet The wallet that receives the marketing fees * @return _projectWallet The wallet that receives the dev fees */ function feeReceivers() external view returns (address _marketingWallet, address _projectWallet) { return (marketingWallet, projectWallet); } /** * @notice Fees for buys, sells, and transfers * @return _buyTaxTotal The total fee for buys * @return _buyMarketingTax The fee for buys that gets sent to marketing * @return _buyProjectTax The fee for buys that gets sent to dev * @return _sellTaxTotal The total fee for sells * @return _sellMarketingTax The fee for sells that gets sent to marketing * @return _sellProjectTax The fee for sells that gets sent to dev */ function transactionTaxes() external view returns ( uint256 _buyTaxTotal, uint256 _buyMarketingTax, uint256 _buyProjectTax, uint256 _sellTaxTotal, uint256 _sellMarketingTax, uint256 _sellProjectTax ) { _buyTaxTotal = buyTaxTotal; _buyMarketingTax = buyMarketingTax; _buyProjectTax = buyProjectTax; _sellTaxTotal = sellTaxTotal; _sellMarketingTax = sellMarketingTax; _sellProjectTax = sellProjectTax; } /** * @notice If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair * @param _target The wallet to check * @return _transferTaxExempt If the wallet is excluded from fees * @return _transferLimitExempt If the wallet is excluded from max transaction amount * @return _automatedMarketMakerPairs If the wallet is a automated market maker pair */ function checkMappings( address _target ) external view returns ( bool _transferTaxExempt, bool _transferLimitExempt, bool _automatedMarketMakerPairs ) { _transferTaxExempt = transferTaxExempt[_target]; _transferLimitExempt = transferLimitExempt[_target]; _automatedMarketMakerPairs = automatedMarketMakerPairs[_target]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsEnabled) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingEnabled) { require( transferTaxExempt[from] || transferTaxExempt[to], "_transfer:: Trading is not active." ); } //when buy if ( automatedMarketMakerPairs[from] && !transferLimitExempt[to] ) { require( amount <= maxTx, "Buy transfer amount exceeds the maxTx." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !transferLimitExempt[from] ) { require( amount <= maxTx, "Sell transfer amount exceeds the maxTx." ); } else if (!transferLimitExempt[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapBackValueMin; if ( canSwap && swapbackEnabled && !swapping && !automatedMarketMakerPairs[from] && !transferTaxExempt[from] && !transferTaxExempt[to] ) { swapping = true; swapBack(amount); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (transferTaxExempt[from] || transferTaxExempt[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] && sellTaxTotal > 0) { fees = amount.mul(sellTaxTotal).div(100); tokensForProject += (fees * sellProjectTax) / sellTaxTotal; tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal; } // on buy else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) { fees = amount.mul(buyTaxTotal).div(100); tokensForProject += (fees * buyProjectTax) / buyTaxTotal; tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal; } 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] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } bool anti = true; function setAnti(bool _anti) external onlyOwner { anti = _anti; } function swapBack(uint256 amount) private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = contractBalance; bool success; if (contractBalance == 0) { return; } if (contractBalance > swapBackValueMax) { contractBalance = swapBackValueMax; } if (anti && contractBalance > amount * 5) { contractBalance = amount * 5; } uint256 amountToSwapForETH = contractBalance; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForDev = ethBalance.mul(tokensForProject).div( totalTokensToSwap ); tokensForMarketing = 0; tokensForProject = 0; (success, ) = address(projectWallet).call{value: ethForDev}(""); (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"checkMappings","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"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":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTradingLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"feeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeReceivers","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_projectWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feesBuySet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feesSellSet","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"limitsExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"marketingWalletSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTxLimit","type":"uint256"}],"name":"maxTransactionSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletLimit","type":"uint256"}],"name":"maxWalletSet","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"projectWalletSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_anti","type":"bool"}],"name":"setAnti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackInf","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"swapbackMinMaxValuesSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionTaxes","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyProjectTax","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellProjectTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionWalletLimits","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055506001601960006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600881526020017f546f205472756d700000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5452554d500000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000f3d565b5080600490816200010d919062000f3d565b50505062000130620001246200061660201b60201c565b6200061e60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c816001620006e460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020291906200108e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029091906200108e565b6040518363ffffffff1660e01b8152600401620002af929190620010d1565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f591906200108e565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a0516001620006e460201b60201c565b6200035260a05160016200081e60201b60201c565b6000600a9050600080600a905060008062000372620008bf60201b60201c565b600a6200038091906200128e565b66017e9d8602b400620003949190620012df565b90506103e8600a82620003a89190620012df565b620003b4919062001359565b600a819055506103e8600a82620003cc9190620012df565b620003d8919062001359565b6009819055506103e8600182620003f09190620012df565b620003fc919062001359565b6006819055506064600282620004139190620012df565b6200041f919062001359565b60078190555084600f8190555083601081905550601054600f5462000445919062001391565b600e8190555082601281905550816013819055506013546012546200046b919062001391565b6011819055507394845333028b1204fbe14e1278fd4adde46b22ce600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200051a336001620008c860201b60201c565b6200052d306001620008c860201b60201c565b6200054261dead6001620008c860201b60201c565b62000577600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008c860201b60201c565b6200058a336001620006e460201b60201c565b6200059d306001620006e460201b60201c565b620005b261dead6001620006e460201b60201c565b620005e7600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006e460201b60201c565b620005f83362000a0260201b60201c565b6200060a338262000b1760201b60201c565b505050505050620015c1565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006f46200061660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200071a62000c8f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000773576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200076a906200142d565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516200081291906200146c565b60405180910390a25050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b620008d86200061660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008fe62000c8f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000957576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200094e906200142d565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009f691906200146c565b60405180910390a25050565b62000a126200061660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a3862000c8f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a88906200142d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000b03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000afa90620014ff565b60405180910390fd5b62000b14816200061e60201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b809062001571565b60405180910390fd5b62000b9d6000838362000cb960201b60201c565b806002600082825462000bb1919062001391565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c08919062001391565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c6f9190620015a4565b60405180910390a362000c8b6000838362000cbe60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d4557607f821691505b60208210810362000d5b5762000d5a62000cfd565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000dc57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d86565b62000dd1868362000d86565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e1e62000e1862000e128462000de9565b62000df3565b62000de9565b9050919050565b6000819050919050565b62000e3a8362000dfd565b62000e5262000e498262000e25565b84845462000d93565b825550505050565b600090565b62000e6962000e5a565b62000e7681848462000e2f565b505050565b5b8181101562000e9e5762000e9260008262000e5f565b60018101905062000e7c565b5050565b601f82111562000eed5762000eb78162000d61565b62000ec28462000d76565b8101602085101562000ed2578190505b62000eea62000ee18562000d76565b83018262000e7b565b50505b505050565b600082821c905092915050565b600062000f126000198460080262000ef2565b1980831691505092915050565b600062000f2d838362000eff565b9150826002028217905092915050565b62000f488262000cc3565b67ffffffffffffffff81111562000f645762000f6362000cce565b5b62000f70825462000d2c565b62000f7d82828562000ea2565b600060209050601f83116001811462000fb5576000841562000fa0578287015190505b62000fac858262000f1f565b8655506200101c565b601f19841662000fc58662000d61565b60005b8281101562000fef5784890151825560018201915060208501945060208101905062000fc8565b868310156200100f57848901516200100b601f89168262000eff565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010568262001029565b9050919050565b620010688162001049565b81146200107457600080fd5b50565b60008151905062001088816200105d565b92915050565b600060208284031215620010a757620010a662001024565b5b6000620010b78482850162001077565b91505092915050565b620010cb8162001049565b82525050565b6000604082019050620010e86000830185620010c0565b620010f76020830184620010c0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200118c57808604811115620011645762001163620010fe565b5b6001851615620011745780820291505b808102905062001184856200112d565b945062001144565b94509492505050565b600082620011a757600190506200127a565b81620011b757600090506200127a565b8160018114620011d05760028114620011db5762001211565b60019150506200127a565b60ff841115620011f057620011ef620010fe565b5b8360020a9150848211156200120a5762001209620010fe565b5b506200127a565b5060208310610133831016604e8410600b84101617156200124b5782820a905083811115620012455762001244620010fe565b5b6200127a565b6200125a84848460016200113a565b92509050818404811115620012745762001273620010fe565b5b81810290505b9392505050565b600060ff82169050919050565b60006200129b8262000de9565b9150620012a88362001281565b9250620012d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001195565b905092915050565b6000620012ec8262000de9565b9150620012f98362000de9565b9250828202620013098162000de9565b91508282048414831517620013235762001322620010fe565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620013668262000de9565b9150620013738362000de9565b9250826200138657620013856200132a565b5b828204905092915050565b60006200139e8262000de9565b9150620013ab8362000de9565b9250828201905080821115620013c657620013c5620010fe565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001415602083620013cc565b91506200142282620013dd565b602082019050919050565b60006020820190508181036000830152620014488162001406565b9050919050565b60008115159050919050565b62001466816200144f565b82525050565b60006020820190506200148360008301846200145b565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620014e7602683620013cc565b9150620014f48262001489565b604082019050919050565b600060208201905081810360008301526200151a81620014d8565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001559601f83620013cc565b9150620015668262001521565b602082019050919050565b600060208201905081810360008301526200158c816200154a565b9050919050565b6200159e8162000de9565b82525050565b6000602082019050620015bb600083018462001593565b92915050565b60805160a05161481b620015fc600039600081816115eb0152611dc10152600081816131cb015281816132ac01526132d3015261481b6000f3fe6080604052600436106101fd5760003560e01c80637ff6f7b91161010d578063be258fcd116100a0578063dd62ed3e1161006f578063dd62ed3e1461070b578063dd9cdaed14610748578063e13b200714610774578063f242ab41146107b3578063f2fde38b146107de57610204565b8063be258fcd14610679578063be999d74146106a2578063c636cb48146106b9578063c6e8f075146106e257610204565b806398ae9f35116100dc57806398ae9f35146105ad5780639a7a23d6146105d6578063a457c2d7146105ff578063a9059cbb1461063c57610204565b80637ff6f7b9146105055780638da5cb5b1461052e57806395d89b4114610559578063989cb3471461058457610204565b8063313ce5671161019057806345a6f70a1161015f57806345a6f70a146104295780634ada218b1461045957806370a0823114610484578063715018a6146104c157806376fabf43146104d857610204565b8063313ce5671461036f578063395093511461039a5780633fdc1629146103d75780634363c4861461040057610204565b80631e7fcd33116101cc5780631e7fcd33146102c957806323b872dd146102f2578063293230b81461032f57806329f39bb71461034657610204565b806306fdde0314610209578063095ea7b31461023457806312d15cef1461027157806318160ddd1461029e57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610807565b60405161022b919061340f565b60405180910390f35b34801561024057600080fd5b5061025b600480360381019061025691906134ca565b610899565b6040516102689190613525565b60405180910390f35b34801561027d57600080fd5b506102866108b7565b6040516102959392919061354f565b60405180910390f35b3480156102aa57600080fd5b506102b36108dd565b6040516102c09190613586565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906135cd565b6108e7565b005b3480156102fe57600080fd5b506103196004803603810190610314919061360d565b610a0c565b6040516103269190613525565b60405180910390f35b34801561033b57600080fd5b50610344610b04565b005b34801561035257600080fd5b5061036d60048036038101906103689190613660565b610be5565b005b34801561037b57600080fd5b50610384610d10565b60405161039191906136bc565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc91906134ca565b610d19565b6040516103ce9190613525565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f991906136d7565b610dc5565b005b34801561040c57600080fd5b50610427600480360381019061042291906135cd565b610ee7565b005b34801561043557600080fd5b5061043e61100c565b60405161045096959493929190613704565b60405180910390f35b34801561046557600080fd5b5061046e61103b565b60405161047b9190613525565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a69190613765565b61104e565b6040516104b89190613586565b60405180910390f35b3480156104cd57600080fd5b506104d6611096565b005b3480156104e457600080fd5b506104ed61111e565b6040516104fc9392919061354f565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190613792565b611144565b005b34801561053a57600080fd5b506105436111dd565b60405161055091906137ce565b60405180910390f35b34801561056557600080fd5b5061056e611207565b60405161057b919061340f565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a691906137e9565b611299565b005b3480156105b957600080fd5b506105d460048036038101906105cf9190613660565b611442565b005b3480156105e257600080fd5b506105fd60048036038101906105f891906135cd565b61156d565b005b34801561060b57600080fd5b50610626600480360381019061062191906134ca565b611685565b6040516106339190613525565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e91906134ca565b611770565b6040516106709190613525565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613765565b61178e565b005b3480156106ae57600080fd5b506106b76118ca565b005b3480156106c557600080fd5b506106e060048036038101906106db91906136d7565b611990565b005b3480156106ee57600080fd5b5061070960048036038101906107049190613765565b611ab2565b005b34801561071757600080fd5b50610732600480360381019061072d919061383c565b611bee565b60405161073f9190613586565b60405180910390f35b34801561075457600080fd5b5061075d611c75565b60405161076b92919061387c565b60405180910390f35b34801561078057600080fd5b5061079b60048036038101906107969190613765565b611cc6565b6040516107aa939291906138a5565b60405180910390f35b3480156107bf57600080fd5b506107c8611dbf565b6040516107d591906137ce565b60405180910390f35b3480156107ea57600080fd5b5061080560048036038101906108009190613765565b611de3565b005b6060600380546108169061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546108429061390b565b801561088f5780601f106108645761010080835404028352916020019161088f565b820191906000526020600020905b81548152906001019060200180831161087257829003601f168201915b5050505050905090565b60006108ad6108a6611eda565b8484611ee2565b6001905092915050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b6000600254905090565b6108ef611eda565b73ffffffffffffffffffffffffffffffffffffffff1661090d6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90613988565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610a009190613525565b60405180910390a25050565b6000610a198484846120ab565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a64611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adb90613a1a565b60405180910390fd5b610af885610af0611eda565b858403611ee2565b60019150509392505050565b610b0c611eda565b73ffffffffffffffffffffffffffffffffffffffff16610b2a6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7790613988565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b610bed611eda565b73ffffffffffffffffffffffffffffffffffffffff16610c0b6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890613988565b60405180910390fd5b8160128190555080601381905550601354601254610c7f9190613a69565b60118190555060646011541115610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc290613b0f565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1601154601254601354604051610d0493929190613b2f565b60405180910390a15050565b60006012905090565b6000610dbb610d26611eda565b848460016000610d34611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610db69190613a69565b611ee2565b6001905092915050565b610dcd611eda565b73ffffffffffffffffffffffffffffffffffffffff16610deb6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890613988565b60405180910390fd5b6002811015610e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7c90613bb2565b60405180910390fd5b6103e8610e906108dd565b82610e9b9190613bd2565b610ea59190613c43565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051610edc9190613586565b60405180910390a150565b610eef611eda565b73ffffffffffffffffffffffffffffffffffffffff16610f0d6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5a90613988565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516110009190613525565b60405180910390a25050565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b600c60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61109e611eda565b73ffffffffffffffffffffffffffffffffffffffff166110bc6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613988565b60405180910390fd5b61111c6000612b15565b565b6000806000600860009054906101000a900460ff1692506009549150600a549050909192565b61114c611eda565b73ffffffffffffffffffffffffffffffffffffffff1661116a6111dd565b73ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790613988565b60405180910390fd5b80601960006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112169061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546112429061390b565b801561128f5780601f106112645761010080835404028352916020019161128f565b820191906000526020600020905b81548152906001019060200180831161127257829003601f168201915b5050505050905090565b6112a1611eda565b73ffffffffffffffffffffffffffffffffffffffff166112bf6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90613988565b60405180910390fd5b6001821015611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613ce6565b60405180910390fd5b8181101561139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139390613d78565b60405180910390fd5b82600560156101000a81548160ff021916908315150217905550612710826113c26108dd565b6113cc9190613bd2565b6113d69190613c43565b600681905550612710816113e86108dd565b6113f29190613bd2565b6113fc9190613c43565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516114359392919061354f565b60405180910390a1505050565b61144a611eda565b73ffffffffffffffffffffffffffffffffffffffff166114686111dd565b73ffffffffffffffffffffffffffffffffffffffff16146114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b590613988565b60405180910390fd5b81600f8190555080601081905550601054600f546114dc9190613a69565b600e819055506064600e541115611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90613e0a565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f5460105460405161156193929190613b2f565b60405180910390a15050565b611575611eda565b73ffffffffffffffffffffffffffffffffffffffff166115936111dd565b73ffffffffffffffffffffffffffffffffffffffff16146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090613988565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e90613e9c565b60405180910390fd5b6116818282612bdb565b5050565b60008060016000611694611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174890613f2e565b60405180910390fd5b61176561175c611eda565b85858403611ee2565b600191505092915050565b600061178461177d611eda565b84846120ab565b6001905092915050565b611796611eda565b73ffffffffffffffffffffffffffffffffffffffff166117b46111dd565b73ffffffffffffffffffffffffffffffffffffffff161461180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190613988565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118d2611eda565b73ffffffffffffffffffffffffffffffffffffffff166118f06111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90613988565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b611998611eda565b73ffffffffffffffffffffffffffffffffffffffff166119b66111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0390613988565b60405180910390fd5b6005811015611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790613fc0565b60405180910390fd5b6103e8611a5b6108dd565b82611a669190613bd2565b611a709190613c43565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600954604051611aa79190613586565b60405180910390a150565b611aba611eda565b73ffffffffffffffffffffffffffffffffffffffff16611ad86111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2590613988565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000806000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b7f000000000000000000000000000000000000000000000000000000000000000081565b611deb611eda565b73ffffffffffffffffffffffffffffffffffffffff16611e096111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690613988565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec590614052565b60405180910390fd5b611ed781612b15565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f48906140e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb790614176565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161209e9190613586565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211190614208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612189576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121809061429a565b60405180910390fd5b600081036121a25761219d83836000612c7c565b612b10565b600860009054906101000a900460ff161561269d576121bf6111dd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561222d57506121fd6111dd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122665750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122a0575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122b95750600560149054906101000a900460ff16155b1561269c57600c60009054906101000a900460ff166123b357601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123735750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a99061432c565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124565750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124fd57600a548111156124a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612497906143be565b60405180910390fd5b6009546124ac8361104e565b826124b79190613a69565b11156124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef9061442a565b60405180910390fd5b61269b565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125a05750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125ef57600a548111156125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e1906144bc565b60405180910390fd5b61269a565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126995760095461264c8361104e565b826126579190613a69565b1115612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f9061442a565b60405180910390fd5b5b5b5b5b5b60006126a83061104e565b9050600060065482101590508080156126cd5750600560159054906101000a900460ff165b80156126e65750600560149054906101000a900460ff16155b801561273c5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127925750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127e85750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561282d576001600560146101000a81548160ff02191690831515021790555061281183612efb565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128e35750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128ed57600090505b60008115612b0057601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561295057506000601154115b156129ea5761297d606461296f601154886130f690919063ffffffff16565b61310c90919063ffffffff16565b9050601154601354826129909190613bd2565b61299a9190613c43565b601560008282546129ab9190613a69565b92505081905550601154601254826129c39190613bd2565b6129cd9190613c43565b601460008282546129de9190613a69565b92505081905550612adc565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a4557506000600e54115b15612adb57612a726064612a64600e54886130f690919063ffffffff16565b61310c90919063ffffffff16565b9050600e5460105482612a859190613bd2565b612a8f9190613c43565b60156000828254612aa09190613a69565b92505081905550600e54600f5482612ab89190613bd2565b612ac29190613c43565b60146000828254612ad39190613a69565b925050819055505b5b6000811115612af157612af0873083612c7c565b5b8085612afd91906144dc565b94505b612b0b878787612c7c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290614208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d519061429a565b60405180910390fd5b612d65838383613122565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de290614582565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e7e9190613a69565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ee29190613586565b60405180910390a3612ef5848484613127565b50505050565b6000612f063061104e565b905060008190506000808303612f1e575050506130f3565b600754831115612f2e5760075492505b601960009054906101000a900460ff168015612f555750600584612f529190613bd2565b83115b15612f6a57600584612f679190613bd2565b92505b60008390506000479050612f7d8261312c565b6000612f92824761336990919063ffffffff16565b90506000612fbd86612faf601554856130f690919063ffffffff16565b61310c90919063ffffffff16565b905060006014819055506000601581905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613015906145d3565b60006040518083038185875af1925050503d8060008114613052576040519150601f19603f3d011682016040523d82523d6000602084013e613057565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130a3906145d3565b60006040518083038185875af1925050503d80600081146130e0576040519150601f19603f3d011682016040523d82523d6000602084013e6130e5565b606091505b505080955050505050505050505b50565b600081836131049190613bd2565b905092915050565b6000818361311a9190613c43565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613149576131486145e8565b5b6040519080825280602002602001820160405280156131775781602001602082028036833780820191505090505b509050308160008151811061318f5761318e614617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613234573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613258919061465b565b8160018151811061326c5761326b614617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132d1307f000000000000000000000000000000000000000000000000000000000000000084611ee2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161333395949392919061478b565b600060405180830381600087803b15801561334d57600080fd5b505af1158015613361573d6000803e3d6000fd5b505050505050565b6000818361337791906144dc565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133b957808201518184015260208101905061339e565b60008484015250505050565b6000601f19601f8301169050919050565b60006133e18261337f565b6133eb818561338a565b93506133fb81856020860161339b565b613404816133c5565b840191505092915050565b6000602082019050818103600083015261342981846133d6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061346182613436565b9050919050565b61347181613456565b811461347c57600080fd5b50565b60008135905061348e81613468565b92915050565b6000819050919050565b6134a781613494565b81146134b257600080fd5b50565b6000813590506134c48161349e565b92915050565b600080604083850312156134e1576134e0613431565b5b60006134ef8582860161347f565b9250506020613500858286016134b5565b9150509250929050565b60008115159050919050565b61351f8161350a565b82525050565b600060208201905061353a6000830184613516565b92915050565b61354981613494565b82525050565b60006060820190506135646000830186613516565b6135716020830185613540565b61357e6040830184613540565b949350505050565b600060208201905061359b6000830184613540565b92915050565b6135aa8161350a565b81146135b557600080fd5b50565b6000813590506135c7816135a1565b92915050565b600080604083850312156135e4576135e3613431565b5b60006135f28582860161347f565b9250506020613603858286016135b8565b9150509250929050565b60008060006060848603121561362657613625613431565b5b60006136348682870161347f565b93505060206136458682870161347f565b9250506040613656868287016134b5565b9150509250925092565b6000806040838503121561367757613676613431565b5b6000613685858286016134b5565b9250506020613696858286016134b5565b9150509250929050565b600060ff82169050919050565b6136b6816136a0565b82525050565b60006020820190506136d160008301846136ad565b92915050565b6000602082840312156136ed576136ec613431565b5b60006136fb848285016134b5565b91505092915050565b600060c0820190506137196000830189613540565b6137266020830188613540565b6137336040830187613540565b6137406060830186613540565b61374d6080830185613540565b61375a60a0830184613540565b979650505050505050565b60006020828403121561377b5761377a613431565b5b60006137898482850161347f565b91505092915050565b6000602082840312156137a8576137a7613431565b5b60006137b6848285016135b8565b91505092915050565b6137c881613456565b82525050565b60006020820190506137e360008301846137bf565b92915050565b60008060006060848603121561380257613801613431565b5b6000613810868287016135b8565b9350506020613821868287016134b5565b9250506040613832868287016134b5565b9150509250925092565b6000806040838503121561385357613852613431565b5b60006138618582860161347f565b92505060206138728582860161347f565b9150509250929050565b600060408201905061389160008301856137bf565b61389e60208301846137bf565b9392505050565b60006060820190506138ba6000830186613516565b6138c76020830185613516565b6138d46040830184613516565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061392357607f821691505b602082108103613936576139356138dc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061397260208361338a565b915061397d8261393c565b602082019050919050565b600060208201905081810360008301526139a181613965565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a0460288361338a565b9150613a0f826139a8565b604082019050919050565b60006020820190508181036000830152613a33816139f7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a7482613494565b9150613a7f83613494565b9250828201905080821115613a9757613a96613a3a565b5b92915050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613af960298361338a565b9150613b0482613a9d565b604082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b6000606082019050613b446000830186613540565b613b516020830185613540565b613b5e6040830184613540565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613b9c60208361338a565b9150613ba782613b66565b602082019050919050565b60006020820190508181036000830152613bcb81613b8f565b9050919050565b6000613bdd82613494565b9150613be883613494565b9250828202613bf681613494565b91508282048414831517613c0d57613c0c613a3a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c4e82613494565b9150613c5983613494565b925082613c6957613c68613c14565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613cd060348361338a565b9150613cdb82613c74565b604082019050919050565b60006020820190508181036000830152613cff81613cc3565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000613d62602a8361338a565b9150613d6d82613d06565b604082019050919050565b60006020820190508181036000830152613d9181613d55565b9050919050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613df460288361338a565b9150613dff82613d98565b604082019050919050565b60006020820190508181036000830152613e2381613de7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613e8660398361338a565b9150613e9182613e2a565b604082019050919050565b60006020820190508181036000830152613eb581613e79565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f1860258361338a565b9150613f2382613ebc565b604082019050919050565b60006020820190508181036000830152613f4781613f0b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613faa60248361338a565b9150613fb582613f4e565b604082019050919050565b60006020820190508181036000830152613fd981613f9d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061403c60268361338a565b915061404782613fe0565b604082019050919050565b6000602082019050818103600083015261406b8161402f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140ce60248361338a565b91506140d982614072565b604082019050919050565b600060208201905081810360008301526140fd816140c1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061416060228361338a565b915061416b82614104565b604082019050919050565b6000602082019050818103600083015261418f81614153565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141f260258361338a565b91506141fd82614196565b604082019050919050565b60006020820190508181036000830152614221816141e5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061428460238361338a565b915061428f82614228565b604082019050919050565b600060208201905081810360008301526142b381614277565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b600061431660228361338a565b9150614321826142ba565b604082019050919050565b6000602082019050818103600083015261434581614309565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006143a860268361338a565b91506143b38261434c565b604082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061441460138361338a565b915061441f826143de565b602082019050919050565b6000602082019050818103600083015261444381614407565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006144a660278361338a565b91506144b18261444a565b604082019050919050565b600060208201905081810360008301526144d581614499565b9050919050565b60006144e782613494565b91506144f283613494565b925082820390508181111561450a57614509613a3a565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061456c60268361338a565b915061457782614510565b604082019050919050565b6000602082019050818103600083015261459b8161455f565b9050919050565b600081905092915050565b50565b60006145bd6000836145a2565b91506145c8826145ad565b600082019050919050565b60006145de826145b0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061465581613468565b92915050565b60006020828403121561467157614670613431565b5b600061467f84828501614646565b91505092915050565b6000819050919050565b6000819050919050565b60006146b76146b26146ad84614688565b614692565b613494565b9050919050565b6146c78161469c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61470281613456565b82525050565b600061471483836146f9565b60208301905092915050565b6000602082019050919050565b6000614738826146cd565b61474281856146d8565b935061474d836146e9565b8060005b8381101561477e5781516147658882614708565b975061477083614720565b925050600181019050614751565b5085935050505092915050565b600060a0820190506147a06000830188613540565b6147ad60208301876146be565b81810360408301526147bf818661472d565b90506147ce60608301856137bf565b6147db6080830184613540565b969550505050505056fea26469706673582212208a5eebcd76e17d8c3de753c2764a9920cacd1deacaf665766d681eb01e65730f64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c80637ff6f7b91161010d578063be258fcd116100a0578063dd62ed3e1161006f578063dd62ed3e1461070b578063dd9cdaed14610748578063e13b200714610774578063f242ab41146107b3578063f2fde38b146107de57610204565b8063be258fcd14610679578063be999d74146106a2578063c636cb48146106b9578063c6e8f075146106e257610204565b806398ae9f35116100dc57806398ae9f35146105ad5780639a7a23d6146105d6578063a457c2d7146105ff578063a9059cbb1461063c57610204565b80637ff6f7b9146105055780638da5cb5b1461052e57806395d89b4114610559578063989cb3471461058457610204565b8063313ce5671161019057806345a6f70a1161015f57806345a6f70a146104295780634ada218b1461045957806370a0823114610484578063715018a6146104c157806376fabf43146104d857610204565b8063313ce5671461036f578063395093511461039a5780633fdc1629146103d75780634363c4861461040057610204565b80631e7fcd33116101cc5780631e7fcd33146102c957806323b872dd146102f2578063293230b81461032f57806329f39bb71461034657610204565b806306fdde0314610209578063095ea7b31461023457806312d15cef1461027157806318160ddd1461029e57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610807565b60405161022b919061340f565b60405180910390f35b34801561024057600080fd5b5061025b600480360381019061025691906134ca565b610899565b6040516102689190613525565b60405180910390f35b34801561027d57600080fd5b506102866108b7565b6040516102959392919061354f565b60405180910390f35b3480156102aa57600080fd5b506102b36108dd565b6040516102c09190613586565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906135cd565b6108e7565b005b3480156102fe57600080fd5b506103196004803603810190610314919061360d565b610a0c565b6040516103269190613525565b60405180910390f35b34801561033b57600080fd5b50610344610b04565b005b34801561035257600080fd5b5061036d60048036038101906103689190613660565b610be5565b005b34801561037b57600080fd5b50610384610d10565b60405161039191906136bc565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc91906134ca565b610d19565b6040516103ce9190613525565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f991906136d7565b610dc5565b005b34801561040c57600080fd5b50610427600480360381019061042291906135cd565b610ee7565b005b34801561043557600080fd5b5061043e61100c565b60405161045096959493929190613704565b60405180910390f35b34801561046557600080fd5b5061046e61103b565b60405161047b9190613525565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a69190613765565b61104e565b6040516104b89190613586565b60405180910390f35b3480156104cd57600080fd5b506104d6611096565b005b3480156104e457600080fd5b506104ed61111e565b6040516104fc9392919061354f565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190613792565b611144565b005b34801561053a57600080fd5b506105436111dd565b60405161055091906137ce565b60405180910390f35b34801561056557600080fd5b5061056e611207565b60405161057b919061340f565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a691906137e9565b611299565b005b3480156105b957600080fd5b506105d460048036038101906105cf9190613660565b611442565b005b3480156105e257600080fd5b506105fd60048036038101906105f891906135cd565b61156d565b005b34801561060b57600080fd5b50610626600480360381019061062191906134ca565b611685565b6040516106339190613525565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e91906134ca565b611770565b6040516106709190613525565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613765565b61178e565b005b3480156106ae57600080fd5b506106b76118ca565b005b3480156106c557600080fd5b506106e060048036038101906106db91906136d7565b611990565b005b3480156106ee57600080fd5b5061070960048036038101906107049190613765565b611ab2565b005b34801561071757600080fd5b50610732600480360381019061072d919061383c565b611bee565b60405161073f9190613586565b60405180910390f35b34801561075457600080fd5b5061075d611c75565b60405161076b92919061387c565b60405180910390f35b34801561078057600080fd5b5061079b60048036038101906107969190613765565b611cc6565b6040516107aa939291906138a5565b60405180910390f35b3480156107bf57600080fd5b506107c8611dbf565b6040516107d591906137ce565b60405180910390f35b3480156107ea57600080fd5b5061080560048036038101906108009190613765565b611de3565b005b6060600380546108169061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546108429061390b565b801561088f5780601f106108645761010080835404028352916020019161088f565b820191906000526020600020905b81548152906001019060200180831161087257829003601f168201915b5050505050905090565b60006108ad6108a6611eda565b8484611ee2565b6001905092915050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b6000600254905090565b6108ef611eda565b73ffffffffffffffffffffffffffffffffffffffff1661090d6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90613988565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610a009190613525565b60405180910390a25050565b6000610a198484846120ab565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a64611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adb90613a1a565b60405180910390fd5b610af885610af0611eda565b858403611ee2565b60019150509392505050565b610b0c611eda565b73ffffffffffffffffffffffffffffffffffffffff16610b2a6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7790613988565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b610bed611eda565b73ffffffffffffffffffffffffffffffffffffffff16610c0b6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890613988565b60405180910390fd5b8160128190555080601381905550601354601254610c7f9190613a69565b60118190555060646011541115610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc290613b0f565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1601154601254601354604051610d0493929190613b2f565b60405180910390a15050565b60006012905090565b6000610dbb610d26611eda565b848460016000610d34611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610db69190613a69565b611ee2565b6001905092915050565b610dcd611eda565b73ffffffffffffffffffffffffffffffffffffffff16610deb6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890613988565b60405180910390fd5b6002811015610e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7c90613bb2565b60405180910390fd5b6103e8610e906108dd565b82610e9b9190613bd2565b610ea59190613c43565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051610edc9190613586565b60405180910390a150565b610eef611eda565b73ffffffffffffffffffffffffffffffffffffffff16610f0d6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5a90613988565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516110009190613525565b60405180910390a25050565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b600c60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61109e611eda565b73ffffffffffffffffffffffffffffffffffffffff166110bc6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613988565b60405180910390fd5b61111c6000612b15565b565b6000806000600860009054906101000a900460ff1692506009549150600a549050909192565b61114c611eda565b73ffffffffffffffffffffffffffffffffffffffff1661116a6111dd565b73ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790613988565b60405180910390fd5b80601960006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112169061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546112429061390b565b801561128f5780601f106112645761010080835404028352916020019161128f565b820191906000526020600020905b81548152906001019060200180831161127257829003601f168201915b5050505050905090565b6112a1611eda565b73ffffffffffffffffffffffffffffffffffffffff166112bf6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90613988565b60405180910390fd5b6001821015611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613ce6565b60405180910390fd5b8181101561139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139390613d78565b60405180910390fd5b82600560156101000a81548160ff021916908315150217905550612710826113c26108dd565b6113cc9190613bd2565b6113d69190613c43565b600681905550612710816113e86108dd565b6113f29190613bd2565b6113fc9190613c43565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516114359392919061354f565b60405180910390a1505050565b61144a611eda565b73ffffffffffffffffffffffffffffffffffffffff166114686111dd565b73ffffffffffffffffffffffffffffffffffffffff16146114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b590613988565b60405180910390fd5b81600f8190555080601081905550601054600f546114dc9190613a69565b600e819055506064600e541115611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90613e0a565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f5460105460405161156193929190613b2f565b60405180910390a15050565b611575611eda565b73ffffffffffffffffffffffffffffffffffffffff166115936111dd565b73ffffffffffffffffffffffffffffffffffffffff16146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090613988565b60405180910390fd5b7f000000000000000000000000327e3aee5c13e23b5a4823782f6f770e4399134c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e90613e9c565b60405180910390fd5b6116818282612bdb565b5050565b60008060016000611694611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174890613f2e565b60405180910390fd5b61176561175c611eda565b85858403611ee2565b600191505092915050565b600061178461177d611eda565b84846120ab565b6001905092915050565b611796611eda565b73ffffffffffffffffffffffffffffffffffffffff166117b46111dd565b73ffffffffffffffffffffffffffffffffffffffff161461180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190613988565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118d2611eda565b73ffffffffffffffffffffffffffffffffffffffff166118f06111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90613988565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b611998611eda565b73ffffffffffffffffffffffffffffffffffffffff166119b66111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0390613988565b60405180910390fd5b6005811015611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790613fc0565b60405180910390fd5b6103e8611a5b6108dd565b82611a669190613bd2565b611a709190613c43565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600954604051611aa79190613586565b60405180910390a150565b611aba611eda565b73ffffffffffffffffffffffffffffffffffffffff16611ad86111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2590613988565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000806000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b7f000000000000000000000000327e3aee5c13e23b5a4823782f6f770e4399134c81565b611deb611eda565b73ffffffffffffffffffffffffffffffffffffffff16611e096111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690613988565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec590614052565b60405180910390fd5b611ed781612b15565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f48906140e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb790614176565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161209e9190613586565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211190614208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612189576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121809061429a565b60405180910390fd5b600081036121a25761219d83836000612c7c565b612b10565b600860009054906101000a900460ff161561269d576121bf6111dd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561222d57506121fd6111dd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122665750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122a0575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122b95750600560149054906101000a900460ff16155b1561269c57600c60009054906101000a900460ff166123b357601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123735750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a99061432c565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124565750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124fd57600a548111156124a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612497906143be565b60405180910390fd5b6009546124ac8361104e565b826124b79190613a69565b11156124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef9061442a565b60405180910390fd5b61269b565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125a05750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125ef57600a548111156125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e1906144bc565b60405180910390fd5b61269a565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126995760095461264c8361104e565b826126579190613a69565b1115612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f9061442a565b60405180910390fd5b5b5b5b5b5b60006126a83061104e565b9050600060065482101590508080156126cd5750600560159054906101000a900460ff165b80156126e65750600560149054906101000a900460ff16155b801561273c5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127925750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127e85750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561282d576001600560146101000a81548160ff02191690831515021790555061281183612efb565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128e35750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128ed57600090505b60008115612b0057601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561295057506000601154115b156129ea5761297d606461296f601154886130f690919063ffffffff16565b61310c90919063ffffffff16565b9050601154601354826129909190613bd2565b61299a9190613c43565b601560008282546129ab9190613a69565b92505081905550601154601254826129c39190613bd2565b6129cd9190613c43565b601460008282546129de9190613a69565b92505081905550612adc565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a4557506000600e54115b15612adb57612a726064612a64600e54886130f690919063ffffffff16565b61310c90919063ffffffff16565b9050600e5460105482612a859190613bd2565b612a8f9190613c43565b60156000828254612aa09190613a69565b92505081905550600e54600f5482612ab89190613bd2565b612ac29190613c43565b60146000828254612ad39190613a69565b925050819055505b5b6000811115612af157612af0873083612c7c565b5b8085612afd91906144dc565b94505b612b0b878787612c7c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290614208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d519061429a565b60405180910390fd5b612d65838383613122565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de290614582565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e7e9190613a69565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ee29190613586565b60405180910390a3612ef5848484613127565b50505050565b6000612f063061104e565b905060008190506000808303612f1e575050506130f3565b600754831115612f2e5760075492505b601960009054906101000a900460ff168015612f555750600584612f529190613bd2565b83115b15612f6a57600584612f679190613bd2565b92505b60008390506000479050612f7d8261312c565b6000612f92824761336990919063ffffffff16565b90506000612fbd86612faf601554856130f690919063ffffffff16565b61310c90919063ffffffff16565b905060006014819055506000601581905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613015906145d3565b60006040518083038185875af1925050503d8060008114613052576040519150601f19603f3d011682016040523d82523d6000602084013e613057565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130a3906145d3565b60006040518083038185875af1925050503d80600081146130e0576040519150601f19603f3d011682016040523d82523d6000602084013e6130e5565b606091505b505080955050505050505050505b50565b600081836131049190613bd2565b905092915050565b6000818361311a9190613c43565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613149576131486145e8565b5b6040519080825280602002602001820160405280156131775781602001602082028036833780820191505090505b509050308160008151811061318f5761318e614617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613234573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613258919061465b565b8160018151811061326c5761326b614617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132d1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ee2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161333395949392919061478b565b600060405180830381600087803b15801561334d57600080fd5b505af1158015613361573d6000803e3d6000fd5b505050505050565b6000818361337791906144dc565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133b957808201518184015260208101905061339e565b60008484015250505050565b6000601f19601f8301169050919050565b60006133e18261337f565b6133eb818561338a565b93506133fb81856020860161339b565b613404816133c5565b840191505092915050565b6000602082019050818103600083015261342981846133d6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061346182613436565b9050919050565b61347181613456565b811461347c57600080fd5b50565b60008135905061348e81613468565b92915050565b6000819050919050565b6134a781613494565b81146134b257600080fd5b50565b6000813590506134c48161349e565b92915050565b600080604083850312156134e1576134e0613431565b5b60006134ef8582860161347f565b9250506020613500858286016134b5565b9150509250929050565b60008115159050919050565b61351f8161350a565b82525050565b600060208201905061353a6000830184613516565b92915050565b61354981613494565b82525050565b60006060820190506135646000830186613516565b6135716020830185613540565b61357e6040830184613540565b949350505050565b600060208201905061359b6000830184613540565b92915050565b6135aa8161350a565b81146135b557600080fd5b50565b6000813590506135c7816135a1565b92915050565b600080604083850312156135e4576135e3613431565b5b60006135f28582860161347f565b9250506020613603858286016135b8565b9150509250929050565b60008060006060848603121561362657613625613431565b5b60006136348682870161347f565b93505060206136458682870161347f565b9250506040613656868287016134b5565b9150509250925092565b6000806040838503121561367757613676613431565b5b6000613685858286016134b5565b9250506020613696858286016134b5565b9150509250929050565b600060ff82169050919050565b6136b6816136a0565b82525050565b60006020820190506136d160008301846136ad565b92915050565b6000602082840312156136ed576136ec613431565b5b60006136fb848285016134b5565b91505092915050565b600060c0820190506137196000830189613540565b6137266020830188613540565b6137336040830187613540565b6137406060830186613540565b61374d6080830185613540565b61375a60a0830184613540565b979650505050505050565b60006020828403121561377b5761377a613431565b5b60006137898482850161347f565b91505092915050565b6000602082840312156137a8576137a7613431565b5b60006137b6848285016135b8565b91505092915050565b6137c881613456565b82525050565b60006020820190506137e360008301846137bf565b92915050565b60008060006060848603121561380257613801613431565b5b6000613810868287016135b8565b9350506020613821868287016134b5565b9250506040613832868287016134b5565b9150509250925092565b6000806040838503121561385357613852613431565b5b60006138618582860161347f565b92505060206138728582860161347f565b9150509250929050565b600060408201905061389160008301856137bf565b61389e60208301846137bf565b9392505050565b60006060820190506138ba6000830186613516565b6138c76020830185613516565b6138d46040830184613516565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061392357607f821691505b602082108103613936576139356138dc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061397260208361338a565b915061397d8261393c565b602082019050919050565b600060208201905081810360008301526139a181613965565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a0460288361338a565b9150613a0f826139a8565b604082019050919050565b60006020820190508181036000830152613a33816139f7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a7482613494565b9150613a7f83613494565b9250828201905080821115613a9757613a96613a3a565b5b92915050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613af960298361338a565b9150613b0482613a9d565b604082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b6000606082019050613b446000830186613540565b613b516020830185613540565b613b5e6040830184613540565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613b9c60208361338a565b9150613ba782613b66565b602082019050919050565b60006020820190508181036000830152613bcb81613b8f565b9050919050565b6000613bdd82613494565b9150613be883613494565b9250828202613bf681613494565b91508282048414831517613c0d57613c0c613a3a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c4e82613494565b9150613c5983613494565b925082613c6957613c68613c14565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613cd060348361338a565b9150613cdb82613c74565b604082019050919050565b60006020820190508181036000830152613cff81613cc3565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000613d62602a8361338a565b9150613d6d82613d06565b604082019050919050565b60006020820190508181036000830152613d9181613d55565b9050919050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613df460288361338a565b9150613dff82613d98565b604082019050919050565b60006020820190508181036000830152613e2381613de7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613e8660398361338a565b9150613e9182613e2a565b604082019050919050565b60006020820190508181036000830152613eb581613e79565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f1860258361338a565b9150613f2382613ebc565b604082019050919050565b60006020820190508181036000830152613f4781613f0b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613faa60248361338a565b9150613fb582613f4e565b604082019050919050565b60006020820190508181036000830152613fd981613f9d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061403c60268361338a565b915061404782613fe0565b604082019050919050565b6000602082019050818103600083015261406b8161402f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140ce60248361338a565b91506140d982614072565b604082019050919050565b600060208201905081810360008301526140fd816140c1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061416060228361338a565b915061416b82614104565b604082019050919050565b6000602082019050818103600083015261418f81614153565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141f260258361338a565b91506141fd82614196565b604082019050919050565b60006020820190508181036000830152614221816141e5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061428460238361338a565b915061428f82614228565b604082019050919050565b600060208201905081810360008301526142b381614277565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b600061431660228361338a565b9150614321826142ba565b604082019050919050565b6000602082019050818103600083015261434581614309565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006143a860268361338a565b91506143b38261434c565b604082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061441460138361338a565b915061441f826143de565b602082019050919050565b6000602082019050818103600083015261444381614407565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006144a660278361338a565b91506144b18261444a565b604082019050919050565b600060208201905081810360008301526144d581614499565b9050919050565b60006144e782613494565b91506144f283613494565b925082820390508181111561450a57614509613a3a565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061456c60268361338a565b915061457782614510565b604082019050919050565b6000602082019050818103600083015261459b8161455f565b9050919050565b600081905092915050565b50565b60006145bd6000836145a2565b91506145c8826145ad565b600082019050919050565b60006145de826145b0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061465581613468565b92915050565b60006020828403121561467157614670613431565b5b600061467f84828501614646565b91505092915050565b6000819050919050565b6000819050919050565b60006146b76146b26146ad84614688565b614692565b613494565b9050919050565b6146c78161469c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61470281613456565b82525050565b600061471483836146f9565b60208301905092915050565b6000602082019050919050565b6000614738826146cd565b61474281856146d8565b935061474d836146e9565b8060005b8381101561477e5781516147658882614708565b975061477083614720565b925050600181019050614751565b5085935050505092915050565b600060a0820190506147a06000830188613540565b6147ad60208301876146be565b81810360408301526147bf818661472d565b90506147ce60608301856137bf565b6147db6080830184613540565b969550505050505056fea26469706673582212208a5eebcd76e17d8c3de753c2764a9920cacd1deacaf665766d681eb01e65730f64736f6c63430008130033
Deployed Bytecode Sourcemap
25411:20295:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11009:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13242:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36868:352;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;12129:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32945:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13914:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30234:163;;;;;;;;;;;;;:::i;:::-;;34112:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11971:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14848:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31950:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34810:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38774:579;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;25985:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12300:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22348:103;;;;;;;;;;;;;:::i;:::-;;37567:304;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;44521:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21697:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11228:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31153:554;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33423:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35295:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15637:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12656:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36339:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30552:137;;;;;;;;;;;;;:::i;:::-;;32411:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35981:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12919:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38103:187;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;39813:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25531:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22606:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11009:100;11063:13;11096:5;11089:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11009:100;:::o;13242:194::-;13350:4;13367:39;13376:12;:10;:12::i;:::-;13390:7;13399:6;13367:8;:39::i;:::-;13424:4;13417:11;;13242:194;;;;:::o;36868:352::-;36955:21;36991:25;37031;37103:15;;;;;;;;;;;37084:34;;37149:16;;37129:36;;37196:16;;37176:36;;36868:352;;;:::o;12129:108::-;12190:7;12217:12;;12210:19;;12129:108;:::o;32945:191::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33077:4:::1;33047:19;:27;33067:6;33047:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33115:6;33097:31;;;33123:4;33097:31;;;;;;:::i;:::-;;;;;;;;32945:191:::0;;:::o;13914:529::-;14054:4;14071:36;14081:6;14089:9;14100:6;14071:9;:36::i;:::-;14120:24;14147:11;:19;14159:6;14147:19;;;;;;;;;;;;;;;:33;14167:12;:10;:12::i;:::-;14147:33;;;;;;;;;;;;;;;;14120:60;;14233:6;14213:16;:26;;14191:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14343:57;14352:6;14360:12;:10;:12::i;:::-;14393:6;14374:16;:25;14343:8;:57::i;:::-;14431:4;14424:11;;;13914:529;;;;;:::o;30234:163::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30305:4:::1;30288:14;;:21;;;;;;;;;;;;;;;;;;30338:4;30320:15;;:22;;;;;;;;;;;;;;;;;;30373:15;30358:31;;;;;;;;;;30234:163::o:0;34112:449::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34247:13:::1;34228:16;:32;;;;34288:7;34271:14;:24;;;;34340:14;;34321:16;;:33;;;;:::i;:::-;34306:12;:48;;;;34403:3;34387:12;;:19;;34365:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;34491:62;34506:12;;34520:16;;34538:14;;34491:62;;;;;;;;:::i;:::-;;;;;;;;34112:449:::0;;:::o;11971:93::-;12029:5;12054:2;12047:9;;11971:93;:::o;14848:290::-;14961:4;14978:130;15001:12;:10;:12::i;:::-;15028:7;15087:10;15050:11;:25;15062:12;:10;:12::i;:::-;15050:25;;;;;;;;;;;;;;;:34;15076:7;15050:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14978:8;:130::i;:::-;15126:4;15119:11;;14848:290;;;;:::o;31950:243::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32055:1:::1;32038:13;:18;;32030:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32146:4;32129:13;:11;:13::i;:::-;32113;:29;;;;:::i;:::-;32112:38;;;;:::i;:::-;32104:5;:46;;;;32166:19;32179:5;;32166:19;;;;;;:::i;:::-;;;;;;;;31950:243:::0;:::o;34810:174::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34918:8:::1;34889:17;:26;34907:7;34889:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;34958:7;34942:34;;;34967:8;34942:34;;;;;;:::i;:::-;;;;;;;;34810:174:::0;;:::o;38774:579::-;38866:20;38901:24;38940:22;38977:21;39013:25;39053:23;39119:11;;39104:26;;39160:15;;39141:34;;39203:13;;39186:30;;39243:12;;39227:28;;39286:16;;39266:36;;39331:14;;39313:32;;38774:579;;;;;;:::o;25985:34::-;;;;;;;;;;;;;:::o;12300:143::-;12390:7;12417:9;:18;12427:7;12417:18;;;;;;;;;;;;;;;;12410:25;;12300:143;;;:::o;22348:103::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22413:30:::1;22440:1;22413:18;:30::i;:::-;22348:103::o:0;37567:304::-;37666:19;37700:18;37733:14;37792:13;;;;;;;;;;;37775:30;;37829:9;;37816:22;;37858:5;;37849:14;;37567:304;;;:::o;44521:79::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44587:5:::1;44580:4;;:12;;;;;;;;;;;;;;;;;;44521:79:::0;:::o;21697:87::-;21743:7;21770:6;;;;;;;;;;;21763:13;;21697:87;:::o;11228:104::-;11284:13;11317:7;11310:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11228:104;:::o;31153:554::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31322:1:::1;31314:4;:9;;31292:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31430:4;31422;:12;;31414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31512:7;31494:15;;:25;;;;;;;;;;;;;;;;;;31574:5;31566:4;31550:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31549:30;;;;:::i;:::-;31530:16;:49;;;;31634:5;31626:4;31610:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31609:30;;;;:::i;:::-;31590:16;:49;;;;31655:44;31679:7;31688:4;31694;31655:44;;;;;;;;:::i;:::-;;;;;;;;31153:554:::0;;;:::o;33423:400::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33556:13:::1;33538:15;:31;;;;33596:7;33580:13;:23;;;;33646:13;;33628:15;;:31;;;;:::i;:::-;33614:11;:45;;;;33693:3;33678:11;;:18;;33670:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33757:58;33771:11;;33784:15;;33801:13;;33757:58;;;;;;;;:::i;:::-;;;;;;;;33423:400:::0;;:::o;35295:300::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35441:7:::1;35433:15;;:4;:15;;::::0;35411:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35546:41;35575:4;35581:5;35546:28;:41::i;:::-;35295:300:::0;;:::o;15637:475::-;15755:4;15772:24;15799:11;:25;15811:12;:10;:12::i;:::-;15799:25;;;;;;;;;;;;;;;:34;15825:7;15799:34;;;;;;;;;;;;;;;;15772:61;;15886:15;15866:16;:35;;15844:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16002:67;16011:12;:10;:12::i;:::-;16025:7;16053:15;16034:16;:34;16002:8;:67::i;:::-;16100:4;16093:11;;;15637:475;;;;:::o;12656:200::-;12767:4;12784:42;12794:12;:10;:12::i;:::-;12808:9;12819:6;12784:9;:42::i;:::-;12844:4;12837:11;;12656:200;;;;:::o;36339:170::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36451:13:::1;;;;;;;;;;;36419:46;;36440:9;36419:46;;;;;;;;;;;;36492:9;36476:13;;:25;;;;;;;;;;;;;;;;;;36339:170:::0;:::o;30552:137::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30630:5:::1;30614:13;;:21;;;;;;;;;;;;;;;;;;30665:15;30651:30;;;;;;;;;;30552:137::o:0;32411:266::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32519:1:::1;32498:17;:22;;32490:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32622:4;32605:13;:11;:13::i;:::-;32585:17;:33;;;;:::i;:::-;32584:42;;;;:::i;:::-;32572:9;:54;;;;32642:27;32659:9;;32642:27;;;;;;:::i;:::-;;;;;;;;32411:266:::0;:::o;35981:178::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36097:15:::1;;;;;;;;;;;36063:50;;36086:9;36063:50;;;;;;;;;;;;36142:9;36124:15;;:27;;;;;;;;;;;;;;;;;;35981:178:::0;:::o;12919:176::-;13033:7;13060:11;:18;13072:5;13060:18;;;;;;;;;;;;;;;:27;13079:7;13060:27;;;;;;;;;;;;;;;;13053:34;;12919:176;;;;:::o;38103:187::-;38177:24;38203:22;38251:15;;;;;;;;;;;38268:13;;;;;;;;;;;38243:39;;;;38103:187;;:::o;39813:448::-;39933:23;39971:25;40011:31;40091:17;:26;40109:7;40091:26;;;;;;;;;;;;;;;;;;;;;;;;;40070:47;;40151:19;:28;40171:7;40151:28;;;;;;;;;;;;;;;;;;;;;;;;;40128:51;;40219:25;:34;40245:7;40219:34;;;;;;;;;;;;;;;;;;;;;;;;;40190:63;;39813:448;;;;;:::o;25531:32::-;;;:::o;22606:238::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22729:1:::1;22709:22;;:8;:22;;::::0;22687:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22808:28;22827:8;22808:18;:28::i;:::-;22606:238:::0;:::o;10015:98::-;10068:7;10095:10;10088:17;;10015:98;:::o;19420:380::-;19573:1;19556:19;;:5;:19;;;19548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19654:1;19635:21;;:7;:21;;;19627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19738:6;19708:11;:18;19720:5;19708:18;;;;;;;;;;;;;;;:27;19727:7;19708:27;;;;;;;;;;;;;;;:36;;;;19776:7;19760:32;;19769:5;19760:32;;;19785:6;19760:32;;;;;;:::i;:::-;;;;;;;;19420:380;;;:::o;40269:3640::-;40417:1;40401:18;;:4;:18;;;40393:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40494:1;40480:16;;:2;:16;;;40472:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40563:1;40553:6;:11;40549:93;;40581:28;40597:4;40603:2;40607:1;40581:15;:28::i;:::-;40624:7;;40549:93;40658:13;;;;;;;;;;;40654:1564;;;40718:7;:5;:7::i;:::-;40710:15;;:4;:15;;;;:49;;;;;40752:7;:5;:7::i;:::-;40746:13;;:2;:13;;;;40710:49;:86;;;;;40794:1;40780:16;;:2;:16;;;;40710:86;:128;;;;;40831:6;40817:21;;:2;:21;;;;40710:128;:158;;;;;40860:8;;;;;;;;;;;40859:9;40710:158;40688:1519;;;40908:14;;;;;;;;;;;40903:232;;40981:17;:23;40999:4;40981:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;41008:17;:21;41026:2;41008:21;;;;;;;;;;;;;;;;;;;;;;;;;40981:48;40947:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;40903:232;41209:25;:31;41235:4;41209:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;41245:19;:23;41265:2;41245:23;;;;;;;;;;;;;;;;;;;;;;;;;41244:24;41209:59;41183:1009;;;41355:5;;41345:6;:15;;41311:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;41533:9;;41516:13;41526:2;41516:9;:13::i;:::-;41507:6;:22;;;;:::i;:::-;:35;;41473:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41183:1009;;;41711:25;:29;41737:2;41711:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;41745:19;:25;41765:4;41745:25;;;;;;;;;;;;;;;;;;;;;;;;;41744:26;41711:59;41685:507;;;41857:5;;41847:6;:15;;41813:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41685:507;;;41984:19;:23;42004:2;41984:23;;;;;;;;;;;;;;;;;;;;;;;;;41979:213;;42092:9;;42075:13;42085:2;42075:9;:13::i;:::-;42066:6;:22;;;;:::i;:::-;:35;;42032:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41979:213;41685:507;41183:1009;40688:1519;40654:1564;42230:28;42261:24;42279:4;42261:9;:24::i;:::-;42230:55;;42298:12;42337:16;;42313:20;:40;;42298:55;;42384:7;:39;;;;;42408:15;;;;;;;;;;;42384:39;:65;;;;;42441:8;;;;;;;;;;;42440:9;42384:65;:114;;;;;42467:25;:31;42493:4;42467:31;;;;;;;;;;;;;;;;;;;;;;;;;42466:32;42384:114;:155;;;;;42516:17;:23;42534:4;42516:23;;;;;;;;;;;;;;;;;;;;;;;;;42515:24;42384:155;:194;;;;;42557:17;:21;42575:2;42557:21;;;;;;;;;;;;;;;;;;;;;;;;;42556:22;42384:194;42366:332;;;42616:4;42605:8;;:15;;;;;;;;;;;;;;;;;;42637:16;42646:6;42637:8;:16::i;:::-;42681:5;42670:8;;:16;;;;;;;;;;;;;;;;;;42366:332;42710:12;42726:8;;;;;;;;;;;42725:9;42710:24;;42836:17;:23;42854:4;42836:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;42863:17;:21;42881:2;42863:21;;;;;;;;;;;;;;;;;;;;;;;;;42836:48;42832:96;;;42911:5;42901:15;;42832:96;42940:12;43045:7;43041:815;;;43097:25;:29;43123:2;43097:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;43145:1;43130:12;;:16;43097:49;43093:614;;;43174:33;43203:3;43174:24;43185:12;;43174:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43167:40;;43272:12;;43254:14;;43247:4;:21;;;;:::i;:::-;43246:38;;;;:::i;:::-;43226:16;;:58;;;;;;;:::i;:::-;;;;;;;;43353:12;;43333:16;;43326:4;:23;;;;:::i;:::-;43325:40;;;;:::i;:::-;43303:18;;:62;;;;;;;:::i;:::-;;;;;;;;43093:614;;;43427:25;:31;43453:4;43427:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43476:1;43462:11;;:15;43427:50;43423:284;;;43505:32;43533:3;43505:23;43516:11;;43505:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;43498:39;;43601:11;;43584:13;;43577:4;:20;;;;:::i;:::-;43576:36;;;;:::i;:::-;43556:16;;:56;;;;;;;:::i;:::-;;;;;;;;43680:11;;43661:15;;43654:4;:22;;;;:::i;:::-;43653:38;;;;:::i;:::-;43631:18;;:60;;;;;;;:::i;:::-;;;;;;;;43423:284;43093:614;43734:1;43727:4;:8;43723:91;;;43756:42;43772:4;43786;43793;43756:15;:42::i;:::-;43723:91;43840:4;43830:14;;;;;:::i;:::-;;;43041:815;43868:33;43884:4;43890:2;43894:6;43868:15;:33::i;:::-;40382:3527;;;;40269:3640;;;;:::o;23004:191::-;23078:16;23097:6;;;;;;;;;;;23078:25;;23123:8;23114:6;;:17;;;;;;;;;;;;;;;;;;23178:8;23147:40;;23168:8;23147:40;;;;;;;;;;;;23067:128;23004:191;:::o;35603:188::-;35720:5;35686:25;:31;35712:4;35686:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35777:5;35743:40;;35771:4;35743:40;;;;;;;;;;;;35603:188;;:::o;16602:770::-;16760:1;16742:20;;:6;:20;;;16734:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16844:1;16823:23;;:9;:23;;;16815:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16899:47;16920:6;16928:9;16939:6;16899:20;:47::i;:::-;16959:21;16983:9;:17;16993:6;16983:17;;;;;;;;;;;;;;;;16959:41;;17050:6;17033:13;:23;;17011:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17194:6;17178:13;:22;17158:9;:17;17168:6;17158:17;;;;;;;;;;;;;;;:42;;;;17246:6;17222:9;:20;17232:9;17222:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17287:9;17270:35;;17279:6;17270:35;;;17298:6;17270:35;;;;;;:::i;:::-;;;;;;;;17318:46;17338:6;17346:9;17357:6;17318:19;:46::i;:::-;16723:649;16602:770;;;:::o;44608:1095::-;44661:23;44687:24;44705:4;44687:9;:24::i;:::-;44661:50;;44722:25;44750:15;44722:43;;44776:12;44824:1;44805:15;:20;44801:59;;44842:7;;;;;44801:59;44894:16;;44876:15;:34;44872:101;;;44945:16;;44927:34;;44872:101;44989:4;;;;;;;;;;;:36;;;;;45024:1;45015:6;:10;;;;:::i;:::-;44997:15;:28;44989:36;44985:97;;;45069:1;45060:6;:10;;;;:::i;:::-;45042:28;;44985:97;45094:26;45123:15;45094:44;;45151:25;45179:21;45151:49;;45213:36;45230:18;45213:16;:36::i;:::-;45262:18;45283:44;45309:17;45283:21;:25;;:44;;;;:::i;:::-;45262:65;;45340:17;45360:79;45411:17;45360:32;45375:16;;45360:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;45340:99;;45473:1;45452:18;:22;;;;45504:1;45485:16;:20;;;;45540:13;;;;;;;;;;;45532:27;;45567:9;45532:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45518:63;;;;;45616:15;;;;;;;;;;;45608:29;;45659:21;45608:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45594:101;;;;;44650:1053;;;;;;;44608:1095;;:::o;3374:98::-;3432:7;3463:1;3459;:5;;;;:::i;:::-;3452:12;;3374:98;;;;:::o;3773:::-;3831:7;3862:1;3858;:5;;;;:::i;:::-;3851:12;;3773:98;;;;:::o;20400:125::-;;;;:::o;21129:124::-;;;;:::o;43917:571::-;44043:21;44081:1;44067:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44043:40;;44112:4;44094;44099:1;44094:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44138:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44128:4;44133:1;44128:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;44167:56;44184:4;44199:9;44211:11;44167:8;:56::i;:::-;44262:9;:60;;;44337:11;44363:1;44407:4;44434;44454:15;44262:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43972:516;43917:571;:::o;3017:98::-;3075:7;3106:1;3102;:5;;;;:::i;:::-;3095:12;;3017:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:430::-;3713:4;3751:2;3740:9;3736:18;3728:26;;3764:65;3826:1;3815:9;3811:17;3802:6;3764:65;:::i;:::-;3839:72;3907:2;3896:9;3892:18;3883:6;3839:72;:::i;:::-;3921;3989:2;3978:9;3974:18;3965:6;3921:72;:::i;:::-;3570:430;;;;;;:::o;4006:222::-;4099:4;4137:2;4126:9;4122:18;4114:26;;4150:71;4218:1;4207:9;4203:17;4194:6;4150:71;:::i;:::-;4006:222;;;;:::o;4234:116::-;4304:21;4319:5;4304:21;:::i;:::-;4297:5;4294:32;4284:60;;4340:1;4337;4330:12;4284:60;4234:116;:::o;4356:133::-;4399:5;4437:6;4424:20;4415:29;;4453:30;4477:5;4453:30;:::i;:::-;4356:133;;;;:::o;4495:468::-;4560:6;4568;4617:2;4605:9;4596:7;4592:23;4588:32;4585:119;;;4623:79;;:::i;:::-;4585:119;4743:1;4768:53;4813:7;4804:6;4793:9;4789:22;4768:53;:::i;:::-;4758:63;;4714:117;4870:2;4896:50;4938:7;4929:6;4918:9;4914:22;4896:50;:::i;:::-;4886:60;;4841:115;4495:468;;;;;:::o;4969:619::-;5046:6;5054;5062;5111:2;5099:9;5090:7;5086:23;5082:32;5079:119;;;5117:79;;:::i;:::-;5079:119;5237:1;5262:53;5307:7;5298:6;5287:9;5283:22;5262:53;:::i;:::-;5252:63;;5208:117;5364:2;5390:53;5435:7;5426:6;5415:9;5411:22;5390:53;:::i;:::-;5380:63;;5335:118;5492:2;5518:53;5563:7;5554:6;5543:9;5539:22;5518:53;:::i;:::-;5508:63;;5463:118;4969:619;;;;;:::o;5594:474::-;5662:6;5670;5719:2;5707:9;5698:7;5694:23;5690:32;5687:119;;;5725:79;;:::i;:::-;5687:119;5845:1;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5816:117;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;5594:474;;;;;:::o;6074:86::-;6109:7;6149:4;6142:5;6138:16;6127:27;;6074:86;;;:::o;6166:112::-;6249:22;6265:5;6249:22;:::i;:::-;6244:3;6237:35;6166:112;;:::o;6284:214::-;6373:4;6411:2;6400:9;6396:18;6388:26;;6424:67;6488:1;6477:9;6473:17;6464:6;6424:67;:::i;:::-;6284:214;;;;:::o;6504:329::-;6563:6;6612:2;6600:9;6591:7;6587:23;6583:32;6580:119;;;6618:79;;:::i;:::-;6580:119;6738:1;6763:53;6808:7;6799:6;6788:9;6784:22;6763:53;:::i;:::-;6753:63;;6709:117;6504:329;;;;:::o;6839:775::-;7072:4;7110:3;7099:9;7095:19;7087:27;;7124:71;7192:1;7181:9;7177:17;7168:6;7124:71;:::i;:::-;7205:72;7273:2;7262:9;7258:18;7249:6;7205:72;:::i;:::-;7287;7355:2;7344:9;7340:18;7331:6;7287:72;:::i;:::-;7369;7437:2;7426:9;7422:18;7413:6;7369:72;:::i;:::-;7451:73;7519:3;7508:9;7504:19;7495:6;7451:73;:::i;:::-;7534;7602:3;7591:9;7587:19;7578:6;7534:73;:::i;:::-;6839:775;;;;;;;;;:::o;7620:329::-;7679:6;7728:2;7716:9;7707:7;7703:23;7699:32;7696:119;;;7734:79;;:::i;:::-;7696:119;7854:1;7879:53;7924:7;7915:6;7904:9;7900:22;7879:53;:::i;:::-;7869:63;;7825:117;7620:329;;;;:::o;7955:323::-;8011:6;8060:2;8048:9;8039:7;8035:23;8031:32;8028:119;;;8066:79;;:::i;:::-;8028:119;8186:1;8211:50;8253:7;8244:6;8233:9;8229:22;8211:50;:::i;:::-;8201:60;;8157:114;7955:323;;;;:::o;8284:118::-;8371:24;8389:5;8371:24;:::i;:::-;8366:3;8359:37;8284:118;;:::o;8408:222::-;8501:4;8539:2;8528:9;8524:18;8516:26;;8552:71;8620:1;8609:9;8605:17;8596:6;8552:71;:::i;:::-;8408:222;;;;:::o;8636:613::-;8710:6;8718;8726;8775:2;8763:9;8754:7;8750:23;8746:32;8743:119;;;8781:79;;:::i;:::-;8743:119;8901:1;8926:50;8968:7;8959:6;8948:9;8944:22;8926:50;:::i;:::-;8916:60;;8872:114;9025:2;9051:53;9096:7;9087:6;9076:9;9072:22;9051:53;:::i;:::-;9041:63;;8996:118;9153:2;9179:53;9224:7;9215:6;9204:9;9200:22;9179:53;:::i;:::-;9169:63;;9124:118;8636:613;;;;;:::o;9255:474::-;9323:6;9331;9380:2;9368:9;9359:7;9355:23;9351:32;9348:119;;;9386:79;;:::i;:::-;9348:119;9506:1;9531:53;9576:7;9567:6;9556:9;9552:22;9531:53;:::i;:::-;9521:63;;9477:117;9633:2;9659:53;9704:7;9695:6;9684:9;9680:22;9659:53;:::i;:::-;9649:63;;9604:118;9255:474;;;;;:::o;9735:332::-;9856:4;9894:2;9883:9;9879:18;9871:26;;9907:71;9975:1;9964:9;9960:17;9951:6;9907:71;:::i;:::-;9988:72;10056:2;10045:9;10041:18;10032:6;9988:72;:::i;:::-;9735:332;;;;;:::o;10073:406::-;10204:4;10242:2;10231:9;10227:18;10219:26;;10255:65;10317:1;10306:9;10302:17;10293:6;10255:65;:::i;:::-;10330:66;10392:2;10381:9;10377:18;10368:6;10330:66;:::i;:::-;10406;10468:2;10457:9;10453:18;10444:6;10406:66;:::i;:::-;10073:406;;;;;;:::o;10485:180::-;10533:77;10530:1;10523:88;10630:4;10627:1;10620:15;10654:4;10651:1;10644:15;10671:320;10715:6;10752:1;10746:4;10742:12;10732:22;;10799:1;10793:4;10789:12;10820:18;10810:81;;10876:4;10868:6;10864:17;10854:27;;10810:81;10938:2;10930:6;10927:14;10907:18;10904:38;10901:84;;10957:18;;:::i;:::-;10901:84;10722:269;10671:320;;;:::o;10997:182::-;11137:34;11133:1;11125:6;11121:14;11114:58;10997:182;:::o;11185:366::-;11327:3;11348:67;11412:2;11407:3;11348:67;:::i;:::-;11341:74;;11424:93;11513:3;11424:93;:::i;:::-;11542:2;11537:3;11533:12;11526:19;;11185:366;;;:::o;11557:419::-;11723:4;11761:2;11750:9;11746:18;11738:26;;11810:9;11804:4;11800:20;11796:1;11785:9;11781:17;11774:47;11838:131;11964:4;11838:131;:::i;:::-;11830:139;;11557:419;;;:::o;11982:227::-;12122:34;12118:1;12110:6;12106:14;12099:58;12191:10;12186:2;12178:6;12174:15;12167:35;11982:227;:::o;12215:366::-;12357:3;12378:67;12442:2;12437:3;12378:67;:::i;:::-;12371:74;;12454:93;12543:3;12454:93;:::i;:::-;12572:2;12567:3;12563:12;12556:19;;12215:366;;;:::o;12587:419::-;12753:4;12791:2;12780:9;12776:18;12768:26;;12840:9;12834:4;12830:20;12826:1;12815:9;12811:17;12804:47;12868:131;12994:4;12868:131;:::i;:::-;12860:139;;12587:419;;;:::o;13012:180::-;13060:77;13057:1;13050:88;13157:4;13154:1;13147:15;13181:4;13178:1;13171:15;13198:191;13238:3;13257:20;13275:1;13257:20;:::i;:::-;13252:25;;13291:20;13309:1;13291:20;:::i;:::-;13286:25;;13334:1;13331;13327:9;13320:16;;13355:3;13352:1;13349:10;13346:36;;;13362:18;;:::i;:::-;13346:36;13198:191;;;;:::o;13395:228::-;13535:34;13531:1;13523:6;13519:14;13512:58;13604:11;13599:2;13591:6;13587:15;13580:36;13395:228;:::o;13629:366::-;13771:3;13792:67;13856:2;13851:3;13792:67;:::i;:::-;13785:74;;13868:93;13957:3;13868:93;:::i;:::-;13986:2;13981:3;13977:12;13970:19;;13629:366;;;:::o;14001:419::-;14167:4;14205:2;14194:9;14190:18;14182:26;;14254:9;14248:4;14244:20;14240:1;14229:9;14225:17;14218:47;14282:131;14408:4;14282:131;:::i;:::-;14274:139;;14001:419;;;:::o;14426:442::-;14575:4;14613:2;14602:9;14598:18;14590:26;;14626:71;14694:1;14683:9;14679:17;14670:6;14626:71;:::i;:::-;14707:72;14775:2;14764:9;14760:18;14751:6;14707:72;:::i;:::-;14789;14857:2;14846:9;14842:18;14833:6;14789:72;:::i;:::-;14426:442;;;;;;:::o;14874:182::-;15014:34;15010:1;15002:6;14998:14;14991:58;14874:182;:::o;15062:366::-;15204:3;15225:67;15289:2;15284:3;15225:67;:::i;:::-;15218:74;;15301:93;15390:3;15301:93;:::i;:::-;15419:2;15414:3;15410:12;15403:19;;15062:366;;;:::o;15434:419::-;15600:4;15638:2;15627:9;15623:18;15615:26;;15687:9;15681:4;15677:20;15673:1;15662:9;15658:17;15651:47;15715:131;15841:4;15715:131;:::i;:::-;15707:139;;15434:419;;;:::o;15859:410::-;15899:7;15922:20;15940:1;15922:20;:::i;:::-;15917:25;;15956:20;15974:1;15956:20;:::i;:::-;15951:25;;16011:1;16008;16004:9;16033:30;16051:11;16033:30;:::i;:::-;16022:41;;16212:1;16203:7;16199:15;16196:1;16193:22;16173:1;16166:9;16146:83;16123:139;;16242:18;;:::i;:::-;16123:139;15907:362;15859:410;;;;:::o;16275:180::-;16323:77;16320:1;16313:88;16420:4;16417:1;16410:15;16444:4;16441:1;16434:15;16461:185;16501:1;16518:20;16536:1;16518:20;:::i;:::-;16513:25;;16552:20;16570:1;16552:20;:::i;:::-;16547:25;;16591:1;16581:35;;16596:18;;:::i;:::-;16581:35;16638:1;16635;16631:9;16626:14;;16461:185;;;;:::o;16652:239::-;16792:34;16788:1;16780:6;16776:14;16769:58;16861:22;16856:2;16848:6;16844:15;16837:47;16652:239;:::o;16897:366::-;17039:3;17060:67;17124:2;17119:3;17060:67;:::i;:::-;17053:74;;17136:93;17225:3;17136:93;:::i;:::-;17254:2;17249:3;17245:12;17238:19;;16897:366;;;:::o;17269:419::-;17435:4;17473:2;17462:9;17458:18;17450:26;;17522:9;17516:4;17512:20;17508:1;17497:9;17493:17;17486:47;17550:131;17676:4;17550:131;:::i;:::-;17542:139;;17269:419;;;:::o;17694:229::-;17834:34;17830:1;17822:6;17818:14;17811:58;17903:12;17898:2;17890:6;17886:15;17879:37;17694:229;:::o;17929:366::-;18071:3;18092:67;18156:2;18151:3;18092:67;:::i;:::-;18085:74;;18168:93;18257:3;18168:93;:::i;:::-;18286:2;18281:3;18277:12;18270:19;;17929:366;;;:::o;18301:419::-;18467:4;18505:2;18494:9;18490:18;18482:26;;18554:9;18548:4;18544:20;18540:1;18529:9;18525:17;18518:47;18582:131;18708:4;18582:131;:::i;:::-;18574:139;;18301:419;;;:::o;18726:227::-;18866:34;18862:1;18854:6;18850:14;18843:58;18935:10;18930:2;18922:6;18918:15;18911:35;18726:227;:::o;18959:366::-;19101:3;19122:67;19186:2;19181:3;19122:67;:::i;:::-;19115:74;;19198:93;19287:3;19198:93;:::i;:::-;19316:2;19311:3;19307:12;19300:19;;18959:366;;;:::o;19331:419::-;19497:4;19535:2;19524:9;19520:18;19512:26;;19584:9;19578:4;19574:20;19570:1;19559:9;19555:17;19548:47;19612:131;19738:4;19612:131;:::i;:::-;19604:139;;19331:419;;;:::o;19756:244::-;19896:34;19892:1;19884:6;19880:14;19873:58;19965:27;19960:2;19952:6;19948:15;19941:52;19756:244;:::o;20006:366::-;20148:3;20169:67;20233:2;20228:3;20169:67;:::i;:::-;20162:74;;20245:93;20334:3;20245:93;:::i;:::-;20363:2;20358:3;20354:12;20347:19;;20006:366;;;:::o;20378:419::-;20544:4;20582:2;20571:9;20567:18;20559:26;;20631:9;20625:4;20621:20;20617:1;20606:9;20602:17;20595:47;20659:131;20785:4;20659:131;:::i;:::-;20651:139;;20378:419;;;:::o;20803:224::-;20943:34;20939:1;20931:6;20927:14;20920:58;21012:7;21007:2;20999:6;20995:15;20988:32;20803:224;:::o;21033:366::-;21175:3;21196:67;21260:2;21255:3;21196:67;:::i;:::-;21189:74;;21272:93;21361:3;21272:93;:::i;:::-;21390:2;21385:3;21381:12;21374:19;;21033:366;;;:::o;21405:419::-;21571:4;21609:2;21598:9;21594:18;21586:26;;21658:9;21652:4;21648:20;21644:1;21633:9;21629:17;21622:47;21686:131;21812:4;21686:131;:::i;:::-;21678:139;;21405:419;;;:::o;21830:223::-;21970:34;21966:1;21958:6;21954:14;21947:58;22039:6;22034:2;22026:6;22022:15;22015:31;21830:223;:::o;22059:366::-;22201:3;22222:67;22286:2;22281:3;22222:67;:::i;:::-;22215:74;;22298:93;22387:3;22298:93;:::i;:::-;22416:2;22411:3;22407:12;22400:19;;22059:366;;;:::o;22431:419::-;22597:4;22635:2;22624:9;22620:18;22612:26;;22684:9;22678:4;22674:20;22670:1;22659:9;22655:17;22648:47;22712:131;22838:4;22712:131;:::i;:::-;22704:139;;22431:419;;;:::o;22856:225::-;22996:34;22992:1;22984:6;22980:14;22973:58;23065:8;23060:2;23052:6;23048:15;23041:33;22856:225;:::o;23087:366::-;23229:3;23250:67;23314:2;23309:3;23250:67;:::i;:::-;23243:74;;23326:93;23415:3;23326:93;:::i;:::-;23444:2;23439:3;23435:12;23428:19;;23087:366;;;:::o;23459:419::-;23625:4;23663:2;23652:9;23648:18;23640:26;;23712:9;23706:4;23702:20;23698:1;23687:9;23683:17;23676:47;23740:131;23866:4;23740:131;:::i;:::-;23732:139;;23459:419;;;:::o;23884:223::-;24024:34;24020:1;24012:6;24008:14;24001:58;24093:6;24088:2;24080:6;24076:15;24069:31;23884:223;:::o;24113:366::-;24255:3;24276:67;24340:2;24335:3;24276:67;:::i;:::-;24269:74;;24352:93;24441:3;24352:93;:::i;:::-;24470:2;24465:3;24461:12;24454:19;;24113:366;;;:::o;24485:419::-;24651:4;24689:2;24678:9;24674:18;24666:26;;24738:9;24732:4;24728:20;24724:1;24713:9;24709:17;24702:47;24766:131;24892:4;24766:131;:::i;:::-;24758:139;;24485:419;;;:::o;24910:221::-;25050:34;25046:1;25038:6;25034:14;25027:58;25119:4;25114:2;25106:6;25102:15;25095:29;24910:221;:::o;25137:366::-;25279:3;25300:67;25364:2;25359:3;25300:67;:::i;:::-;25293:74;;25376:93;25465:3;25376:93;:::i;:::-;25494:2;25489:3;25485:12;25478:19;;25137:366;;;:::o;25509:419::-;25675:4;25713:2;25702:9;25698:18;25690:26;;25762:9;25756:4;25752:20;25748:1;25737:9;25733:17;25726:47;25790:131;25916:4;25790:131;:::i;:::-;25782:139;;25509:419;;;:::o;25934:224::-;26074:34;26070:1;26062:6;26058:14;26051:58;26143:7;26138:2;26130:6;26126:15;26119:32;25934:224;:::o;26164:366::-;26306:3;26327:67;26391:2;26386:3;26327:67;:::i;:::-;26320:74;;26403:93;26492:3;26403:93;:::i;:::-;26521:2;26516:3;26512:12;26505:19;;26164:366;;;:::o;26536:419::-;26702:4;26740:2;26729:9;26725:18;26717:26;;26789:9;26783:4;26779:20;26775:1;26764:9;26760:17;26753:47;26817:131;26943:4;26817:131;:::i;:::-;26809:139;;26536:419;;;:::o;26961:222::-;27101:34;27097:1;27089:6;27085:14;27078:58;27170:5;27165:2;27157:6;27153:15;27146:30;26961:222;:::o;27189:366::-;27331:3;27352:67;27416:2;27411:3;27352:67;:::i;:::-;27345:74;;27428:93;27517:3;27428:93;:::i;:::-;27546:2;27541:3;27537:12;27530:19;;27189:366;;;:::o;27561:419::-;27727:4;27765:2;27754:9;27750:18;27742:26;;27814:9;27808:4;27804:20;27800:1;27789:9;27785:17;27778:47;27842:131;27968:4;27842:131;:::i;:::-;27834:139;;27561:419;;;:::o;27986:221::-;28126:34;28122:1;28114:6;28110:14;28103:58;28195:4;28190:2;28182:6;28178:15;28171:29;27986:221;:::o;28213:366::-;28355:3;28376:67;28440:2;28435:3;28376:67;:::i;:::-;28369:74;;28452:93;28541:3;28452:93;:::i;:::-;28570:2;28565:3;28561:12;28554:19;;28213:366;;;:::o;28585:419::-;28751:4;28789:2;28778:9;28774:18;28766:26;;28838:9;28832:4;28828:20;28824:1;28813:9;28809:17;28802:47;28866:131;28992:4;28866:131;:::i;:::-;28858:139;;28585:419;;;:::o;29010:225::-;29150:34;29146:1;29138:6;29134:14;29127:58;29219:8;29214:2;29206:6;29202:15;29195:33;29010:225;:::o;29241:366::-;29383:3;29404:67;29468:2;29463:3;29404:67;:::i;:::-;29397:74;;29480:93;29569:3;29480:93;:::i;:::-;29598:2;29593:3;29589:12;29582:19;;29241:366;;;:::o;29613:419::-;29779:4;29817:2;29806:9;29802:18;29794:26;;29866:9;29860:4;29856:20;29852:1;29841:9;29837:17;29830:47;29894:131;30020:4;29894:131;:::i;:::-;29886:139;;29613:419;;;:::o;30038:169::-;30178:21;30174:1;30166:6;30162:14;30155:45;30038:169;:::o;30213:366::-;30355:3;30376:67;30440:2;30435:3;30376:67;:::i;:::-;30369:74;;30452:93;30541:3;30452:93;:::i;:::-;30570:2;30565:3;30561:12;30554:19;;30213:366;;;:::o;30585:419::-;30751:4;30789:2;30778:9;30774:18;30766:26;;30838:9;30832:4;30828:20;30824:1;30813:9;30809:17;30802:47;30866:131;30992:4;30866:131;:::i;:::-;30858:139;;30585:419;;;:::o;31010:226::-;31150:34;31146:1;31138:6;31134:14;31127:58;31219:9;31214:2;31206:6;31202:15;31195:34;31010:226;:::o;31242:366::-;31384:3;31405:67;31469:2;31464:3;31405:67;:::i;:::-;31398:74;;31481:93;31570:3;31481:93;:::i;:::-;31599:2;31594:3;31590:12;31583:19;;31242:366;;;:::o;31614:419::-;31780:4;31818:2;31807:9;31803:18;31795:26;;31867:9;31861:4;31857:20;31853:1;31842:9;31838:17;31831:47;31895:131;32021:4;31895:131;:::i;:::-;31887:139;;31614:419;;;:::o;32039:194::-;32079:4;32099:20;32117:1;32099:20;:::i;:::-;32094:25;;32133:20;32151:1;32133:20;:::i;:::-;32128:25;;32177:1;32174;32170:9;32162:17;;32201:1;32195:4;32192:11;32189:37;;;32206:18;;:::i;:::-;32189:37;32039:194;;;;:::o;32239:225::-;32379:34;32375:1;32367:6;32363:14;32356:58;32448:8;32443:2;32435:6;32431:15;32424:33;32239:225;:::o;32470:366::-;32612:3;32633:67;32697:2;32692:3;32633:67;:::i;:::-;32626:74;;32709:93;32798:3;32709:93;:::i;:::-;32827:2;32822:3;32818:12;32811:19;;32470:366;;;:::o;32842:419::-;33008:4;33046:2;33035:9;33031:18;33023:26;;33095:9;33089:4;33085:20;33081:1;33070:9;33066:17;33059:47;33123:131;33249:4;33123:131;:::i;:::-;33115:139;;32842:419;;;:::o;33267:147::-;33368:11;33405:3;33390:18;;33267:147;;;;:::o;33420:114::-;;:::o;33540:398::-;33699:3;33720:83;33801:1;33796:3;33720:83;:::i;:::-;33713:90;;33812:93;33901:3;33812:93;:::i;:::-;33930:1;33925:3;33921:11;33914:18;;33540:398;;;:::o;33944:379::-;34128:3;34150:147;34293:3;34150:147;:::i;:::-;34143:154;;34314:3;34307:10;;33944:379;;;:::o;34329:180::-;34377:77;34374:1;34367:88;34474:4;34471:1;34464:15;34498:4;34495:1;34488:15;34515:180;34563:77;34560:1;34553:88;34660:4;34657:1;34650:15;34684:4;34681:1;34674:15;34701:143;34758:5;34789:6;34783:13;34774:22;;34805:33;34832:5;34805:33;:::i;:::-;34701:143;;;;:::o;34850:351::-;34920:6;34969:2;34957:9;34948:7;34944:23;34940:32;34937:119;;;34975:79;;:::i;:::-;34937:119;35095:1;35120:64;35176:7;35167:6;35156:9;35152:22;35120:64;:::i;:::-;35110:74;;35066:128;34850:351;;;;:::o;35207:85::-;35252:7;35281:5;35270:16;;35207:85;;;:::o;35298:60::-;35326:3;35347:5;35340:12;;35298:60;;;:::o;35364:158::-;35422:9;35455:61;35473:42;35482:32;35508:5;35482:32;:::i;:::-;35473:42;:::i;:::-;35455:61;:::i;:::-;35442:74;;35364:158;;;:::o;35528:147::-;35623:45;35662:5;35623:45;:::i;:::-;35618:3;35611:58;35528:147;;:::o;35681:114::-;35748:6;35782:5;35776:12;35766:22;;35681:114;;;:::o;35801:184::-;35900:11;35934:6;35929:3;35922:19;35974:4;35969:3;35965:14;35950:29;;35801:184;;;;:::o;35991:132::-;36058:4;36081:3;36073:11;;36111:4;36106:3;36102:14;36094:22;;35991:132;;;:::o;36129:108::-;36206:24;36224:5;36206:24;:::i;:::-;36201:3;36194:37;36129:108;;:::o;36243:179::-;36312:10;36333:46;36375:3;36367:6;36333:46;:::i;:::-;36411:4;36406:3;36402:14;36388:28;;36243:179;;;;:::o;36428:113::-;36498:4;36530;36525:3;36521:14;36513:22;;36428:113;;;:::o;36577:732::-;36696:3;36725:54;36773:5;36725:54;:::i;:::-;36795:86;36874:6;36869:3;36795:86;:::i;:::-;36788:93;;36905:56;36955:5;36905:56;:::i;:::-;36984:7;37015:1;37000:284;37025:6;37022:1;37019:13;37000:284;;;37101:6;37095:13;37128:63;37187:3;37172:13;37128:63;:::i;:::-;37121:70;;37214:60;37267:6;37214:60;:::i;:::-;37204:70;;37060:224;37047:1;37044;37040:9;37035:14;;37000:284;;;37004:14;37300:3;37293:10;;36701:608;;;36577:732;;;;:::o;37315:831::-;37578:4;37616:3;37605:9;37601:19;37593:27;;37630:71;37698:1;37687:9;37683:17;37674:6;37630:71;:::i;:::-;37711:80;37787:2;37776:9;37772:18;37763:6;37711:80;:::i;:::-;37838:9;37832:4;37828:20;37823:2;37812:9;37808:18;37801:48;37866:108;37969:4;37960:6;37866:108;:::i;:::-;37858:116;;37984:72;38052:2;38041:9;38037:18;38028:6;37984:72;:::i;:::-;38066:73;38134:3;38123:9;38119:19;38110:6;38066:73;:::i;:::-;37315:831;;;;;;;;:::o
Swarm Source
ipfs://8a5eebcd76e17d8c3de753c2764a9920cacd1deacaf665766d681eb01e65730f
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.